SVN/ PySVN:获取最后更改文件的路径

SVN/ PySVN: Get path to last changed files

TL;DR 有一个 url 到 SVN 存储库,我如何减去自给定修订号以来已更改的文件的所有路径?

长话短说:我有一个脚本可以从 SVN 存储库下载一些文件。它每 'n' 小时执行一次。 但是如果我只更改了一个文件,我不需要重新下载所有的东西,只需要那个文件。 我试图用 PySVN 检查每个文件,看看修订号是否已更改,但它花费的时间太长(对于包含 6 个文件的文件夹,需要大约 20 秒)。 有什么办法可以改善吗?

我在 Python 中使用 PySVN 工作。我看到 pysvn.Client.log 有 'changed_paths' 属性,但似乎我不知道如何处理它:\ 此程序在Linux和windows上运行,因此解决方案必须是跨平台的(如果可能的话)

这个总结让我觉得你正在尝试重新发明一辆自行车。只需签出并更新工作副本,而不是导出数据。这就是工作副本和更新命令的任务。

顺便说一句,我最好使用 official SWIG Python bindings 而不是 PySVN。

使用pysvn.Client().log() 查找所有更改。例如:

all_logs = pysvn.Client().log( path,
   revision_start=pysvn.Revision( opt_revision_kind.head ),
   revision_end=pysvn.Revision( opt_revision_kind.number, last_revision ),
   discover_changed_paths=True )

这将始终 return 至少一个 last_revision 的日志。您可以忽略它或使用 last_revision+1 并从 svn 捕获有关缺少修订版的错误。

pysvn.Client().update() 将是对工作副本进行更改的最明智的方法。

请记住,您可以通过选择从哪个文件夹开始然后使用深度功能仅获取所需文件夹的组合来签出整个存储库的一部分。例如:

pysvn.Client().checkout( URL, path, depth=pysvn.depth.files )

那么你只需要使用 update() 来保持文件更新。

pysvn 的作者 Barry Scott。