使用心得如下:
git有个hooks功能,每次push提交代码的时候,可以触发远程服务器上的hooks,执行shell。 利用这个功能,每次在本地写好内容,直接push到远程服务器上,就可以根据写好的shel自动部署了。用起来相当方便,下面就记录下配置过程:
一、在远程服务器上创建代码仓库(Linux)
# mkdir -p /home/www/project.git
# chmod 777 /home/www
# cd /home/www/project.git
# git init --bare //创建一个裸仓库
# useradd -s /bin/bash git //因为需要执行shell,把shell指定成/usr/bin/git-shell 或/sbin/nogin 无法使用git hooks来更新blog
# chown git:git -R /home/www/project.git
二、配置本地无密码登录远程服务器(win)
# ssh-keygen // 一路回车
然后复制生成的key(当前用户下的.ssh/id_rsa.pub)
切换到Linux
# mkdir -p /home/git/.ssh
# vim /home/git/.ssh/authorized_keys //把上面复制的key粘贴进去,后保存退出
# chown git:git -R /home/git/.ssh
# chmod 600 /home/git/.ssh/authorized_keys //权限不要出错
# chmod 755 /home/git/.ssh
三、本地初始化git,并且添加远程仓库(win)
# d: //进入D盘
# mkdir -p project
# cd project
# git init
# git config user.email "wzp@qq.com"
# git config user.name "wzp"
# echo "1111" > 1.txt
# git add 1.txt
# git commit -m "add 1.txt"
# git remote add blog ssh://git@127.0.0.1:22/home/www/project.git //添加远程仓库还没有提交过,所以要先提交一次. 注意ssh后面有://
# git push blog master //提交到主干
git remote add <分支名> <远程地址> //上面的blog 就是分支,这个可以随便自定义
如果git remote add 加错了,可以使用 git remote rm <分支名> 来删掉:
# git remote rm blog
//以后使用这个克隆就行了
//git clone ssh://git@127.0.0.1:22/home/www/project
//ssh协议,后面是 用户@地址:端口/目录
四、添加hooks
# cd /home/www/project.git/hooks
# vim post-receive
#!/bin/sh
#
PATH=$PATH:/usr/local/python27/bin
GIT_WORK_TREE=/home/www/newproject git checkout -f
cd /home/www/newproject && make html >/dev/null 2>&1
chmod +x post-receive
chown git:git -R /home/www/newproject
注意:写hooks的时候要特别注意环境变量问题。
错误记录:
文件冲突
# git push blog master
> error: failed to push some refs to 'ssh://git@127.0.0.1/home/www/project'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.
这个是因为你本地的代码和git远程仓库的代码出现了冲突 解决办法:
1.先把远程文件拉下来,再push
# git config branch.master.remote blog
# git config branch.master.merge refs/heads/master
# git pull blog master
# git push blog master
2.强制更新
# git push -f blog master
//注意,会覆盖远程仓库上的文件,慎用
以上步骤就能解决了。
再来说说如果服务器上已经有项目的话如何快速git到本地,首先进入Liunx中项目根目录把项目拉取到服务器git仓库
# cd /home/wwwroot/newproject //进入项目目录
# git init
# git add .
# git config user.email "test@qq.com"
# git config user.name "test"
# git commit -m "first up"
# git status
# git remote add tests git@127.0.0.1:22/home/www/project.git
# git push tests master
服务器git仓库拉取完成之后再在win用git工具把项目拉取下来。
sourcetree 图形Git工具 https://www.sourcetreeapp.com/