git - 无法应用 git 属性过滤器

标签 git perl

问题

我正在尝试应用 this SO answer 中看到的解决方案。我也尝试过获取 this solution to the same question工作,但这两种情况我都没有成功。这两个都使用 clean/smudge 属性过滤器。

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

我做了什么

简短的回答“你做了什么”是“解决方案说要做什么”,但是如果我忽略了某些内容,我会详细说明。

我研究过的一个潜在问题是答案可能已经过时。从看Git Attributes Documentation我认为唯一可能过时的是配置文件的位置。因此我有两个 .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" < test.tex 运行替换时它不是在每个周期都打印换行符,而是打印 \n在每个空白处(并且单独留下句点)。我确定了\\n它似乎正在逃避换行符。将其更改为 \n导致它产生换行符,但是它仍然在空白处中断,这不是我想要的。

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

最佳答案

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

这两项现在都按预期工作。

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

关于git - 无法应用 git 属性过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623143/

相关文章:

linux - 如何为 GIT 存储库中的文件创建符号链接(symbolic link)

windows - Git 发出警告 : unable to rmdir

git - Netbeans:COMMIT [HEAD] 不存在

Perl DBI 和 sql now()

perl - 在另一个 Perl 脚本中执行多个不定 Perl 脚本

PHP exec() git fetch 失败,返回值 255

svn - Git: merge 两个不同的独立 repo

multithreading - Perl 中 ithreads(解释器线程)的用例以及使用或不使用它们的理由?

perl - perl hash 可以有多少个元素?

perl - 高级 perl 语法 - Mojo::DOM