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

Mat*_*rne 46 git

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

git clone username@git.example.com:someproject.git
Run Code Online (Sandbox Code Playgroud)

现在假设git.example.com没有得到支持,它会在荣耀的火焰中消失.我的克隆是否包含重建丢失的远程仓库所需的所有内容?Git MagicUltimate Backups部分表明答案是肯定的,但我不清楚.

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

为了进一步混淆这个问题,存在git clone --mirror意味着我应该将我的本地克隆视为远程仓库的完整备份.

Jam*_*ory 51

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

--mirror交换机的不同之处在于,如果没有它,克隆将不会包含已在服务器上创建的遥控器等内容.这些并不重要"我希望我没有失去任何消息来源!" 有点方式,但它们可能是为了让你的服​​务器恢复运行,就像它一样.

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


bob*_*ogo 8

重要的

如果没有--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
Run Code Online (Sandbox Code Playgroud)

添加分支:

$ 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
Run Code Online (Sandbox Code Playgroud)

克隆存储库。

$ 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
Run Code Online (Sandbox Code Playgroud)

美好的。再次克隆。

$ 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
Run Code Online (Sandbox Code Playgroud)

乌尔克。


Abi*_*ern 5

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

对于完整备份,您正确地找到了git clone --mirror. 这不仅有原始存储库的分支。它还将映射所有引用,包括远程分支。