如何git捆绑一个完整的回购

Phi*_*ley 103 git

我需要将完整的repo转移到新的非联网机器,最好是作为单个文件实体.git的捆绑允许git fetch,git pull操作风格在sneakernet环境,但似乎假设你已经在目标计算机上回购的工作版本.

什么是正确的调用:

  1. 捆绑当前仓库中的所有分支
  2. 在目标目录上启动新的repo,即正确安装root commit

Jak*_*ski 167

什么是正确的调用:

  • 捆绑当前仓库中的所有分支

简单:

$ git bundle create repo.bundle --all
Run Code Online (Sandbox Code Playgroud)

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

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

首先,clone只是init+ fetch(+ administrativia).

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

$ git clone repo.bundle
Run Code Online (Sandbox Code Playgroud)

这将创建repo为git存储库.

  • **create**命令的概要是`git bundle create <file> <git-rev-list-args>`.运行`man git-rev-list`(或`man git-log`)会给你`--all`.但我同意它应该在bundle命令文档中更明显. (19认同)
  • 谢谢,`--all`选项不在我的'bundle`手册页中(我正在查看版本1.7.6.msysgit.0),也没有在URL部分中使用.bundle文件`clone`.它让我更有信心推荐它的使用. (5认同)
  • @Philip Oakley:`git-rev-list-args`是你如何*选择`git show-ref`命令显示的引用. (2认同)
  • `--all`确实为我提供了远程跟踪分支(git 2.1.4).我可以看到`refs/remotes/origin/*`和`git bundle list-heads bundlefile`或`git ls-remote bundlefile`.尽管从捆绑中取回它们并不是很棘手. (2认同)
  • 好的,/sf/answers/3387389001/ 给出了解决方案(问题实际上是从捆绑包“恢复”存储库时,而不是创建捆绑包时):`git init .`,然后是`git fetch - -update-head-ok /path/to/bundle '*:*'`。我检查了 `git log --all --date=iso-local -m --name-status --decorate=full --graph --date-order` 的输出是否相同。 (2认同)

tho*_*ers 27

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

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

这确保了所有远程分支也是准备好进行Bundeling的本地分支.

然后跑

git bundle create repo.bundle --all 正如JakubNarębski的答案所描述的那样