web-dev-qa-db-ja.com

Subversionでファイルを元に戻す簡単な方法は何ですか?

これらの手順は少し威圧的でわかりにくいです。 http://svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4. また、「svn rm」[1]を実行した後、まだチェックインしていない方がはるかに簡単だということも言及していないようです。

だから私は、これをグーグルでやっている人たちにもっと簡単な答えを記録するのに良い場所だと思った。

[1] svn初心者にとって、「svn rm」はすぐにファイルを破壊するように見えるかもしれません。 svn rmを実行すると、ソース管理からファイルが削除されるだけで、ファイル自体が実際に消えたときに異常終了することを思い出しました。サブ質問は、実際にローカルコピーを削除せずにバージョン管理からファイルを削除する正しい方法は何ですか?

71
dreeves

あなたがちょうどやったら

svn rm foo.txt

その後、単純にそれを元に戻すことができます

svn revert foo.txt

svn rm "ログを見ることができます(svn log)、ファイルが存在した最後のリビジョンを見つけ、そのバージョンからそれを取得します。

そのための1つの方法は、ファイルがある古いリビジョンにマージすることです。現在のリビジョンが123で、そのファイルの最後のバージョンが120であると仮定して、次を実行します。

svn merge -r123:120

たぶん最初にドライランをして、あなたが望まないことを何もしないことを確認してください:

svn --dry-run merge -r123:120

サブ質問の場合、ローカルコピーを削除せずにsvnからファイルを削除する方法:

svn rm foo.txt --keep-local

または、もちろん、svn rm'ingする前に一時ファイルにコピーしてからコピーして戻すこともできます:

cp foo.txt foo.txt-tmp
svn rm foo.txt
(svn ci -m "just removed foo.txt from the repository")
cp foo.txt-tmp foo.txt
84
dreeves

何らかの理由で、-r argが機能していませんでした(svnバージョン1.6.9)。 srcの前後に試しましたが、ファイルが現在のリビジョン(duh)で見つからなかったというメッセージを受け取り続けました。 --revisionと同じです。ただし、@スタイルの構文を使用するとうまくいきました。

svn cp url/to/removed/foo.txt@4 foo.txt
41
Michael Rush

ファイルを削除して作業コピーに保存するには、次を使用します

svn rm foo.txt --keep-local

削除をコミットした後にファイルを取り戻すには、mergeコマンドまたはcopyコマンドのいずれかを使用できます。両方ともファイル履歴を保持します。マージ方法は他の場所ですでに説明されているため、コピー方法は次のとおりです。

svn rm foo.txt
svn ci foo.txt -m "removed file"
(now at r5 as an example)
svn cp url/to/removed/foo.txt -r4 foo.txt
svn ci foo.txt -m "got file back"
31
Stefan

TortoiseSVNユーザーの場合、これはRepo Browserを介して非常に簡単に実行できます。リポジトリブラウザ内で、ファイルが削除される前のリビジョンに切り替えます(右上の[リビジョン:]ボタンを使用してバージョンを変更できます)。

enter image description here

これで、削除されたファイルがレポブラウザーの元の場所に表示されるはずです。それを右クリックして、「作業コピーにコピー...」を選択します。

enter image description here

ファイルは、(svnが追加されたかのように)コミットの準備ができた作業コピーに復元され、ログ履歴はそのまま残ります。

5
atkins

SVNで削除されたファイルを元に戻すには。削除の直前にリビジョン番号を見つけます(たとえば341)。次に、そのファイルのみをそのリビジョン番号に戻します。

svn up -r341 [path_to_deletedFile]
2

私はカメを使用して前のリビジョンからコピーメニュー項目を使用し、私のために働いて、歴史を保持しました。

1
WendyG