以前に与えられた答えの繰り返しだけでいくつかのスペースを使い果たして申し訳ありません-しかし、これは私がいつも悩んでいるものです。
ローカルファイルを最新のリビジョンである854に更新したとします。次に、古いリビジョンを取得したいと思います。以前のいくつかのリビジョンからのファイルのバージョン、たとえばリビジョン851です。
コピーはうまくいくでしょう:
svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
..しかし、私はリポジトリURLのgreppingに煩わされることはありません:)
一見アップデートはうまくいくかもしれません:
svn up -r 851 ./l3toks.dtx
...しかし、ローカルコピーを「チェックアウトしたばかり」または「オンラインリビジョンと同じ」としてマークします(Tortoise / RabbitVCSでは緑色のOKチェックマークが表示されます)。つまりsvn ci -m "rolled back to r 851"
、ローカルsubversion
実行可能ファイルはローカルの変更に気付かず、何もオンラインリポジトリにアップロードすることに煩わされません。
そして、既に回答したように、リバースマージは機能しますが、この場合、ショートカット構文に依存するべきではありません。しかし具体的に述べる:
svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U l3toks.dtx
私は認めなければなりません。「r854からr852をファイルにリバースマージする」という文は、「ファイルのr851を取得し、以前ローカルで行っていたものをすべて上書きした」という意味では決して理解できません。新しい「ロールバック」リビジョンとしてオンラインで確認することもできますが、私はそう思います(そして願っています:))それはそれが何をするかです:)
この後svn diff
、正しいリビジョンをローカルに戻したかどうかをすばやく確認するために使用できます。また、ファイルはTortoise / RabbitVCSで赤い感嘆符でマークされます(つまり、最新のコミットバージョンとは異なります)。そのためsvn ci -m "rolled back to r 851"
、今回は実行できます。
また、最後にリバースマージの後で気が変わった場合(つまり、とにかく最新のHEADリビジョン(ここでは854)をローカルでロールバックした後で、まだロールバックをコミットしていない場合に注意してください。)、svn up
それはすでに「リビジョン854にある」と単に表示されるため、使用しないでください。代わりにsvn revert --recursive .
または同様に使用してください...
乾杯!
参照:Subversionを使用して変更をロールバックする方法-Jacob Wright – Flex、AIR、PHPなど
編集:...そして明らかに、とまったく同じ効果はsvn merge -r HEAD:851 l3toks.dtx
、次のようにして達成できます:
svn export -r 851 l3toks.dtx
A l3toks.dtx
Export complete.