git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Yasushi SHOJI <yashi@atmark-techno.com>
Date
Jan 23, 2007, 11:12 UTC
Message-ID
<878xfuuhco.wl@mail2.atmark-techno.com>
In-Reply-To
<7vtzymhma2.fsf@assigned-by-dhcp.cox.net>

At Fri, 19 Jan 2007 11:03:17 -0800, Junio C Hamano wrote:

Show 22 quoted lines
> 
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > On Fri, 19 Jan 2007, Matthias Kestenholz wrote:
> > ...
> >> Why not check for /.git/ somewhere inside the current working directory 
> >> (pwd) ? That's the way mercurial does it currently, and I think that is 
> >> a sane thing to do _if_ you want to protect the user from his own 
> >> stupidity.
> >
> > There are valid reasons why you might want to have a (possibly 
> > temporary) repository _inside_ the GIT_DIR. You'd break these cases.
> 
> You are right that strstr(here, "/.git/") is not a good check.
> 
> If we really care about this problem (and I am not yet starting
> to think we might, but who knows, I reserve the right to change
> my mind every once in a while), we could make the commands that
> deal with working trees (that is, among the things under
> discussion in this thread, 'git-clean' always is, and
> 'git-ls-files' only when it is given options like '-o', '-k',
> '-m', '-i') when the cwd is GIT_DIR or a subdirectory of it.

I believe it should be done. because it used to be safe during v0.9 time. most command didn't work if you are not in the root dir of a repo. during the development time, we have been adding feature so that we don't have to be at a root dir to exec git. we just forgot to check we are under .git, the repo dir.

I assume that we can either have 1) one more bit in struct cmd_struct's option field and fail if the command isn't allowed to run under repository dir, or 2) some mechanism to check prefix, the third argument of command entry point function, and behave properly.

Show 14 quoted lines
> If you did something like:
> 
> 	mkdir /var/tmp/a
>         cd /var/tmp/a
>         git init-db
>         cd .git
>         GIT_DIR=.git git init-db
>         git add .
> 	git ls-files
> 	echo junk >garbage
>         git clean
> 
> the repository at /var/tmp/a/.git/.git ought to track HEAD,
> config and friends in /var/tmp/a/.git directory.
this should always work.
-- 
        yashi
Previous: Junio C HamanoNext: Johannes Schindelin
Message 20 of 26 in “git ls-files -o under .git/ prints all repository files”
  1. Yasushi SHOJIJan 19, 2007
  2. Junio C HamanoJan 19, 2007
  3. Andy ParkinsJan 19, 2007
  4. Junio C HamanoJan 19, 2007
  5. Andy ParkinsJan 19, 2007
  6. Yasushi SHOJIJan 19, 2007
  7. Simon 'corecode' SchubertJan 19, 2007
  8. Alex RiesenJan 19, 2007
  9. Simon 'corecode' SchubertJan 19, 2007
  10. Alex RiesenJan 19, 2007
  11. Simon 'corecode' SchubertJan 19, 2007
  12. Alex RiesenJan 19, 2007
  13. Simon 'corecode' SchubertJan 19, 2007
  14. Alex RiesenJan 19, 2007
  15. Simon 'corecode' SchubertJan 19, 2007
  16. Andreas EricssonJan 19, 2007
  17. Matthias KestenholzJan 19, 2007
  18. Johannes SchindelinJan 19, 2007
  19. Junio C HamanoJan 19, 2007
  20. Yasushi SHOJIJan 23, 2007
  21. Commands requiring a work tree must not run in GIT_DIRJohannes Schindelin, Jan 23, 2007
  22. Junio C HamanoJan 24, 2007
  23. Johannes SchindelinJan 24, 2007
  24. Junio C HamanoJan 24, 2007
  25. Alex RiesenJan 19, 2007
  26. Alex RiesenJan 19, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.