2011-10-25 52 views
9

我正在编写一个工具来将Bitbucket(支持Git和Mercurial)的所有存储库备份到本地计算机。如何使用Git * INTO *裸仓库进行抽取/提取?

它已经工作了水银,我在那里做这样的:

  • 创建一个新的空仓库,但不会在本地机器
    (同样喜欢一个bare Git仓库)
  • 在工作副本从远程存储库拉到本地空的存储库中

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

I 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知识(我通常使用水银)。
而且我正在使用Windows,如果这很重要。

+0

[git的日志,并示出在裸回购]的可能重复(http://stackoverflow.com/questions/6214711/git-log-and-show-on-a-bare-repo) – CharlesB

+0

@CharlesB :这个链接中的答案都不适用于我。甚至没有像'git branch -va'这样的提示工作,而不是建议的'git log branchname'(我尝试'master'),也没有“在存储库中可视化所有内容...”命令答案。 –

回答

14

尝试

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

这似乎只能获取主分支(我只是用https://github.com/dontangg/nocco试过,因为Dapper没有其他分支)。是否可以获取**所有**分支?这将是一个备份工具,当然我想要备份所有内容。 –

+2

类似于'“*:*”'或'“refs/heads/*:refs/heads/*”'应该这样做。 –

+0

'*:*'对我来说不起作用('致命的:无效的refspec'*。*''),但是'refs/heads/*:refs/heads/*'这样做。谢谢! –

3

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

+2

是的,但我希望备份能够定期运行。因此,在第一次运行后,本地存储库已经存在 - >我必须运行'pull' /'fetch' /无论如何,并确保这拉动所有**。 –

+1

当你镜像你裸露。你可以使用'git fetch --all --progress -v'来更新你的本地bares。 –

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

要备份的远程仓库到你的裸库regulary配置第一

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

,然后只需运行

git fetch --prune 

备份。

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

在一个地方很好地解释了所有相关的事实,特别有用的是关于双引号和需要在前缀[+ refspec]前加'+(https://git-scm.com/book/en/ V2/GIT中-塔内-THE-的Refspec)。 – starfry