0

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

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

我现在想备份 git 裸存储库并删除数据存储库。

由于对象文件被硬链接,我担心删除数据存储库会使裸存储库处于陈旧状态。

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

非常感谢您的帮助。

4

1 回答 1

3

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

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

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

于 2011-01-08T00:34:33.623 回答