:::

Visual Studio Code設定熱鍵執行git commit與push / Setup a Hotkey to Execute Git Commit and Push in Visual Studio Code

2023-0709-235443.png

除了設定「keybinding.json」之外,還要記得讓git push加上「--force-with-lease」喔。


Visual Studio Code

2023-0709-230712.png

https://code.visualstudio.com/ 

Visual Studio Code (簡稱VS Code) 是一款由Microsoft開發的跨平台程式碼編輯器。它是一個輕量、快速且功能豐富的工具,專為開發者而設計,支援多種編程語言和框架。

以下是一些Visual Studio Code的特點和功能:

  1. 跨平台支援:VS Code可在Windows、macOS和Linux上運行,讓開發者可以在不同的作業系統上使用相同的工具和環境。
  2. 語言支援:VS Code支援多種程式語言,包括常見的JavaScript、TypeScript、Python、C#、Java、HTML、CSS等,並提供相關的語法高亮、程式碼提示、程式碼片段等功能。
  3. 擴充性:VS Code具有強大的擴充性,開發者可以根據自己的需求安裝各種擴充套件,擴展其功能和特性。市場上有大量的擴充套件可供選擇,涵蓋了各種領域,包括程式語言支援、版本控制、自動完成、語法檢查、主題等。
  4. 整合性開發環境:VS Code提供了許多功能便利的整合套件,如內建的Git支援、終端機、偵錯器等。這些工具使開發者可以在單一介面中完成各種開發任務,提高效率。
  5. 操作友善的界面:VS Code擁有乾淨、直觀的使用者界面,可自定義的佈局和主題選擇。它提供了簡單而強大的功能,如分頁編輯、多個工具列、全螢幕模式等,以提供最佳的使用體驗。不過對多螢幕的支援較差
  6. 快速且高效:VS Code在啟動速度和執行效能方面表現出色。它具有快速的編輯器反應速度,並支援智慧型的程式碼補完和快速導航功能,有助於提高開發速度和效率。

2023-0709-231357.png

在Netbeans實在是無法因應現代開發環境之後,我現在主要都在使用VS Code。在VS Code的眾多功能中,我最常用的功能就是git的提交(commit)與推送(push)。

既然這功能這麼常用,那我們當然要把它設為熱鍵(hotkey)啦。

自訂熱鍵 / Keybinding

2023-0709-231654.png

熱鍵的設定需要編輯VS Code的keybindings.json檔案。請開啟VS Code並進行以下操作:

  1. 開啟功能表列的「檔案」。
  2. 進入「喜好設定」
  3. 進入「設定檔(預設)」。
  4. 按下「顯示內容...」。

2023-0709-231937.png

此時主要側邊欄會顯示「設定檔: 預設」的所有設定檔。我們可以找到「鍵盤快速鍵」底下的「keybindings.json」。開啟keybindings.json後,可以新增讓git執行提交與推送的指令。

以下是Linux版本的設定,請注意藍字的「alt+p」紅字的指令:

{
  "key":"alt+p",
  "command":"terminalCommandKeys.run",
  "args":{
    "cmd":"git add . && git commit -m \"`[ -f ./commit_message.txt ] && cat ./commit_message.txt``date`\" --allow-empty && git push --force-with-lease && exit 0",
    "newTerminal":true,
    "saveAllFiles":true,
    "showTerminal":false,
    "focus":false
  }
}

藍字的「alt+p」表示綁定的熱鍵。而紅字的指令則是在Linux中要git新增檔案、執行提交(提交訊息為現在的時間)、推送、最後關閉終端機。如果你使用的是Windows,紅字的指令可以改成「git add . && git commit -m "Commit at %TIME%" && git push --force-with-lease && exit」。在keybindings.json的設定上,Windows版本可以用以下的方式設定:

{
  "key":"alt+p",
  "command":"terminalCommandKeys.run",
  "args":{
    "cmd":"git add . && git commit -m \"Commit at %TIME%\" && git push --force-with-lease && exit",
    "newTerminal":true,
    "saveAllFiles":true,
    "showTerminal":false,
    "focus":false
  }
}

2023-0709-233019.png

編輯keybindings.json的時候,要注意維持正確的JSON格式,陣列中的元素之間記得加上「,」。

https://jsonformatter.curiousconcept.com/#

https://jsonformatter.curiousconcept.com/#

你可以用JSON Formatter & Validator來檢查整個keybindings.json的格式是否正確。它還會指出錯誤的地方,很好用的喔。


更安全的強制推送 / Push force with lease

2023-0709-233536.png

以前我的熱鍵指令只用了「git push」,並沒有加上「--force-with-lease」,這使得用指令所進行的git push會被VS Code擋下來。你必須再多按一次推送才能真的push上去。

2023-0709-233303.png

https://stackoverflow.com/a/56485045

儘管可以在偏好設定裡面的「Git: Allow Force Push」開啟強制推送的功能,但這在多人協作的時候可能會覆蓋掉遠端儲存庫中別人寫好的檔案,並不推薦使用。

https://blog.walterlv.com/post/safe-push-using-force-with-lease.html

https://blog.walterlv.com/post/safe-push-using-force-with-lease.html 

現在比較推薦的做法是在git push後面加上「--force-with-lease」。如果推送時發現遠端儲存庫的檔案比較新,則它會回報錯誤。此時需要用「git fetch」取回較新的程式碼、嘗試解決衝突,之後再做「git push --force-with-lease」的時候就不會出現錯誤了。


結語 / In closing

2023-0709-235221.png

是說我每次都忘記VS Code自訂熱鍵設定的位置。每次我都會開啟「鍵盤快速鍵」的設定,但那是不正確的做法,應該要開啟的是keybindings.json。這次總算好好地把它寫下來了。這次連帶的一併解決了git push的疑惑,真的是意外的收穫。


最後要來問的是:你會在VS Code使用那些熱鍵呢?

1. Ctrl + S 儲存檔案

2. Ctrl + W 關閉檔案

3. Ctrl + F 搜尋文字

4. Ctrl + H 取代文字

5. 其他

歡迎在下面留言分享喔!