建立自己的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://
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地址