diff --git a/.github/workflows/cygwin-test.yml b/.github/workflows/cygwin-test.yml
index d190f1132..89c03a394 100644
--- a/.github/workflows/cygwin-test.yml
+++ b/.github/workflows/cygwin-test.yml
@@ -26,7 +26,6 @@ jobs:
     - uses: actions/checkout@v4
       with:
         fetch-depth: 0
-        submodules: recursive
 
     - name: Install Cygwin
       uses: cygwin/cygwin-install-action@v4
diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml
index 2a82e0e03..2dd97183b 100644
--- a/.github/workflows/pythonpackage.yml
+++ b/.github/workflows/pythonpackage.yml
@@ -27,7 +27,6 @@ jobs:
     - uses: actions/checkout@v4
       with:
         fetch-depth: 0
-        submodules: recursive
 
     - name: Set up Python ${{ matrix.python-version }}
       uses: actions/setup-python@v4
diff --git a/init-tests-after-clone.sh b/init-tests-after-clone.sh
index 21d1f86d8..118e1de22 100755
--- a/init-tests-after-clone.sh
+++ b/init-tests-after-clone.sh
@@ -47,10 +47,8 @@ git reset --hard HEAD~1
 # Point the master branch where we started, so we test the correct code.
 git reset --hard __testing_point__
 
-# The tests need submodules. (On CI, they would already have been checked out.)
-if ! ci; then
-    git submodule update --init --recursive
-fi
+# The tests need submodules, including a submodule with a submodule.
+git submodule update --init --recursive
 
 # The tests need some version tags. Try to get them even in forks. This fetches
 # other objects too. So, locally, we always do it, for a consistent experience.