Svnサーバーでリビジョンが存在しなかったかのように削除することは可能ですか?
したがって、次のリビジョンがあります。
1004 // Commit of some bogus code that broke the build and was just wrong
1003 // Change 1.2
1002 // Change 1.1
1001
1000 *** Initial checkin
Svnで1004を削除し、1004が存在しなかったかのように1003に戻すことはできますか?
私の無知を許して、私はまだSVNの使い方を学んでいます。
VCSシステムは、これを可能な限り複雑にするように特別に設計されています。通常、これを実行する必要はありません。
とはいえ、公式ドキュメントから:
ファイルまたはコミットのすべての証拠を破棄したい場合があります。 (おそらく誰かが誤って機密文書をコミットした可能性があります。)Subversionは意図的に情報を失わないように設計されているため、これはそれほど簡単ではありません。リビジョンは相互に構築される不変のツリーです。履歴からリビジョンを削除すると、ドミノ効果が発生し、後続のすべてのリビジョンで混乱が生じ、すべての作業コピーが無効になる可能性があります。
ただし、プロジェクトには、いつか
svnadmin obliterate
コマンドを実装して、情報を完全に削除するタスクを実行する計画があります。 ( 問題516 を参照してください。)それまでの間、唯一の手段は、リポジトリを
svnadmin dump
してから、ダンプファイルをsvndumpfilter
(不正なパスを除く)を介してsvnadmin load
コマンドにパイプすることです。詳細については、Subversionブックの 第5章 を参照してください。
これらの事故は起こっており、SVNが事故を歴史に残していても問題ではありません。重要なのは事故を直すことです。これを行う方法は、このコミットによって行われた変更を元に戻すことです。次のコマンドを使用します。
svn merge -r [current_version]:[previous_version] [repository_url]
svn commit -m “Reverting previous commit and going back to revision [previous_version].”
TortoiseSVNを使用している場合は、ログを表示してコミットを選択し、コンテキストメニューで[このリビジョンからの変更を元に戻す]を選択するだけです。作業コピーが以前のバージョンに変更され、コミットするだけで済みます。
他のグラフィカルクライアントにも同じオプションがあると思います。
トランクを別のブランチ(バックアップ)に移動し、正しいリビジョンをトランクにコピーして戻すことができます
svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
リビジョン番号が増加し、すべての変更がsvnログに表示されることに注意してください。
削除する本当の理由(たとえば、スペースの不足)がない場合は、リビジョンを残すことをお勧めします。これは、変更を保持するためのSVNサーバーの主な仕事です。
現在のリポジトリのダンプを作成し、ダンプ内の偽のリビジョンをスキップできます。次に、同じサーバーまたは別のサーバー上の新しいリポジトリにダンプをロードできます。