2011-02-25 67 views
0

我有一个没有任何版本控制的基于Windows的PHP项目(CRLF Newlines)。我最近把这个项目放到我的OSX机器上的Git上。另一位开发人员在不在Git中的情况下对源代码进行了更改(在单独的机器上),现在我必须将这些更改合并到回购中。将Windows PHP项目迁移到Git并应用OSX更新/修补程序

我原来的计划是使用diff/patch来使所有的事情都同步起来。问题在于,他在OSX上进行了更新,因此我必须转换换行符才能进行diff/patch工作。

有没有办法使CRLF换行符差异化工作?根据我读过的内容,在应用diff之前,您必须先将转换转换为LF。

如果不是,我只需递归遍历所有文件并进行换行符转换?

我是否会以适当的方式更新此回购协议?

回答

1

创建补丁程序时,应该能够告诉您用来忽略EOL更改或空白更改的工具。另外git applygit am有一些关于它们如何处理空白的选项,但我没有使用它们,所以我不确定它们如何处理具有额外空白和EOL变化的差异。

恕我直言,真正的解决方案是修正所有CRLFs在您的回购LF,因为如果一切都使用回购LF线结尾,git效果最好。如果需要,可以选择在结账时将行结尾更改为CRLF,同时仍在内部使用LF。

+0

感谢您的反馈!你指出我正确的方向。 – 2011-02-25 20:56:41

0

甜!

首先,我需要摆脱所有的CRLFs。我用rm -rf .git/杀死了我的整个git回购。然后我大致遵循GitHub的Dealing with Line Endings,这是从这个stackoverflow Q&A

# switch on the conversion of line endings on commit 
$ git config --global core.autocrlf input 

# Initialize 
$ git init 
$ git add . 
$ git commit -m "First Import" 

# If you're doing this on a Unix/Mac OSX clone then optionally remove 
# the working tree and re-check everything out with the correct line endings. 
$ git ls-files -z | xargs -0 rm 
$ git checkout . 

我然后跑diffpatch对相应的文件夹,跑到最后commit。一切都同步了!

相关问题