On 01/31/2017 12:37 AM, Jeff King wrote: > On Mon, Jan 30, 2017 at 01:58:10PM -0800, Junio C Hamano wrote: > >>> When writing the test for git-tag, I realized that the option >>> --no-create-reflog to git-tag does not take precedence over >>> logAllRefUpdate=always. IOW the setting cannot be overridden on the command >>> line. Do you think this is a defect or would it not be desirable to have this >>> feature anyway? >> >> "--no-create-reflog" should override the configuration set to "true" >> or "always". Also "--create-reflog" should override the >> configuration set to "false". >> >> If the problem was inherited from the original code before your >> change (e.g. you set logAllRefUpdates to true and then did >> "update-ref --no-create-reflog refs/heads/foo". I was actually not referring to update-ref, for which the --no-create-reflog option works fine. I was referring to git-tag which also has the --create-reflog option. For git-tag, the current code does not allow to override logAllRefUpdates=always with --no-create-reflog. On the other hand logAllRefUpdates=false is overridden by "git tag --create-reflog". The reason is that the file-backend does allow to force reflog creation, but it does not allow to force reflog non-creation. I have a patch that amends this, but it's not pretty and I don't think it will be useful (see last paragraph). > I hadn't thought about that. I think "git branch --no-create-reflog" has > the same problem in the existing code. You are right, git-branch also ignores --no-create-reflog. > I suspect nobody cares much in practice. Even if you say "don't create a > reflog now", if you have core.logAllRefUpdates turned on, then it's > likely that some _other_ operation will create the reflog later > accidentally (e.g., as soon as you "git checkout foo && git commit", > you'll get a reflog). I think you're fighting an uphill battle to turn > logAllRefUpdates on and then try to disable some reflogs selectively. > > So I agree the current behavior is quietly broken, which is not good. > But I wonder if "--no-create-reflog" is really sane in the first place, > and whether we might be better off to simply disallow it. Concerning branches, I fully agree. For git-branch, the "--no-create-reflog" option does not make sense at all and should produce an error. On the other hand, for tags it may make sense to override logAllRefUpdates=always. As tag updates come exclusively from force-creating the same tag on another revision, a reflog will actually not be created by accident. Nevertheless, I don't think it is very useful to have the "--no-create-reflog" argument to any of git-branch or git-tag. It only takes effect if a user has configured logAllRefUpdates=always, and he probably has done that for a reason. Given that the overhead from a reflog is minuscule, IMHO no-one will ever bother about "--no-create-reflog".