如何列出已提交到存储库的所有文件?

时间:2009-11-08 01:18:07

标签: svn search repository revision

我怎样才能让SVN列出所有曾经提交到存储库的文件(如果可能的话,还有位置和版本)。

更确切地说:我需要所有曾存在的路径。

如果有人知道如何在整个存储库中进行全文搜索(包括所有修订版),这将有助于我做得更好。

实施例

假设我提交了一个文件SomeFileOne.txt,稍后将其重命名为SomeFileTwo.txt

执行完所需任务(我正在寻找哪种解决方案)后,我不仅应该SomeFileTwo.txt,还应该SomeFileOne.txt

...
/trunk/SomeProject/SomeFileOne.txt - revision 100
/trunk/SomeProject/SomeFileTwo.txt - revision 101
...

4 个答案:

答案 0 :(得分:3)

通过玩耍找到了一些东西。

缓慢而肮脏的解决方案可能是:

svnadmin dump MY_REPO | grep Node-path

输出如下:

* Dumped revision 3039.
Node-path: trunk/proj1/src/p/keywords/main/NoOp.java
Node-path: trunk/proj1/src/p/keywords/main/ScopeDecl.java
* Dumped revision 3040.
Node-path: trunk/myCommons/src/i/IConverter.java
Node-path: trunk/myCommons/src/i/ListUtils.java
* Dumped revision 3041.
Node-path: trunk/proj1/src/p/execution/impl/IterativeExecuter.java
Node-path: trunk/proj1/src/p/keywords/DeclConstant.java

好吧,至少它解决了我的问题。

注意:显示Dumped revision ...,因为它是stderr

答案 1 :(得分:3)

对于svn log -v的改进的结构化输出,请使用以下bash脚本:

$ svn log -v | egrep '^   A' | cut -c 6- | sort | uniq

说明:

  • 获取给定路径的整个svn日志
  • 仅选择以“A”开头的行,这是添加文件的svn日志输出。
  • 删除前5个字符,这是上面提到的添加信息
  • 对输出进行排序
  • 删除重复的行(例如,如果稍后读取文件)

这也适用于结帐的子路径,如果您提供存储库路径,则根本不需要结帐:

$ svn log -v https://github.com/schacon/kidgloves/ | egrep '^   A' | cut -c 6- | sort | uniq

结果:

/branches
/branches/testing (from /trunk:17)
/trunk
/trunk/README
/trunk/example.rb
/trunk/kidgloves.rb
/trunk/simple_rack.rb

是的,文件列表可能不适合自动处理,但如果我可以这么说,它只是从日志输出中走了很长一段路。享受。

答案 2 :(得分:2)

对我来说,svn log -v本来是一种更直观的方法 - 或者你已经尝试过了吗?是否有可能分享对存储库中所有文件提交要求如此广泛报告的需求?

答案 3 :(得分:0)

如果您只是想浏览一下,您可以通过其中一个svn Web访问工具获得您想要的内容。综述为written up over here.