Linux+svn自动为你设置文件头部的注释(转载)
1.在svn里面有一个机制,当你的文件里面有编写$Id之类的东西,当你设置了这个文件的propset之后,svn ci将会自己加上谁修改的,什么日期修改的.
实例:
_main.cpp文件开始一行键入:
在Linux命令行里面输入:
1 | $svn propset svn:keywords "Id" _main.cpp |
Linux控制台里面将会输出:1 | property 'svn:keywords' set on '_main.cpp' |
这个时候已经将svn:keywords设置上了.这个时候去查看文件,其实还没有替换的.当我们输入
提交之后再去看这个文件
输出:
2.问题的提出:我们知道有这个机制了.如果修改很多文件,是不是要老是重复的输入
1 | $svn propset svn:keywords "Id" _main.cpp |
2 | $svn propset svn:keywords "Id" obj.cpp |
3.解决之道:
1 | svn st | grep - v ?| grep cpp| awk '{print($2)}' | xargs svn propset svn:keywords "Id" |
单步解释
$svn st
这个语句将会得到我这一次修改的一些文件情况.
M _main.cpp
A _obj.cpp
M _obj2.lua
? readme.txt
[grep -v ?] 将带 ? 的行过滤掉,因为这个文件不受svn管理;
[grep cpp] 将只会搜索全部 cpp 文件;
这样之后就得到一个这样的列表
M _main.cpp
A _obj.cpp
[awk '{print($2)}'] 这个命令就是将刚才的列表取出纵向第二列;
得到一个这样的列表
_main.cpp
_obj.cpp
[xargs] 通过这个取出_main.cpp _obj.cpp,以它们为参数依次调用
svn propset svn:keywords "Id"
完成了. .
Chapter 3. Advanced Topics
Keyword Substitution
里面对于
Id的描述:
This keyword is a compressed combination of the other keywords. Its substitution looks something like $Id: calc.c 148 2006-07-28 21:30:43Z sally $, and is interpreted to mean that the file calc.c was last changed in revision 148 on the evening of July 28, 2006 by the user sally. The date displayed by this keyword is in UTC, unlike that of the Date keyword (which uses the local time zone).
这也就是让我们看到时间不一致的问题。想看到本地时间。你就要这么设置。Date
$Date$
svn st |grep -v ?|grep cpp|awk '{print($2)}'|xargs svn propset svn:keywords "Id Date"
这个就是支持多个keyword substitution;