我正在尝试将一个存储库从GitLab迁移到GitHub。存储库大小为685.83MB,由几个.dat,.csv,.exe,.pkl
文件组成,文件大小从100MB到3383.40 MB不等。它失败并出现以下错误。
GitLab To GitHub Migration Steps:-
$ git clone --mirror [email protected]:test/my-repo.git
$ cd ~/my-repo.git
$ git remote set-url --push origin [email protected]:test/my-repo.git
$ git push
Error
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: File Src/project/label/file1.dat is 476.32 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File Src/models/label/file2.dat is 2431.49 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File test/test1/label/model/file3.exe is 1031.94 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File test/test2/usecase/filemarker/file3.csv is 997.02 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File src/msg/sports/model.pkl is 3383.40 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File test/movie/maker/marker.dat is 1373.45 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File project/make/level/project/realmaker.csv is 1594.83 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: File src/moderm/network/test.pkl is 111.07 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
Git LFS/BFG Method:
$ git clone --mirror gitlab-heavy-repo
$ cd gitlab-heavy-repo.git
$ java -jar bfg-1.12.5.jar --convert-to-git-lfs '*.dat' --no-blob-protection
$ java -jar bfg-1.12.5.jar --convert-to-git-lfs '*.exe' --no-blob-protection
$ java -jar bfg-1.12.5.jar --convert-to-git-lfs '*.csv' --no-blob-protection
$ java -jar bfg-1.12.5.jar --convert-to-git-lfs '*.pkl' --no-blob-protection
$ git reflog expire --expire=now --all && git gc --prune=now
$ git lfs install
$ git remote set-url origin [email protected]:some-org/githubheavy-repo.git
$ git push
即使经过上述过程,它也会因相同的错误而失败。看来Git LFS有2GB的限制。因此,尝试从存储库中完全删除上述较大的文件。请按照以下方法删除。
1) git clone gitlab-heavy-repo
2) cd gitlab-heavy-repo
3) git filter-branch --force --index-filter "git rm --cached --ignore-unmatch Src/project/label/file1.dat" --prune-empty --tag-name-filter cat -- --all
4) git reflog expire --expire=now --all
5) git gc --prune=now
6) git push origin --force --all
7) git push origin --force --tags
8) rm -rf .git/refs/original/
对以上所有较大的文件重复相同的步骤。但是现在在Gitlab存储库中显示了存储大小-1.9-GB
最初只是685.83MB.
请纠正我。提前致谢。
将100MiB以上的所有文件添加到.gitignore:
find . -size +100M | cat >> .gitignore
如果尚未提交文件,请执行以下操作:
从.gitignore读取文件并将其从回购中删除(而不从磁盘中删除它们):
On Linux:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
On macOS:
alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"
On Windows:
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
如果已提交文件:
您需要从提交历史记录中清除它们。运行以下命令从以前的所有提交中删除文件:
On Linux and macOS:
git filter-branch --prune-empty -d ~/tmp/scratch \
--index-filter "git rm --cached -f --ignore-unmatch PATH/TO/FILE" \
--tag-name-filter cat -- --all
On Windows:
git filter-branch --prune-empty -d /tmp/scratch \
--index-filter "git rm --cached -f --ignore-unmatch PATH/TO/FILE" \
--tag-name-filter cat -- --all
(将PATH / TO / FILE替换为实际文件的路径)
Greg在此处的回答中更好地解释了此命令
如果您需要为文件夹而不是文件运行以上命令,请在第二行-r
之后添加一个开关git rm
:
... \
--index-filter "git rm -r --cached -f --ignore-unmatch PATH/TO/FOLDER" \
...
git rm
可以使用多个参数,因此您可以在第二行中添加多个路径:
... \
--index-filter "git rm -r --cached -f --ignore-unmatch FILE1 FILE2 FOLDER1 FOLDER2" \
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句