如何备份使用硬链接创建的存储库

时间:2010-12-27 04:58:25

标签: git-clone

我们在共享模式下创建了git bare,并通过克隆git bare创建了数据存储库。

由于git bare repo和git data repo都位于同一个文件系统上,因此目标文件似乎是硬链接以节省空间。

我想立即备份git裸存储库并删除数据存储库。

由于目标文件被硬链接,我担心删除数据存储库会使裸存储库处于失效状态。

有没有办法可以复制硬链接到裸仓库的数据仓库中的所有目标文件,以便我可以删除数据仓库并备份仓库?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

不要害怕。不要害怕。您只需删除其中一个副本而不会丢失另一个副本。没有一个"原创"和一个"复制"。相反,两者都是"原始"在没有另一方的情况下将继续存在的文件。只有文件的内容在光盘上共享,因此只存储一次。

这不是Git的特色。这正是硬链接一直工作的方式(与软链接/符号链接相反,后者在链接文件和链接到的文件之间有明显的区别)。这也是硬链接在一台机器中跨文件系统边界工作的原因。这也是为什么在类似UN * X的系统中删除文件的函数(在几种编程语言中)通常被称为" unlink"而不是"删除"。

当然,由于文件内容仅存储在光盘上一次,因此如果您编辑其中一个,则两个副本都将更改。但这没问题。如果只有添加它们(并且偶尔在垃圾收集中删除(=取消链接)它们),则在对象数据库中Git 从不 _changes_文件。由于Git中的目标文件是不可变的,因此它们与其他不可变文件硬链接这一事实并不重要(除了节省磁盘空间),这就是为什么-l选项现在是git-clone中的默认选项。