我有一个名为'skeleton'的本地Git存储库,用于存储项目框架.它有一些分支,用于不同类型的项目:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
Run Code Online (Sandbox Code Playgroud)
如果我想查看一个新项目的主分支,我可以做
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
Run Code Online (Sandbox Code Playgroud)
一切都是我想要的.具体来说,新的主分支指向骨架主分支,我可以推拉以移动对基本项目设置的更改.
但是,如果我想要克隆另一个分支,那么什么不起作用.我无法得到它,所以我只拉动我想要的rails分支,例如分支,然后新的存储库有一个master分支,rails默认情况下推送到骨架存储库的分支并从中拉出.
这有什么好办法吗?或者,也许这不是Git想要我构建事物的方式,我当然对此持开放态度.也许我应该有多个存储库,Ruby on Rails骨架存储库跟踪主骨架存储库?任何克隆Ruby on Rails骨架存储库的单个项目.
如何克隆具有特定修订版的git存储库,就像我在Mercurial中通常所做的那样:
hg clone -r 3 /path/to/repository
Run Code Online (Sandbox Code Playgroud) 该--depth 1选件git clone:
创建一个浅层克隆,其历史记录被截断为指定的修订数.浅存储库有许多限制(您不能克隆或获取它,也不能从中推送或插入它),但如果您只对历史悠久的大型项目的近期历史感兴趣并且希望将修补程序作为补丁发送.
但是我已经成功完成了一个浅层克隆,提交了一些更改并将这些更改推回到(裸克隆)源.
这对我有意义 - 我的意思是为什么不呢?当克隆的HEAD在原点可识别时,我的提交就在此之上,似乎没有理由.但手册说不然.
我喜欢浅层克隆的想法 - 例如drupal核心:当我从7开始时,我无法知道drupal 4中发生了什么 - 但我不想在脚下射击自己.
那么浅层克隆是否安全,在其中开发提交,再次拉动以跟上来自原点的更新?
我想做一个git pull但只有特定的提交.
A->B->C->D->E->F (Remote master HEAD)
Run Code Online (Sandbox Code Playgroud)
假设我的local masterHEAD指向B,我想拉到E.我该怎么办 ?
这不是一个特定的提交,这是一个特定的提交.
我们使用git来分发操作系统并使其保持最新状态.我们无法分发完整的存储库,因为它太大(> 2GB),所以我们一直在使用浅克隆(~300M).然而,最近从浅层克隆中获取时,它现在无法有效地获取整个> 2GB存储库.这对于部署而言是无法浪费的带宽浪费.
git文档说你无法从浅存储库中获取,尽管这绝对不是真的.是否有任何变通方法git clone --depth 1可以获取它的变化?或者其他一些策略是保持分布大小尽可能小,同时让git需要进行更新所有位?
我没有成功尝试克隆--depth 20,看它是否会更有效地升级,这是行不通的.我也看了http://git-scm.com/docs/git-bundle,但这似乎创造了巨大的捆绑.
该git clone --depth命令选项说
--depth <depth>
Create a shallow clone with a history truncated to the specified number of revisions.
A shallow repository has a number of limitations
(you cannot clone or fetch from it, nor push from nor into it),
but is adequate if you are only interested in the recent history of a large project with a long history,
and would want to send in fixes as patches.
Run Code Online (Sandbox Code Playgroud)
为什么浅克隆有这种限制?为什么它只是一个补丁工作流程?
对于某些项目工作流程,我需要将最新的提交从单个分支传递给编码器,然后让它们能够push(快进)开发到主服务器.这部分是为了安全,知识产权保护和回购规模,部分是为了减少大回购会给天真编码员带来的困惑.是否有允许这样的git工作流程?
更新:根据Karl Bielefeldt的回答,git checkout --orphan …
我对github的互联网速度从来都不快,并且它以50kb/s的速度挥之不去(我的互联网速度是20mbit,这不是很快,但仍比这快得多).根据我的估计,存储库是多gb,因此需要很长时间.
git是否支持使用多线程下载对象,这样我可以最大化我的网速?
我在BitBucket上有一个超过4GB的GIT存储库.
我无法使用普通的GIT命令克隆存储库,因为它失败了(看起来它工作了很长时间但后来又回滚).
我也无法从BitBucket界面下载存储库作为zip:
Feature unavailable This repository is too large for us to generate a download.
Run Code Online (Sandbox Code Playgroud)
有没有办法逐步下载GIT存储库?
例如,Git允许从任何给定的远程和引用中获取
git fetch <remote-url> <reference>
Run Code Online (Sandbox Code Playgroud)
因此,无需添加遥控器或创建分支即可获得提交的提交.
但是,这仅适用于引用,例如分支名称或标记,但不适用于特定哈希,因此不能直接在任何地方引用.
有没有办法从远程获取特定的提交?