簡體   English   中英

為什么git關心我文件中的尾隨空格?

[英]Why does git care about trailing whitespace in my files?

無論我使用哪種VCS來擔心我放入文件中的內容,它有什么作用? 我不明白這里的意思。 是git版本控制還是語法檢查?

這是因為Git的一個常見用途是通過電子郵件發送補丁系列。 尾隨空格會導致電子郵件出現問題,因此通常會被刪除,這意味着在通過電子郵件發送補丁並應用補丁的過程中,任何尾隨空格都將丟失。 這反過來意味着如果repo中的行上有尾隨空格,但是在應用的補丁中沒有,那么在應用補丁時,您可能會遇到虛假沖突或無意的額外更改。

默認情況下,此預提交掛鈎已啟用,但不再啟用 我好像錯了; 它默認情況下從未故意啟用 正如其他人所指出的那樣,這一直是一個預先提交的樣本鈎子; 過去通過不給它執行位來禁用它,但這可以很容易搞砸(例如,在Windows上的Cygwin下運行),所以在較新版本的Git(自一年多以前 )樣本有已被命名為pre-commit.sample而被禁用。 您可以刪除或移動.git/hooks/pre-commit以防止在您不喜歡該行為時執行此掛鈎。 您還應該將Git更新為更新的內容,因為這已經修復了很長一段時間。

Git根本不關心。 示例預提交掛鈎執行空白檢查作為如何編寫掛鈎的演示,但默認情況下不啟用它; 你必須使它可執行,以便它做任何事情。

為什么? 因為尾隨空格很容易丟失,導致虛假更改並且不應用補丁(因為空白更改)。 這是符合編程風格的問題

這就是pre-commit 鈎子的問題 :你可以編輯它,或者禁用它,或者配置尾隨空格(可能只針對某些類型的文件)不被視為錯誤。


默認情況下應該禁用 pre-commit掛鈎,但是通過關閉可執行權限來關閉用於安裝它們的舊版本(1.6.0之前的版本),這可能不適用於FAT等非UNIX文件系統; 從1.6.0開始,通過附加'.sample'后綴來關閉(禁用)它們。

正如hobbs寫的那樣,示例預提交鈎子可能正在檢查尾隨空格。 要禁用它,請查看.git/hooks並確保其中的文件不可執行。

鈎子可能已啟用的一種可能方法是,如果您在FAT格式的閃存驅動器上移動回購,可執行位可能已設置。

這不是VCS試圖告訴你什么是好的編程風格的問題。 尾隨空白對他們來說是一件壞事,因為尾隨空格可以被視為VCS無用的修改。

怎么會這樣?

想象一下你有這樣一條線:

puts "Hello World"^M^M^M

其中每個“^ M”是一個尾隨空格(放在那里簡化)。

另一位開發人員意外地將此更改為:

puts "Hello World"^M^M

VCS會將此視為一種變化。 一個無用的,根本不會干擾代碼,而是一個變化。 這種變化甚至可以被VCS指出為沖突(這是應該盡可能避免的事情)。 此外,它不需要污染你的歷史。

您可以使用--no-verify開關繞過它,請參閱http://git-scm.com/docs/githooks

暫無
暫無

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

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