diff --git a/.github/workflows/workflow.yaml b/.github/workflows/workflow.yaml
index d8d89dd..f411529 100644
--- a/.github/workflows/workflow.yaml
+++ b/.github/workflows/workflow.yaml
@@ -27,9 +27,16 @@ jobs:
     strategy:
       matrix:
         operating-system:
-          [ubuntu-latest, windows-latest, macos-latest, macos-13]
+          - ubuntu-latest
+          - windows-latest
+          - macos-latest
+          - macos-13
         channel: [stable, beta, master]
         dry-run: [true, false]
+        git-source:
+          - https://github.com/flutter/flutter.git
+          - https://github.com/Flutter-Foundation/flutter.git
+          - https://gitee.com/harmonycommando_flutter/flutter.git
         include:
           - operating-system: ubuntu-latest
             channel: main
@@ -42,6 +49,7 @@ jobs:
         with:
           channel: ${{ matrix.channel }}
           dry-run: ${{ matrix.dry-run }}
+          git-source: ${{ matrix.git-source }}
       - name: Echo outputs
         run: |
           echo RUNNER-OS=${{ runner.os }}
diff --git a/action.yaml b/action.yaml
index 84843c0..7ca5178 100644
--- a/action.yaml
+++ b/action.yaml
@@ -46,6 +46,10 @@ inputs:
     description: If true, get outputs but do not install Flutter
     required: false
     default: "false"
+  git-source:
+    description: Git clone source
+    required: false
+    default: "https://github.com/flutter/flutter.git"
 
 outputs:
   CHANNEL:
@@ -69,6 +73,9 @@ outputs:
   PUB-CACHE-PATH:
     value: "${{ steps.flutter-action.outputs.PUB-CACHE-PATH }}"
     description: Path to pub cache
+  GIT_SOURCE:
+    value: "${{ steps.flutter-action.outputs.GIT_SOURCE }}"
+    description: Git source of Flutter SDK repository to clone
 
 runs:
   using: composite
@@ -97,6 +104,7 @@ runs:
           -c '${{ inputs.cache-path }}' \
           -l '${{ inputs.pub-cache-key }}' \
           -d '${{ inputs.pub-cache-path }}' \
+          -g '${{ inputs.git-source }}' \
           ${{ inputs.channel }}
 
     - name: Cache Flutter
diff --git a/setup.sh b/setup.sh
index e94659b..b9add45 100755
--- a/setup.sh
+++ b/setup.sh
@@ -78,8 +78,9 @@ TEST_MODE=false
 ARCH=""
 VERSION=""
 VERSION_FILE=""
+GIT_SOURCE=""
 
-while getopts 'tc:k:d:l:pa:n:f:' flag; do
+while getopts 'tc:k:d:l:pa:n:f:g:' flag; do
 	case "$flag" in
 	c) CACHE_PATH="$OPTARG" ;;
 	k) CACHE_KEY="$OPTARG" ;;
@@ -96,6 +97,7 @@ while getopts 'tc:k:d:l:pa:n:f:' flag; do
 			exit 1
 		fi
 		;;
+    g) GIT_SOURCE="$OPTARG" ;;
 	?) exit 2 ;;
 	esac
 done
@@ -121,6 +123,7 @@ CHANNEL="${ARR_CHANNEL[0]:-}"
 [ -z "$CACHE_KEY" ] && CACHE_KEY="flutter-:os:-:channel:-:version:-:arch:-:hash:"
 [ -z "$PUB_CACHE_KEY" ] && PUB_CACHE_KEY="flutter-pub-:os:-:channel:-:version:-:arch:-:hash:"
 [ -z "$PUB_CACHE_PATH" ] && PUB_CACHE_PATH="default"
+[ -z "$GIT_SOURCE" ] && GIT_SOURCE="https://github.com/flutter/flutter.git"
 
 # `PUB_CACHE` is what Dart and Flutter looks for in the environment, while
 # `PUB_CACHE_PATH` is passed in from the action.
@@ -213,7 +216,7 @@ fi
 
 if [ ! -x "$CACHE_PATH/bin/flutter" ]; then
 	if [ "$CHANNEL" = "master" ] || [ "$CHANNEL" = "main" ]; then
-		git clone -b "$CHANNEL" https://github.com/flutter/flutter.git "$CACHE_PATH"
+		git clone -b "$CHANNEL" "$GIT_SOURCE" "$CACHE_PATH"
 		if [ "$VERSION" != "any" ]; then
 			git config --global --add safe.directory "$CACHE_PATH"
 			(cd "$CACHE_PATH" && git checkout "$VERSION")