2013-10-09 9 views
28

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

+1

[私はSVN作業コピーレイアウトのバージョンをどのように決定するのですか?](http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-version) ) –

+1

この質問に対するより一般的な答えは既に存在します:http://stackoverflow.com/questions/1364618/how-do-i-determine-svn-working-copy-layout-v ersion –

+0

* [SVN作業コピーレイアウトのバージョンを確認するにはどうすればよいですか?](http://stackoverflow.com/questions/1364618)*。 –

答えて

41

私はしばらくこのことに疑問を抱いていましたが、SQLiteデータベースを見てもどこでも答えを見つけることができませんでした。だから私はバージョンが実際にデータベースに格納されていることを知ったSubversionのソースコードを調べてしまいました。私はちょうど正しい場所を探していませんでした。

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 documentationがあるによると、PRAGMA文のさえ知らなかった...

... SQLiteの固有のSQL拡張機能:ここにsubversion/libsvn_subr/sqlite.cから関連するスニペットですSQLiteライブラリの操作を変更したり、SQLiteライブラリに内部(テーブル以外の)データを問い合わせるために使用されます。したがって

、作業コピーのルートに... ...

sqlite3 .svn/wc.db "PRAGMA user_version" 

をあなたが行うことができますPATH上のSQLiteの合理的に最新のバージョンを想定し、歩留まりその後、意志例えばSubversion 1.8.13の場合は29、Subversion 1.8.0の場合は31です。残念ながら、サブバージョンバージョンにuser_versionを関連付けるリストはないようですが、フォーマットの変更が実際にどのようなものになっているかに興味がある場合は、subversion/libsvn_wc/wc-metadata.sqlの形式20以降のソースで説明されています。

更新1:は、SQLiteの実行せずにuser_versionの値を取得する方法についての質問への対応:SQLite file format specificationに指定されているあなたはでDWORDを読む必要は(「1.2データベースを参照してください、データベースファイルに60をオフセットヘッダ")。テキスト/バイナリファイルビューアで表示する方法をさらに明確にする:

Update 2の現在のバージョン番号は、単一バイト(すなわち、それらは255よりも小さくしている)とAにまだかなり低いとフィットしているので、 DWORDの長さは4バイトですが、現時点では最下位バイト(バイト番号64)で十分です。以下は、Subversion 1.8.0作業コピーのSQLiteデータベースファイルでどのように見えるかを示したスクリーンショットです。これは既に上記のようにuser_version31です。

Subversion 1.8.0 SQLite database in Text viewer

アップデート3:私は常に問題で、Perlや、このようなを投げ避けるために、コマンドラインツールで、このような「バイナリクエリ」を行う方法を探していました。 Turns out there's a *nix utility for that called od(そして、私もwin32ポートのコレクションに入れました!)

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

これます再び出力31のSubversion 1.8.0用など:odはこのようなuser_versionの最下位バイトを得ることができます。

-2

これに関するドキュメントは見つかりませんでしたが、簡単な答えは可能です。ファイル\.svn\formatを見つけてください。たとえば、番号12は、作業コピーがSVN 1.8形式であることを意味します。 SVN 1.7の場合は、11が表示されます。

+3

-1これはそうではありません。Subversion 1.7.13と1.8.0で試してみましたが、両方とも 'format'ファイルに' 12'を出力しています。 – zb226

+1

これらのバージョンは実際に同じリポジトリ形式を共有している可能性があります。 – prodigitalson

+1

それでも、1.7と1.8 WCを区別することはできません。あなたは1.8の1.7 WCで動作することはできません。 – zb226

15

の.svn /形式が存在する場合、その中の数読み取る:の.svn /形式が存在しない場合

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

を次にバージョン番号の.svn /エントリの最初の行にある:

Version 10 is SVN 1.6 
Version 12 is SVN 1.7 
+3

それは私が試みたものですが、私のSVN 1.7とSVN 1.8作業コピーの両方がバージョン12を表示しているようです。 –

+0

@ThomasS。両方の作業コピーが異なるSVNであることは確かですか? – Shafeeque

+0

これは、形式が1.7から1.8に変更されたため、互いに互換性がありません。 – mliebelt

関連する問題