diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
index 9d2be7e17fc1999d734200ad7a991f3390a34bb7_bWVyY3VyaWFsL3N1YnJlcG8ucHk=..bcc6ed0f6c3bc147946a3bd82317e40a583e007e_bWVyY3VyaWFsL3N1YnJlcG8ucHk= 100644
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -621,7 +621,15 @@
             self._svncommand(['revert', '--recursive'])
         status = self._svncommand(['checkout', state[0], '--revision', state[1]])
         if not re.search('Checked out revision [0-9]+.', status):
-            raise util.Abort(status.splitlines()[-1])
+            # catch the case where the checkout operation is
+            # obstructed but the working copy is clean
+            if ('already a working copy for a different' in status and
+                not self.dirty()):
+                self.remove()
+                self.get(state, overwrite)
+                return
+            else:
+                raise util.Abort(status.splitlines()[-1])
         self._ui.status(status)
 
     def merge(self, state):