0

TL;DR SVN リポジトリへの URL がある場合、特定のリビジョン番号以降に変更されたファイルへのすべてのパスをどのように差し引くことができますか?

長い話: SVN リポジトリからいくつかのファイルをダウンロードするスクリプトがあります。これは「n」時間ごとに行われます。ただし、ファイルを 1 つだけ変更した場合は、すべてを再ダウンロードする必要はなく、そのファイルだけです。PySVN ですべてのファイルをチェックして、リビジョン番号が変更されているかどうかを確認しようとしましたが、時間がかかりすぎます (6 つのファイルを含むフォルダーの場合、約 20 秒かかります)。これを改善する方法はありますか?

私は PySVN を使用して Python で作業しています。pysvn.Client.log に 'changed_pa​​ths' 属性があることを確認しましたが、それを処理する方法がわからないようです :\ このプログラムは Linux と Windows の両方で実行されるため、ソリューションはクロスプラットフォームでなければなりません (可能であれば) )

4

2 に答える 2

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 の少なくとも 1 つのログが常に返されます。それを無視するか、last_revision+1 を使用して、リビジョンの欠落に関する svn からのエラーをキャッチすることができます。

pysvn.Client().update() は、作業コピーに変更を加える最もスマートな方法を示します。

どのフォルダーから開始するかを選択し、深度機能を使用して必要なフォルダーのみを取得することを組み合わせることで、レポ全体の一部のみをチェックアウトできることに注意してください。例えば:

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

その後、ファイルを最新の状態に保つために update() を使用するだけです。

Barry Scott pysvn の作者。

于 2016-08-16T11:14:51.497 に答える
1

この要約は、あなたが自転車を再発明しようとしていると思わせます。データをエクスポートする代わりに、作業コピーをチェックアウトして更新するだけです。それが作業コピーと更新コマンドのタスクです。

ところで、PySVN の代わりに公式の SWIG Python バインディングを使用した方がよいでしょう。

于 2016-07-25T13:12:29.603 に答える