Re: [BUG] `git reset --hard` fails with `update = none` submodules
From: Rose Kunkel <hidden>
Date: 2021-06-16 01:15:57
If I set `submodule.recurse = false` in .git/config, I get the behavior you're seeing. On Tue, Jun 15, 2021 at 6:03 PM Rose Kunkel [off-list ref] wrote:
Potentially relevant: `git config --global --list` showsstatus.showstash=true status.submodulesummary=true submodule.recurse=true user.name=Rose Kunkel user.email=rose@rosekunkel.me pull.rebase=false init.defaultbranch=mainOn Tue, Jun 15, 2021 at 5:57 PM Rose Kunkel [off-list ref] wrote:quoted
Running `git status` in the resulting repository givesOn branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree cleanThis is the output from the clone command:Cloning into 'tree-sitter-langs'... remote: Enumerating objects: 609, done. remote: Counting objects: 100% (83/83), done. remote: Compressing objects: 100% (52/52), done. remote: Total 609 (delta 40), reused 58 (delta 24), pack-reused 526 Receiving objects: 100% (609/609), 117.17 KiB | 1.05 MiB/s, done. Resolving deltas: 100% (322/322), done. Submodule 'repos/agda' (https://github.com/tree-sitter/tree-sitter-agda) registered for path 'repos/agda' Submodule 'repos/bash' (https://github.com/tree-sitter/tree-sitter-bash) registered for path 'repos/bash' Submodule 'repos/c' (https://github.com/tree-sitter/tree-sitter-c) registered for path 'repos/c' Submodule 'repos/c-sharp' (https://github.com/tree-sitter/tree-sitter-c-sharp) registered for path 'repos/c-sharp' Submodule 'repos/cpp' (https://github.com/tree-sitter/tree-sitter-cpp) registered for path 'repos/cpp' Submodule 'repos/css' (https://github.com/tree-sitter/tree-sitter-css) registered for path 'repos/css' Submodule 'repos/elm' (https://github.com/razzeee/tree-sitter-elm) registered for path 'repos/elm' Submodule 'repos/fluent' (https://github.com/tree-sitter/tree-sitter-fluent) registered for path 'repos/fluent' Submodule 'repos/go' (https://github.com/tree-sitter/tree-sitter-go) registered for path 'repos/go' Submodule 'repos/html' (https://github.com/tree-sitter/tree-sitter-html) registered for path 'repos/html' Submodule 'repos/janet-simple' (https://codeberg.org/sogaiu/tree-sitter-janet-simple) registered for path 'repos/janet-simple' Submodule 'repos/java' (https://github.com/tree-sitter/tree-sitter-java) registered for path 'repos/java' Submodule 'repos/javascript' (https://github.com/tree-sitter/tree-sitter-javascript) registered for path 'repos/javascript' Submodule 'repos/jsdoc' (https://github.com/tree-sitter/tree-sitter-jsdoc) registered for path 'repos/jsdoc' Submodule 'repos/json' (https://github.com/tree-sitter/tree-sitter-json) registered for path 'repos/json' Submodule 'repos/julia' (https://github.com/tree-sitter/tree-sitter-julia) registered for path 'repos/julia' Submodule 'repos/ocaml' (https://github.com/tree-sitter/tree-sitter-ocaml) registered for path 'repos/ocaml' Submodule 'repos/php' (https://github.com/tree-sitter/tree-sitter-php) registered for path 'repos/php' Submodule 'repos/python' (https://github.com/tree-sitter/tree-sitter-python) registered for path 'repos/python' Submodule 'repos/ruby' (https://github.com/tree-sitter/tree-sitter-ruby) registered for path 'repos/ruby' Submodule 'repos/rust' (https://github.com/tree-sitter/tree-sitter-rust) registered for path 'repos/rust' Submodule 'repos/scala' (https://github.com/tree-sitter/tree-sitter-scala) registered for path 'repos/scala' Submodule 'repos/swift' (https://github.com/tree-sitter/tree-sitter-swift) registered for path 'repos/swift' Submodule 'repos/typescript' (https://github.com/tree-sitter/tree-sitter-typescript) registered for path 'repos/typescript' Skipping submodule 'repos/agda' Skipping submodule 'repos/bash' Skipping submodule 'repos/c' Skipping submodule 'repos/c-sharp' Skipping submodule 'repos/cpp' Skipping submodule 'repos/css' Skipping submodule 'repos/elm' Skipping submodule 'repos/fluent' Skipping submodule 'repos/go' Skipping submodule 'repos/html' Skipping submodule 'repos/janet-simple' Skipping submodule 'repos/java' Skipping submodule 'repos/javascript' Skipping submodule 'repos/jsdoc' Skipping submodule 'repos/json' Skipping submodule 'repos/julia' Skipping submodule 'repos/ocaml' Skipping submodule 'repos/php' Skipping submodule 'repos/python' Skipping submodule 'repos/ruby' Skipping submodule 'repos/rust' Skipping submodule 'repos/scala' Skipping submodule 'repos/swift' Skipping submodule 'repos/typescript'On Tue, Jun 15, 2021 at 5:51 PM brian m. carlson [off-list ref] wrote:quoted
On 2021-06-16 at 00:16:06, Rose Kunkel wrote:quoted
# What did you do before the bug happened? (Steps to reproduce your issue) 1. Clone a git repository that sets `update = none` in .gitmodules: $ git clone --recurse-submodules https://github.com/ubolonton/tree-sitter-langs 2. Perform a hard reset: $ cd tree-sitter-langs $ git reset --hard # What did you expect to happen? (Expected behavior) The reset should succeed and do nothing.I think we're in agreement on this. This should be a fresh clone and so a hard reset should change nothing.quoted
# What happened instead? (Actual behavior) The reset command fails withfatal: not a git repository: ../../.git/modules/repos/agda fatal: could not reset submodule indexHmmm, I can't reproduce this behavior. What I see is this: $ git reset --hard HEAD is now at 5d362ce Release 0.10.0 I'm running git version 2.32.0.272.g935e593368 on Debian sid (with the experimental packages). Can you try the clone and run a "git status" command in the repository to see if anything is modified after your clone? Are the submodules checked out when you perform the clone? In my case, I see lines like this: Skipping submodule 'repos/agda' If you're seeing something different, then that might contribute to the different behavior we're seeing. -- brian m. carlson (he/him or they/them) Toronto, Ontario, CA