在上一篇博客中,我们主要聊到了git的基本工作原理和一些常用的git命令的使用;回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13787701.html;今天我们来聊一聊git私有仓库的搭建;

  我们知道对于git的仓库来讲,不外乎就是一个文件服务器,也就说git仓库可以使用传输文件的协议来把用户本地仓库中的代码推送到远程仓库进行保存,同时用户也可以从远处仓库拖代码到本地仓库;这是git仓库的最基本功能;常用的传输文件的协议有http、https、ftp、ssh等等,当然也有git本身的协议git来传输文件;好了下面我们来看一下基于httpd来搭建git的私有仓库对过程吧;

  环境准备

名称ip端口角色
node01192.168.0.4180客户端
node02192.168.0.4280服务端

 

 

 

 

 

   在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用户

1503305 20201010184120855 1678776033 - 版本控制系统之基于httpd搭建私有git仓库

  利用htpasswd工具生成密钥文件

1503305 20201010184423500 1954430026 - 版本控制系统之基于httpd搭建私有git仓库

  提示:这个密钥文件我们不需要更改属组和属主,只要保证启动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了

1503305 20201010185127700 1254577808 - 版本控制系统之基于httpd搭建私有git仓库

  提示:可以看到httpd的配置文件语法是没有问题的,对应httpd也启动起来了,80端口已经正常监听;到此基于httpd的私有git仓库服务器就搭建好了;

  测试:在node01上安装git,然后到node02上克隆我们刚才在node02上创建的空仓库,看看能不能把它克隆下来?

  node01上安装git

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

  克隆node02上的git-test.git项目到本地

1503305 20201010185556004 1980197358 - 版本控制系统之基于httpd搭建私有git仓库

  提示:这里需要注意,如果使用主机名访问,需要在hosts文件中把对应主机名进行解析;其次node01和node02要正常通信,防火墙都允许node01访问;从上面的反馈可以看到在node01上使用git命令是能够正常的把node02上的项目克隆到本地;

  验证:在node01上新添加几个文件到刚才克隆的项目中,然后把它提交,再push到node02的仓库中,看看是否能够将更改后的项目推送到node02的指定仓库呢?

1503305 20201010190237741 1878608335 - 版本控制系统之基于httpd搭建私有git仓库

  提示:这里push它告诉我们没有设置push.default这个配置;

  解决办法

1503305 20201010190555974 642532375 - 版本控制系统之基于httpd搭建私有git仓库

  提示:我们提交时它告诉我们没有任何更新;

  解决办法

1503305 20201010190819776 1889562143 - 版本控制系统之基于httpd搭建私有git仓库

  提示:这里提示我们默认仓库不允许push操作,要想使用push操作,需要在仓库中设置receive.denyCurrentBranch的配置为ignore;

  解决办法:到node02的对应仓库中加上上面提示的配置

1503305 20201010191056394 1844695662 - 版本控制系统之基于httpd搭建私有git仓库

  现在再用node01向node02执行push,看看还要是否可以将node01上的提交push到node02的仓库中去

1503305 20201010191259215 1567387771 - 版本控制系统之基于httpd搭建私有git仓库

  提示:这里还是提示我们没有什么更新;

  解决办法:使用git push origin master命令来推送

1503305 20201010191553204 1980118239 - 版本控制系统之基于httpd搭建私有git仓库

  好了,在node01上成功将提交后的项目推送到远端node02上了;

  在node02上验证,看看node02的仓库中是否能够看到对应的文件呢?

1503305 20201010191748684 87324319 - 版本控制系统之基于httpd搭建私有git仓库

  提示:在node02上并不能使用ls命令列出文件,这其中的原因是push只是把node01中的对象库中的文件push到node02上;我们要查看对象库中的文件,可以使用git ls-files -s来查看;

1503305 20201010192150241 2059419424 - 版本控制系统之基于httpd搭建私有git仓库

  提示:使用git ls-files命令并没有看到任何内容,估计是只把对象库push过来,索引并没有指向任何版本;但使用git log能够清楚看到我们提交的版本和用户信息;

  验证:把node01上的git-test目录删除,然后再从node02上克隆,然后看看,克隆后的目录里是否有我们之前添加的文件?

1503305 20201010192540468 1424959998 - 版本控制系统之基于httpd搭建私有git仓库

  提示:可以看到现在重新从node02上把项目克隆到本地,本地目录中是有我们之前添加的文件,说明我们刚才的push操作是成功的;后续我们就可以在在这个项目中添加,修改,删除,然后再push到node02上进行存储;再次提交就可以直接使用git push命令进行提交了;如下所示

1503305 20201010193024508 243866681 - 版本控制系统之基于httpd搭建私有git仓库

  在node02上查看日志看看是否有v2版本的提交日志?

1503305 20201010193110061 754685717 - 版本控制系统之基于httpd搭建私有git仓库

  好了,在node02上能够看到第二次的提交日志;到此基于httpd的简单私有git仓库就搭建好了;这个git仓库功能非常简陋,只是支持把本地仓库的文件推送到远端存储,在远端服务器上不能够直接列出文件列表,在浏览器上也查看不了;

版本控制系统之基于httpd搭建私有git仓库

版本控制系统之基于httpd搭建私有git仓库插图