git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Thomas Rast <trast@student.ethz.ch>
Cc: Kelly Dean <kellydeanch@yahoo.com>, <git@vger.kernel.org>
Subject: Re: Does content provenance matter?
Date: Mon, 07 May 2012 17:08:09 -0700	[thread overview]
Message-ID: <7vaa1j357a.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <878vh4flh1.fsf@thomas.inf.ethz.ch> (Thomas Rast's message of "Mon, 7 May 2012 10:23:38 +0200")

Thomas Rast <trast@student.ethz.ch> writes:

> Kelly Dean <kellydeanch@yahoo.com> writes:
>
>> [copying B/X over to C/X is not recorded as such], on the theory that
>> just content, not provenance, is what matters.
>
>> [merging branches *is* recorded], on the theory that not only content,
>> but also provenance, matters.
>
>> The basic question is, if provenance doesn't matter, then why does a
>> git commit record its parent(s)? Why not omit this information, and
>> figure it out at search time (by looking at all commits with older
>> timestamps), the same as you're supposed to figure out renames at
>> search time and figure out the movement of lines within/among files at
>> search time (by looking at all files in the parent commit(s))?
>
> What's the difference between the following series of commits?
>
>   Foo
>   Bar
>   Revert Bar
>
> and
>
>   Foo
>
> You claim that they're the same, because the tree state after each is
> the same.  But I learned that Bar was broken, and recorded it for all to
> see.

I am not sure if that is what the original poster was claiming.

But a more illustrative situation to consider is this.  What if the change
were not just "copy B/X to C/X", but was "concatenate the first half of
B/X and the second half of C/X to create a new D/X".

As it happens, because our commit records the whole tree state and its
parent commit, the "content provenance" of what is in D/X is precisely
tracked.  Look at the tree of the parent commit and look at the result,
and you will notice the first half of D/X is identical to the first half
of B/X before the commit and the second half of D/X is identical to the
second half of C/X before the commit.

In a situation where "provenance" is disputed, it does not matter if D/X
was created by mechanically running

	head -n $n B/X >D/X
	tail -n $n C/X >C/X
        
or if you typed the file afresh.  You could try to argue "No, your honour,
I did not copy from these two files.  I typed it myself from scratch and
there is no plagiarism involved.  They are all my words."  But in the end,
by comparing the tree state before your change and after your change, it
would be very clear to any sane person that D/X is identical to the first
half of B/X and the second half of C/X.

Also see http://article.gmane.org/gmane.comp.version-control.git/217 aka
one of the most important messages in the history of the Git mailing list
for inspirations.

  parent reply	other threads:[~2012-05-08  0:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-05 20:49 Does content provenance matter? Kelly Dean
2012-05-07  8:23 ` Thomas Rast
2012-05-07 21:43   ` Kelly Dean
2012-05-07 22:14     ` PJ Weisberg
2012-05-07 23:13       ` Kelly Dean
2012-05-08  0:03         ` Andrew Ardill
2012-05-08  9:23         ` Philip Oakley
2012-05-08  0:08   ` Junio C Hamano [this message]
2012-05-08  0:11     ` Junio C Hamano
2012-05-07 23:12 ` Jakub Narebski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vaa1j357a.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=kellydeanch@yahoo.com \
    --cc=trast@student.ethz.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).