`git push --mirror`的相反操作是什么?我该如何取回我的代码库?

7
我使用git push --mirror非常成功地将备份复制到裸仓库中。但是,在 Stack Overflow 和其他地方搜索后,我无法找到一种本地克隆所有分支的方法。我不想使用git clone,因为我不希望我的本地仓库知道裸仓库的存在。如果我使用git pull,它只会拉取 HEAD 分支。
猜测:
git pull /data/Dropbox/backup/that_stuff.git *

当然,什么也做不了。

如何获取包含所有分支的整个存储库?我意识到我可能只需将裸存储库复制到我的.git目录中,但这似乎不是一个好主意。


1
@VonC 非常感谢您的回答。虽然您的回答非常专业,但事实证明,在DropBox中备份到GIT捆绑包并没有太大意义。它会增加太多的流量(到服务器),而且没有任何优势。镜像也要快得多。现在,如果我能解决这最后一个问题就好了 :) - Dan Rosenstark
@Yar,你能详细说明一下你最后的评论吗?我处于类似的情况,更喜欢裸仓库而不是捆绑包...想了解你的经验。 - user
@buffer,你不能在Dropbox中回滚目录(上次我检查过)。你只能回滚文件。此外,如果您尝试从多台计算机同步到Dropbox,则裸git存储库的内部组件将会出现问题。因此,要么使用unfuddle.com,要么使用带有Dropbox的git捆绑包。 - Dan Rosenstark
@Yar 我把所有的git东西都放在了一个TrueCrypt文件容器中,然后将其作为二进制文件上传到Dropbox。如果我尝试在多台计算机上同步它,这会成为一个问题吗? - user
@buffer,据我所知应该没问题,因为TrueCrypt容器是一个大文件,所以Dropbox不会尝试同步单个文件片段,也不会在单个文件上遇到冲突。话虽如此,你应该查看一下unfuddle.com,它有小型免费仓库。 - Dan Rosenstark
显示剩余3条评论
3个回答

2
尝试使用 git fetch 替代 git pull 由于 git pull 用于获取一个分支并将其合并到本地分支,尝试将 所有 远程分支合并到本地分支是没有太多意义的。
$ git fetch a-repo_url

上述命令将远程refs/heads/命名空间中的所有分支复制并存储到本地refs/remotes/remoteRpo/命名空间中,除非使用branch.<name>.fetch选项来指定非默认的refspec。
尝试:
$ git fetch a-repo-url +refs/heads/*:refs/heads/*

可以强制获取所有分支的所有头。
参见这个SO问题


原帖作者yar报告:

git pull /data/Dropbox/backup/mjdj.git/ +refs/heads/*:refs/heads/*

工作。


尝试过了。GIT的响应是* branch HEAD -> FETCH_HEAD,所以它只获取那一个。 - Dan Rosenstark
抱歉这样做了!谢谢“git pull /data/Dropbox/backup/mjdj.git/ +refs/heads/*:refs/heads/*”…如果您可以更新您的答案,我将会标记它。 - Dan Rosenstark
2
完全是为此而存在的,这就是歌曲存在的意义。 - Dan Rosenstark
1
如果您想要获取“所有”引用,可以使用git pull /data/Dropbox/backup/mjdj.git/ +refs/*:refs/*来获取更具体的引用。 - taxilian
1
我的理解是 git fetch a-repo-url +refs/heads/*:refs/heads/* 通常只适用于裸仓库。否则,您将会得到 Yar 提到的错误,因为 fetch 无法更新当前所在的分支。使用 pull 应该可以工作,但除非您确定它会快进,否则请准备好合并冲突。 - kynan
显示剩余2条评论

1

-1
你可以使用git-copy来实现这个功能。
git copy /data/Dropbox/backup/that_stuff.git that_stuff.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接