搭建git服务器sever1。首先安装gityum安装git2。创建一个名为gitaddusergit3的新linux用户。在git用户目录中创建一个新目录。sshcd/home/gitmkdir.ssh4。在/home/git/.ssh/目录下新建authorized_keys文件,将客户端提供的公钥(id_rsa.pub)粘贴到文件中。vimauthorized_keys5.在项目目录下创建一个git裸仓库,如果当前项目目录是/home/git/project.gitgitinit--bareproject.git6。将项目目录下的.ssh目录和git用户目录的属主和属组设置为gitchown-Rgit.gitproject.gitchown-Rgit.git/home/git/.ssh/7。出于安全考虑,禁用git用户的shell登录vim/etc/passwd注释#git:x:500:500::/home/git:/bin/bash改为git:x:500:500::/home/git:/usr/bin/git-shell8.gitserver开启RSA认证vim/etc/ssh/sshd_config下面3开启1.RSAAuthenticationyes2.PubkeyAuthenticationyes3.AuthorizedKeysFile.ssh/authorized_keysclient1.查看公钥cat~/.ssh/id_rsa.pub如果没有可以执行以下命令ssh-keygen-trsa2。在本地新建一个git仓库gitinit3。创建一个新文件并推送到服务器touchreadme.txtgitaddreadme.txtgitcommit-m"readme"gitremoteaddorigingit@xxx.xxx.xxx.xxx:/home/git/project.gitgitpushoriginmaster注意:如果提示输入密码,请检查公钥是否配置成功或者RSA是否开启。当报错信息为ssh:connecttohost104.224.152.22port22:Connectionrefused时,注意sshd服务是否开启(一般默认开启)。服务端解决方案这时候我们需要查看sshd服务的端口是否为22netstat-lnp|grep22sshd服务的端口号不是22,我们可以在/etc/ssh/修改客户端的默认端口sshd_config解决方法1、直接修改url开头为SSH://gitremoteset-urloriginssh://git@domain.com:3022/~/Projects/p1.git2。修改本地配置文件vim~/.ssh/config#mapanaliashostnewdomainhostnamedomain.comport3022git自动部署添加钩子文件post-receive#!/bin/bashIS_BARE=$(gitrev-parse--is-bare-存储库)如果[-z"$IS_BARE"];thenecho>&2"fatal:post-receive:IS_NOT_BARE"exit1fiunsetGIT_DIRDeployPath="/var/www/blog"#这里写项目实际部署的目录cd$DeployPathgitfetch--allgitreset--hardorigin/master服务器创建部署项目的文件cd/var/wwwgitclone/home/git/project.gitprojectname注意:权限问题在实际使用时会遇到类似PermissionDenied的情况。然后你得检查一下/var,/var/www,/var/www/your_git这三个目录的权限是不是至少770。再考虑有没有SELinux挡道。我的处理方式是开启所有权限(因为是个人服务器,没有人访问,主要是玩)chmod-R777/var/www/xxx还有一个问题,就是push和克隆,仓库就是一开始创建的空仓库(本文是/home/git/project.git)。最后还有一个问题Git:pusherror解决方案master->master(branchiscurrentlycheckedout)isusingGitPushcodetothedatawarehouse,提示如下错误:[remoterejected]master->master(branchiscurrentlycheckedout)remote:error:refusingtoupdatecheckedoutbranch:refs/heads/masterremote:error:默认情况下,更新非裸仓库中的当前分支remote:error:被拒绝,因为它会使索引和工作树inconsistentremote:error:withwhatyoupushed,andwillrequire'gitreset--hard'tomatchremote:error:theworktreetoHEAD.remote:error:remote:error:你可以设置'receive.denyCurrentBranch'配置变量来远程:错误:远程存储库中的“忽略”或“警告”以允许推送到远程:错误:其当前分支;但是,不推荐这样做,除非你远程:错误:安排更新其工作树到matchwhatyoupushinsomeremote:error:otherway.remote:error:remote:error:要压制此消息并仍然保持默认行为,setremote:error:'receive.denyCurrentBranch'配置变量为'refuse'。到git@xxx.xxx.xxx.xxx:/xxx/xxxx/xxxx![remoterejected]master->master(branchiscurrentlycheckedout)error:failedtopushsomerefsto'git@xxx.xxx.xxx.xxx:/xxx/xxxx/xxxx'这是因为git拒绝推送操作默认,需要设置。修改.git/config,添加如下代码:gitconfigreceive.denyCurrentBranchignore使用Git自动部署环境GIT服务器实现web代码自动部署Git服务器端代码自动部署
