33

.svnSVN ツールを使用せずに内部のファイルを調べて、作業コピーのバージョン (SVN 1.7 と 1.8) を確認するにはどうすればよいですか?

4

3 に答える 3

47

私はしばらくこれについて疑問に思っていましたが、SQLite データベースを見ても、どこにも答えが見つかりませんでした。そのため、最終的に Subversion のソース コードを調べたところ、バージョンが実際にデータベースに保存されていることがわかりました。正しい場所を調べていませんでした。からの関連するスニペットは次のsubversion/libsvn_subr/sqlite.cとおりです。

svn_error_t *
svn_sqlite__read_schema_version(int *version,
                                svn_sqlite__db_t *db,
                                apr_pool_t *scratch_pool)
{
  (...)
  SVN_ERR(prepare_statement(&stmt, db, "PRAGMA user_version;", scratch_pool));
  (...)
}

SQLiteのドキュメントPRAGMAによると...

...SQLite に固有の SQL 拡張機能であり、SQLite ライブラリの操作を変更したり、内部 (非テーブル) データについて SQLite ライブラリにクエリを実行したりするために使用されます。

PATHしたがって、あなたができるSQLiteの合理的に最新のバージョンを想定して...

sqlite3 .svn/wc.db "PRAGMA user_version"

...作業コピーのルートに配置すると、たとえば29Subversion 1.7.13 および31Subversion 1.8.0 の場合に生成されます。残念ながら、Subversion のバージョンに関連するリストはないようですが、形式の変更が実際にどのようなもので構成されているかに興味がある場合は、形式 20 以降user_versionのソースで説明されているものを見つけることができます。subversion/libsvn_wc/wc-metadata.sql

更新 1: SQLite 実行可能ファイルを使用せずに の値を取得する方法に関する質問への対処: SQLite ファイル形式の仕様で指定されているように、データベース ファイルのat オフセットuser_versionを読み取る必要があります(「1.2 データベース ヘッダー」を参照)。DWORD60

更新 2:255テキスト/バイナリ ファイル ビューアーで表示する方法をさらに明確にする: 現在のバージョン番号はまだかなり低く、1 バイトに収まるため (つまり、DWORD.現時点では、バイト番号である最下位バイトを確認します6431以下は、Subversion 1.8.0 の作業コピーの SQLite データベース ファイルでどのように見えるかを示すスクリーンショットですuser_version

Subversion 1.8.0 テキスト ビューアーの SQLite データベース

更新 3:問題で perl などをスローするのを避けるために、コマンドライン ツールを使用してこのような「バイナリ クエリ」を実行する方法を常に探していました。それを呼び出すための *nix ユーティリティがあることがわかりましたod(そして、win32 ポートのコレクションにもありました!)。次のようodに最下位バイトを取得できます。user_version

od -An -j63 -N1 -t dC .svn/wc.db

31これは、Subversion 1.8.0 などで再び出力されます。

于 2013-10-09T12:40:16.203 に答える
17

.svn/format が存在する場合は、その中の番号を読み取ります。

Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5

.svn/format が存在しない場合、バージョン番号は .svn/entries の最初の行にあります:

Version 10 is SVN 1.6
Version 12 is SVN 1.7
于 2013-10-09T12:47:01.453 に答える
-4

これに関するドキュメントは今のところ見つかりませんが、簡単に言えば、できるということです。\.svn\formatファイルを覗く。たとえば、数値12は作業コピーが SVN 1.8 形式であることを意味します。SVN 1.7 であれば、そこに表示されると思います11

于 2013-10-09T10:48:41.563 に答える