web-dev-qa-db-ja.com

svnリポジトリ全体を古いリビジョンにロールバックまたは元に戻す

SVNリポジトリを台無しにしたため、リポジトリ全体をリビジョン28から24に戻す必要があり、差分や競合に対処したくありません。これをすばやく簡単に行う方法はありますか?私はマージコマンドで元に戻す前に単一のファイルを元に戻すことができました-しかしこの例では、本当にやりたいのはそれらを削除するだけでリビジョン28からリポジトリにすべてのファイルを追加したいです。

Linuxボックス(bash)でコマンドラインを使用しています。

ありがとう

[〜#〜] edit [〜#〜]

助けてくれてありがとう!私はそれを修正しました:

svnadmin create /svnroot/<repo>.fixed
svnadmin dump -r 1:24 /svnroot/<repo> --incremental > dump.svn
svnadmin load /svnroot/<repo>.fixed < dump.svn

次に、古いリポジトリをバックアップの場所に置き、repo.fixedをリポジトリに移動します。

再度、感謝します!

74
user19302

Svnadminダンプ/ロードを確認してください。ファイルのすべてのバージョンでテキストファイルを作成します。特定のポイントの上/下のすべてを削除し、それを再インポートすることができます。

インスタンスを参照してください 他の場所でのリポジトリデータの移行

26
Justin Love

「逆」マージが必要な場合があります。 "undoing changes" svn bookのセクションを参照してください。

例えば。 svn merge -r 28:24 [svnへのパス]

25
luapyad

SVNサーバーにアクセスできる場合は、path/db/currentを編集し、元に戻す古いリビジョン番号(ここでは24)をそこに配置し、不要なリビジョンファイル(25、26、27など)を削除できます。 、28)path/db/revs/0/から。少なくとも今日は、リポジトリ内のディレクトリを誤って削除してしまったため、これでうまくいきました。

14
fuenfundachtzig

ファイルが存在したことの「証拠」を本当に消去する必要がある場合は、上記のsvndump/svnloadアクションを実行する必要があります。

間違えた「通常の」状況では、逆マージを使用する必要があります。これにより、r24の後の変更を元に戻すことも、元に戻す、差分を付けるなどできるようになります。

以下のコマンドは、変更を元に戻すために機能するはずです(マージの結果をコミットして、リポジトリ内のマージを反映する必要があります)

svn merge -r 28:24
13
Sander Rijken

管理者権限を使用しない場合、古いリビジョンを完全に消去することはできませんが、驚くほどシンプルな「svn copy」コマンドを1つ使用するだけで、それらを非常にうまく隠すことができます

svn delete protocol:// svnserver/some/resource
svn copy protocol:// svnserver/some/resource @ 24 protocol:// svnserver/some/resource

それだけです、リビジョン25から28はsvnログから完全に消えました。それはまったくハックではなく、安全で(ほとんど...)文書化された機能です。

「リソース」がディレクトリの場合、最後のURLから削除する必要があります。

svn copy protocol:// svnserver/some/directory @ 24 protocol:// svnserver/some /

(それ以外の場合は、内部にコピーします)

6
MarcH

TortoiseSVNを使用している場合、ソリューションは簡単です。

  • 変更ログを表示
  • ロールバックするリビジョンを右クリックします...
  • ...「このリビジョンに戻す」を選択します
  • 変更をコミットする

この方法では、バージョン履歴(つまり、元に戻したすべてのリビジョン)が保持されます。

5
Paul Suart

特定のリビジョンの新しいチェックアウトを実行できます。 http://svnbook.red-bean.com/en/1.1/re04.html

svn co path/to/my/repo -r 24
3
nickf

アプリケーションのフォルダー構造が変更されていない場合は、古いリビジョンをチェックアウトし、最新のリビジョンの.svnフォルダーをチェックアウトした古いリビジョンに置き換えます。これで、「古い」バージョンをコミットできます。

2
neesh

リポジトリからファイルを完全に完全に削除する場合は、svndumpをファイルに実行し、不要なリビジョンやファイルパスをフィルターで除外し、新しいリポジトリを作成して、フィルターされたダンプを新しいファイルにsvnloadする必要がありますリポジトリ。 リポジトリメンテナンスに関するSVNブックセクション をよく読んでから、これを行う前に、新しいリポジトリにデータがあることを確認するまで、既存のリポジトリを削除しないようにしてください。あなたが欲しい。

1
genehack

出来ますか svn del最上位ディレクトリ、次にsvn copyそれら:

svn copy svnurl@version svnurl 
1
Lyndon

私はこれを言うのは嫌いですが、それは私が自分のsvnリポジトリのバックアップを使用していることに気付いた状況です。

特定のリビジョンのファイルをリポジトリ内の新しいディレクトリにコピーできますか?

0
Juan

これが私がそれを始める方法です。残忍な、はい、しかしそれは衝突を完全に無視することが保証されている唯一のことですおよびリビジョン履歴をそのまま保持します。

  cd /scratchdir 
  svn co -r good svn://repository
  cd /hosed_project
  svn up -r HEAD
  cat >> /tmp/cp.sh 
  ORIG=$1
  TARG=$( echo $ORIG | sed 's/\/scratchdir\///' ); 
  cp $ORIG /hosed_project/$TARG;
  ^D
  chmod u+x /tmp/cp.sh
  find /scratchdir -not -wholename "*/.svn*" -exec /tmp/cp.sh {} \;

これはIMOの「通常の」方法ではないことに注意してください。通常の方法は、古いバージョンからブランチを作成し、そのブランチをヘッドにマージすることです。 (少なくとも、それは使用済み動作する方法です)

編集: 上記のコードはテストされていません。逐語的に実行しないでください

0
Kent Fredric

私はまだライブプロダクションで使用していないのでこの作品が機能するかどうかは完全にはわかりませんが、テストリポジトリ(プロダクションリポジトリの1つをコピーしました)で試してみました動作するように見えます

リポジトリにいるときは、次のコマンドを使用します。

svn update -r 24 trunk

ここで、24はリビジョン番号であり、trunkは、そのリビジョン番号に更新(またはこの場合は復元)するファイル/フォルダーです。

私のテストでは、いくつかのファイルが更新および(再)追加され、コミットを行った後、警告はまったく表示されませんでした。次に、ダミーテキストを使用してファイルを変更し、さらに別のコミットを試みましたが、変更されたリストにファイルが表示されたとだけ言いました。だから、かなりうまくいくようです!

繰り返しますが、私はライブプロダクションでこれを使用していませんでしたので、間違っている場合はアドバイスをお願いします。私はこれが(近い)将来にこれを必要としているのを見ることができるので、これも行く方法であるかどうかを知りたいです。

-デイブ

0
Dave
Example:
    Rev 100 all is working great        
    Rev 101 somebody really corrupted the dir structure and / or merged in bad changes, etc.
    Rev 102 You delete /trunk
    Rev 103 You copy /trunk@100 to HEAD
        You now have a /trunk that reflects only Rev 100 and 103. Not 101 or 102.

svn del svn://[RepoName]/trunk -m "removing issue in HEAD"
svn copy svn://[RepoName]/trunk@100 svn://[RepoName]/trunk -m "Copy of correct revision of trunk to HEAD"
0
Mazrick