0

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

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

我正在使用 PySVN 在 Python 中工作。看过pysvn.Client.log有'changed_pa​​ths'属性,但是好像不知道怎么处理: )

4

2 回答 2

1

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

顺便说一句,我最好使用官方的 SWIG Python 绑定而不是 PySVN。

于 2016-07-25T13:12:29.603 回答
1

使用 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 )

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

pysvn.Client().update() 将提供最聪明的方法来更改工作副本。

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

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

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

Barry Scott 是 pysvn 的作者。

于 2016-08-16T11:14:51.497 回答