如何在Git中克隆单个分支?

How do I clone a single branch in Git?

我有一个名为"骨架"的本地Git存储库,用于存储项目骨架。它有几个分支,适用于不同类型的项目:

1
2
3
4
5
casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

如果我想签出一个新项目的主分支,我可以

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

一切都是我想要的。具体来说,新的主分支指向骨架主分支,我可以推拉以移动对基本项目设置的更改。

但是,如果我想克隆另一个分支,则不起作用。我无法得到它,所以我只能拉我想要的分支,例如rails分支,然后新存储库有一个master分支,默认情况下,它会推到骨架存储库的rails分支并从中拉出。

有没有一个好的方法来做这件事?或者,也许这不是Git想要我构建东西的方式,我当然愿意这样做。也许我应该有多个存储库,RubyonRails骨架存储库跟踪主骨架存储库?以及克隆RubyonRails骨架存储库的任何单个项目。


注意:git1.7.10(2012年4月)实际上只允许克隆一个分支:

1
2
3
4
5
# clone only the remote primary HEAD (default: origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

你可以在t5500-fetch-pack.sh中看到:

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

托布评论说:

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

而且自Git1.9.0(2014年2月)以来,Shallow Clones支持数据传输(push/pull),因此该选项现在更加有用。更多内容见"EDOCX1(浅克隆)是否比它所显示的更有用?".

"撤消"浅克隆在"将浅克隆转换为完全克隆"(Git 1.8.3+)中有详细说明。

1
2
3
4
5
6
# 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

正如克里斯的评论:

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

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


一种方法是执行以下操作。

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

其中,branch_name是您选择的分支,"/your/folder"是该分支的目标文件夹。这确实会带来其他分支机构,让你有机会前后合并。现在,从git 1.7.10开始,现在可以这样做了

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


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

1
2
3
4
5
mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

这种方法的优点是,随后的git pullgit fetch调用也只会下载请求的分支。


你可以尝试一下长途跋涉:

1
2
3
4
5
6
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存储库。
  • 将原始存储库添加为远程源站。
  • 只从称为源站的远程获取所需的分支。
  • 创建并签出一个新分支,该分支设置为跟踪刚刚克隆的源分支。

希望这会像你所追求的那样。


您可以使用以下命令执行此操作:

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


从Git克隆手册页:

--single-branch是你克隆期间的朋友。记住使用--branch 或只克隆远程主头(默认为master)

始终记住执行ctrl+f5以读取新的源,而不是从缓存读取源:—)(我很长时间不知道这个选项。)


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

只需输入URL和分支名称。


只克隆一个分支。这是最简单的方法:

1
$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git


要克隆特定分支,可以执行以下操作:

埃多克斯1〔13〕


要克隆没有公钥的Git分支,请使用以下命令:

1
git clone -b <branch> <Git repository URL or clone URL you get from Git repository>


有点晚了,但我想添加我用来解决这个问题的解决方案。我在这里找到了解决方案。

无论如何,这个问题似乎是在问"如何从另一个回购的分支机构启动一个新项目?"

为此,我使用的解决方案将是首先在Github或任何地方创建一个新的回购。这将作为新项目的报告。

在本地计算机上,导航到具有要用作新项目模板的分支的项目。

运行命令:

1
git push https://github.com/accountname/new-repo.git +old_branch:master

这样做的目的是将旧的回购分支推到新的回购,使其成为新回购的主分支。

然后,您只需将新的repo克隆到新项目的本地目录中,就可以在旧的分支开始新的项目。


打开命令。

cd folder_name(输入克隆分支的路径)

只有一个命令:

1
git clone url_of_projecturltoclone -b branch_name


可以分两步完成

  • 克隆存储库

    • 埃多克斯1〔9〕
  • 签出你想要的分支

    • 埃多克斯1〔10〕

  • 打开git bash shell。
  • 在文件系统中创建一个要签出的目录。
    • $mkdir功能开发分支
  • 将目录更改为功能"开发分支文件夹"。
    • $CD功能开发分支
  • 使用外部克隆URL克隆存储库。
    • $git克隆https://someurl.repositoryname.git
  • 克隆后,将目录更改为Created RepositoryName。
    • $cd/存储库名称
  • 看看那家分店。
    • $git结帐