SVN:如何在Subversion的变更列表中列出所有文件?

时间:2011-02-08 20:07:49

标签: svn command-line

如何获取SVN更改列表中的文件列表,除文件列表外没有其他信息?

我想要一个变更列表中的文件列表,其格式可以在Bash的$()中使用。我从svn st --cl 3011开始,它列出了文件但是有很多额外的垃圾:

  

在'foo'

的外部项目上执行状态      

?富/酒吧

     

在'foo / bar'

上执行外部项目的状态      

---更改列表'3011':

     

M src / math / math.cc

     

src / math / determinant.cc

     

src / math / determinant.h

     

M src / math / matrix.h

尝试使用sed或awk进行解析是很多信息,我担心我会搞砸它并最终错过更改列表中的文件或添加不在更改列表中的内容。 -q没什么用。

有没有办法让svn给我src/math/math.cc src/math/determinant.cc src/math/determinant.h src/math/matrix.h

谢谢, 伊恩

5 个答案:

答案 0 :(得分:3)

这样做:

svn st --changelist 3011 | grep -v Changelist | cut -b 3-

svn st --changelist将打印更改列表的名称以及文件状态和文件名:

--- Changelist 'cl_name':
M       file1
A       file2

现在您可以通过首先使用“grep -v Changelist”删除第一行来编辑它,该行删除带有Changelist一词的行。然后执行“cut -b 3-”删除每行的前几个字符。

使用完整命令,您将获得:

 file1
 file2

答案 1 :(得分:1)

如果您不介意每次进入一个目录,则可以按目录进行操作:

svn status lib | awk '{print $2}'

你把lib替换为有问题的目录。

答案 2 :(得分:1)

使用--ignore-externals和--cl!

您不需要使用grepawk等任何外部工具。这其实很简单!

命令--ignore-externals会删除svn status调用中的所有额外垃圾,您也可以轻松地将其与--cl参数合并:

svn st --ignore-externals --cl "Changelist Name"

这将忽略所有外部因素,然后只提供您要求的更改列表中的文件。

答案 3 :(得分:0)

至于我知道没有直接的方法(只有svn参数)来做你想要的。但是,您可以依赖 svn stat -v 的输出,并在该路径上从41位置开始。 对于只有移民,以下perl one-liner执行任务:

perl -e "@st=`svn stat -v -N`;foreach $l (@st){print substr($l,41);}"

对于递归状态,只需从svn参数中删除-N。

除了打印出直接文件的所有内容之外,您可能希望将修改后的文件,不在svn下的文件,修订版等分开。在这种情况下,您可以使用 substr(0, 1) - 每个输出的第一个字符。例如,以下单行将输出仅修改文件的列表:

perl -e "@st=`svn stat -v -N`;foreach $l (@st){print substr($l,41) if substr($l,0,1) eq "M";}"

答案 4 :(得分:0)

svn日志-r <版本号> -v