2016-12-15 2 views
0

현재 성장중인 자식 프로젝트가 있고 여러 부분이 프로젝트로 시작하고 있습니다.하위 모듈로 자식 프로젝트를 분할하십시오.

그래서 하위 모듈을 만들고 파일의 기록을 유지하려고합니다. 가 서로 다른 폴더 간 이동 (예 partThatIsItsOwnProjectpartThatIsNotItsOwnProject에서 내가 너무 그 이동의 역사를 가지고 싶습니다.)이었다

하기 전에 : 내가 가지고 싶은

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

:

/.git 
/someFiles 
/partThatIsItsOwnProject 
--/.git 
--/subdirectory 
/partThatIsNotItsOwnProject 
--/subdirectory 

그래서 나는 git subtree이 될 것이라고 추측했지만 원래의 저장소를 유지하고 일부만 표시하는 것으로 보입니다. git submodule이 설정의 대상인 것으로 보이지만 어떻게 전환합니까?

답변

1

이렇게하려면 전체 저장소의 기록을 다시 작성하여 별도의 저장소에 넣을 디렉토리와 관련이없는 모든 것을 제외해야합니다. git filter-branch 명령은 유용합니다. [0]에서이를 수행하는 스크립트 예제를 찾을 수 있습니다. 필요에 맞게 조정해야 할 수도 있습니다.

일반적으로 git filter-branch [1]은 repo의 모든 커밋에 필터를 순차적으로 적용하여 git 기록을 다시 쓸 수있게합니다. --tree-filter을 사용하는 것이 필요한 것을 얻는 가장 간단한 방법이지만, 도중에 모든 커밋을 적절하게 체크 아웃하는 것은 매우 느리기 때문에 --index-filter으로 직접 인덱스를 편집하는 것이 좋습니다.

[0] https://github.com/openstack/oslo.tools/blob/master/filter_git_history.sh

[1] https://git-scm.com/docs/git-filter-branch

1

포크 당신의 주요 자식, 다음은 "partThatIsItsOwnProject"로 갈래의 이름을 변경하고 해당 "하위 디렉터리"의 일부가 아닌 모든 것을 제거합니다. 그러면 git을 하위 모듈로 추가하면 모든 기록이 유지됩니다.

마스터 자식에서 탈주하고 싶은 모든 하위 디렉토리에 대해 반복하십시오.

관련 문제