コラム
Subversion 1.14リリースノート
ページ更新日:2020-06-19
「Apache Subveriosn 1.14リリースノート」
遅ればせながら、Apache Apache Subvesrion 1.14のリリースノートの日本語翻訳を掲載します。冗長な表現などは意訳しています。なお、ご利用にあたって弊社は一切の責任を負いませんので、ご利用者の責任の下にお使いください。
(翻訳:たにやん)
Version1.6からの変遷と今後のリリースサイクルの変更も掲載しています。また、チャンネルもあります、合わせてどうぞ。
Apache Subversion 1.14の新情報
・Python3.xのサポート
・Python2.7のフェードアウト
・ビルド時の依存関係:py3c
・数多くの改善とバグ修正
・本リリースでの既知の問題
Apache Subversion1.14は以前のすべてのSubversionリリースのスーパーセットであり、現在の「ベスト」と見なされるリリースです。 1.0.x〜1.13.xの機能やバグフィックスも1.14に含まれています。また1.14には以前のリリースにはない機能やバグフィックスが含まれています。
1.14は1.10の次のLTSであるため、1.11-1.13での変更を含む1.10からの主要な変更を記載します。
このページでは、大きな変更点についてのみ説明します。変更の完全なリストについては、CHANGESファイルの1.14セクションを参照してください。
コンパチビリティ(互換性)に関して
古いクライアントとサーバーは、1.14サーバーとクライアントと透過的に相互に情報通信が可能です。ただし、クライアントとサーバーの両方が最新バージョンでないと、新しい1.14機能の一部が使用できない場合があります。クライアントが新しくサーバが古い場合は新しい動作は効率的に動作しないことがあります。
リポジトリをdump,reloadする必要はありません。 Subversion 1.14サーバーは、以前のバージョンで作成されたリポジトリに読み書きできます。既存のサーバーをアップグレードするには、最新のライブラリとバイナリを古いものに上書きして下さい。
Subversion 1.14は、新しい機能を追加するだけで、古い機能を削除することなく、以前のリリースとのAPI / ABIの互換性を維持します。以前の1.x APIに対して書かれたプログラムは、1.14のライブラリを使用してコンパイルおよび実行できます。しかし、1.14用に書かれたプログラムは、古いライブラリに対してコンパイルあるいは実行できるとは限りません。
古いAPIの動作が以前のリリースから若干でも変更されたケースは限定されています。これらの機能がバグであるとみなされ、したがって改善または削除されたケースです。これらのAPIの内容と、これらの変更がもたらす影響についての詳細は、API erretaを参照してください。
新機能のコンパチビリティ(互換性)テーブル
新機能 | 最小クライアント1 | 最小サーバー | 最小リポジトリ | ノート |
‘svnadmin rev-size’ | n/a | 1.13 | Any FSFS repo | |
svnadmin build-repcache | n/a | 1.14 | FSFS format 4 | ファイルシステムフォーマットはsvnadmin info /pah/to/repoの出力で確認 |
Shelving(延期)(実験的) | 1.12 | any | any | 1.10との延期とは互換性がない(後述)。 |
コミット・チェックポインティング(実験的) | 1.12 | any | any | |
Viewspec outputコマンド(実験的) | 1.11 | any | any | |
注意: file://リポジトリ、としてアクセスする場合、Subversionはサーバーであり、クライアントでもある。 |
作業コピーのアップグレード
Subversion 1.14は、Subversion 1.8~1.13と同じ作業コピーフォーマットを使用します。
既存のSubversion 1.7かそれ以前の作業コピーでSubversion 1.14を使用する前に、作業コピーのメタデータを新しい形式にアップグレードするため、svn upgradeコマンドを実行する必要があります。このコマンドは、場合によってはしばらく時間がかかる場合があり、ユーザーによっては、新しい作業コピーを単にチェックアウトするほうが実用的かもしれません。
注意: 1.6でsvnクリーンアップを事前に行わなかった為にアップグレードできなかった作業コピーを、Subversion1.14ではアップグレードすることはできません。つまり、1.8以上にアップグレードする前に、1.6以前の古いクライアントを使用して、クリーンアップが必要なすべての1.6以前の作業コピーに対してsvn cleanupを実行する必要があります。同様に、Subversion 1.14は破損した作業コピーをアップグレードすることはできません。 .svnディレクトリ内のメタデータがないか破損しているため、修正不可能な問題が発生する可能性があります。このような作業コピーへのダメージは永続的であり、アップグレード前にsvnクリーンアップを実行しても修正できません。
作業コピーが正常にアップグレードされない場合は、新しいものをチェックアウトしてください。
実験的「延期」機能の変更
1.10以来、Subversionは実験的なShelving(延期)機能を課題#3625に対してアドレスするために提供した。実験的な機能は互換性が保証されません。
1.14における延期機のは1.10で提供されているののとは大きく異なっており、互換性がありません。本書に後述されます。1.10の延期を既存の作業コピーでどうリカバリするかについても後述します。
新機能
‘svnadmin rev-size’ コマンド
本機能は1.13にて追加されました。
‘svnadmin rev-size’コマンドを追加し、バイトで、rev-propsを含むリビジョンのディスクサイズを表示できるようにしました(ただしFSFSインデックスを除く)。例:
$svnadmin rev-size /path/to/repo -r1
1337 bytes in revision 1
(r1857624を参照)
‘svnadmin build-repcache’コマンド
レプレゼンテーションシェアリング(rep-sharing)はデータストレージの非複製機能でSubversion1.6にて導入されました。同一のデータを重複せずに一つだけ保存することでディスクスペースを節約するものです。(課題#2286)
このオプショナルな機能はデフォルトで有効になっています。これは複製状態のファイルを特定するためSubversionが自動的にリポジトリに保持しているrep-cacheデータベースに依存してます。
使用しているうちに、管理者が本機能を無効化したり再度有効化することがありますが、無効化した場合にはその間に行われたコミットについてはrep-cacheの管理からは除外されます。
Subversion1.14は’svnadmin build-repcache’サブコマンドを新しく追加し、管理者がrep-cacheデータベースに存在しないエントリーを指定して(あるいは全て)取り込めるようにしました(r1875921)。
例:
$ svnadmin build-repcache /path/to/repo -r20:25
*Processed revision 20.
*Processed revision 21.
*Processed revision 22.
*Processed revision 23.
*Processed revision 24.
*Processed revision 25.
リビジョンを一つだけ与えた場合はそのリビジョンだけ処理します。
$ svnadmin build-repcache /path/to/repo -r20
*Processed revision 20.
リビジョンを与えない場合には、全てのリビジョンが対象になります。
改善とバグフィックス
コマンドライン・クライアントの改善(クライアント)
svn log の改善
svn log --quiet と--diff
svn log --quiet と --diffオプションは、相互に排他的ではなくなりました。これによ特定レンジのリビジョン間の違いのみをより簡単に表示できるようになりました。(r1871916)
svn info の改善
svn info --show-item に新しいchangelist アーギュメントを追加しました(r1869481)
ユーザ定義エディターへのパス名アーギュメントのエスケープ・クオート
ユーザ定義(user-defined)のエディタを呼び出す場合、例えば対話でコンフリクト(競合)の解消をする場合、Subversionは編集されるファイルのパス名に含まれる全てのスペシャルキャラクターをエスケープします。これはスペースや他の特殊文字を(ファイル名含む)パス名に含むファイルの編集を行った際に発生していた問題を修正します。(r1874057, r1874093, r1875230)
なお、エスケープを行うのはパス名アーギュメントのみです。以前の通り、エディター自身はシェルから呼び出され、それを起動するユーザはコマンドラインを適切にクオート・エスケープしなければなりません。これは意図的なもので、これによりユーザがコマンドライン・アーギュメントを含むシェルコマンドを構成することが可能になります。エディターのパスのスペースやコマンドラインオプションについてはFAQをご参照ください。(https://subversion.apache.org/faq.html#svn-editor)
ユーザ定義エディターは、次の優先順位で定義できます。
- --editor-cmd コマンドライン・オプション
- $SVN_EDITOR 環境変数
- editor-cmd ラインタイム・コンフィギュレーション・オプション
- $VISUAL 環境変数
- $EDITOR 環境変数
例えば、#SVN_EDITORは次のように設定できます。
SVN_EDITOR=’vim -N --’
export SVN_EDITOR
そして、’svn up’がファイル名’foo bar.txt’(fooとbarの間にスペース)に競合を見つけたとします。
$svn up
Updating ‘.’ :
C foo bar.txt
Updated to revision 2.
Summary of conflicts:
Text conflicts: 1
Merge conflict discovered in file ‘foo bar.txt’.
Select: (p) Postpone, (df) Show diff, € Edit files, (m) Merge,
(s) Show all options: e
この状態でSubversionがエディターを立ち上げる際、’vim -N --‘の中にあるスペースはエスケープされず、そのため、vimは’-N’と’--‘という最初の二つのアーギュメントが使えます。が、’foo bar.txt’にあるスペースはエスケープされます。
インタラクティブ・コンフリクト(競合)・リゾルバの改善
1.10で最初に導入されてから、新しいインタラクティブ・コンフリクト・リゾルバは様々改善されてきました。
1.11からは、インタラクティブ・コンフリクト・リゾルバは、移動したディレクトリやファイルに関係したより多くの競合シチュエーションに対応するようになりました。特に、マージ・ソース・ブランチ上でアイテムが移動し”locally missing”とメッセージが出るような、多くのツリーの競合があった場合、自動で解決されるようになりました。
例えば、あるフィアルの編集を(チェリーピックするリビジョンの後に)名前が変更されたファイルからチェリーピックする場合、その編集がマージのターゲットブランチに(そこでの名前が変更されていなくても)適用されるようになりました。詳細は、 課題#4694、"Unresolvable tree conflict when cherrypicking a file-edit after file was moved on source branch"を参照してください。
さらに、1.12 からは、インタラクティブ・コンフリクト・リゾルバは異なる場所に移動した場合のケースにも対応しました。バージョン管理対象ではない作業コピー上のアイテムについても改善されました。下の表は、これらのケースと選択可能な解決のオプションを提示しています。
ローカルの変更 | 入った変更 | オペレーション | 解決のオプション |
move file | move file | update, merge | ・マージ (テキストの変更のみを適用し作業コピーのツリー構造はそのまま) ・移動とマージ (変更をマージする前に作業コピーのファイルの位置をマージ元と同じに変更する) |
move directory | move directory | merge | ・マージ (変更を相当するディレクトリに適用し、作業コピーはそのまま) ・移動とマージ (変更をマージする前に作業コピーのディレクトリの位置をマージ元と同じに変更する) |
unversioned file | add file | update, switch | ・マージ 入ってくるファイルでバージョン管理ではなかったファイルにマージする |
unversioned directory | add directory | update, switch | ・マージ 作業コピーにディレクトリを再追加するが、ファイルについてはそのまま |
svn update( 更新) の間、バージョン管理(追加)されていないアイテムを含むがそれ以外変更がないディレクトリの削除はツリーの競合の原因にはならなくなりました。これは例えば作業コピーのソフトウェア・ビルド・アーティファクトが原因のツリーの競合を無効にします。
コンフリクト・リゾルバのバグが修正されています。
・ #4744: “assertion failed(start_rev > end_rev)”
・ #4766: “resolver adds unrelated moves to move target list”
・ リゾルバが誤ってリポジトリの全ヒストリから検索する問題
・入力(theirs) の変更とローカル(mine) の変更がテキスト競合マーカー内で交換される事で生じたテキスト競合。これはsvn resolve コマンドを--accept theirs または--accept mine オプションを指定した場合に想定しない結果をもたらす原因となっていました。これは1.12 で修正されました。
1.11, 1.12 の開発中に発見されたコンフリクト・リゾルバのバグ修正は1.10 にバックポートされます。
svn info --show-itemに、追加
1.11にて追加。
‘schedule’と’depth’ を’svn info --show-item’ に追加 (r1827032)
クライアント証明書パスワードが保存できる
1.11にて追加。
クライアント証明書のパスワードが保存できます。(r1836762)
svn help がデフォルトで「実験的」コマンドを隠す
1.13 にて追加。
デフォルトではsvn help は、実験的コマンドを出力しないこととしました。出力するには、svn -help -v または --verbose を指定します。( #4828)
svn statusのような作業コピーコマンドのパフォーマンス改善
1.13にて追加。
大きな作業コピーでsvn statusのようなローカル操作を行う際、I/O を減らす事でパフーマンスを改善しました。これは、Subversion では使用しないが有効にしているとI/O を発生させるSQLite WAL(Write-ahead logging) の機能を無効にして実現しました。(r1865523)
サーバ・サイドの改善
svnadmin dumpはsvn:dateを変換しない#4767
1.11にて追加。
svnadmin dumpは出力でsvn:date リビジョン・プロパティを変換しようとしないこととしました。dumpの出力はリポジトリ内に記録されている値そのままを出力します。
authzルールでの空のグループ定義
1.12にて追加。
SubversionはAuthzによるパスベースの認可において、空のグループ定義を無視することとしました。svnauthzコマンドが空のグループを検知すると警告を出力します。
mod_dav_svnの設定ミスに対してヒントを提供
1.13にて追加。
mod_dav_svnの設定ミスにヒントを追加。重複する設定を見つけた場合で、同じURLに対して2つの設定があった場合、問題が同じ設定を2つ行っている事を示唆します。r1866738
クライアントとサーバの改善
ディスク上の平文のパスワードをデフォルトで無効に
1.12にて追加。
Unixライクなシステムにおいて、クライアント側ディスク上の平文パスワード・ストレージはコンパイル時に無効になっています。代わりにGnome keyring, Kwallet, GPG-Agentといったものをベースにしたパスワード・キャッシュ機構が推奨されています。この変更WindowsやMacOSプラットフォーム(既に暗号化されて格納されている)には影響しません。
リポジトリ・ソースから作業コピーターゲットへのコピーの改善
1.12にて追加。
リポジトリ・ソースから作業コピー・ターゲットへのコピーの動作を改善。
・既にある親ディレクトリを正しくハンドルします。
・ペグ・オペラティブ・リビジョンを正しくハンドルします。(#4785)
svn list の改善
1.12にて追加。
svn listコマンドは動的なカラム割り当てを行う事で長いAuthor名のトランケートを無効にしました。
svn list コマンドは、--human-readable (-H) オプションをサポートし、人が読みやすいサイズを出力します(バイト、キロバイト、メガバイト、ギガバイト、テラバイト、およびペタバイト)。
svn infoの改善
1.12にて追加。
svn infoコマンドはリポジトリの中のファイルサイズを表示できます。ファイルサイズはターゲットのURLである場合だけ表示できます。
svn cleanupの改善
1.12にて追加。
svn cleanupコマンドはバージョン化されていない、または無視されたアイテムを削除する際、ディレクトリを削除します、もしそれが書き込み禁止でも。
APIの変更、改善、言語バインディング(クライアントとサーバ)
Python3.xのサポート
Subversionのいくつかのオプション機能はPython言語を利用しています。SubversionのSwig PythonバインディングとSubversionのテスト・スイートはSubversion3.x(またはそれ以上)をサポートしました。
もちろん、プロジェクトの他の需要に応えるためSubversion Pythonサポートを拡張して他のバージョンを含めるような貢献を歓迎します。後述「Enthusiastic Contributors Welcome」の項目を見てください。
Python 2.7のサポートは徐々に廃止します。
Pythonはオプションです。
2020年1月1日をもって、Python2.7はEOL(End of Life)となりました。すべてのユーザはPython3にPython3への移行が強く推奨されます。
Subversion1.14はLTS(ロング・タイム・サポート)リリースで、2024年までサポートを行いますから、Python2.7のEOLを優に超えます。この期間、コアのSubversion開発者はPython2.7でのテストやサポートやPython2.7でしか起こらないバグなどの修正をコミットできません。
これは、Subversion1.14は技術的にはPython2.7でも動作はする、ということですが、サポートし続ける事が困難と判断されれば1.14のメンテナンス・リリースからは落とします。
もし、どうしてもPython2.7を使い続ける必要があるなら、2022年までサポートされるSubversion1.10を使用してください。Subversion1.10ではPython2.7は外しません。
もちろん、コントリビュータがPython2.7サポートを拡張してくれるのは歓迎します。「Enthusiastic Contributors Welcome」の項目を見てください。
Pythonはオプション
Subversionの基本操作をするのにPythonは必要ありません。Pythonを必要とするのは、Subversionをビルドしたり、SubversionのSWIGバインディングを使うときだけです。どちらも行わないなら、この変更はあなたに影響ありません。
Pythonバインディングは次のような場合に使用されます
・ViewVCのようなサードパーティプログラム
・toolsサブディレクトリ下でSubversionと一緒に配布されるスクリプト
・その他自作のスクリプトなど
もう少し詳細に言うと、次のような事をする場合です。
・SWIG Pythonバインディングを使用する場合
・ctypes Pythonバインディングを使用する場合
・Windows上でSubversionをビルドする場合
・Unixライクなシステム上でtarballからSubversionをビルドし、
Subversionのテスト・スイートを実行する場合
・Subverison(ApacheのSubversionプロジェクト)自身のリポジトリから
チェックアウトした作業コピーからSubversionをビルドする場合
・SWIG Pythonバインディングをビルドする場合
・ctypes Pythonバインディングをビルドする場合
Pythonは次の場合には不要です。
・svn, svnadmin, svnsyncなどのコアなコマンドライン・バイナリを使う
場合
・SubversionのC言語ライブラリを使用する場合
・Subversionの他の言語のバインディングを使用する場合
・Unixライクなシステム上でtarballからSubversionをビルドするが、
Subversionのテスト・スイートを使用しない場合
ビルド時の依存関係:py3c
SubversionのPython3.x SWIGバインディングのサポートは、C言語拡張へのPython3互換性レイヤ(py3c)に依存します。
SWIG Pythonバインディングをビルドするには、Pythonのバージョンに関わらずpy3cが必要です。py3cはヘッダのみのライブラリなので、ビルドする際には必要ですが使用する場合には必要ありません。
Subversionの最小限のビルド時の依存モジュールをダウンロードするコンバージェンス(集約)スクリプトであるget-deps.shは、py3cをダウンロードするようにアップデートされました。このスクリプトはソース配布のルート・ディレクトリにあります。Subversionの依存のフル・リストは同じディレクトリにあるインストールファイルを見てください。
Python3上でSWIG4でのビルドをサポート
本セクションは、Subversionを作業コピーからビルドする場合のみ影響します。tarballやZipファイルからビルドされる方はスキップしてください。
SubversionのSWIG PythonバインデイングはPython3上でSWIG4とビルドできます。このバインディングはPython3上でSWIG3.xともビルドできます。(SWIGに-modern argumentが自動的に使われます) (r1869853)
JavaHLアップデート
1.11にて追加。
JavaHLバインディングは、Java10と互換性を持つようにアップデートされました。ビルドの変更により、JavaHLはJava8以上が必要となります。
実験的な機能
Subversion1.14はいくつかの「実験的な」機能を含んでいます。これらはテスト、フィードバック、そしてさらなる開発にユーザが貢献してもらえるよう誘導するため未熟な状態でリリースされています。
警告:「実験的」な機能やAPIは1.14以降のリリースについて大きく変更され互換性がなくなる可能性があります。互換性を保持することは約束されません。それが「実験的」である間、ポイント・リリースレベルでも、です。
シェルビング(延期)とチェックポイント(実験的)
2つの違いをもっと知るため、またこの機能を第一級のものにするために必要な追加の作業については、この実験的な延期機能の レビューを読む事ができます。
注:1.14 での延期機能は1.10 のものとは互換性がありません。1.10 の作業コピー上での延期をリカバリするには、後述のUpgrading 1.10-1.13 shelves to 1.14 を見て手順を学んでください。
シェルビング(延期)コマンド(詳細はヘルプを見てください)
・svn x-shelf-diff
・svn x-shelf-drop
・svn x-shelf-list, x-xshelves
・svn x-shelf-list-by-paths
・svn x-shelf-log
・svn x-shelf-save
・svn x-shelve
・svn x-unshelve
1.10 との違いは次の通り
subversion1.10 | subversion 1.14 |
svn [x-]shelve [--keep-local] SHELF [PATH…] | 似た動作。使用される度に新しいバージョンを保存する。 |
svn [x-]unshelve [SHELF] | svn x-unshelve --drop [SHELF] |
svn [x-]unshelve --keep-shelved [SHELF] | svn x-unshelve [SHELF] |
svn [x-]shelve --delete SHELF | svn x-shelf-drop SHELF |
svn [x-]shlves or svn [x-]shelve --list | svn x-shelves or svn x-shelf-list |
シェルビング(延期)CLIの選択と有効化
シェルビング(延期)は開発中の機能であるため、CLI はデフォルトで無効となっています。この機能を使用してみたいユーザは、2つあるシェルビング(延期)実装のうち一つを選んで環境変数を設定して有効にする必要があります。(r1875037, r1875039)
この2つというのは1.11 で導入された”Shelving( 延期)-v2” と1.12 で導入された”Shelving( 延期)-v3” です。これらは相互に非互換で、各々異なるメリットやデメリットがあるために両方が存在します。レビュー参照
Shelving( 延期) のCLI 実装は環境変数SVN_EXPERIMENTAL_COMMANDS で選択できます。
環境変数 | Shelving CLI実装 |
SVN_EXPERIMENTAL_COMMANDS=shelf3 | Shelving-v3(1.12) |
SVN_EXPERIMENTAL_COMMANDS=shelf2 | Shelving-v2(1.11) |
SVN_EXPERIMENTAL_COMMANDS= | ShelvingCLIは提供されない |
定義しない | ShelvingCLIは提供されない |
次の表は、2つの実装での変更について示している。
作業コピー状態・変更 | Shelving-v2 | Shelving-v3 |
file text, file delete/add, most properties | yes | yes |
mergeinfo changes | yes | yes |
copies and moves | no | as copies1 |
directories | no | yes |
binary files & properties | yes | yes |
1 シェルビング(延期)では、MoveはCopy-Deleteに変換されます(コミットの際のように)。 |
Shelving-v2(延期v2)
Shelving-v2 は、1.11 で導入されたもので、1.10 で導入されたものを改善したものです。主な改善と変更点は次の通りです。
・チェックポインティングをサポート:シェルフ( 延期) は複数のバージョ
ンの変更を保存し、名前をつけたシェルフ(延期)に新しいバージョン
を追加し、最新ではなくより古いバージョンをアンシェフできます。
詳しくはチェック・ポインティング機能を参照してください。
・バイナリファイル(とプロパティ・バリュー)フルにサポート
・パッチファイルはストレージ機構としては不要となりました。例えば、
svn:mergeinfo プロパティやバイナリデータ、行末文字を取り扱う際の
パッチファイル・フォーマットによるバグと制約はなくなりました、
・シェルビングとアンシェルビングは、コピーやムーブのような自身が
取り扱えないステータスを検知した場合、どちらも警告し、実行されま
せん。
・アンシェルビングは作業コピーにマージに似た仕組みで変更を適用します。
そのため、作業コピーが変更されている場合(例えば更新されている場合)
でもより適切に変更を適用できます。
Shelving-v2 は、ファイルやプロパティのコミット可能な変更を、次のようにサポートしてない場合を除き延期できます。
・コピーと移動
・ディレクトリの作成と削除
Shelving-v2 によって作られた延期は、
< 作業コピー>/.svn/experimental/shelves/v2. の下に保存されます。
Shelving-v3(延期-v3)
Shelving-v3 は1.12 で追加され、v2 よりもより多くの種類の変更を取り扱えます。特に、すべてのコミット可能な変更を延期できます。しかしながら、v2 よりも動作が重く、特に作業コピーのサイズが大きい場合より多くのディスクスペースを取ります。
このバージョンのシェルビング(延期)はシェルビング、コミット・チェックポインティングそして将来的なクライアント側のコミット可能な変更の操作とシェアの可能性を最終的にサポートするため大きくリファクタリングされています。
Shelving-v3 によって作られた延期は
< 作業コピー>/.svn/experimental/shelves/v3. の下に保存されます。
Upgrading 1.10-1.13 shelves to 1.14 (1.10-1.13の延期を1.14にあげる)
Subversion1.10 によって作られた作業コピー中にある延期は、Subversion1.14 クライアントでは効果がありません。Subversion1.14 はそれを無視します。相互に操作も、リストすることもできません。
svn upgrade コマンドは延期には効果がありません。作業コピーのフォーマットは変更されていないからです。
1.10 の延期を回復するには、次のいずれかの方法を取る必要があります。
・1.10 のクライアントと使って延期を見つけ、unshelve( 延期を解除) する。
・1.10 の延期がパッチファイルとして、作業コピー/.svn/shelves/ にあるの
で、パッチファイルを探して、svn1.10-1.14( 以降) のsvn patch コマンド
を使ってそのパッチを適用する。
1.11 で作られた延期にアクセスするには、まず環境変数に
SVN_EXPERIMENTAL_COMMANDS=shelf2 を設定して、Shelving-v2 を選択します。
1.12-13 で作られた延期にアクセスするには、まず環境変数に
SVN_EXPERIMENTAL_COMMANDS=shelf3 を設定して、Shelving-v3 を選択します。
Commit Checkpointingコミットチェックポインティグ(実験的)
1.11 にて追加されました。
1.11 以降、Subversion は#3626 で示されたようなユースケースを解決するため、” コミット・チェックポインティグ” と名付けられた実験的な機能を提供しています。
これは、その時々でまだコミットしてない変更のスナップショットを保存しておき、後にそのうちの一つをリストアして作業コピーに戻す事ができるようにするものです。
これは、作業コピーそのもののロールバックを提供するものではなく、上の課題(3626) で議論されている通り、雑多なアップデートの後でも前の状態に作業コピーをロールバックしたい、というようなことを可能にします。これは将来的な可能性です。
チェックポイントとコミットしてない変更のロールバックの機能は、Shelving( 延期) 機能で複数の変更のバージョンを保持することにより、Shelving( 延期) 機能とともに提供されます。上記のシェルビングを参照してください。
チェックポインティングの主な操作は次のようなコマンドでできます( wiki参照) 。
チェックポイントの保存と継続 | svn x-shelf-save foo | ローカルの変更を新しいバージョンのシェルフ(延期)’foo’にコピー。作業コピーから変更を戻さない。 |
チェックポイントの保存と延期 | svn x-shelve foo | ローカルの変更を新しいバージョンのシェルフ(延期)’foo’に移動し、作業コピーから変更を戻す。 |
リストア/ロールバック | まず望まない変更を戻してから、 svn x-unshelve foo 3 |
シェルフ(延期)’foo’のバージョン3を作業コピーに適用し、それより新しいバージョンは削除する |
チェックポイントのレビュー | svn x-shelf-log foo | シェルフ(延期)’foo’の全バージョンをリストする |
svn x-shelf-diff foo 3 | バージョン3をdiffとして出す |
更なる情報は SubversionのWiki にあり、内部設計や開発のノートもあります。
Viewspec出力コマンド(実験的)(#4753)
1.11にて追加されました。
これは実験的なコマンドで、現在の作業コピーの様子を出力(view spec)します。
View specは各サブツリーが限られた深さを持ち、除外され、異なるURLにスイッチされているか、異なるリビジョン番号にアップロードされていないかを親ディレクトリと比較して出力します。この情報は時に、シェイプ、や作業コピーのレイアウトと呼ばれます。
‘svn info --x-viewspec=classic’は古いスクリプトtools/client-side/svn-viewspec.pyのフォーマットで出力します。
‘svn info --x-viewspec=svn11’は、svnコマンドラインのシリーズを出力します。このコマンドを実行する事で、同じレイアウトの新しい作業コピーを作る事ができます。
既知の課題
Subversion1.14にはいくつかの既知の課題があります。1.14.xのリリースで解消される可能性があります。
Python3のサポートは不完全
Subversionのディストリビューションに含まれるPythonスクリプトの中にはPython3をサポートしていないものがあります。Pythonスクリプトに関する詳細なリストはこちらです。
Python3に対応したもの(ステータスはこちら)は、将来のリリースに入っていく可能性があります。
ビルドシステムはPython3よりもPython2を優先
SubversionのビルドではPythonは必ずしも必要ありませんが、テストスイートを実行する際には必要です。したがって、Unixライクなシステムでは、SubversionのビルドシステムはPythonの実行ファイルを探します。
ビルドシステムは、$PYTHON, $PYTHON2, $PYTHON3環境変数をこの順番でチェックし、続いてコマンド名をpython, python2, phthon3($PATH中)をこの順でチェックします。これらのうち、最初に見つけたPython2.7以上の実行ファイルが使用されます。
Python2.7は徐々に廃止のため、我々は1.14のパッチリリースでPython2.7よりPython3を優先するよう変更する積りです。その場合、CHANGEファイルで言及し、リリースノートのこのセクションを更新します。
これは、tarballからのビルド(configureを使う)と作業コピービルド(autogen.sh)の両方に影響します。リリースのローリング・スクリプトにも影響します。
ワークアラウンドとして、configureかautogen.shを実行する前に、環境変数PYTHONにPython3の実行モジュールのフルパスをセットできます。
Rubyバインディングはswig3.0.9が必要に
1.11にて変更されました。
このセクションは、作業コピーからSubversionをビルドする場合にのみ影響があります。Tarballやzipからビルドする場合はスキップしてください。
RubyバインディングはSwigの課題#602の不具合のため(308に特有の問題)ビルドされないことがわかっています。Swig3.0.9かそれ以降を使用すしてください。
PerlとPythonのバインディングは影響されません。
サポートとリリース計画
Subversion 1.14.xはロング・ターム・サポート(LTS)版
1.14はロング・ターム・サポート(LTS)リリースです。
https://subversion.apache.org/docs/release-notes/#supported-versions
https://subversion.apache.org/roadmap.html#release-planning
(日本語参考)https://ossplaza.com/oss_column/svn_release_cycle_chg_2018.html
Subversion1.13はEnd of Life(EOL)となります
Subversion 1.13はEnd of Life(EOL)となります。これはインストール済みの1.13が動作しなくなる、という事ではありません。1.13を特に問題なく使用して満足している場合は、そのまま使用できます。”End of Life”は1.13に対するバグレポートの受付を終了し、1.13の開発・保守を終了することです。
Subversion 1.10は安定版となります
Subversion1.10.xは(古い)安定版となります。これはセキュリティ関係とバグ修正をまだ受け入れることを意味します。バグのレポートは重要度を鑑みて評価しますが、重要度が低い場合には、1.14にしか対応しない場合があります。特に、内部の深い部分の問題や不安定になる可能性がある場合、あるいはバックポートに大きな投資が必要となる場合です。
したがって、安定版で何か問題があって最新版では修正されている場合、私たちは問題を解決するためにはバージョンアップをお勧めするかもしれません。
Subversion1.9はEnd of Life(EOL)となります
Subversion 1.9はEnd of Life(EOL)となります。これはインストール済みの1.9が動作しなくなる、という事ではありません。1.9を特に問題なく使用して満足している場合は、そのまま使用できます。”End of Life”は1.9に対するバグレポートの受付を終了し、1.9の開発・保守を終了することです。
Enthusiastic Contributors Welcome (熱心なコントリビュータ歓迎)
あなたもSubversionに貢献できます。
Subversionはオープンソース・プロジェクトでボランティアによって開発やサポートが行われています。コミュニティでは熱心に活動していただける参加者を募集しています。
Pythonのサポートバージョンの追加やシェルフ・チェックポインティングの仕上げ、その他新しい大きな機能に興味があるかもしれません。その努力を投資してくださるなら、Subversionはあなたの思うものなんでもありです。
e-mailで会話に参加する:メーリングリストを参照
https://subversion.apache.org/mailing-lists.html
IRCでは、irc.freenode.netL
#svn channel: User chat and help using Subversion
#svn-dev channel: Get involved in development!
ソースを取得する場合(SubversionまたはGit)
$ svn checkout https://svn.apache.org/repos/asf/subversion/trunk/
$ git clone https://github.com/apache/subversion.git
最新版のTarballは、
https://subversion.apache.org/download.cgi
ぜひご参加を。