安装git:
一、在/usr/local下新建目录git,并下载源码
- wget https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.gz
解压:
- tar -xzvf git-2.15.1.tar.gz
进入目录,然后安装git
- make prefix=/usr/local/git all
- make prefix=/usr/local/git install
二、安装过程中的各种错误
1. 出现cc不存在这种错误,表明gcc和g++没有安装:
- yum install gcc
- yum install gcc-c++
2. 致命错误:openssl/ssl.h:没有那个文件或目录
需要安装以下依赖
- sudo yum install openssl-devel
3. http.h:6:23: 致命错误:curl/curl.h:没有那个文件或目录
#include <curl/curl.h>安装:
- yum install libcurl-devel
4. http-push.c:19:19: 致命错误:expat.h:没有那个文件或目录
安装:
- yum install expat-devel
5. Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN Failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] 错误 2
make: *** [perl/perl.mak] 错误 2
安装:
- yum install perl-ExtUtils-MakeMaker package
6. * tclsh Failed; using unoptimized loading
安装:
- yum install -y gettext
以上就是安装过程中碰到的一些问题。
三、添加路径至PATH
- sudo vim /etc/profile
- export PATH="/usr/local/git/bin:$PATH"
- source /etc/profile #使配置立即生效
搭建git服务器:
一、创建一个新的用户git用来运行git
- groupadd git
- useradd git -g git
- passwd git #参数是用户名
- su - git
二、初始化git服务。
- cd /home/git
- git init --bare test.git
- chown git:git test.git
三、将git-upload-pack进行软链接,以确保客户端进行git clone不会报错:
- ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack
这就算初步完成了git服务端的搭建。
四、搭建完成,进行测试
在另一台PC(客户端)进行git clone操作:
- git clone git@192.168.1.103:/home/git/test.git
但是发现要输入git服务器的密码,这对客户端造成了影响,为了避免所有客户端在git时需要密码,可以添加证书登陆,这也是github的管理方法,每个客户端将自己的公钥给服务端保存,这样就存在一个认证关系了。
五、开启RSA认证
在git服务器上打开RSA认证:/etc/ssh/sshd_config
- sudo vim /etc/ssh/sshd_config
- RSAAuthentication yes
- PubkeyAuthentication yes
- AuthorizedKeysFile /home/git/.ssh/authorized_keys #你的authorized_keys所在路径
在新建的git(/home/git)下新建.ssh文件夹,并新建一个authorized_keys文件用来存放客户端的公钥。
这里必须利用su - git将用户切换为git,再进行新建文件夹和文件的操作,这样保证.ssh和authorized_keys文件的所有者都是git。
- $ cd /home/git/
将客户端的公钥文件(id_rsa.pub)中的内容复制到authorized_keys文件中。要注意复制中不要漏掉字母,开头一般是:ssh-rsa。
六、git用户设置为不能shell登录
找到:
- vim /etc/passwd
改为
七、最终测试
在客户端运行git clone命令:
git clone git@192.168.1.103:/home/git/test.git
可以直接下载,不用输入密码。
在客户端上运行git push命令
首先在要推送的文件夹下,运行git init初始化git仓库:
然后,运行git status查看哪些文件尚未add,然后运行git add将尚未add的文件add,然后commit。
- git init
- git remote -v #查看服务器地址是否存在
- git remote add origin git@192.168.1.103:/home/git/test.git
然后可以执行git push:
- git push origin master:master
origin表示推送到origin远程,第一个master是本地分支,第二个master是远程分支,如果该远程分支不存在将被创建。
注意点:
SSH对公钥,私钥的权限和所有权的要求是非常严格的,总结如下:
1,下面两个目录的所有权必须是git(上面创建的git用户),所属组也应该是git,权限必须为700
②/home/git/.ssh # chmod 700 /home/git/.ssh
2,公钥文件的所有权必须是git,所属组也必须是git,权限必须是644