git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Merging changes from branches where file paths have changed

From
Thomas Adam <thomas.adam22@gmail.com>
Date
Apr 14, 2012, 13:15 UTC
Message-ID
<CA+39Oz7m1hGrTEdpSAjBP3EDFSVyKdc6T9CORcwQkjuEbvD4Ug@mail.gmail.com>
Hi all,

I've got two git repositories -- for the purposes of illustration, I'll call them RepoA, and RepoB. RepoA is a large repository originally from a CVS conversion. Repo B is a repository which has been formed from git-filter-branch (should it matter) from RepoA.

In doing the conversion -- RepoB contains the same history as in RepoA, except that RepoB is now a limited subset in terms of its files that RepoA has (repoB contains commits out of repoA for a specific subdirectory). However, the problem I'm wanting to solve now, which is causing me to scratch my head and go "hmm", is how I go about merging commits from RepoA and have them in RepoB -- where the commits from repoA are in the same *directory* as the one which formed RepoB.

In RepoA, for the directory (and all its sub-directories) which is contained in RepoB, I've got a list of commits -- roughly like the following:

% cd ./distrib/build/sources/coretree/tree % git log --oneline master..my/topic/branch -- .

Now in RepoB, I've got all of the directories and files from ./distrib/build/sources/coretree/tree/ in the root, having obtained this from git-filter-branch from RepoA. Despite the change of file locations, the history of the files between the two repositories are the same.

The commits though coming from "git log" in RepoA touch files in distrib/build/sources/coretree/tree, yet the files to which I want the changes for in RepoB are not in "distrib/build/sources/coretree/tree" -- there all in "./" at the top-level directory for RepoB. The files in both once shared the same history -- it's just that now the locations of those files in RepoB which have changed.

I want to cherry-pick the commits I obtained from the "git log" command in RepoA, and have them contained in RepoB. So I thought something like this would work:

[ In RepoB.... ]: % git remote add repoA file:///path/to/repoA/ % git fetch repoA % git checkout specific/branch % git cherry-pick $SOME_COMMIT_FROM_REPOA

However, this won't work, and doesn't. Not only do the two repositories not have any common ancestry, but even if they did, the file paths from RepoA and RepoB do not match for the commit(s) I would want to cherry-pick. As far as I can tell, were I able to convince Git the file paths did work, then I could cherry-pick them.

Can anyone suggest a good way round this? I hope I've managed to explain this adequately; just ask if not.

Thanks in Advance.
-- Thomas Adam
Next: Johannes Sixt
Message 1 of 4 in “Merging changes from branches where file paths have changed”
  1. Thomas AdamApr 14, 2012
  2. Johannes SixtApr 14, 2012
  3. Thomas AdamApr 14, 2012
  4. Johannes SixtApr 14, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.