4

我怎么能让 SVN 列出曾经提交到存储库的所有文件(如果可能,连同位置和修订版)。

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

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

例子

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

在执行所需的任务(我正在寻找的解决方案)之后,我不仅应该得到. SomeFileTwo.txt,而且应该得到SomeFileOne.txt.

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

4 回答 4

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.

于 2009-11-08T02:35:54.423 回答
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

是的,文件列表对于自动化处理可能还不完美,但如果我可以这么说的话,它与日志输出相比还有很长的路要走。享受。

于 2013-08-08T08:24:18.873 回答
2

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

于 2009-11-09T03:22:41.907 回答
0

如果您只是想四处浏览,您可能会使用 svn 网络访问工具之一获得您想要的东西。在这里写了一篇综述。

于 2009-11-08T01:56:08.293 回答