How to clone a single branch in git?

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I have a local git repository called 'skeleton' that I use for storing project skeletons. It has a few branches, for different kinds of projects:

casey@agave [~/Projects/skeleton] git branch * master   rails   c   c++

If I want to check out the master branch for a new project, I can do

casey@agave [~/Projects] git clone skeleton new Initialized empty Git repository in /Users/casey/Projects/new/.git/

and everything is how I want it. Specifically, the new master branch points to skeleton master branch, and I can push and pull to move around changes to the basic project setup.

What doesn't work, however, is if I want to clone another branch. I can't get it so that I only pull the branch I want, for instance the rails branch, and then the new repo has a 'master' branch that pushes to and pulls from the skeleton repo's 'rails' branch, by default.

Is there a good way to go about doing this? Or, maybe this isn't the way that git wants me to structure things, and I'm certainly open to that. Perhaps I should have multiple repos, with the rails skeleton repo tracking the master skeleton repo? And any individual project cloning the rails skeleton repo.

Any thoughts and suggestions are appreciated!

回答1:

Note: the git1.7.10 (April 2012) actually allows you to clone only one branch:

# clone only the remote primary HEAD (default: origin/master) git clone --single-branch  as in: git clone <url> --branch <branch> --single-branch [<folder>]

You can see it in t5500-fetch-pack.sh:

test_expect_success 'single branch clone' '   git clone --single-branch "file://$(pwd)/." singlebranch '

Tobu comments that:

This is implicit when doing a shallow clone.
This makes git clone --depth 1 the easiest way to save bandwidth.

And since Git 1.9.0 (February 2014), shallow clones support data transfer (push/pull), so that option is even more useful now.
See more at "Is git clone --depth 1 (shallow clone) more useful than it makes out?".


"Undoing" a shallow clone is detailed at "Convert shallow clone to full clone" (git 1.8.3+)

# unshallow the current branch git fetch --unshallow  # for getting back all the branches (see Peter Cordes' comment) git config remote.origin.fetch refs/heads/*:refs/remotes/origin/* git fetch --unshallow

As Chris comments:

the magic line for getting missing branches to reverse --single-branch is (git v2.1.4):

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* git fetch --unshallow  


回答2:

One way is to execute the following

git clone user@git-server:project_name.git -b branch_name /your/folder

Where branch_name is the branch of your choice and "/your/folder" is the destination folder for that branch. It's true that this will bring other branches giving you the opportunity to merge back and forth. Now, starting with GIT 1.7.10, you can now do this

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder


回答3:

Using git version 1.7.3.1 (on Windows), here's what I do ($BRANCH is the name of the branch I want to checkout and $REMOTE_REPO is the URL of the remote repository I want to clone from):

mkdir $BRANCH cd $BRANCH git init git remote add -t $BRANCH -f origin $REMOTE_REPO git checkout $BRANCH

The advantage of this approach is that subsequent git pull (or git fetch) calls will also just download the requested branch.



回答4:

You can try the long winded way:

mkdir newrepo.git cd newrepo.git git init git remote add origin file:///path/to/original  git fetch origin branchiwant:refs/remotes/origin/branchiwant git checkout -b branchiwant --track origin/branchiwant

What this does is:

  • Create and init empty git repository.
  • Adds the original repository as a remote called origin.
  • Fetches only the branch you require from the remote called origin.
  • Creates and checks out a new brach that is setup to track the source branch you just cloned.

Hopefully that will be something like what you are after.



回答5:

from git-clone man page

--single-branch is your friend during clone
remember to use with --branch <branch name> or only remote primary HEAD will be cloned (master by default)

always remember to do CTRL+F5 to read fresh source, not the one from cache :-)
(I didn't so didn't know about this option for long time)



回答6:

You can do it by using the below command:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in


回答7:

git clone <url> --branch <branch> --single-branch

Just put url and branch name



回答8:

Can be done in 2 steps

  1. Clone the repository

    • git clone <http url>
  2. Checkout the branch you want

    • git checkout $BranchName


回答9:

After cloning was complete, I had to enter git submodule update --init --recursive to download all submodules



回答10:

open the cmd
cd folder_name (Enter the path where to clone the branch) Just a command

git clone url_of_projecturltoclone -b branch_name


回答11:

for cloning branch of git you don't have public key the use this

git clone -b <branch> <git repo url or clone url you get from git repo>


回答12:

Clone only one branch this is the most easy way:

$ git clone -b BRANCH_NAME --single-branch git@bitbucket.org:___/PROJECTNAME.git


回答13:

  1. Open Git bash shell.
  2. Create an directory in your file system where you want to checkout.
    • $ mkdir Feature
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!