히스토리를 유지하는 동안 단일 디렉토리를 GIT 저장소에서 새 저장소로 이동하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

문제

별도의 디렉토리로 여러 프로젝트를 포함하는 GIT 저장소를 물려 받았습니다. 저장소를 각 프로젝트마다 하나씩 새로운 개별 저장소로 나눈 다음 마스터 저장소에 프로젝트를 하위 모듈로 포함하도록합니다. 가능하면 개별 프로젝트의 개정 내역을 유지하는 동안이 모든 일을하고 싶습니다.

각 프로젝트에 대한 저장소를 복제하고 매번 다른 프로젝트를 제거 할 수 있지만 각 새로운 프로젝트 저장소에서 복제 된 기록을 피하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

당신이 사용할 수있는 git filter-branch 프로젝트의 역사를 다시 작성합니다. 문서에서 :

Foodir/가 프로젝트 루트 인 것처럼 보이도록 저장소를 다시 작성하고 다른 모든 역사를 버립니다.

git filter-branch --subdirectory-filter foodir -- --all

repo의 여러 사본을 만들고 분할하려는 각 하위 디렉토리에 대해 수행하면 찾고있는 내용을 사용해야합니다.

다른 팁

새로운 저장소로 폴더를 내보내려면 다음과 같습니다.

  1. 내보낼 폴더가있는 곳에서 저장소를 복제하려면
  2. 호스팅 제공 업체에 GitHub로 빈 리포지토리를 작성하려면 내보내기 폴더를 저장합니다.
  3. 복제 된 저장소 폴더를 열고이 명령을 실행하십시오.

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

git의 요점은 이력이 부모 커밋을 해싱하여 각 커밋마다 구현된다는 것입니다. 커밋을 "재생"할 수 있으며 (이것은 본질적으로 SVN-Importer의 작동 방식) 새로운 저장소로 만들어지고 각 하위 프로젝트 만 유지할 수 있습니다. 그러나 이것은 커밋 해시의 의미를 파괴 할 것입니다. 당신이 그것에 문제가 없다면 그렇게하십시오.

과거에는 방금 복제하고 계속 움직였습니다. 이것은 물건을 더 크게 만들지 만 디스크 공간은 저렴합니다. 내 시간은 비싸다.

또한 디렉토리를 분류하는 도구도 모릅니다. 디렉토리에서 git-log를 통해 모든 커밋을 찾은 다음 git-fast-export와 같은 커밋을 재생할 수 있다고 생각하십니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top