问题描述
最近使用svn
的时候经常使用svn diff
命令来对比base
和working 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版本库里的文件进行说明的方法。