[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Import some files in a repository

From: Benjamin Watine <watine_at_cines.fr>
Date: 2007-11-16 14:17:39 CET

Matthieu Moy a écrit :
> Benjamin Watine <watine@cines.fr> writes:
>
>> OK, I did what you said, and it works perfectly. But I don't know why
>> my "svn del + svn add" didn't work, even if it was not necessary.
>
> I don't know svn's internal well enough to give more details, but
> "delete + add" is not necessarily an no-op.
>
> In subversion, in each revision, a given file knows what is it's
> content, and where it comes from, i.e. whether is was added here, or
> comes from another file in another revision. A file can have multiple
> descendants (copy), but one or zero ancestor.
>
> If you modify a file, svn knows it's the same file, with
> modifications. "svn log" will follow its history, "svn blame" too.
> Someone else doing "svn update" will get the file updated, ...
>
> If you delete a file, and re-add it, even in the same revision, it's a
> new file, with the same name as the old. "svn log" and "svn blame"
> will not follow history through this delete+add, they consider the
> file was created here.
>
> Just try:
>
> $ echo content > foo
> $ svn add foo
> A foo
> $ svn commit -m "init"
> Adding foo
> Transmitting file data .
> Committed revision 1.
> $ echo other-content >> foo
> $ svn commit -m "second"
> Sending foo
> Transmitting file data .
> Committed revision 2.
> $ svn log foo
> ------------------------------------------------------------------------
> r2 | moy | 2007-11-16 13:23:41 +0100 (Fri, 16 Nov 2007) | 1 line
>
> second
> ------------------------------------------------------------------------
> r1 | moy | 2007-11-16 13:23:21 +0100 (Fri, 16 Nov 2007) | 1 line
>
> init
> ------------------------------------------------------------------------
> $ x=$(cat foo)
> $ svn rm foo
> D foo
> $ echo "$x" > foo
> $ svn add foo
> A foo
> $ svn status
> R foo # <---- "R" for "Replaced", i.e. delete+add
> $ svn commit -m "replace foo"
> Replacing foo
> Transmitting file data .
> Committed revision 3.
> $ svn log foo
> ------------------------------------------------------------------------
> r3 | moy | 2007-11-16 13:24:20 +0100 (Fri, 16 Nov 2007) | 1 line
>
> replace foo
> ------------------------------------------------------------------------
> $ svn blame foo
> 3 moy content
> 3 moy other-content
> $
>
> Now, I don't even want to imagine the mess if you also add+delete-ed
> directories ;-).
>
> (note: that's a design decision of svn, but not all VCS do this. Git
> doesn't have a notion of "delete+add" for example)
>

Yes, you're true, I will have loose the history with svn add + del. I
think I have to practice to understand all the subversion concepts.
Thank you for your precisions.

Regards

Ben

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Fri Nov 16 14:18:05 2007

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.