我有一个名为“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
rails
master
有什么好方法可以做到这一点吗?或者,也许这不是 Git 想要我组织事物的方式,我当然对此持开放态度。也许我应该有多个存储库,Ruby on Rails 骨架存储库跟踪主骨架存储库?以及任何克隆 Ruby on Rails 骨架存储库的单个项目。
注意: 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,并且不引用自身克隆的分支)
<url>
你可以看到它t5500-fetch- pack.sh:
t5500-fetch- pack.sh
test_expect_success 'single branch clone' ' git clone --single-branch "file://$(pwd)/." singlebranch '
这在进行shallow clone时是隐含的。 这是git clone --depth 1节省带宽的最简单方法。
git clone --depth 1
从 Git 1.9.0(2014 年 2 月)开始,shallow clone支持数据传输(推/拉),因此该选项现在更加有用。 更多内容请参见“ (浅克隆)是否git clone --depth1比它想象的更有用?
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):
--single-branch
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* git fetch --unshallow
在 Git 2.26(2020 年第一季度)中,“ git clone --recurse-submodules --single-branch” 现在在克隆子模块时使用相同的单分支选项 。
git clone --recurse-submodules --single-branch
请参阅Emily Shaffer ( ) 的提交 132f600和提交 4731957(2020 年 2 月 21 日)。(由Junio C Hamano 合并 – --在提交 b22db26中,2020 年 3 月 5 日)nasamuffin gitster
nasamuffin
gitster
clone: 在 –recurse-submodules 期间通过 –single-branch 签字人:Emily Shaffer 签字人:Jeff King 以前,执行“ git clone --recurse-submodules --single- branch”会导致子模块克隆所有分支,即使超级项目只克隆了一个分支。 管道--single-branch通过子模块帮助框架,稍后使其成为“ clone”。
clone: 在 –recurse-submodules 期间通过 –single-branch
clone
签字人:Emily Shaffer 签字人:Jeff King
以前,执行“ git clone --recurse-submodules --single- branch”会导致子模块克隆所有分支,即使超级项目只克隆了一个分支。
git clone --recurse-submodules --single- branch
管道--single-branch通过子模块帮助框架,稍后使其成为“ clone”。