6

ブランチに同様のコンテンツが含まれている場合でも、誤ってマージされないように、2つの別々のブランチをgitリポジトリに保持できるようにしたいと思います。

ブランチをgitで分離したままにするためのトリックはありますか?それは、私がブランチAとブランチBを持っていると仮定すると、のようなものgit merge B //assuming A is checked outは失敗します。

ここで懸念が生じたのは、開発中のWebサイトのリポジトリを作成する際に、マスターブランチのHEADが常に安定したWebサイトの現在の状態である必要があるためです。

必要に応じて、開発ブランチからトピックブランチを外して、開発ブランチで開発コミットを行う必要があります。

 C1-C2                        master
     \
     C3-C4-C5-C6-C9-C10-C11   development
               \
                C7-C8-C12     topic/HEAD

マスターブランチと他のブランチが誤ってマージされる可能性がほとんどないことを確認する必要があります。

そこで、マスターブランチとのマージの間に「このマージはサイトで公開されます。本当に実行しますか?」と尋ねる方法を探しています。そして、私がマージを確認した後にのみ、それは実行されます。

このシナリオは、実行するためにコンパイルする必要のないコードを使用するWeb開発者にのみ関連し、ライブインストールで安定したWebサイトのコピーをプルする可能性があると思います。

4

2 に答える 2

5

auto-commitを使用したgitマージでは、フックは呼び出されないことに注意してください。pre-commitgit merge自動コミットは事前コミットフックを起動しません」を参照してください。

呼び出しを直接マージcommit_treeするため、標準のコミットフックはバイパスされます。

パッチが進行中です。

于 2012-10-16T11:28:02.870 に答える
4

これを達成できる唯一の方法は、pre-commitフックを使用することだと思います。マンページから:

このフックはgitcommitによって呼び出され、-no-verifyオプションを使用してバイパスできます。パラメータを受け取らず、提案されたコミットログメッセージを取得してコミットする前に呼び出されます。このスクリプトをゼロ以外のステータスで終了すると、gitcommitが中止されます。

したがって、本当に必要な場合は、現在のブランチとマージしようとしているブランチをチェックし、不要なペアの場合はゼロ以外のステータスで終了するpre-commitフックを作成できます。頭から離れて、マージしようとしているブランチを確認する唯一の方法は、ファイルを調べて.git/MERGE_MSG最初の行を解析することです。(別の方法で.git/MERGE_HEADは、マージしているSHA1が表示されますが、それがどのブランチであったかは記録されていないため、2つのブランチが同じ場所にある場合は、運が悪いことになります。

pre-commitフックは、早送りマージでは明らかに実行されません。それを防ぐ方法が本当にあるのではないかと思います。しかし、おそらく、ブランチがマージされないようにすると、早送りの試みはありません。

于 2010-10-30T23:41:58.830 に答える