惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
博客园 - 司徒正美
博客园 - 叶小钗
T
Tailwind CSS Blog
博客园 - Franky
V
V2EX
有赞技术团队
有赞技术团队
美团技术团队
雷峰网
雷峰网
爱范儿
爱范儿
Jina AI
Jina AI
D
DataBreaches.Net
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell

Oskyla 烹茶室

修复 Joplin on KDE 菜单栏显示问题 Copy Fail:Linux 内核 2017 年至今的高危漏洞(附临时缓解方案) | CVE-2026-31431 Hermes Agent — 在 K3s / K8s 中运行指南 在 K3s 节点上安装并使用 nerdctl Mouser:轻量开源的罗技鼠标驱动替代方案 Claude Opus 4.7:优缺点与评测信息汇总 openFuyao NPU-Operator故障排查 openFuyao 2603 共测测试报告 openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决 ceph mon Operation not permitted 问题解决 Ascend 310P + openFuyao + NPU-Operator 故障排查 KDE Plasma6 禁用全局菜单,恢复正常应用菜单 终极指南:在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书 Windows 配置 Claude Code 解决 settings.json 不生效 Windows 配置 Claude Code 全流程 2025-12-31 | 年终总结 AI 生图精品提示词|第二期:城市星球 AI 生图精品提示词|第一期 Kubernetes kubectl --raw 使用指南 彻底解决阿里云和 tailscale 冲突 2025-10-21 | 沉淀思维 macOS 单独为鼠标或触控板开启自然滚动 2025-10-16 | 负载高低 2025-10-15 | 睡眠周期 2025-10-14 | 转换情绪与独立观点 go 拉取 gitcode.com 私有 mod Git 将某个文件恢复到其他分支的状态 SSH 通过跳板机连接 lxc 使用 chronyc 构建 ntp 服务 2025-10-13 | 独立思考于未来能源
git 拉取所有 branch 和 tag 到本地并推送到远程
Tianlun Song · 2025-04-07 · via Oskyla 烹茶室

本文 首发于 🌱 煎茶转载 请注明 来源

需要一个正常的可工作仓库,而不是裸镜像仓库。以下是在不使用 --mirror 选项的情况下,拉取所有分支和标签并推送到新仓库的步骤:

步骤 1: 克隆源仓库

首先,正常克隆源仓库:

# 克隆源仓库(默认只会检出 main 或 master 分支)
git clone <源仓库URL> repo-copy
cd repo-copy

步骤 2: 获取所有远程分支

默认情况下,git clone 只会创建和检出默认分支。你需要额外步骤来获取和创建所有远程分支的本地跟踪:

# 获取所有远程分支的信息
git fetch --all

# 为每个远程分支创建本地跟踪分支
git branch -r | grep -v '\->' | while read remote; do
    git branch --track "${remote#origin/}" "$remote"
done

# 拉取所有分支的最新更改
git fetch --all
git pull --all

步骤 3: 获取所有标签

确保所有标签也被获取:

# 拉取所有标签
git fetch --tags

步骤 4: 添加目标远程仓库并推送所有内容

# 添加目标远程仓库
git remote add target <目标仓库URL>

# 推送所有分支到目标仓库
git push target --all

# 推送所有标签到目标仓库
git push target --tags

一键完成脚本

下面是一个完整的脚本,可以一键完成整个过程:

# 克隆源仓库
git clone <源仓库URL> repo-copy
cd repo-copy

# 获取所有远程分支信息
git fetch --all

# 为远程分支创建本地跟踪分支
git branch -r | grep -v '\->' | while read remote; do
    git branch --track "${remote#origin/}" "$remote"
done

# 拉取所有分支和标签的最新更改
git fetch --all
git pull --all
git fetch --tags

# 添加目标远程仓库
git remote add target <目标仓库URL>

# 推送所有内容到目标仓库
git push target --all
git push target --tags

echo "所有分支和标签已成功推送到目标仓库"

简化的替代方法(适用于较新版本的 Git)

在较新版本的 Git 中,你可以使用以下简化命令:

# 克隆仓库
git clone <源仓库URL> repo-copy
cd repo-copy

# 获取所有分支并设置本地跟踪
git fetch origin
git checkout -b local_branch origin/remote_branch  # 对需要的每个远程分支重复此命令

# 获取所有标签
git fetch --tags

# 添加新远程仓库并推送
git remote add target <目标仓库URL>
git push target --all
git push target --tags

注意事项

  1. 这些命令会在本地创建所有远程分支的跟踪分支,使你能够在它们之间切换
  2. 如果仓库很大或分支很多,这个过程可能需要一些时间
  3. 确保你有足够的磁盘空间来存储完整的仓库及其历史记录
  4. 默认情况下,这不会推送任何 Git LFS 对象,如果你使用 Git LFS,可能需要额外的步骤