다른 git repo 안에 git repo 유지


125

내가 원하는 것은 다음과 같습니다.

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

REPO-A의 모든 콘텐츠를 REMOTE-A 에 푸시 하고 REPO-B REMOTE-B 에 푸시하고 싶습니다 .

가능한?

답변:


104

Git 하위 모듈 을 사용하려는 것 같습니다 .

Git은 하위 모듈을 사용하여이 문제를 해결합니다. 하위 모듈을 사용하면 Git 저장소를 다른 Git 저장소의 하위 디렉터리로 유지할 수 있습니다. 이렇게하면 다른 저장소를 프로젝트에 복제하고 커밋을 별도로 유지할 수 있습니다.


19
정확히는 아닙니다. repoA의 모든 내용을 푸시하지는 않습니다 . A와 B에 대한 참조 만 있습니다.하지만 귀하의 답변을 비판하지 않고 OP의 질문을 다시 읽을 때 거의 똑같이 서두르고있었습니다.)
VonC

1
이것은 서브 모듈의 사용 사례입니다. REPO-A 및 REPO-B 등 자신의 커밋, 기원, 역사, 함께, 자신의 오른쪽 자식의 repos로 취급됩니다
데미안 윌슨

2
그래서 내가 그 권리를 읽고 있다면, 내가 찾은 것 이외의 submodule-d 저장소를 독립적으로 확인할 수 있습니까? 이미 존재하는 리포지토리를 다른 프로젝트의 하위 모듈로 참조하려면 어떻게해야합니까?
JohnO

나는 OP와 똑같은 해결책을 찾고 있지 않았고, 평균적으로 이것은 비슷한 질문에 대한 답을 더 많이 찾는 것이라고 생각합니다. 자식 REPO-B? ".
jaya

64

나는 항상 심볼릭 링크를 사용하여 두 개의 분리되고 별개의 리포지토리를 유지했습니다.


8
git 하위 모듈과 git 하위 트리가 얼마나 혼란스러워 보이는지에 대한 올바른 대답입니다.
Trevor Hickey 2014 년

이것은 또한 여러 원격 저장소에서 하나의 응용 프로그램 조립에 매우 유용합니다
GeraldScott

22
두 개의 개별적이고 별개의 리포지토리를 유지하려면 리포지토리 B를 리포지토리 A에 유지하고 리포지토리 B를 리포지토리 A에 추가하는 것이 좋지 .gitignore않습니까?
Fabien Snauwaert

1
Fabien이 제안한 것을 할 생각이었습니다. 그렇게하는 데 문제가 있습니까?
theonlygusti

1
git 리포지토리를 별도로 유지하고 REPO-A에 중첩 된 REPO-B (.git 없음)의 복사본에서 REPO-B에 대한 변경 사항을 복사합니다. 나는 rsync로 그것을한다. rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/REPO-B에 변경 사항이있는 경우 실행
Shai

29

예, 당신이 그린 파일 계층 구조로 당신이 요구하는 것을 정확히 할 수 있습니다. Repo-B는 독립적이며 Repo-A에 대한 지식이 없습니다. Repo-A는 자체 파일 및 Repo-B 파일의 모든 변경 사항을 추적합니다.

그러나 나는 이것을 권장하지 않습니다. Repo-B에서 파일을 변경하고 커밋 할 때마다 Repo-A에서 커밋해야합니다. Repo-B에서 분기하면 Repo-A가 엉망이되고 Repo-A에서 분기가 불안정 해집니다 (폴더 제거 문제 등). 서브 모듈은 확실히 갈 길입니다.


53
단순히 REPO-B를 /REPO-A/.gitignore에 추가 할 수 없습니까?
mikkelbreum

2
@mikkelbreum 나는 똑같은 생각을 가지고있었습니다. 현재 메인 프로젝트에 subverion을 사용하고 있으며 하위 폴더 중 하나에서 git repo를 사용합니다. SVN을 사용하여 svn : ignore 속성에 git repo가있는 폴더를 추가했고 git로 똑같이 할 수 있는지 스스로에게 묻고있었습니다.
2ndkauboy 2014-06-10

3
글쎄요, 부모 저장소의 무시 목록에 중첩 된 git 저장소를 추가하는 것이 왜 작동하지 않는지 알 수 없습니다.하지만 동시에이 접근 방식은 거의 볼 수 없으며 많은 사람들이 중첩 된 git repos를 권장하지 않습니다.
mikkelbreum 2014-06-10

18
이 정확한 시나리오를 구현했습니다. 원격 저장소로 푸시하고 싶지 않은 하위 폴더에 압축되지 않은 CSS 파일이 있으므로 내 .gitignore에 있습니다. 그러나 이러한 파일의 변경 사항을 로컬로 추적하고 싶습니다. 압축되지 않은 파일이있는 폴더 안에 저장소를 설정하고 모든 파일을 해당 저장소에 추가했습니다. 부모 저장소에서 여전히 무시되지만 하위 저장소 내부의 변경 사항을 추적 할 수 있습니다. 권장 여부에 관계없이이 솔루션은 이와 같은 특정 상황에서 핵심입니다.
BrianVPS

1
한 저장소에서 브랜치를 전환 할 때마다 다른 저장소는 전체 변경 사항을 볼 수 있지만 "Repo-A에서 브랜치가 불안정해질 것입니다 (폴더 제거 문제 등)"라는 것을 알 수 있습니다. 고마워!
user2688151

2

"git-subrepo"를 사용하여 원하는 것을 얻을 수 있습니다 (REPO-A 저장소에는 참조가 아닌 REPO-B 폴더에있는 파일을 포함하여 모든 파일이 포함됨).

https://github.com/ingydotnet/git-subrepo

기여자 중 일부가 subrepo 명령을 설치하지 않은 경우에도 여전히 작동합니다. 전체 폴더 구조를 볼 수 있지만 변경 사항을 하위 저장소에 적용 할 수는 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.