我想使用git来管理远程服务器上的一些数据,所以我在那里建立了一个非裸露的存储库。我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除。我必须ssh进入服务器,并执行Git:如何在推送到远程目录时进行更新?
git reset --hard HEAD
获取文件结构以实际更新。
要做什么?
我想使用git来管理远程服务器上的一些数据,所以我在那里建立了一个非裸露的存储库。我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除。我必须ssh进入服务器,并执行Git:如何在推送到远程目录时进行更新?
git reset --hard HEAD
获取文件结构以实际更新。
要做什么?
你不应该这样做。建议使用裸存储库。换句话说,没有文件检出,只是.git目录本身。然后,您可以将存储库检出到服务器上的其他位置 - 比如说您的web根目录。这样,您将得到:
git best practice。根据Git文档,如果你不遵守它,你可能会得到“意想不到的结果”。任何编程完成的人都知道,“意想不到的结果”是代码“可能会吃掉你的孩子,应该不惜一切代价避免。”
更好的安全性,如果你打算让服务器上的检出文件可以从网络服务器访问。
对签出的代码进行本地修改,并且能够快速更改实时签出的代码。您可以尝试直接在存储库上执行此操作,但这会很麻烦并且更容易出错。
能够更新您的服务器存储库,而不必更新您的实时服务代码。这非常重要,如果您正在远程工作并需要向服务器发送某些内容,然后在准备好实时服务之前做进一步工作,或者如果您的实时服务代码发生更改(例如,不同的配置设置),并且需要将这些更改与回购中的更改合并在一起,但现在不能这样做。
我建议以下步骤:
Git版本1.9.1
Ubuntu服务器14。04 LTS
LAMP服务器
设置我的LAMP服务器来更新我的Git回购我的工作目录,每当我的web开发一个推更改了服务器。我注意到日志会记录新的提交,但不会更新工作目录。对于每次更新,不要手动执行此操作(git checkout -f),可以在接收到推送后自动设置。
#/ bin/sh的
#更新工作目录:
与此内容的“挂钩”文件夹中创建一个名为“后收到”文件!
#这应该针对git工作目录。
GIT_WORK_TREE = /无功/网络/ dev_site GIT中结帐-f
启用权限通过键入在 “挂钩” 文件夹 “使用chmod + X后接收” 来执行该文件。
当提交到Git仓库时,它将会更新工作目录。我的网站现在显示当我在浏览器中访问它时所做的更改。
我的工作目录是/ var/WWW/dev_site
GIT_WORK_TREE行应该指向你的工作目录。 – 2015-01-28 00:02:43
这是一个定期回购,而不是一个裸回购。裸露的回购没有工作目录。 – 2015-01-28 00:25:07
这令人高兴的是,现在直接支持Git的本身!你可以找到这个答案的细节,我刚才upvoted:
https://stackoverflow.com/a/38363683/85360
它建议远程与
git config receive.denyCurrentBranch updateInstead
配置这样是推动导致更新的工作副本!
太好了,谢谢!我非常感谢SO如何让我跟踪我曾经问过的事情。我认为接受答案中的许多要点仍然有效(也许并不是“检出代码的实时更改”),但对于许多情况下可能不是“生产使用”的情况,这非常有用。 – Felixyz 2016-11-19 18:34:45
非常有用的答案。谢谢! – Felixyz 2009-09-21 20:48:24
但至少对于各种非生产设置,请参阅Brandon Rhodes的答案。 – Felixyz 2016-11-19 18:35:30