Taylor Blau <me@xxxxxxxxxxxx> writes: >> > My concern is that if we ever flipped the default (i.e. that >> > "safe.bareRepository" might someday be ""), that many legitimate cases >> > of using bare repositories would be broken. I think there are many such >> > legitimate use cases that _do_ rely on discovering bare repositories >> > (i.e., Git invocations that do not have a `--git-dir` in their >> > command-line). >> >> I think 99% of such use is to chdir into the directory with HEAD, >> refs/ and objects/ in it and let git recognise the cwd is a git >> directory. Am I mistaken, or are there tools that chdir into >> objects/08/ and rely on setup_git_directory_gently_1() to find the >> parent directory of that 'objects' directory to be a git directory? > > If you took this change, and then at some point in the future we changed > the default value of safe.bareRepository to "", wouldn't that break that > 99% of use cases you are talking about? Our spawning (e.g. "fetch" run_command()s "upload-pack" in a local repository, or "fetch" runs "upload-pack" over ssh connection, or http gateway runs "upload-pack" after learning which repository the request is fetching from) of subcommands can and should be fixed by exporting "GIT_DIR=." when we spawn them in the target directory, and such a fix should be more or less trivial. It must happen before such a switch of default happens (if it is what we plan to do, that is). Also, the trivial fix must be conveyed to third-party tool authors and give them time to adjust their ware. That's part of the usual migration process, and I am not so worried about it. If some third-party tool for whatever reason wants to start from a random subdirectory in a bare repository, that is a different story. Fixing such a third-party tool would be more involved than "more or less trivial". > When I read your "I think 99% of such use is ...", it makes me think > that this change won't disrupt bare repo discovery when we only traverse > one layer above $CWD. But this change disrupts the case where we don't > need to traverse at all to do discovery (i.e., when $CWD is the root of > a bare repository). By "this change" you mean what Glen proposes? I think it was designed to break the use case where you go there to signal that you want to use the directory as a repository. >> I am wondering if another knob to help that particular use case >> easier may be sufficient. If you are a forge operator, you'd just >> set a boolean configuration variable to say "it is sufficient to >> chdir into a directory to use it a bare repository without exporting >> the environment variable GIT_DIR=." And such a boolean, without safe.bareRepository setting, should be sufficient to cover that 99% of such use, because it disables that deliberate refusal of treating CWD as a repository without explicitly saying that is what you want with "GIT_DIR=.". One thing I wasn't sure about was if that 99% number is close to reality, hence my question. > Yes, GitHub would almost certainly set safe.bareRepository to "*" > regardless of what Git's own default would be. And with such a boolean, I am hoping that GitHub do not have to make such a wildly open setting. Only $CWD that is the top of a repository, without allowing it to be any random subdirectory, would be allowed. > I'm not sure I agree that end-users wouldn't want to touch this knob. If > they have embedded bare repositories that they rely on as test fixtures, > for example, wouldn't safe.bareRepository need to be tweaked? But not in the "My $CWD is always fine" knob, whose only reason is to simplify things without opening you up unnecessarily too widely for hosting sites.