Git拆分的子项目,具有所有分支的历史记录,存储库太大

问题描述 投票:1回答:1

我最初有一个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 / ...

git git-filter-branch
1个回答
0
投票

我有一个带有utils库的项目,该项目开始在其他项目中很有用,并且希望将其历史记录拆分为一个子模块。没想到先看SO,所以我写了我自己的,它在本地构建历史记录,这样会更快一些,然后,如果需要,您可以设置helper命令的.gitmodules文件等,然后推送子模块历史记录本身在任何您想要的地方。

© www.soinside.com 2019 - 2024. All rights reserved.