Leo

Git Tag 作用:一鍵抓取 Git Tag 的 語意化版本號 自動產生 自己的版本控制文件

Git Tag 作用:一鍵抓取 Git Tag 的 語意化版本號 自動產生 自己的版本控制文件

補足了版本控制的最後一塊拼圖!

Git Tag 作用

  我們在Git 版本控制:透過 GitHub / GitLab 半自動化的進行語意化版本控制那篇有提到如何透過 Git 來進行版本的管控,基本的原理就是透過 Git Tag 來打上 語意化版本的標籤。

  因此今天就要透過批次檔來自動抓取最新的版本標籤 (ver tag) 並且根據我們的需求自動地建立頭文件,讓程式碼可以一鍵更新版本且絕對不會出紕漏。令個人或團隊的版本控制系統更上一層樓!


首先我們用 git describe --abbrev=0 --always --tags 來抓取離當前提交的內容最近的 tag,並且用 –abbrev=0 將 tag 後的描述資訊隱藏起來。

接著透過 windows command line 的 delims 命令以字元 . 來區隔開 major, minor and patch。

最後透過 echo and >> %1 來將資料以定義好的格式寫入文件中就完成了!


  將上述幾個步驟整理並寫成 CMD 指令,成果如下。只要在 Windows 中受到 Git 管控並且有提交過 sem-ver 格式的 tag 的資料夾路徑下建一個文件並在該文件內貼上如下內容,並將檔名改成 “xxxxxx.bat”。

  在該路徑打開終端機執行 xxxxxx.bat "version.h" 就會自動執行指令並在 “version.h” 檔案內寫入上述資訊囉。

@echo off
if "%1"=="" (
  echo Usage: %0 ^<header_file_name^>
  goto :eof
)
for /F "usebackq" %%v in (`"git describe --abbrev=0 --always --tags"`) DO (
  echo #ifndef __VERSION_H__ > %1
  echo #define __VERSION_H__ >> %1  
  echo.>> %1
  for /f "tokens=1,2,3 delims=." %%i in ("%%v") DO (
    echo #define VERSION_MAJOR ^(%%i^) >> %1
    echo #define VERSION_MINOR ^(%%j^) >> %1
    echo #define VERSION_PATCH ^(%%k^) >> %1
  )
  for /F "usebackq" %%d in (`"git show -s --format=format:%%cd --date=short"`) DO (
    for /f "tokens=1,2,3 delims=-" %%i in ("%%d") DO (
      echo #define BUILD_DATE_YEAR ^(%%i - 2000^) >> %1
      echo #define BUILD_DATE_MONTH ^(1%%j - 100^) >> %1
      echo #define BUILD_DATE_DAY ^(1%%k - 100^) >> %1
    )
  )
  echo.>> %1
  echo #endif /* __VERSION_H__ */ >> %1
  echo.>> %1  
  echo /*** (C^) COPYRIGHT LEOLI ***/ >> %1
)

原文連結Leo Studio

Like my work??
Don't forget to support or like, so I know you are with me..

CC BY-NC-ND 2.0

Want to read more ?

Login with one click and join the most diverse creator community.