什么其他存储库系统有cvs的-D(日期)选项?

时间:2010-08-01 12:17:00

标签: version-control cvs

我最近在CVS中偶然发现了一个很酷的功能,您可以按日期命名修订版,例如:

# List changes made between the latest revision 24 hours ago and now
cvs diff -D "1 day ago"

任何其他存储库系统(例如Git,SVN,Bazaar,Mercurial等)都有这样的选项吗?

3 个答案:

答案 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