可以将本地Git克隆视为克隆的repo的完整备份吗?

时间:2011-01-11 14:06:36

标签: git

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

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

现在假设git.example.com没有被备份,而且它在荣耀的火焰中消失了。我的克隆是否包含重建丢失的远程仓库所需的所有内容? Ultimate BackupsGit Magic部分表明答案是肯定的,但我不清楚。

请注意,我不是在问“我的本地克隆是master分支的足够备份吗?”我问我的本地克隆是否可以被视为远程仓库中包含的所有完整备份;所有分支,所有标签,一切。例如,那些未在本地仓库中跟踪的远程分支呢?

为了进一步混淆该问题,git clone --mirror的存在向我建议我的本地克隆应被视为远程仓库的完整备份。

3 个答案:

答案 0 :(得分:50)

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

--mirror开关的区别在于,如果没有它,克隆将不会包含已在服务器上创建的遥控器等内容。这些并不重要“我希望我没有失去任何消息来源!”一种方式,但它们可能是让你的服务器恢复运行,就像它一样。

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

答案 1 :(得分:3)

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

要进行完整备份,您已正确找到git clone --mirror。这不仅具有原始存储库的分支。它还将映射包括远程分支在内的所有引用。

答案 2 :(得分:1)

重要

如果没有--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

的Urk。