0

git の 2 つのブランチで、アクセス制御に gitolite を使用しています。
ブランチ「dev」とブランチ「main」。
開発者は 'dev' にコミットし、'main' にマージしてから、'dev' と 'main' をプッシュする必要があります。
私の問題は、開発者が「dev」にコミットし
て「main」にマージすることだけを許可する方法ですが、「main」に直接コミットすることはできません。
つまり、開発者がコードを「メイン」に直接プッシュすると、リモートの「メイン」にプッシュしようとすると失敗します。

4

1 に答える 1

1

gitolite を使用すると、カスタム サーバー サイド フックを追加できます。

この更新フックを使用して、チェックを追加します。

#!/bin/bash
ref=$1
old=$2
new=$3

[[ $ref == refs/heads/main ]] || exit 0

reject(){
  echo "$@"
  exit 1
}

parent=$(git rev-parse $new^)
[[ $parent == $old ]] || reject not a single commit
git rev-parse $new^2 &>/dev/null || reject not a merge commit

(gitolite の場合は update.secondary フォルダーに入れる必要があります。)

于 2013-11-06T02:00:26.877 に答える