4

我在 Windows 上使用msysgit git 在中央 svn 存储库上进行操作。我正在使用 git,因为我希望它是很棒的小型本地分支,用于所有内容并相互依赖。

我还需要经常从中央仓库更新,所以使用单独的 svn/git 不是一个选项。

问题是 - git svn --help(手册页)说从本地分支使用master分支(设置为从 svn 的 trunk 跟踪git merge不是一个好主意,因为这会破坏聚会并且不再起作用。git svn dcommit

我知道这并不完全正确,git merge如果您从分支合并,该分支已根据master先前合并进行了适当的重新调整,您可以使用它,但我正在努力使其更安全并实际使用git format-patchand git am。我们正在使用代码审查,所以无论如何我都在制作补丁。我也知道git cherry-pick,但我只想git am /reviewed/patches/dir/*不实际回忆与此补丁相对应的提交(即不阅读补丁)。

那么,git svn和有什么问题git am?这很简单——git am因为一些非常困难的点是为提供的补丁执行CRLFLFgit-mailsplit转换(准确地说是这样做),如果不是变基的话。git format-patch也正在生产适当的(LF-ended)补丁。

由于我的 repo 主要是CRLF(并且应该保持如此),因此补丁显然由于错误的 EOL 而失败。将差异转换为CRLF并以某种方式git am阻止其转换也不起作用。如果任何文件被删除或删除,它将失败 -git apply会抱怨预期的 /dev/null (但他得到了/dev/null^M)。

如果我应用它git am --ignore-space-change --ignore-whitespace,它会将 LF 结尾直接提交给索引,这也很奇怪。我不知道它是否会保留过度提交到 svn (via git svn dcommit) 并检查它,我不想尝试。

当然,仍然可以尝试破解补丁以仅转换实际差异,但这对于简单的任务来说太多了。

所以,我想知道,真的没有既定的方法来生成补丁并将它们应用于同一系统上的同一 repo 吗?msysgit不能应用它自己的补丁只是感觉很奇怪。

4

1 回答 1

3
git format-patch --ignore-space-change --ignore-whitespace

git am --keep-cr --ignore-whitespace

这对我有帮助。如果您阅读本文,您可以更好地理解。

于 2014-06-12T10:52:01.200 回答