使用 Shell 代碼簡化 Git 步驟

来源:https://www.cnblogs.com/Wu-765279087/p/18268510
-Advertisement-
Play Games

切換分支的時候,需要更新所有的子模塊,可以編寫 Shell 代碼簡化這一過程。 本教程適用於 mac 系統,終端使用 zsh。 ...


切換分支的時候,需要更新所有的子模塊,可以編寫 Shell 代碼簡化這一過程。

本教程適用於 mac 系統,終端使用 zsh。

快速調用 Shell 腳本

  1. 將 Shell 代碼存儲為 .sh 文件,例如quickCheckout.sh
  2. 在終端中,cd 到當前文件夾,賦予代碼運行許可權:chmod +x quickCheckout.sh
  3. 打開“訪達”,進入“用戶/用戶名”文件夾,找到 .zshrc 文件(如果找不到嘗試 command+shift+. 來顯示隱藏文件,或全局搜索)
  4. 編輯 .zshrc 文件,添加一行代碼。
    其中文件位置要修改成自己的文件位置,別名要修改成自己的別名。
    例如這是一個 quickCheckout 腳本的別名:
alias quickcheckout='/Users/user/Desktop/Shell/quickCheckout.sh'

執行上面的操作後,就可以快速調用自己的 Shell 代碼了:

截屏2024-06-25 14.45.50

快速切換 Git 分支

下麵的代碼可以快速切換分支,包括主存儲庫和所有的子存儲庫:

#!/bin/zsh

#快速切換分支,包括所有子模塊
#會將主模塊和所有子模塊 checkout 到指定分支,隨後執行 git pull

# 定義顏色
BLUE='\033[34m'
RED='\033[91m'
NC='\033[0m'

# 檢查是否在 git 倉庫中
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
  echo -e "${RED}需要移動到 Git 倉庫。${NC}"
  exit 1
fi

# 獲取用戶輸入的分支名稱
echo -e "${BLUE}請輸入要切換到的分支名稱:${NC}"
read branch_name

# 檢查是否輸入了分支名稱
if [ -z "$branch_name" ]; then
  echo -e "${RED}分支名稱不能為空${NC}"
  exit 1
fi

# 切換到指定分支
git checkout -m $branch_name
git pull || echo "'${RED}主項目拉取最新的更改失敗${NC}'"
if [ $? -ne 0 ]; then
  echo -e "${RED}切換到分支 $branch_name 失敗${NC}"
  exit 1
fi

# 遍歷所有子模塊並切換到同名分支
git submodule foreach "
  git checkout -m $branch_name || echo "'${RED}子模塊 \$name 切換到分支 $branch_name 失敗${NC}'"
  git pull || echo "'${RED}子模塊 \$name 拉取最新的更改失敗${NC}'"
"

echo -e "${BLUE}操作完成。${NC}"

# 檢查每個子模塊的切換狀態
echo "\033[34m-------------------------------\033[0m"
git submodule foreach '
  current_branch=$(git symbolic-ref --short HEAD)
  if [ "$current_branch" != "'"$branch_name"'" ]; then
    echo "'"${RED}子模塊 \$name 當前分支為 \$current_branch,未切換到分支 $branch_name${NC}"'"
  else
    echo "'"${BLUE}子模塊 \$name 成功切換到分支 $branch_name${NC}"'"
  fi
'
echo "\033[34m-------------------------------\033[0m"

快速 Pull

下麵的代碼可以快速的 Pull,包括主存儲庫和所有的子存儲庫:

#!/bin/zsh

# 檢查是否在 git 倉庫中
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
    echo "\033[34m需要移動到 Git 倉庫。\033[0m"
    exit 1
fi

# 詢問是否需要清除本地的更改
echo "\033[34m是否需要清除本地的更改? (y/n)\033[0m"
read -r response
if [ "$response" = "y" ] || [ "$response" = "Y" ]; then
    echo "\033[34m正在清除主存儲庫的本地更改...\033[0m"
    git reset --hard HEAD
    git clean -fd

    echo "\033[34m正在清除子模塊的本地更改...\033[0m"
    git submodule foreach --recursive '
        echo "正在清除 $name 的本地更改...";
        git reset --hard HEAD;
        git clean -fd
    '
fi

# 主倉庫
echo "\033[34m正在 Pull 主存儲庫...\033[0m"
git pull

# 遍歷所有子模塊
echo "\033[34m正在 Pull 子模塊...\033[0m"
git submodule foreach --recursive '
    echo "正在獲取 $name...";
    git pull
'

echo "\033[34mPull 操作完成。\033[0m"

快速切換目錄

如果有幾個常用目錄的話,寫一個腳本會很快

我添加了幾個自己常用的目錄,這樣輸入 to 之後就能快速跳轉了

#!/bin/zsh

# ANSI 轉義序列,用於設置文本顏色為深藍色
BLUE='\033[34m'
NC='\033[0m' # No Color, 用於重置顏色

# 定義一個關聯數組來存儲目錄路徑
typeset -A directories
typeset -A directories_name

# 添加一些目錄到字典中
directories=(
  d "/Users/user/Desktop"
  n "/Users/user/Desktop/Note"
)
directories_name=(
  d "Desktop"
  n "筆記"
)

# 顯示提示信息
print "${BLUE}-----------------------${NC}"
print "${BLUE}請輸入要切換到的目錄路徑,回車回到主目錄:${NC}"
for key in "${(@k)directories_name}"; do
  print "${BLUE}輸入 ${key}, 去往:${directories_name[$key]}${NC}"
done
read -r dir_name

# 檢查目錄
if [[ -n "${directories[$dir_name]}" ]]; then
  if cd "${directories[$dir_name]}"; then
    print "${BLUE}成功切換到目錄 ${directories[$dir_name]}${NC}"
  else
    print "${BLUE}無法切換到目錄 ${directories[$dir_name]}${NC}"
    exit 1
  fi
elif [[ -z "$dir_name" ]]; then
  cd
else
  print "${BLUE}目錄名稱 $dir_name 不存在${NC}"
  exit 1
fi

print "${BLUE}-----------------------${NC}"

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寄存器,本質上就是單片機內部的RAM存儲器,用來暫時存放參與運算的數據和運算結果。一個寄存器由若幹個鎖存器或者觸發器組成。比如STM32的一個寄存器有32位,則由32個觸發器組成。 STM32的寄存器包括通用寄存器、控制寄存器以及外設寄存器,每種寄存器都有其特定的功能和用途。而且在技術手冊占了非常多 ...
  • 今天我在安裝qview並運行時時,遇到了這個問題。 我在網上查找了許多解決方案,但它們大多都說是某些dll缺失或錯誤引起的。 這些說法應該是正確的,但我用了dll修複工具後,一點用都沒有。 後來搗鼓半天後,我發現很可能是visual c++出了問題。後來的事實證明,確實是這樣。 我在微軟官網下載了最 ...
  • 目錄TTL、RS232、RS485三種協議介紹TTL(Transistor-Transistor Logic)串口通信協議工作原理:TTL電平標準:特點:優勢:缺點:TTL協議混淆點澄清:擴展學習:COMS技術CMOS技術的工作方式:主要特點:CMOS技術的局限性:RS232協議工作原理:特點:優勢 ...
  • 設備採用晶元:STM32F407ZET6 4個LED燈,網路標號分別為LED0 ,LED1,FSMC D10,FSMC D11。對應的引腳號分別為PF9,PF10,PE12,PE13。 GPIO外設基本概念 General-Purpose Input Output,通用型輸入輸出的,也簡稱I/O口, ...
  • 目錄操作系統,啟動!大致過程重要程式bootsect.ssetup.shead.s 操作系統,啟動! 大致過程 ​ 電腦的工作方式是取指執行,而執行其的前提是記憶體中有代碼。操作系統剛開始並不是在記憶體中,而是在磁碟上,因此第一步需要將其以一定的方式從磁碟讀入記憶體。 (1)x86PC剛開機時CPU處於 ...
  • 在 CentOS 上安裝 Git 可以通過以下幾個步驟來完成: 1. 使用 YUM 安裝 Git(一般這種情況已經可以滿足) 這是最簡單的方法,使用 CentOS 自帶的 YUM 包管理器。 更新 YUM 包索引: sudo yum update 安裝 Git: sudo yum install g ...
  • 表格示意: 標準 邏輯電平0 邏輯電平1 是否全雙工 抗干擾能力 TTL 輸出低電平<0.4V, 輸入低電平<=0.8V 輸出高電平>2.4V,輸入高電平>=2.0V 全雙工 差 RS232 +3~+15V -3~-15V 全雙工 強 RS485 +2V~+6V - 6V~- 2V 半雙工 很強 電 ...
  • 寫這個方法是因為需要向一臺沒有外網的伺服器上安裝gcc,各種百度找到了相關依賴、依賴的依賴。。。。。。的rpm包,林林總總近100個rpm,拷貝到目標伺服器上安裝的時候發現這些rpm包的安裝順序完全靠猜測,安裝就報:有依賴需要提前安裝。這時候感謝百度大模型文心一言的幫助,找到了可以使用本地倉庫來管理 ...
一周排行
    -Advertisement-
    Play Games
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式每次關閉時就會自動崩潰,一直找不到原因讓我幫忙看一下怎麼回事,這位朋友應該是第二次找我了,分析了下 dump 還是挺經典的,拿出來給大家分享一下吧。 二:WinDbg 分析 1. 為什麼會崩潰 找崩潰原因比較簡單,用 !analyze -v 命 ...
  • 在一些報表模塊中,需要我們根據用戶操作的名稱,來動態根據人員姓名,更新報表的簽名圖片,也就是電子手寫簽名效果,本篇隨筆介紹一下使用FastReport報表動態更新人員簽名圖片。 ...
  • 最新內容優先發佈於個人博客:小虎技術分享站,隨後逐步搬運到博客園。 創作不易,如果覺得有用請在Github上為博主點亮一顆小星星吧! 博主開始學習編程於11年前,年少時還只會使用cin 和cout ,給單片機點點燈。那時候,類似async/await 和future/promise 模型的認知還不是 ...
  • 之前在阿裡雲ECS 99元/年的活動實例上搭建了一個測試用的MINIO服務,以前都是直接當基礎設施來使用的,這次準備自己學一下S3相容API相關的對象存儲開發,因此有了這個小工具。目前僅包含上傳功能,後續計劃開發一個類似圖床的對象存儲應用。 ...
  • 目錄簡介快速入門安裝 NuGet 包實體類User資料庫類DbFactory增刪改查InsertSelectUpdateDelete總結 簡介 NPoco 是 PetaPoco 的一個分支,具有一些額外的功能,截至現在 github 星數 839。NPoco 中文資料沒多少,我是被博客園群友推薦的, ...
  • 前言 前面使用 Admin.Core 的代碼生成器生成了通用代碼生成器的基礎模塊 分組,模板,項目,項目模型,項目欄位的基礎功能,本篇繼續完善,實現最核心的模板生成功能,並提供生成預覽及代碼文件壓縮下載 準備 首先清楚幾個模塊的關係,如何使用,簡單畫一個流程圖 前面完成了基礎的模板組,模板管理,項目 ...
  • 假設需要實現一個圖標和文本結合的按鈕 ,普通做法是 直接重寫該按鈕的模板; 如果想作為通用的呢? 兩種做法: 附加屬性 自定義控制項 推薦使用附加屬性的形式 第一種:附加屬性 創建Button的附加屬性 ButtonExtensions 1 public static class ButtonExte ...
  • 在C#中,委托是一種引用類型的數據類型,允許我們封裝方法的引用。通過使用委托,我們可以將方法作為參數傳遞給其他方法,或者將多個方法組合在一起,從而實現更靈活的編程模式。委托類似於函數指針,但提供了類型安全和垃圾回收等現代語言特性。 基本概念 定義委托 定義委托需要指定它所代表的方法的原型,包括返回類 ...