本地的Git克隆可以被认为是克隆的repo的完整备份吗?

假设我使用以下方法将Git存储库克隆到本地磁盘:

git clone username@git.example.com:someproject.git 

现在假设git.example.com没有被备份,并且在辉煌中倒下了。 我的克隆是否包含重build丢失的远程回购所需的一切? Git Magic的Ultimate Backups部分表明答案是“是”,但是我不清楚。

请注意,我并没有问:“我的本地克隆是否是master分支的充分备份?” 我问我的本地克隆是否可以被认为是远程回购中包含的所有内容完整备份; 所有分支,所有标签, 一切 。 比如说,那些在本地回购中没有跟踪的远程分支呢?

为了进一步混淆这个问题, git clone --mirror的存在暗示了我的本地克隆不应该被认为是远程repo的完整备份。

克隆可以被认为是远程仓库中所有数据的完全备份,但不一定是元数据(这就是--mirror开关所在的--mirror )。 您的克隆将包含存储库以任何方式引用的所有提交,树,blob,分支和标记对象。 这意味着您的备份将包含您的所有源代码,历史logging和相关分支或标签。

--mirror开关的不同之--mirror在于,如果没有它,克隆将不包含在服务器上创build的遥控器之类的东西。 这些在“我希望我没有失去任何来源!”中并不重要。 有种方式,但它们可能会让你的服务器恢复正常运行。

如果您有兴趣创build一个可以恢复到服务器上的备份,就像从来没有任何问题一样,那么您应该使用--mirror ,但是对于大多数场景来说,简单的克隆就没有问题。

您的本地克隆将不会是一个完整的备份。 它将是存储库状态的备份,但不会包含源存储库的所有引用(所以它不会知道任何远程分支的状态)。

对于完整的备份,您正确地find了git clone --mirror 。 这将不仅有原始存储库的分支机构。 它也将映射包括远程分支的所有裁判。

重要

没有--mirror ,克隆将不会是一个完整的备份。 在git branch -r不可见的任何工作行将被从克隆中删除。

简单的演示

见证一个简单的回购。

 $ git init G $ cd G $ for f in 1 2 3 4; do date >1 && git add 1 && git commit -m $f; sleep 1.1; done $ git log --oneline --graph --all --decorate * 3c111bd (HEAD -> master) 4 * a08fea4 3 * d5c8d73 2 * 802856b 1 

添加一个分支:

 $ git checkout d5c8d73 HEAD is now at d5c8d73... 2 $ git branch starts-at-2 $ git checkout starts-at-2 Switched to branch 'starts-at-2' $ for f in 1 2 3 4; do date >1 && git add 1 && git commit -m 2-$f; sleep 1.1; done $ git log --oneline --graph --all --decorate * 6bb05bf (HEAD -> starts-at-2) 2-4 * fe1b635 2-3 * a9323fb 2-2 * 33502af 2-1 | * 3c111bd (master) 4 | * a08fea4 3 |/ * d5c8d73 2 * 802856b 1 

克隆回购。

 $ cd .. $ $ git clone G G2 Cloning into 'G2'... $ cd G2 $ git log --oneline --graph --all --decorate * 6bb05bf (HEAD -> starts-at-2, origin/starts-at-2, origin/HEAD) 2-4 * fe1b635 2-3 * a9323fb 2-2 * 33502af 2-1 | * 3c111bd (origin/master) 4 | * a08fea4 3 |/ * d5c8d73 2 * 802856b 1 

精细。 再次克隆。

 $ cd .. $ git clone G2 G3 $ cd G3 $ git log --oneline --graph --all --decorate * 6bb05bf (HEAD -> starts-at-2, origin/starts-at-2, origin/HEAD) 2-4 * fe1b635 2-3 * a9323fb 2-2 * 33502af 2-1 * d5c8d73 2 * 802856b 1 

乌尔克。