部署-Git推向现场

我们有一个网站,其所有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

所以我的问题是:有没有办法可以从本地计算机直接推送到Web服务器?

即。

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********
Petah asked 2020-01-28T12:22:15Z
6个解决方案
37 votes

是的,您可以直接推送到您的网络服务器,但是我不建议您这样做,因为您应该只推送到使用--bare参数克隆的存储库。 我会利用git hook系统让主存储库自动更新Web服务器上的存储库。 签出更新后挂钩:

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

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

cd ~/domain.com/
git checkout master
git pull origin master

这样,您只需要专注于推送到中央服务器,而不必关心Web服务器,推送完成后,它将始终被更新。 如果可以自动化,请自动化:)

我什至为您找到了一篇不错的文章,关于在脚本中通过ssh登录(如果您必须使用密码,如果已设置ssh-key,这很简单):

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

希望这可以帮助!

ralphtheninja answered 2020-01-28T12:22:55Z
29 votes

我有相同的查询,对当前的投票最多的答案不满意,最终遵循git-website-howto,它概述了整个过程,并且是IMO更加简洁快捷的方法。

TL; DR,git config receive.denycurrentbranch ignore,以在Web服务器上创建新的存储库,您将在其中从您的开发机上推送更改。 Web存储库收到您的更改后,将触发接收后钩子,然后将文件复制到您的Web根目录。

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

注意:您需要在Web服务器存储库上运行git config receive.denycurrentbranch ignore,以在推送时禁止在本地开发设备上显示警告。

aleemb answered 2020-01-28T12:23:38Z
10 votes

查看[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

添加:我认为您要查询的部分内容是如何具有多个远程存储库。

git remote add webserver ssh://admin@webserver.com/~admin/domain.com/

允许您运行:

   git push origin master
   git push webserver master
Tim Hoolihan answered 2020-01-28T12:24:27Z
4 votes

我认为您正在寻找的功能已在此处进行了描述:[http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6 -544f4834cda3]

您可以从local将Web服务器添加为远程服务器,就像执行其他任何操作一样:

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
cmcginty answered 2020-01-28T12:24:56Z
1 votes
  1. 添加远程 $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp
  2. 服务器上的检出临时分支 $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp
  3. 推送更改 $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp
  4. 检出上一个分支并删除临时分支 $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

我在这里有更多背景信息:[https://medium.com/@2upmedia/git-push-to-live-server-5100406a26]

2upmedia answered 2020-01-28T12:25:34Z
0 votes

在部署本地更改之前,请检查目标服务器上是否有任何更改。

添加到部署脚本以确保服务器上没有任何变化:

$ git ls-files -dmo --exclude-standard

如果文件未更改,将为空,比解析git status更容易

Rohan Khude answered 2020-01-28T12:26:03Z
translate from https://stackoverflow.com:/questions/3728054/git-push-to-live-server