将Windows PHP项目迁移到Git并应用OSX更新/修补程序
问题描述:
我有一个没有任何版本控制的基于Windows的PHP项目(CRLF Newlines)。我最近把这个项目放到我的OSX机器上的Git上。另一位开发人员在不在Git中的情况下对源代码进行了更改(在单独的机器上),现在我必须将这些更改合并到回购中。将Windows PHP项目迁移到Git并应用OSX更新/修补程序
我原来的计划是使用diff/patch来使所有的事情都同步起来。问题在于,他在OSX上进行了更新,因此我必须转换换行符才能进行diff/patch工作。
有没有办法使CRLF换行符差异化工作?根据我读过的内容,在应用diff之前,您必须先将转换转换为LF。
如果不是,我只需递归遍历所有文件并进行换行符转换?
我是否会以适当的方式更新此回购协议?
答
创建补丁程序时,应该能够告诉您用来忽略EOL更改或空白更改的工具。另外git apply
和git am
有一些关于它们如何处理空白的选项,但我没有使用它们,所以我不确定它们如何处理具有额外空白和EOL变化的差异。
恕我直言,真正的解决方案是修正所有CRLFs在您的回购LF,因为如果一切都使用回购LF线结尾,git效果最好。如果需要,可以选择在结账时将行结尾更改为CRLF,同时仍在内部使用LF。
答
甜!
首先,我需要摆脱所有的CRLFs。我用rm -rf .git/
杀死了我的整个git回购。然后我大致遵循GitHub的Dealing with Line Endings,这是从这个* 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 .
我然后跑diff
和patch
对相应的文件夹,跑到最后commit
。一切都同步了!
感谢您的反馈!你指出我正确的方向。 – 2011-02-25 20:56:41