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

Re: Move some files, with all history, from one project into a new one

From
Elijah Newren <newren@gmail.com>
Date
Apr 16, 2020, 06:05 UTC
Message-ID
<CABPp-BF7o1ba4=qqkqYjMm=YzuH5A=YU+C5zbd41g4pNY4yRKQ@mail.gmail.com>
In-Reply-To
<20200415154944.GA22823@syl.local>
On Wed, Apr 15, 2020 at 8:49 AM Taylor Blau <me@ttaylorr.com> wrote:
Show 20 quoted lines
>
> On Wed, Apr 15, 2020 at 11:11:28AM -0400, Jeff King wrote:
> > On Wed, Apr 15, 2020 at 08:31:35AM +0000, Kerry, Richard wrote:
> >
> > > I would like to move some files, from the project in which they have
> > > always resided into  a new project.  I would like to keep all their
> > > history.  I don't want to waste space by also moving the rest of the
> > > old project's history, or historical file contents.
> >
> > Try git-filter-branch's --subdirectory repository, which is designed to
> > do exactly this.
> >
> > Or the much newer (and faster) git-filter-repo:
> >
> >   https://github.com/newren/git-filter-repo
>
> For what it's worth, Elijah has provided some excellent documentation on
> how to use git-filter-repo to do exactly this here:
>
>   https://github.com/newren/git-filter-repo#solving-this-with-filter-repo

That particular example might be for a different case than what Richard requested, though. Let's say the original repo had a file structure like the following:

   module/
      foo.c
      bar.c
   otherDir/
      blah.config
      stuff.txt
   zebra.jpg
If the request is to e.g. take module/ and all files within it with
their history and make a new repository out of it, with module/ being
remapped to the root of the repository, then you would want:
   git filtrer-repo --subdirectory-filter module
and yes, this looks exactly like filter-branch; that's the one flag I
copied from it.  So this one usecase maps directly between the two
tools.

In contrast, if you wanted to keep all files from the original repo but move everything into a subdirectory named "myProject" (so that e.g. module/foo.c became myProject/module/foo.c), possibly in preparation for merging your repo into some larger monorepo, then you'd want to pass `--to-subdirectory-filter myProject` as in the link you pointed out. filter-branch doesn't have an equivalent.

Hope that helps, Elijah

Previous: Taylor BlauNext: Kerry, Richard
Message 4 of 5 in “Move some files, with all history, from one project into a new one”
  1. Kerry, RichardApr 15, 2020
  2. Jeff KingApr 15, 2020
  3. Taylor BlauApr 15, 2020
  4. Elijah NewrenApr 16, 2020
  5. Kerry, RichardApr 17, 2020

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.