有什么好的 (或者最好是您认为最好的) 方法可以使 subversion 差异化和合并 LaTeX 感知?
我知道 latexdiff 和 latexrevision 存在,但我不清楚如何将它们作为正常 subversion 合并工作流的一部分。特别是因为您必须编辑生成的文件以指定您想要的更改。如果有某种方法可以设置 subversion 或 TortoiseSVN 来自动执行此操作,那就太好了。
我将要合并一些相当大的文档,并且我不希望我的合作者有任何关于维护换行符等方面的纪律。我最近才了解到这一点。
首选 Windows 工具。我有带 X 的 Cygwin 和 Windows svn 客户端,所以我可以使用 UNIX 工具。
答案1
编辑:Subversion 和 Git 的代码可在此处找到:https://github.com/suomela/gitwdiff
为了差异我已经成功地使用了以下方法。这是不是可以识别 Latex,但它似乎与 Latex 文档(以及 Bibtex 文件)配合得很好。我在 Linux 和 Mac OS X 上都用过它。
它基于单词,因此不关心换行符。例如,您可以将每个段落作为源代码中的很长一行;即使这样,diff 输出也将易于阅读且简洁。它使用颜色编码输出:
- 红底白字:已删除
- 黄色背景上加粗黑色:已添加。
它是为黑白终端设计的;定制颜色代码如果需要的话。
如果您进行了非常广泛的更改,有时最好使用通常的 diff。尝试一下,看看会发生什么。
用法:
只需写成
svnwdiff
而不是svn diff
。如果您需要寻呼机,请将输出传输到
less -R
而不是less
。
例子:
- 您只需简单书写
svnwdiff
即可看到所有本地更改。 svnwdiff -c6445 foo.tex
您可以像使用一样使用svn diff -c6445 foo.tex
。svnwdiff -c6445 foo.tex | less -R
如果您需要传呼机请写信。
将以下 shell 脚本放入您的$PATH
:
svnwdiff:
#!/bin/sh
exec svn diff --diff-cmd="mywdiff" "$@"
差分:
#!/bin/sh
# Ignore all flags
while getopts uL: flag; do true; done
shift $(($OPTIND - 1))
esc=`printf '\033['`
wdiff -n -w "${esc}41;97m" -x "${esc}m" -y "${esc}1;103m" -z "${esc}m" "$@" | fgrep -C2 "$esc"
最后,你还需要差分工具。如果您使用的是 Ubuntu 或 Debian,只需安装“wdiff”包。在 Mac OS X 上,“port install wdiff”应该可以解决问题。
如果您在操作过程中遇到问题,请尝试以下操作:
- 首先确保“wdiff foo bar”之类的命令可以正常工作。
- 然后确保“mywdiff foo bar”可以正常工作。
- 只有在此之后才尝试让“svnwdiff foo”工作。
为了合并,我发现最好的解决方案是不需要合并。我倾向于使用电子邮件、Skype 等来协调谁在文档的哪些部分获得了写入令牌。如果所有协调努力都失败了,我会使用上述 diff 工具来找出谁做了什么,然后手动集成。
答案2
在 Windows 上有一个工具叫超越比较(http://www.scootersoftware.com/),它是一个很好的差异和合并工具。