代码之家  ›  专栏  ›  技术社区  ›  Peter Coulton

如何克隆所有远程分支?

  •  4735
  • Peter Coulton  · 技术社区  · 17 年前

    我的 master development 在上远程跟踪分支 GitHub .如何克隆这两个分支?

    48 回复  |  直到 17 年前
        1
  •  21
  •   Tony Barganski    4 年前

    首先,克隆一个遥控器 Git 存储库和 cd 进入其中:

    $ git clone git://example.com/myproject
    $ cd myproject
    

    接下来,查看存储库中的本地分支:

    $ git branch
    * master
    

    但是,您的存储库中还隐藏着其他分支!使用 -a 标志:

    $ git branch -a
    * master
      remotes/origin/HEAD
      remotes/origin/master
      remotes/origin/v1.0-stable
      remotes/origin/experimental
    

    要快速查看上游分支,请直接查看:

    $ git checkout origin/experimental
    

    要处理该分支,请创建一个本地跟踪分支,该分支由以下人员自动完成:

    $ git checkout experimental
    
    Branch experimental set up to track remote branch experimental from origin.
    Switched to a new branch 'experimental'
    

    在这里,“新分支”仅仅意味着该分支是从索引中提取并在本地为您创建的。作为 上一次的 行告诉您,正在设置分支以跟踪远程分支,这通常意味着origin/branch_name分支。

    您的本地分支机构现在应该显示:

    $ git branch
    * experimental
      master
    

    您可以使用以下命令跟踪多个远程存储库 git remote :

    $ git remote add win32 git://example.com/users/joe/myproject-win32-port
    $ git branch -a
    * master
      remotes/origin/HEAD
      remotes/origin/master
      remotes/origin/v1.0-stable
      remotes/origin/experimental
      remotes/win32/master
      remotes/win32/new-widgets
    

    在这一点上,事情变得非常疯狂,所以赶紧跑吧 gitk 看看发生了什么:

    $ gitk --all &
    
        2
  •  12
  •   Devin Rhode    4 年前

    如果您有多个远程分支要同时获取,请执行以下操作:

    git pull --all
    

    现在,您可以根据需要签出任何分支,而无需访问远程存储库。


    注: 这不会创建任何未签出分支的工作副本,而这正是问题所问的。对此,请参见

        3
  •  11
  •   Peter Mortensen Pieter Jan Bonestroo    4 年前

    Bash 脚本帮了我:

    #!/bin/bash
    for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
        git branch --track "${branch##*/}" "$branch"
    done
    

    它将为所有远程分支创建跟踪分支,但主分支除外(您可能从原始的clone命令中获得了主分支)。我想你可能还需要做一个

    git fetch --all
    git pull --all
    

    当然。

    俏皮话 : git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
    像往常一样:在复制我们所知道的rm-rf宇宙之前,在您的设置中进行测试

    一个班轮的积分归用户cfi所有

    推荐文章