54

プッシュはブランチではなく引数としてのみユーザーIDを認識できるため、GIT更新フックにロックスクリプトを配置することにより、ユーザーがファイルをプッシュすることからリポジトリをロックするという考えがあります。したがって、ディレクトリをロックしているだけのレポ全体をロックできます。

GIT で特定のブランチをロックする方法はありますか?

または、ユーザーがプッシュしているブランチと、コードがプッシュされているブランチを Update Hook が識別できる方法はありますか?

4

4 に答える 4

50

プッシュ先のブランチは、更新フックの最初のパラメーターです。myfeatureプッシュのためにブランチをロックしたい場合は、次のコード ( に配置hooks/update) で実行できます。

#!/bin/sh
# lock the myfeature branch for pushing
refname="$1"

if [[ $refname == "refs/heads/myfeature" ]]
then
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "You cannot push to myfeature! It's locked"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    exit 1
fi
exit 0
于 2011-07-26T08:06:49.947 に答える
10

ドキュメントからの更新フック:

フックは、更新される参照ごとに1回実行され、次の3つのパラメーターを取ります。

  • 更新される参照の名前、
  • 参照に保存されている古いオブジェクト名、
  • 参照に格納される新しいオブジェクト名。

だから...はい、それはどのブランチがプッシュされているかを正確に知っており、ブランチがプッシュされたくない場合はそのパラメータをチェックして失敗を終了することができます。

また、ユーザーがオブジェクトをアップロードする前に(インテリジェントに)これを実行したい場合は、事前受信フックを使用できます。

このフックは、受信操作に対して1回実行されます。引数は必要ありませんが、更新される各refについて、標準入力で次の形式の行を受け取ります。

<old-value>SP <new-value>SP <ref-name>LF

ここ<old-value>で、はrefに格納されている古いオブジェクト名、はrefに<new-value>格納される新しいオブジェクト名、はref<ref-name>のフルネームです。

(これらはスペースとラインフィードです)

于 2010-03-18T16:07:52.813 に答える
7

gitolite のようなツールには、この種の機能があると思います: http://github.com/sitaramc/gitolite

于 2010-03-18T16:24:34.603 に答える