centos+git+gitolite 安裝和部署


一.部署環境  

  系統:CentOS 6.4x64 最小化安裝  

  IP:192.168.52.131 

  git默認使用SSH協議,在服務器上基本上不用怎么配置就能直接使用。但是如果面向團隊服務,需要控制權限的話,還是用gitolite方便些。

  首先用x-shell 工具鏈接centos 系統

 

二.安裝基礎依賴包

[root@nginx ~]#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y

三.在線安裝git

  [root@bogon ~]# yum -y install git 

下載安裝包安裝方式:

[root@bogon git-2.2.0]#tar xf git-2.2.0.tar.gz
[root@bogon git-2.2.0]#cd  git-2.2.0/
[root@bogon git-2.2.0]#make prefix=/usr/local/git all
[root@bogon git-2.2.0]#make prefix=/usr/local/git install
 
增加軟連接
[root@bogon git-2.2.0]#ln -s /usr/local/git/bin/* /usr/bin/
 
驗證結果,顯示出版本號,表示安裝成功
[root@bogon git-2.2.0]#git --version
git version 2.2.0 

五.創建git用戶

[root@bogon ~]# useradd git
# 切換到git用戶
[root@bogon ~]# su - git
[git@bogon ~]$ pwd                 #查看當前位置
/home/git
# 確認.ssh/authorized_key是否存在
[git@bogon ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla

六.獲取git版本庫並安裝

[git@bogon ~]$ git clone https://github.com/sitaramc/gitolite

 

 

然后創建bin目錄並安裝gitolite 到bin目錄($ 表示普通用戶)

[git@bogon ~]$ mkdir $HOME/bin
[git@bogon ~]$ gitolite/install -to $HOME/bin
[git@bogon ~]$ cd bin/
[git@bogon bin]$ ls
commands  gitolite  gitolite-shell  lib  syntactic-sugar  triggers  VERSION  VREF

 

七.配置gitolite管理員

gitolite 使用特殊的版本庫gitolite-admin 來管理用戶和版本庫,所以需要創建一個管理員來管理所有的用戶和版本庫

7.1 用git用戶生成公鑰(注:如果你是接着上面一直做下來的,那么只需要輸入cd ,然后回車,則就進入了該用戶的目錄,如果不是git用戶,則需要輸入su – git,來切換到git用戶)

[git@bogon ~]cd
[git@bogon ~]$ ssh-keygen -t rsa

7.2 修改.ssh/id_rsa.pub 為admin.pub(為什么要改成admin.pub 因為gitolite根據這個文件名來設立帳號.我這里用admin

[git@bogon ~]$ mv .ssh/id_rsa.pub admin.pub

7.3 使用管理員公鑰安裝gitolite(然后去/home/git/repositories 里面,可以看見倉庫文件.gitolite-admin.git 和test.git 一個是管理倉庫的,一個是測試用)

[git@bogon ~]$ $HOME/bin/gitolite setup -pk admin.pub

 7.4   生成管理員管理倉庫(不需要輸密碼)

[git@bogon ~]$ git clone git@127.0.0.1:gitolite-admin

進入倉庫后可以看到conf 和keydir ,conf/gitolite.conf 是添加用戶/倉庫的配置, keydir 是放對應用戶的公想·x鑰.並且此時,admin.pub這個公鑰可以刪除了

7.5  編輯gitolite.conf

[git@bogon ~]$ vim gitolite-admin/conf/gitolite.conf

也可以你找下圖操作:

打開圖按照下圖添加:

上面的配置含義是:

                      定義兩個用戶組: admin 和 user

                      定義兩個版本庫: gitolite-admin 和 project

                      用戶admin 對 這兩個版本庫有(讀 寫 刪除)RW+ 權限

                      user組對project 有 (讀 寫)RW 權限

也可按照格式,添加多個組,多個版本庫

 

如有一個組中有多個用戶,則以空格為分割,如下圖:

7.6 然后提交修改(注:修改用戶或者增加版本庫后在下圖中的目錄中提交修改,否則會提示修改失敗)

提交修改:
[git@bogon conf]$ git add keydir/test.pub conf/gitolite.conf
[git@bogon conf]$ git add . [git@bogon conf]$ git commit -am "new project"
[git@bogon conf]$ git push origin master
# 注:所有的提交修改都是這三條命令,在客戶端上提交文件也是這三個命令第二條命令后面引號中的 可以是任意,最好是能體現是做了什么修改
 
          

7.7 提交完后,查看管理倉庫中多了一個project.git

[git@bogon ~]$ cd repositories/
[git@bogon repositories]$ ls
gitolite-admin.git  project.git

這個時候,服務器已經搭建完畢了,只需要添加用戶並給用戶添加權限就可以了。下面我們添加用戶測試

7.8 權限控制

[root@nginx gitolite-admin]# git status    #查看git庫狀態
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:  
(use "git add <file>..." to update what will be committed)  
(use "git checkout -- <file>..." to discard changes in working directory)  
 
    modified:   conf/gitolite.conf        #表示該文件被修改
Untracked files:  (use "git add <file>..." to include in what will be committed)
    keydir/test.pub        #增加的文件
no changes added to commit (use "git add" and/or "git commit -a")
 
#將有改動的文件添加到git庫
[root@nginx gitolite-admin]# git add keydir/test.pub conf/gitolite.conf 
[root@nginx gitolite-admin]# git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:  (use "git reset HEAD <file>..." to unstage) 
    modified:   conf/gitolite.conf  
    new file:   keydir/test.pub  
    #這里表示已添加#在第一次執行git commit命令時會有以下提示,需要使用者表明身份
 
[root@nginx gitolite-admin]# git commit -m "add repo mytest; add user test"
*** Please tell me who you are.Run  
    git config --global user.email "you@example.com"  
    git config --global user.name "Your Name"to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@nginx.(none)')
 
#在這里我們執行以下2條命令
[root@nginx gitolite-admin]# git config --global user.email "lyao@aaa.com"
[root@nginx gitolite-admin]# git config --global user.name "lyao"
 
#再重新執行git commit命令
[root@nginx gitolite-admin]# git commit -m "add repo mytest; add user test"
[master 7b877e7] add repo mytest; 
add user test 2 files changed, 5 insertions(+) 
create mode 100644 keydir/test.pub
 
#執行完以上命令后,修改的文件只是提交在本地了,並沒有提交到git server中,還需要執行git push命令
[root@nginx gitolite-admin]# git push origin master    #推送到遠端的master分支
Counting objects: 6, done.Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 817 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Initialized empty Git repository in /home/git/repositories/mytest.git
/To git@192.168.3.27:gitolite-admin   
3554f3d..7b877e7  master -> maste

八、客戶端驗證

8.1 centos客戶端驗證

[root@ipython ~]# git clone git@192.168.3.27:/mytest.git
Initialized empty Git repository in /root/mytest/.git/
warning: You appear to have cloned an empty repository.
[root@ipython ~]# ll
total 3240
drwxr-xr-x 3 root root    4096 Apr 17 14:45 mytest
[root@ipython ~]# cd mytest/
[root@ipython mytest]# git status
# On branch master#
# Initial commit
#nothing to commit (create/copy files and use "git add" to track)
 
#創建1個文件1.txt並添加到git
[root@ipython mytest]# touch 1.txt
[root@ipython mytest]# git add 1.txt 
[root@ipython mytest]# git commit "add file 1.txt"
 
#第一次使用需要表明身份
[root@ipython mytest]# git commit -m "add file 1.txt"
[master (root-commit) 08e9a37] add file 1.txt 
Committer: root <root@ipython.(none)>
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>'
    0 files changed, 0 insertions(+), 0 deletions(-) 
    create mode 100644 1.txt
 
[root@ipython mytest]# git config --global user.email test@aaa.com
[root@ipython mytest]# git config --global user.name test
 
[root@ipython mytest]# git commit -m "add file 1.txt"
# On branch masternothing to commit (working directory clean)
 
[root@ipython mytest]# git status
# On branch masternothing to commit (working directory clean)
 
[root@ipython mytest]# ll
total 0-rw-r--r-- 1 root root 0 Apr 17 14:47 1.txt
 
[root@ipython mytest]# git push origin master
Counting objects: 3, done.Writing objects: 100% (3/3), 206 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)To git@192.168.3.27:/mytest.git
 * [new branch]      master -> master

8.2 windows客戶端驗證

  1)在客戶機上安裝安正的git程序,在D盤新建一個文件夾 test ,右鍵選擇Git Bash

  

  2)打開一個DOS欄,輸入 ssh-keygen.exe。這里可以用Tab鍵補全,然后有提示輸入y后一直回車到結束

  

  3)然后打開客戶機用戶目錄下的 .ssh 中能看到id_rsa 私鑰

  

  4)然后把id_rsa 這個私鑰文件上傳到服務器的/home/git/gitolite-admin/keydir 目錄中

  

  5)然后把這個新傳上來的私鑰改名

  

  [git@bogon conf]$ vi gitolite.conf

  

  這里表示test用戶對project.git 版本庫有讀寫的權限。也可以直接在版本庫下面添加用戶權限

   6)提交修改

  

[git@bogon conf]$ git add .    
[git@bogon conf]$ git commit -am "new project"
[git@bogon conf]$ git push origin master

  7)回客戶端

    打開Bash 窗口,輸入

    git clone git@192.168.52.131:project.git

    鏈接服務器中的project.git 版本庫,其中IP地址是自己服務器的IP地址,冒號后面需要訪問也是剛剛給該用戶有權限訪問的版本庫

 

    然后會同步下來一個文件夾名為project 的文件,這個就是版本庫,打開這個文件夾,創建一個任意文件

 

    在客戶機上提交修改文件:

    打開project文件夾,創建一個任意文件,然后打開Bash 窗口,輸入提交修改命令

      [git@bogon conf]$ git add .   

      [git@bogon conf]$ git commit -am "new project"

      [git@bogon conf]$ git push origin master

    這樣,修改過的數據就上傳到服務器上去了,其他用戶同樣可以同步下來

    從服務器上往別的客戶機上同步更改后的版本庫的命令是:

    git pull

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM