<p>使用心得如下:</p><p>git有个hooks功能,每次push提交代码的时候,可以触发远程服务器上的hooks,执行shell。 利用这个功能,每次在本地写好内容,直接push到远程服务器上,就可以根据写好的shel自动部署了。用起来相当方便,下面就记录下配置过程:</p><p>一、在远程服务器上创建代码仓库(Linux)</p><pre class="brush:bash;toolbar:false">#mkdir-p/home/www/project.git
#chmod777/home/www
#cd/home/www/project.git
#gitinit--bare//创建一个裸仓库
#useradd-s/bin/bashgit//因为需要执行shell,把shell指定成/usr/bin/git-shell或/sbin/nogin无法使用githooks来更新blog
#chowngit:git-R/home/www/project.git</pre><p>二、配置本地无密码登录远程服务器(win)</p><pre class="brush:bash;toolbar:false">#ssh-keygen//一路回车</pre><p>然后复制生成的key(当前用户下的.ssh/id_rsa.pub)</p><p>切换到Linux</p><pre class="brush:bash;toolbar:false">#mkdir-p/home/git/.ssh
#vim/home/git/.ssh/authorized_keys//把上面复制的key粘贴进去,后保存退出
#chowngit:git-R/home/git/.ssh
#chmod600/home/git/.ssh/authorized_keys//权限不要出错
#chmod755/home/git/.ssh</pre><p>三、本地初始化git,并且添加远程仓库(win)</p><pre class="brush:bash;toolbar:false">#d://进入D盘
#mkdir-pproject
#cdproject
#gitinit
#gitconfiguser.email"wzp@qq.com"
#gitconfiguser.name"wzp"
#echo"1111">1.txt
#gitadd1.txt
#gitcommit-m"add1.txt"
#gitremoteaddblogssh://git@127.0.0.1:22/home/www/project.git//添加远程仓库还没有提交过,所以要先提交一次.注意ssh后面有://
#gitpushblogmaster//提交到主干</pre><p>git remote add <分支名> <远程地址> //上面的blog 就是分支,这个可以随便自定义</p><p>如果git remote add 加错了,可以使用 git remote rm <分支名> 来删掉:</p><pre class="brush:bash;toolbar:false">#gitremotermblog
//以后使用这个克隆就行了
//gitclonessh://git@127.0.0.1:22/home/www/project
//ssh协议,后面是用户@地址:端口/目录</pre><p>四、添加hooks</p><pre class="brush:bash;toolbar:false">#cd/home/www/project.git/hooks
#vimpost-receive
#!/bin/sh
#
PATH=$PATH:/usr/local/python27/bin
GIT_WORK_TREE=/home/www/newprojectgitcheckout-f
cd/home/www/newproject&&makehtml>/dev/null2>&1
chmod+xpost-receive
chowngit:git-R/home/www/newproject</pre><p>注意:写hooks的时候要特别注意环境变量问题。</p><p>错误记录:</p><p>文件冲突</p><pre class="brush:bash;toolbar:false">#gitpushblogmaster
>error:failedtopushsomerefsto'ssh://git@127.0.0.1/home/www/project'
Topreventyoufromlosinghistory,non-fast-forwardupdateswererejected
Mergetheremotechangesbeforepushingagain.Seethe'Noteabout
fast-forwards'sectionof'gitpush--help'fordetails.</pre><p>这个是因为你本地的代码和git远程仓库的代码出现了冲突 解决办法:</p><p>1.先把远程文件拉下来,再push</p><pre class="brush:bash;toolbar:false">#gitconfigbranch.master.remoteblog
#gitconfigbranch.master.mergerefs/heads/master
#gitpullblogmaster
#gitpushblogmaster</pre><p>2.强制更新</p><pre class="brush:bash;toolbar:false">#gitpush-fblogmaster</pre><p>//注意,会覆盖远程仓库上的文件,慎用</p><p>以上步骤就能解决了。</p><p>再来说说如果服务器上已经有项目的话如何快速git到本地,首先进入Liunx中项目根目录把项目拉取到服务器git仓库</p><pre class="brush:bash;toolbar:false">#cd/home/wwwroot/newproject//进入项目目录
#gitinit
#gitadd.
#gitconfiguser.email"test@qq.com"
#gitconfiguser.name"test"
#gitcommit-m"firstup"
#gitstatus
#gitremoteaddtestsgit@127.0.0.1:22/home/www/project.git
#gitpushtestsmaster</pre><p>服务器git仓库拉取完成之后再在win用git工具把项目拉取下来。</p>