Git推送服务器
我们有一个网站,其所有的PHP / HTML / JS / CSS /等文件存储在一个Git仓库。
我们目前有3种types的计算机(或用例)用于存储库。
- 本地开发人员:最新更改,更改,提交本地回购,推送到主服务器
- 主服务器:中央存储库,所有更改被推送到主服务器
- Web服务器:在部署网站时,更改从主服务器上拉下来
所以目前我们:
local: git push origin master local: password: ******** local: ssh admin@webserver.com webserver: password: ******** webserver: cd ~/domain.com/ webserver: git pull origin master
所以我的问题是:有没有办法从我的本地计算机,我可以直接推到networking服务器?
即。
local: git push origin master local: password: ******** local: git push webserver master local: password: ********
是的,您可以直接推送到您的networking服务器,但我不会推荐它,因为您应该只推送到与–bare参数克隆的存储库。 我会利用git钩子系统让主存储库自动更新Web服务器上的回购。 查看更新后的挂钩:
http://git-scm.com/docs/githooks
这个脚本可以通过ssh和dologin到web服务器
cd ~/domain.com/ git checkout master git pull origin master
这样你只需要关注推送到中央服务器,而不必关心networking服务器,一旦推动就会一直更新。 如果你可以自动化的东西,然后自动化:)
我甚至find了一篇关于通过脚本通过sshlogin的好文章(如果你必须使用密码,如果已经设置了ssh-key,这很简单):
http://bash.cyberciti.biz/security/expect-ssh-login-script/
希望这可以帮助!
我有同样的疑问,并不满意当前最高票的答案在这里结束了下面的git-website-howto概述了这个过程相当好,是一个更清洁和更快的方法。
TL; DR, git init --bare
在你的web服务器上创build一个新的repo,你将从你的开发机器上推送你的更改。 当networking回购收到您的更改,它会触发后接收挂钩,然后将文件复制到您的网站的根。
我喜欢这种方法,因为post-receive钩子可以在你的服务器上工作,所以你的本地机器可以更快速地释放它。 这也使得为特定分支设置远程跟踪变得非常容易。 所以你可以有一个叫production
的分支来更新你的Web服务器,而你的主人仍然是开发和链接到你的其他地方的Git仓库。
注意:你需要在你的web服务器repo上运行git config receive.denycurrentbranch ignore
来在推送时禁止你本地开发箱上的警告。
看看http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html的giturl部分;
所以你会尝试:
git push ssh://admin@webserver.com/~admin/domain.com/ master
ADDED:我想你所要求的部分是如何有多个远程存储库。
git remote add webserver ssh://admin@webserver.com/~admin/domain.com/
允许你运行:
git push origin master git push webserver master
我认为你正在寻找的function在这里描述: http : //debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook : 49551efe-6414-4e86-aec6- 544f4834cda3
从local
你可以添加networking服务器作为一个远程,就像你会做任何其他:
git remote add webserver admin@webserver:/path/to/repo.git/ # push only master branch by default git config remote.webserver.push master
现在,当你准备推动你可以做:
git push webserver
在部署本地更改之前,请检查目标服务器上是否有任何更改。
添加到部署脚本以确保服务器上没有任何更改:
$ git ls-files -dmo --exclude-standard
如果文件没有变化,将是空的,比parsinggit状态更容易