是否有像SVN Propset这样的汞扩展?
-
10-10-2019 - |
题
我需要将自定义元数据附加到通过Mercurial跟踪的源文件。这 SVN属性 命令正是我需要的。
是否有一个Mercurial扩展名,提供类似的命令 propset
, propget
, propdel
, , ETC?
如果没有扩展名,为什么不呢?
使用Mercurial时,定制元数据是否有替代/更好的方法?
自定义元数据对其他人没有用吗?
扩展是非常想要的,但还没有写吗?
额外的信息: :如果有帮助。我要跟踪的元数据是每个文件是否都经过编码,Unitested,QA'D等。此数据需要可追溯,并且分支/克隆之间的合并不够细。
解决方案
Mercurial的理念是您跟踪文件和文件。您甚至无法检查一个空文件夹,因为Mercurial不知道文件夹!
因此,以下是答案:
我找不到任何可以执行您想要的扩展名。 (您当然可以写自己的书。)
做您想做的事情的好方法是将数据存储在平面文件中并使用某些脚本对其进行处理。 :(
听起来您已经有了一个经过深思熟虑的系统,并且在您的公司中进行了良好的工程练习,因此我不会在这里对其进行ped脚,但是人们可以合理的论点,即您的方法除了伤害可移植性之外无能为力。物业没有什么神奇的,我只会运行 svn proplist -v .
在您的树上,将其转储到隐藏的文件中 - 类似 .tracking
- 只需与普通文件明确合并。这并没有真正添加任何工作,因为无论如何您都必须合并属性。
我希望这对您有用!
其他提示
Mercurial惯例是放置文件名 .hg*
进入存储库的根,并将其用作(某种类型的)字典将文件名映射到属性值。例如,而不是 svn:eol-style
HGEOL扩展使用 .hgeol 文件。
在跟踪代码审查的情况下,我建议写另一个扩展程序,以操纵此元数据,并以合并友好的格式将扩展名存储在其状态。
我将在这个问题上添加一个非常晚的准答案,因为它是许多人使用Mercurial,包括我,问的人 - 我们想要拥有的东西,并期望拥有的东西,在使用其他工具之后SVN属性。
据我所知,没有这样的货币。然而。
是的,Mercurial的方式似乎是跟踪文件和文件。可能是他们纠正这样的扩展名的方法是将必要的元数据放入... repo/.hg*文件中。
好的。我一直在玩那个。在尝试编写工具之前,手工做事。
版本的.hg文件方法的关键弱点是,如果您查看非TIP版本,例如“ HG Update -R Old-Version”,则会获得元数据的旧版本。
因此,我认为关键可能是将元数据放入... repo/.hg*文件中。
但是...大多数操作应使用最新版本的此类文件执行。即,我认为这样的元数据文件“超越”版本 - 即它们希望被版本化,但是在理想的情况下,您可能会想象它们会覆盖在您可能已经检查过的正常版本的文件上。
此外,在许多情况下,您希望将此类元数据的分支单独处理。例如,想象一个文件,您正在尝试一起编写所有分支的描述。也许比较分支,例如“ Branch1.1是分支1的最新版本”。您不希望该描述在任何一个分支上;或者,相反,您希望它同时在两个勇气上,并且希望更改在两个分支上反映。
这样的推定扩展可以在“ HG Cat -R Tip ... repo/.hg-my-new-metadata”上运行。否则它将以正常版本超越元数据文件的形式覆盖文件版本。
我在Subrepos上取得了一些进展:
superrepo
files // normally-versioned-files <-- a subrepo
metadata // version transcending metadata <-- a subrepo
这使我可以与旧版本的文件一起检查最新的元数据
它还不到,因为查看超级版本的特定版本可能会获得元数据subrepo的旧版本。但是至少较新的版本是在子雷管中。
我还要注意,无论您是将元数据放在邻近的子对中,还是将其保存在同一仓库中(但在提示上操作),您可以做一个问题
hg clone -r OLD-REVISION repo newrepo
这将剥离元数据,比旧革命晚。包括元数据说“旧革命都通过了所有测试”,即它将从后来的修订中剥离元数据,该修订可能适用于旧革命。
HG标签也会发生同样的问题。
有人可能会说“好吧,永远不要那样” - 永远不要剥离历史。不幸的是,通常推荐这是“整理”存储库的一种方式。
似乎很难避免这种情况。