3

很多时候,在使用 Svn(或其他版本控制系统)时,程序员会提交一些更改并破坏构建。例如,因为:

  • 创建了一些文件,但未在版本控制下添加
  • 在一个文件夹中进行了更改,但程序员认为它是另一个文件夹并提交了它
  • 更改了几个子文件夹中的文件,但只提交了一个文件夹
  • 程序员更改了一些代码,但没有编译它(“因为它很容易更改!”)
  • 等等

损坏的构建是一件坏事——浪费时间,打断其他人的工作,避免它会很好。所以我正在寻找一些 svn (git?) client\tool\plugin,它有“提交前”的钩子,它可以检查一些基本的东西,比如:

  • 如果文件夹包含不受版本控制的某种类型的文件(比如说“cpp”) - 显示警告
  • 如果文件夹包含项目文件(来自 VS 或其他 IDE)并且此项目文件包含对不受版本控制的文件的一些引用 - 显示警告
  • 如果文件夹包含项目文件和某种类型的文件(让我们再次说“cpp”)工具应该(可选)尝试使用项目文件中的设置构建此文件,并在文件未编译时显示警告

我试图找到这样的工具 - 但没有成功。现在我有想法自己创建这样的工具(基于插件的架构能够轻松添加对新项目类型、文件类型和版本控制类型的支持)。但是在开始使用这个工具之前,我想问一下——也许我错过了一些东西,而这样的工具已经存在了?

谢谢

4

3 回答 3

2

使用http://en.wikipedia.org/wiki/Continuous_integration服务器,例如 Jenkins。因为它不是版本控制系统的工作。

有时构建至少需要几分钟甚至几小时(+测试)。强迫开发人员如此缓慢地提交是非常糟糕的做法。

此外,在您保持工作副本整洁的同时,未添加/未删除文件根本不应该成为问题。如果您已全部.gitignore设置,--assume-unchaged提供,则git status提交后将不显示任何内容。所以,只要教开发人员关心工作副本的卫生,它就会有很大帮助。

于 2012-09-04T11:05:49.800 回答
2

您可以使用 Subversion 和 Git 设置预提交挂钩。这些钩子基本上只是 shell 脚本,你可以用它们做非常简单或非常复杂的事情。

几个例子:

  • 一个简单的 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/

于 2012-09-04T11:16:11.140 回答
1

Git有这样一个系统:

man githooks

享受!

于 2012-09-04T10:43:45.513 回答