developer tip

git 폴더를 하위 모듈로 소급하여 변환 하시겠습니까?

copycodes 2020. 8. 18. 07:50
반응형

git 폴더를 하위 모듈로 소급하여 변환 하시겠습니까?


꽤 자주 당신이 어떤 종류의 프로젝트를 작성하는 경우이고, 잠시 후에 프로젝트의 일부 구성 요소가 실제로 독립형 구성 요소 (아마도 라이브러리)로 유용하다는 것이 분명해집니다. 초기부터 그 아이디어가 있었다면 대부분의 코드가 자체 폴더에있을 가능성이 큽니다.

git 프로젝트의 하위 디렉토리 중 하나를 하위 모듈로 변환하는 방법이 있습니까? 이상적으로는 해당 디렉토리의 모든 코드가 상위 프로젝트에서 제거되고 하위 모듈 프로젝트가 적절한 기록과 함께 그 자리에 추가되고 모든 상위 프로젝트 커밋이 올바른 하위 모듈 커밋을 가리 키도록 발생합니다. .


하위 디렉토리를 자체 저장소로 분리하려면 filter-branch원본 저장소의 복제본에서 사용하십시오.

git clone <your_project> <your_submodule>
cd <your_submodule>
git filter-branch --subdirectory-filter 'path/to/your/submodule' --prune-empty -- --all

그런 다음 원래 디렉토리를 삭제하고 상위 프로젝트에 하위 모듈을 추가하는 것입니다.


먼저 dir을 하위 모듈이 될 폴더로 변경하십시오. 그때:

git init
git remote add origin repourl
git add .
git commit -am'first commit in submodule'
git push -u origin master
cd ..
rm -rf folder wich will be a submodule
git commit -am'deleting folder'
git submodule add repourl folder wich will be a submodule
git commit -am'adding submodule'

나는 이것이 오래된 스레드라는 것을 알고 있지만 여기에 대한 답변은 다른 분기의 관련 커밋을 스쿼시합니다.

모든 추가 브랜치 및 커밋을 복제하고 유지하는 간단한 방법 :

1-이 git 별칭이 있는지 확인

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

2-원격 복제, 모든 분기 가져 오기, 원격 변경, 디렉터리 필터링, 푸시

git clone git@github.com:user/existing-repo.git new-repo
cd new-repo
git clone-branches
git remote rm origin
git remote add origin git@github.com:user/new-repo.git
git remote -v
git filter-branch --subdirectory-filter my_directory/ -- --all
git push --all
git push --tags

할 수는 있지만 간단하지 않습니다. git filter-branch, subdirectory을 검색 submodule하면 프로세스에 대한 적절한 글이 있습니다. 본질적으로 프로젝트의 두 개의 복제본을 생성 git filter-branch하여 하나의 하위 디렉토리를 제외한 모든 것을 제거하고 다른 하위 디렉토리 만 제거합니다. 그런 다음 두 번째 저장소를 첫 번째 저장소의 하위 모듈로 설정할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/12514197/convert-a-git-folder-to-a-submodule-retrospectively

반응형