2017-04-12 11 views
1

マージが開発ブランチからマスターに入るように私たちのブランチをセットアップしたいと思います。Gitは開発からマスターへのマージのみを許可します

私は恐らくこれがひどく聞こえるかもしれないと私は自分自身に質問する必要があります、私はチームの開発者を信用しないと理解する...私は彼らがちょうどGitに慣れているので、時間内に制限を削除しますが、それまではこれが便利です。出来ますか?

ありがとう、 マーク。

+0

彼らは混乱を行う場合は、ちょうど彼らの変更を元に戻すことができませんでしたか? – Vallentin

+0

はい私は返事のために感謝することができましたが、それは質問に対処しません –

+1

フックを設定して終了することができれば、毎週乱雑なマスターを元に戻すことは望ましくありません。時間と神経を節約します。 – kowsky

答えて

2

kowsky answeredとすると、これはサーバー側の事前受信フックで行うことができます。しかし、驚いたことに、Gitのブランチの概念はやや滑りやすいからです。

これを行うプレ受信フックを書きました。 the code is available heremerges_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 
} 
+0

Torek氏に感謝します。私はこれを最初の機会に与えます。残念ながら、私はこの特定のプロジェクトでは週に数時間しかかかりません。私はどのように成功したかを返信します。 –

0

これはまったく厳しいものではありません。完璧な意味合いで、重大な事故を防止します。

これは次のように制御できます:git hooks。これらは特定のイベントで実行されるスクリプトです。あなたのケースでは、サーバー側プリ受信またはクライアント側プリプッシュフックthisまたはthisのように役立ちます。

関連する問題