git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Move some files, with all history, from one project into a new one
@ 2020-04-15  8:31 Kerry, Richard
  2020-04-15 15:11 ` Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Kerry, Richard @ 2020-04-15  8:31 UTC (permalink / raw)
  To: git@vger.kernel.org

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.

We have a long-standing project, main-system.  A group of files within it are designated as demo-system (sometimes whole folders, sometimes files within folders with other files).
All development is done on the master branch.
It has now transpired that the demo-system files are necessary, but no longer want to be within main-system but in a new project of their own.  So I would like to move them from the main-system repo into a new repo of their own.  I do want all their history but I don't want to take any contents from other files from main-system, which is quite big.
Please can someone advise if there is a particular method I should best use for this.
Do I create a new branch, then delete the rest of main-system leaving only what I want?  Surely if I do that then I would end up with all the main-system file data within the new repo, which would expand its size.
Is there a recommended way to extract certain files with their histories?

Regards,
Richard.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Move some files, with all history, from one project into a new one
  2020-04-15  8:31 Move some files, with all history, from one project into a new one Kerry, Richard
@ 2020-04-15 15:11 ` Jeff King
  2020-04-15 15:49   ` Taylor Blau
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2020-04-15 15:11 UTC (permalink / raw)
  To: Kerry, Richard; +Cc: git@vger.kernel.org

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

> Do I create a new branch, then delete the rest of main-system leaving
> only what I want?  Surely if I do that then I would end up with all
> the main-system file data within the new repo, which would expand its
> size.  Is there a recommended way to extract certain files with their
> histories?

Correct; just deleting files and creating a new commit will still carry
them in the history. You have to rewrite the old commits.

-Peff

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Move some files, with all history, from one project into a new one
  2020-04-15 15:11 ` Jeff King
@ 2020-04-15 15:49   ` Taylor Blau
  2020-04-16  6:05     ` Elijah Newren
  0 siblings, 1 reply; 5+ messages in thread
From: Taylor Blau @ 2020-04-15 15:49 UTC (permalink / raw)
  To: Jeff King; +Cc: Kerry, Richard, git@vger.kernel.org, newren

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

Thanks,
Taylor

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Move some files, with all history, from one project into a new one
  2020-04-15 15:49   ` Taylor Blau
@ 2020-04-16  6:05     ` Elijah Newren
  2020-04-17 13:48       ` Kerry, Richard
  0 siblings, 1 reply; 5+ messages in thread
From: Elijah Newren @ 2020-04-16  6:05 UTC (permalink / raw)
  To: Taylor Blau; +Cc: Jeff King, Kerry, Richard, git@vger.kernel.org

On Wed, Apr 15, 2020 at 8:49 AM Taylor Blau <me@ttaylorr.com> wrote:
>
> 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: Move some files, with all history, from one project into a new one
  2020-04-16  6:05     ` Elijah Newren
@ 2020-04-17 13:48       ` Kerry, Richard
  0 siblings, 0 replies; 5+ messages in thread
From: Kerry, Richard @ 2020-04-17 13:48 UTC (permalink / raw)
  To: Elijah Newren, Taylor Blau, Jeff King, git@vger.kernel.org


Thanks All.
I've cloned git-filter-repo and I shall shortly give it a try.

First step is to get Python 3 installed (I'm on Windows).

Regards,
Richard.



-----Original Message-----
From: Elijah Newren <newren@gmail.com> 
Sent: 16 April 2020 07:06
To: Taylor Blau <me@ttaylorr.com>
Cc: Jeff King <peff@peff.net>; Kerry, Richard <richard.kerry@atos.net>; git@vger.kernel.org
Subject: Re: Move some files, with all history, from one project into a new one

Caution! External email. Do not open attachments or click links, unless this email comes from a known sender and you know the content is safe.

On Wed, Apr 15, 2020 at 8:49 AM Taylor Blau <me@ttaylorr.com> wrote:
>
> 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://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgi
> > thub.com%2Fnewren%2Fgit-filter-repo&amp;data=02%7C01%7Crichard.kerry
> > %40atos.net%7Cf28b944624e04084395f08d7e1cc7b35%7C33440fc6b7c7412cbb7
> > 30e70b0198d5a%7C0%7C0%7C637226140664962267&amp;sdata=pb2EnEADuC9Bdi5
> > JU2So3DK6VyEcsEH5X5kybFAw9%2FM%3D&amp;reserved=0
>
> For what it's worth, Elijah has provided some excellent documentation 
> on how to use git-filter-repo to do exactly this here:
>
>   
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> ub.com%2Fnewren%2Fgit-filter-repo%23solving-this-with-filter-repo&amp;
> data=02%7C01%7Crichard.kerry%40atos.net%7Cf28b944624e04084395f08d7e1cc
> 7b35%7C33440fc6b7c7412cbb730e70b0198d5a%7C0%7C0%7C637226140664962267&a
> mp;sdata=h03FogXX0iuqHB9d49CltOmzNkwGK66chC5ZvhOyWfs%3D&amp;reserved=0

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-04-17 13:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-15  8:31 Move some files, with all history, from one project into a new one Kerry, Richard
2020-04-15 15:11 ` Jeff King
2020-04-15 15:49   ` Taylor Blau
2020-04-16  6:05     ` Elijah Newren
2020-04-17 13:48       ` Kerry, Richard

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).