최신 git 서브 모듈 추적


136

우리는 (거대한) 프로젝트를 git으로 옮기고 하위 모듈 사용에 대해 생각하고 있습니다. 우리의 계획은 superproject에 세 가지 다른 헤드를 두는 것입니다 : 릴리스, 안정, 최신. 프로젝트 리더는 릴리스 및 안정적인 분기를 처리합니다. 필요한 경우 서브 모듈을 이동시킵니다.

문제는 "최신"헤드입니다. 우리는 슈퍼 프로젝트 "최신"헤드가 모든 서브 모듈의 마스터 브랜치를 자동으로 추적하기를 원합니다. 그리고 서브 모듈에 대한 모든 커밋의 역사를 보여 주면 좋을 것입니다.

나는 gitslave를 보았지만 우리가 원하는 것은 아닙니다. 어떤 제안?


당신이 도구를 요청하는 동안, 나는 단지 하나의 라이너를 수집하는이 질문을 연결하고 싶습니다 : stackoverflow.com/questions/1030169/…
Tobu

Git은 이제 하위 모듈로 최신 정보를 추적합니다. 편집 한 답변을 참조하십시오.
VonC

답변:


235

2013 년 3 월 업데이트

Git 1.8.2 는 분기를 추적 할 수있는 가능성을 추가했습니다.

" git submodule" (수퍼 프로젝트의 gitlink에 기록 된 커밋과 통합하는 것과는 대조적으로) 원격 브랜치의 팁과 통합 하기위한 새로운 모드를 배우기 시작했습니다 .

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

하위 모듈이 이미 있는 경우 이제 분기를 추적하고 싶을 것 입니다. " 기존 하위 모듈을 분기로 추적하는 방법 "을 참조하십시오 .

하위 모듈에 대한 일반 정보는 하위 모듈에 대한 Vogella의 자습서를 참조하십시오 .

노트 :

git submodule add -b . [URL to Git repo];
                    ^^^

참조 git submodule맨 페이지를 :

하위 모듈의 분기 이름이 현재 저장소의 현재 분기와 동일한 이름. 을 나타 내기 위해 특수 값 인를 사용합니다 .


commit b928922727d6691a3bdc28160f93f25712c565f6 참조하십시오 :

submodule add: --branch주어진 경우에 기록하십시오.gitmodules

이를 통해 새 하위 모듈을 추가 할 때 submodule.<name>.branch옵션 을 쉽게 기록 .gitmodules할 수 있습니다. 이 패치로

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

로 줄이다

$ git submodule add -b <branch> <repository> [<path>]

이것은 미래에 전화를

$ git submodule update --remote ...

하위 모듈을 초기화하는 데 사용한 것과 동일한 분기에서 업데이트를 얻습니다. 일반적으로 원하는 것입니다.

서명 : W. Trevor King


원래 답변 (2012 년 2 월) :

서브 모듈은 부모 저장소가 참조하는 단일 커밋입니다.
자체 Git 저장소이므로 "모든 커밋 기록"은 git log해당 하위 모듈 내에서 액세스 할 수 있습니다 .

따라서 부모가 하위 모듈의 특정 분기에 대한 최신 커밋을 자동으로 추적하려면 다음이 필요합니다.

  • 서브 모듈의 cd
  • git fetch / pull을 사용하여 오른쪽 분기에 최신 커밋이 있는지 확인하십시오.
  • 부모 리포지토리로 돌아 가기
  • 서브 모듈의 새로운 커밋을 기록하기 위해 추가하고 커밋합니다.

커밋 작업을 포함하여 gitslave (이미 살펴 보았습니다)가 가장 적합 합니다 .

올바른 서브 모듈 분기를 체크 아웃하고 변경하고 커밋 한 다음 수퍼 프로젝트로 이동하여 커밋을 커밋 (또는 적어도 새로운 위치를 기록해야 함)하여 서브 모듈을 변경하는 것은 약간 성가신 일입니다. 하위 모듈).

다른 대안이 여기자세히 설명되어 있습니다 .


1
@BraveNewMath 서브 모듈에서 올바른 브랜치를 체크 아웃 한 다음 부모 리포지토리로 이동하여 다음을 입력하십시오 git config -f .gitmodules submodule.<path>.branch <branch>. 모든 것을 추가하고 커밋하고 푸시하십시오.
VonC

2
@BraveNewMath 하위 모듈이 stackoverflow.com/a/18799234/6309 에서 분기를 추적하도록하는 모든 단계를 자세히 설명합니다 .
VonC

1
--remote업데이트 할 때 분리 된 헤드를 원하지 않으면 태그 를 사용하는 것이 중요 합니다. 새로 가져온 코드가 마스터 뒤에있는 이유가 궁금합니다!
Chris Watts

3
@DC_ "이 답변"에 동의합니다 (작성한 이후). "분기 수행"기능은 하위 모듈을 분기의 최신 커밋으로 업데이트하기위한 것입니다. 그 후에도 여전히 부모 저장소에서 새 하위 모듈 상태를 추가하고 커밋해야합니다. 그리고 다음 클론은 그 상태를 점검합니다 (headless).
VonC

3
@VonC 따라서 더 명확하게하기 위해, "분기 수행"기능 git submodule update은 서브 모듈을 어떤 커밋 (즉, 마스터에 대한 가장 최근 커밋)이 자동으로 업데이트 할 것인지를 지시하지 않고 명령 의 동작에만 영향을 미칩니다. 커밋은 복제시 서브 모듈에 의해 지시됩니까?
christner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.