如何git捆绑一个完整的repo

bd1hkmkf  于 2023-10-14  发布在  Git
关注(0)|答案(4)|浏览(136)

我需要将一个完整的repo传输到一个新的非联网机器上,最好是作为一个单一的文件实体。git bundle允许在sneakernet环境中进行git fetchgit 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将提供源计算机的镜像,包括其远程引用。

p1iqtdky

p1iqtdky1#

什么是正确的调用:

  • 将当前repo中的所有分支捆绑在一起

简单:

$ git bundle create repo.bundle --all

这里repo.bundle是您要创建的bundle文件的名称。请注意,--all不会包含远程跟踪分支。就像普通克隆人一样

  • 在目标目录上启动新的存储库,即正确安装root commit

首先,clone就是init + fetch(+ administrativia)。
其次,你可以在任何可以使用仓库URL的地方使用bundle文件,所以你可以简单地从bundle文件中clone

$ git clone repo.bundle

这将创建repo作为git仓库。

hmmo2u0o

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的回答所述

h79rfbju

h79rfbju3#

我建议你将.git文件夹压缩或tar,然后简单地将其解压缩到新位置,然后执行git reset --hard HEAD。所有分支所需的一切都在.git下,您需要做的就是调整.git/config文件中的任何远程对象或删除它们。

tar cf myrepo.tgz .git
cp myrepo.tgz [USB_STICK]
... move to new machine ...
mkdir myrepo && cd myrepo
tar xpf [USB_STICK]/myrepo.tgz
git reset --hard HEAD
sxissh06

sxissh064#

在Git 2.34(2021年第四季度)中,git bundle create得到了进一步的澄清:
参见commit 1d9c8dacommit 0bb92f3commit 9ab80ddcommit 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的完整历史记录:

$ git bundle create full.bundle new

诸如old..new这样的修订版本范围将生成一个bundle文件,该文件将要求存在修订版本old(以及从中可访问的任何对象),以使bundle能够“解包”:

$ git bundle create full.bundle old..new

一个没有任何先决条件的自包含包可以被提取到任何地方,甚至是一个空的存储库中,或者从其中克隆(例如,new,但不是old..new)。
git bundle现在在其手册页中包括:
'git bundle verify'命令可以用来检查你的接收仓库是否有bundle所需的提交。

相关问题