如何删除从水银回购大型文件(How to remove largefiles from Mercur

2019-08-17 14:25发布

又见这个问题 。

不知道我在做什么,我启用了大型文件扩展名,犯了一个文件,并推动它窑。 现在我知道我的方式错误,我需要永久还原此更改。

我跟着从SO关于这个问题的指导; 我可以在本地删除大型文件,但这并不影响远程回购窑。 我曾尝试打开窑服务器上KilnRepositories回购和的摧毁了大型文件的文件夹(以及删除“大型文件”从要求文件),但也有少数推后/拉文件夹和要求的路线回来。

有没有办法让这个永久的吗? (设置要求,以只读也不行)。

Answer 1:

注:这是真正的至少的(适用于Windows)TortoiseHg 2.4(水银2.2.1) - > 2.7.1(水银2.5.2)。 我不会为将来或更旧版本的说话。

通过各种可用的善变扩展寻找后,我的结论是,它通常是不可能到资源库转换“返回”一旦文件被使用大型文件扩展名犯。

首先,这两个理由为什么你不希望你的回购在玩大型文件: 一个和2 。

一旦文件一直致力于为largefile,删除它,到“.hglf”路径的所有引用必须从回购中删除。 甲回退是不够的,因为它的提交内容将引用该文件的路径,包括“.hglf”文件夹。 一旦水银看到这一点,就会写“大型文件”回/.hg/requires文件和回购是一次largefile锁定。 同样符合HG忘记和删除。

选项1:如果你的回购是在隔离(你必须在其所有本地和远程位置,并没有其他人已经从该回购支回购的端至端控制),有可能使用MQ延伸和剥离的变更。 这可能是唯一的,如果你及时发现错误一个可行的选择。

选项2:如果违规变更(在largefile提交)上提交存在相即草案(或可以强制返回到草案),则有可能导入承诺MQ和取消应用变更使用汞qpop。 这是优于剥离,因为它保留了从提取变更前提交历史。 在现实生活中,这往往是不可能的,因为你可能已经进行合并,并推动/公共相枝拉。 但是,如果抓住很快就好了,MQ可以提供一种方式来挽救回购。

方案三:如果有问题的变更在一个只有一处引用(原提交),也没有人试图回退/删除/忘记changset(从而创建多个引用),有可能使用汞变基 ,与罪行的父变更的罪行之后,第一个孩子变更倍。 在这样做时,进攻变更成为新的头,其然后可以与MQ条剥离。 这可以在哪里工作尝试导入到MQ都失败了。

方案4:如果以上工作,你可以使用移植或嫁接 ,对所有非违规变更集,然后汞柱更新进攻之前导出为补丁(小心将它们导出正确的顺序),到第一理智变更,MQ去除所有向前的变更的回购,然后重新应用导出的补丁程序。

方案5:(我最终做到了)。 克隆回购本地,让你有两个副本:clone_to_keep,clone_to_destroy。 在clone_to_keep,更新到进攻之前,首先理智变更。 MQ去除所有向前的变更。 合并回落,如果留下了多头。 在clone_to_destroy,更新至尖端。 在Windows资源管理器,复制/ clone_to_destroy以外的所有.hg和.hglf文件夹复制到/ clone_to_keep文件夹。 里面龟,犯clone_to_keep作为一个单一的变更的所有更改。 保留clone_to_destroy的一个远程实例在历史的目的只读状态,并销毁所有其他人。

选项6:核选择。 如果一切都失败了,如果你不关心与外部系统(bug跟踪,CI等)的回购整合,你可以按照上述SO发布和使用汞转换扩展。 这将创建感染回购的新副本,删除对违规变更集的所有引用; 然而,它在整个回购每个迭代和变更其提交到新的回购作为一种新的变更这样做。 这将创建一个回购协议是与任何现有的分支回购不兼容 - 没有变更的id会排队。 除非你有没有分支回购协议,此选项将可能永远不会工作。

在任何情况下,你就必须把你的修复和手动重新申请每个不同的存储库实例(复制回购文件夹,克隆,无论你的首选方法)。

最后,事实证明,使大型文件是一个非常昂贵的错误作出。 这是耗费时间和最终的破坏性修复。 我不建议过让大型文件,使之成为您的回购协议。



文章来源: How to remove largefiles from Mercurial repo