Mercurial相当于.gitattributes污迹/干净过滤器
受答案启发,我想知道是否有一种方法可以在Mercurial相当于.gitattributes污迹/干净过滤器,mercurial,Mercurial,受答案启发,我想知道是否有一种方法可以在Mercurial中获得与在.gittributes文件中为git指定的污迹/干净过滤器相同的行为。这就是,在提交之前对某些文件应用一些预处理,而不影响工作副本 您可以在过滤器小节的ongittributes中找到我的意思的正确描述。此外,从: 事实证明,您可以编写自己的过滤器,用于在提交/签出时对文件进行替换。这些被称为“干净”和“污迹”过滤器。在.gittributes文件中,您可以为特定路径设置过滤器,然后设置脚本,以便在文件签出之前(“涂抹”,请参
Mercurial
中获得与在.gittributes
文件中为git
指定的污迹/干净过滤器相同的行为。这就是,在提交之前对某些文件应用一些预处理,而不影响工作副本
您可以在过滤器
小节的ongittributes
中找到我的意思的正确描述。此外,从:
事实证明,您可以编写自己的过滤器,用于在提交/签出时对文件进行替换。这些被称为“干净”和“污迹”过滤器。在.gittributes文件中,您可以为特定路径设置过滤器,然后设置脚本,以便在文件签出之前(“涂抹”,请参见)和暂存之前(“清理”,请参见)处理文件。这些过滤器可以设置为做各种有趣的事情
我的用例类似于中所述:在将部分文件提交到存储库之前清理它们,但不影响工作副本
我能找到的最相似的东西是Mercurial的编码
/解码
功能。问题是,这个方法非常简洁(我在其他地方找不到太多信息)
但是,
编码
/解码
功能被标记为一个。为什么呢?这是否意味着有更好的方法来实现它的功能?出于某种原因,没有合适的方法来实现这一点,但我应该像其他人一样使用此方法?查看您的用例,在存储库上覆盖本地修改的预期方法通常是使用MQ扩展,这允许您在本地应用补丁程序,这些补丁程序不会被推送到远程存储库,并且可以根据需要应用和取消应用(并且可以将其自身置于版本控制之下)
通常,在签入或签出时自动修改文件是有问题的:
hg克隆
不会复制.hg/hgrc
,因此可能会签出未编码的文件[encode]
和[decode]
部分。每个部分都有一系列pattern=shell命令
条目,其中pattern
描述一个文件名或一组文件名,而shell命令
是将输入文件转换为输出文件的shell命令。此命令的前缀可以是管道:
(默认设置),然后必须将标准输入转换为标准输出或临时文件:
,在这种情况下,该命令将转换命令行上给定的文件(由占位符填充
和输出文件
指定)
示例:
[encode]
secretfile = pipe: sed -e 's/FOO/BAR/g'
[decode]
secretfile = pipe: sed -e 's/BAR/FOO/g'
使用临时文件:
[encode]
secretfile = tempfile: sed -e 's/FOO/BAR/g' <INFILE >OUTFILE
[decode]
secretfile = tempfile: sed -e 's/BAR/FOO/g' <INFILE >OUTFILE
[编码]
secretfile=tempfile:sed-e's/FOO/BAR/g'OUTFILE
[解码]
secretfile=tempfile:sed-e's/BAR/FOO/g'OUTFILE
这两个示例在签入时将出现的FOO
转换为BAR
,在签出时将出现的BAR
转换为FOO
。请注意,这实际上不是正确的往返:如果文件在签入时包含字符串BAR
,则在签出时它将成为FOO
。编写在所有情况下都能正确执行此操作的过滤器可能相当棘手。这就是为什么单独的构建步骤几乎总是比在签入和签出中使用额外的魔法更好的原因之一