Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial存储库清理保存回转窑/Fogbugz历史记录_Mercurial_Repository_Fogbugz_Kiln_Mercurial Convert - Fatal编程技术网

Mercurial存储库清理保存回转窑/Fogbugz历史记录

Mercurial存储库清理保存回转窑/Fogbugz历史记录,mercurial,repository,fogbugz,kiln,mercurial-convert,Mercurial,Repository,Fogbugz,Kiln,Mercurial Convert,TL;DR版本:是否有可能在不打破窑/福布斯历史的情况下重组Mercurial回购?还是我必须重新开始? 我有一个非常混乱的存储库,需要进行一些认真的清理,我正试图找出最好的方法。目标是完全删除几个文件——它们不应该出现在任何提交中——移动几个目录,并将一个目录拆分为一个完全独立的存储库。我知道,我知道,你不应该改变历史。然而,在这种情况下,要么改变历史,要么从头开始使用新的存储库 讨论中的存储库在Mercurial中管理,远程存储库托管在中。在中跟踪问题。由于某些提交链接处理规则,提交消息中

TL;DR版本:是否有可能在不打破窑/福布斯历史的情况下重组Mercurial回购?还是我必须重新开始?


我有一个非常混乱的存储库,需要进行一些认真的清理,我正试图找出最好的方法。目标是完全删除几个文件——它们不应该出现在任何提交中——移动几个目录,并将一个目录拆分为一个完全独立的存储库。我知道,我知道,你不应该改变历史。然而,在这种情况下,要么改变历史,要么从头开始使用新的存储库

讨论中的存储库在Mercurial中管理,远程存储库托管在中。在中跟踪问题。由于某些提交链接处理规则,提交消息中对问题(案例)编号(如
case 123
的任何引用都将转换为指向相关Fogbugz案例的链接。反过来,前面提到的案例有一个附加了提交消息的注释

当前结构 项目文件结构当前如下所示:

- /
    +- includes/
    |   +- functions-related-to-abc.php
    |   +- functions-related-to-xyz.php
    |   +- class-something.php
    |   +- classes-several-things.php
    |   +- random-file.php
    |   ...
    |
    +- development/
    |   +- a-plugin-folder/
    |   |   +- some-file.php
    |   |   +- file-with-sensitive-and-non-sensitive-info.php
    |   |   ...
    |   |
    |   +- some-backend-functions-related-to-coding.php
    |   ...
    |
    +- index.php
    +- test-config-file.php
    ...
- /
    +- build/
    +- doc/
    +- src/
    |   +- functions/
    |   |   +- abc.php  // renamed from includes/functions-related-to-abc.php
    |   |   +- xyz.php  // renamed from includes/functions-related-to-xyz.php
    |   |   ...
    |   |
    |   +- classes/
    |   |   +- something.php       // renamed from includes/class-something.php
    |   |   +- several-things.php  // renamed from includes/classes-several-things.php
    |   |   ...
    |   |
    |   +- view/
    |   |   +- random-file.php  // formerly includes/random-file.php
    |   ...
    |
    |   +- development/
    |   |   +- some-backend-functions-related-to-coding.php
    |   |   ...
    |   +- index.php
    |   ...
    |
    +- test/
    ...
目标结构 我想要的结构是这样的:

- /
    +- includes/
    |   +- functions-related-to-abc.php
    |   +- functions-related-to-xyz.php
    |   +- class-something.php
    |   +- classes-several-things.php
    |   +- random-file.php
    |   ...
    |
    +- development/
    |   +- a-plugin-folder/
    |   |   +- some-file.php
    |   |   +- file-with-sensitive-and-non-sensitive-info.php
    |   |   ...
    |   |
    |   +- some-backend-functions-related-to-coding.php
    |   ...
    |
    +- index.php
    +- test-config-file.php
    ...
- /
    +- build/
    +- doc/
    +- src/
    |   +- functions/
    |   |   +- abc.php  // renamed from includes/functions-related-to-abc.php
    |   |   +- xyz.php  // renamed from includes/functions-related-to-xyz.php
    |   |   ...
    |   |
    |   +- classes/
    |   |   +- something.php       // renamed from includes/class-something.php
    |   |   +- several-things.php  // renamed from includes/classes-several-things.php
    |   |   ...
    |   |
    |   +- view/
    |   |   +- random-file.php  // formerly includes/random-file.php
    |   ...
    |
    |   +- development/
    |   |   +- some-backend-functions-related-to-coding.php
    |   |   ...
    |   +- index.php
    |   ...
    |
    +- test/
    ...
a-plugin-folder
将移动到它自己的独立存储库<代码>测试配置文件.php将不再在存储库中被跟踪。理想情况下,我也会做一些小修剪和重命名的分支,而我在它

在我的梦境中,带有敏感和非敏感信息的
文件。php
会以某种方式被一致跟踪,但带有敏感信息(两个密码)的文件会被拉到一个不受版本控制的配置文件中。我意识到这可能是一厢情愿

我目前的想法 我目前的想法是,我的愿望清单基本上是不可能的:从现在开始,我可以创建新的、结构合理的存储库,但不能保存我的更改历史,也不能进行我需要进行的根本性结构更改。在这个视图中,我应该使用当前的代码库,按照我想要的方式重新组织它,并将其作为两个新存储库(根存储库和插件存储库)的变更集1提交。然后,我会在某个地方备份一份旧存储库的副本以供参考。主要的缺点:(1)我失去了所有的历史,(2)窑和Fogbugz交叉引用的历史提交都是烤面包

我的问题 那么,问题是:有没有什么方法可以做到我想要的——重组、取出一些文件,让所有东西看起来都很漂亮——而不丢失我所有的历史记录?

我已经考虑过使用,大量使用
filemap
splicemap
branchmap
选项。我看到的这种方法的问题包括:(1)破坏所有以前的构建,(2)在以前的构建中根本没有包含敏感和非敏感信息的
文件.php
(或者将其保留,这不符合要点),以及(3)使许多提交消息在引用文件名或repo结构时严重错误。换言之,我不确定这个选项是否比仅仅启动干净的、结构正确的存储库有多大好处

我还考虑了一个极端的选择:编写某种自定义脚本来构建一个新的存储库,方法是检查每个现有的提交,用敏感和非敏感的info.php从
文件中剥离敏感信息,在必要的范围内重写提交消息,并提交所有内容的修订版本。从理论上讲,这可以解决我所有的问题,但代价是重新发明轮子,而且可能需要花费荒谬的时间。我正在寻找一些与编写整个
hg
扩展不同的东西


EDIT:我正在考虑创建一个空存储库,然后编写一个脚本,使用
hg export
hg import
一次转换一个变更集,必要时进行编辑,从文件中删除密码等敏感信息。这有什么不起作用的原因吗?

编辑:我最终采取了与下面描述的不同的方法。解释了我最后做了什么。也就是说,我仍然对下面描述的插件非常感兴趣,所以如果我有时间做这件事,或者其他人想做这个项目,我会留下这篇文章作为参考


我已经确定,在存储库的历史记录中的适当位置使用导入、导出和一些修补是可能的

算法 该算法的简短版本如下所示:

- /
    +- includes/
    |   +- functions-related-to-abc.php
    |   +- functions-related-to-xyz.php
    |   +- class-something.php
    |   +- classes-several-things.php
    |   +- random-file.php
    |   ...
    |
    +- development/
    |   +- a-plugin-folder/
    |   |   +- some-file.php
    |   |   +- file-with-sensitive-and-non-sensitive-info.php
    |   |   ...
    |   |
    |   +- some-backend-functions-related-to-coding.php
    |   ...
    |
    +- index.php
    +- test-config-file.php
    ...
- /
    +- build/
    +- doc/
    +- src/
    |   +- functions/
    |   |   +- abc.php  // renamed from includes/functions-related-to-abc.php
    |   |   +- xyz.php  // renamed from includes/functions-related-to-xyz.php
    |   |   ...
    |   |
    |   +- classes/
    |   |   +- something.php       // renamed from includes/class-something.php
    |   |   +- several-things.php  // renamed from includes/classes-several-things.php
    |   |   ...
    |   |
    |   +- view/
    |   |   +- random-file.php  // formerly includes/random-file.php
    |   ...
    |
    |   +- development/
    |   |   +- some-backend-functions-related-to-coding.php
    |   |   ...
    |   +- index.php
    |   ...
    |
    +- test/
    ...
  • 创建一个新的存储库
  • 循环浏览现有存储库的变更集,执行以下操作:

  • 从旧存储库导出变更集
  • 将变更集导入新存储库而不提交它
  • 对提交消息和/或敏感文件进行任何必要的编辑
  • 在新存储库中提交变更集,保留(可能修改过的)提交消息和其他元数据
  • 交换旧的和新的存储库

  • 注意事项:
    • 显然,与所有历史记录编辑一样,这只适用于未被第三方提取的非公共存储库
    • 步骤2可以而且应该高度自动化,无需编辑即可批量处理变更集
    • 无论何时需要更改,都必须停止执行
    让它工作 我有一个非常基本的概念验证批处理文件,可以证明这一点


    我正在开发一个Mercurial插件,使之尽可能简单。也就是说,如果有人有更好的建议,我仍然愿意接受。

    我能够实现我的目标。下面是我最后做的:

    • 首先,我通过消除所有分支、合并和tu来“展平”(拉直)存储库