最近,我的一位同事提出了一個需求,需要將某個帳號下的所有儲存庫都以 HTTP 模式克隆下來。因此,我編寫了一個簡單的腳本來完成這個任務,並在這裡做了一些筆記。
假設腳本的文件名為 gitlab-repo-dl.sh
,需要準備的參數包括 GITLAB_URL
和 GITLAB_TOKEN
。
執行方法如下:
GITLAB_URL=https://gitlab.com/ GITLAB_TOKEN=cnLzue2_VVUVVVSSSwww ./gitlab-repo-dl.sh
以下是腳本的內容:
#!/usr/bin/env bash if [ -z "$GITLAB_URL" ]; then echo "Missing environment variable: GITLAB_URL (e.g. https://gitlab.com)" exit 1 fi if [ -z "$GITLAB_TOKEN" ]; then echo "Missing environment variable: GITLAB_TOKEN" echo "See ${GITLAB_URL}profile/account." exit 1 fi echo "Cloning all git projects..." PAGE_NUMBER=1 while true; do REPO_SSH_URLS=$(curl -s "$GITLAB_URL/api/v4/projects?private_token=$GITLAB_TOKEN&per_page=100&page=$PAGE_NUMBER" | jq '.[] | .http_url_to_repo' | sed 's/"//g') if [ -z "$REPO_SSH_URLS" ]; then break fi for REPO_SSH_URL in $REPO_SSH_URLS; do REPO_PATH="$(echo "$REPO_SSH_URL" | awk -F'/' '{print $NF}' | awk -F'.' '{print $1}')" if [ ! -d "$REPO_PATH" ]; then echo "git clone $REPO_PATH" git clone "$REPO_SSH_URL" "$REPO_PATH" else echo "git pull $REPO_PATH" (cd "$REPO_PATH" && git pull) fi done ((PAGE_NUMBER++)) done
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!