リポジトリに接続し、コミットのリストをダウンロードしてローカルに保存するPHPツールを作成しています。ただし、特定のリポジトリが巨大であり、ログを取得すると長時間待機する可能性があるためです。時間とタイムアウト/エラーの可能性があるため、非同期リクエストを使用して各コミットメッセージをダウンロードしたいと思います。
したがって、改訂履歴には開始点と終了点があり、次のようにすべてのログを取得できます。
svn log -r <from_revision>:<to_revision> <REPO_URL>
...そして、ダウンロードに時間がかかり、解析に長い時間と多くのリソースがかかり、保存に長い時間がかかるほど巨大なXMLファイルになってしまう可能性があります。
開始点と終了点がわかっている場合は、for()ループを作成して、リビジョンを1つずつ取得できます。
svn log -r <revision> ...
ただし、特定のパスにどの特定のリビジョンが存在するかわからないため、エラーが発生します。更新中にそのエラーを無視するようにアプリケーションを作成することはできますが、それは厄介なハックであり、とにかくリクエストを投稿して応答を待ちます-これはまったく良くありません。
だから、私はこのようなものが必要です:
そうすれば、リポジトリパスの有効なリビジョンの配列を作成し、それらを1つずつ取得できます。
事前に感謝し、すべての提案を歓迎します。
私はあなたの最善の策は次のことをすることだと思いますsvn log -l 100 0:{$newest} .\
指定されたディレクトリまたはファイルの最初の100個のログを取得します。次に、返された最後のリビジョン番号を読み取り、次の100を要求しますsvn log -l 100 {$last_ret_log}:{$newest} .\
そうすれば、リクエストごとに99の新しいログエントリを取得できますが、すべてを取得することはできません。
私はちょうど同様の結果を得ようとしています。特定のブランチのすべてのリビジョン番号が必要です。
以下は非常に役立つと思いました。
svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv
これにより、すべてのリビジョン番号が別々の行にあるファイルが得られます。
うまくいけば、あなたや他の誰かがそれが役立つと思うでしょう。
私たちのリポジトリには25000以上のリビジョンがあり、このファイルを作成するのに数秒かかります。
Subversionサーバーのリポジトリツリーにアクセスできる場合は、svnlook history
を使用してリビジョン番号のリストを取得できます。
詳細については、 http://svnbook.red-bean.com/en/1.1/re49.html を参照してください。
svn list
を確認することをお勧めします。だからあなたの目的のために:
$ svn list --verbose file:///var/svn/repos
16 sally 28361 Jan 16 23:18 README.txt
27 sally 0 Jan 18 15:27 INSTALL
24 harry Jan 18 11:27 examples/
これは、ファイルの最後の(ヘッド)リビジョンを一覧表示します。
svn log url -l limitNumber - r fromReversion:toReversion
たとえば、次の古い(小さい)復帰(バージョン)を見つけたい場合
svn log url -l 4 -r someVersion:1
or
svn log url -l 4 -r 99: 3
uが次のより新しい(より大きな)reversion(バージョン)を見つけたい場合は、toReversionよりも大きいfromReversion
svn log url -l 4 -r someVersion:head
or
svn log url -l 4 -r 3:99
fromReversion lower than toReversion