There is some wrong code in libsvn_client/externals.c:switch_file_external which does else { svn_node_kind_t disk_kind; SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool)); if (kind == svn_node_file || kind == svn_node_dir) return svn_error_createf(SVN_ERR_WC_PATH_FOUND, NULL, _("The file external '%s' can not be " "created because the node exists."), svn_dirent_local_style(local_abspath, scratch_pool)); } We get disk kind but don't use it. This is triggered by an unversioned file obstructing an incoming file external: svnadmin create repo svn -mm import repo/format file://`pwd`/repo/A/f svnmucc -mm propset svn:externals '^/A/f g' file://`pwd`/repo/A svn co file://`pwd`/repo@1 wc echo g > wc/A/g svn up wc At present this update shows a tree conflict for A/g but doesn't record it, and A/g contents are not updated: $ svn up wc Updating 'wc': U wc/A Fetching external item into 'wc/A/g': A wc/A/g Updated external to revision 2. At revision 2. $ svn st wc M X wc/A/g If we change the code to use disk kind then the external is skipped, and A/g remains unversioned. However a subsequent no-op update to the same revision will not skip and do the notification/non-recording. It's not clear to me what the behaviour should be, I'll commit a test with the current behaviour.