在上一篇部落格中,我們主要聊到了git的基本工作原理和一些常用的git命令的使用;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13787701.html;今天我們來聊一聊git私有倉庫的搭建;
我們知道對於git的倉庫來講,不外乎就是一個檔案伺服器,也就說git倉庫可以使用傳輸檔案的協議來把使用者本地倉庫中的程式碼推送到遠端倉庫進行儲存,同時使用者也可以從遠處倉庫拖程式碼到本地倉庫;這是git倉庫的最基本功能;常用的傳輸檔案的協議有http、https、ftp、ssh等等,當然也有git本身的協議git來傳輸檔案;好了下面我們來看一下基於httpd來搭建git的私有倉庫對過程吧;
環境準備
名稱 | ip | 埠 | 角色 |
node01 | 192.168.0.41 | 80 | 客戶端 |
node02 | 192.168.0.42 | 80 | 服務端 |
在node02上安裝httpd、git
[root@node02 ~]# yum install -y httpd git Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/x86_64/primary_db | 6.9 MB 00:00:01 Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package git.x86_64 0:1.8.3.1-23.el7_8 will be installed --> Processing Dependency: perl-Git = 1.8.3.1-23.el7_8 for package: git-1.8.3.1-23.el7_8.x86_64 --> Processing Dependency: rsync for package: git-1.8.3.1-23.el7_8.x86_64 --> Processing Dependency: perl(Term::ReadKey) for package: git-1.8.3.1-23.el7_8.x86_64 --> Processing Dependency: perl(Git) for package: git-1.8.3.1-23.el7_8.x86_64 --> Processing Dependency: perl(Error) for package: git-1.8.3.1-23.el7_8.x86_64 ---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed --> Processing Dependency: httpd-tools = 2.4.6-93.el7.centos for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.4.8-5.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed ---> Package httpd-tools.x86_64 0:2.4.6-93.el7.centos will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed ---> Package perl-Error.noarch 1:0.17020-2.el7 will be installed ---> Package perl-Git.noarch 0:1.8.3.1-23.el7_8 will be installed ---> Package perl-TermReadKey.x86_64 0:2.30-20.el7 will be installed ---> Package rsync.x86_64 0:3.1.2-10.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================================== Package Arch Version Repository Size ========================================================================================================================== Installing: git x86_64 1.8.3.1-23.el7_8 updates 4.4 M httpd x86_64 2.4.6-93.el7.centos base 2.7 M Installing for dependencies: apr x86_64 1.4.8-5.el7 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k httpd-tools x86_64 2.4.6-93.el7.centos base 92 k mailcap noarch 2.1.41-2.el7 base 31 k perl-Error noarch 1:0.17020-2.el7 base 32 k perl-Git noarch 1.8.3.1-23.el7_8 updates 56 k perl-TermReadKey x86_64 2.30-20.el7 base 31 k rsync x86_64 3.1.2-10.el7 base 404 k Transaction Summary ========================================================================================================================== Install 2 Packages (+8 Dependent packages) Total download size: 7.9 M Installed size: 33 M Downloading packages: (1/10): apr-1.4.8-5.el7.x86_64.rpm | 103 kB 00:00:00 (2/10): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:00 (3/10): httpd-tools-2.4.6-93.el7.centos.x86_64.rpm | 92 kB 00:00:00 (4/10): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:00 (5/10): perl-Error-0.17020-2.el7.noarch.rpm | 32 kB 00:00:00 (6/10): perl-TermReadKey-2.30-20.el7.x86_64.rpm | 31 kB 00:00:00 (7/10): httpd-2.4.6-93.el7.centos.x86_64.rpm | 2.7 MB 00:00:00 (8/10): perl-Git-1.8.3.1-23.el7_8.noarch.rpm | 56 kB 00:00:00 (9/10): rsync-3.1.2-10.el7.x86_64.rpm | 404 kB 00:00:00 (10/10): git-1.8.3.1-23.el7_8.x86_64.rpm | 4.4 MB 00:00:00 -------------------------------------------------------------------------------------------------------------------------- Total 8.5 MB/s | 7.9 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-5.el7.x86_64 1/10 Installing : apr-util-1.5.2-6.el7.x86_64 2/10 Installing : 1:perl-Error-0.17020-2.el7.noarch 3/10 Installing : httpd-tools-2.4.6-93.el7.centos.x86_64 4/10 Installing : rsync-3.1.2-10.el7.x86_64 5/10 Installing : perl-TermReadKey-2.30-20.el7.x86_64 6/10 Installing : perl-Git-1.8.3.1-23.el7_8.noarch 7/10 Installing : git-1.8.3.1-23.el7_8.x86_64 8/10 Installing : mailcap-2.1.41-2.el7.noarch 9/10 Installing : httpd-2.4.6-93.el7.centos.x86_64 10/10 Verifying : git-1.8.3.1-23.el7_8.x86_64 1/10 Verifying : mailcap-2.1.41-2.el7.noarch 2/10 Verifying : perl-TermReadKey-2.30-20.el7.x86_64 3/10 Verifying : 1:perl-Error-0.17020-2.el7.noarch 4/10 Verifying : apr-util-1.5.2-6.el7.x86_64 5/10 Verifying : httpd-2.4.6-93.el7.centos.x86_64 6/10 Verifying : rsync-3.1.2-10.el7.x86_64 7/10 Verifying : apr-1.4.8-5.el7.x86_64 8/10 Verifying : httpd-tools-2.4.6-93.el7.centos.x86_64 9/10 Verifying : perl-Git-1.8.3.1-23.el7_8.noarch 10/10 Installed: git.x86_64 0:1.8.3.1-23.el7_8 httpd.x86_64 0:2.4.6-93.el7.centos Dependency Installed: apr.x86_64 0:1.4.8-5.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-93.el7.centos mailcap.noarch 0:2.1.41-2.el7 perl-Error.noarch 1:0.17020-2.el7 perl-Git.noarch 0:1.8.3.1-23.el7_8 perl-TermReadKey.x86_64 0:2.30-20.el7 rsync.x86_64 0:3.1.2-10.el7 Complete! [root@node02 ~]#
建立git倉庫目錄,並使用git進行倉庫初始化操作,並把對應的倉庫屬主屬組修改成apache使用者
利用htpasswd工具生成金鑰檔案
提示:這個金鑰檔案我們不需要更改屬組和屬主,只要保證啟動httpd的使用者有讀的許可權即可;
新建一個配置,配置一個虛擬主機專門處理git倉庫的請求
[root@node02 git]# cat /etc/httpd/conf.d/test-git.conf <VirtualHost *:80> ServerName 192.168.0.42 SetEnv GIT_PROJECT_ROOT /var/www/html/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ <Location /> AuthType Basic AuthName "Private Git Repo" AuthUserFile "/etc/httpd/conf.d/test-git" Require valid-user </Location> </VirtualHost> [root@node02 git]#
提示:servername表示虛擬主機的名稱,這裡可以是本機ip地址或主機名;SetEnv GIT_PROJECT_ROOT是用來指定git倉庫的根地址對映到檔案系統的目錄,相當於httpd裡的documentroot的意思;AuthUserFile用來指定用來驗證的金鑰檔案地址;
檢查httpd的配置檔案語法是否正確,如果沒有問題就可以直接啟動httpd了
提示:可以看到httpd的配置檔案語法是沒有問題的,對應httpd也啟動起來了,80埠已經正常監聽;到此基於httpd的私有git倉庫伺服器就搭建好了;
測試:在node01上安裝git,然後到node02上克隆我們剛才在node02上建立的空倉庫,看看能不能把它克隆下來?
node01上安裝git
[root@node01 ~]# yum install -y git
克隆node02上的git-test.git專案到本地
提示:這裡需要注意,如果使用主機名訪問,需要在hosts檔案中把對應主機名進行解析;其次node01和node02要正常通訊,防火牆都允許node01訪問;從上面的反饋可以看到在node01上使用git命令是能夠正常的把node02上的專案克隆到本地;
驗證:在node01上新新增幾個檔案到剛才克隆的專案中,然後把它提交,再push到node02的倉庫中,看看是否能夠將更改後的專案推送到node02的指定倉庫呢?
提示:這裡push它告訴我們沒有設定push.default這個配置;
解決辦法
提示:我們提交時它告訴我們沒有任何更新;
解決辦法
提示:這裡提示我們預設倉庫不允許push操作,要想使用push操作,需要在倉庫中設定receive.denyCurrentBranch的配置為ignore;
解決辦法:到node02的對應倉庫中加上上面提示的配置
現在再用node01向node02執行push,看看還要是否可以將node01上的提交push到node02的倉庫中去
提示:這裡還是提示我們沒有什麼更新;
解決辦法:使用git push origin master命令來推送
好了,在node01上成功將提交後的專案推送到遠端node02上了;
在node02上驗證,看看node02的倉庫中是否能夠看到對應的檔案呢?
提示:在node02上並不能使用ls命令列出檔案,這其中的原因是push只是把node01中的物件庫中的檔案push到node02上;我們要檢視物件庫中的檔案,可以使用git ls-files -s來檢視;
提示:使用git ls-files命令並沒有看到任何內容,估計是隻把物件庫push過來,索引並沒有指向任何版本;但使用git log能夠清楚看到我們提交的版本和使用者資訊;
驗證:把node01上的git-test目錄刪除,然後再從node02上克隆,然後看看,克隆後的目錄裡是否有我們之前新增的檔案?
提示:可以看到現在重新從node02上把專案克隆到本地,本地目錄中是有我們之前新增的檔案,說明我們剛才的push操作是成功的;後續我們就可以在在這個專案中新增,修改,刪除,然後再push到node02上進行儲存;再次提交就可以直接使用git push命令進行提交了;如下所示
在node02上檢視日誌看看是否有v2版本的提交日誌?
好了,在node02上能夠看到第二次的提交日誌;到此基於httpd的簡單私有git倉庫就搭建好了;這個git倉庫功能非常簡陋,只是支援把本地倉庫的檔案推送到遠端儲存,在遠端伺服器上不能夠直接列出檔案列表,在瀏覽器上也檢視不了;