2009-07-31 19 views
148

私はTortoiseSVNでSubversionを使い始めました。ログを開いて古いリビジョンを右クリックすると、「リビジョンにアイテムを更新する」と「このリビジョンに戻す」の2つのオプションが表示されます。リビジョンへのアイテムの更新とリビジョンへの復帰

古いバージョンを振り返りたいが、本当にリポジトリを変更したくない場合、古いバージョンへの更新は使用されていることを理解します。元に戻すのは、実際に失敗し、リポジトリの最新のリビジョンを古いバージョンと同じにしたい場合です。

HEADリビジョンが100で、私は95に戻ってきます。私の作業コピーを95に戻してリビジョン101を作成するリポジトリにその変更をコミットできますか?私がリビジョン95に戻って更新する場合、どう違うのですか?それはまだ最後のリビジョンからの変更を元に戻すだけではありませんか?元のリビジョンに戻したり更新したりして、私の作業コピーの状態がどう違うか混乱しています。

答えて

190

リビジョンへの更新は、選択したリビジョンの作業コピーのファイルのみを更新します。 は、このリビジョンで作業することはできません。これは、SVNが作業コピーがであり、最新のであると不平を言うからです。この改正へ

元に戻すには、(あなたの例の回転に。96,97,98,99,100)選択したリビジョンの後に行われた作業コピー内のすべての変更を取り消します あなたの作業コピーは、修正された状態になりました。

両方scenarionsのファイルの内容は、しかし、最初のケースでは(あなたのworkingcopyがHEADを指していないように100をREV)第2のケースであなたはを持っているあなたは無修正作業コピーを持っているし、変更をコミットすることはできませんが、同じです頭を指して作業コピーを変更し、あなたの作業コピーの状態が両方のシナリオではどう違うのか、あなたはBASE revisionの概念を理解する必要があります理解するために働くと

+0

私はリビジョンに更新し、私の作業コピーにはデータがありません。ファイルを変更できなくなることはありません。ファイルのいずれかを変更してコミットしようとするとどうなりますか? Im Subversionを推測すると、競合が発生し、リポジトリの最新バージョンを私が修正する作業コピーにマージしてから、提出しなければなりません。 –

+5

HEADより古いBASE-Revisionを使用して項目をコミットしようとすると、「コミットに失敗しました:作業コピーが古くなっている可能性があります」 –

+2

偉大な答え、ありがとうございます。 – haylem

4

作業コピーを選択したリビジョンに更新します。作業コピーに過去の時間を反映させたい場合や、リポジトリへのコミットがさらにあり、作業コピーを一度に1ステップずつ更新したい場合に便利です。 1つのファイルだけでなく、作業コピーのディレクトリ全体を更新することをお勧めします。そうしないと作業コピーが矛盾する可能性があります。 は、これはあなたのテストを行っている場合、特定のrevの目的をテストするために使用され、あなたは別の回転をテストしたり、永続的に以前の変更を元に戻すにしたい場合はHEAD

を取得するためにSVN更新を使用するには、このコマンドを使用することができ、 この改訂版に戻すを代わりに使用してください。

- TSVNのヘルプドキュメントから

以前のリビジョンに作業コピーを更新した場合、これが唯一のあなたには、いくつかの変更を行い、コミットしたい後、あなたは失敗するでしょう、あなた自身の作業コピーに影響を与えている、TSVN WCを最新のリビジョンに更新するように警告します リビジョンに戻すと、リポジトリにコミットすることができます。

5

はまったく同じように見えますが、リポジトリはまったく異なる状態にあります。リポジトリは完全に異なる状態にあり、戻した後は別のオプションを使用できます。古いリビジョンに更新します。

簡単に言うと、「更新」は作業コピーにのみ影響しますが、「逆差し込みとコミット」はリポジトリに影響します。

古いリビジョンに「更新」すると、リポジトリは変更されません。例では、HEADリビジョンは100です。何かをコミットする必要はありません。コピー。作業コピーを変更してコミットしようとすると、作業コピーが古いことが伝えられ、コミットする前に更新する必要があります。同じリポジトリで作業している他の人が「更新」を実行した場合、または2番目の作業コピーをチェックアウトした場合はr100になります。

しかし、古いリビジョンに「逆マージ」しても、作業コピーはまだHEADに基づいています(最新のものと仮定して)が、不要なものに取って代わる新しいリビジョンを作成しています変更。リポジトリを変更しているので、これらの変更をコミットする必要があります。完了すると、HEADに基づく更新や新しい作業コピーには、あなたがコミットした内容のr101が表示されます。

29

をコミットし続けることができます。

BASE

作業コピー内のアイテムのリビジョン番号。項目が がローカルに変更されている場合は、 ローカル修正を行わないで、 項目が表示されます。

あなたの作業コピーは、それが最後のリポジトリから取得されたときのようを意味し、このBASEリビジョンに(の.svnフォルダ内に隠された)各ファイルのスナップショットが含まれています。これは、作業コピーが2倍のスペースを占める理由、およびネットワーク接続なしでローカルの変更を調べ、元に戻すことができる可能性があることを説明しています。

リビジョンにアップデートすると、このベースリビジョンが変更され、BASEが古くなります。ローカルの変更をコミットしようとすると、SVNはあなたのBASEがリポジトリのHEADと一致しないことに気付くでしょう。コミットは、これを修正するための更新(そして場合によってはマージ)を行うまで拒否されます。

リビジョンに戻すはBASEを変更しません。概念的には、以前のリビジョンと一致するように手動でファイルを編集することとほぼ同じです。

+0

「両方のシナリオのファイル内容は同じです」という回答からだからどうして気になる?この回答は、究極の違いを説明し、コミットしようとすると「復帰」と「復帰」が異なる動作をする理由を説明しています。 – radarbob

+0

ローカルの変更(コミットされていない変更)は 'update to'と' revert to/from'でどのように扱われますか? – BaltoStar

2

亀の参照からのテキスト:

アップデート項目改訂 には、選択したリビジョンに作業コピーを更新します。作業コピーに過去の時間を反映させたい場合や、リポジトリへのコミットがさらにあり、作業コピーを一度に1ステップずつ更新したい場合に便利です。 1つのファイルだけでなく、作業コピーのディレクトリ全体を更新することをお勧めします。そうしないと作業コピーが矛盾する可能性があります。

以前の変更を元に戻す場合は、代わりにこのリビジョンに戻すを使用してください。

この改訂版に戻す 前のリビジョンに戻す。いくつかの変更を加えて、リビジョンNの状態に戻って本当に戻ることにしたければ、これが必要なコマンドです。変更は作業コピーで取り消されます。この操作は、変更をコミットするまでリポジトリに影響しません。これにより、選択したリビジョンの後に行われたすべての変更が取り消され、ファイル/フォルダが旧バージョンに置き換えられます。

作業コピーが変更されていない状態の場合、この操作を実行すると、作業コピーが変更済みとして表示されます。すでにローカルに変更がある場合、このコマンドは元に戻す変更を作業コピーにマージします。

内部的に起こっていることは、選択したリビジョンの後に加えられたすべての変更を逆マージして、以前のコミットの効果を元に戻すことです。

作業を取り消して作業コピーを元の状態に戻す場合は、WindowsエクスプローラでTortoiseSVN→Revertを使用してください。これにより、このローカル変更が破棄されます逆マージアクション。

以前のリビジョンでファイルやフォルダがどのように見えるかを確認するには、リビジョンに更新を使用するか、リビジョンを別名で保存...を使用します。リビジョン構文に

関連する問題