clone & push all remote branches with git

本文提供了一个简洁的Shell脚本,用于从Git仓库中克隆所有远程分支,并将这些分支推送到本地及指定URL,包括跳过master分支的克隆和推送过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Assuming you have a GIT repository with many branches, it might be little daunting to checkout all the branches as local. This question was also asked in StackOverflow here. This nifty shell script does the job to clone all remote branches locally.


for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do git branch --track ${branch##*/} $branch; done


It will create tracking branches for all remote branches, except master (which you probably got from the original clone command). You might still need to do a -


git fetch --all 
git pull --all


To push all the branches including master -


push to another url
git remote add ALIAS USERNAME@IP-ADDRESS:/PATH/REPO.git
git push ALIAS --all 


push to origin url
git push --all


http://thoughtpad.cs3.in/2011/06/13/clone-push-all-remote-branches-with-git/
### 使用 Git SVN 克隆并迁移 SVN 仓库 为了从 SVN 仓库迁移到 Git,可以使用 `git svn clone` 命令。以下是详细说明: #### 确保环境准备 在开始迁移之前,需要确保安装了 Gitgit-svn 工具,并且版本兼容[^2]。可以通过以下命令检查环境是否正确配置: ```bash java -jar svn-migration-scripts.jar verify ``` 此命令会验证相关工具的版本是否符合要求。 #### 创建 authors.txt 文件 authors.txt 文件用于将 SVN 用户名映射到 Git 用户名和电子邮件地址。如果未提供此文件,Git 将保留原始 SVN 用户名而不进行转换。可以通过以下方式生成或手动创建该文件: ```bash svn log --xml | grep -E 'author|date' | awk -F '[<>]' '{print $3}' | sort | uniq > authors.txt ``` 然后编辑 authors.txt 文件,格式如下: ``` svn_user = Git User Name <user@example.com> ``` #### 执行克隆操作 使用 `git svn clone` 命令克隆 SVN 仓库。完整的命令格式为: ```bash git svn clone --stdlayout --authors-file=authors.txt <SVN_URL> <destination_folder> ``` - `--stdlayout`:假设 SVN 仓库使用标准布局(即 trunk、branches、tags 目录)。 - `--authors-file`:指定 authors.txt 文件路径。 - `<SVN_URL>`:目标 SVN 仓库的 URL。 - `<destination_folder>`:本地存储克隆结果的目录。 例如: ```bash git svn clone --stdlayout --authors-file=authors.txt https://example.com/svn/repo my_git_repo ``` #### 转换为纯 Git 仓库 克隆完成后,需要将仓库从混合模式转换为纯 Git 模式。执行以下命令: ```bash cd my_git_repo git remote rm origin git gc --aggressive --prune ``` #### 推送至远程 Git 仓库 最后,将本地 Git 仓库推送到新的远程 Git 仓库: ```bash git remote add origin https://example.com/git/repo.git git push -u origin --all git push -u origin --tags ``` ### 注意事项 - 如果 SVN 仓库不遵循标准布局,需调整 `--stdlayout` 参数或使用自定义布局选项。 - 在迁移过程中,可能需要处理冲突或特殊字符问题,建议提前备份数据[^1]。 ```python # 示例 Python 脚本(可选) import subprocess def migrate_svn_to_git(svn_url, destination_folder, authors_file): subprocess.run(['git', 'svn', 'clone', '--stdlayout', '--authors-file=' + authors_file, svn_url, destination_folder], check=True) subprocess.run(['git', 'remote', 'rm', 'origin'], cwd=destination_folder, check=True) subprocess.run(['git', 'gc', '--aggressive', '--prune'], cwd=destination_folder, check=True) # 调用示例 migrate_svn_to_git('https://example.com/svn/repo', 'my_git_repo', 'authors.txt') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值