小编典典

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

all

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

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

如果我想检查一个新项目的主分支,我可以这样做

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

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

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

有什么好方法可以做到这一点吗?或者,也许这不是 Git 想要我组织事物的方式,我当然对此持开放态度。也许我应该有多个存储库,Ruby on Rails
骨架存储库跟踪主骨架存储库?以及任何克隆 Ruby on Rails 骨架存储库的单个项目。


阅读 155

收藏
2022-02-28

共1个答案

小编典典

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

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

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

<url>如果是远程存储库,则为 URL,并且不引用自身克隆的分支)

你可以看到它t5500-fetch- pack.sh

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

这在进行shallow clone时是隐含的。
这是git clone --depth 1节省带宽的最简单方法。

从 Git 1.9.0(2014 年 2 月)开始,shallow clone支持数据传输(推/拉),因此该选项现在更加有用。
更多内容请参见“ (浅克隆)是否git clone --depth1比它想象的更有用?


“撤消”shallow clone在“将shallow clone转换为完full clone”(git1.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

让丢失的分支反转的神奇线--single-branch是(git v2.1.4):

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

在 Git 2.26(2020 年第一季度)中,“ git clone --recurse-submodules --single-branch
现在在克隆子模块时使用相同的单分支选项

请参阅Emily Shaffer ( ) 的提交
132f600
提交
4731957
(2020
年 2 月 21 日。(由Junio C Hamano 合并 –
--提交
b22db26
中,2020
年 3 月 5 日)nasamuffin
gitster

clone:
在 –recurse-submodules 期间通过 –single-branch

签字人:Emily Shaffer
签字人:Jeff King

以前,执行“ git clone --recurse-submodules --single- branch”会导致子模块克隆所有分支,即使超级项目只克隆了一个分支。

管道--single-branch通过子模块帮助框架,稍后使其成为“ clone”。

2022-02-28