我有一个在SVN下版本化的文件夹,让我们说100个不受版本控制的文件 - 大约10个。
在svn版本1.6.6上,如果我输入svn status
,我会收到带有问号的?
或已修改/添加的文件M
/ {{1 - 但我看不到版本化但未更改的本地文件。 A
上线,并检索说出四个版本化文件的名称(但不是全部十个)。
我是否可以在命令行上使用命令,因此svn列出了给定本地目录中哪些文件受版本控制?
非常感谢任何答案,
干杯!
答案 0 :(得分:13)
svn ls
将列出所有文件。如果您没有看到您期望的所有文件,可能它们不在最新版本中,在这种情况下使用--revision
指定修订版,或者可能它们在文件夹中,因此您必须包含{{1 }}
否则,如果你不想使用--recursive
,你可以在bash中写一个单行,这样你就可以减去普通svn ls
和ls
条目的输出对于未跟踪的文件。
答案 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允许的其他疯狂功能相互作用。