在上一篇博客中,我们主要聊到了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.confServerName 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/ [root@node02 git]#AuthType Basic AuthName "Private Git Repo" AuthUserFile "/etc/httpd/conf.d/test-git" Require valid-user
提示: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仓库功能非常简陋,只是支持把本地仓库的文件推送到远端存储,在远端服务器上不能够直接列出文件列表,在浏览器上也查看不了;