Re: How to fork a file (git cp ?)
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 4, 2011, 21:02 UTC
- Message-ID
- <7viptqdvrf.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <4DC19955.7040503@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 7 quoted lines
> Am 04.05.2011 19:56, schrieb Mikhail T.: >> I need to add a new thing to our project. The thing will be similar to >> what already exists. I'd like to "derive" the new files from the >> existing ones -- without altering them and by preserving the >> change-history. > > You cannot. Git does not have such a thing as "copy-with-preserved-history".
Well, if you come from the mindset that a "file" has an identity (hence there is a distinction between "This file used to be called A and at one point was renamed to B which is the name we see today" and "Some time ago somebody created a file B with the same contents as A and then removed A at the same time"), "copy" would not make much sense. What identity does a new file B gets when you create it by copying from A?
The same identity, or a different one? What happens when you later refactor the redundant part from these two files to create a common third file C? What identity does C have?
> You just cp the file and git add it. But you will not be able to follow > a history of the file.
Correct. You cannot follow a history of _the file_, as there is no such thing.
You can still follow the history of contents, though. If you did a refactor like the one in the above example, "blame -L <range>" would follow the contents just fine. The command is a 80% satisfactory implementation of Linus's grand vision expressed in one of the most important message in the git mailing list archive:
http://thread.gmane.org/gmane.comp.version-control.git/27/focus=217