备份一个GitHub仓库
根据以下要求,创build托pipe在GitHub上的git存储库的本地备份的最佳方法是什么?
-
本地备份应该是裸露的回购。
-
备份应包括所有分支机构。
-
应该很容易(逐步)更新备份。
基本上,我想要一个完美的镜子,有可能更新容易。 就这样,命令
git clone --mirror git://github.com/...
想到,但据我所知,这并不容易更新(我不得不删除并重新创build我的本地备份)。 另外,git clone的镜像选项看起来挺新的,我没有在我正在使用的一些系统上(它有一些运行的旧版本的git)。
你对这类问题推荐的解决scheme是什么?
创build镜像:
git clone --mirror git://github.com/user/project.git
更新:
cd project.git git remote update
要更新而不更改当前目录:
git --git-dir project.git remote update
我不知道它可以涵盖所有的要求,但你可以检查出的Git包
git bundle
这个命令提供了对
git fetch
和git pull
支持,通过在源机器的归档文件中打包对象和引用,然后使用git fetch
和git pull
将这些文件导入到另一个仓库中
我喜欢的解决scheme是生成的单个文件,正是我想要的
git bundle
将只打包由git-show-ref显示的引用:这包括头部,标记和远程头部。
machineA$ git bundle create file.bundle master
注意: Kent Fredric在评论中提到了git rev-list
一个微妙之处:
--all
假设
$GIT_DIR/refs/
中的所有引用都作为<commit>
在命令行中列出。
他补充说:
你的当前包只会捆绑提交的父母,你可能需要指定 –
--all
来获得一切的完整的包(主后裔的分支)。
要看到不同之处:
$ git bundle create /tmp/foo master $ git bundle create /tmp/foo-all --all $ git bundle list-heads /tmp/foo $ git bundle list-heads /tmp/foo-all
但据我所知,这并不容易更新(我不得不删除并重新创build我的本地备份)。
不知道你是什么意思,更新它应该是如此简单
git fetch
git clone
因为它应该是获取远程分支上可见的所有参考/提交。
git clone --mirror
与git clone --mirror
是很不一样git clone --bare
[source]
唯一不同的是git remote add --mirror
(请参阅git help add
不同的行为)
如果你真的担心,你可以这样做:
git clone --no-hardlinks --mirror $original $dest
无论如何,如果它们在同一个文件系统上,它只会做不同的事情。
如果你确实是偏执的话,你可以把整个目录tar(.gz | bz2),然后把它保存起来。
如果你只需要备份GitHub仓库,你可以看看简单的Bash脚本。
你在git的约束下做什么是很难做到的。 问题是克隆和提取都不会默认给你所有的分支。 看到这个问题:
- 如何一次更新所有分支 ?
有关使用多个分支机构复制回购的示例,请参阅以下副本:
% git clone -o tufts linux.cs.tufts.edu:/r/ghc/git/experimental.git Initialized empty Git repository in /usr/local/nr/git/ghc/experimental/.git/ % cd experimental/ % git fetch % git branch -a * head tufts/HEAD tufts/experimental tufts/head tufts/norman % git branch --track experimental tufts/experimental Branch experimental set up to track remote branch refs/remotes/tufts/experimental. % git branch --track norman tufts/norman ...
你可以看到,以编程方式克隆每个分支将有点棘手。
如果github提供了对rsync或Unison的访问,这些是更好的工具。 否则,你将不得不写一些可怕的脚本…
我在其他人的帮助下写了一个ruby脚本:
https://github.com/walterjwhite/project.configuration/blob/master/scripts/github.com.backup.ruby
该脚本允许我下载所有的存储库。 我使用它来定期对我正在进行的项目进行备份。
我希望这有帮助,随时调整它。 我认为它有一个错误,偶尔,GitHub会超时,脚本无法处理。