git alias command 結合 batch command

  • 98
  • 0
  • Git
  • 2024-02-23

git 非常好用,有些實用的行為是由一連串的 git 指令所組成,若能自建一個簡單的指令完成這一連串的動作,是有助於工作效率的提升

情境1: 從目前的分支 rebase dev

1.  將以下的指令存至 to-dev.bat

 git fetch
 set current_branch=
 for /F "delims=" %%n in ('git branch --show-current') do set current_branch=%%n
 if "%current_branch%"=="" echo Not a git branch! && goto :EOF
 git checkout dev
 git pull
 git checkout %current_branch%
 git rebase --rebase-merges dev
 git push -f
 
 :EOF

2. 在 sourceTree terminal 執行 (在 window cmd 不知為何無法生效)

git config --global alias.to-dev '!D:/mygit/to-dev.bat'

如此一來就能使用 git to-dev 就能將 dev 的 commit 拉下後,再以 dev 當基底重整節點推到 remote

非常的好用

 

情境2: 在 main 分支打 tag

預期的指令

 git prd-tag [sequence] [service1] [service2]...


1. 將以下的指令存至 prd-tag.bat

echo off
setlocal enableextensions enabledelayedexpansion
set today=%DATE:~3,4%_%DATE:~8,2%_%DATE:~11,2%
set env=PRD
set seq=%1
set tag=V%today%_%seq%_%env%

git checkout main
git branch --show-current
git fetch
git pull

SET /a counter = 1
for %%I IN (%*) DO ( 
if !counter! gtr 1 ( 
 set tagCurrent=%tag%_%%I
 git tag !tagCurrent!
 git push origin !tagCurrent!
) 
SET /a counter+=1 
) 

這邊需要特別注意 for loop 的迴圈裡若使用 %tagCurrent% 會拿到改變前的值
需用 enableextensions 搭配 !tagCurrent! 這樣的形式才能拿到改變後值
cmd 裡的 %DATE% 可能因為國別設定不同,導致輸出的格式也不同,下列的例子就是前兩碼是星期,接著才是年月日的形式
D:\>echo %DATE%
週四 2024/02/22

2. 在 sourceTree terminal 執行

git config --global alias.prd-tag '!D:/mygit/prd-tag.bat'

實際上使用

git prd-tag 01 Member Wallet

會在 main 分支打上今天的日期,加上給予的流水號,以及服務名稱,並推至 remote
V2024_02_22_01_PRD_Member
V2024_02_22_01_PRD_Wallet

參考資料
https://git-scm.com/book/zh-tw/v2/Git-%E5%9F%BA%E7%A4%8E-Git-Aliases
https://gist.github.com/nibro7778/0f41c9335af34f1cc08f5091ce4066de
https://stackoverflow.com/a/7522822