3

Svn (または他のバージョン管理システム) を使用しているときに、プログラマーがいくつかの変更をコミットしてビルドを中断するという問題が頻繁に発生します。たとえば、次の理由によります。

  • 一部のファイルが作成されましたが、バージョン管理下に追加されませんでした
  • 変更は 1 つのフォルダーで行われましたが、プログラマーはそれが別のフォルダーであると考えてコミットしました
  • いくつかのサブフォルダー内のファイルが変更されましたが、1 つのフォルダーのみがコミットされました
  • プログラマーがコードを変更しましたが、コンパイルしませんでした (「変更がとても簡単だったからです!」)

壊れたビルドは悪いことです - 時間を無駄にし、他の人の作業を中断します。それを避けるのは素晴らしいことです. だから私は、いくつかの基本的なことをチェックできる「コミット前」のフックを持ついくつかの svn (git?) client\tool\plugin を探しています。

  • フォルダーにバージョン管理下にない何らかのタイプ (「cpp」としましょう) のファイルが含まれている場合 - 警告を表示します
  • フォルダーに (VS または他の IDE からの) プロジェクト ファイルが含まれており、このプロジェクト ファイルにバージョン管理下にないファイルへの参照が含まれている場合 - 警告を表示します
  • フォルダにプロジェクト ファイルと何らかのタイプのファイルが含まれている場合 (もう一度 "cpp" としましょう)、ツールは (オプションで) プロジェクト ファイルの設定を使用してこのファイルをビルドし、ファイルがコンパイルされない場合は警告を表示する必要があります。

そのようなツールを見つけようとしましたが、成功しませんでした。今、私はそのようなツールを自分で作成することを考えています (新しいプロジェクト タイプ、ファイル タイプ、およびバージョン管理タイプのサポートを簡単に追加できるプラグイン ベースのアーキテクチャを使用します)。しかし、このツールの作業を開始する前に質問したいのですが、何かを見逃していて、そのようなツールが既に存在するのでしょうか?

ありがとうございました

4

3 に答える 3

2

SubversionとGitの両方でpre-commitフックを設定できます。これらのフックは基本的に単なるシェルスクリプトであり、非常に単純なことも非常に複雑なこともできます。

いくつかの例:

  • コミットされていない.cppファイルを探す単純なGitpre-commitフック:

    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
    
  • さまざまな言語の構文をチェックするためのGitpre-commitフックを提供するGithubプロジェクトは次のとおりです:https ://github.com/shadow7412/hooks 。

  • そして、いくつかの役立つSubversionフックのリスト:http://blog.grimsy.net/2008/07/a-few-svn-pre-commit-hooks/

于 2012-09-04T11:16:11.140 に答える
2

Jenkins などのhttp://en.wikipedia.org/wiki/Continuous_integrationサーバーを使用します。バージョン管理システムの仕事ではないからです。

ビルドには少なくとも数分または数時間かかる場合があります (+テスト)。開発者にコミットをそれほどゆっくりと強制するのは、非常に悪い習慣です。

また、作業コピーを整理している間は、追加されていない/削除されていないファイルはまったく問題になりません。すべての.gitignore設定が完了している場合--assume-unchagedは、git statusコミット後に何も表示されません。したがって、開発者に作業コピーの衛生状態を気にするように教えるだけで、大いに役立ちます。

于 2012-09-04T11:05:49.800 に答える
1

Git には次のようなシステムがあります。

man githooks

楽しみ!

于 2012-09-04T10:43:45.513 に答える