Subject: Re: git ls-files -o under .git/ prints all repository files

From: Simon 'corecode' Schubert <[email-masked]>
Date: Fri, 19 Jan 2007 11:10:46 +0100

Alex Riesen wrote:
>> >> i would claim .git to be off limits and unrelated to the working dir
>> >> (file-wise).  if you want to list files there, do a find . or so.
>> >>  After all you wouldn't expect cd /usr && git-ls-files -o work there
>> >> unless you have a /.git or /usr/.git, right?
>> > Right, just see no practical point changing ls-file for that.
>> right.  .git should be forbidden in higher layers already.
> 
> That's where I disagree. git-clean shouldn't clean it, but
> git-ls-files will do no harm to the directory

of course git-ls-files will do no harm.  but "fixing" every consumer of git-ls-files seems wrong to me.

okay, what do I expect when doing cd .git && git-ls-files?  Either listing *all files* in the repo (like git-ls-files from the repo root) or no files at all, or failure (".git is private").

To add some facts to it:

GIT-LS-FILES(1)                                                GIT-LS-FILES(1)

NAME
       git-ls-files - Information about files in the index/working directory

That's pretty clear to me.  Working directory.  .git is *not* part of the working directory.

>> > I can imagine keeping hooks under git control.
>> > In this case path(pwd) does contain .git component
>> > (as in .hg example).
>>
>> doesn't work either:
>>
>> % cd .git/hooks
>> % git add *
>> fatal: unable to add .git/hooks/applypatch-msg to index
> 
> cd .git
> git init
> git add .
> git commit
> 
> Works. And the path contains .git component. And git-clean
> here is ok. The test should check if we are in $GIT_DIR
> and probably $GIT_DIR/{objects,refs,logs}, not just below
> .git (with ".git" anywhere in pwd, which the mercurial
> example seem to suggest).

No, the path does *not* contain a .git component.  You just committed to the root of the *inside* repo.

Of course I don't say "refuse operation if there is .git in the path".  What I mean is, "refuse operation if there is $GIT_DIR in the path".  Maybe my example was not complete enough.  With mercurial, you can as well have a .hg in .hg.

cheers
  simon

-- 
Serve - BSD     +++  RENT this banner advert  +++    ASCII Ribbon   /"\
Work - Mac      +++  space for low €€€ NOW!1  +++      Campaign     \ /
Party Enjoy Relax   |   http://dragonflybsd.org      Against  HTML   \
Dude 2c 2 the max   !   http://golden-apple.biz       Mail + News   / \