Programming

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

procodes 2020. 8. 4. 19:47
반응형

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


별도의 디렉토리에 여러 프로젝트가 포함 된 자식 저장소를 상속했습니다. 리포지토리를 각 프로젝트마다 하나씩 새로운 개별 리포지토리로 분할 한 다음 마스터 리포지토리에 프로젝트를 하위 모듈로 포함시킵니다. 가능한 한 개별 프로젝트의 개정 내역을 유지 하면서이 모든 것을하고 싶습니다.

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


git filter-branch프로젝트 히스토리를 다시 쓰는 데 사용할 수 있습니다 . 설명서에서 :

foodir /가 프로젝트 루트 인 것처럼 보이도록 저장소를 다시 작성하고 다른 모든 히스토리를 삭제하려면 다음을 수행하십시오.

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

리포지토리를 여러 개 만들고 분할하려는 각 서브 디렉토리에 대해이를 수행하십시오. 원하는 항목을 정리해야합니다.


폴더를 새 저장소로 내보내려면 다음이 필요합니다.

  1. 내보낼 폴더가있는 저장소를 복제합니다.
  2. 호스팅 공급자에 GitHub로 빈 리포지토리를 생성하여 내 보낸 폴더를 저장합니다.
  3. 복제 된 저장소 폴더를 열고 다음 명령을 실행하십시오.

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

자식의 요점은 히스토리가 상위 커밋을 해싱하여 각 커밋마다 구현된다는 것입니다. 커밋 (이것은 기본적으로 svn-importer가 작동하는 방식 임)을 새 저장소로 "재생"하고 각 하위 프로젝트 만 유지할 수 있습니다. 그러나 이것은 커밋 해시의 의미를 파괴합니다. 그것에 문제가 없다면 그렇게하십시오.

과거에는 방금 복제하고 진행했습니다. 이렇게하면 일이 커지지 만 디스크 공간이 저렴합니다. 내 시간은 비싸다.

또한 디렉토리를 연결하는 도구를 모릅니다. 디렉토리에 git-log하여 모든 커밋을 찾은 다음 git-fast-export와 같은 커밋을 재생할 수 있다고 가정합니다.

참고 : https://stackoverflow.com/questions/811251/how-can-i-move-a-single-directory-from-a-git-repository-to-a-new-repository-whil

반응형