5

誰かが、ファイルを削除する単一のサブバージョン コミットを作成し、同じ名前の新しいファイルを追加しました。このファイルは、元のファイルと 155 までの新しい行で構成されています。

(彼らがどうやってこれをやったのか私にはわかりません。)

現在、「svn log」にはそのコミットにさかのぼる履歴のみが表示されます。これを行った時点の前後のファイルのリビジョンを比較したい場合は、フープをジャンプする必要があります。(例: 'svn diff -rn:m' の代わりに 'svn diff url@oldrev url@newrev')

これが発生した後、このファイルに対していくつかのコミットが行われました。(約3)。

どうすればこれを修正できますか?

Linux でコマンド ライン 'svn' クライアントを使用しています。

4

3 に答える 3

2

Mightymuke は実際には正しいです。

手順は次のとおりです。

  1. 新しく作成されたファイルのすべてのリビジョンに注意してください(私はそれらをR1 ..からRnと呼びます)
  2. 元のファイルが削除されたときのリビジョンに注意してください(私はそれをRdと呼びます)
  3. 少なくともこのファイルで作業コピーをチェックアウトします
  4. 新しいファイルを削除し、変更をコミットし、コミット R1 でファイルが間違って追加されたことをコミット メッセージに記載します (リビジョンを記載し、なぜ間違って追加されたのかを誰もが理解できるようにします)
  5. 作業コピーを更新します ('svn update')
  6. tortoiseSVN を使用している場合は、show log を使用して履歴で Rd を見つけ、それをクリックして削除されたファイルを右クリックし、[このリビジョンからの変更を元に戻す] を選択します。これをリビジョン全体で使用しないでください。 . 他の OS では、これにリバース マージを使用します ("-c-Rd" は、削除されたファイルのリビジョンが 50 の場合、たとえば "-c-50" を意味します)。

    svn マージ -c-Rd

  7. 削除されたファイルから現在のファイルの内容を復活したファイルにコピーしてコミットします(コミットメッセージでリビジョンR2..Rnを元に戻すことを述べます)。別の方法: 古いリビジョンをそれぞれ再作成して、個別にコミットすることもできます (各コミット メッセージで元のリビジョン R2...Rn を指定します)。

于 2012-11-19T20:56:54.780 に答える
0

これは古い質問だと思いますが、まだ簡単な答えはないようです。

最初に説明した問題は簡単に実行できます。1 回のコミットで、ファイルを削除します。後のコミットで、ファイルを再度追加します。これにより、同じ名前の 2 つのファイル間の svn 履歴が壊れます。

修正は簡単です。svn rm最新のファイル、svn cp事前に削除された適切なファイル リビジョンを実行してから、最新の更新でファイルを手動で更新し、再度チェックインする必要があります。

たとえば、リビジョン 1234 で myFile.h が削除されたとします。

$ cp myFile.h myFile.h.latest        # save copy of latest edits.
$ svn rm myFile.h                    # remove file from svn
$ svn cp myFile.h@1233 myFile.h      # restore the pre-deleted revision (along with history)
$ cp myFile.h.latest myFile.h        # overwrite local copy with latest edits
$ svn ci myFile.h                    # save to SVN
于 2016-11-29T19:23:32.787 に答える
0

コマンドは次のとおりです。

$ svn log affected   # Find the last rev that is good, and write it down.
$ svn rm affected
$ svn ci -m'Reverting to save.' affected
$ svn cat -rGOOD_REV affected > affected
$ svn up # important
$ svn add affected
$ svn ci -m'Readding damaged file.' affected
$ svn up # important
# Get revisions after bad import
$ svn diff -rBAD_REV:BAD_REV_PLUS_ONE > diff1.txt
$ patch -p0 < diff1.txt
$ svn ci -m'Rescued -rBAD_REV_PLUS_ONE.' affected
$ svn diff -rBAD_REV_PLUS_ONE:BAD_REV_PLUS_TWO > diff2.txt
$ svn ci -m'Rescued -rBAD_REV_PLUS_TWO.' affected
于 2012-11-19T22:57:04.183 に答える