一个很常见的场景:
我们有一个裸存储库。如果开发人员git push
从他们的本地机器到bare
repo,然后另一个开发人员git pull
更新了应用程序的本地版本(包括文件)。
但是,有时,当直接(由我们的主机或其他)remote working tree
对remote 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。