10

我使用带有 Subversion 的外部 diff 工具(超越比较规则!),其中一个很棒的功能是能够使用 diff 程序对文件进行一些小的编辑,因为我正在查看我所做的更改。

svn diff在我的不同项目上工作方式不同。总之,左边的文件是一个临时文件,包含存储在 Subversion(头)中的最新版本。但在某些情况下,右侧文件是实际的工作文件,而在其他情况下,它是工作文件的临时文件副本。在第一种情况下,我可以在 diff 程序中进行更改,它们会影响工作副本。在第二种情况下,我正在编辑一个临时文件,因此更改会丢失。

为什么 Subversion 有时会与工作文件比较,但有时会与工作文件的临时副本比较?如何让它始终使用工作文件?

4

3 回答 3

12

您是否在这些文件上设置了任何 svn:keywords ?如果是,那么 Subversion 将首先创建一个临时文件,其中包含所有扩展关键字“未扩展”。这是为了避免所有关键字行显示为不同,即使它们没有更改。

例如,如果您将工作副本中的文件与 BASE 进行比较,则 BASE 文件没有扩展关键字(并且也使用 LF 行尾存储),而工作副本中的文件具有扩展的所有关键字(并且可能使用 CRLF 存储线尾)。如果您没有在本地修改该文件,“svn diff”会将所有行显示为不同(如果行尾不匹配),或者至少所有带有关键字的行都将显示为不同 - 这不是您想要的预计。

于 2008-12-28T15:37:10.487 回答
0

也许有一些访问问题。尝试将文件设置为只读,如果 svn 现在打开一个临时文件,这是您问题的一个可能答案。在这种情况下,您使用的某些编辑器/IDE 可能会对文件进行写保护。

于 2008-12-28T14:01:56.653 回答
0

这封电子邮件谈到了替代解决方案。 使用 $5 而不是 $7 来避免为 $svn diff 创建临时文件。通过 $5 后,在使用 --diff-cmd 执行 $svn diff 时,它使用本地文件而不是 tmp 文件。

我尝试过这个。它确实将本地文件与 svn repo 中的远程文件进行比较。在更改为 5 美元(从 7 美元)之前。Meld 总是比较两个临时文件。

示例

来自

$svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare

$ cat /usr/local/bin/svn-diff-meld
#!/bin/sh
# SVN Diff Wrapper for Meld

left="$6"
right="$7"
meld "$left" "$right"

$svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare

$ cat /usr/local/bin/svn-diff-meld
#!/bin/sh
# SVN Diff Wrapper for Meld

left="$6"
right="$5"
meld "$left" "$right"
于 2020-06-12T11:58:00.423 回答