SVN - 仅显示版本化的本地文件(命令行)?

时间:2011-11-04 23:36:49

标签: svn command-line

我有一个在SVN下版本化的文件夹,让我们说100个不受版本控制的文件 - 大约10个。

在svn版本1.6.6上,如果我输入svn status,我会收到带有问号的?或已修改/添加的文件M / {{1 - 但我看不到版本化但未更改的本地文件。 A上线,并检索说出四个版本化文件的名称(但不是全部十个)。

我是否可以在命令行上使用命令,因此svn列出了给定本地目录中哪些文件受版本控制?

非常感谢任何答案,
干杯!

2 个答案:

答案 0 :(得分:13)

svn ls将列出所有文件。如果您没有看到您期望的所有文件,可能它们不在最新版本中,在这种情况下使用--revision指定修订版,或者可能它们在文件夹中,因此您必须包含{{1 }}

否则,如果你不想使用--recursive,你可以在bash中写一个单行,这样你就可以减去普通svn lsls条目的输出对于未跟踪的文件。

答案 1 :(得分:0)

最好的解决方案确实是运行以下命令:

svn list --recursive .

但是,这相当慢。我有一个很大的SVN存储库,其中有 26559 个文件,总大小为 7 GB ,该命令几乎需要 4分钟


现代SVN客户端将有关工作副本的信息存储在sqlite数据库中,因此很容易对其进行破解。 这是一个Python脚本,可在不到一秒钟的时间内提取版本控制文件列表(适用于SVN 1.9.5):

import sqlite3
db = sqlite3.connect('.svn/wc.db')
cursor = db.cursor()
cursor.execute("SELECT * FROM NODES")
data = cursor.fetchall()
for row in data:
    filename = row[1]
    if len(filename.strip()) == 0:
        continue
    print(filename)

当然,这是不受支持的hack,因此它很容易破解。极有可能更改SVN WC的次要版本足以破坏它。另外,我不知道该解决方案如何与外部功能,一些稀疏/混合结帐以及SVN允许的其他疯狂功能相互作用。