如何使用Git * INTO *裸存储库来提取/获取?

时间:2011-10-25 20:58:38

标签: git git-pull git-fetch

我正在编写一个工具来将我的所有存储库从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。

4 个答案:

答案 0 :(得分:15)

尝试

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

答案 1 :(得分:5)

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

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

然后只需运行

git fetch --prune

备份。

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

答案 2 :(得分:3)

我想如果你真的想备份的话。您可以尝试$ git clone --mirror XXXX命令。它几乎可以从存储库获得所有东西。希望它有所帮助。

答案 3 :(得分:2)

$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune