什麼是git?php
Git是目前世界使用最普遍的分佈式版本控制系統,它是由林納斯·託瓦茲(Linus Torvalds)創做,最初的目的是爲了更好地管理Linux內核開發而設計的。html
與svn對比優缺點?linux
一、與svn對比最核心區別就是Git是分佈式,而svn是非分佈式。這主要表如今使用Git時每個開發人員電腦本地上存在一個Local Repository,這個Local Repository包含着遠程庫中的全部文件,所以,即便在沒網的時候也能夠進行commit提交,查看歷史版本記錄,建立項目分支等操做,等網絡再次鏈接上Push到Server端。git
二、Git把內容按元數據方式存儲,而SVN是按文件方式存儲。表現爲.git文件與.svn文件大小區別很大算法
三、SVN存在一個自增的全局版本號;而Git每次提交,經過對文件的內容或目錄的結構計算出一個SHA-1 哈希值,獲得一個40位的十六進制字符串,以此來做爲版本號。shell
四、Git的內容的完整性要優於SVN:Git的內容存儲使用的是SHA-1哈希算法。Linux kernel開創者和Git的開發者——Linus說,Git使用了SHA-1並不是是爲了安全性,而是爲了數據的完整性;它能夠保證,在不少年後,你從新checkout某個commit時,必定是它多年前的當時的狀態,徹底一摸同樣,徹底值得信任。vim
五、Git下載下來後,在OffLine狀態下能夠看到全部的Log,SVN不能夠。安全
六、SVN必須先Update才能Commit,忘記合併時就會出現一些錯誤,git仍是比較少的出現這種狀況。bash
七、克隆一個新項目,Git只需克隆master分支;svn則須要複製全部的版本。Git省時。服務器
八、 版本庫(repository):SVN只能有一個指定中央版本庫。當這個中央版本庫有問題時,全部工做成員都一塊兒癱瘓直到版本庫維修完畢或者新的版本庫設立完成。而 Git能夠有無限個版本庫。或者,更正確的說法,每個Git都是一個版本庫,區別是它們是否擁有活躍目錄(Git Working Tree)。若是主要版本庫(例如:置於GitHub的版本庫)發生了什麼事,工做成員仍然能夠在本身的本地版本庫(local repository)提交,等待主要版本庫恢復便可。工做成員也能夠提交到其餘的版本庫!
安裝環境:Linux CentOS7
我直接使用yum安裝,直接在linux中執行下面兩行命令
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel //安裝依賴 yum install git //安裝Git 也能夠直接運行yum intall git yum會自動安裝軟件依賴
這樣子Git環境就安裝好了,接下老就是權限設置,哪些人能夠訪問這個Git服務器呢?
一、首先建立一個用戶組以及用戶
1 groupadd git //建立git用戶組 2 useradd git -g git //建立git用戶,用來運行git服務
二、收集所需登錄用戶的公鑰,並將公鑰導入到/home/git/.ssh/authorized_keys文件裏,一行一個。
Linux中的公鑰在每一個用戶的home目錄下(/home/用戶/.ssh),沒有則使用命令進行建立:ssh-keygen -t rsa
Windowns中的公鑰建立:
使用git,打開Git Bash。
1. 安裝git,從程序目錄打開 "Git Bash"
2. 鍵入命令:ssh-keygen -t rsa -C "suifengin412@gmail.com" //紅色字體無關緊要
3. 指定文件生成的目錄
4. 在指定的目錄下產生兩個文件:id_rsa和id_rsa.pub
進入git家目錄,將收集的公鑰(id_rsa.pub裏面的內容),添加到authorized_keys文件中(一行一個)。
沒有authorized_keys文件則建立:
cd /home/git/
mkdir .ssh
chmod 700 .ssh vim .ssh/authorized_keys chmod 600 .ssh/authorized_keys
注意:.ssh 目錄必須是700權限、authorized_keys文件必須是600權限
一、建立登錄用戶並添加到git用戶組中
useradd -M git1 //-M 表示不建立家目錄 useradd -M git2 passwd git1 //設置密碼 passwd git2 usermod -G git git1 //將新建的兩個用戶添加到git組中 usermod -G git git2
二、禁止新建立的用戶ssh登錄linux服務器
which git-shell //查看git-shell所在路徑 (個人是:/usr/bin/git-shell) vim /etc/passwd //將用戶名稱:x:1000:1000::/home/用戶名稱:/bin/bash 將/bin/bash替換爲git-shell所在路徑
注意:
建立用戶的時候加-M,主要目的是不在home目錄下生成該用戶的擁有讀寫權限的家目錄。這是由於咱們建立的這些用戶是用於git服務上面,並不想給用戶除了git訪問之外其餘的權限;同理,需禁止用戶經過ssh登錄linux服務器。
咱們就選取git目錄做爲git的倉庫
chmod g-w /home/git //這個是必要的 cd /home/git //進入git家目錄 git init --bare test.git //建立一個空倉庫,服務器上的Git倉庫一般都以.git結尾 chown -R git:git test.git/ //設置權限,由於我使用root來建立這個空倉庫,所以須要變相應的權限設置 chmod -R 775 test.git/ //設置所屬組的全部權限,不然祕鑰類型push不成功
注意:變動文件的全部者以及組權限很是重要,切記。
git clone git@git_ip:/home/gitrepo/runoob.git //git_ip爲Git所在服務器ip ,須要將其修改成你本身的 Git 服務ip。
(以上是本身的一些看法,如有不足或者錯誤的地方請各位指出)
做者:那一葉隨風 http://www.cnblogs.com/phpstudy2015-6/
原文地址:http://www.javashuo.com/article/p-plvpxvpp-p.html
聲明:本博客文章爲原創,只表明本人在工做學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文連接