Hi Carlos, Le 2023-01-12 à 07:17, Carlos Gonzalez a écrit : > What did you do before the bug happened? > > Checking out a custom commit or tag using `--recurse-submodules`, where the specific commit contained a submodule > not included in the main branch. The checkout command failed. (Detailed steps below) > > What did you expect to happen? > > The repository should be checked out to the specified commit and submodules updated, and the one missing in the main > branch, cloned. It's a reasonable expectation, but the current 'checkout' code does not know how to clone missing submodules. > > What happened instead? > > git checkout --recurse-submodules submodule > fatal: not a git repository: ../.git/modules/sycl-blas > fatal: could not reset submodule index > > What's different between what you expected and what actually happened? > > This only fails when the repository was cloned with --recursive flag. > > Anything else you want to add: > > I wrote these simple steps to reproduce: > > mkdir repo1 && cd repo1 > git init > git submodule add --name sycl-blas https://github.com/codeplaysoftware/sycl-blas.git > git commit -m "Adding submodule" > git tag -a submodule -m submodule > git submodule deinit sycl-blas > truncate -s 0 .gitmodules > rm -rf sycl-blas/ > git add .gitmodules > git rm sycl-blas > git commit -m "Remove submodule" > cd ../ > > # When repository is cloned without `--recursive`, checkout works > git clone repo1 cloned-repo1 > cd cloned-repo1 > git checkout --recurse-submodules submodule # ok > cd ../ > # When repository is cloned with `--recursive`, checkout fails > git clone --recursive repo1 cloned-repo2 > cd cloned-repo2 > git checkout --recurse-submodules submodule > fatal: not a git repository: ../.git/modules/sycl-blas > fatal: could not reset submodule index Thanks for a complete reproducer. This has been reported before, see the threads linked at [1]. I was working on that issue last month, so that at least the checkout fails in a clean way, but have not gone back to it yet. In the meantime, as you've discovered, a workaround is to clone without '--recurse-submodules', then manually run 'git submodule update --init --recursive' after switching branches. Cheers, Philippe. [1] https://github.com/gitgitgadget/git/issues/752