 <p>This error message was introduced with SubGit version 3.2.1 and SVN Mirror add-on version 3.3.0.</p> <p>SubGit/SVN Mirror rejects push operation that would result into branch replacement in Subversion repository. There are basically two cases when Git changes may lead to replacements on SVN side:</p> <ol> <li><p>Force push.</p> <p>When one forcefully pushes non-fast-forward update, SubGit/SVN Mirror has nothing to do but delete current version of the branch and re-create it from some older revision, because this is exactly what non-fast-forward update does: continuing branch history from a commit other than the branch tip.</p></li> <li><p>Fast-forward merge from one branch into another.</p> <p>When one creates a new branch <code>foo</code> from <code>master</code>:</p> <pre><code>$ git checkout -b foo $ git commit -am 'fix foo' [foo ca3caf9] fix foo </code></pre> <p>then pushes that branch to SubGit mirror:</p> <pre><code>$ git push origin foo ... Sending commits to SVN repository: remote: ca3caf9 =&gt; r10 branches/foo </code></pre> <p>which gets <code>ca3caf9</code> mapped to <code>branches/foo@10</code>.</p> <p>Finally, one merges branch <code>foo</code> back to <code>master</code>:</p> <pre><code>$ git checkout master $ git merge foo Updating 0e39ad2..ca3caf9 Fast-forward </code></pre> <p>Noticed that <em>Updating ... Fast-forward</em> message? It means <code>git merge</code> found no new commits on <code>master</code>, hence there was no need to create a merge commit, i.e. <code>git merge</code> just moved the <code>master</code> pointer from older commit <code>0e39ad2</code> to a newer one <code>ca3caf9</code>.</p> <p>Now what happens when one pushes <code>master</code> to SubGit mirror:</p> <pre><code>$ git push origin master </code></pre> <p>SubGit finds out that <code>master</code> was updated from <code>0e39ad2</code> mapped to <code>trunk@9</code> to <code>ca3caf9</code> mapped to <code>branches/foo@10</code>. There's nothing SubGit can do but delete <code>trunk</code> and re-create it from <code>branches/foo@10</code> which obviously leads to replacement of <code>trunk</code>.</p></li> </ol> <p>And so we made sure that SubGit does not replace branches in these two scenarios unless SubGit administrator explicitly sets the following configuration option:</p> <pre><code>$ edit REPO/subgit/config ... [svn] allowBranchReplacement = true ... $ subgit install REPO </code></pre> <p>However, I'd recommend to keep <code>svn.allowBranchReplacement</code> set to <code>false</code> and follow these best practices to avoid the error message reported in the original question:</p> <ul> <li><p>Never force push anything; prefer to merge, revert of branch out changes rather than overwrite them.</p></li> <li><p>When merging one branch into another add <code>--no-ff</code> option: it forces <code>git merge</code> to create a merge commit when it would rather do a fast-forward update otherwise:</p> <pre><code>$ git merge --no-ff foo </code></pre></li> </ul>