diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index a07dbb57ab1c8ee4c946f65b8a03fb3cc0c2e5a5..280ef5aab8f61b372e9a9277b4117de180bb4637 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -40,22 +40,34 @@ foreach(SUBMODULE ${REQUIRED_SUBMODULES})
     string(REGEX MATCH "^\\-" UNINITIALIZED ${SUBMODULE_STATE})
     string(REGEX MATCH "^\\+" MISMATCH ${SUBMODULE_STATE})
 
-    set(RESULT "")
-    if(UNINITIALIZED)
-        message(STATUS "Initializing submodule ${SUBMODULE}")
+    if(IS_CI)
+        # Always set submodule to the given state
         execute_process(
-            COMMAND ${GIT_TOOL_PATH} submodule update --init --recursive ${DEPTH} ${SUBMODULE}
+            COMMAND ${GIT_TOOL_PATH} submodule update --init --force
+                --recursive ${DEPTH} ${SUBMODULE}
             WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
             RESULT_VARIABLE RESULT
         )
+    else()
+        set(RESULT "")
+        if(UNINITIALIZED)
+            message(STATUS "Initializing submodule ${SUBMODULE}")
+            execute_process(
+                COMMAND ${GIT_TOOL_PATH} submodule update --init
+                    --recursive ${DEPTH} ${SUBMODULE}
+                WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+                RESULT_VARIABLE RESULT
+            )
 
-    elseif(MISMATCH)
-        message(STATUS "Updating submodule ${SUBMODULE}")
-        execute_process(
-            COMMAND ${GIT_TOOL_PATH} submodule update --recursive ${SUBMODULE}
-            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
-            RESULT_VARIABLE RESULT
-        )
+        elseif(MISMATCH)
+            message(STATUS "Updating submodule ${SUBMODULE}")
+            execute_process(
+                COMMAND ${GIT_TOOL_PATH} submodule update
+                    --recursive ${SUBMODULE}
+                WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+                RESULT_VARIABLE RESULT
+            )
+        endif()
     endif()
 
     if((NOT ${RESULT} STREQUAL "") AND (NOT ${RESULT} STREQUAL "0"))