14

I had a folder that was part of one project in svn, that has been moved to a different folder / repository to be shared between projects. i want to replace this directory in svn w/ a symlink, but when I try to do so, I get this message:

svn: Entry '/project/wwwdocs/js' has unexpectedly changed special status

how can I replace this directory with a symlink?

GSto
  • 41,512
  • 37
  • 133
  • 184

4 Answers4

18

The following sets the special property on every symlink and deletes it on normal files/directories. There are various ways to the determine the files to operate on.

svn_special_files=`svn propget --recursive svn:special | cut -d' ' -f1`
for i in `find . | grep -v "\.svn" | cut -d'/' -f2-`; do
  is_special=false
  for j in $svn_special_files; do 
    if [ "$j" = "$i" ]; then 
      is_special=true; 
      break; 
    fi
  done
  if [ -h $i ] ; then
    ! $is_special && svn propset svn:special '*' $i
  else
    $is_special && svn propdel svn:special $i
  fi
done
Mrk
  • 181
  • 1
  • 3
  • Very useful routine, and I never knew you use use ! like that. (+1) – Orwellophile Oct 23 '13 at 02:42
  • Explanation of the script: By setting the svn:special property correctly, you can commit the change from file to symlink or from symlink to file in one go. The script automatically sets the correct svn:special property for all files in your repository. – phobic Aug 29 '16 at 12:39
  • Not sure if this answer is only relevant to an older version of svn, but when I try to propset on the symlink I get this error: "svn: Expected '/path/to/symlink' to be a directory but found a file". And if I try to commit it I get "svn: Entry for '/path/to/symlink' has no URL". Any tips? (svn --version indicates 1.6.17) – dlo Apr 03 '18 at 21:12
16

In order for subversion to pick up the changes and detect the symlink, you need to first remove the original file, commit the deletion, and then update your repository. After that you should be able to add a symlink without any issues.

EDIT: This question seems to have been asked before and received some decent feedback. Check it out: Commit symlink into subversion

Community
  • 1
  • 1
Damien Wilson
  • 4,540
  • 3
  • 21
  • 27
3

You can even try a simple answer of removing culprit file -

svn remove --force <file>

This is especially helpful for Windows users using SVN cli.

Soman Dubey
  • 3,798
  • 4
  • 22
  • 32
1

You could execute command blow to fix this problem.

svn propset svn:special on /project/wwwdocs/js
Yates Zhou
  • 51
  • 4