Reescreva o histórico git filter-branch create / split em submódulos / subprojetos
Atualmente estou importando um projeto cvs para o git.
Após a importação, eu quero reescrever o histórico para mover um diretório existente em um submódulo separado.
Suponha que eu tenha uma estrutura como esta:
file1<br>file2<br>file3<br>dir1<br>dir2<br>library<br>
Agora eu quero reescrever o histórico para que o diretóriolibrary
é sempre um submódulo git. Diga, divida os diretórios especificados em seus próprios submódulos / subprojetos
Este é o meu código atual:
Arquivore-write-submódulo (que é chamado)
cd project
git filter-branch --tree-filter $PWD/../$0-tree-filter --tag-name-filter cat -- --all
Arquivorewrite-submodule-tree-filter
#!/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
Esse código cria o arquivo .gitmodules, mas não a entrada de submódulo commit (a linhaSubproject commit <sha1-hash>
, saída porgit diff
) no repositório principal e nos arquivos no diretóriolibrary
ainda são versionados no repositório principal e não no repositório do subprojeto.
Agradecemos antecipadamente por qualquer dica
Os .gitmodules são assim:
[submodule "library"] path = library url = ./library