SVNリポジトリからリビジョンを削除したい


33

コードリポジトリの最新リビジョンが破損し、アプリが不安定になりました。以前のリビジョンに戻したい。

しかし、作業コピーで単に「元に戻す」を使用したくありません。私は実際に自分のレポのヘッドリビジョンといくつかのリビジョンを削除し、それによりレポを以前のリビジョンに「戻し」、それがヘッドリビジョンになります。誰も私がこれをどうやってやるのか知っていますか?


1
古いリビジョンを実際に削除することはできません。Felixが述べたように、変更を元に戻し、コミットするだけです。興味深い追記、Gitの(だけでなく、他のバージョン管理ソリューション)は、実際に許可しないあなたに本当に削除改正...
davr

3
はい、できます。svnadminでSVNリポジトリにアクセスするだけです。以下の私の答えをご覧ください。
マーティン

davrは技術的に正しいです。あなたが説明するのは、悪いものを除くすべてのリビジョンをダンプし、それを古いリポジトリの上にダンプすることです。私の考えでは、それは実際にリビジョンを「削除」することと同じではありません。
Sirex

回答:


12

たぶん、このリンクはあなたを助ける:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

見積もり:

  1. 作業コピー内の最上位ディレクトリに移動します(作業コピー全体をロールバックすると仮定します)。

  2. 実行svn revertして、作業コピーのファイルを、最後にコミット/チェックアウトしたときの状態に戻します。

  3. 実行svn status -vして、作業コピーが現在対応しているリビジョン番号を確認します(svn status -v生成するリストの中で最も高いリビジョン番号です)。

  4. 実行svn merge -rXX:YY場所XX前のステップで得られた数であり、YYあなたがに戻したいリビジョンの数です。

  5. できた!これの可能な例外は、リビジョンYYが最初に作成されたときに存在しなかった作業コピーのファイルがまだ存在することです。デフォルトではsvnは物を削除しないからです。それらを削除したい場合はsvn del [filename]、それぞれに対してa を実行します。

  6. よくやった!ここで、すべての中間編集が行われなかったかのように、作業コピーで遊んでください。そして、努力をコミットする準備ができたら、いつものようにsvn commitを使用してください!


1
Windows OSでは、オプション#4を実行しますsvn merge -rXX:YY .。行末に現在のディレクトリを参照するドットを忘れずに配置してください。また、TortoiseSVNには、リバースマージのオプションがあります。
シャンタクマラ

3
これは、実際には「以前のリビジョンに戻り、これがヘッドリビジョンになります」。古いリビジョンをHEADにすることはありません。むしろ、新しいHEADを作成します。マーティンの答えをご覧ください。
マシューフラッシェン

回答を修正して、後の期間に関するShanthaの発言を含めました。これは* nixでも同じです。
マイクコルメンディ

72

これは私のために働いた。リビジョン1234がHEADであり、最後の3つのコミットを元に戻したい場合:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1。質問を理解し、特定の回答をしたのはあなただけです。
マシューフラッシェン

6
これは技術的には正しい答えです。ただし、これは、実行するのがかなり複雑になる可能性があることを除けば、チェックアウトされたすべてのコピーを無効にすることにも注意する必要があります。
sleske

1
迅速かつ簡単に、要点まで、そして実際にポスターが要求したこと。
13

7
リポジトリのUUIDも必ず新しいリポジトリにコピーする限り(「svnadmin setuuid」を参照、古いリポジトリの「svn info」のUUIDからコピー)、切り取るリビジョンに更新されたチェックアウトのみが無効化されます。
ブライアンペティ

1
新しいリポジトリでは、ファイルのアクセス許可を修正するか、hooks / confディレクトリ内のファイルをコピーする必要がある場合があります
-AdamS

5

これは古い質問ですが、Windows / TortoiseSVNでこれを行う方法を見つけたところです。

コメントが示唆したように、リビジョンを「削除」することはできませんが、できることは、戻すリビジョンと同じより新しいリビジョンを作成することです。

  1. リビジョンを元に戻すディレクトリのリポジトリのHEADをチェックアウトします。
  2. 復帰する最高レベルのディレクトリ(たとえば、「トランク」)のTortoiseSVNで「ログの表示」ビューを読み込みます。
  3. 削除するリビジョンを右クリックします注:これは削除するリビジョンであり、元に戻すリビジョンではありません。
  4. [このリビジョンの変更を元に戻す]を選択します。
  5. プロンプトで「はい」をクリックします。
  6. 通常どおりチェックアウトを更新しますが、「HEAD」に変更します。
  7. コミットし直します。

その後、それをチェックアウトした他のすべてのユーザーにアクセスして、それらを更新してもらい、新しいファイルを削除するようにします。

また、すべての人がそのリビジョンが何であるかを確認し、潜在的に説明を更新する必要があります。


それは通常の「復帰」手順とどう違うのですか?
トマーW

Revertは、作業コピーをリポジトリにあるものに変更するだけです。これは、レポートのHEADに以前のコミットの状態を反映させる方法です。
マーティン14年

1
これに感謝します-これを亀のSVNの方法で行うことは、間違ったコミットを取り消すために必要なことでした:)
アンドリューバーネットトンプソン博士

また、ログウィンドウにコンテキストメニューエントリ「このリビジョンに戻す」があります。
Uwe Keim

4

この目的でダンプ/ロードを使用できます。

svnsyncを使用して、あるリビジョンのバックアップを作成することもできます。

大きなリポジトリがある場合は時間がかかります。


3

私にとって(VisualSVN、30-HEAD)はこれを動作させます:

  del C:\ Repositories \ MyRepo \ revs \ 0 \ 30
  del C:\ Repositories \ MyRepo \ revs \ 0 \ 29
  del C:\ Repositories \ MyRepo \ revs \ 0 \ 28
  del C:\ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C:\ Repositories \ MyRepo \ revprops \ 0 \ 29
  del C:\ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C:\ Repositories \ MyRepo \ db \ current
  


これは他の答えよりもどうですか?
トト

はるかに高速です。
アントンゴリコフ

0

ターミナルに移動して、svn repsitoryに移動します。次に入力します

svn update -r「元に戻したいリビジョン番号」


2
スーパーユーザーへようこそ!質問を注意深く読んでください。あなたの答えは元の質問には答えませ。OPは「私は単に私の作業コピーに『元に戻す』を使用したくない」と言う
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.