You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅裸克隆或镜像仓库的特定多个分支

如何仅裸克隆或镜像仓库的特定多个分支

好问题!Git 本身没有直接支持「裸克隆指定多个分支」的原生单命令,但我们可以通过几个简单的步骤组合来实现这个需求,下面分享两种实用的方法:

方法一:先完整裸克隆,再清理不需要的分支

这种方法适合你知道要排除哪些分支的场景,操作起来很直接:

  1. 首先完整裸克隆原仓库:
git clone --bare https://github.com/EXAMPLE-USER/OLD-REPOSITORY.git
cd OLD-REPOSITORY.git
  1. 查看所有分支,确认要保留的目标分支(比如我们要保留 mainv2.0):
git branch -a
  1. 批量删除不需要的远程分支引用(注意:这里的操作是删除裸仓库本地的分支引用,不会影响原仓库):
    • Linux/macOS 环境下执行:
    git for-each-ref --format='%(refname:short)' refs/heads | grep -v -E '^(main|v2.0)$' | xargs -I {} git update-ref -d refs/heads/{}
    
    • Windows PowerShell 环境下执行:
    git for-each-ref --format='%(refname:short)' refs/heads | Where-Object { $_ -notin @('main', 'v2.0') } | ForEach-Object { git update-ref -d refs/heads/$_ }
    
  2. 最后把清理后的裸仓库推送到新的目标仓库,完成镜像:
git push --mirror https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git

方法二:从空裸仓库开始,逐个拉取指定分支

这种方法适合你明确知道要保留哪些分支的场景,更轻量化,不需要先拉取全部分支:

  1. 创建一个空的裸仓库,并进入该目录:
git init --bare target-repo.git
cd target-repo.git
  1. 添加原仓库作为远程源:
git remote add source https://github.com/EXAMPLE-USER/OLD-REPOSITORY.git
  1. 拉取你需要的每个分支到本地裸仓库的分支引用下(比如拉取 mainv2.0):
git fetch source main:refs/heads/main
git fetch source v2.0:refs/heads/v2.0
  1. (可选)如果需要保留原仓库的标签,也可以单独拉取:
git fetch source refs/tags/*:refs/tags/*
  1. 最后把这个自定义的裸仓库推送到新的目标仓库:
git remote add target https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git
git push --mirror target

小提示

  • 如果你需要定期同步这些指定分支,可以把拉取/推送的命令写成脚本,定时运行即可
  • 操作前建议先在测试环境验证,避免误删重要分支
  • 裸仓库的分支引用都存在 refs/heads/ 目录下,你也可以直接查看该目录文件确认分支情况:ls refs/heads/

火山引擎 最新活动