【问题标题】:Git apply patch fails silently (no errors but nothing happens)Git 应用补丁静默失败(没有错误但没有任何反应)
【发布时间】:2014-09-09 09:08:26
【问题描述】:

我正在尝试应用补丁,而 git apply patch 没有给我任何错误:

sashoalm@SASHOALM-PC /c/Workspace/tesseract-git/api (master)
$ git apply ../../commit-d0d9477

sashoalm@SASHOALM-PC /c/Workspace/tesseract-git/api (master)
$

如您所见,没有给出错误消息。但是当我打开历史时,什么都没有提交,索引是空的。就好像我没有发出git apply 命令一样。

我不知道如何解决这个问题,因为 Google 没有错误。

编辑:我忘了说,但我正在尝试从 Tesseract 的存储库中移植我的补丁,在那里我获得了没有版本控制的源代码,创建了我自己的空 git 存储库,并制作了一些提交。后来我使用git svn 克隆了 Tesseract 存储库,现在我正在尝试将我的补丁移到那里。

【问题讨论】:

  • 也许补丁尝试应用的更改已经在您的存储库中?在这种情况下,补丁将适用,但不会有任何改变。至少我认为是这样的。
  • @Zeeker 在我的情况下不是 - 这些更改是我做出的,它们不可能出现在我克隆的官方仓库中。

标签: git patch msysgit


【解决方案1】:

我在谷歌搜索时发现了这个问题:http://data.agaric.com/git-apply-does-not-work-from-within-local-checkout-unrelated-git-repository

git apply 在 git 存储库的本地签出中使用时将无法执行任何操作(除了为项目制作补丁的项目),例如,如果您正在修补站点内的模块在 Git 版本控制中。

请改用patch -p1 < path/file.patch

【讨论】:

  • 我正在努力理解为什么 git 返回成功(状态 0)但当我尝试从子目录运行它时不应用补丁。现在我知道我必须始终确保 git apply 从我的存储库的根目录运行。这在自动化脚本中可能很棘手。
  • 谢谢。我正在从一个子目录应用 git patch 并且它默默地失败了。只需要进入根目录并应用补丁就很开心了。
  • 谢谢,我现在不能相信 git apply 也很恼火!
  • 谢谢,@JustAMartin,你救了我的培根(和理智)。
【解决方案2】:

对于 B_ 的回答,您可能认为使用 git diff --no-prefix 意味着您不需要在 patch 上使用 -p 标志。看来你错了,至少在patch 的版本中我在这里(2.5),没有-p 标志与-p0 不同。 -p0 有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2018-04-06
    • 2015-01-23
    • 2022-09-29
    • 2017-03-04
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多