【问题标题】:How do I pull/fetch with Git *INTO* a bare repository?如何使用 Git *INTO* 拉取/获取裸存储库?
【发布时间】:2011-12-15 07:09:38
【问题描述】:

我正在编写一个工具来将我的所有存储库从 Bitbucket(支持 Git 和 Mercurial)备份到我的本地计算机。

它已经适用于 Mercurial,我这样做是这样的:

  • 在本地计算机上创建一个没有工作副本的新空存储库
    (就像bare Git 存储库一样)
  • 从远程仓库拉入本地空仓库

现在我正在尝试对 Git 做同样的事情。

already found out 表示我不能直接将pull 转到裸存储库,我应该改用fetch

所以我试了一下:

C:\test>git fetch https://github.com/SamSaffron/dapper-dot-net.git
remote: Counting objects: 1255, done.
remote: Compressing objects: 100% (1178/1178), done.
remote: Total 1255 (delta 593), reused 717 (delta 56)
Receiving objects: 100% (1255/1255), 13.66 MiB | 706 KiB/s, done.
Resolving deltas: 100% (593/593), done.
From https://github.com/SamSaffron/dapper-dot-net
 * branch            HEAD       -> FETCH_HEAD

显然 Git 确实获取了一些东西,但之后本地存储库为空。
git logfatal: bad default revision 'HEAD'

我做错了什么?

免责声明:
我只有非常非常基本的 Git 知识(我通常使用 Mercurial)。
如果这很重要,我正在使用 Windows。

【问题讨论】:

  • @CharlesB:此链接中的所有答案都不适合我。甚至像git branch -va 这样对提问者有用的东西,也不是建议的git log branchname(我试过master),也不是答案末尾的“可视化存储库中的所有内容......”命令。跨度>

标签: git git-pull git-fetch


【解决方案1】:

试试

git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master

【讨论】:

  • 这似乎只获取主分支(我只是用github.com/dontangg/nocco 尝试过,因为 Dapper 没有其他分支)。是否可以获取 all 分支?这将是一个备份工具,当然我想备份那里的所有内容。
  • "*:*""refs/heads/*:refs/heads/*" 之类的应该可以。
  • *:* 对我不起作用 (fatal: Invalid refspec '*.*'),但 refs/heads/*:refs/heads/* 可以解决问题。谢谢!
  • 我认为这取决于git版本,然后。
  • 请注意,@FirstZero 的编辑并不完全适用于 bare 存储库。
【解决方案2】:

要将远程存储库备份到您的裸存储库中,请先定期配置

git config remote.origin.url https://github.com/SamSaffron/dapper-dot-net.git
git config remote.origin.fetch "+*:*"

然后简单地运行

git fetch --prune

备份。

  • 您可能可以跳过第一个配置添加,因为这应该在克隆远程存储库时已经设置。
  • 还请注意上述命令中的双引号 (") 以保护 asterix (*) 不被您的 shell 解释。
  • 需要加号才能允许非快进更新。如果您想备份遥控器的当前状态,这可能是您的意图。
  • 选项--prune 也用于删除现在不存在的分支。

【讨论】:

  • 一个很好的解释,所有相关事实都集中在一个地方,特别有用的是关于双引号和需要在 + 前缀 refspec 之前的点。
【解决方案3】:

如果你真的想备份,我想你。你可以试试$ git clone --mirror XXXX 命令。它将从存储库中获取几乎所有内容。希望它是有帮助的。

【讨论】:

  • 是的,但我希望定期运行备份。所以在第一次运行之后,本地存储库已经存在 --> 我必须运行 pull/fetch/whatever 并确保这也拉动了所有内容
  • 镜像后裸露。你可以使用'git fetch --all --progress -v'来更新你的本地裸机。
【解决方案4】:
$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2014-08-21
    • 2014-08-03
    • 2011-11-08
    • 1970-01-01
    • 2019-01-11
    • 2010-10-11
    相关资源
    最近更新 更多