我需要将一个完整的repo传输到一个新的非联网机器上,最好是作为一个单一的文件实体。git bundle允许在sneakernet环境中进行git fetch
、git pull
风格的操作,但似乎假定您在目标机器上已经有了repo的工作版本。
什么是正确的调用:
1.将当前回购中的所有分支捆绑在一起
1.在目标目录上启动新的存储库,即正确安装root commit
我已经向上游发送了一个补丁来澄清:
`git clone` can use any bundle created without negative refspecs
(e.g., `new`, but not `old..new`).
If you want to match `git clone --mirror`, which would clone other
refs such as `refs/remotes/*`, use `--all`.
If you want to provide the same set of refs that a clone directly
from the source repository would get, use `--branches --tags` for
the `<git-rev-list-args>`.
所以$ git bundle create repo.bundle --branches --tags
最适合克隆。$ git bundle create repo.bundle --all
将提供源计算机的镜像,包括其远程引用。
4条答案
按热度按时间p1iqtdky1#
什么是正确的调用:
简单:
这里
repo.bundle
是您要创建的bundle文件的名称。请注意,--all
不会包含远程跟踪分支。就像普通克隆人一样首先,
clone
就是init
+fetch
(+ administrativia)。其次,你可以在任何可以使用仓库URL的地方使用bundle文件,所以你可以简单地从bundle文件中
clone
:这将创建
repo
作为git仓库。hmmo2u0o2#
首先克隆存储库,并包含
--mirror
选项。git clone --mirror [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :path/repo.git
这确保了所有远程分支也是本地分支,可以进行捆绑。
然后运行
git bundle create repo.bundle --all
,如Jakub Narrubski的回答所述h79rfbju3#
我建议你将.git文件夹压缩或tar,然后简单地将其解压缩到新位置,然后执行
git reset --hard HEAD
。所有分支所需的一切都在.git下,您需要做的就是调整.git/config文件中的任何远程对象或删除它们。sxissh064#
在Git 2.34(2021年第四季度)中,
git bundle create
得到了进一步的澄清:参见commit 1d9c8da,commit 0bb92f3,commit 9ab80dd,commit 5c8273d(2021年7月31日)by Ævar Arnfjörð Bjarmason (
avar
)。(由Junio C Hamano --
gitster
--合并至commit f19b275,2021年8月24日)bundle doc
:详细说明对象先决条件签字人:埃瓦尔·阿恩菲约德·比亚马逊
将关于“对象先决条件”的讨论拆分到单独的部分,并添加一些常见情况的示例。
参见2e0afaf(“添加git-bundle:move objects and references by archive”,2007-02-22,Git v1.5.1-rc 1--merge),以介绍此处更改的文档。
git bundle
现在在其手册页中包括:对象先决条件
在创建bundle时,可以创建一个自包含的bundle,它可以在没有公共历史的存储库中进行拆分,并提供负修订以排除历史早期部分所需的对象。
将诸如
new
这样的修订版本提供给git bundle create
将创建一个bundle文件,其中包含从修订版本new
可访问的所有对象。可以在任何仓库中将该捆绑包拆分,以获得导致修订版本new
的完整历史记录:诸如
old..new
这样的修订版本范围将生成一个bundle文件,该文件将要求存在修订版本old
(以及从中可访问的任何对象),以使bundle能够“解包”:一个没有任何先决条件的自包含包可以被提取到任何地方,甚至是一个空的存储库中,或者从其中克隆(例如,
new
,但不是old..new
)。git bundle
现在在其手册页中包括:'git bundle verify'命令可以用来检查你的接收仓库是否有bundle所需的提交。