2010-02-24 3 views
8

git을 사용하여 코드의 여러 작업 복사본을 유지 관리합니다. 아이디어는 어떤 지점을 체크 아웃하고 빌드하고 실행하여 지점의 기능 x가 코드의 현재 상태와 어울리는 지 확인하는 것입니다.Git을 사용하여 master에서 모든 브랜치로 변경 사항을 병합 하시겠습니까?

힘내의 마스터 브랜치는 트렁크이고, 다른 git 브랜치는 시험해보고 싶은 기능이나 것입니다. 따라서 일반적으로 마스터를 최신 수정 사항으로 업데이트 한 다음 마스터를 개별 분기로 병합하여 각 분기를 최신 상태로 유지합니다.

이 시스템은 분기를 체크 아웃하고, 마스터를 병합하고, 다른 분기에 대해 헹굼/반복해야한다는 사실을 제외하고는 저에게 적합합니다. git과 같은 버전 제어 시스템이 주어지면 시간이 지남에 따라 많은 브랜치를 생성하는 경향이 있다는 사실을 감안할 때이 스케일링을 잘 볼 수 없습니다.

저는 아직 초보자이기 때문에 이미 실종되었을지도 모르는 종류의 메커니즘이있을 수 있습니다. 하나 있습니까? 그렇지 않다면, 어떻게 자신이 최신 상태로 유지할 수 있도록 모든 지점을 변경해야합니까?

+0

당신이 그 질문의 코드 구현이 있습니까? – edi9999

+0

아니요, 처음에는 수동 프로세스였습니다. 이것은 내가 초보자 였을 때도 마찬가지였다. 지금은 매우 비슷하지만 git flow를 사용하고 있지만 여러 스크립트를 유지할 필요가 없습니다. – Carl

답변

5

하나의 가능성은 (자신을 테스트하지) 다음과 같습니다

  • 당신이 당신의 마스터 분기를 밀어 수있는 베어의 repo를 설정합니다.
  • 는 모든 "기능"에 주인을 밀어 당신이
  • 원하는 REPO 것이다 베어의 repo에 (githooks man page 참조) 후 수신 후크를 한이 후 받기 시작 기능 REPO 당 훅 :
    • master의 맨 위에 feature 브랜치를 rebase합니다 (아직 다른 곳으로 feature 브랜치를 푸시하지 않았다면 좋음)
    • 또는 feature 브랜치의 master 병합.

당신은 여전히 ​​기능의 repo에 도착하고 REBASE 있는지 확인 또는 일부를 병합 충돌을 인해 차단되지 않습니다 병합해야합니다. 최신 마스터가 게시되지 않습니다에 커밋 병합 할 및

  • +0

    예, 병합 충돌을 수동으로 해결해야합니다. 감사. 나는 갈고리가 존재했는지 전혀 몰랐다. 나는 할 일이있다 : http://kernel.org/pub/software/scm/git/docs/githooks.html – Carl

    +0

    @carleeto : 좋은 지적, 제 대답에 githooks 맨 페이지 링크를 추가했습니다. – VonC

    +0

    여러 분기 대신 여러 저장소를 제안하는 것처럼 들립니다. – Abizern

    4

    하면

    1. 가지 당신은 마스터의 모든 커밋이 다른 지점에

    다음되고 싶어요 당신 마스터가 업데이트 된 후에 마스터에 리베이스 할 수 있습니다. 이 작은 스크립트는 유닉스 셸을 사용하는 경우 작동 할 수 있습니다. 각 브랜치를 마스터에 리베이스합니다.

    for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done 
    
    0

    I 다음을 수행하십시오

    for BRANCH in $(ls git/refs/heads); do git checkout $BRANCH ; git merge origin/master $BRANCH ; done

    +0

    실제로 실행 했습니까? '$에있는 b (<.git/refs/heads); do echo $ b; done "은 아무 것도 인쇄하지 않으므로 어떻게 할 수 있는지 상상할 수 없습니다. – Jeff

    +0

    내 나쁜,에 대한 BRANCH var에 $ BRANCH가 대신 사용되었습니다. – 3manuek

    +0

    내가 제공 한 코드에서 문제가 아닌 것을 확인할 수 있습니다. – Jeff

    관련 문제