$ git init server
$ cd server
$ touch a
$ git add .
$ git commit -m 0
$ git config --local receive.denyCurrentBranch updateInstead
$ cd ..
$ git clone server local
$ cd local
$ touch b
$ git add .
$ git commit -m 1
$ git push origin master:master
$ cd ../server
$ ls # output:a b
附:第二次 push 推送报错:
! [remote rejected] master -> master (Working directory has unstaged changes)
error: failed to push some refs to 'git-name@ip:directory/xxx.git'
方法一:直接推送部署git push to deploy
参考:
使用 Git 2.3 或更新版本后,这种技术变得更加方便。现在,你可以将更改直接 push 到服务器上的仓库。如果未对服务器进行本地修改(保留一个干净的工作目录以避免合并冲突),则将自动检出对服务器当前分支的变化,并即时部署:
注:在服务器上,若不使用
$ git init --bare xxx.git
创建一个裸仓库,而是使用$ git init xxx.git
创建一个普通仓库,这时,在本地执行$ git push
推送项目到服务器将失败,除非在$ git init xxx.git
创建仓库后执行上述命令。实例:
附:第二次 push 推送报错:
解决方法:在
.git/hooks
目录下添加 push-to-checkout 脚本:脚本内容:
然后在本地开发环境中
$ git pull
后再提交。什么时候不应该使用推送部署push to deploy
通过推送到 Git 仓库进行部署既快捷又方便,但并不适合所有人。例如:
.git
目录。你要确保它无法展示给用户。方法二:使用git钩子部署deploy by hooks
参考:
使用 Git 钩子进行博客自动部署 实例:
配置 Git Hook :将目录切换至
/repos/xxx-bare.git/hooks
,用$ cp post-update.sample post-update
命令复制并重命名文件后$ sudo vim post-update
修改,增加执行脚本:注意: 一定要
unset GIT_DIR
清除变量, 不然会引起remote: fatal: Not a git repository: ‘.’
错误。方法三:使用GitHub进行代码传输
本地开发主机提交代码到 GitHub 后,服务器
$ git clone
克隆代码仓库,或$ git pull
(等价于$ git fetch
+$ git merge
)拉取并合并代码。拉取并合并本地代码实例:
注意:
不要在服务器上直接修改代码,不然
$ git pull
会失败。假如真的修改过(例如有一些文件是自动生成的),下次更新代码时,可以删除服务器仓库的代码,重新$ git clone
GitHub 上的代码。