我最初有一个SVN信息库,其中包含多个项目。
我使用SubGit将其转换为GIT存储库。
存储库:
MyRepository/
.git/
Project1/
Project2/
Project3/
...
此存储库具有多个分支(v1,v2,v3,v4,v5,master)。
我正在尝试将我的存储库拆分为多个存储库,并在每个存储库中保留完整的历史记录和分支。
我使用此脚本https://stackoverflow.com/a/26033230/2558653能够做到这一点>
#!/bin/bash repoDir="C:\Sources\MyRepository" folder="Project1" newOrigin="https://gitlab.com/myUser/project1.git" cd $repoDir git checkout --detach git branch | grep --invert-match "*" | xargs git branch -D for remote in `git branch --remotes | grep --invert-match "\->"` do git checkout --track $remote git add -vA * git commit -vam "Changes from $remote" || true done git remote remove origin git filter-branch --prune-empty --subdirectory-filter $folder -- --all #prune old objects rm -rf .git/refs/original/* git reflog expire --all --expire-unreachable=0 git repack -A -d git prune #upload to new remote git remote add origin $newOrigin git push origin master for branch in `git branch | grep -v '\*'` do git push origin $branch done
它起作用了,但是现在我的子文件夹的存储库为2.7GB,而当前文件仅为20 MB。
我尝试使用此命令列出存储库中的大文件,并且我指出某些文件不在我的子项目中,应该将其删除:
git rev-list --objects --all \ | grep "$(git verify-pack -v .git/objects/pack/*.idx \ | sort -k 3 -n \ | tail -10 \ | awk '{print$1}')" ... 00a2e4e398bd1805ad2524d86276ee72216c1f67 OtherFolder/Distribution/NsiScripts/file.exe ...
是否有办法修改脚本以删除子文件夹中所有未包含的文件并减小其大小?那是脚本应该做的吗?
我最初有一个SVN信息库,其中包含多个项目。我使用SubGit将其转换为GIT存储库。存储库:MyRepository / .git / Project1 / Project2 / Project3 / ...
我有一个带有utils
库的项目,该项目开始在其他项目中很有用,并且希望将其历史记录拆分为一个子模块。没想到先看SO,所以我写了我自己的,它在本地构建历史记录,这样会更快一些,然后,如果需要,您可以设置helper命令的.gitmodules
文件等,然后推送子模块历史记录本身在任何您想要的地方。