SVNコミット前の削除の取り消し


135

SVN作業コピーからディレクトリを削除したが、まだコミットしていない場合、それを元に戻す方法は明らかではありません。「svn undo d」と入力すると、Googleは一般的なクエリとして「svn undo delete before commit」を推奨しますが、検索結果は役に立ちません。

編集:subversion 1.4.4で機能するソリューションが欲しい


保留中の変更で削除したディレクトリの兄弟ディレクトリはありますか?その場合、上位レベルから復帰するときに注意してください。変更が失われる可能性があります。
ラッセル

回答:


145

svn revert deletedDirectory

svn revertコマンドのドキュメントは次のとおりです。


編集

場合はdeletedDirectory使用して削除されたrmdirといないsvn rm、あなたは何をする必要があります

svn update deletedDirectory

代わりに。


3
新しいはずですが、SVN 1.4.4では動作しません。(これは私が最初に試したものです。)
LaC 2009年

4
これが1.4.4の説明です。$ svn help revert revert:元の作業コピーファイルを復元します(ほとんどのローカル編集を元に戻します)。使用法:PATHを元に戻す...注:このサブコマンドはネットワークアクセスを必要とせず、競合状態を解決します。ただし、削除されたディレクトリは復元されません。
LaC、2009年

1
1.6.6のヘルプには同じテキストが含まれていますが、テストするとうまくいきました。あなたが使用しなかった場合は、その注意svn deleteディレクトリを削除し、代わりにそれが使用して削除rmdir、あなたがする必要がありますsvn update deletedDirectory代わりに。
Michael Hackner、

ローカルのsvn-edディレクトリから1つのファイル(svn del)を削除しました。svn updateは機能しませんでしたが、svn revertは機能しました。SynchroSVN for Macを使用していました。ただし、ヒントをありがとう。
karim

5
リンクに従って、svn -R revertを使用して、すべてのコンテンツを含むディレクトリ全体の削除を取り消します。-Rなしでsvn revertを実行すると、内容ではなくディレクトリが復元されます。
n13 2013

156

1)する

svn revert . --recursive

2)次のようなエラーの出力を解析します

"Failed to revert 'dir1/dir2' -- try updating instead."

3)エラーディレクトリごとにsvn upを呼び出します。

svn up dir1/dir2

12
これが最も正確な答えです。ありがとうございました。
greenoldman

1
それ以外はすべて元に戻りますか?あなたはそれをしたくないかもしれません。
n13 2013

1
これは、SVNが削除されたと考えるフォルダー全体がある場合に最も意味があります。作業コピーをチェックアウトしているときにそれがありました。1つのフォルダーが既に存在するため、競合が発生してチェックアウトされませんでした。別のフォルダへのリンクでした。私はそれを名前を変更してみましたsvn up、それがチェックアウトして取得するには、紛争を実現し、やったsvn resolved foosvn status私はとしてマーク10Kのファイルについて持っていた私に言いましたDsvn upそしてsvn revertそれらを取り戻しませんでした、しかしこれは問題を解決しました。
2014

6
+1は--recursive、削除されたディレクトリの内容を復元するのに役立ちます。
Melebius 14

1
あらまあ、あなたは私の夜を救った!
ArturOlszak 2016年

32

私のために働いたのは

svn revert --depth infinity deletedDir

これは私にとってはうまくいきました(svn 1.7.10)、svn revert deletedDirはジョブを実行できませんでした。すばらしい答えです。
rtome

4

削除したディレクトリの上のレベルから(再帰的)復帰操作を実行します。


1
これにより、必要以上に多くの変更がWAYされなくなります。
Michael Hackner、

これはSubversion 1.4.4では機能しません(試してみました)。svn help revertは、「このサブコマンドはネットワークアクセスを必要とせず、競合状態を解決します。ただし、削除されたディレクトリは復元しません。」申し訳ありませんが、バージョンを指定する必要がありました。1.4.4はMac OS X 10.5に付属しています。
LaC、2009年

4

それをワンライナーにするために、あなたは次のようなことを試すことができます:

svn status | cut -d ' ' -f 8 | xargs svn revert

名前にスペースを含むディレクトリを作成できます。それは「カット」AFAIKを壊すかもしれません。
Denis Barmenkov

1

私が見つけた最も簡単な解決策は、作業コピーから親ディレクトリを削除し(svn deleteではなくrm -rfを使用)、祖父母でsvn updateを実行することでした。たとえば、a / b / c、rm -rf a / b、cd a、svn upを削除した場合。それはすべてを取り戻します。もちろん、これは、保持したい親ディレクトリにコミットされていない変更が他にない場合にのみ有効な解決策です。

うまくいけば、次回この質問をググしたときに、このページが結果の上部に表示されるようになります。もちろん、誰かがよりクリーンな方法を提案したほうがよいでしょう。


これは、保留中の変更がある親のサブディレクトリがないことを前提としています。
ラッセル

0

コミットする前に、フォルダを削除して親ディレクトリを更新できます。

rm -r some_dir

svn update some_dir_parent

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.