[Tip]使用SourceTree同步Local和Remote的Tag

在我們使用Git時,經常會使用Tag來對特定版本做記號,也方便我們隨時還原到該版本,但隨著時間越長,在我們Repository中的Tag也會越來越多,因此我們經常會清理遠端的Tag,只保留最近一些版本的Tag留存使用。最近發現明明已經刪除了遠端所有的Tag,重新Fetch所有的Tag之後,卻又出現在Tags列表之中,後來發現原來是我們在刪除Remote的Tags時,並不會同時刪除其他人Local的Tag,因此當他又使用SourceTree的Push all tags時,又會將所有本地端的Tag送回Remote!因此,這篇文章將向大家介紹如何透過batch script來擴充SourceTree的功能,讓本地的Tag和Remote同步,這麼一來只要在定期清理Tags時,要求大家一併同步,就不會再發生類似的問題囉!

在我們使用Git時,經常會使用Tag來對特定版本做記號,也方便我們隨時還原到該版本,但隨著時間越長,在我們Repository中的Tag也會越來越多,因此我們經常會清理遠端的Tag,只保留最近一些版本的Tag留存使用。最近發現明明已經刪除了遠端所有的Tag,重新Fetch所有的Tag之後,卻又出現在Tags列表之中,後來發現原來是我們在刪除Remote的Tags時,並不會同時刪除其他人Local的Tag,因此當他又使用SourceTree的Push all tags時,又會將所有本地端的Tag送回Remote!因此,這篇文章將向大家介紹如何透過batch script來擴充SourceTree的功能,讓本地的Tag和Remote同步,這麼一來只要在定期清理Tags時,要求大家一併同步,就不會再發生類似的問題囉!

啟用Command Line對Remote端的存取權限

由於我們平時都是直接使用SourceTree來對Remote的Repo做操作,但Custom Action的執行需要透過Command Line來進行,我們就會發現是無法使用例如git fetch --tags origin的指令的,這是由於我們尚未增加Command Line對Remote操作的權限,詳細的做法可以參考這篇文章

[Tip] Windows使用ssh對Github進行操作

設定完成之後,就可以準備來增加SourceTree的Custom Action囉!

設定SourceTree的Custom Action

  1. 首先我們先準備好同步Remote Tags的Batch Scripts,由於git並沒有提供直接的方法來同步Tags,所以在這邊我們只能使用土法煉鋼的方式,將Local端的所有Tags刪除,再重新下載Remote的Tags,將以下語法儲存為syncTags.bat

    cd %1
    
    echo 'Remove all local tags'
    
    FOR /F %%i in ('git tag -l') DO git tag -d %%i
    
    echo 'Fetch tags from origin'
    
    git fetch --tags origin
    
  2. 開啟SourceTree,選擇Tools => Options

  3. 點選Add,新增一個Custom Action

  4. 輸入名稱Sync Tags,選擇剛剛儲存的bat檔位置,帶入參數$REPO並點選OK

  5. 之後我們就可以直接從選單上使用Sync Tags功能囉!

  6. 執行後我們可以看到正確的重新下載Tags

本日小結

SourceTree是一套非常好用的Git GUI工具,它可以讓就算不熟悉git的人也可以很快地透過圖形化介面上手,而透過增加一些Custom Action,還可以讓我們使用外部工具來開啟檔案,或執行某些Script,節省我們的時間!關於今天的內容如果有問題歡迎一起討論喔^_^