Git推送到服务器

时间:2010-09-16 15:12:54

标签: 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

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

local: git push origin master
local: password: ********
local: git push webserver master
local: password: ********

6 个答案:

答案 0 :(得分:36)

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

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/

希望这有帮助!

答案 1 :(得分:29)

我有相同的查询,并且不满意当前最高投票的答案,最后跟随git-website-howto,它很好地概述了这个过程,并且IMO是一个更清洁,更快捷的方法。

TL; DR,git init --bare在您的网络服务器上创建一个新的仓库,您将从您的开发机器推送您的更改。当网络仓库收到您的更改时,它会触发后接收挂钩,然后将文件复制到您的网络根目录。

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

注意:您需要在网络服务器仓库上运行git config receive.denycurrentbranch ignore,以便在推送时禁止在本地开发框上发出警告。

答案 2 :(得分:10)

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

的git网址部分

所以你会尝试:

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

答案 3 :(得分:4)

我认为您要查找的功能在此处描述:http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6-544f4834cda3

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

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

答案 4 :(得分:1)

  1. 添加远程$ git remote add server ssh://server_hostname:/path/to/git/repo
  2. 服务器$ git checkout -b temp上的Checkout temp分支
  3. 推送更改$ git push server
  4. 签出上一个分支并删除临时分支 $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

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

答案 5 :(得分:0)

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

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

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

如果文件没有更改,则为空,比解析git status

更容易