2011-10-13 4 views
20

길잃은 분기는 이상적으로 짧은 시간 동안 지속되어야합니다. 그런 다음 몇 가지 메인 라인으로 병합됩니다.장기 실행중인 자식 분기를 유지하는 방법

그러나 우리가 매우 큰 기능을 수행하는 경우, 우리는 지점을 유지합니다. 또한 2 ~ 3 명이 코드의 독점 영역에서 이처럼 큰 기능을 수행 할 때 코드를 유지 관리하기가 다소 어려워집니다.

stable 브랜치로가는 핫 픽스 가운데 안정적인 브랜치와 동기화 된 2-3 개의 큰 브랜치를 유지해야합니다. 그래서 우리는 이것을 아주 자주 끝내게됩니다.

(in feature-branch1) $ git merge stable 
(in feature-branch2) $ git merge stable 
(in feature-branch3) $ git merge stable 

git에서 장기 실행 분기를 유지 관리하는 올바른 방법이 있습니까? 위의 작업을 수행하면 git 역사가 다소 엉망입니다. 이 피쳐 브랜치는 주로 리모컨으로 푸시됩니다. 즉, rebase을 옵션으로 볼 수 없습니다. 그 밖의 무엇을 할 수 있습니까?

+2

"Git 분기는 이상적으로 짧은 시간 동안 지속되어야합니다"? 그것은 나에게 뉴스 다. 누가 그렇게 말했어? – Mat

+2

나는 나뭇 가지가있는 엄격한 규칙이 없다는 것에 동의한다. – mislav

+1

감사합니다. 다른 사람들이이 "엉망"을 어떻게 유지하고 있는지보고 싶었습니다 – Anand

답변

13

안정적인 지점에서 합병하는 것은 사실 지금까지 가장 쉽고 가장 좋은 방법으로 지사 지점을 최신으로 유지하는 것입니다. 리바 싱을 권장하지는 않습니다. 왜냐하면 동시에 기능을 사용하는 사람들이 더 많을 수 있고 강제 밀기가있을 때마다 로컬 지점을 많이 재설정해야하기 때문입니다. 피쳐 브랜치에서 한 명만 작업하더라도 병합 지점은 안정 지점에서 수정 사항을 가져온 시점을 명확하게 보여주기 때문에 병합하는 것이 좋습니다.

예, 지형지 물을 다시 안정적인 상태로 병합하면 내역이 다소 엉망이 될 수 있습니다. 그러나 당신이 git pull (매일 git pull --rebase을 사용함)에서 일일 마이크로 병합의 혼란을 피하고있는 한, 실제로 의미있는 병합을 이해할 수있을 것입니다.

정말로 stable의 새로운 기능을 기능 분기에 병합하는 것을 피하고 버그 픽스를 원한다면 기능 분기에 버그 픽을 선택할 수 있습니다. 그러나 이것은 많은 일이 될 수 있습니다. 왜냐하면 당신은 항상 안정되어있는 모든 일들 위에 항상 있어야한다는 것을 요구하기 때문입니다. 당신을 도와 git cherry를 사용

# commits from "stable" that are not present in 
# the current branch will be prefixed with "+" 
git cherry HEAD stable 
+0

master를 기능 분기에 병합 할 때 나는 이상한 경험을했습니다. 때로는 마스터에서 변경 사항이 기능 분기 (병합 단계와 관련이있는 사람)로 변경되지 않으며 기능 분기가 마침내 마스터로 병합되면 마스터 변경 사항이 사라지고 더 이상 사라진 장소는 사라집니다. git의 역사에 나타납니다. 이러한 이유로 우리는 항상 feature 브랜치를 마스터로 병합 한 다음 다시 feature 브랜치로 밀어 넣고 (원격 마스터를 건드리지 않고) 작업을 계속합니다. 친절한 http://stackoverflow.com/questions/17527276/git-code-disappeared-after-merge – Rivera

2

팀이 충분히 작고 합리적으로 경험이 풍부한 자식 사용자로 구성된 경우 리베이스가 가능합니다.

당신이 할 수있는 일은, 예를 들어, 지형지 물이 매일 밤 안정적으로 리베이스 될 것이라는 것에 동의하는 것입니다. 또는 지형지 물을 지점에 리베이스 할 때 이메일을 보낼 수 있습니다.

S1 - oldFB - C <-- feature-branch 
    \ 
    S2 - oldFB' - D <-- origin/feature-branch 

:

다 잘해야하지만, 경우에 당신이 리베이스 기능 지점과 동기화하는 것을 잊지, 당신이 oldFB'으로 업데이트되었습니다 이전 기능 지점 oldFB, 위에 C를 저지른 말 당신이해야합니다

git checkout feature-branch 
git rebase --onto origin/feature-branch oldFB C 

주 수동이라는 커밋 찾을 : 당신의 커밋 (들) C 실행하여 리베이스하는 것은 여전히 ​​가능하다 위 그림에서.

+2

오래 살았던 지점을 리베이스 할 때 공동 작업자가 다시 작성된 기록을 처리하지 않도록 새 지점을 기반으로 새 지점을 만드는 경향이 있습니다. (예를 들어,'git checkout tiresome-feature2; git checkout -b tiresome-feature3; git rebase master'). 그러면 당신은 지금 당신이 공동 작업자에게 그 새로운 브랜치에서 일하고 있다고 말하면됩니다. 그리고 원하는 경우 리베이스 할 수 있습니다. . –

+1

@MarkLongair : 강제 푸시를 처리하지 않아도되지만 새로운 지점으로 전환하고 때로는 로컬 변경 사항을 가져와야한다는 사실을 기억해야합니다. 결과적으로 같은 양의 작업이되므로 결국에는 많은 이익을 얻지 못합니다. – mislav

+1

@mislav : 경험상으로는 훨씬 쉽습니다. 그러나 관련된 사람들에게 많이 달려 있다고 생각합니다. –

0

최선의 선택이 당신의 수명이 긴 기능 분기에 만 필요한 작은 버그 수정/기능 가지를 병합하는 것입니다. 이렇게하면 필요한 것만 얻을 수 있습니다. 이 브랜치들이 충분히 길게 살아 간다면 궁극적으로 마스터와 동기화 상태가 좋지 않을 수 있습니다.때로는 수명이 긴 지형지 물에서 임시 지사를 만들고 지저분한 점을 확인하기 위해 마스터를 병합하기를 원할 수 있습니다. 충돌이 있는지 확인하고 마스터의 변경으로 지형지 물의 기능이 중단되는지 확인하십시오. 에.

다음으로 주기적으로 마스터를 수명이 긴 기능 분기로 병합하는 것이 가장 좋습니다. 이것은 상당히 안전하지만, 관심이없는 많은 변화를 병합 할 수 있으며, 복잡한 일을 할 수 있습니다.

아니요.은 주기적으로 master에 리베이스하는 것이 좋습니다. 모든 사용자가 동기화 상태를 유지하기가 어려워지며 기능 분기에서 복잡한 기록 (병합)을 유지하는 것이 훨씬 어려워지고 충돌 해결이 더욱 어려워집니다.

+0

몇 가지 안정적인 변경 사항 때문에 (또는 귀하의 팀 동료가!) 귀하의 지사에 귀하의 안정 지점 (주인)을 통합해서는 안된다는 것을 알았습니다 실수로 버려 질 수 있습니다! 항상 사용자의 기능을 마스터 브랜치에 로컬로 병합하십시오. 그런 다음 로컬 마스터를 원격 기능 지점으로 가져올 수 있습니다. – Rivera

관련 문제