On Fri, Apr 15, 2022 at 04:45:32PM -0700, Glen Choo wrote: > However, this case shows that --git-dir won't work at all with "git > init", and I wouldn't be surprised if there are other breakages hiding > just out of plain sight. This worries me a lot more, and I think > disabling bare repo detection wholesale might be a nonstarter. > > I wonder if all we need to do is make setup.c a little smarter - we > recognize bare repos, but *only* if they are contained in a directory > named `.git/`. This should fix "git init" I think, because even though > we'd ignore "./ (bare)", we'd recognize `../.git/` and we get the right > behavior again. > > I haven't tested it yet, but this proposal sounds like it has quite a > few merits to me: > > - Easy to explain. > - Easy rationalization ("We used to be quite cavalier about detecting > bare repos, but now we're being more strict by default"). > - Fixes the embedded bare repo problem (since we don't allow .git). > - No-op and neglible performance hit for non-bare repo users, even if > they occasionally run "git" inside ".git". > > As with the original proposal of "ignore bare repos altogether", this > will still be a headache for bare repo users (unless they don't mind > renaming their bare repo directory to ".git"), so this behavior needs to > be configurable, but perhaps the fallout is small enough that this > could be a safe default. I think you are underestimating the fallout, at least if I'm understanding your proposal correctly. Is the proposal to only detect bare repositories that are called `.git`? I think that's what you're suggesting, though can't we just as easily embed a bare repository named ".git" in a clone as long as its not in the root directory? But like I said in an earlier message, I think that this is vastly underestimating the number of legitimate repositories that are stored as bare repos on disk (not embedded in a non-bare repo, nor named ".git"). Thanks, Taylor