在上一篇博客中,我們主要聊到了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倉庫功能非常簡陋,只是支持把本地倉庫的文件推送到遠端存儲,在遠端服務器上不能夠直接列出文件列表,在瀏覽器上也查看不了;