从SVN迁移到git后,如何解决行结束问题?

时间:2009-10-16 11:07:02

标签: svn git line line-endings

我刚刚使用

将Subversion存储库转换为git
git svn clone--stdlayout --authors-file=ourcommitters.txt svn://svn.internalserver.com

在这样做时,我将git标志'core.autocrlf'设置为'true' - 以防万一。

很长一段时间后,命令完成了。我稍微清理了生成的git存储库(删除不需要的分支,创建标签等),现在一切看起来都非常好并且运行良好。存储库托管在Linux机器上,将其克隆到其他Linux机箱上的效果非常好。

但是,我注意到一个问题:当将存储库克隆到 Windows 框时,某些文件在切换分支时似乎被修改。例如,我这样做:

git clone svn://our.git.server/foo
git status                           # Everything is clean
git checkout -t origin/maintenance   # Switch to maintenance branch
git status                           # Everything is clean
git checkout master                  # Back to master branch
git status                           # A few files are modified!

在做'git diff'时,我注意到修改过的文件似乎只有它们的行结尾。在研究这一点时,我们注意到在Subversion中使用CR-LF行结尾(而不是LF行结尾)意外地检查了这些文件,并且这个bug被转换为我们的git存储库。

有没有办法在我们的存储库中解决这个问题(到目前为止,它没有经常克隆,因此一些历史记录重写会很好)而不进行“清理提交”等?也许我们可以以某种方式默默地重写受影响的对象?

或者,我们可以在Subversion中修复此问题 - 然后再次发出上面的'git svn clone'命令。这似乎是递增的(它只会获取最新的行结束修复提交)但是再次 - 它创建了一个提交。我想知道我是否可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

事实证明,最简单的方法是修复Subversion中的错误文件,然后使用

再次克隆
git svn clone--stdlayout --authors-file=ourcommitters.txt svn://svn.internalserver.com