2011-08-22 7 views
10

git으로 관리되는 장고 프로젝트가 있습니다. 나는 그것을 나의 호스트에게 밀고있다. 이제, 나는 하나의 디렉토리 (inc. 모든 하위 디렉토리) 중 하나를 다른 git repo로 푸시 할 수 있기를 원합니다. 가능한 경우 어떻게 가능합니까?다른 git repo 안에 자식 repo를 넣을 수 있습니까

편집 : 그래서 그 디렉토리는 git repo 자체가되고 싶습니다.

답변

21

당신은 submodules에 대한 자식의 지원을 볼 수 있었다. 두 번째 저장소를 주 프로젝트에 하위 모듈로 추가합니다 (예 : 같은 명령으로 : - 당신은 당신이 이상 밀어 수있는 전송을 사용하도록 origin을 변경할 수 있으며 것처럼 다음 밀어

git submodule add git://wherever/blah.git library-code 
git commit -m "Added a new submodule called 'library-code'" 

당신이 library-code 하위 디렉토리로 변경, 그것은 부모 저장소가 존재하지 않는 것처럼입니다 완전히 독립적입니다.

하위 모듈을 특정 버전으로 지정하려면 서브 모듈로 변경하고 git checkout을 사용하여 올바른 버전으로 전환해야합니다. 그런 다음 다시 메인 저장소 및 단계까지 변경과 함께 그 새로운 서브 모듈 버전을 커밋 :

git add library-code 
git commit -m 'Change the submodule version' 

주요 저장소의 나무 단지, 서브 모듈이에 있어야 버전을 저장 그래서 당신은 메인 저장소를 누르면 , 하위 모듈에있는 파일 중 하나를 밀고있는 것은 아닙니다.

: 역사를 보존하면서이 답변에 설명 된대로, 당신은 역사를 다시 쓰는 원래 저장소 및 사용자 git filter-branch를 복제해야합니다,이 하위 디렉토리를 분할하기 위해

그런 다음 새로 만든 저장소 GitHub 저장소로 밀어 넣고 원래 프로젝트로 돌아가서 하위 디렉토리를 제거한 다음 위에 설명한대로 하위 모듈로 바꿀 수 있습니다.

만약 당신이 힘내 개념에 익숙하지 않다면 이것은 당신에게 어려울 수 있습니다 - 나는 자식의 서브 모듈을 미리 읽을 것을 권한다.

+2

이미 내 하위 디렉토리에 코드가 있으므로 git repo로 변환하고 새로운 원격 저장소 (예 : github)로 푸시합니다. 그 일을 보여주는 예를 들려 줄 수 있습니까? 나는이 물건에 너무 초보자 인 것을 유감스럽게 생각한다. :) – yasar

+1

하위 디렉토리에있는 모든 것의 역사를 보존하고 싶습니까? –

+0

다른 원격 저장소에 더 큰 저장소를 추가하면 하위 모듈은 어떻게됩니까? 하위 모듈의 파일이 포함되어 있습니까? – yasar

1

특정 디렉토리를 변경하고 변경 사항을 적용하고 커밋 및 푸시하면 효과적으로 해당 디렉토리를 "밀고"있습니다.

다른 Git repo에 푸시하려는 디렉토리 만있는 경우 이것이 리포로 설정하려는 경우 Git Submodules을 볼 수 있습니다.

1

자식 서브 모듈을 살펴 보았습니까? git 저장소가 깨끗하게 중첩 될 수 있지만 완전히 독립적으로 유지됩니다.

즉, 푸시/풀 및 다른 커밋 트리 + 로그에 대해 다른 원격 URL이있는 하위 디렉토리를 주 프로젝트를 어수선하게 할 수 있습니다.

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial

관련 문제