gpt4 book ai didi

git - 从 git bundle 获取所有分支

转载 作者:行者123 更新时间:2023-12-02 20:31:29 27 4
gpt4 key购买 nike

我已经使用 --all 捆绑了一个 Git 存储库,但我不知道如何获得包含所有分支的存储库。

如何在给定 .bundle 文件的情况下取回所有分支?

最佳答案

(注意:如果您的意图是创建一个实际上已经“从备份中恢复”的新存储库,您可能需要一组不同的步骤,您根本不会创建远程。先把它放在一边,在这里是答案...)

  1. 添加(或使用)文件作为(或)远程,如 the git bundle documentation 中所述.在文档中的示例中,这通过使用捆绑文件作为 git clone 中的源 URL 自动发生,但您可以使用 git remote add — 参见 the git remote documentation有关详细信息 — 将捆绑文件作为新的(附加的,非 origin 命名的)远程添加到现有存储库。

    示例命令: git remote add myoldbundle path/to/myold.bundle

  2. 接下来您可能想要编辑文件 $GIT_DIR/config 以改变 git fetch 读取包时的行为。这将以与任何 git fetch 相同的方式工作,将 它们的 分支名称(存储在用作远程的捆绑文件中)转换为 您的默认情况下的远程跟踪名称。这是由于 git bundle 手册中记录的那一行:

    [remote "myoldbundle"]
    url = path/to/myold.bundle
    fetch = refs/heads/*:refs/remotes/origin/*

    (或类似的),它告诉 git fetch:获取它们的 refs/heads/* 名称并生成 refs/remotes/origin/* 名称。

    如果您更改这组指令,例如,改为:

    fetch = refs/*:refs/*

    您将指示您的 Git 更新(在这种情况下不强制)所有您的引用以匹配所有它们的引用,包括标签名称、 refs/notes/ 引用,以及 refs/stash(如果存在)。这类似于使用 git clone --mirror 时获得的配置,它将 fetch 行设置为:

    fetch = +refs/*:refs/*

    注意这里的前导加号,意思是“强制”:用他们的覆盖我的分支名称(例如refs/heads/master) em>。 这仅在您从不在存储库中进行任何操作时才有用,因为它会通过用它们覆盖分支哈希 ID 来有效地破坏它们。 (您可以通过 reflogs 保留旧的哈希值,但这相当棘手,您将需要知道如何处理您的索引和工作树变得不同步。)请注意 --mirror 克隆自动为 --bare,因此它没有工作树,因此您不会以这种方式给自己惹上麻烦。 使用 + 时要小心refs/*:refs/*!

  3. 最后使用git fetch 读取文件。

    示例命令: git fetch myoldbundle

关于git - 从 git bundle 获取所有分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com