我最近在CVS中偶然发现了一个很酷的功能,您可以按日期命名修订版,例如:
# List changes made between the latest revision 24 hours ago and now
cvs diff -D "1 day ago"
任何其他存储库系统(例如Git,SVN,Bazaar,Mercurial等)都有这样的选项吗?
答案 0 :(得分:2)
Subversion具有类似的功能。例如:
svn diff -r {2010-07-31}
语法在http://svnbook.red-bean.com/en/1.5/svn.tour.revs.specifiers.html#svn.tour.revs.dates
中解释答案 1 :(得分:1)
Mercurial有多种日期格式:http://www.selenic.com/mercurial/hg.1.html#date-formats,但可能不是“1天前”。
This subversion bug report表示Subversion无法以原生方式执行,但确实提供了使用date
执行此操作的提示:
(2)虽然Subversion不理解-r“{3天前}”,但是日期可以 也请帮忙:-r“{
date -Is -d '3 days ago'
}”。
答案 2 :(得分:0)
(回答我自己的问题)
git log支持在给定时间之前或之后进行过滤的日期。例如:
git log --after='july 17 2010' --before='july 31 2010'
这是一个shell脚本,它使列出提交范围变得容易一些,但它也使用了比git log默认格式更简洁的格式:
#!/bin/sh
# git-changes
FORMAT='%cd%x09%h%n%x09%s%n'
CMD="git log --format=format:$FORMAT"
case $# in
0 )
$CMD ;;
1 )
$CMD "--after=`date -d "$1"`" ;;
2 )
$CMD "--after=`date -d "$1"`" --before="`date -d "$2"`";;
esac
注意:我使用date命令包装了日期参数,因为由于某种原因,git将'July 17'
视为距离'July 17 2010'
几个小时。
用法:
git-changes # Same as git log, but more terse
git-changes 'yesterday' # List all commits from 24 hours ago to now
git-changes 'jul 17' 'aug 1' # List all commits after July 17 at midnight
# and before August 1 at midnight.
git-changes 'jul 17' 'aug 1'
的示例输出:
Sat Jul 31 23:43:47 2010 -0400 86a6727
* Moved libcurl into project directory as static lib.
Sat Jul 31 20:04:24 2010 -0400 3a4eb10
* Added configuration file support.
Sat Jul 31 17:44:53 2010 -0400 aa2046b
* Fixed truncation bug in bit parser.
Sat Jul 17 00:10:57 2010 -0400 99e8124
* Added support for more bits.
现在,要查看提交99e8124引入的所有更改,请键入git show 99e8124
。要查看自修订版99e8124以来的所有更改(不包括该提交本身),请键入git diff 99e8124
。