服务器系统:Centos 6 (查看centos版本命令:lsb_release -a
)html
客户端系统:Windows 7git
1、服务器端安装Gitgithub
==一般centos上使用yum源安装的git版本太低==shell
1. 检查系统上是否已经安装git,若已有则卸载vim
// 查看当前git版本 # git --version git version 1.7.1 // 卸载旧版本 # yum remove -y git
2. 安装依赖包,下载最新版本git源码windows
# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel # wget https://github.com/git/git/archive/v2.13.2.tar.gz # tar zxf v2.13.2.tar.gz
3. 安装git,配置环境变量centos
# cd git-2.13.2 # make prefix=/usr/local/git all # make prefix=/usr/local/git install # echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc # source /etc/bashrc // 实时生效
4. 查看git版本号,正确显示则安装成功缓存
# git --version git version 2.13.2
5. 若编译时报错以下安全
libgit.a(utf8.o): In function `reencode_string_iconv': /usr/local/src/git-2.13.2/utf8.c:463: undefined reference to `libiconv' libgit.a(utf8.o): In function `reencode_string_len': /usr/local/src/git-2.13.2/utf8.c:524: undefined reference to `libiconv_open' /usr/local/src/git-2.13.2/utf8.c:535: undefined reference to `libiconv_close' /usr/local/src/git-2.13.2/utf8.c:529: undefined reference to `libiconv_open' collect2: ld returned 1 exit status make: *** [git-credential-store] Error 1
能够按照以下方式解决bash
// 对以前git的make 操做进行 make clean # make clean # wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz # tar zxf libiconv-1.14.tar.gz # cd libiconv-1.14 # ./configure --prefix=/usr/local/libiconv # make && make install // 建立一个软连接到/usr/lib # ln -s /usr/local/lib/libiconv.so /usr/lib # ln -s /usr/local/lib/libiconv.so.2 /usr/lib
而后
# make configure # ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv/ # make && make install # echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc # source /etc/bashrc
6. 配置git 用户名及邮箱(客户机安装后也要配置,在这里略过windows的git安装过程)
# git config --global user.name 'your name' # git config --global user.email 'your email address'
2、服务器设置
一、添加一个git用户
# useradd git
二、初始化一个项目目录为一个仓库
su git //git的~的实际地址为/home/git cd ~ //yourName为自定义的仓库名称 mkdir yourName.git cd yourName.git git init --bare
至此,咱们的仓库完整地址为/home/git/yourName.git
【问题】:创建远程仓库使用 git init 命令,也能够增长 --bare 参数。写不写 --bare 参数有什么区别呢?
【答案】:
咱们知道,通常从远程 clone 下来的仓库会生成一个独立的目录,在这个目录下有当前分支最新版本的文件,同时还有一个 .git 文件夹,与 .git 同级的文件夹称为咱们的“工做目录”,咱们的修改都在这个目录中进行。而 .git 就是咱们 Git 本地仓库的工做目录,咱们 add 和 commit 的东西都会被提交到这个目录中。对 git init 命令添加 --bare 参数就表示初始化 Git 仓库的时候不要建立本地工做目录,因此至关于 .git 文件夹下的全部内容直接建立到当前目录下,而不是被放到 .git 目录下。在 Git 服务器上创建好仓库之后,用户就能够克隆这个仓库了。等等。。还没配置用户 SSH 公钥呢,这么就让用户去下载,确定仍是要输入密码才行的。
三、在 Git 服务器上为用户配置 SSH 公钥
仍是先在 Git 服务器上使用 authorized_keys 文件来管理全部用户的 SSH 公钥。(密钥登陆的方式比密码登陆更安全、更便捷,注意保管好本身的私钥,下面会讲到如何生成秘钥对)
git@Linux:~$ mkdir .ssh git@Linux:~$ touch .ssh/authorized_keys git@Linux:~$ chmod 600 .ssh/authorized_keys git@Linux:~$
注意:这里的authorized_keys跟配置好的centos的证书方式ssh登陆不一样(如已配置),咱们git的证书文件路径为/home/git/.ssh/authorized_keys(ssh终端登陆所用证书文件路径为/etc/ssh/authorized_keys,通常使用xshell或者putty等工具用的证书登陆ssh所用的pub密钥信息都在里面)
四、打开服务器的RSA认证
# vim /etc/ssh/sshd_config // 找到下面3行并去掉注释 1. RSAAuthentication yes 2. PubkeyAuthentication yes 3. AuthorizedKeysFile .ssh/authorized_keys
重启sshd
service sshd restart
五、为安全起见禁用git用户shell登陆
// 为安全起见,禁用 git 用户的 shell 登陆 # vim /etc/passwd // 修改 git 用户的 shell 为 git-shell,路径使用 which git-shell 查看 // 找到以下一行 git:x:1001:1001::/home/git:/bin/bash // 修改为以下 git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell
重启sshd服务
service sshd restart
3、客户端开始使用
一、打开git bash
二、生成秘钥对
2.1 客户机执行如下命令将在windows的“用户目录/.ssh”下获得秘钥对
cd ~/.ssh ssh-keygen -t rsa -C “youremail@example.com”
2.2上传公共秘钥到git服务器有如下2种方式:
①复制到git服务器的/home/git/.ssh/authorized_keys文件末尾中;
②经过ftp等方式上传后,执行如下命令:
cat 源秘钥文件路径 >> /home/git/.ssh/authorized_keys
二、任意新建一个工做区文件夹
三、执行clone命令(输入本身的IP地址,端口默认为22,若有不一样就加上去)
git clone git@ip:/home/git/yourname.git
四、随便新建个文件
五、提交
cd 项目文件下下 git add . git commit -m "本次提交的备注" git push
六、服务器端验证是否上传成功
cd /home/git/yourName.git/branches
git log
成功信息:
commit 087966c9f3f73f4aee153213213212132132ac191a7 (HEAD -> master) Author: upLoadUserName <yourEmailAddress> Date: Tue Oct 9 08:59:21 2018 +0800
【遇到的坑】
一、回到家git clone一下发觉这玩意儿 Permission denied我了!
解决办法:再次百度鼓捣一趟,原来是的ssh-keygen的时候自定义了密钥的文件名,保持默认回车下去生成的id_rsa可以正常使用,ssh -v 服务器IP 一下发现可能客户端的git默认使用了id_rsa的私钥,待深刻学习git考究(原谅我懒人不看git官网原著,专门看百度出来的博客被坑)
二、git push报错1
$ git push Enter passphrase for key '/c/Users/PC-name/.ssh/id_rsa': Enumerating objects: 145, done. Counting objects: 100% (145/145), done. Delta compression using up to 4 threads. Compressing objects: 100% (134/134), done. fatal: sha1 file '<stdout>' write error: Broken pipe error: remote unpack failed: unable to create temporary object directory error: failed to push some refs to 'git@youripaddr:survey.git'
缓存区不够大,搞大它
$ git config http.postBuffer 52428800
三、git push报错2
$ git push Enter passphrase for key '/c/Users/hp206/.ssh/id_rsa': Enumerating objects: 145, done. Counting objects: 100% (145/145), done. Delta compression using up to 4 threads. Compressing objects: 100% (134/134), done. Writing objects: 100% (145/145), 103.16 KiB | 685.00 KiB/s, done. Total 145 (delta 64), reused 0 (delta 0) error: remote unpack failed: unable to create temporary object directory To youripaddr:yourprojectname.git ! [remote rejected] master -> master (unpacker error) error: failed to push some refs to 'git@youripaddr:survey.git'
权限的问题,由于不是服务器git用户建立的目录
到服务器git目录下
chown -vR git *
完美!
参考文章: