在使用Svn(或其他版本控制系统)时,经常会出现程序员提交一些更改并破坏构建的问题。例如,因为:
- 创建了一些文件,但未在版本控制下添加
- 在一个文件夹中进行了更改,但程序员认为这是另一个文件夹并提交了它
- 少数子文件夹中的文件已更改,但只提交了一个文件夹
- 程序员更改了一些代码,但没有编译("因为更改太容易了!")
- 等等
损坏的构建是一件坏事-浪费时间,其他人的工作中断,最好避免它。所以我正在寻找一些svn(git?)客户端\tool\plugin,它有钩子"提交前",在那里它可以检查一些基本的东西,比如:
- 如果文件夹包含不在版本控制-显示警告
- 如果文件夹包含项目文件(来自VS或其他IDE),并且此项目文件包含对不受版本控制的文件的某些引用,则显示警告
- 如果文件夹包含项目文件和某种类型的文件(让我们再次说"cpp")工具应该(可选)尝试使用项目文件中的设置来构建此文件,并在文件未编译时显示警告
我试图找到这样的工具,但没有成功。现在我有了自己创建这样的工具的想法(使用基于插件的架构,可以轻松添加对新项目类型、文件类型和版本控制类型的支持)。但在开始使用这个工具之前,我想问一下——也许我错过了什么,而这样的工具已经存在了?
感谢
使用http://en.wikipedia.org/wiki/Continuous_integration服务器,例如Jenkins。因为它不是版本控制系统的作业。
有时构建至少需要几分钟甚至几个小时(+测试)。强迫开发人员如此缓慢地进行提交是非常糟糕的做法。
此外,在保持工作副本整洁的同时,不添加/不删除文件应该根本不是问题。如果您设置了所有.gitignore
,提供了--assume-unchaged
,那么git status
在提交后将不显示任何内容。所以,只要教会开发人员注意工作副本的卫生,这会有很大帮助。
您可以使用Subversion和Git设置预提交挂钩。这些钩子基本上只是shell脚本,您可以用它们做非常简单或非常复杂的事情。
- Git挂钩
- Subversion挂钩
几个例子:
-
一个简单的Git预提交挂钩,用于查找未提交的.cpp文件:
untracked_cpp_files=$(git ls-files --exclude-standard -o *.cpp) if [ -n "${untracked_cpp_files}" ]; then echo "Unable to commit: untracked .cpp files found in repository." exit 1 fi
-
这里有一个Github项目,它提供了一个Git预提交挂钩来检查各种语言的语法:https://github.com/shadow7412/hooks.
-
还有一些有用的Subversion挂钩列表:http://blog.grimsy.net/2008/07/a-few-svn-pre-commit-hooks/
Git有这样一个系统:
man githooks
享受吧!