git branch - How to clone all remote branches in Git

ID : 72

viewed : 201

Tags : gitgit-branchgit-cloneremote-branchgit

Top 5 Answer for git branch - How to clone all remote branches in Git

vote vote

93

First, clone a remote Git repository and cd into it:

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

Next, look at the local branches in your repository:

$ git branch * master 

But there are other branches hiding in your repository! You can see these using the -a flag:

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

If you just want to take a quick peek at an upstream branch, you can check it out directly:

$ git checkout origin/experimental 

But if you want to work on that branch, you'll need to create a local tracking branch which is done automatically by:

$ git checkout experimental 

and you will see

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

Here, "new branch" simply means that the branch is taken from the index and created locally for you. As the previous line tells you, the branch is being set up to track the remote branch, which usually means the origin/branch_name branch.

Now, if you look at your local branches, this is what you'll see:

$ git branch * experimental   master 

You can actually track more than one remote repository using 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 

At this point, things are getting pretty crazy, so run gitk to see what's going on:

$ gitk --all & 
vote vote

90

If you have many remote branches that you want to fetch at once, do:

git pull --all 

Now you can checkout any branch as you need to, without hitting the remote repository.


Note: This will not create working copies of any non-checked out branches, which is what the question was asking. For that, see

vote vote

75

This Bash script helped me out:

#!/bin/bash for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|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). I think you might still need to do a

git fetch --all git pull --all 

to be sure.

One liner: 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
As usual: test in your setup before copying rm -rf universe as we know it

Credits for one-liner go to user cfi

vote vote

68

Using the --mirror option seems to copy the remote tracking branches properly. However, it sets up the repository as a bare repository, so you have to turn it back into a normal repository afterwards.

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

Reference: Git FAQ: How do I clone a repository with all remotely tracked branches?

vote vote

57

You can easily switch to a branch without using the fancy "git checkout -b somebranch origin/somebranch" syntax. You can do:

git checkout somebranch 

Git will automatically do the right thing:

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

Git will check whether a branch with the same name exists in exactly one remote, and if it does, it tracks it the same way as if you had explicitly specified that it's a remote branch. From the git-checkout man page of Git 1.8.2.1:

If <branch> is not found but there does exist a tracking branch in exactly one remote (call it <remote>) with a matching name, treat as equivalent to

$ git checkout -b <branch> --track <remote>/<branch> 

Top 3 video Explaining git branch - How to clone all remote branches in Git

Related QUESTION?