threads / bug / 15976

bug: git-stash save and symbolic links

Subject: bug: git-stash save and symbolic links

## tl;dr

5 messages between Oct 20, 2008 and Oct 20, 2008.

replies: 4people: 2as markdown or json

Simon Strandgaard· Oct 20, 2008, 08:34 UTC · lore

git-stash cannot find the repository when the path is a symbolic link. solution for me was to cd to the absolute path and then do git-stash.

FAILURE: git-stash with symbolic link.

prompt> pwd /Users/neoneye/st prompt> ls -la ~/st lrwxr-xr-x 1 neoneye neoneye 38 10 Okt 07:40 /Users/neoneye/st -> /Users/neoneye/git/code/source_toolbox prompt> git-stash fatal: Not a git repository fatal: Not a git repository fatal: Not a git repository You do not have the initial commit yet prompt>

SUCCESS: git-stash without symbolic link.

prompt> pwd /Users/neoneye/git/code prompt> ls -la drwxr-xr-x 16 neoneye neoneye 544 20 Okt 10:18 .git drwxr-xr-x 29 neoneye neoneye 986 16 Okt 13:04 source_toolbox prompt> git stash save "did I mess up" Saved working directory and index state "On master: did I mess up" HEAD is now at 90ac45d we can now seek through a WAV file.. finally. prompt>

I think the problem is located in the save_stash() function, but im not good at sh scripting to make a patch.

Thank you very much for git!
-- 
Simon Strandgaard
http://toolboxapp.com/
Jeff King· Oct 20, 2008, 15:17 UTC · re: Simon Strandgaard · lore

Re: bug: git-stash save and symbolic links

On Mon, Oct 20, 2008 at 10:34:53AM +0200, Simon Strandgaard wrote:
> git-stash cannot find the repository when the path is a symbolic link.
> solution for me was to cd to the absolute path and then do git-stash.
Sorry, I can't reproduce here, using this test:
    mkdir repo &&
    cd repo &&
      git init &&
      echo content >file &&
      git add file &&
      git commit -m one &&
    cd .. &&
      ln -s repo linked &&
    cd repo &&
      echo cruft >>file &&
      git stash &&
      echo non-linked directory stashed ok &&
    cd ../linked &&
      echo cruft >>file &&
      git stash &&
      echo linked directory stashed ok

What version of git are you running (though I tried a few different ones, and all passed my test)?

-Peff
Simon Strandgaard· Oct 20, 2008, 15:32 UTC · re: Jeff King · lore

Re: bug: git-stash save and symbolic links

On Mon, Oct 20, 2008 at 5:17 PM, Jeff King <peff@peff.net> wrote:
> On Mon, Oct 20, 2008 at 10:34:53AM +0200, Simon Strandgaard wrote:
[snip]
> What version of git are you running (though I tried a few different
> ones, and all passed my test)?
I have made some changes, so it can be reproduced
prompt> sh run.sh
Initialized empty Git repository in /Users/neoneye/Desktop/test/repo/.git/
Created initial commit a2a7d6f: one
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
before stash
fatal: Not a git repository
fatal: Not a git repository
fatal: Not a git repository
You do not have the initial commit yet
prompt> cat run.sh
rm -rf repo &&
rm -f linked &&
mkdir repo &&
   cd repo &&
     git init &&
     echo content >file &&
     git add file &&
     git commit -m one &&
     mkdir test &&
   cd .. &&
     ln -s repo/test linked &&
   cd linked &&
     echo cruft >>file &&
     echo before stash &&
     git stash &&
     echo after stash

prompt> pwd /Users/neoneye/Desktop/test prompt>

This is my computer

prompt> git --version git version 1.5.6.2 prompt> uname -a Darwin Macintosh.local 9.5.0 Darwin Kernel Version 9.5.0: Wed Sep 3 11:29:43 PDT 2008; root:xnu-1228.7.58~1/RELEASE_I386 i386 prompt>

-- 
Simon Strandgaard
http://toolboxapp.com/
Simon Strandgaard· Oct 20, 2008, 15:39 UTC · re: Simon Strandgaard · lore

Re: bug: git-stash save and symbolic links

On Mon, Oct 20, 2008 at 5:32 PM, Simon Strandgaard <neoneye@gmail.com> wrote:
Show 8 quoted lines
> On Mon, Oct 20, 2008 at 5:17 PM, Jeff King <peff@peff.net> wrote:
>> On Mon, Oct 20, 2008 at 10:34:53AM +0200, Simon Strandgaard wrote:
> [snip]
>> What version of git are you running (though I tried a few different
>> ones, and all passed my test)?
>
>
> I have made some changes, so it can be reproduced
[snip]

Sorry, forget the other run.sh I forgot to add the dir to the repository. Here the linked dir is included in the repository.

prompt> sh run.sh
Initialized empty Git repository in /Users/neoneye/Desktop/test/repo/.git/
Created initial commit b904776: one
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
Created commit 19746b5: two
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test/file2
before stash
fatal: Not a git repository
fatal: Not a git repository
fatal: Not a git repository
You do not have the initial commit yet
prompt> cat run.sh
rm -rf repo &&
rm -f linked &&
mkdir repo &&
   cd repo &&
     git init &&
     echo content >file &&
     git add file &&
     git commit -m one &&
     mkdir test &&
     echo content >test/file2 &&
     git add test/file2 &&
     git commit -m two &&
   cd .. &&
     ln -s repo/test linked &&
   cd linked &&
     echo cruft >>file &&
     echo before stash &&
     git stash &&
     echo after stash

prompt> pwd /Users/neoneye/Desktop/test prompt>

[snip]
Show 14 quoted lines
> This is my computer
>
> prompt> git --version
> git version 1.5.6.2
> prompt> uname -a
> Darwin Macintosh.local 9.5.0 Darwin Kernel Version 9.5.0: Wed Sep  3
> 11:29:43 PDT 2008; root:xnu-1228.7.58~1/RELEASE_I386 i386
> prompt>
>
>
> --
> Simon Strandgaard
> http://toolboxapp.com/
>
-- 
Simon Strandgaard
http://toolboxapp.com/
Jeff King· Oct 20, 2008, 17:55 UTC · re: Simon Strandgaard · lore

Re: bug: git-stash save and symbolic links

On Mon, Oct 20, 2008 at 05:39:31PM +0200, Simon Strandgaard wrote:
Show 6 quoted lines
>      mkdir test &&
>      echo content >test/file2 &&
>      git add test/file2 &&
>      git commit -m two &&
>    cd .. &&
>      ln -s repo/test linked &&

Ah, OK. You have a symlink into a subdirectory of the repository. Git correctly finds the repository's .git directory, but then when we attempt to 'cd' to the top-level of the working tree, we end up outside of the repository. The culprit is actually "git rev-parse --show-cdup". This demonstrates it more simply:

  mkdir repo &&
  (cd repo && git init) &&
  mkdir repo/dir &&
  ln -s repo/dir linked &&
  cd linked && git rev-parse --show-cdup

which prints "../". But that's not right; we actually need to go to "../repo".

I think the right solution in this situation is that we should _not_ be setting is_inside_work_tree in setup_git_directory_gently, so that we chdir to its absolute path. But I don't think we ever actually detect the symlink during this setup, so I'm not sure how best to realize we are _in_ this situation.

-Peff

← back to recent threads