将文件添加到git,跟踪更改但不保留历史记录

时间:2015-08-21 21:49:09

标签: git

如何告诉git跟踪文件但只保留最新的更改而不保留历史记录。

文件结构就像

./ bin /< ---希望只拥有最新的(或最多两次更改)(原因)。

./ src /< ---希望继续跟踪所有更改。

我希望它们存储在存储库中,因为可以一步完成更新。

我更喜欢不分别托管它们的东西。因此,当完成拉动时,每个人都可以访问最新的资产。而不是添加步骤。

是否有办法将文件的历史记录仅限制为文件的最后X次更改(示例1到4的更改)?

2 个答案:

答案 0 :(得分:3)

你不能(完全)这样做,原因很简单:提交被表示为它包含的所有文件的完整快照的加密校验和,以及一些关于谁创建它的元数据承诺,何时,以及历史。"历史" part存储为一些父ID - 通常只有一个 - 也是加密校验和。

由于后来提交的校验和包含其父提交的校验和,如果您尝试修改某些早期的commit-for实例,则删除不再需要保留的旧编译二进制文件 - 结果对于这个新的,不同的提交(没有附加的二进制文件),它将是一个新的,不同的提交ID。然后,您必须修改每个后续提交:首先,您将获得其子项(或其子项之一,如果它具有多个子项)。您将复制该提交中的所有内容,包括二进制文件 - 您保留这些内容 - 但您要更改父ID以使用新的父ID为您提交的新提交缺少二进制文件。然后,您将所有人从使用旧子项切换到新子项,这需要复制作为该子项的子项的任何其他提交,依此类推。

从本质上讲,你重写("变基")每一个"下行"每当你重写一个" up-chain"提交,因为每个提交都记录了它的整个历史记录,并且您将某些历史记录替换为其他一些不同的历史记录。

可以做这个不断的变基,但是当你使用git的使用模式时,它会很痛苦。

还有另一种选择,但你已经排除了它:

  

我更喜欢不分别托管它们的东西

如果你允许它重新进入,你会得到一个系统,你的提交快照包含源代码而不是实际的二进制文件 - 一个唯一的标识符"这些与另一组二进制文件一起使用" ,你可以存储在别处。然后,您可以选择将其作为自己的git存储库,您可以(但不必)调用"子模块"。如果您不想使用git子模块,可以在此处获得任何有效的URL。如果您使此URL唯一 - 例如,通过添加二进制文件的唯一校验和(SHA-1,MD5等),您可以检测到二进制文件不再可用的情况,已被删除到适当的年龄。

(我实际上不会推荐这个 - 它通常最好不要存储这些二进制文件,但是如果你愿意使用两个网址而不是一个网址,那么它就成了一个选择。 #39;不要求使用git子模块,如果你使用子模块,你需要通过将每个提交放在其上来使二进制存储库中的提交独立,而不是与父/子相关。拥有独特的孤立分支或独立标记。这将允许您删除"老化"提交而不影响任何其他提交。)

答案 1 :(得分:0)

为什么你会使用git,man,git为这个历史问题创建了! 或者我弄错了...... 您可以从第一步中删除git和init,或者如果您只想克隆最后一个版本,请在克隆命令中添加--depth = 1 ...