515

私は友人と一緒にプロジェクトに取り組んでおり、古いバージョンのコードに戻り、それを現在のバージョンに設定したいと考えています。どうすればいいのですか?

vs08で「anksvn」を使っています。

自分の PC に必要なバージョンがありますが、コミットに失敗しています。「コミットに失敗しました。ファイルまたはディレクトリが古くなっています」というメッセージが表示されます。

私のPCにはSubversionクライアントもあります。

4

14 に答える 14

818

基本的には、「逆方向にマージ」する必要があります。現在のバージョンと以前のバージョンの差分を現在のバージョンに適用して(作業コピーが古いバージョンのようになります)、再度コミットします。たとえば、リビジョン 150 (現在) からリビジョン 140 に戻すには:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"

Subversion Red Book には、これに関する適切なセクションがあります

于 2009-05-02T08:38:28.500 に答える
180

サブバージョン履歴の先頭でのみ、新しい変更をコミットできます。

PC にある適切なコピーで直接何もできない理由は、その.svnフォルダーが過去のコードであることを認識しているため、コミットする前に更新が必要になるためです。

適切なリビジョン番号を見つけて元に戻す

  1. 必要な古いコピーのリビジョン番号を見つけます。

    現在のリビジョンを取得するには:

    svn info --show-item revision
    # or
    svn log
    

    または、プロジェクトの古いバージョンを確認するには、次を使用します。

    svn update -r <earlier_revision_number>
    

    正しいリビジョン番号が見つかるまで。

  2. 適切なリビジョン番号を書き留めます (123以下の例を想定)。

  3. 最新のリビジョンに更新します。

    svn update
    
  4. 必要なリビジョンと最新バージョンの間のすべての変更を元に戻します。

    svn merge -r HEAD:123 .
    svn commit -m "Reverted to revision 123"
    

    (上記のJon Skeetの回答と同じです。)

リビジョン番号が見つからない場合

古いコピーが見つからず、現在 PC にあるファイルをコミットしたい場合:

  1. .svn適切なバージョンのコピーを作成します (ただし、フォルダーはありません)。

    cd ..
    rsync -ai --exclude=.svn  project/  project-good/
    
  2. 最新バージョンであることを確認します。

    cd project
    svn update
    # or make a fresh checkout
    svn checkout <url>
    
  3. 正常なバージョンを作業コピーの上にコピーします。

    このコマンドは、適切なコピーにない作業ツリーからファイルをコピーして削除しますが、既存の.svnフォルダーには影響しません。

    cd ..
    rsync -ai --exclude=.svn --delete  project-good/  project/
    

    rsync がない場合は使用できますcp -aが、不要なファイルを手動で削除する必要があります。

  4. 今持っているものをコミットできるはずです。

    cd project
    svn commit -m "Reverted to good copy"
    
于 2009-05-02T09:43:51.200 に答える
35

この行を使用するだけです

svn update -r yourOldRevesion

以下を使用して、現在のリビジョンを知ることができます。

svn 情報

于 2013-03-27T13:21:28.240 に答える
8

もう少し古い学校

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch

それからいつもの

svn diff
svn commit
于 2013-09-02T10:53:15.687 に答える
3

これが私がしたことであり、私のために働いたものです。

特定の時間に行った複数のコミットの変更を元に戻し、前のコミット ポイントに移動したいと考えています。

  1. [チーム] -> [履歴を表示] に移動します。
  2. 無視するリビジョンまたはその範囲を右クリックします。
  3. 「変更を元に戻す」オプションを選択します。

これにより逆マージが実行され、作業コピーの変更が取り消されます。

コードを確認してコミットするだけです。

于 2014-02-28T20:08:13.787 に答える
2

元に戻したい最上位の階層を右クリック >>RevertまたはRevert to Revision

于 2009-05-02T08:40:04.037 に答える
1

このページには危険な回答がたくさんあります。SVN バージョン 1.6 以降、 update -r を実行するとツリーの競合が発生する可能性があることに注意してください。これは、ツリーの競合に関する情報をグーグルで検索しているときに、データが失われる可能性のある kafkeresque の悪夢に急速にエスカレートします。

バージョンに戻す正しい方法は次のとおりです。

svn merge -r HEAD:12345 .

12345 はバージョン番号です。ドットを忘れないでください。

于 2019-04-12T16:11:12.460 に答える
0

プロジェクトを右クリック > 置換 > リビジョンまたは URL > 元に戻す特定のリビジョンを選択します。

ここで、ローカル更新コード バージョンをリポジトリにコミットします。これにより、コード ベースが特定のリビジョンに戻ります。

于 2016-09-06T13:11:08.983 に答える
0

古いバージョンに同期してコミットします。これでうまくいくはずです。

ここでは、変更を元に戻す方法についても説明します。

于 2009-05-02T08:38:09.780 に答える
-1

以下は私のために働いています。

ローカルでの変更が多く、ローカル コピーの変更を破棄し、SVN の最後の安定バージョンをチェックアウトする必要がありました。

  1. 無視されたファイルを含むすべてのファイルのステータスを確認します。

  2. すべての行を grep して、新しく追加されたファイルと無視されたファイルを取得します。

  3. それらを に置き換え//ます。

  4. およびrm-rf すべての行。

    svn status --no-ignore | grep '^[?I]' |  sed "s/^[?I] //" | xargs -I{} rm -rf "{}"
    
于 2014-03-24T11:47:16.377 に答える