Git和pbxproj

Dar*_*dus 30 git xcode

我在看一个开源的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,你不想这样对待它,因为它实际上是一个轻量级的数据库 - 如果两个人改变它就不能合并内容,而差异通常没有帮助.该文件旨在由机器使用.实质上,您希望将其视为二进制文件.

  • Scott Chacon的引用是完全错误的..pbxproj格式完全"人性化",可以轻松修改......顺便说一下,我最近开始使用"merge = union"来表示.pbxproj文件,到目前为止看起来还不行...... (17认同)
  • 在我(实际上有点受限)的经历中,非常简单的更改(例如添加新文件)通常可以合并到.pbxproj文件中.如果你做了更复杂的事情,比如有一个分支添加一个文件,另一个重新安排你的源组,那么你通常会得到一个损坏的.pbxproj,但对于简单的东西,它通常是可行的.我不确定是否最好将.pbxproj文件视为二进制文件. (11认同)
  • 在99%的情况下,合并项目文件失败的是两个人添加新文件的时候.然后是冲突,通过接受这两个变化很容易解决.除此之外,如果一个人做了类似更改设置的事情,那么很容易因其他变化而书呆子.如果你考虑一下,JSON就像SCM系统必须合并的任何其他代码一样. (4认同)

Ort*_*ntz 7

在提交时,diff经常用于检查已更改的内容.所以我发现保持差异能力是有用的,但只是防止合并.所以我在我的.gitattributes文件中使用它:

*.pbxproj -crlf -merge

另一方面,有没有人尝试过使用merge = union来获取pbxproj文件?请参阅:我应该使用merge = union将.pbxproj文件与git合并吗?


jol*_*uly 6

*.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)

完毕。希望这能帮助新读者,就像它帮助我一样。