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

使用XCode 4.0在多用户环境中进行Subversion,xcode,svn,version-control,xcode4,merge,Xcode,Svn,Version Control,Xcode4,Merge,我在subversion中使用XCode已经有一段时间了,当我作为一名开发人员使用XCode时,没有出现任何问题(我只使用了两个命令,commit和add) 但是现在我不得不与另一个开发人员(从未使用过任何版本控制)共享代码,集成/合并代码已经成为一场噩梦。当我们集成/合并.h/.m文件时不会出现问题,但一旦涉及到“.nib”、“xcodeproj”和“.xcdatamodeld”文件,我们真的不知道该怎么办 每当我们试图合并“xcodeproj”,项目都会损坏,合并“.xcdatamodeld

我在subversion中使用XCode已经有一段时间了,当我作为一名开发人员使用XCode时,没有出现任何问题(我只使用了两个命令,commit和add)

但是现在我不得不与另一个开发人员(从未使用过任何版本控制)共享代码,集成/合并代码已经成为一场噩梦。当我们集成/合并
.h/.m
文件时不会出现问题,但一旦涉及到
“.nib”
“xcodeproj”
“.xcdatamodeld”
文件,我们真的不知道该怎么办

每当我们试图合并
“xcodeproj”
,项目都会损坏,合并
“.xcdatamodeld”
对我们来说是不可能的

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


谢谢。

据我所知,没有故障保护方法可以合并这些类型的文件。所以你必须 尽量确保一次只有一个人在更改这些文件。这不会一直起作用,所以只需在提交消息中记录您在文件中所做的更改。然后,如果存在冲突,您可以通过采用更改了更多文件的版本并手动重做其他人所做的操作来手动解决冲突


这通常不是什么大问题,比如向.xcodeproject添加新的源文件,或者更改.nib中元素的对齐方式。如果您的项目很大,或者您的nib包含整个接口,那么这将成为一个问题。要使其正常工作(实际上确实如此),如果项目太大,您需要将其拆分为子项目。

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


这通常不是什么大问题,比如向.xcodeproject添加新的源文件,或者更改.nib中元素的对齐方式。如果您的项目很大,或者您的nib包含整个接口,那么这将成为一个问题。为了让它正常工作(实际上确实如此),如果项目太大,你需要将它们分成子项目。

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

Git在合并Xcode项目文件方面做得很好,而且我们的*.nib文件也从来没有遇到任何问题。我们唯一遇到问题的时候是,我们都添加/删除了同名文件,或者有人做了大量的删除和添加大量文件

我们解决这个问题的唯一方法是,在添加/删除文件时,让对方推拉。这样一来,此人就拥有了最新的文件,并且没有将它们添加到自己的存储库中,然后拉入了最新的提交,其中包含了相同的文件。或者他们将更改添加到已删除或重命名的文件中


这是我们找到的最好的解决方案,只要我们添加或删除了一个文件,团队中的其他人就可以使用它。顺便说一句,这不是一个很好的解决方案。但是,无论如何,你应该经常提交。

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

Git在合并Xcode项目文件方面做得很好,而且我们的*.nib文件也从来没有遇到任何问题。我们唯一遇到问题的时候是,我们都添加/删除了同名文件,或者有人做了大量的删除和添加大量文件

我们解决这个问题的唯一方法是,在添加/删除文件时,让对方推拉。这样一来,此人就拥有了最新的文件,并且没有将它们添加到自己的存储库中,然后拉入了最新的提交,其中包含了相同的文件。或者他们将更改添加到已删除或重命名的文件中


这是我们找到的最好的解决方案,只要我们添加或删除了一个文件,团队中的其他人就可以使用它。顺便说一句,这不是一个很好的解决方案。但是,无论如何,您应该经常提交。

您是使用Subversion来实现这一点的吗?对于存储库中90%到99%的文件,签出、编辑、提交的标准Subversion工作流运行良好。然而,对于某些类型的文件,例如JPEG和GIF,它们不能很好地合并。在这种情况下,您必须按照我们在旧SCCS和RCS时代使用的方式进行操作:在编辑和提交文件之前,必须先锁定它

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

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

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

而且,如果你真的,真的想确保所有的.nibs和xcodeproj以及所有其他这些类型的苍蝇都设置了svn:needs lock,你可以使用我的which wi