質問

ここ数年、私は Subversion に「完全に削除」(消去) 機能が搭載されるのを待っていました。私は、(Visual SourceSafe からの) Subversion への移行をためらっています。なぜなら、これは必須の機能だと思うからです。そうしないと、リポジトリが止められないほど大きくなることが予想されるからです。ただし、何らかの理由で、この機能は何度も延期されます。そこで、obliterate 関数を不要にする他の機能や回避策があるのではないかと考え始めます。

SVN 中央リポジトリを縮小したい場合はどうしますか?

例1:私 大規模なサードパーティのライブラリをチェックインする, 、そして数週間後に、それが私のニーズに合っていないことに気づきました。大量のデータを永久に保存してバックアップすることは望ましくありません。

例 2:リポジトリには 10 の大きなサードパーティ ライブラリの 10 バージョンがありますが、最新バージョンのみを使用しています。

例 3:誤って機密情報をチェックインしてしまいました ( ジョン).

例 4:リポジトリに入れる予定のない大きなファイルを誤ってチェックインしてしまいました。

役に立ちましたか?

解決

svn obliterateの議論のかなりの量は、Apache rel="noreferrer">ので、そのほとんどが2008年についてエンディングその使用はまれであるべきであるが、それは、持っていることは良い機能だ一般的な合意があるようです。

それをするために2つの主な理由があります。

まず、機密情報をチェックインすることは問題になる可能性があります。削除し、そこにそれを残して、リポジトリの機密性と暴露のレベルに応じて、必ずしもオプションではありません。

第二に、大幅リポジトリのサイズを増やすことができ、チェックインしてはならないものが大量にチェックイン。ディスク容量は、今日一般的に安いですが、それは無制限ではなく、ファイル・スペースが問題ことができ、他の方法があります。それは、ネット接続を介してリポジトリを送信する必要があります場合は、それが重要か、あってもなくてもよいの余分な時間があります。リポジトリ全体が含まれているCD-ROMまたはDVD-ROMを焼くことができることに本当の利点が存在することができます。

したがって、現在、ダンピングフィルタリング、およびリポジトリを再ロードすることによって行われる有用な機能です。これは、私が見てきた報告書によるとエラーが発生しやすい遅くなることがあり、リポジトリをシャットダウンする必要があります。

もちろん、それは何それはかなりの数年間のために必要なのはデザインを考え出すと、それを実装するために仕事をする誰かであることを考えると、Subversionのチームにとって優先度の高い機能ではありません。結局のところ、それは非常にまれにしか行われてはならない、と回避策があります。しかし、Subversionの上の仕事の全体の多くをしたい、誰もが(十分な品質の良い場合)は、おそらく実施されるパッチを提供することができます。

他のヒント

これは、ソースコントロールの意味に違反する。
ソースコントロールは、すべての以前の状態を復元することができることについてです。あなたは、ファイルを削除すると永久にあなたがすることはできません。

OTOH私は

「完全に削除」を誤解しているかもしれないので、VSSを知りません
それに対する明白な理由は、開発者が、それはバランスにSVNを悪化させるだろうと思うからです - あなたが誤って何かを消し去るとき、あなたは不必要なものを剪定することができることで感じる幸せが大幅にあなたの怒りによって矮小化され、あなたの/トランク行方不明になります。

FogBugzのは、まったく同じ動作を持っており、その場合には、それ自体からユーザーを保護し、私は信じているデザインによって完全にです。

消し去るには、あなたが持っているしたいと思いバージョン管理の原則に違反します。どちらのあなたは、任意のスペースを節約しません、または以前のタグが壊れなります。あなたが任意のファイルを抹消した場合は、真の以前のバージョンに戻すことはできません。

成長しているリポジトリについてコメントについては...任意のリポジトリには、経時変化の大きさと直線的に成長します。これは、ソース管理システムの全体のポイントです。あなたが以前のバージョンを追跡できるようにする必要がない場合は、なぜどこかの共有フォルダに固執しない?

引用 Subversion Obliterate、忘れ去られた機能, 、質問には 3 つの要素があります。 問題, 、 理由 そしてその 解決. 。解決策への質問から始めたので、私はそれから始めます。

解決

お気づきのとおり、優れた解決策はありません。特に大規模な企業リポジトリを扱っている場合は、リポジトリが大きくなるほど解決策が難しくなるからです。という機能があります ダンプ/フィルター これを使用すると、リポジトリ内の不要なものを削除できますが、それほど使いやすくはなく、高速でも、信頼性もありません。

がありました。 小さな努力 2008 年以降、svn チームは削除機能を導入しようとしましたが、その努力は静かに終わりました。

問題

最初に述べた記事には、実際に、消去コマンドが必要になるユースケースの優れたリストが含まれています。 516問題スレッド 実際、開発者もそのメリットを認めています。

ああ、もうそれは遅すぎるようだ。これが後から追加されなかった本当の理由は、最も基本的なレベルでコードにフックされるため、現在では実装がほぼ不可能になったためです (こちらも参照) 小さな努力 解決策の下のリンク)。

から よくある質問のエントリ:

リビジョンは、相互に構築される不変のツリーです。履歴からリビジョンを削除すると、ドミノ効果が発生し、その後のすべてのリビジョンに混乱が生じ、すべての作業コピーが無効になる可能性があります。

理由

問題は、当初、この機能が真のバージョン管理の原則に準拠していないため、削除された機能が却下されたことです。

またしてもから よくある質問のエントリ:

リポジトリの履歴からファイルを完全に削除するにはどうすればよいですか?ファイルまたはコミットのすべての証拠を破棄する必要がある特殊なケースがあります。(おそらく誰かが誤って機密文書を作成してしまった可能性があります。)これはそれほど簡単ではありません。 Subversion は情報を失わないよう意図的に設計されているため、.

しかし

私は現在、大規模なチームと大規模なプロジェクトを持つ多くのクライアントのために SVN を使用して仕事をしてきましたが、基本的に大きな問題が発生したことはありません。確かに、言​​及したユースケースは機能を完全に削除することを保証しますが、これがどこに行っても繰り返し発生する問題であるとは今のところ確信していません。もちろん、この問題の性質上、間違いは 1 回だけで、元に戻すことはできません。

リポジトリからデータを削除するためであることは、ソースツリーにすべての以前の状態や変化を再現することが可能であることをことを、ソースコントロールの基本的な前提を壊します。バージョン管理から何かを消し去るにしたい場合は、彼らが言うように、あなたはおそらく、「それは間違っている」しています。

私は約 15 年間さまざまなバージョン管理システムを使用していますが、このような機能を必要としたことはありません。

その機能が必要な理由は何でしょうか。

  • ディスクスペース?ディスク容量の価格を考えると信じられない
  • パスワードをバージョン管理にコミットしましたか?まあ、それはあなたに教えます。行ってパスワードを変更してください
  • リポジトリの速度?そうは思えませんが、パフォーマンスが優れていると思われるまったく別のシステムを検討するとしたら。

ダンプとロードを実行して、SVNリポジトリのサイズを小さくすることが可能です。あなたはより多くのカップルの歳よりも、何かに戻したいことはありませんと言う基本的にかどうかは、その後、時間に基づいて、リポジトリ、フィルタをダンプダンプを再ロードすることが可能です。原因サイズに単一のファイルを取り除くしたいことは、おそらくファイルが本当に最初の場所でのソース管理システムに属していなかったことを示しています。

あなたがデータを消し去ることができますいくつかのスクリプトがあります。詳細はこのメーリングリストのスレッドに従います。

これは恒久的に削除とは対照的に、バージョン管理の本質は、データを失っていないようにそれを行うには難しい方法です。あなたは年に一度か何かを剪定場合しかし、それはは行うことができるものと同様ます。

ソース管理の全体のポイントは、あなたのリポジトリがどのように見えるかの完全な履歴を持つことです。 obliterateコマンドは、ソースコントロールのこの目的に反して、それはそれを持っているすべてのバージョン管理システムで設計ミスだ。

ただ、変更ビット -

SVNは安いコピーやファイルの完全なコピーを必要としない安価な分岐があります。その中央リポジトリは、この設計ミスが不要になって、通常サイズで非常に扱いやすいです。

それは実際に(次のとおりです。すべての履歴を記録するために)バージョン管理の基本原則を破るために消し去るには、Subversionのの本質的な特徴ではない。

そして、この問題を回避するには、これは(svnadminはとフィルタリングを使用して)とにかく成し遂げるためにそこにあるので、それは本質的な特徴ではない。

また、この機能は現在、大きく上に働いています。詳細については、この記事を参照してください。

最後の私は、それがADMIN機能として意図されていたチェックし、管理者は、すでに/フィルター/ broken_workaroundをダンプし、とにかく歴史を削除することができます。監査証跡に関しては、これは現在の引用を変更しません。何かが絶対に取り外さなければならない場合には、それはあまり恐ろしいなるだろう。

のsvnadminの抹消最もリクエストの多い機能の一つである、DEVのは最終的にそれが存在しなければならない認める(8年後!ついに!!!)。そして、それは存在しないの宣伝は、SVNから離れたユーザーを追いかけている。

残念ながら、私は、この「失わ機能」ハードな方法を学ぶ必要がありました。基本的な機能は、機能ですいつから?新規ユーザーはこれについて聞くとSVNを避けるために始めています。私としては、私は今のGitを使用します。

私の意見を好きではないですか?ライナスは低能としてSVNの開発者と呼ばれ、全体の集中管理システムが不備。私は本当の専門家としてライナスを信頼し、特に彼は、ソースを知ってます。

私は何をすべきか - Subversionを使用していません。申し訳ありません。

彼ら(開発者)obvoiouslyそれは重要な機能であることのあなたの評価に同意しません。私はそれを使用するために、現時点での働いている会社を停止していない;)私は個人的にこの正確な理由のためにSubversionを除外

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top