是否可以在git中只维护某个文件的一个修订版



例如,我有一个hostname_ip.list.tar.bz2(7MB)文件,它是一个80MB的hostname_ip.list压缩文件。

我会不时更新hostname_ip.list并压缩为hostname_ip.list.tar.bz2git commit

所以git会保留hostname_ip.list.tar.bz2的每一次修订,这会导致.git目录很大。

就我而言,我不需要hostname_ip.list.tar.bz2的旧版本。是否可以只保留一个版本的hostname_ip.list.tar.bz2

是的,这在Git中是可能的。但这并不好。git filter-branch和一些工具可以从所有相关的提交中删除旧版本,但这样做总是会重写历史记录,这意味着您的提交历史记录不稳定。只要你不与他人共享你的存储库,这是可以的。如果许多人共同参与这样一个项目,那么维护分支机构肯定是一场灾难。

如果你正在使用Github,你可以试试它的新功能LFS。如果不是,则可以使用其他VCS(如SVN)来处理大文件。但你需要额外的工作来制定一个好的解决方案。

您的策略在git中是否有意义取决于这个大文件的内容,以及它如何随时间变化。

注意:我的其余答案取决于假设文件的未压缩版本是文本的,并且是面向行的(即由许多行组成)。而且,当你更改文件时,你只更改了一些行,而不是所有行。

在这种情况下,当您更改文件时,只有更改的行存储在提交中。换句话说,提交不会很大(至少与原始文件相比)。

相反,当压缩文件时,您不再处理基于行的文本数据。现在,每一次更改,即使只有1个字节,也会导致整个文件存储为新的提交。这是主流观点不将二进制文件存储在git中的主要原因之一(至少,如果它们发生变化,就不会)。

因此,最简单的选择完全有可能是:根本不压缩文件。

最新更新