threads / discuss / 13800

move git repository out of a folder?

Subject: move git repository out of a folder?

## tl;dr

5 messages between Jun 4, 2008 and Jun 4, 2008.

replies: 4people: 4as markdown or json

Sean Brown· Jun 4, 2008, 20:03 UTC · lore
Let's say I've got this directory structure of source files:

/folderA /folderA/sourcecode/ /folderA/sourcecode/file1.txt /folderA/sourcecode/file2.txt etc...

When putting the project under git source control, I did this:

cd /folderA git init

So now when colleagues clone my repository, they get the source code in the "sourcecode" folder. I'd like to just make the repository simply give them the source files, not in a directory. In other words, as if I had originally been smart and done this:

cd /folderA/sourcecode git init

Can I make that happen without losing all of the history?
Thanks,
Sean
Shawn O. Pearce· Jun 4, 2008, 20:07 UTC · re: Sean Brown · lore

Re: move git repository out of a folder?

Sean Brown <seanmichaelbrown@gmail.com> wrote:
Show 22 quoted lines
> Let's say I've got this directory structure of source files:
> 
> /folderA
> /folderA/sourcecode/
> /folderA/sourcecode/file1.txt
> /folderA/sourcecode/file2.txt
> etc...
> 
> When putting the project under git source control, I did this:
> 
> cd /folderA
> git init
> 
> So now when colleagues clone my repository, they get the source code
> in the "sourcecode" folder.  I'd like to just make the repository
> simply give them the source files, not in a directory.  In other
> words, as if I had originally been smart and done this:
> 
> cd /folderA/sourcecode
> git init
> 
> Can I make that happen without losing all of the history?

git mv sourcecode/* . rmdir sourcecode git commit

-- 
Shawn.
Jakub Narebski· Jun 4, 2008, 20:14 UTC · re: Shawn O. Pearce · lore

Re: move git repository out of a folder?

"Shawn O. Pearce" <spearce@spearce.org> writes:
Show 28 quoted lines
> Sean Brown <seanmichaelbrown@gmail.com> wrote:
> >
> > Let's say I've got this directory structure of source files:
> > 
> > /folderA
> > /folderA/sourcecode/
> > /folderA/sourcecode/file1.txt
> > /folderA/sourcecode/file2.txt
> > etc...
> > 
> > When putting the project under git source control, I did this:
> > 
> > cd /folderA
> > git init
> > 
> > So now when colleagues clone my repository, they get the source code
> > in the "sourcecode" folder.  I'd like to just make the repository
> > simply give them the source files, not in a directory.  In other
> > words, as if I had originally been smart and done this:
> > 
> > cd /folderA/sourcecode
> > git init
> > 
> > Can I make that happen without losing all of the history?
> 
> git mv sourcecode/* .
> rmdir sourcecode
> git commit

What he said. Git should automatically detect renames. When pulling code from someone who hasn't made this change yet, you might need to use 'subtree' merge strategy, as currently git would put files added as sourcecode/filename in sourcecode/filename, not as top dir filename when pulling from side branch.

If you want to _change history_, as if you made correct decision at the start (and convince everyone to reclone, or to do the same surgery; or if you for the time being are solo contributor to the project), you can use git-filter-branch (formerly cg-admin-rewrite-hist ;-).

HTH
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Sean Brown· Jun 4, 2008, 20:18 UTC · re: Jakub Narebski · lore

Re: move git repository out of a folder?

On Wed, Jun 4, 2008 at 4:14 PM, Jakub Narebski <jnareb@gmail.com> wrote:
Show 42 quoted lines
> "Shawn O. Pearce" <spearce@spearce.org> writes:
>
>> Sean Brown <seanmichaelbrown@gmail.com> wrote:
>> >
>> > Let's say I've got this directory structure of source files:
>> >
>> > /folderA
>> > /folderA/sourcecode/
>> > /folderA/sourcecode/file1.txt
>> > /folderA/sourcecode/file2.txt
>> > etc...
>> >
>> > When putting the project under git source control, I did this:
>> >
>> > cd /folderA
>> > git init
>> >
>> > So now when colleagues clone my repository, they get the source code
>> > in the "sourcecode" folder.  I'd like to just make the repository
>> > simply give them the source files, not in a directory.  In other
>> > words, as if I had originally been smart and done this:
>> >
>> > cd /folderA/sourcecode
>> > git init
>> >
>> > Can I make that happen without losing all of the history?
>>
>> git mv sourcecode/* .
>> rmdir sourcecode
>> git commit
>
> What he said.  Git should automatically detect renames.  When pulling
> code from someone who hasn't made this change yet, you might need to
> use 'subtree' merge strategy, as currently git would put files added
> as sourcecode/filename in sourcecode/filename, not as top dir filename
> when pulling from side branch.
>
> If you want to _change history_, as if you made correct decision at
> the start (and convince everyone to reclone, or to do the same
> surgery; or if you for the time being are solo contributor to the
> project), you can use git-filter-branch (formerly cg-admin-rewrite-hist ;-).
>
Thank you Shawn and Jakub.  This worked perfectly.
Sean
Avery Pennarun· Jun 4, 2008, 20:08 UTC · re: Sean Brown · lore

Re: move git repository out of a folder?

On 6/4/08, Sean Brown <seanmichaelbrown@gmail.com> wrote:
Show 9 quoted lines
>  So now when colleagues clone my repository, they get the source code
>  in the "sourcecode" folder.  I'd like to just make the repository
>  simply give them the source files, not in a directory.  In other
>  words, as if I had originally been smart and done this:
>
>  cd /folderA/sourcecode
>  git init
>
>  Can I make that happen without losing all of the history?

You could just make a commit which renames all the files into the parent folder. This is relatively harmless and correctly reflects what really happened.

You might also want to look at git-filter-branch and its "--subdirectory-filter" option.

Have fun,
Avery

← back to recent threads