1. 程式人生 > >建立自己的git倉庫伺服器

建立自己的git倉庫伺服器

一)  git軟體在各種作業系統linux/macOS/windows上的安裝,參考廖雪峰的教程

 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
       在CentOS下安裝最方便: yum install git
       也可以使用原始碼安裝:#    yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
                 #wget https://github.com/git/git/archive/v2.13.2.tar.gz

     windows下可以從git官網git-scm.com下載“git for windows”安裝包, 安裝完畢後,在命令列模式下,命令列操作與linux下是相同的!

二)  git倉庫之備份
        git clone --mirror [email protected]/path/test.git           --非ssh方式 映象同步
    git clone --mirror ssh://

[email protected]/path/test.git     --ssh映象同步, 至於ssh方式的訪問, 這個完全由ssh配置來決定,與git本身無關了(個人理解)
    git --git-dir=/dir/test.git remote update        --定時呼叫此命令增量同步--可設定corntab任務


    **** Git init和clone命令對bare和mirror引數的支援
    ****************************************************************
    命令            --bare引數          --mirror引數
    git init         支援                 x
    git clone        支援                 支援
    *****************************************************************

三) git倉庫的初始化

   1) git init命令會在當前目錄下建立一個空的Git程式碼倉庫,建立一個隱藏目錄.git
        該隱藏目錄.git下將包含: hooks、info、objects和refs子目錄和config、description和HEAD檔案
    可以在當前目錄下建立工作樹(也就是工作檔案和目錄,最新的原始碼就是位於工作目錄及其子目錄中)。

   2) git init --bare命令會建立一個空的裸Git程式碼倉庫, 1)中的隱藏目錄.git不會被建立
         而1)中.git目錄下的hooks、info、objects和refs子目錄和config、description和HEAD檔案,直接在在當前目錄下被建立
    裸Git程式碼倉庫只包含版本控制資訊而不包含工作樹, 它更適合於作為版本控制應用的服務端來使用。

     ***總結:  git init命令適合程式碼開發工作站使用,即使用者原始碼版本管理,又便於程式碼修改和新建
            git init --bare命令使用者服務端,用於純粹的原始碼控制管理功能
            理解了上面,git clone --mirror [email protected]/path/test.git 命令只進行裸Git程式碼倉庫的備份就容易理解了  

 

四)   私有git伺服器的建立例子
      
    1) 新增git使用者組和git使用者,專門用來處理客戶機進行git操作
        groupadd  mygitgroup
        useradd   -M gitusr1        -M表示不會在/home目錄下建立同名的使用者專用目錄    
        useradd   -M gitusr2          參考: https://blog.csdn.net/danson_yang/article/details/65629948
        useradd   -M gitusr3
        passwd gitusr1
        passwd gitusr2
        passwd gitusr3                --為git賬戶設定登入口令

        usermod -G mygitgroup gitusr1      -G表示將使用者新增到某個分組
        usermod -G mygitgroup gitusr2
        usermod -G mygitgroup gitusr3

    2) 建立倉庫目錄----我在虛擬機器下想在VMware的共享目錄中建立倉庫, 但是更改資料夾許可權時該不了,所以還是在CentOS自己的“磁碟”上建立
        mkdir /home/mygit-repos
        cd    /home/mygit-repos    
        git init --bare  project1.git
        git init --bare  project2.git
        git init --bare  project3.git   ---可以為每個專案建立一個git倉庫, 當新增專案的時候,可以使用此命令繼續新建倉庫

        #設定git倉庫的group為git使用者組mygitgroup,並設定讀寫許可權
         chgrp mygitgroup /home/mygit-repos/project1.git   -R
         chgrp mygitgroup /home/mygit-repos/project2.git   -R
         chgrp mygitgroup /home/mygit-repos/project3.git   -R
       chmod 775  /home/mygit-repos/project1.git   -R
       chmod 775  /home/mygit-repos/project2.git   -R
       chmod 775  /home/mygit-repos/project3.git   -R

五) 修改sshd配置檔案 /etc/ssh/sshd_config, 只允許gitusr1/gitusr2/gitusr3遠端登入

      在sshd配置檔案sshd_config裡面加入下面這行:

      AllowUsers gitusr1  gitusr2 gitusr3

六) 修改口令檔案/etc/passwd
    #找到所建立使用者的行
        gitusr3:x:501:502::/home/gitusr3:/bin/bash
        gitusr2:x:502:503::/home/gitusr2:/bin/bash
        gitusr1:x:503:504::/home/gitusr1:/bin/bash

    #將/home/使用者名稱稱替換成/home/組目錄名稱(我使用的是虛擬機器共享目錄/home/mygit-repos):
        gitusr3:x:501:502::/home/mygit-repos:/usr/bin/git-shell
        gitusr2:x:502:503::/home/mygit-repos:/usr/bin/git-shell
        gitusr1:x:503:504::/home/mygit-repos:/usr/bin/git-shell

    *****說明:
        將/bin/bash替換成git-shell的路徑,產生的後果是: gitusr1/gitusr2/gitusr3這三個賬戶只能用於git操作, 而無法正常登入linux
                如果試圖從ssh客戶端登入伺服器, 則會提示如下的訊息:
                              Last login: Tue Jul 31 11:04:15 2018 from localhost
                              fatal: What do you think I am? A shell?

                從而起到禁止git賬戶登入伺服器控制檯 , 防止誤刪倉庫檔案的情況出現!

 

五) 工作站上的測試
    git clone [email protected]:project1.git
    git clone [email protected]:project2.git
    git clone [email protected]:project3.git

 

  進入其中一個project, 隨便copy個檔案,使用git提交一下

        git add xxx

        git commit

       git push origin master   第一此提交使用此命令

       git push  非第一次提交使用此命令


    *** 客戶端通用設定
        $ git config --global user.name "hanxuan2006"
        $ git config --global user.email "[email protected]"
        注意git config命令的--global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名稱和Email地址