マージが開発ブランチからマスターに入るように私たちのブランチをセットアップしたいと思います。Gitは開発からマスターへのマージのみを許可します
私は恐らくこれがひどく聞こえるかもしれないと私は自分自身に質問する必要があります、私はチームの開発者を信用しないと理解する...私は彼らがちょうどGitに慣れているので、時間内に制限を削除しますが、それまではこれが便利です。出来ますか?
ありがとう、 マーク。
マージが開発ブランチからマスターに入るように私たちのブランチをセットアップしたいと思います。Gitは開発からマスターへのマージのみを許可します
私は恐らくこれがひどく聞こえるかもしれないと私は自分自身に質問する必要があります、私はチームの開発者を信用しないと理解する...私は彼らがちょうどGitに慣れているので、時間内に制限を削除しますが、それまではこれが便利です。出来ますか?
ありがとう、 マーク。
kowsky answeredとすると、これはサーバー側の事前受信フックで行うことができます。しかし、驚いたことに、Gitのブランチの概念はやや滑りやすいからです。
これを行うプレ受信フックを書きました。 the code is available here。 merges_from
関数を参照し、その上の注釈に注意してください。 StackOverflowではリンクが少しiffyなので、実際の関数もここに含めます。 (それはgit for-each-ref --merged
のような現代的な機能を使用していないので、このコードはGitリポジトリの積極古代のバージョンで動作するように意図されていることに注意してください。)
# $1 is a merge commit. Find all its parents, except the first
# (which is "on" the branch being merged-into and hence not relevant).
# For each remaining parent, find which branch(es) contain them.
# If those branch heads *are* them, consider that the "source" of the merge.
#
# Note that this means if branches A and B both name commit 1234567,
# and you merge commit 1234567 into branch master, this considers
# the merge (with its one parent) to merge both branches A and B.
# That may not be ideal, but it is what we get...
merges_from()
{
local branches b src
set -- $($GIT rev-list --parents --no-walk $1)
shift 2
for i do
# git branch --contains may print something like
# * (no branch)
# or
# * (detached from blah)
# if HEAD is detached. This should not happen in
# a bare repo, but if it does, we'll add HEAD to
# our list.
branches=$($GIT branch --merged $i |
sed -e 's/\* (.*)/HEAD/' -e 's/^[* ]//')
set -- $branches
src=""
for b do
if [ $($GIT rev-parse $b) = $i ]; then
src="${src}${src:+ }$b"
fi
[ "$src" == "" ] && src="-"
done
echo $src
done
}
Torek氏に感謝します。私はこれを最初の機会に与えます。残念ながら、私はこの特定のプロジェクトでは週に数時間しかかかりません。私はどのように成功したかを返信します。 –
彼らは混乱を行う場合は、ちょうど彼らの変更を元に戻すことができませんでしたか? – Vallentin
はい私は返事のために感謝することができましたが、それは質問に対処しません –
フックを設定して終了することができれば、毎週乱雑なマスターを元に戻すことは望ましくありません。時間と神経を節約します。 – kowsky