← 개발일지

SVN E155015: How to Fix 'Remains in Conflict' Commit Error


Your Commit Just Got Rejected

You try to commit and SVN throws this at you:

svn: E155015: Commit failed (details follow):
svn: E155015: Aborting commit: '/project/src/main/resources/static' remains in conflict

Nothing's wrong with your code. The problem is an unresolved tree conflict sitting in your working copy.

Text Conflict vs. Tree Conflict

Most developers are familiar with text conflicts — two people edit the same line, and SVN drops <<<<<<< markers into the file for you to sort out.

Tree conflicts are different. They happen when the structure of the repository disagrees between your working copy and the server. Think: you modified files inside a directory that someone else deleted, or two people added different files at the same path. During svn update, SVN can't auto-merge these structural disagreements, so it leaves them as unresolved tree conflicts. Until you explicitly resolve them, every commit attempt hits E155015.

The Fix

Check what's conflicted

svn status

Look for entries marked with C — those are your conflicts.

Resolve

# Keep your local state
svn resolve --accept working -R <conflicted_path>

# Or take the server's version
svn resolve --accept theirs-full -R <conflicted_path>

The -R flag resolves recursively. This matters because a tree conflict on a directory often cascades to individual files inside it.

Before running --accept working, verify your local state with svn diff and svn status. Tree conflicts aren't about merging content — you're choosing which directory structure wins.

Commit

svn commit -m "resolve tree conflict"

Resolving in IntelliJ

Go to VCS → Subversion → Resolve Conflicts to see the conflict list and resolve from the UI.

Here's the catch: IntelliJ's SVN UI frequently fails to detect tree conflicts. If the list shows up empty or the resolve action doesn't work, open IntelliJ's built-in Terminal tab and run the svn resolve command directly. It's more reliable.

After resolving, hit VCS → Refresh File Status so IntelliJ picks up the updated working copy state.

Multiple Conflicts at Once

# See all conflicts
svn status | grep "^C"

# Apply different strategies per path
svn resolve --accept working -R src/main/resources/static
svn resolve --accept theirs-full -R src/main/webapp/config

You can resolve everything in one shot with svn resolve --accept working -R . from the project root, but be aware this applies the same strategy to every conflict. Review first.

Key Takeaway

Tree conflicts are structural, not textual. SVN can't auto-merge them — you have to explicitly tell it which side wins. When IntelliJ's UI doesn't cooperate, the terminal is your most reliable tool.