我们有一个网站,其所有PHP / HTML / JS / CSS / etc文件都存储在Git存储库中。
我们目前有3种类型的计算机(或用例)用于存储库。
目前我们:
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: ********
答案 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)
$ git remote add server ssh://server_hostname:/path/to/git/repo
$ git checkout -b temp
上的Checkout temp分支$ git push server
$ 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
更容易