我在看一个开源的Mac应用程序,他们为.gitignore提供了一些建议值.他们是我所期待的......
但是,他们还建议输入.gitattributes文件:
*.pbxproj -crlf -diff -merge
就git而言,我不是最知识的,所以我想知道 - 添加这条线的好处是什么?具体做什么?我在这个项目中只看到了这个建议,如果这是正常的做法,我本来希望现在可以在其他地方看到它.所以我很好奇它是如何特别适用于pbxproj文件的.
Gra*_*erg 27
pbxproj文件实际上并不是人类可以合并的.虽然它是纯ASCII文本,但它是JSON的一种形式.基本上你想把它当作二进制文件.
这是各个标志的作用:
-crlf:不要使用crlf <=> cr转换
-diff:不要区分文件
-merge:不要尝试合并文件
来自Scott Chacon 的Pro Git书
有些文件看起来像文本文件,但是所有意图和目的都被视为二进制数据.例如,Mac上的Xcode项目包含一个以.pbxproj结尾的文件,该文件基本上是由IDE写入磁盘的JSON(纯文本javascript数据格式)数据集,用于记录您的构建设置等.虽然它在技术上是一个文本文件,因为它是全部ASCII,你不想这样对待它,因为它实际上是一个轻量级的数据库 - 如果两个人改变它就不能合并内容,而差异通常没有帮助.该文件旨在由机器使用.实质上,您希望将其视为二进制文件.
在提交时,diff经常用于检查已更改的内容.所以我发现保持差异能力是有用的,但只是防止合并.所以我在我的.gitattributes文件中使用它:
*.pbxproj -crlf -merge
另一方面,有没有人尝试过使用merge = union来获取pbxproj文件?请参阅:我应该使用merge = union将.pbxproj文件与git合并吗?
*.pbxproj手动解决合并冲突后,我遇到了文件损坏的问题。或者,更常见的是,我的文件在合并后从工作树中“消失”。这让我很生气,因为我们是一个团队工作,所以你可以想象它会变得多么混乱。
所以,我已经测试过merge=union,到目前为止效果很好。我知道如果同时删除或重命名文件也无济于事,但是对于添加新文件它会按预期工作:不存在冲突并且文件在合并后不会消失。而且还节省了不少时间。
如果你想尝试一下,这就是我所做的。
1) 创建全局 .gitattributes 文件。在终端中运行:
touch ~/.gitattributes
git config --global core.attributesfile ~/.gitattributes
Run Code Online (Sandbox Code Playgroud)
2)此命令应在文本编辑器中打开它:
open ~/.gitattributes
Run Code Online (Sandbox Code Playgroud)
3)当文件打开时,添加此行并保存文件:
*.pbxproj binary merge=union
Run Code Online (Sandbox Code Playgroud)
完毕。希望这能帮助新读者,就像它帮助我一样。