【发布时间】:2014-05-14 11:09:34
【问题描述】:
我有一个应用程序的 GIT 存储库。应用程序启动了一个长时间运行的进程,我想在后台继续运行。
当我对任何应用程序配置文件进行更改,提交这些更改,然后 git-push 这些更改时,一切正常。长时间运行的过程会提取我推送的配置更改。
但有时,我在提交历史记录中犯了一个错误,并使用变基清除了这些提交。然后我使用 git push -f 强制清除的更改通过。这样做会终止长时间运行的进程。
为什么会这样?
据我了解,当我 git-push 提交时,它只会更改我编辑过的代码行。
我是否认为使用 git push -f 改变的不仅仅是我已清除的提交中的行?我怀疑 git push -f 命令也在刷新(虽然没有改变)仓库中的其他应用程序文件,如果不是全部的话,这就是为什么进程在回滚尝试时死掉的原因......
有人有明确的答案吗?
【问题讨论】:
-
你为什么不加评论就把问题记下来?这个问题有什么问题吗,或者我想做的事情有什么问题吗?
-
你能告诉我们更多关于你的长期运行的应用程序在做什么吗?它对 Git 有任何了解吗?它是如何崩溃的?您是否丢弃了您的应用程序正在使用的东西?例如,假设需要设置一些配置值
foo,并且在您放弃提交后它不再存在。我假设这个长时间运行的应用程序在您的本地机器以外的地方运行? FWIW,我没有拒绝你的问题。 -
嗯...当我使用'git revert'时,长时间运行的进程不会终止。因此,GIT 无疑将 git push -f 与标准 git push 区别对待。本地进程是一个长时间运行的服务,它被写入(希望)是容错的。现在我不是*nix专家,但我很确定如果可执行文件本身在进程运行时被刷新/替换,那么进程就会死掉......我想知道的是如果 git push -f正在刷新我没有命令它不刷新的文件。如果我决定每次都使用 -f 会发生什么,即使没有变基?
-
--force-flag 的行为在manual 中有很好的描述,并声明远程引用将被覆盖而无需任何检查!如果您想“覆盖”其他贡献者的更改,您可以正常使用它。不建议永久使用它。到目前为止,您的问题还不够具体,无法为您提供有用的答案,请尝试添加有关您的问题的更多详细信息(进行编辑)。 - 此外,我也没有投票。 -
git push不会影响任何工作树文件...它只会将对象推送到远程存储库,无论-f是否通过都是如此。现在,如果您的长时间运行的进程在 repo 附近运行,并且您有一个正在更新工作树的接收后挂钩设置,那么情况就不同了……但这似乎不是您所描述的.git push将修改的是.git文件夹中的引用。一旦另一端表明 refs 已更新,Git 将更新这些 refs 的本地版本。但是没有工作树更改。
标签: linux git bash process crash