git push文件无法远程更新

时间:2013-03-18 18:53:00

标签: git

一种非常常见的情况:

我们有一个裸存储库。 如果开发人员从本地计算机git pushbare repo,然后另一位开发人员git pull他们就会更新应用程序的本地版本(包含文件)。

但是,当remote working tree直接(由主持人或其他人)进行更改时,我们最终会在本地计算机上使用不同的文件版本,remote working tree得到的总是过时的!

根据这个:

https://git.wiki.kernel.org/index.php/GitFaq#non-bare

  

推送操作始终是关于传播存储库历史记录   并更新引用,永远不会触及工作树文件。在   特别是,如果你推动更新在a中签出的分支   远程存储库不会更新工作树中的文件。

我不确定checked out in a remote repository是什么意思。我没有让任何git checkout whatever远程使用ssh切换分支(如果这意味着什么)。

无论如何,如果我们进行git push,就不会触及工作树文件。确定。

所以为了解决这个问题:

  

如果您确定自己在做什么,可以执行“git reset --hard”   你推到的那一方。请注意,这将失去您所做的所有更改   在那一侧,将工作树重置为最新版本   推压。

“git reset --hard”

我这样做了,但没有改变。它说:

HEAD is now at 45d948a Merge branch 'dev' of /home/blabla/private/repos/blabla_hub into dev

但没有任何改变。

1)如果工作树只是通过裸(无工作树)存储库推送和拉动,那么所有开发人员如何更新工作树? (文件在哪里通过?)

2)为什么我没有按预期更新remote working tree

我的问题清楚了吗?请指教。

更新

我正在使用开发和主分支。本地和远程,除此之外,我正在使用这个架构:

  

该系统的关键思想是该网站存在于服务器上   作为一对存储库;一个裸露的存储库和传统的存储库   包含实时站点的存储库。两个简单的Git钩子连接起来   对,自动推动和拉动它们之间的变化。

     

这两个存储库:

Hub is a bare repository. All other repositories will be cloned from this.
Prime is a standard repository, the live web site is served from its working directory.
     

使用这对存储库非常简单灵活。远程克隆   使用ssh-access可以通过简单的git push来更新实时站点   毂。直接在服务器上编辑的任何文件都会立即进行镜像   在提交时进入Hub。

REF。 http://joemaller.com/990/a-web-focused-git-workflow/

1 个答案:

答案 0 :(得分:1)

根据我的理解,您至少有三个回购:localhubwww/dev。您使用local repo进行工作(进行更改,提交并推送到hub)。有时,www工作树会被网络服务器修改。如果您希望在版本控制下保留这些更改,可以将它们提交到www/dev repo,甚至将提交从www/dev推送到hub。 (您可以使用cron作业自动执行此操作。我建议使用git status的输出来确定是否要进行提交。)

您的原始问题听起来好像www/dev repo的工作副本与www/dev repo本身不同步。在聊天中进一步讨论后,似乎www/dev回购并非始终与hub回购更新。您只需确保在必要时在git pull repo中运行www/dev(可能使用钩子或其他脚本)。