git hard links-它知道文件是硬链接吗?


16

我开始使用硬链接而不是符号链接来组织文件...

我一直在对要拍摄的照片进行分类,并指出要打印的照片等。

我正在使用git备份我的映像,并且随着存储库的大小增加到大约1GB,git似乎认为它们是新文件。如果我不使用git重命名文件,Git在检测重命名方面确实做得很好,但是它还能处理硬链接吗?

沃尔特


2
所有普通文件都是硬链接。也许您的意思是“具有多个硬链接的文件”?
Ignacio Vazquez-Abrams'Apr

是的,这就是我的意思。
Walter

1
如果我错了,请指正我,但是不跟踪更多内容content吗?如果文件具有相同的内容,为什么会那么重要,那么-毕竟,它们在技术上是相同的文件。
new123456 2011年

1
对于偶然发现此问题的人-也许可以考虑使用符号链接?stackoverflow.com/q/954560/492
CAD bloke

听起来您想要一个基于标签的文件系统。
Nayuki '17

Answers:


14

多个链接的跟踪文件不会导致Git的对象存储增长太多,因为每个链接将由完全相同的Blob对象表示。但是,由于链接断开,您的工作树可能最终会增长。

Git不会跟踪是否跟踪的工作树文件是否是指向同一文件的硬链接。

如果您不要求Git做任何涉及修改这些路径名的内容或删除路径名的目录条目的操作,则Git将只保留它的链接,跟踪,工作树文件。但是,如果您要(例如)检出旧的提交或分支,然后切换回您的常规,最新的分支/提交,则Git最终将“破坏”硬链接(用新的(但相同的)替换受影响的路径名)文件,而不是重新创建多重链接的情况)。

要恢复多重链接状态,您可以编写一个程序来扫描相同的文件,然后将它们重新链接到任何一个文件。如果所有链接都不在工作树本身中,或者至少不在某个易于识别的“外部”位置中,则这种“重新链接”操作可能会更加复杂(即,如果要链接,则可能很难恢复链接)从您的主目录中的所有“随机”文件到“备份”存储库,并使用Gi​​t修改工作树)。

这个想法已经出现在Git邮件列表中:


对于基于debian的Linux,有一个hardlink工具(packages.debian.org/search?keywords=hardlink)可以执行此重新链接操作。不幸的是,它不是非常快
丹尼尔·阿尔德

hardlink每天晚上工作/var/lib/jenkins
Amedee Van Gasse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.