前面寫了svn相關的配置和學習,咱們本身目前在用的也是svn。其大多爲開發在用,且權限也分配的很精細。因此通常不須要過多的操做什麼。備份方面,除了腳本備份,還有共享存儲。因此通常也不會有什麼問題。python
趁這幾天順便把Git也學習下,以防之後會用到這個。Git的好處就不在此多說了,相比svn那也能夠羅列不少出來。另外一個,git和github結合也是很好的,衝這個也應該學習下。git
因爲以前的svn用到了很精細的權限控制,因此這裏結合Gitolite來一塊兒學習下。因此就分server和client。github
1、Client端:windows
Linux下若是有就不須要在安裝了,有沒有用命令看下就好,直接在命令行敲 git 不報錯即OK。沒有用yum安裝git就行了,windows下到官網下載安裝包,直接下一步就OK。Git官網:http://git-scm.com/download/ 若是你打不開,那你懂的......服務器
windows下安裝OK了,會有Git Bash的命令行工具。點擊進去後以下:app
運行正常的話,咱們來生成個祕鑰,來爲之後管理git使用。我已經生成過了,因此這裏命令就不執行了。執行ssh-keygen -t rsa一路回車便可在當前用戶的家目錄下生成祕鑰。dom
如今要把公鑰重命名下(爲了方便識別用戶)並上傳到準備安裝Git的服務器作認證。ssh
目前爲止,client能夠先作這麼多了,若是是Linux的client,也是同樣的操做。相對更方便些。
ide
2、Server端:svn
目前CentOS6已經集成了Git,因此無需再去安裝Git,可是要用到Gitolite,就須要安裝了。
# cat /etc/issue CentOS release 6.2 (Final) # rpm -qa git git-1.7.1-2.el6_0.1.x86_64 # 新建倉庫目錄 # mkdir /src/project -pv # 新建git用戶管理git # useradd git # 作一個倉庫的連接到家目錄下的 # chown -R git.git /src # su - git $ ln -sv /src/project /home/git/repositories # clone gitolite倉庫 $ git clone git://github.com/sitaramc/gitolite $ pwd /home/git/gitolite $ ./install --help # 能夠查看安裝的一些參數說明等信息 $ mkdir ../bin # 在家目錄建立一個bin目錄來安裝 $ ./install -to /home/git/bin/ # 就是cp目錄下的src目錄 # 使用公鑰建立初始化版本庫 $ gitolite setup -pk /tmp/chenfeng.pub Initialized empty Git repository in /src/project/gitolite-admin.git/ Initialized empty Git repository in /src/project/testing.git/ # 這樣就說明成功了。 $ pwd /home/git/repositories $ ls gitolite-admin.git testing.git # 能夠看到兩個目錄,一個帳戶管理的,一個測試的 # 如今client就能夠clone版本庫,並進行用戶管理和代碼編寫工做了。
簽出版本前,咱們能夠測試下ssh的公鑰認證是否成功:
如上信息。說明ssh公鑰認證已正常。並且也顯示了對哪些庫有什麼權限。不然就要檢查。
3、客戶端簽出版本庫
服務器端的Git是爲了用戶共享項目的,因此不該該直接在服務器上操做。這裏就在客戶端簽出並管理用戶和版本庫。
從上面能夠看到,版本庫簽出正常。能夠看到簽出的gitolite-admin管理庫下有兩個文件夾
conf: 配置用戶權限的文件夾
keydir: 公鑰存放位置
下面對這兩個進行說明:
從內容就很容易看到咱們上次的ssh測試時看到權限的定義。此時咱們把testing這個庫的權限更改下來測試看下效果:
上述的幾個命令的意思:
git add .: 添加已修改的文件到暫存區
git commit -am "some information": 把已修改的文件都添加到暫存區並提交到倉庫
git push origin master: 推送到Git服務器到主版本
明白上述幾個參數的意思後,如今來看在同步testing的庫的時候看看是什麼結果:
此時就報錯了,提示沒有權限或者訪問的庫不存在。從這裏就能夠看到簡單的權限控制了,其實跟svn的差異不是很大。
4、設置其餘用戶權限
如今本地的windows客戶端已是管理員權限了,假設咱們又有一臺Linux的客戶端也須要使用,若是給他權限,下面就來演示:
首先生成祕鑰:
# ssh-keygen -t rsa # cd .ssh/ # mv id_rsa.pub 104.pub # 重命名是爲了方便識別的 # yum -y install lrzsz # sz 104.pub # 下載到windows上,並放到windows上的gitolite-admin下的keysdir # mkdir -pv /src/project # 新建版本庫的目錄
添加完成後,咱們在windows客戶端操做,使Git服務器識別該主機的信息
一、咱們首先把104加到testing庫的權限上
二、git status: 能夠查看當前的工做區的狀態信息(修改、新增等)
這裏直接省略了origin master這參數,可能會有警告。上述就是提交後並推送到服務器。此時,104這臺機器對testing庫就擁有了讀寫和更新的權限。這裏的用戶是和公鑰的名稱一致的。
在Linux 104客戶端作測試:
# cd /src/project # git clone git@10.95.10.103:testing Initialized empty Git repository in /src/project/testing/.git/ warning: You appear to have cloned an empty repository. # ls testing # 這裏看到能夠正常clone下一個testing庫。由於testing庫裏面沒有任何內容。因此提示爲空
到此,添加用戶以及受權基本完成。並學習了幾個命令。
5、新建項目庫並同步到服務器和其餘用戶協同工做
一、首先要先在服務器註冊庫並分配權限
git diff: 能夠顯示修改的文件內容。
從上述能夠看到
新增了一個用戶組:@platform_team,且有兩個用戶chengfeng 104
新增了一個庫:platform,且該組有讀寫更新權限,全部人有讀權限
此時,push後會自動在服務器端建立一個註冊的庫。
而後能夠在Linux客戶端和windows客戶端同時clone下來platform庫。
# git clone git@10.95.10.103:platform Initialized empty Git repository in /src/project/platform/.git/ warning: You appear to have cloned an empty repository. # ls platform testing # 如今能夠看到庫了。
二、建立第一個README文件
上面添加了一個README文件。並推送到了Git服務器。如今Linux客戶端能夠pull到最新的類容了。
# cd platform/ # git pull # 拉取Git服務器的最新數據 remote: Counting objects: 6, done. remote: Compressing objects: 100% (2/2), done. remote: Total 6 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (6/6), done. From 10.95.10.103:platform * [new branch] master -> origin/master # ls README # cat README This is Git Test File.
如今就能夠看到兩臺機器都有數據了。權限也是生效的。
6、Git的一些其餘命令
# git commit -m "add two lines." [master 0cf7775] add two lines. Committer: root <root@localhost.localdomain> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' #上述提示的是由於咱們在Linux客戶端第一次提交修改,因此須要設置一些參數,能夠設置爲全局參數,也能夠每次提交時都寫用戶和郵箱。下面咱們設置全局參數。 # git config --global user.name "104" # git config --global user.email "104@admin.com" # git add . # git commit -m "add two lines." # git push origin master Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 290 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@10.95.10.103:platform fe2f251..0cf7775 master -> master # 如今提交推送都正常了。
如今咱們在windows上checkout出最新版本:
如今假如咱們作了一些錯誤的修改,而且提交了。想回到爲提交以前的版本:
上面能夠看到我刪除了兩行,也添加了新行。
能夠看到已經回到了剛剛更新的狀態。命令以下:
git reset --hard HEAD^: 回到全部內容到上個版本,上上個就是:HEAD^^,上10個就是:HEAD~10
還有不少相關的命令須要慢慢去了解。
git revert HEAD: 撤銷某次提交,並生成一個新的提交
命令太多。之後用到再說...
若有錯誤,還請指出