threads / discuss / 14647

Moving .git around

Subject: Moving .git around

## tl;dr

4 messages between Jul 24, 2008 and Aug 3, 2008.

replies: 3people: 3as markdown or json

Geoff Russell· Jul 24, 2008, 01:32 UTC · lore

For reasons which would take a while to explain, I'm building a repository in a directory using "--git-dir=xxxx/.git --work-tree=." and then doing an "mv xxxx/.git ./.git" and then trying to work with that repository --- but can't

Below is a sample script. The last line (git add) fails with

fatal: unable to create '/usr/local/AusTop/AuPrograms/AuServer/testgit/aaa/bbb/.git/index.lock': No such file or directory

git doesn't seem to realise that there is a .git back up the tree.
I'm using 1.5.5.1

Cheers, Geoff Russell

------------------------ sample script
#!/bin/sh
if [ -d "testgit" ] ; then
    echo "remove testgit"
    /bin/rm -rf testgit
fi
mkdir testgit && echo yyyy >testgit/sample.sh && cd testgit
mkdir aaa && mkdir aaa/bbb
echo xxxx > aaa/bbb/sample2.sh
mkdir xxx
git --git-dir=xxx/.git --work-tree=. init
git --git-dir=xxx/.git --work-tree=. add *.sh
git --git-dir=xxx/.git --work-tree=. commit  -m demo
mv xxx/.git .
cd aaa/bbb
git add sample2.sh
Nguyen Thai Ngoc Duy· Jul 24, 2008, 02:12 UTC · re: Geoff Russell · lore

Re: Moving .git around

On 7/24/08, Geoff Russell <geoffrey.russell@gmail.com> wrote:
Show 12 quoted lines
> For reasons which would take a while to explain, I'm building a repository
>  in a directory  using "--git-dir=xxxx/.git --work-tree=." and
>  then doing an "mv  xxxx/.git ./.git"  and then trying to work with
>  that repository  --- but can't
>
>  Below is a sample script. The last line (git add) fails with
>
>  fatal: unable to create
>  '/usr/local/AusTop/AuPrograms/AuServer/testgit/aaa/bbb/.git/index.lock':
>  No such file or directory
>
>  git doesn't seem to realise that there is a .git back up the tree.

It's because when you did git --work-tree=. init, worktree is stored in .git/config. The code that chdir() in setup_git_directory() probably forgot to chdir() back to toplevel worktree. Workaround could be just remove core.worktree in .git/config.

Show 27 quoted lines
>  I'm using 1.5.5.1
>
>  Cheers,
>  Geoff Russell
>
>  ------------------------ sample script
>  #!/bin/sh
>  if [ -d "testgit" ] ; then
>     echo "remove testgit"
>     /bin/rm -rf testgit
>  fi
>  mkdir testgit && echo yyyy >testgit/sample.sh && cd testgit
>  mkdir aaa && mkdir aaa/bbb
>  echo xxxx > aaa/bbb/sample2.sh
>  mkdir xxx
>  git --git-dir=xxx/.git --work-tree=. init
>  git --git-dir=xxx/.git --work-tree=. add *.sh
>  git --git-dir=xxx/.git --work-tree=. commit  -m demo
>  mv xxx/.git .
>  cd aaa/bbb
>  git add sample2.sh
>
> --
>  To unsubscribe from this list: send the line "unsubscribe git" in
>  the body of a message to majordomo@vger.kernel.org
>  More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
-- 
Duy
Geoff Russell· Jul 24, 2008, 02:36 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Moving .git around

On Thu, Jul 24, 2008 at 11:42 AM, Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:

Show 18 quoted lines
> On 7/24/08, Geoff Russell <geoffrey.russell@gmail.com> wrote:
>> For reasons which would take a while to explain, I'm building a repository
>>  in a directory  using "--git-dir=xxxx/.git --work-tree=." and
>>  then doing an "mv  xxxx/.git ./.git"  and then trying to work with
>>  that repository  --- but can't
>>
>>  Below is a sample script. The last line (git add) fails with
>>
>>  fatal: unable to create
>>  '/usr/local/AusTop/AuPrograms/AuServer/testgit/aaa/bbb/.git/index.lock':
>>  No such file or directory
>>
>>  git doesn't seem to realise that there is a .git back up the tree.
>
> It's because when you did git --work-tree=. init, worktree is stored
> in .git/config. The code that chdir() in setup_git_directory()
> probably forgot to chdir() back to toplevel worktree. Workaround could
> be just remove core.worktree in .git/config.

Many thanks, the work-around works. I'm not sure if this is a bug or a feature, but I'm happy either way.

Cheers, Geoff Russell

Show 33 quoted lines
>
>>  I'm using 1.5.5.1
>>
>>  Cheers,
>>  Geoff Russell
>>
>>  ------------------------ sample script
>>  #!/bin/sh
>>  if [ -d "testgit" ] ; then
>>     echo "remove testgit"
>>     /bin/rm -rf testgit
>>  fi
>>  mkdir testgit && echo yyyy >testgit/sample.sh && cd testgit
>>  mkdir aaa && mkdir aaa/bbb
>>  echo xxxx > aaa/bbb/sample2.sh
>>  mkdir xxx
>>  git --git-dir=xxx/.git --work-tree=. init
>>  git --git-dir=xxx/.git --work-tree=. add *.sh
>>  git --git-dir=xxx/.git --work-tree=. commit  -m demo
>>  mv xxx/.git .
>>  cd aaa/bbb
>>  git add sample2.sh
>>
>> --
>>  To unsubscribe from this list: send the line "unsubscribe git" in
>>  the body of a message to majordomo@vger.kernel.org
>>  More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
>
> --
> Duy
>
-- 
6 Fifth Ave,
St Morris, S.A. 5068
Australia
Ph: 041 8805 184 / 08 8332 5069
Jan Hudec· Aug 3, 2008, 18:51 UTC · re: Geoff Russell · lore

Re: Moving .git around

On Thu, Jul 24, 2008 at 12:06:28 +0930, Geoff Russell wrote:
Show 23 quoted lines
> On Thu, Jul 24, 2008 at 11:42 AM, Nguyen Thai Ngoc Duy
> <pclouds@gmail.com> wrote:
> > On 7/24/08, Geoff Russell <geoffrey.russell@gmail.com> wrote:
> >> For reasons which would take a while to explain, I'm building a repository
> >>  in a directory  using "--git-dir=xxxx/.git --work-tree=." and
> >>  then doing an "mv  xxxx/.git ./.git"  and then trying to work with
> >>  that repository  --- but can't
> >>
> >>  Below is a sample script. The last line (git add) fails with
> >>
> >>  fatal: unable to create
> >>  '/usr/local/AusTop/AuPrograms/AuServer/testgit/aaa/bbb/.git/index.lock':
> >>  No such file or directory
> >>
> >>  git doesn't seem to realise that there is a .git back up the tree.
> >
> > It's because when you did git --work-tree=. init, worktree is stored
> > in .git/config. The code that chdir() in setup_git_directory()
> > probably forgot to chdir() back to toplevel worktree. Workaround could
> > be just remove core.worktree in .git/config.
> 
> Many thanks, the work-around works. I'm not sure if this is a bug or
> a feature, but I'm happy either way.
That depends on what the value of core.worktree is:
 - If it is '.', than I think it should be considered a bug in git init,
   because that value is just plain nonsense.
 - If it is '..', than it's a user error and the right thing is to just
   remove it when you relocate the .git directory.
 - If it was '/usr/local/AusTop/AuPrograms/AuServer/testgit/' than it would
   have worked, so it's not that.

Best regards, Jan

-- 
						 Jan 'Bulb' Hudec <bulb@ucw.cz>

← back to recent threads