diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index a01fbef03dc19aa8fff51bfa224c38a6be064d8e..1dd0fc163399594c611306a8e41632d8af88965c 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -27,6 +27,11 @@ FIND_PACKAGE(cppcheck)
 
 FIND_PACKAGE(PythonInterp)
 
+FIND_PACKAGE(GitHub)
+
+# Find bash itself ...
+FIND_PROGRAM(BASH_TOOL_PATH bash
+	HINTS ${GITHUB_BIN_DIR} DOC "The bash executable")
 ######################
 ### Find libraries ###
 ######################
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index 9f1e49a9f5aad9c39dc2d4ec4aa9b31881db6fa7..9c99899b9514a77ce01169b2f06340342706ac1b 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -8,7 +8,7 @@ FOREACH(SUBMODULE ${REQUIRED_SUBMODULES})
 	# Check if submodule is already initialized
 	# MESSAGE(STATUS "Checking module ${SUBMODULE}")
 	EXECUTE_PROCESS(
-		COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/cmake/SubmoduleCheck.sh ${SUBMODULE}
+		COMMAND ${BASH_TOOL_PATH} ${CMAKE_SOURCE_DIR}/scripts/cmake/SubmoduleCheck.sh ${SUBMODULE}
 		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
 		RESULT_VARIABLE SUBMODULE_IS_NOT_INITIALIZED
 	)
diff --git a/scripts/cmake/cmake/FindGitHub.cmake b/scripts/cmake/cmake/FindGitHub.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f45cd21a290ed07ed551741d54b2eef60b63ea94
--- /dev/null
+++ b/scripts/cmake/cmake/FindGitHub.cmake
@@ -0,0 +1,37 @@
+# - Find GitHub for Windows
+#
+#   GITHUB_FOUND    - Was GitHub for Windows found
+#   GITHUB_BIN_DIR  - Path to the bin-directory where useful bash tools can be found
+#
+# Example usage:
+#   FIND_PACKAGE(GitHub)
+#   FIND_PROGRAM(BASH_TOOL_PATH bash HINTS ${GITHUB_BIN_DIR} DOC "The bash executable")
+
+IF(WIN32 AND NOT GITHUB_FOUND)
+
+	# Check install Path
+	FIND_PATH(
+		GITHUB_DIR
+		shell.ps1
+		PATHS $ENV{LOCALAPPDATA}/GitHub
+		NO_DEFAULT_PATH
+	)
+
+	IF(GITHUB_DIR)
+
+		FILE(TO_NATIVE_PATH ${GITHUB_DIR} GITHUB_WIN_DIR)
+		EXECUTE_PROCESS (
+			COMMAND cmd /c "cd ${GITHUB_WIN_DIR}/PortableGit* & cd"
+			OUTPUT_VARIABLE PORTABLE_GIT_WIN_DIR
+		)
+
+		IF(PORTABLE_GIT_WIN_DIR)
+			STRING(STRIP ${PORTABLE_GIT_WIN_DIR} PORTABLE_GIT_WIN_DIR)
+			FILE(TO_CMAKE_PATH ${PORTABLE_GIT_WIN_DIR} PORTABLE_GIT_DIR)
+			SET(GITHUB_FOUND ON CACHE BOOL "Was GitHub for Windows found?")
+			SET(GITHUB_BIN_DIR ${PORTABLE_GIT_DIR}/bin CACHE PATH "The path to the GitHub for Windows binaries.")
+			MESSAGE(STATUS "GitHub for Windows found.")
+		ENDIF()
+
+	ENDIF()
+ENDIF()
\ No newline at end of file