Git推送到服务器

Pet*_*tah 50 git deployment push git-push git-remote

我们有一个网站,其所有PHP/HTML/JS/CSS/etc文件都存储在Git存储库中.

我们目前有3种类型的计算机(或用例)用于存储库.

  • 本地开发人员:提取最新更改,进行更改,提交本地仓库,推送到主服务器
  • 主服务器:中央存储库,所有更改都被推送到主服务器
  • Web服务器:部署网站时从主服务器下拉更改

所以目前我们:

local: git push origin master
local: password: ********
local: ssh admin@webserver.com
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull origin master
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有办法从我的本地电脑直接推送到网络服务器?

即.

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********
Run Code Online (Sandbox Code Playgroud)

ral*_*nja 37

是的,您可以直接推送到您的网络服务器,但我不推荐它,因为您应该只推送使用--bare参数克隆的存储库.我利用git hook系统让主存储库自动更新Web服务器上的repo.查看更新后的挂钩:

http://git-scm.com/docs/githooks

该脚本可以通过ssh登录到Web服务器并执行

cd ~/domain.com/
git checkout master
git pull origin master
Run Code Online (Sandbox Code Playgroud)

这样,您只需要专注于推送到中央服务器而不必关心Web服务器,一旦推送完成,它将始终更新.如果你可以自动化某些东西,那么自动化:)

我甚至为你找到了一篇很好的文章,通过脚本中的ssh登录(如果必须使用密码,如果设置了ssh-key,这是微不足道的):

http://bash.cyberciti.biz/security/expect-ssh-login-script/

希望这可以帮助!


ale*_*emb 29

我有同样的问题,并且不满意当前最高投票的答案,最后关注git-website-howto,它很好地概述了这个过程,并且IMO是一个更清洁,更快捷的方法.

TL; DR,git init --bare在您的Web服务器上创建一个新的仓库,您可以从您的开发机器中推送您的更改.当Web回购收到您的更改时,它会触发post-receive挂钩,然后将文件复制到您的Web根目录.

我喜欢这种方法,因为后接收挂钩可以在您的服务器上完成工作,因此您的本地计算机可以更快地推送并释放自己.这也使得为特定分支设置远程跟踪变得非常容易.因此,您可以让一个分支调用production来更新您的Web服务器,而您的主人继续进行开发并链接到其他地方的git repo.

注意:您需要git config receive.denycurrentbranch ignore在Web服务器repo上运行以在推送时禁止在本地开发框上发出警告.


Tim*_*han 10

查看http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html的git urls部分

所以你会尝试:

git push ssh://admin@webserver.com/~admin/domain.com/ master
Run Code Online (Sandbox Code Playgroud)

补充:我认为您要求的部分内容是如何拥有多个远程存储库.

git remote add webserver ssh://admin@webserver.com/~admin/domain.com/
Run Code Online (Sandbox Code Playgroud)

允许你运行:

   git push origin master
   git push webserver master
Run Code Online (Sandbox Code Playgroud)