diff --git a/action.yml b/action.yml
index 68b70f1..63b7096 100644
--- a/action.yml
+++ b/action.yml
@@ -100,9 +100,12 @@ runs:
     - run: |
         : enable Cargo sparse registry
         # except on 1.66 and 1.67, on which it is unstable
-        if [ -z "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL+set}" ]; then
+        if [ -z "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL+set}" -o -f "${{runner.temp}}"/.implicit_cargo_registries_crates_io_protocol ]; then
+          touch "${{runner.temp}}"/.implicit_cargo_registries_crates_io_protocol || true
           if rustc +${{steps.parse.outputs.toolchain}} --version --verbose | (! grep -q '^release: 1\.6[67]\.'); then
             echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse >> $GITHUB_ENV
+          else
+            echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git >> $GITHUB_ENV
           fi
         fi
       shell: bash