我正在开发一个与 git diff 一起使用的脚本,以便能够“过滤掉”只是在文件中移动的行。使用 Designer 文件时,Visual Studio 2008 变得很痛苦。有时似乎坚持以不同的顺序重写整个文件。这使得很难看到文件的实际更改。我正在将 git diff 输入脚本以调整 git diff 的输出。我可以从输出中删除线条,也可以用不同的符号替换 +/- 来表示移动,但我不确定要使用哪些符号。
1 回答
这不是问题的答案,而是所描述问题的可能替代解决方案。
我不熟悉 Visual Studio 2008 或 Designer 文件,但我遇到了一个解决方案,我想在 git 中存储由另一个程序生成的文件。某些文件中的行顺序根本不重要。在其他文件中,顺序并不重要,但简单的排序是不够的,因为它包含嵌套的数据结构。
我的解决方案是利用 git 中的过滤器在文件内容提交之前对其进行更改。这被配置为两部分。首先,您需要使用.gitattributes
文件为文件分配过滤器。
*.list filter=sort
接下来需要在配置文件中定义过滤器的行为。这可以在您的用户配置中完成,也可以~/.gitconfig
在 repos 配置中完成.git/config
。这只是本地的,不会作为 repo 的一部分自动与其他人共享,因此如果您希望其他人也这样做,那么您需要告诉他们。
[filter "sort"]
clean = sort
smudge = cat
这个简单过滤器的结果是,当文件被提交到 repo 时,而不是从创建它们的程序中按随机顺序排列的行,它们按字母数字排序,只有添加、删除和更改出现在差异中。
现在我提到我有两种不同的文件类型,两种可以使用,一种是简单的,一种是复杂的。对于包含嵌套数据类型(特别是 Lua 表)的复杂数据类型,我创建了(在其他人的大量帮助下)一个脚本来读取文件内容,对每个嵌套部分进行排序,并在不改变行为的情况下输出排序结果当这些数据后来被使用时。