我正在创建一个脚本来查找SVN存储库中的所有文件,并显示每个文件的第一个输入日期。
我正在尝试使用此help,但只显示存储库中的第一个条目,并且没有显示第一次修订后传入的文件的第一个条目。
¿我是怎么做到的?
答案 0 :(得分:0)
如果您首先获取存储库中所有文件的列表,然后为每个文件应用solution you've mentioned,则可以使用solution。如果你在回购中有很多文件,那将会非常缓慢。
更快的选项可能是获取repo的整个svn日志并分析输出。
svn log <repo_URL> --verbose -r 1:HEAD
svn log
将提供有关修订及其日期的信息。
--verbose
选项将为您提供有关每个修订版本的已添加文件的信息。
------------------------------------------------------------------------
r31 | harry | 2003-01-10 12:25:08 -0600 (Fri, 10 Jan 2003) | 1 line
Changed paths:
A /trunk/src/bar.c
Added new file bar.c
这样您可以相对快速地收集所需信息。如果您可以轻松解析xml,则选项--xml
可能对您有用 - 这样svn log
输出结构清晰,可能更容易解析。
答案 1 :(得分:0)
所以不一定是效率最高的,但是这个shell脚本应该为你解决这个问题。它迭代repo中的每个文件,并运行svn log
以获取每个文件的第一个条目。需要运行一点,但如果它只需要一次左右它确实提供了良好的输出(我使用gawk因为我被困在solaris上,但是常规的旧awk也可以在正常上工作得很好unix box)。
#!/bin/bash
cd /path/to/local/copy
for file in `svn ls -R`
do
#the this if then only needed if you don't want directories listed in output
if [ -f $file ]
then
printf "${file}: "
echo `svn log -q ${file} --incremental | gawk 'END { print $5" "$6}'`
fi
done
答案 2 :(得分:0)
使用find piped to grep会做一个很好的报告:
find . -not -path '*/\.*' -type f \
-exec echo Filename: '{}' \; \
-exec svn log -r 1:HEAD --limit 1 "$@" '{}' \; \
| grep -A 2 -B 1 Filename:
使用“-not -path”* /。*'“不包括.svn目录。感谢'-r 1:HEAD -limit 1'位comes from CMS's answer to 'SVN: How to get the first revision of a file?'。
示例输出:
Filename: ./asn.php
------------------------------------------------------------------------
r1 | dregal | 2005-02-28 15:27:17 -0800 (Mon, 28 Feb 2005) | 1 line
--
------------------------------------------------------------------------
Filename: ./asn_edit.php
------------------------------------------------------------------------
r1149 | dregal | 2009-07-03 12:16:56 -0700 (Fri, 03 Jul 2009) | 3 lines
--
------------------------------------------------------------------------
Filename: ./asn_list.php
------------------------------------------------------------------------
r1149 | dregal | 2009-07-03 12:16:56 -0700 (Fri, 03 Jul 2009) | 3 lines