> 1. Adding anything requires the user to run "svn add".
> 2. Renaming anything requires the user to run "svn rename".
> 3. Copying anything requires the user to run "svn cp".
> 4. Deleting anything is done simply by deleting the thing --
> Subversion will detect the deletion automatically and do the
> right thing when you commit.
> The pattern here is that anything which is creating a new file
> somewhere requires an svn command, but mere removal does not. This is
> because it's much more common to accidentally create random files in a
> working copy (backup files, patch files, scratch pads, whatever) than
> to accidentally remove a file that's under version control.
I don't think you've made your case here.
You argue that people are more careful about removing controlled files
than creating uncontrolled files. And that "[o]nce a file is under
version control, the user is presumed to be treating it with the
respect it deserves." I agree with that.
However, I think the principle is broader and simpler: people are
careful with all changes to controlled files; and they are not so
careful with uncontrolled files.
accidentally delete a file under version control --- that if they do
so, it's almost certainly a deliberate action. Again, I agree.
But here's the problem: the same is true of renaming and copying
versioned files: it's almost always done on purpose, and Subversion
should interpret that as a change that should be committed. You've
failed to establish any distinction between deletes, copies, and
So now we're back to where we started: we know the behavior we want ---
Subversion should simply notice all changes to controlled files ---
but we can't implement that. That's why we have `svn mv' and `svn cp'
in the first place. So the only rationale left for treating `rm'
differently is `we can figure out how to implement that'. Which is a
that `rm' is different from `cp' and `mv'. Since they can work the
same, they should work the same.
Received on Sat Oct 21 14:36:09 2006