Git / Gitolite 的應用學習

前面寫了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

wKiom1TdgjjgA27wAAEHkhpn8Qs587.jpg

運行正常的話,咱們來生成個祕鑰,來爲之後管理git使用。我已經生成過了,因此這裏命令就不執行了。執行ssh-keygen -t rsa一路回車便可在當前用戶的家目錄下生成祕鑰。dom

wKiom1TdonLg5HxHAADbitOPnKI801.jpg

如今要把公鑰重命名下(爲了方便識別用戶)並上傳到準備安裝Git的服務器作認證。ssh

wKiom1Tdo8zQea_gAADq1olVPMw188.jpg

目前爲止,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的公鑰認證是否成功:

wKioL1TdqZmAmWKBAAEqZ9dID8Y146.jpg

如上信息。說明ssh公鑰認證已正常。並且也顯示了對哪些庫有什麼權限。不然就要檢查。


3、客戶端簽出版本庫

服務器端的Git是爲了用戶共享項目的,因此不該該直接在服務器上操做。這裏就在客戶端簽出並管理用戶和版本庫。

wKiom1TdqRDS5QazAAHFdrXz8gw513.jpg

從上面能夠看到,版本庫簽出正常。能夠看到簽出的gitolite-admin管理庫下有兩個文件夾

conf: 配置用戶權限的文件夾

keydir: 公鑰存放位置

下面對這兩個進行說明:

wKiom1TdqcfSj_BrAAE-v0wetpY464.jpg

從內容就很容易看到咱們上次的ssh測試時看到權限的定義。此時咱們把testing這個庫的權限更改下來測試看下效果:

wKioL1TdrHWCGONCAALSL7PNGF8550.jpg

上述的幾個命令的意思:

git add .: 添加已修改的文件到暫存區

git commit -am "some information": 把已修改的文件都添加到暫存區並提交到倉庫

git push origin master: 推送到Git服務器到主版本

明白上述幾個參數的意思後,如今來看在同步testing的庫的時候看看是什麼結果:

wKioL1Tdrtfi-Ez0AAFY1qYPgmk105.jpg

此時就報錯了,提示沒有權限或者訪問的庫不存在。從這裏就能夠看到簡單的權限控制了,其實跟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服務器識別該主機的信息

wKioL1TdsSGCmhFeAAKJKPOlvw8999.jpg

一、咱們首先把104加到testing庫的權限上

二、git status: 能夠查看當前的工做區的狀態信息(修改、新增等)

wKioL1TdtXzgPWs4AAGSVgj6u_0863.jpg

wKiom1TdtISiR9MeAAH5b5HoK2A293.jpg

這裏直接省略了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、新建項目庫並同步到服務器和其餘用戶協同工做

一、首先要先在服務器註冊庫並分配權限

wKioL1TduaHBFSgIAAHD8282w-c966.jpg

git diff: 能夠顯示修改的文件內容。

從上述能夠看到

新增了一個用戶組:@platform_team,且有兩個用戶chengfeng 104

新增了一個庫:platform,且該組有讀寫更新權限,全部人有讀權限

wKiom1Tdz3-SxWgdAALhMEkvrVQ751.jpg

此時,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文件

wKiom1Td0gmiXZYkAAKKHneQc54820.jpg

上面添加了一個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出最新版本:

wKioL1TfBH2Tu5xKAADeSbA_Crs527.jpg

如今假如咱們作了一些錯誤的修改,而且提交了。想回到爲提交以前的版本:

wKioL1TfBbvCgqmQAAFakZSYQUI241.jpg

上面能夠看到我刪除了兩行,也添加了新行。

wKioL1TfBhGTgRlsAAEO3B8MbqI350.jpg

能夠看到已經回到了剛剛更新的狀態。命令以下:

git reset --hard HEAD^: 回到全部內容到上個版本,上上個就是:HEAD^^,上10個就是:HEAD~10

還有不少相關的命令須要慢慢去了解。

git revert HEAD: 撤銷某次提交,並生成一個新的提交

命令太多。之後用到再說...


                                    若有錯誤,還請指出

相關文章
相關標籤/搜索