svn 设置keyword导致 diff 修改不了文件

问题描述

最近使用svn的时候经常使用svn diff命令来对比baseworking copy之间的差别。并直接利用vimdiff来对working copy进行修改。在我的svn版本库里通常都是很顺利的。但是今天遇到了一个文件,修改了右侧的文件后代码库中的文件并没有改变。

问题解决

首先检查了vimdiff对比的文件到底是什么。左侧确实是svn版本库里的base内容。右侧是一个系统中的临时文件。

然后检查是什么步骤出现的问题。修改自己编写的用于使用vimdiff来进行svn diff的脚本。直接输出svn diff的结果。查看参数发现是svn diff输出内容有问题。

然后去google了一下,找到了相似情景。stackoverflow上面的帖子

根据说明:

Do you have any svn:keywords set on those files? If yes, then Subversion will create a temp file first which has all those expanded keywords 'unexpanded'. This is to avoid having all the keyword lines shown as different even if they haven't been changed.

For example, if you diff a file in your working copy against BASE, the BASE file has no keywords expanded (and is also stored with LF lineendings), while the file in your working copy has all keywords expanded (and may be stored with CRLF lineendings). If you haven't modified that file locally, 'svn diff' would show all lines as different (if the line endings don't match) or at least all lines with the keywords would be shown as different - which is not what you would expect.

大致意思是使用了svn:keyword之后如果进行svn diff对比的时候,svn会创建一个没有keyword扩展的临时文件来用于对比。这种特性用于避免有keyword的行即使没有被修改,也显示被更改了的情况。

最后的结果是,由于keyword不是被需要的,只要执行:

svn propedit svn:keywords filename

将这个文件的keyword去掉即可。

相关原理

这里我们引入了svn的keyword的概念。svn:keywords的wiki。
这里简述一下svn:keywords
keywords现在主要包括以下几项:

  • $Date: $
  • $Revision: $
  • $Author: $
  • $HeadURL: $
  • $Id: $

具体的说明可以看svn的说明。

效果是在文中出现的$Date$,会被扩展成形如$Date:2016-06-20 16:37:25 +0800 (一, 20 6 2016)$的内容。

svn:keywords给我们一种自动对svn版本库里的文件进行说明的方法。

你可能感兴趣的:(svn 设置keyword导致 diff 修改不了文件)