乐闻世界logo
搜索文章和话题

Git 如何克隆所有远程分支?

2个答案

1
2

首先,当您克隆一个Git仓库时,默认情况下,git clone 命令将克隆远程仓库中的所有分支,但是在本地只会创建一个跟踪远程仓库origin/master分支的分支,即master分支。这意味着您的本地仓库中已经包含了远程仓库中所有分支的信息,但是为了切换到这些远程分支,您需要在本地创建相对应的跟踪分支。

如果您需要在本地显式地创建并切换到所有远程分支的跟踪分支,可以按照以下步骤操作:

  1. 首先克隆远程仓库:

    shell
    git clone [remote-url]

    这样操作会创建所有远程分支的引用,在.git/refs/remotes/origin/目录下。

  2. 接下来,您可以使用git branch -a 查看所有分支,包括远程分支。

  3. 然后,对于每个远程分支,您可以使用以下命令创建本地分支并建立跟踪关系:

    shell
    git checkout -b [branch-name] origin/[branch-name]

    这个命令会创建一个新的本地分支[branch-name],并设置它跟踪对应的远程分支。

例如,如果远程仓库有一个名为feature的分支,我想要在本地创建并切换到这个分支,我将会执行:

shell
git checkout -b feature origin/feature

如果您希望自动化这个过程,可以使用下面的脚本在克隆后创建并切换到所有远程分支的本地跟踪分支:

shell
# 克隆仓库 git clone [remote-url] # 进入仓库目录 cd [repository-name] # 遍历所有远程分支并创建本地跟踪分支 for branch in `git branch -r | grep -v '\->'`; do if [ "origin/HEAD" != "$branch" ]; then git checkout -b `echo $branch | sed 's/origin\///'` $branch fi done # 切换回主分支 git checkout master

这段脚本会克隆远程仓库,并为除了HEAD以外的所有远程分支创建本地分支,然后切换回主分支。注意,您需要替换[remote-url][repository-name]为实际的远程仓库URL和仓库名称。

2024年6月29日 12:07 回复

使用该--mirror选项似乎可以正确复制remote跟踪分支。但是,它将存储库设置为裸存储库,因此您必须随后将其恢复为普通存储库。

shell
git clone --mirror path/to/original path/to/dest/.git cd path/to/dest git config --bool core.bare false git checkout anybranch

参考:Git 常见问题解答:如何克隆包含所有远程跟踪分支的存储库?

2024年6月29日 12:07 回复

你的答案