我在~/local_repo有一个本地Git存储库。它有几个分支:

$ git branch
* master
  rails
  c
  c++

要克隆本地存储库,我做:

$ git clone ~/local_repo new_repo
Initialized empty Git repository in /home/username/new_repo/.git/

new_repo master分支指向local_repo master分支,我可以推/拉。

但我无法克隆另一个分支。我只想拉我想要的分支(例如rails),这样新的存储库就有一个主分支,默认情况下,它可以推入和拉出local_repo的rails分支。我如何实现这一点,或者也许类似于local_repo跟踪主local_repo?


当前回答

让我们以flask repo为例。除master外,它还有3个分支。让我们签出1.1。X远程分支

克隆git回购

git clone https://github.com/pallets/flask

CD进入回购。

cd flask

获取远程分支1.1.x

git fetch origin 1.1.x

签出分支

git checkout 1.1.x

您将切换到分支1.1。X,它将跟踪远程1.1。x分支。

其他回答

这应该可以

git clone --single-branch <branchname> <remote-repo-url>
git clone --branch <branchname> <remote-repo-url>

使用Git版本1.7.3.1(在Windows上),下面是我所做的($BRANCH是我想要签出的分支的名称,$REMOTE_REPO是我想要克隆的远程存储库的URL):

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

这种方法的优点是后续的git pull(或git fetch)调用也会下载所请求的分支。

你可以使用这个命令git单个分支和重命名文件夹,如果你想保持分支独立

git clone -b [branch-name] --single-branch [url]  [folder_name]

例子

git clone -b mybranch --single-branch git://github/repository.git  project_mybranch
git clone --branch <branchname> <remote-repo-url>

or

git clone -b <branchname> <remote-repo-url>

你可以试试长篇大论的方式:

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

它的作用是:

创建并初始化一个空Git存储库。 将原始存储库添加为名为origin的远程存储库。 只从称为origin的远端获取所需的分支。 创建并签出一个新分支,该分支被设置为跟踪刚刚克隆的源分支。

希望这是你所追求的东西。