web-dev-qa-db-ja.com

SVNの単一ファイルを特定のリビジョンに戻す

以前のバージョンに戻したいSVNリポジトリに、以下に示すようなファイルがあります。 SVNでこれを行う方法は何ですか?この特定のファイルをレポジトリ全体ではなく、古いバージョンにダウングレードしたいだけです。

ありがとう。

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial
167
Gökhan Sever

作業コピーに古いファイルだけが必要な場合:

svn up -r 147 myfile.py

ロールバックする場合は、この「 subversionでコードの古いバージョンに戻る方法? 」を参照してください。

176
Eric Hauser

svn catはリビジョン引数も取ります!

svn cat -r 175 mydir/myfile > mydir/myfile

64
svn revert filename 

これにより、単一のファイルが元に戻ります。

54
thestar

単一のファイルの場合、次のことができます。

svn export -r <REV> svn://Host/path/to/file/on/repos file.ext

svn revert <file>を実行できますが、それは最後の作業コピーのみを復元します。

50
Mitch Dempsey

これまでのところ、ここでのすべての答えは重大な欠点を持っているようで、複雑です(リポジトリURIを見つける必要があります)、または質問がおそらく求めていたものを実行しません:リポジトリを再び稼働状態にする方法ファイルの古いバージョンで

svn merge -r head:[revision-number-to-revert-to] [file-path]はIMOでこれを行う最もクリーンで簡単な方法です。deletedファイルを元に戻すことは、この方法では機能しないようであることに注意してください[1]。次の質問も参照してください。 ファイルの以前のSVNリビジョンに戻すより良い方法?

[1] svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn upが必要な場合は、 SVNから削除されたファイルを復元する正しい方法は何ですか も参照してください。

19
Michel Müller

最善の方法は次のとおりです。

svn merge -c -RevisionToUndo ^/trunk

取り消したくないファイルを単に元に戻すのではなく、リビジョンのすべてのファイルを元に戻します。リビジョンのプレフィックスとしてダッシュ(-)を忘れないでください。

svn revert File1 File2

次に、変更をコミットし直します。

13
khmarbaise

やりたい

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

これを行うと、ファイルのそのリビジョンがコミット可能状態になります。ファイルをコミットします。

7
Jennifer Elyse

svn catコマンドを使用してこれを行うのは簡単なので、リビジョンを指定する必要さえありません。

svn cat mydir/myfile > mydir/myfile

これはおそらく、タイムスタンプなどのiノード(メタデータ)データをロールバックしません。

7
Joseph Coco

コメントするのに十分な担当者がいないので、@ Mitch Dempsyの回答に追加するだけです。

svn export -r <REV> svn://Host/path/to/file/on/repos --force

--forceを追加すると、ローカルコピーがエクスポートで上書きされ、svn commitを実行してリポジトリにプッシュできます。

4
Kristina

数個のファイルのみで、Tortoise SVNを使用している場合は、次のアプローチを使用できます。

  1. ソースファイルを右クリックし、[TortoiseSVN]-> [ログを表示]を選択します。
  2. ログ内のリビジョンを右クリックし、「リビジョンを保存...」を選択します。
  3. 古いリビジョンで現在のファイルを上書きします。
  4. 上書きされたソースファイルをコミットします。
4
Elling

誰もこれに言及していないことに驚いた

リビジョン番号を見つけることなく、これを書くことができます。元に戻したいものをコミットした場合、他のファイルを変更し、ターゲットファイルが最後に変更されたファイルではない場合、これは機能しません

svn merge -r HEAD:PREV file
2
Kalpesh Soni

特定のリビジョンから個々のファイルをロールバックし、コミットできるようにする場合は、次を実行します。

svn merge -c-[OldRev#] [ファイル名]

すなわち。 svn merge -c -150 myfile.py

リビジョン番号のマイナスに注意してください

1
Olmstov

単一ファイルの代替オプションは、ファイルの現在のバージョンを古いリビジョンに「置き換える」ことです。

svn rm file.ext
svn cp svn://Host/path/to/file/on/repo/file.ext@<REV> file.ext
svn ci

これには、このファイルのログ(つまり、svn log file.ext)に不要な変更が表示されないという追加機能があります。

0
Robert Leland
Sudo svn revert filename

これは、単一のファイルを元に戻すより良い方法です

0