Svn或Git客户端(或插件)查找丢失或损坏的文件

时间:2012-09-04 10:38:34

标签: git svn version-control tortoisesvn tortoisegit

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

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

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

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

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

谢谢

3 个答案:

答案 0 :(得分:2)

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

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

此外,在保持工作副本整洁的情况下,不添加/不删除文件应该不是问题。如果您设置了所有.gitignore,提供了--assume-unchaged,那么git status将在提交后不显示任何内容。因此,只是教开发人员关心工作副本卫生,这有很大帮助。

答案 1 :(得分: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/

答案 2 :(得分:1)

Git有这样一个系统:

man githooks

享受!