如何获得一个完整的捆绑回购

我需要转移一个完整的回购到一个新的非网络机器,最好作为一个单一的文件实体。Git bundle 允许在运动鞋网络环境中执行 git fetchgit pull风格的操作,但似乎假定您已经在目标机器上拥有了可用的回购版本。

什么是正确的调用:

  1. 将当前回购中的分支打包为 所有
  2. 在目标目录上启动新的 repo,即正确安装 root 提交

我已经向上游发送了一个补丁来澄清:

`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将提供源计算机的镜像映像,包括它的远程参考文献。

94516 次浏览

我建议你用沥青或者拉上拉链。Git 文件夹,然后简单地将其解压到新位置,然后执行 git reset --hard HEAD。所有分行所需的一切都在下面。你所需要做的就是调整。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

什么是正确的调用:

  • 将当前回购协议中的所有分支机构捆绑在一起

简单:

$ git bundle create repo.bundle --all

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

  • 在目标目录上启动新的 repo,即正确安装 root 提交

首先,clone只是 init + fetch(+ 管理)。

其次,您可以在任何可以使用存储库 URL 的地方使用 bundle 文件,因此您可以简单地从 bundle 文件中使用 clone:

$ git clone repo.bundle

这将创建 repo作为 git 存储库。

首先克隆存储库,并包含 --mirror选项。

git clone --mirror git@example.org:path/repo.git

这样可以确保所有远程分支都是准备进行绑定的本地分支。

那就快跑

正如 Jakub Nar bski 的答案所描述的

Git 2.34(Q42021)进一步澄清了 git bundle create:

承认1d9c8da承诺0bb92f3犯了9ab80dd提交5c8273d(2021年7月31日) by 埃瓦尔 · 阿恩菲尔 · 比亚马森(avar)
(由 朱尼奥 · C · 哈马诺 gitster合并于 提交 f19b275,2021年8月24日)

详细说明对象的先决条件

埃瓦尔 · 阿恩夫约尔 · 比亚马森

将关于“对象先决条件”的讨论拆分成自己的部分,并添加一些常见情况的示例。

请参阅 2e0afaf(“ Add Git-bundle: move object and reference by archive”,2007-02-22,Git v1.5.1-rc1—— 合并) ,了解这里更改的文档的介绍。

git bundle现在在其 手册中包括:

客体先决条件

在创建 bundle 时,可以创建一个自包含的 bundle 也可以在没有公共历史的存储库中分离 对象中需要的对象进行负修改 历史的早期部分。

将诸如 new之类的修订提供给 git bundle create将创建一个 包含从修订中可以访问的所有对象的 bundle 文件 该绑定包可以在任何存储库中分解以获得完整的 导致修订 new的历史:

$ git bundle create full.bundle new

诸如 old..new之类的修订范围将生成一个包文件 将需要修订 old(以及从它可以访问的任何对象) 为了使 bundle 成为“ unbundle”而存在——可以:

$ git bundle create full.bundle old..new

可以提取没有任何先决条件的自包含包 到任何地方,甚至到一个空的存储库,或被克隆 (即 new,但不是 old..new)。

git bundle现在在其 手册中包括:

可以使用‘ git bundle ify’命令检查您的 接收方存储库具有提交 捆绑。