【问题标题】:Does Using 'git push -f' On A Remote Repo Refresh The Entire Folder?在远程仓库中使用 'git push -f' 会刷新整个文件夹吗?
【发布时间】: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


【解决方案1】:

虽然我仍有怀疑,但我认为问题可能只是由粗心的提交导致,该提交覆盖了进程所基于的文件。

如果我发现任何新的东西(尽可能),那么我会更新答案。 感谢您的帮助。

更新

我很确定现在不是 GIT。这是因为长时间运行的进程将消息打印到终端。当我测试 GIT 钩子时,我总是打开一个 SSH 终端,所以程序运行良好。但是当我关闭终端并从远程机器进行上游推送时,应用程序没有终端可以打印消息到...

哦。

对此进行核算似乎可行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2017-04-15
    • 2017-05-10
    • 2018-10-31
    相关资源
    最近更新 更多