簡體   English   中英

如何在 Git 推拉上格式化代碼

[英]How to format the code on Git Push and Pull

我目前正在與不同的開發人員一起使用不同的語言(TS、TSX)進行開發項目。 此外,我們使用 Prettier/ESLint,但這是一個細節。

而有些開發者習慣用2個縮進來開發,並且使用空格。 還有一些使用 4 縮進,並且更喜歡制表符。

問題在於,當我們從 github 獲取代碼時,縮進可能是另一位開發人員的縮進,因此與我們對應的不是。 當開發人員檢索此縮進為 2 的代碼時,正在使用 4 縮進,整個文件被檢測為被 git 修改。

是否可以在克隆/拉取/獲取時執行代碼格式以匹配我們的偏好? 在創建拉取請求/推送/提交時,格式化代碼以使其與存儲庫中存在的代碼相對應?

我們嘗試了幾種方法來解決這個問題但沒有成功:

推送和獲取不是可以格式化代碼的點,因為 Git 只是推送或獲取已經存在的數據。 除了對其進行去化和壓縮之外,它實際上不會以任何方式更改發送的數據。

然而,大多數組織這樣做的方式是建立一套代碼標准和一個 lint 工具來執行它們。 例如,在 Rust 中,您可能會使用 4 個空格和rustfmt來格式化代碼。 然后,您將 CI 設置為運行 linter 或樣式檢查,如果不正確則失敗。 因此,如果代碼不符合代碼風格,則無法合並。

雖然歡迎每個人對如何格式化代碼有自己的偏好,但當你們在一個項目上一起工作時,要求每個人就一套標准達成一致是完全正常和合理的。 不是每個人都必須喜歡它:Go 團隊明確同意標准 Go 風格不是任何人的最愛,但它是一個固定的標准,每個人都遵守它。 我本人嚴格執行代碼樣式更改,這與我喜歡的樣式不同,僅僅是因為每個人都使用相同的樣式更為重要。

如果你有一個自動格式化代碼的工具,這會變得容易得多,因為每個人都只需運行該工具,它就可以自動檢查,而根本不需要在代碼審查中考慮它。 它要么通過 CI,要么不通過。

請注意,如果需要,您可以提供預提交掛鈎,但您不應該要求它們,因為它對於用戶在高級工作流程中創建格式不正確的臨時提交很有用。 由於Git FAQ 提到開發者機器上的鈎子不是一個有效的控件,所以無論如何你都需要設置 CI。

您可能會發現這篇文章很有幫助; 作者展示了如何使用帶有本地預提交工作流(或掛鈎)的 clang-format 以及 PR 操作來強制執行代碼樣式。

至少, .editorconfig文件是個好主意,只要團隊成員在進行更改后明智地運行簡單的自動格式化,縮進樣式和空格就不會成為問題。 對我來說,運行自動格式快捷方式很快就像 CTRL+S 一樣習慣了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM