在复制Git存储库时,使用git lfs migrate将其迁移到GIT-LSF
首先
Git真的很难,总是不知道该怎么做而苦恼。
因为在工作中需要进行复制到另一个存储库的操作,但遇到了问题,所以我将调查结果总结起来。
我想要将源存储库全部复制到GitHub存储库(包括提交信息和标签)。
-
- コピー元リポジトリにバイナリファイルが入っているがLSFを使用していな状態でCommtされている。
-
- コピー先リポジトリはLSFが使える。
- 「git clone –mirror」しただけではリポジトリのコピーが出来ない。(100MB以上のファイルはCommitできない旨のエラーが発生してCommitできない。)
通过使用「git lfs migrate」命令将所需的二进制文件重新注册到LSF中,可以实现对仓库的复制。
前提 tí) – precondition
-
- コピー元リポジトリからコピー先のGitHubリポジトリへ丸ごとコピーされます。
-
- Commit情報やtagも反映されます。
- この操作をするとコピー元の情報で上書きされます。(注意!!)
以下是一个例子:
-
- コピー元: https://XXXXXXXX/git/XXXXXXXXXXX/hehehe.git
コピー先: https://github.com/XXXXXXXXXXXXXXXXXX/new-hehehe.git
请参考下列资料
执行
我会在合适的地方创建一个名为work的文件夹。
使用”–mirror”选项克隆git库从源文件。
$ git clone --mirror https://XXXXXXXX/git/XXXXXXXXXXX/hehehe.git
Cloning into bare repository 'hehehe.git'...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 32 (delta 10), reused 0 (delta 0)19.00 KiB/s
Unpacking objects: 100% (32/32), 140.21 MiB | 415.00 KiB/s, done.
切换到克隆的目录中。
$ cd hehehe.git/
通过 git lfs migrate info 进行预先调查
进入克隆的[存储库名称].git文件夹后,调查当前状态。检查要在LSF中注册的文件扩展名。
$ git lfs migrate info --everything
migrate: Sorting commits: ..., done.
migrate: Examining commits: 100% (5/5), done.
*.weights 157 MB 1/1 files(s) 100% <<===これをLSFに移行
*.py 23 KB 6/7 files(s) 86%
*.png 15 KB 1/1 files(s) 100% <<===これをLSFに移行
*.pyc 11 KB 3/3 files(s) 100%
*.md 2.9 KB 3/3 files(s) 100%
执行 git lfs migrate import。
使用「–include」参数指定要迁移到Git LFS的文件类型,执行git lfs migrate import命令。
$ git lfs migrate import --include="*.weights,*.png,*.jpg" --everything
migrate: Sorting commits: ..., done.
migrate: Rewriting commits: 100% (5/5), done.
master XXXXXXXXXXXXXXXXXXXX -> XXXXXXXXXXXXXXXXXXXXXXXXXXX
migrate: Updating refs: ..., done.
为保持整合性,整理本地文件缓存。
$ git reflog expire --expire-unreachable=now --all && git gc --prune=now
Enumerating objects: 33, done.
Counting objects: 100% (33/33), done.
Delta compression using up to 8 threads
Compressing objects: 100% (25/25), done.
Writing objects: 100% (33/33), done.
Building bitmaps: 100% (5/5), done.
Total 33 (delta 10), reused 20 (delta 6), pack-reused 0
使用 –mirror 参数将本地仓库推送到 GitHub.com
$ git push --mirror https://github.com/XXXXXXXXXXXXXXXXXX/new-hehehe.git
Uploading LFS objects: 100% (2/2), 157 MB | 0 B/s, done.
Enumerating objects: 33, done.
Writing objects: 100% (33/33), 13.64 KiB | 13.64 MiB/s, done.
Total 33 (delta 0), reused 0 (delta 0), pack-reused 33
remote: Resolving deltas: 100% (10/10), done.
To https://github.com/XXXXXXXXXXXXXXXXXX/new-hehehe.git
+ XXXXXXX...XXXXXXXX master -> master (forced update)
我会检查GitHub仓库,确保所有更改都已反映出来。
因为在存储库的根目录中添加了 .gitattributes 文件,所以要确保通过–inlude指定的文件名和模式能够正常记录。
历史记录也应该被修改,以便.gitattributes被认为是最早提交的。