Przepisz historię git filtruj gałąź, aby utworzyć / podzielić na submoduły / podprojekty
Obecnie importuję projekt cvs do git.
Po zaimportowaniu chcę przepisać historię, aby przenieść istniejący katalog do oddzielnego submodułu.
Załóżmy, że mam taką strukturę:
file1<br>file2<br>file3<br>dir1<br>dir2<br>library<br>
Teraz chcę przepisać historię, tak aby kataloglibrary
jest zawsze podmodułem git. Powiedzmy, że podzielimy określone katalogi na własne submoduły / podprojekty
To jest mój obecny kod:
Plikprzepisać podmoduł (który jest nazywany)
cd project
git filter-branch --tree-filter $PWD/../$0-tree-filter --tag-name-filter cat -- --all
Plikprzepisać-podmodułowy filtr drzewa
#!/bin/bash function gitCommit() { unset GIT_DIR unset GIT_WORK_TREE git add -A if [ -n "$(git diff --cached --name-only)" ] then # something to commit git commit -F $_msg fi } _git_dir=$GIT_DIR _git_work_tree=$GIT_WORK_TREE unset GIT_DIR unset GIT_WORK_TREE _dir=$PWD if [ -d "library" ] then _msg=$(tempfile) git log ${GIT_COMMIT}^! --format="%B" > $_msg git rm -r --cached lib cd library if [ -d ".git" ] then gitCommit else git init gitCommit fi cd .. export GIT_DIR=$_git_dir export GIT_WORK_TREE=$_git_work_tree git submodule add -f ./lib fi GIT_DIR=$_git_dir GIT_WORK_TREE=$_git_work_tree
Ten kod tworzy plik .gitmodules, ale nie wpis zatwierdzenia podmodułu (wierszSubproject commit <sha1-hash>
, wyjście przezgit diff
) w głównym repozytorium i plikach w katalogulibrary
są nadal wersjonowane w głównym repozytorium, a nie w repozytorium podprojektu.
Z góry dziękuję za każdą wskazówkę
Moduły .git wyglądają tak:
[submodule "library"] path = library url = ./library