我在Windows上使用 msysgit git来操作中央svn存储库。我正在使用git 我希望它拥有令人敬畏的小型本地分支,用于所有事情并相互重新定位。
我还需要经常从中央仓库更新,所以使用单独的svn / git不是一种选择。
问题是 - git svn --help
(手册页)说使用git merge
进入主分支(设置为从svn的 trunk ),因为这会破坏聚会,git svn dcommit
将不再起作用。
我知道这不完全正确,如果你要合并,你可以使用git merge
在 master 之前合并时已正确重新分支的分支,但我正在努力使其更安全并实际使用git format-patch
和git am
。我们正在使用代码审查,所以无论如何我都在制作补丁。我也知道git cherry-pick
,但我想只是git am /reviewed/patches/dir/*
而没有实际回想起与这个补丁相对应的提交(没有读取补丁,就是这样)。
那么,git svn
和git am
出了什么问题?这很简单 - git am
对于一些非常难点的事情是将 CRLF 转换为 LF 转换所提供的补丁(git-mailsplit
这样做,准确无误),如果没有变基。 git format-patch
也正在生成适当的(LF端)补丁。
由于我的回购主要是 CRLF (并且应该保持这样),因此修补程序显然由于错误的EOL而失败。将差异转换为 CRLF 并以某种方式篡改git am
以防止转换也不起作用。如果删除或删除任何文件,它将失败 - git apply
将抱怨预期的/ dev / null(但他得到/dev/null^M
)。
如果我将它与git am --ignore-space-change --ignore-whitespace
一起应用它
将LF结尾直接提交到索引,这也很奇怪。我不知道它是否会保留过来提交到svn(通过git svn dcommit
)并检查出来并且我不想尝试。
当然,仍然可以尝试黑客攻击只转换实际差异,但这对于简单的任务来说太多了。
所以,我想知道,是否真的没有既定的方法来生成补丁并将它们应用到同一系统上的同一个回购中? msysgit 无法应用自己的补丁感觉很奇怪。
答案 0 :(得分:3)
git format-patch --ignore-space-change --ignore-whitespace
git am --keep-cr --ignore-whitespace
这对我有帮助。如果你读到这篇文章,你可以更好地理解。