히스토리를 유지하는 동안 단일 디렉토리를 GIT 저장소에서 새 저장소로 이동하려면 어떻게해야합니까?
-
03-07-2019 - |
문제
별도의 디렉토리로 여러 프로젝트를 포함하는 GIT 저장소를 물려 받았습니다. 저장소를 각 프로젝트마다 하나씩 새로운 개별 저장소로 나눈 다음 마스터 저장소에 프로젝트를 하위 모듈로 포함하도록합니다. 가능하면 개별 프로젝트의 개정 내역을 유지하는 동안이 모든 일을하고 싶습니다.
각 프로젝트에 대한 저장소를 복제하고 매번 다른 프로젝트를 제거 할 수 있지만 각 새로운 프로젝트 저장소에서 복제 된 기록을 피하는 더 좋은 방법이 있습니까?
해결책
당신이 사용할 수있는 git filter-branch
프로젝트의 역사를 다시 작성합니다. 문서에서 :
Foodir/가 프로젝트 루트 인 것처럼 보이도록 저장소를 다시 작성하고 다른 모든 역사를 버립니다.
git filter-branch --subdirectory-filter foodir -- --all
repo의 여러 사본을 만들고 분할하려는 각 하위 디렉토리에 대해 수행하면 찾고있는 내용을 사용해야합니다.
다른 팁
새로운 저장소로 폴더를 내보내려면 다음과 같습니다.
- 내보낼 폴더가있는 곳에서 저장소를 복제하려면
- 호스팅 제공 업체에 GitHub로 빈 리포지토리를 작성하려면 내보내기 폴더를 저장합니다.
복제 된 저장소 폴더를 열고이 명령을 실행하십시오.
git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
git의 요점은 이력이 부모 커밋을 해싱하여 각 커밋마다 구현된다는 것입니다. 커밋을 "재생"할 수 있으며 (이것은 본질적으로 SVN-Importer의 작동 방식) 새로운 저장소로 만들어지고 각 하위 프로젝트 만 유지할 수 있습니다. 그러나 이것은 커밋 해시의 의미를 파괴 할 것입니다. 당신이 그것에 문제가 없다면 그렇게하십시오.
과거에는 방금 복제하고 계속 움직였습니다. 이것은 물건을 더 크게 만들지 만 디스크 공간은 저렴합니다. 내 시간은 비싸다.
또한 디렉토리를 분류하는 도구도 모릅니다. 디렉토리에서 git-log를 통해 모든 커밋을 찾은 다음 git-fast-export와 같은 커밋을 재생할 수 있다고 생각하십니까?