【SVN】ファイルの競合(conflict)が発生したときの正しい対処法

ソフト・ツール
記事内に広告が含まれています。

Subversion(SVN)で共同開発をしていると、避けて通れないのがファイルの競合(conflict)

複数人が同じファイルを編集している場合、更新時に「conflicted」状態となることがあります。
初めて見ると戸惑うかもしれませんが、慌てる必要はありません。

このポストでは、SVNで競合が起きた際の原因と、手動・自動の解決手順を丁寧に解説します。
初心者でも分かりやすいよう、具体的なコマンドや操作画面の説明を交えながら、ミスなく対処できる流れを紹介。

競合エラーに悩む前に、この記事でしっかり備えておきましょう!

はじめに:SVN競合とは?

Subversion(SVN)では、複数人が同じファイルを編集した場合に**競合(conflict)**が発生することがあります。
これは、あなたのローカル変更と、他のユーザーがすでにリポジトリにコミットした内容がぶつかっている状態です。

1. SVN競合のよくある原因

  • 同じ行を複数人が同時に編集し、先に誰かがコミット

  • 更新せずに編集 → その後にsvn update

  • コミット直前に他人の変更が入る

このような状況で svn update を実行すると競合が発生します。


2. 競合が発生したときの表示例

コマンドラインで以下のような出力が表示されます:

また、ファイル名の末尾に以下のような3つの一時ファイルが作られます:

  • index.html.mine(自分の変更)

  • index.html.rX(ベースリビジョン)

  • index.html.rY(相手の変更)


3. 解決手順:自動/手動

方法1:自分の変更を優先(mine)

この操作で、ローカルで編集した内容のみを残し、競合を解消します。

 

方法2:相手の変更を優先(theirs)


リモート(他者)でコミットされた内容をそのまま採用します。

 

方法3:手動でマージ

ファイルを開くと、以下のような競合マーカーが表示されます:

この部分を自分で修正・統合し、保存します。その後、以下のコマンドで解決済みにします:

補足:svn resolved はマーカーが消えただけでは自動で済まないので、必ず実行しましょう。

4. 使用する主なコマンド一覧

コマンド 説明
svn update 最新の変更を取得。競合が発生する可能性あり
svn resolve --accept mine-full 自分の変更をそのまま使う
svn resolve --accept theirs-full 相手の変更をそのまま使う
svn resolved ファイル名 手動解決後に状態を「解決済み」にする
svn status 競合状態の確認(C が付く)

5. 競合解消後の注意点

  • 必ず svn resolved を実行してから svn commit すること

  • .mine.r* の一時ファイルは手動で削除されます(resolved 実行時)

  • 自動で済ませず、内容を確認するのが安全

6. まとめ

SVNの競合は、正しい手順で対処すれば決して難しいものではありません。
慣れるまでは怖く感じるかもしれませんが、「どういう状態で起きて」「どのように解決するか」がわかれば、すぐに対応できるようになります。

この記事をブックマークしておけば、いざというときにも安心です!

 

おまけ

tortoiseSVNの公式サイトに詳細が載っているので、確認するのも大事です。

簡単な流れ

  • 【TortoiseSVN】 → 【競合の編集】で、TortoiseMergeを起動し、必要な編集を行う。
  • 編集後に【TortoiseSVN】 → 【競合の解決】コマンドを実行し、リポジトリに変更をコミットする。
    なお、競合の解決コマンドは実際に競合を解決する訳ではなく、変更をコミットできるようfilename.ext.mine や filename.ext.r* ファイルを削除するだけ。
タイトルとURLをコピーしました