使用XCode 4.0在多用户环境中进行Subversion

时间:2011-07-29 09:56:25

标签: xcode svn version-control xcode4 merge

我一直在使用XCode和Subversion一段时间,当我将它作为单个开发人员使用时没有引起任何问题(我只使用了2个命令,提交和添加)。

但是现在我必须与另一个开发人员(他从未使用过任何类型的版本控制)共享代码,并且集成/合并代码已成为一场噩梦。我们在整合/合并.h/.m文件时没有问题,但是一旦涉及".nib""xcodeproj"".xcdatamodeld"文件,我们真的不知道该怎么做

每当我们尝试合并"xcodeproj"时,项目就会变得腐败,合并".xcdatamodeld"对我们来说是不可能的。

所以我想知道是否有人可以分享他/她在多用户环境中如何有效地使用Subversion / git / mercurial与XCode 4.0的经验?或者共享链接,这可以解释如何在多用户环境中有效地使用subversion。

感谢。

3 个答案:

答案 0 :(得分:4)

您是否使用Subversion执行此操作?对于存储库中90%到99%的文件,checkout,edit,commit的标准Subversion工作流程运行良好。但是,对于某些类型的文件,例如JPEGS和GIFS,根本不能很好地合并。在这种情况下,您必须按照我们在旧SCCS和RCS中使用的方式进行操作:在编辑和提交文件之前,必须将其锁定。

锁定文件可防止其他人编辑同一文件并在您对文件执行操作时提交更改。这很粗糙,但它确实有效。在Subversion中,您始终可以锁定正在编辑的任何文件,但如果文件上有属性svn:needs-lock,则它将以只读方式签出。您必须在编辑文件之前将其锁定以使其可写,并且除非文件被锁定,否则不允许提交文件。

因此,对于这些文件,请在其上设置svn:needs-lock属性。

您可以通过在Subversion客户端配置中设置auto-properties,自动在所有新添加的文件上设置此属性(取决于后缀)。

而且,如果你真的,真的想确保所有.nibs和xcodeproj以及这些类型的所有其他果蝇都设置了svn:needs-lock,你可以使用我的pre-commit hook除非设置了此属性,否则将阻止提交这些文件。

答案 1 :(得分:0)

没有故障安全的方法来合并我所知道的这些类型的文件。所以你必须这样做 尽量确保一次只有一个人在更改这些文件。这不会一直有效,所以只需使用提交消息记录您在文件中更改的内容。然后,如果存在冲突,您可以通过获取更改了更多文件的版本并手动重做另一个人所执行的操作来手动解决它。

这通常不是什么大问题,比如将新的源文件添加到.xcodeproject,或更改.nib中元素的对齐方式。如果您的项目很大或您的笔尖包含整个界面,那就会成为一个问题。为了使其运行良好(实际上它确实如此),如果项目变得太大,您需要将项目拆分为子项目。

答案 2 :(得分:0)

我和另外两个开发人员Xcode和git有同样的问题。不幸的是,Xcode项目文件是一个XML文件,跟踪项目中包含的文件以及设置。我不确定,但我认为.nib文件也是XML文件。有人可以纠正我。

Git在合并Xcode项目文件方面做得非常出色,我们的* .nib文件也没有任何问题。我们唯一遇到问题的时候是我们都添加/删除了具有相同名称的文件,或者有人做了大量的重复删除和添加了大量文件。

我们解决这个问题的唯一方法就是在我们添加/删除文件后立即互相推动。因此,这个人拥有最新的文件,并没有将它们添加到自己的存储库中,然后拉出最新的提交,其中包含相同的文件。或者他们的工作是将更改添加到已删除或重命名的文件中。

这是我们找到的最佳解决方案,只要我们添加或删除文件,团队中的其他人就会拉动。不是一个很好的解决方案。但是,无论如何你应该经常做出承诺。