2012-09-25 2 views
6

내 질문에 Git subtree export and re-import woes 다음은 폴더를 하위 트리로 변환하는 방법을 묻고 싶습니다.기존 폴더를 git 하위 트리로 만들기

상상해보십시오. 이제는 다른 프로젝트 (및 기타)와 공유해야하는 코드가있는 저장소가 있으므로 모든 공유 코드를 "sub"폴더에 저장하십시오. 이 폴더는 저장소 (가능하다면 히스토리없이)에서 추출해야합니다. 나중에 "sub"는 A의 히스토리를 잃지 않고 C의 서브 트리가되어야합니다 (매우 중요 함). 또한 "하위"를 변경하고 다시 C로 푸시 할 수 있기를 원합니다.

답변

7

git subtree split 정확히 수행하고 싶습니다. --prefix을 통해 폴더를 지정하면 repo에서 별도의 트리가 생성되어 다른 저장소로 푸시 한 다음 적합하다고 생각하는 방식으로 사용할 수 있습니다.

자식 (1.8.1)의 현재 버전은 하위 트리 문서를 포함하지 않습니다,하지만 당신은 여기에서 찾을 수 있습니다 https://github.com/apenwarr/git-subtree/blob/master/git-subtree.txt

당신이 사용할 수있는 흐름은 다음과 같습니다

# In Repo A create your subtree split and push it 
> git subtree split --prefix sub --branch subBranch 
> git push C subBranch:master 

# After some changes that touched the sub directory 
> git subtree push --prefix sub C master 

마지막 명령 줘야 트리를 다시 분할하고 (이전에 분할 된 커밋을 사용하여 C의 트리 무결성을 확인하십시오) C/master으로 푸시하십시오.

당신은 콘텐츠에 대한 기록을 삭제하려면

당신이 --squash 옵션을 사용할 수 있습니다 C에 푸시 할 때 git split -ing와 git push -ing. 스쿼시 및 비 스쿼시 컨텐트를 혼합하기 시작하면 서브 트리가 올바르게 분할되어 프리 소프트웨어 분할을 재사용 할 수 없으므로 C으로 푸시 할 수 없으므로 일관성을 유지하고 계속 사용해야합니다.

마지막으로 sub의 첫 번째 분할을 만든 후에는 삭제하고 새 하위 트리로 다시 가져올 필요가 없습니다. 그것을 유지한다면 git subtree은 이전에 생성 된 커밋을 다른 스플릿에서 다시 생성/재사용합니다. 폴더를 삭제 한 다음 생성 된 커밋에서 sub을 다시 추가하면 여전히 작동해야하며 --squash을 사용하는 경우 C은 기록이 없지만 내역은 A으로 유지됩니다.