0

一个很常见的场景:

我们有一个裸存储库。如果开发人员git push从他们的本地机器到barerepo,然后另一个开发人员git pull更新了应用程序的本地版本(包括文件)。

但是,有时,当直接(由我们的主机或其他)remote working treeremote working tree.

根据这个:

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

推送操作总是关于传播存储库历史和更新 refs,并且从不触及工作树文件。特别是,如果您推送更新在远程存储库中签出的分支,则不会更新工作树中的文件。

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

无论如何,如果我们执行 git push,则不会触及任何工作树文件。行。

所以为了解决这个问题:

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

“git重置--硬”

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

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

但什么都没有改变。

1)如果所有开发人员只是通过一个裸(无工作树)存储库推拉,他们如何更新工作树?(文件在哪里通过?)

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

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

更新

我正在使用 dev 和 master 分支。在本地和远程,除此之外,我正在使用这个模式:

该系统的关键思想是网站作为一对存储库存在于服务器上;与包含实时站点的常规存储库一起的裸存储库。两个简单的 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 来更新实时站点。任何直接在服务器上编辑的文件都会在提交时立即镜像到 Hub。

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

4

1 回答 1

1

据我了解,您至少有三个存储库:localhubwww/dev. 您使用localrepo 进行工作(进行更改、提交和推送hub)。有时www工作树会被网络服务器修改。如果您想将这些更改保留在版本控制之下,您可以将它们提交到www/devrepo,甚至将提交www/devhub. (您可能可以通过 cron 作业自动执行此操作。我建议使用 的输出git status来确定您是否要提交。)

您最初的问题听起来像是回购的工作副本与回购本身www/dev不同步。www/dev在聊天中进一步讨论之后,似乎www/dev回购并不总是与hub回购保持同步。您只需要确保在必要时git pullwww/devrepo 中运行(可能使用钩子或其他脚本)。

于 2013-03-18T20:30:23.500 回答