2017-04-12 8 views
1

브랜치를 설정하여 병합이 개발 브랜치에서만 마스터로 들어갈 수 있도록하고 싶습니다.Git은 마스터에서 개발로 병합 만 허용합니다.

아마도 나는 이것이 무시 무시한 것처럼 들리 겠지만 나는 스스로에게 질문해야한다고 생각합니다. 팀에서 개발자를 신뢰하지 않습니까? 당분간 그들은 힘내 줄을 잘 모르고 있기 때문에 당분간 저는 아닙니다. 시간이 지나면 제한을 제거 하겠지만 그때까지는 유용 할 것입니다. 가능한가?

감사합니다. 마크.

+0

당신은 변경 사항을 되돌릴 수 있을까? – Vallentin

+0

예 답장을 보내 주셔서 감사하지만 그 질문에 대답하지 않습니다 –

+1

후크를 설정하고 끝내기 만하면 매주 지저분한 마스터를 되 돌리고 싶지 않습니다. 시간과 신경을 저장합니다. – kowsky

답변

2

kowsky answered으로 서버 측 사전 수신 후크에서이를 수행 할 수 있습니다. Git의 지사 개념이 다소 미끄 럽기 때문에 놀랍게도 어렵습니다.

나는 이것을 수행하는 사전 수신 후크를 작성했습니다. the code is available here. merges_from 함수를보고 위에있는 주석을 기록하십시오. StackOverflow에서 링크가 약간 iffy이기 때문에 여기에 실제 함수도 포함 할 것입니다. (이 코드는 망할 놈의 긍정적 고대 버전의 작업을 의미합니다, 그래서 git for-each-ref --merged 같은 현대적인 기능을 사용하지 않습니다.) 그들이 난장판을 할 경우


# $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에게 100 만 원 주셔서 감사 드리며,이 기회를 통해 내가 얻을 수있는 첫 기회를 드릴 것입니다. 불행하게도 저는이 프로젝트에 대해서 일주일에 몇 시간 밖에 안 걸립니다. 내가 얼마나 성공했는지 다시 대답하겠습니다. –

0

전혀 드라코 적이 아니며, 완벽한 의미를 가지며 심각한 사고를 예방합니다.

이렇게 말하면 : git hooks을 통해 다음과 같이 제어 할 수 있습니다. 이들은 특정 이벤트에서 실행되는 스크립트입니다. 귀하의 경우 서버 측 사전 수신 또는 클라이언트 측 사전 푸시 후크 this 또는 this 도움이 될 것입니다.