首页 > 其他分享 >代码仓库迁移pack超过最大限制

代码仓库迁移pack超过最大限制

时间:2024-04-29 20:22:24浏览次数:24  
标签:git 仓库 filter -- 提交 push commit 迁移 pack

背景

需求

  • GitLab仓库迁移到其他服务器的GitLab仓库。
  • 不删除 Git 历史记录

问题

  • 提交报错【我没有权限修改该限制】
    remote: fatal: pack exceeds maximum allowed size (150.00 MiB)
    
    image

采用的迁移方式:GitHub Docs - Duplicating a repository

git clone --bare https://github.com/EXAMPLE-USER/OLD-REPOSITORY.git
cd OLD-REPOSITORY.git
git push --mirror https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git
cd ..
rm -rf OLD-REPOSITORY.git

另外的下面这种迁移方式同样会报错:

# 先删除
git remote rm origin
# 再增加
git remote add origin https://xxx/xxx/xxx.git
# 强制推送
git push -f origin <branch-name>

因为这是服务端 pack 大小限制导致的。

解决

流水账

  1. 使用该方式拆分 commit 提交:Splitting up a large push

    # 1
    git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 10 == 0'
    # 2
    git push REMOTE-NAME <YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAME
    # 3
    git push REMOTE-NAME  --mirror
    
  2. 通过拆分 commit 的方式提交失败,发现某个 commit 提交了 node_modules.zip 大小 209MB

  3. 所以需要删除该文件的所有提交记录(因为有不删除 Git 历史记录的需求)
    参考

    • Github删除某个文件的所有提交记录
    • git怎么删除已经提交的文件 该blog中的命令有误,参考上文。
      git filter-branch --force --index-filter "git rm --cached --ignore-unmatch [文件路径]" --prune-empty --tag-name-filter cat -- --all
      我本地即执行
      git filter-branch --force --index-filter "git rm --cached --ignore-unmatch ./node_modules.zip" --prune-empty --tag-name-filter cat -- --all
  4. 此时 git log --pretty=oneline 查看到因为文件 ./node_modules.zip 的新增而产生的提交(A)前的所有commit ID 和内容都不变,但是该次提交及之后所有提交的 commit ID 都发生变化
    删除该文件的所有提交记录后:

    • 该次提交(A)的 commit 内容减少了新增该文件的变更。【原先:该文件在提交历史中,只在该次提交中发生了变更(新增)】
    • 该次提交(A)之后的 commit 内容无变化,commit ID 全部变了。
    • 该次提交(A)之前的所有 commit 内容及ID无变化。
  5. 删除后,参照第 1 步,继续后续的拆分 commit 提交。

结果

如下图:

  • 新旧仓库
    image
  • 提交(A)变更
    image

参考

标签:git,仓库,filter,--,提交,push,commit,迁移,pack
From: https://www.cnblogs.com/zheyi420/p/18166535

相关文章

  • <BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please en
    环境:weblogic10.3.6jdk1.6 myeclipse10.7今天升级了一下myeclipse到10.7,然后配置weblogic,启动的时候报<BEA-000438><Unabletoloadperformancepack.UsingJavaI/Oinstead.Pleaseensurethatwlntio.dll之前用myeclipse8.5没报过这个问题。后来上网看了一下,是找不到......
  • Docker如何搭建harbor仓库
    3.1:在部署的服务器的docker配置文件添加镜像私服地址1:编辑或创建daemon.json文件vim/etc/docker/daemon.json2:insecure-registries节点通常是不安全的,慎重设置(配置要连接harbor的ip+端口,要是80端口可以不用写),使用的是HTTPS并且有一个CA签名的证书可以在registry-mirrors节......
  • win11迁移linux fedora 40 准备
    前期准备备份重要文件用wiztree+天翼云盘磁盘格式linux对ntfs支持不好,微软没开源只读肯定可以,写就会有bug,于是需要把2块硬盘的数据全部转成ext4拯救者linux驱动https://github.com/johnfanv2/LenovoLegionLinuxlinux虚拟机独显直通https://www.youtube.com/watch?v=g......
  • containerd 配置使用私有镜像仓库 harbor
    前言​当要从非安全的镜像仓库中进行Pull、Push时,会遇到x509:certificatesignedbyunknownauthority错误提示;这是由于镜像仓库是可能是http服务,或者https的证书是自签名的就会出现这个问题。Containerd可以配置为连接到私有镜像仓库,并使用仓库在每个节点上拉取私......
  • new webpack 的 DefinePlugin 与 ProvidePlugin
    一、DefinePluginDefinePlugin允许创建一个在编译时可以配置的全局常量。这可能会对开发模式和生产模式的构建允许不同的行为非常有用。如果在开发构建中,而不在发布构建中执行日志记录,则可以使用全局常量来决定是否记录日志。这就是DefinePlugin的用处,设置它,就可以忘记开发环境......
  • 仓库管理系统(Warehouse Management System,WMS)
    仓库管理系统(WarehouseManagementSystem,简称WMS):一、定义仓库管理系统是一种用于管理仓储业务的信息化系统,它通过数学模型和信息手段对仓库管理的各个环节进行优化和调控,实现物流信息化自动化,优化仓库管理流程,提高存储效率,降低管理成本。二、作用仓库管理系统的主要作用包括:......
  • KVM虚拟机迁移(静态)
    1.查看虚拟机状态,确认关闭状态virshlist--all 2.查看虚拟机文件位置virshdomblklistzabbix3.导出配置文件并查看导出文件virshdumpxmlzabbix>/root/zabbix.xml 4.把刚导出的配置文件传到目的服务制定路径(路径为虚拟机配置文件位置) scpzabbix.xml10.10.7.13......
  • Jetpack Compose(6)——动画
    目录一、低级别动画API1.1animate*AsState1.2Animatable1.3Transition动画1.3.1updateTransition1.3.2createChildTransition1.3.3封装并复用Transition动画1.4remeberInfiniteTransition——无限循环的transition动画1.5小结二、AndroidStudio对Compose动画......
  • pack_sequence和pad_sequence(未整理)
    【pad/packsequence】:https://blog.csdn.net/tcn760/article/details/124982295https://blog.csdn.net/xinjieyuan/article/details/108562360https://zhuanlan.zhihu.com/p/342685890【pad/packsequence处理通过collate_fn结合到dataloader里】https://pytorch.org/docs......
  • 如何查看Vue CLI中webpack的默认配置
    这里使用terser-webpack-plugin举例说明,在VueCLI项目中,terser-webpack-plugin 插件的默认配置通常是隐藏且封装的,因为VueCLI会根据项目需求自动配置webpack。如果你想查看terser-webpack-plugin的默认配置,你可以尝试以下方法:通过检查node_modules/terser-webpack-plugin/di......