克隆远程存储库后,它不会通过-a选项显示任何远程分支.可能是什么问题呢?怎么调试呢?在此片段中,未显示两个远程分支:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
Run Code Online (Sandbox Code Playgroud)
在另一台机器上尝试相同的命令,它运作良好:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
Run Code Online (Sandbox Code Playgroud)
尝试克隆另一个回购,它运作良好.虽然我可以在这台机器上再试一次,但最好知道什么是错的.
任何建议或提示都将受到欢迎.
编辑:答案摘要:从git版本1.8.3.2开始,需要同时使用"--depth"和"--no-single-branch"来获得与以前相同的行为.这被视为错误修复.
如何浅登克隆git存储库,以便我的克隆只包含1个历史记录项,并在特定分支上启动?
我知道如何做一个浅层克隆:
git clone --depth 1 https://path/to/myrepo.git
Run Code Online (Sandbox Code Playgroud)
但不能在特定分支上启动克隆.
git continuous-integration git-clone shallow-clone git-branch
请注意,使用--depth=1参数会阻止您将项目推送到新的存储库.
有关详细信息,请参阅:更改Git远程URL后"远程拒绝"(不允许浅更新)
是否可以在存储库中浅层克隆特定提交,即深度为1?就像是
git clone http://myrepo.git 728a4d --depth 1
Run Code Online (Sandbox Code Playgroud)
获取存储库状态,因为它是在SHA提交时728a4d...?
我们的动机是避免必须克隆整个存储库,然后检查特定的提交,当我们只对该特定提交的存储库状态感兴趣时.
我们使用git来分发操作系统并使其保持最新状态.我们无法分发完整的存储库,因为它太大(> 2GB),所以我们一直在使用浅克隆(~300M).然而,最近从浅层克隆中获取时,它现在无法有效地获取整个> 2GB存储库.这对于部署而言是无法浪费的带宽浪费.
git文档说你无法从浅存储库中获取,尽管这绝对不是真的.是否有任何变通方法git clone --depth 1可以获取它的变化?或者其他一些策略是保持分布大小尽可能小,同时让git需要进行更新所有位?
我没有成功尝试克隆--depth 20,看它是否会更有效地升级,这是行不通的.我也看了http://git-scm.com/docs/git-bundle,但这似乎创造了巨大的捆绑.
由于大量的提交,我有一个庞大的git repo,所以根据这里的建议我创建了一个浅层克隆.我已经对这个新的本地仓库进行了更改,现在我想在Github上推动我的起源(然后再到我在Heroku上的升级和生产遥控器).也许有一天我会学习阅读文档:
git clone --depth命令选项说
--depth创建一个浅层克隆,其历史记录被截断为指定的修订数.浅存储库有许多限制(您不能克隆或获取它,也不能从中推送或插入它)
那么......我如何从这种情况中解脱出来并将我的代码推送到Github?
我正在尝试做什么:测试来自github的pull请求.我想在本地将pull请求合并到master中并对结果运行一些测试.由于存储库很大,我做了一个浅层克隆.
为了能够进行合并,我获取越来越多的提交(git fetch增加--depth),直到我merge-commit掌握了拉取请求.
但是,它每次都不起作用.看起来我不仅需要合并库,还需要master..merge_base范围内的每个提交.但我不确定该怎么做.
所以,问题是:如何获取足够的历史记录来进行合并?
我必须使用拥有数百万行代码和数十万个更改集的hg存储库.你可以想象,这真的会减慢mercurial和TortoiseHg的速度.
我可以创建一个只有最新的几千个变更集的本地存储库吗?
这不仅有希望让事情变得更加快捷,而且还可能为我节省一些硬盘空间.
我知道使用--depth选项可以使用浅子模块git submodule update.
但是,如果我跑
git submodule update --init --recursive --depth 1
Run Code Online (Sandbox Code Playgroud)
在我的项目中有几个子模块,我得到了一个fatal: reference is not a tree.所以我再次尝试过
git submodule update --init --recursive --depth 100
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我想保持深度为1.
在我看来,--depth 1拉出子模块中的最新提交,而不是主存储库指向的提交,这就是为什么将其设置为100解决了问题,因为它提取了更长的提交列表,包括指向的提交.
不幸的是,如果是这种情况,那么我通常不能确定最新的100次提交包括我需要的提交.
我如何告诉git使用尖头提交而不是使用子模块的浅层克隆中的最新提交?
我在Windows上使用git 1.9.4.
大多数CI服务提供了一种浅层克隆存储库的方法.例如,在特拉维斯:
git:
depth: 1
Run Code Online (Sandbox Code Playgroud)
或者在AppVeyor上:
clone_depth: 1
or
shallow_clone: true
Run Code Online (Sandbox Code Playgroud)
这有明显的速度优势,因为您不必克隆整个存储库.
CI服务的浅层克隆是否有任何缺点?是否存在浅层克隆会导致CI构建失败的情况?否则,为什么不浅层克隆这些CI服务的默认设置?