2010-01-31 2 views
23

우리는 프로젝트 (PHP 응용 프로그램)가 있지만 각 클라이언트에 대한 설치는 때로는 거의 다르지 않고 때때로 더 다양합니다. 여전히 소스 코드의 큰 부분은 공통적 인 부분입니다. 특정 설치를 master 브랜치의 병렬 브랜치로 관리하고 master 브랜치에서 다른 브랜치로 변경 사항을 전송해야합니다. 이 비 빨리 감기를 생성 솔루션에서 언급 한 바와 같이힘내 : 영구적 인 병렬 분기를 유지하는 방법

git pull 
git checkout local 
git rebase master 

이 리베이스 후 밀어 나는 매우 불쾌한 합병증을 찾을 : 같은 상황은 대부분의 투표 솔루션로 분기 간의 변경이 방법을 전송했다 Git: how maintain (mostly) parallel branches with only a few difference?에 해결되었다. 내 질문은 - 왜 대신 할 수 없습니다 :

다른 질문에
git pull 
git checkout local 
git merge master 
+0

또는 어쩌면 당신이 의미? http://stackoverflow.com/questions/2850369/why-does-git-use-fast-forward-merging-by-default – cregox

답변

5

정말로 분기를 사용하여 무엇을 할 것인가에 달려 있습니다. 예, 로컬 리베이스하면 리베이스 후 비 순방향 푸시가 생성됩니다. 다른 한편으로 앞으로 나아갈 일련의 뚜렷한 변화를 유지하게 될 것이며, 지사에있는 것들이 가장 최신의 머리로 변경된 것처럼 일련의 변화가 될 것입니다.

마스터를 로컬에 병합하는 대신 마스터와 시간을두고 로컬 행군을 진행하고 기록을 기록합니다. 과거에 지역의 상태를 재구성 할 수 있어야한다면이 작업을 원할 것입니다. 역사는 절대로 바뀌지 않을 것입니다. 그러나, 당신은 다루기에 더 복잡한 역사가 있습니다.

+0

우리 팀에서는 (거의 항상) 다시 병합 할 분기를 리베이스합니다. 가능하면 자주 rebase를 쉽게 만들 수 있습니다. 이렇게하면 돌아올 때 변경 기록을 쉽게 이해할 수 있습니다. 두 개의 분기를 병렬로 유지해야하는 경우 (유지 보수 및 개발 버전 등) 두 가지를 해제하면 더 이상 리베이스 할 수 없으며 너무 혼란 스럽습니다. 대신 병합을 시작합니다. –

2

Greg's answer 특정 설치에 지역의 나머지로 다른 지점을 볼 것, 기타의 repos에 푸시 없습니다 (강조는 추가) :

시스템에 로컬 인 인 경우이 해당 시스템의 "로컬"지점 인 으로 커밋하고 다른 경우에는 "마스터"로 커밋하고 공통 저장소로 푸시합니다.

거의 항상 빨리 감기를 공유 저장소의 브랜치에 넣기를 원합니다. git rebase documentation은 업스트림 리베이스 (, 즉, git rebase, git push -f)를 복구하는 방법을 설명하며 관련자에게 재미 있지 않습니다.

다른 접근 방식에 대한

, Never merging back를 참조하십시오

가 한 번 다시 병합 결코 의도로 포크 유효한 경우가 있지만 일반적으로 당신은 그러한 포크에 변경 사항을 유지하기 위해 매우 열심히 노력한다 최저한의.

저자는 동일한 저장소 내의 다양한 고객 릴리스에 대한 분기 정책에 대해 계속 논의합니다.

17

아이디어는 하나의 공통 분기를 사용하고 두 개 (또는 많은 고객이 필요) 고객 별 분기를 사용한다는 것입니다. 모든 공통 변경 사항은 마스터에 적용되며 각 고객 지사는 해당 고객의 에만 해당하는 변경 사항을 가져옵니다. 주기적으로 (마스터가 안정 지점에있는 것으로 간주되는 경우) 마스터의 변경 사항을 고객 지점 (git checkout custA; git merge master)으로 병합합니다. 그러면 "고객"지점에 "공통"코드가 새로 도입됩니다. 다른 방식을 병합하지 않습니다. 이는 고객 전용 코드로 마스터를 오염시킵니다.

고객 A에게 배달을 보내면 "custA" 지점을 체크 아웃하고 보내십시오. 물론 다른 고객들도 마찬가지입니다.

이제 새로운 고객 "C"를 얻고 나중에 고객 A와 C가 원하는 기능을 찾았지만 B는 찾지 못했다고 가정 해 봅시다. 마스터 (git checkout -b AC_feature master), 코드/테스트에서 브랜치 (예 : "fork")를 작성한 다음 커밋하고 A와 C로 병합합니다. (git checkout A; git merge AC_feature and similarly for customer C). 당신은 그 기능에 사소한 버그를 발견 언젠가 나중에, 경우 C.

에 모두를 얻을 것이라고 때문에 당신은 C로 병합에 의존 한 다음에 코딩하지 않으며, 당신은 하기 동일한 분기 (git checkout AC_feature; edit/test/commit), 에서 변경 한 다음 위와 같이 custA와 custC로 병합하십시오.

출처 : Gitolite의 개발자로부터이 상쾌 명확하고 유용한 정보 - 후니 오 하마노에서 직접 입력 (힘내을 유지 리누스 토발즈 (Linus Torvalds) '파트너)와 부분적으로 작성 Sitaram Chamarty.

유지 병렬 고객 지점 : 공통 및 고객 지점을 "고치"에

http://gitolite.com/archived/special-branches.html

지원 후속 기사 :

http://gitolite.com/archived/special-branch-fixups.html

관련 문제