2009-04-13 12 views
25

と等しくなったのですかsvnのBASEバージョンに関する質問がありました。私はそれが最後のアップデートが実行され、svn diffとステータスが基本的にこのバージョンに対して実行されたときのアイテムの元々のバージョンであることを知っています。 BASEはいつ更新されますか?更新プログラムの実行時にHEADに更新されますか?更新中に競合があったとしても、これは常に正しいですか? BASEは何の矛盾を起こしていますか?競合が発生した最新のアップデートより前のバージョンのアップデートはまだありますか?または競合があってもHEADにアップデートされますか?
また、svn commitを実行すると、BASEが私のローカル変更で更新され、この時点でBASE、HEAD、およびローカルコピーがすべて同じであると仮定していますか?コミットが成功した場合。いつsvn BASEがHEAD

答えて

38

HEADは、リポジトリの最新のリビジョンです。 BASEはリポジトリから取得した最後のリビジョンです。コミットまたは更新が成功した後も同じです。

変更すると、ファイルはBASEコピーとは異なります。元に戻すと、BASEリビジョンとの一致に戻ります。競合すると、リポジトリを更新しません。むしろ、変更を行っているかのように、ファイルは「編集中」とみなされます。競合を解消した後は、最終的なファイルの外観を決定し、通常どおりにコミットします。したがって、コンフリクトは特殊な編集のようなものです。

+3

ただし、コミット後に必ずしも更新する必要はありませんが、簡単には更新後も同じです。ディレクトリと "複合リビジョン作業コピー"を考慮してください。 – bendin

+0

"Subversionの基本的なルール"の1つは、これらの "複合リビジョン作業コピー"を作成することです。つまり、何が起こっているのかを完全に知ることなくコミットを作成することができます。 –

7

BASEは、リポジトリに存在する作業コピーのリビジョンです。言い換えれば、変更を加えることなくあなたのリビジョン。あなたがsvn updateのファイルやフォルダをHEADに設定した場合、BASEとHEADは等しくなります。

競合が発生した場合、BASEは作業コピーと競合するコミット前のリビジョンになります。

アイテムにsvn infoを実行すると、ベースリビジョンが表示されます。

Revision Specifiers

0

理論:成功した再帰的な更新またはスイッチが成功すると、すべてのファイルのベースバージョンが先頭になります。コミットまたは部分的な更新後、一部のファイルはHEADリビジョンにある可能性がありますが、ファイルをスキップしなかった更新後にのみ、すべてのファイルが同じバージョンであることを確認できます。 (スキップする理由は、バージョン管理されていない障害または競合です)。

しかし、は、なぜこれを知る必要がありますか。 Subversionはこれを内部的に知っていなければなりませんが、ほとんどの場合、この知識はユーザにとって重要ではありません。 (Subversionは、ファイルが古くなったときに自動的に警告します)。

私が知る限り、作業コピーからブランチを作成するときは、安定版であることを確認する必要があります。

+1

私はsvnの動作とその実装の詳細を理解したかっただけです。お返事をありがとうございます。 – HeretoLearn

3

URLを表示していないsvnログではBASEログが表示されますが、あなたのHEADログがURLで表示されるので、重要です。そのため、すべての変更を見るには常に「svn log -rHEAD:1」を使用します。

関連する問題