All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joshua Jensen <jjensen@workspacewhiz.com>
To: Brian Gernhardt <brian@gernhardtsoftware.com>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Following history of a copied file from another indirect branch
Date: Thu, 21 Oct 2010 14:06:24 -0600	[thread overview]
Message-ID: <4CC09D40.4050303@workspacewhiz.com> (raw)
In-Reply-To: <9089D1F5-A19B-4030-A6ED-463F250E450B@gernhardtsoftware.com>

----- Original Message -----
From: Brian Gernhardt
Date: 10/21/2010 1:39 PM
> On Oct 21, 2010, at 2:47 PM, Joshua Jensen wrote:
>> It has become a necessity to copy a file from one long-lived branch to another.  It is not possible to merge the branches at this time.
>>
>> I would like to have 'git gui blame' follow the copy back through its original history, but I don't believe Git has metadata for storing this.  Something along the lines of a 'followparent' in the commit object, for instance, would allow the revision walking code to wander the history down an alternate line.
> Git stores no per-file metadata.  The closest we come is .gitattributes and .gitignore.
>
>> By comparison, integrates work at a file level in Perforce.  That means I can integrate a file from one branch to another, and parentage is stored such that I can follow the file back through its history.
>>
>> Are there any facilities to do this now?
> Git simply does not have the idea of the history of a file.  Nothing in git will help merge "just a file" from one branch to another.  Either we have merged the two commits or not.
I'm not super interested in per file merging (which is a great concept, 
works well in Perforce, but is irrelevant here).  I merely want to 
preserve the original parentage so facilities like blame (ultimately 
rev-list?) can walk the extended history.  I'm fine even passing in a 
flag.  I do not care in preserving the original parentage for purposes 
of merging.

> You can use git-filter-branch to create a new branch that contains only that single file and only the commits that affected it.  Something like the following (untested):
>
> I would recommend using cherry-pick to pull any further changes to the file across branches (be careful of commits that touch more than that file!).  I think git-filter-branch could be used to keep the one file branch up to date, but that is likely more effort than it's worth.  I would specifically advise against merging the single file branch into both "src" and "dest", as I think any later merge of the two would find these commits as a merge-base.
Thanks for the info.

The problem with using cherry-pick is that the commits in question 
contain more than one file.  Perhaps the individual file should have 
been committed separately, but the damage was long ago done.

git format-patch --stdout HEAD..otherbranch -- the/filename | git 
am           or
git diff HEAD..otherbranch -- the/filename | git apply

Seem to be the appropriate methods of copying the file over with fake 
history or squashed together.

Josh

  reply	other threads:[~2010-10-21 20:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-21 18:47 Following history of a copied file from another indirect branch Joshua Jensen
2010-10-21 19:39 ` Brian Gernhardt
2010-10-21 20:06   ` Joshua Jensen [this message]
2010-10-22  6:35 ` Johannes Sixt

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=4CC09D40.4050303@workspacewhiz.com \
    --to=jjensen@workspacewhiz.com \
    --cc=brian@gernhardtsoftware.com \
    --cc=git@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.