git克隆镜像和裸repo的简单副本之间的区别是什么



假设我想复制一个裸存储库。我想支持它。似乎实现这一点的规范方法是使用git clone --mirror。然而,您似乎也可以使用操作系统(例如cp -r bare_repo bare_repo_bkp(复制裸存储库。

git clone --mirror与使用操作系统的递归副本到底有什么不同,使用其中一个或多或少合适吗?

我将首先引用我书中的空白注释(我需要重新开始处理(:

事实上,两者之间有着相当密切的关系在系统备份和版本控制。关键区别两者之间的函数目的

备份旨在让您恢复任何东西——一个文件、多个文件,甚至整个系统错误或灾难,包括存储介质。因此,备份往往要按照时间表执行,例如每小时、每天、每周等等on。当备份针对灾难时恢复,我们可以删除中间版本,例如,放弃所有每小时备份每天备份后,然后丢弃每周备份后的所有每日备份。换句话说,备份通常由系统驱动点看法

版本控制系统相比之下,旨在允许您查看或恢复来自用户和/或项目驱动的文件观点。输入新版本在办理入住或提交时。我们拭目以待下面将详细介绍。如果丢弃旧版本是允许的,也是通常要特别小心而不是按照时间表。

如果您在精心选择的位置进行备份时间,并永远保留这些备份,这个确实导致了版本的形式控制管理和比较不过,版本的转换可能会很困难。

更具体地说,git clone制作存储库的克隆,而不是备份;cp -r进行备份(无论如何都要在适当的条件下(。不同之处在于,克隆通常会复制所有提交,但不会复制某些非提交项目,包括但不一定限于以下项目:

  • 引用,除非使用--mirror1
  • 通货再膨胀(即使有--mirror(
  • 配置值和挂钩

由于reflog保留名义上删除的提交,克隆通常也会省略这些提交。这通常被认为是积极的,但出于备份目的,可能被认为是消极的。


1非镜像克隆将其他Git的分支引用转换为远程跟踪名称。然而,它确实复制了标记名,以及复制的标记对象(通常是提交和注释的标记对象(,前提是这是一个完整的克隆而不是浅克隆。

最新更新