我已经开始了一个用c ++编写的项目。我有一个大约6人的团队,我的所有团队都使用Netbeans来开发c ++。我们使用stash(git)来管理代码,并使用pull请求将代码添加到存储库。 通过消磨时间,我们在拉取请求和管理make文件时面临一个大问题。 Netbeans构建一个configuration.xml文件和两个不同的make文件,用于调试和发布。当团队的每个成员添加文件或更改编译设置时,所有这些文件都会更改,当他/她的代码合并到主分支时,所有其他分支在make文件和配置中都会发生冲突。我认为这应该是c ++中企业项目中的常见问题但是我没有找到任何好的解决方案。
我提供了一些我的冲突的例子:
<<<<<<<
<pElem>include/gmock</pElem>
<pElem>include/gtest</pElem>
=======
<pElem>/usr/include/ruby-1.9.1/x86_64-linux</pElem>
>>>>>>>
或者
<<<<<<<
$(COMPILE.cc) -g -s -Iinclude -I. -Iinclude/X -Iinclude/X/P -I/usr/include/postgresql/9.3/server -I/usr/include/ruby-1.9.1 -Iinclude/dbo/W-Iinclude/log4cxx -Iinclude/gmock -Iinclude/gtest -I. -Iinclude/log4cxx -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/Y.o tests/Z.cpp
=======
$(COMPILE.cc) -g -s -Iinclude -I. -Iinclude/X-Iinclude/X/P -I/usr/include/postgresql/9.3/server -I/usr/include/ruby-1.9.1 -Iinclude/dbo/W-Iinclude/log4cxx -I/usr/include/ruby-1.9.1/x86_64-linux -I. -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/Y.o tests/Z.cpp
>>>>>>>
有没有人有解决这个问题的好方法?
答案 0 :(得分:3)
在版本控制系统中管理生成的文件通常不是一个好习惯。在你的情况下恢复这个可能很困难,所以我看到你的问题的以下方法:
从git中删除生成的makefile。而只是添加到git Netbeans项目文件,并让开发人员从中生成其余的。这仍然有一个缺点,因为您使用的是像NetBeans这样的IDE,项目文件仍然是生成的文件。无论如何都会发生冲突。开发人员可能会尝试修复冲突,但这是一个容易出错的任务,他们无法知道它是否真的正确,因为项目文件的格式只有NetBeans的开发人员知道IDE的用户不应该处理它。
而不是NetBeans使用其他工具来组织构建。有几种工具可以为你生成makefile,比如CMake或autoconf。像SCons这样的其他人不使用makefile,而是基于python脚本。这些工具的适用程度取决于特定项目的规模,要求和可用性。这些工具的共同点是,您可以使用工具定义的语法创建一些定义项目的文件或文件集(即组成文件的文件)。这是你放在git中的内容,而不是从它生成的文件。并且这些文件在您的控制之下,因此当发生冲突时,您知道如何修复它们。
如果项目很小,你甚至可以手工制作一个Makefile并将这个makefile放在git中。
在任何情况下都要记住项目配置上的冲突必然会发生,你无法避免这种情况。你可以尝试使这些condlicts更容易管理。
我个人使用C ++工作,甚至不使用IDE。我们使用GCC,使用SCons组织项目,并使用外部编辑器(如vim或Sublime Text)进行编辑。