diff --git a/src/libexpr/primops/flake.cc b/src/libexpr/primops/flake.cc
index 1c20d33bb..ab797fe01 100644
--- a/src/libexpr/primops/flake.cc
+++ b/src/libexpr/primops/flake.cc
@@ -430,7 +430,9 @@ void updateLockFile(EvalState & state, const FlakeUri & flakeUri)
 
         // Hack: Make sure that flake.lock is visible to Git. Otherwise,
         // exportGit will fail to copy it to the Nix store.
-        runProgram("git", true, { "-C", refData->path, "add", flakeRef.subdir + "/flake.lock" });
+        runProgram("git", true,
+            { "-C", refData->path, "add",
+              (flakeRef.subdir == "" ? "" : flakeRef.subdir + "/") + "flake.lock" });
     } else
         throw Error("flakeUri %s can't be updated because it is not a path", flakeUri);
 }