8

私たちのチームの誰かが git プッシュを実行してビルドを壊すことがあります。これは、彼のローカル ビルドは機能しているものの、プッシュする前にすべてのローカル変更と追跡されていないファイルを git にコミットするのを忘れているためです。

これを防ぎたいのですが...今日、ドキュメントを1時間ほど調べましたが、組み込まれているものは何も見つかりませんでした.

誰にも解決策はありますか?

4

5 に答える 5

8

フックを使用できますpre-push(git 1.8.2 以降)。

pre-push フックは の終了コードをチェックし、ゼロ以外を返すgit status場合は 0 (プッシュを許可) を返し、それ以外の場合は 1 (プッシュを許可しない) を返します。git status

のマニュアルページにgit-statusは次のように書かれています:

インデックス ファイルと現在の HEAD コミットの間に異なるパスがない場合 (つまり、git commit を実行してコミットするものが何もない場合)、コマンドはゼロ以外のステータスで終了します。

git 1.8.2 以降で作成されたすべてのリポジトリpre-push.sampleには.git/hooksディレクトリが含まれます。これは、ポリシーを実装するための便利な出発点です。pre-pushここにフックを使用する良い例があります: http://blog.ittybittyapps.com/blog/2013/09/03/git-pre-push/

フックはアップストリーム リポジトリでは実行されないことに注意してください。ポリシーを適用するには、各クローンにこのフックをインストールする必要があります。(フックはリポジトリの一部として複製されません。フックは git によって実行されるため、この設計により、悪意のあるフックが開発者のマシンで実行されるのを防ぐことができます。悪意のあるコードは代わりに、開発者が見ずに実行する Makefile または構成スクリプトに入る必要があります。)

于 2010-05-14T00:52:02.897 に答える
2

さまざまなフック(pre-receive だと思います) を使用して、プッシュがビルドを壊して拒否するかどうかを判断できます。それに加えて、git statusコミットまたはプッシュ操作の前に実行するように開発者に指示する必要があります。これは非常に賢明なルールであり、そのような問題を阻止します。

于 2010-05-14T00:47:37.903 に答える
0

変更を自動的に追加するには、-aフラグの使用を検討することをお勧めします。git-commitマニュアルページから:

変更および削除されたファイルを自動的にステージングするようにコマンドに指示しますが、git に伝えていない新しいファイルは影響を受けません。

git commit追跡されていないファイルを追加するためのフラグはないようです。コミットの前にa を実行することを覚えておくことgit add .が、私が考えることができる最善の解決策です。

于 2010-05-14T00:50:55.377 に答える
0

メインリポジトリにプッシュする前に、ローカルビルドにantターゲットを追加することになりました...これがターゲットです...他の誰かが正しい方向へのステップを探している場合に備えて.

答えてくれたすべての人に感謝します。

<target name="git-status-check">
    <echo>Performing git working directory check for local modifications or untracked files.</echo>
    <exec executable="git" failifexecutionfails="true"
        outputproperty="git.check">
        <arg value="status"/>
    </exec>
    <echo>${git.check}</echo>
    <propertyregex property="dirty.working.dir" input="${git.check}" regexp="working directory clean" 
        select="\1" casesensitive="false" />
    <fail message="Git status reports that you have local modifications or untracked changes in your working dir... did you forget to commit these changes? ${line.separator} ">
        <condition>
            <not>
                <isset property="dirty.working.dir" />
            </not>
        </condition>
    </fail>
    <echo>Git status reported a clean working dir continuing build...</echo>
</target>
于 2010-05-14T21:08:37.233 に答える
0

デフォルトのプッシュコマンドを、最初にgitステータスを実行し、「作業ディレクトリのクリーン」をチェックするカスタムスクリプトに置き換えるエイリアスを、シェルまたはgit構成に配置してください。プッシュの上書きが可能かどうか、または実際のプッシュを呼び出すことができなくなるかどうかはわかりません。ただの思いつきなので、本当に効果があるかどうかはわかりません。

于 2010-05-14T01:01:34.087 に答える