2009-10-20 2 views
37

제 프로젝트에서 여러 Git 저장소에 저장되어있는 제 3 자 코드를 사용해야합니다. 내 프로젝트도 Git 저장소에 저장된다. 메인 프로젝트에서 저와 함께 일하는 사람들이 몇 명 있으며, 저는 관리자입니다.Git submodules workflow

이전 프로젝트에서는 종속성을 수동으로 Git 작업 트리에 복사하면서 내가 사용하는 버전을 지정하는 작은 파일을 추가했습니다.

매일 매일 의존성을 업데이트해야하며, 종종 코드를 직접 작성해야합니다. 대부분의 경우 기본 프로젝트의 변경 사항과 관련이 있습니다.

나는 Git 서브 모듈을 사용해 관리를하기로 결정했다. 더 많이 시도할수록 더 좌절감을 느낍니다. 수동 복사가 더 나은 것 같습니다.

  • 우리는 더 이상 (git checkout 지금 git submodule update --init 필요) 하나의 명령으로 일관 저장소 상태를 얻을 수있어 없습니다 :

    은 여기 내 문제의 일부입니다.

  • Git 도구를 제대로 사용할 수 없습니다 (git archive이 가장 주목할만한 기능입니다).
  • 주 프로젝트의 상태 변경/차이를 하위 모듈로 볼 수 없습니다.
  • 방금 ​​발견 한 것처럼 git submodule--git-dir--work-tree 옵션과 작동하지 않으며 현재 디렉토리를 "작업 트리의 최상위 수준"으로 물리적으로 변경해야합니다.

우리의 서브 모듈 워크 플로우 (하나의 작업 == 하나의 명령)를 능률화하기 위해 Git 주위에 다소 두꺼운 래퍼를 작성해야합니다. 이거 슬프네.

자식 (Git)에서 벗어나 하위 프로젝트 개발을 완전히 주 프로젝트로 병합하는 것은 선택할 수 없습니다.

아마 내가 잘못된 방법으로 git submodules을 사용하고 있습니까? 워크 플로우에 대한 훌륭한 자습서가 있습니까?

정답을 모르겠지만 내 의견을 공유하십시오. :-)

+6

하나는, 그것은 다른 사람의 저장소를 나누기. 예를 들어, 누군가가 github에서 라이브러리를 작성하면 대신 포크를 가리 키도록 하위 모듈을 전환합니다. 해결 방법은 하위 모듈을 삭제하고 모든 사용자가 끌어서 업데이트하도록 한 다음 하위 모듈을 교체하고 모든 사용자가 다시 가져 와서 업데이트하도록하는 것입니다. –

+0

누군가가이 게시물을 훔쳐서 참조없이 habr에 게시했다고 생각했지만 이름을 보았습니다. :-D 그래도 SO에 대한 참조는 좋을 것 같습니다. –

+1

하나 있습니다.텍스트의 링크를 더 자세히 살펴보십시오. –

답변

11

대신 git subtree (alt link)을 시도해 볼 수 있습니다. 나는 리모컨과 깨끗한 (내림차순 master 기록) 지점을 사용하여 운이 많이왔다.

+1

git 하위 트리를 사용해 보았는데 git 하위 모듈보다 훨씬 뛰어납니다. 감사! –

+0

첫 번째 링크가 끊어졌습니다. 당신이 alt 링크를 제공한다는 것을 압니다. 그러나 나는 너에게 알리고 싶었다. – Eduardo

+0

@EduardoCereto - 두 링크가 모두 정상적으로 작동합니다. – FooF

4

git 메일 링리스트의 최근 스레드에는 단일 명령으로 일관된 저장소 상태를 얻는 방법에 대한 패치가 포함되어 있습니다. 기본적으로 브랜치를 변경할 때 자식 서브 모듈 업데이트를 호출합니다. 당신이 서브 모듈을 삭제하고 같은 위치에 새로운 서브 모듈로 교체하면 내 다른 좋아하는 서브 모듈 개는의

http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330