私たちのチームの誰かが git プッシュを実行してビルドを壊すことがあります。これは、彼のローカル ビルドは機能しているものの、プッシュする前にすべてのローカル変更と追跡されていないファイルを git にコミットするのを忘れているためです。
これを防ぎたいのですが...今日、ドキュメントを1時間ほど調べましたが、組み込まれているものは何も見つかりませんでした.
誰にも解決策はありますか?
フックを使用できます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 または構成スクリプトに入る必要があります。)
さまざまなフック(pre-receive だと思います) を使用して、プッシュがビルドを壊して拒否するかどうかを判断できます。それに加えて、git status
コミットまたはプッシュ操作の前に実行するように開発者に指示する必要があります。これは非常に賢明なルールであり、そのような問題を阻止します。
変更を自動的に追加するには、-a
フラグの使用を検討することをお勧めします。git-commit
マニュアルページから:
変更および削除されたファイルを自動的にステージングするようにコマンドに指示しますが、git に伝えていない新しいファイルは影響を受けません。
git commit
追跡されていないファイルを追加するためのフラグはないようです。コミットの前にa を実行することを覚えておくことgit add .
が、私が考えることができる最善の解決策です。
メインリポジトリにプッシュする前に、ローカルビルドに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>
デフォルトのプッシュコマンドを、最初にgitステータスを実行し、「作業ディレクトリのクリーン」をチェックするカスタムスクリプトに置き換えるエイリアスを、シェルまたはgit構成に配置してください。プッシュの上書きが可能かどうか、または実際のプッシュを呼び出すことができなくなるかどうかはわかりません。ただの思いつきなので、本当に効果があるかどうかはわかりません。