【问题标题】:Unable to apply git attribute filter无法应用 git 属性过滤器
【发布时间】:2018-07-31 22:48:17
【问题描述】:

问题

我正在尝试应用this SO answer 中的解决方案。我也试图让this solution to the same question 工作,但在这两种情况下我都没有成功。这两个都使用干净/涂抹属性过滤器。

目标是提高 Git 处理要处理的文件 (LaTeX) 的能力。

我做了什么

简短的回答“你做了什么”是“解决方案说要做什么”,但如果我看过一些东西,我会详细介绍。

我研究过的一个潜在问题是答案可能已过时。通过查看Git Attributes Documentation,我认为唯一可能过时的是配置文件的位置。出于这个原因,我在 repo 的根目录中有一个 .gitattributes 文件以及一个 .git/info/attributes 文件。我也只尝试过其中一种。

Word-by-word

虽然不是我希望得到的解决方案,但我认为我应该尝试不止一种,以期更好地确定问题所在。我选择复习这个,因为我至少可以让脚本在 Git 之外工作。

在我的配置文件中

 [filter "wordbyword"]
    clean = /home/nero/myScripts/wordbyword.clean
    smudge = /home/nero/myScripts/wordbyword.smudge

我将上述位置复制并粘贴到前面带有vim 的终端中(所以你知道我没有在那里打错字)并粘贴下面的内容。首先是clean,然后是smudge,尽管要使用后者,前者必须工作。 . .这是问题所在。

#!/usr/bin/perl
use strict;
use warnings;

while (<>)
{
    print "$_\n" foreach (m/(.*?\s+)/go);
    print '#@#DELIM#@#' . "\n";
}

#!/usr/bin/perl
use strict;
use warnings;

while (<>)
{
    chomp; '#@#DELIM#@#' eq $_ and print "\n" or print;
}

属性文件就是*.tex filter=wordbyword

但是,当我运行git show HEAD:file.tex 时,它显示它正在正常存储。

我知道脚本有效。当我运行perl wordbyword.clean test.tex 时,输出符合预期。

在四处寻找之后,我发现我实际上确实有两个文件告诉 Git 需要对 .tex 文件做什么。我把一个放在全球位置。哎呀。这个现在有效。 . .还有下一个。至少在清洁方面。在我回答我自己的问题之前,我现在要检查一下污迹。

Sentence by Sentance.

这是我更喜欢的一个。对我来说,以逻辑单元存储文件似乎是最合理的。段落是一个逻辑单元,但它太大而无法有效处理。一个句子是逻辑单元的下一个大小,大约是对的。

这实际上是更简单的一个,因为它不是脚本,而是简单的一行 perl 替换。

[filter "sentencebreak"]
    clean = perl -pe \"s/[.]*?(\\?|\\!|\\.|'') /$&%NL%\\n/g unless m/%/||m/^[\\ *\\\\\\]/\"
    smudge = perl -pe \"s/%NL%\\n//gm\"

带有属性*.tex filter=sentencebreak

但是,当我使用perl -pe "that long line" &lt; test.tex 运行替换而不是在每个句点打印换行符时,它会在每个空白处打印\n(并且只留下句点)。我发现\\n 似乎正在转义换行符。将其更改为 \n 会导致它产生换行符,但它仍然会在空白处中断,这不是我想要的。

仔细观察那个 perl 替换(我不擅长 perl),我发现它转义了标点符号。删除额外的\“混合”那部分。

【问题讨论】:

  • *.tex filter=wordbyword (k => d).
  • 我假设这是对我需要做的事情的简要说明,但我不确定我理解您所说的“(k=>d)”是什么意思。
  • 哦!我懂了。一个错字。我会解决这个问题,看看它是否有效。我也会检查另一个(我真正想要的)的那种东西。谢谢。那并没有解决问题。它仍然什么都不做。

标签: git perl


【解决方案1】:

我觉得很傻。有人指出存在拼写错误。在纠正这个错误的过程中,我发现我忘记了 /home/nero/.config/.git/attributes 中的全局属性文件。

两个项目现在都按预期工作。

需要明确的是,问题在于太多的配置文件说同样的事情让 Git 感到困惑。

【讨论】:

  • 感谢您告知我们
猜你喜欢
  • 2015-09-25
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多