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状态更容易