我正在尝试应用在this SO answer中看到的解决方案。我也尝试过使this solution to the same question正常工作,但是在两种情况下都没有成功。这两个都使用“清除/涂抹”属性过滤器。
目标是提高Git处理要处理的文件(LaTeX)的能力。
“您做了什么”的简短答案是“解决方案据说要做什么”,但是如果我忽略了某些内容,我将对其进行详细介绍。
我研究过的一个潜在问题是答案过时的可能性。通过查看Git Attributes Documentation,我认为可能唯一已经过时的是配置文件的位置。因此,我在回购的根目录中同时有一个.gitattributes
文件和一个.git/info/attributes
文件。我也只尝试了其中一种。
虽然我不是希望获得解决方案的解决方案,但我认为我应该尝试不止一个,以期更好地识别出问题所在。我选择遍历此脚本,因为至少可以使脚本在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
时,输出是预期的。
经过一番摸索,我发现实际上DID有两个文件告诉Git .tex文件需要做什么。我把一个放在全球的位置。哎呀。现在这个作品。 。 。以及下一个。至少用于清洁。在回答自己的问题之前,我现在要先检查一下污点。
这是我更喜欢的那个。对我来说,以逻辑单元存储文件似乎是最合理的。段落是一个逻辑单元,但其太大而无法有效处理。句子是逻辑单元的下一个大小,大约是正确的。
这实际上是更简单的方法,因为它是脚本的简单一行替换,而不是脚本。
[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不好),我发现它避开了标点符号。删除多余的\
“混合”了该部分。
答案 0 :(得分:2)
我觉得很傻。有人指出,这是拼写错误。在纠正此错误的过程中,我发现我忘记了/home/nero/.config/.git/attributes的全局属性文件。
这两个项目现在都按预期工作。
需要明确的是,问题在于配置文件太多,这说明同一件事使Git感到困惑。