1. 程式人生 > >IDE 的 text file encoding 設定為 UTF-8; IDE 中檔案的換行符使用 Unix 格式, 不要使用 Windows 格式。Why?

IDE 的 text file encoding 設定為 UTF-8; IDE 中檔案的換行符使用 Unix 格式, 不要使用 Windows 格式。Why?

原因:

在各作業系統下,文字檔案所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),後來的 OS X 在更換核心後與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作為換行符。

這種不統一確實對跨平臺的檔案交換帶來麻煩。雖然靠譜的文字編輯器和 IDE 都支援這幾種換行符,但檔案在儲存時總要有一個固定的標準啊,比如跨平臺協作的專案原始碼,到底儲存為哪種風格的換行符呢?

Git 作為一個原始碼版本控制系統,對這個問題提供了一個“解決方案”。Git 由大名鼎鼎的 Linus 開發,最初只可運行於 *nix 系統,因此推薦只將 UNIX 風格的換行符儲存入庫。但它也考慮到跨平臺協作的場景,並且提供了一個“換行符自動轉換”功能。

這個功能預設處於“自動模式”,當你在簽出檔案時,它試圖將 UNIX 換行符(LF)替換為 Windows 的換行符(CRLF);當你在提交檔案時,它又試圖將 CRLF 替換為 LF。

Git:

Git 的“換行符自動轉換”功能聽起來似乎很智慧、很貼心,因為它試圖一方面保持倉庫內檔案的一致性(UNIX 風格),一方面又保證本地檔案的相容性(Windows 風格)。但遺憾的是,這個功能是有 bug 的,而且在短期內都不太可能會修正。

問題具體表現在,如果你手頭的這個檔案是一個包含中文字元的 UTF-8 檔案,那麼這個“換行符自動轉換”功能 在提交時是不工作的(但簽出時的轉換處理沒有問題)。我猜測可能這個功能模組在處理中文字元 + CRLF 這對組合時直接崩潰返回了。

示例:

你在 Windows 下用預設狀態的 Git 簽出一個檔案,寫了一行中文註釋(或者這個檔案本來就包含中文),然後存檔提交……不經意間,你的檔案就被毀掉了。

問題分析:

因為你提交到倉庫的檔案已經完全變成了 Windows 風格(簽出時把 UNIX 風格轉成了 Windows 風格但提交時並沒有轉換),每一行都有修改(參見本文開頭的示意圖),而這個修改又不可見(大多數 diff 工具很難清楚地顯示出換行符),這最終導致誰也看不出你這次提交到底修改了什麼。

相關推薦

IDEtext file encoding 設定 UTF-8; IDE 檔案使用 Unix 格式 不要使用 Windows 格式Why?

原因: 在各作業系統下,文字檔案所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),後來的 OS X 在更換核心後與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)

將myeclipse預設編碼設定UTF-8

  出處: 【 CSDN 】:csdn.zxiaofan.com Window->Preferences->General ->Content Type->Text->JSP 最下面設定為UTF-8

MySql建立Table的時候將編碼設定utf-8

設定資料表編碼 CREATE TABLE 'BmapTable' ( ID VARCHAR(64) NOT NULL, NAME VARCHAR(64) NOT NULL, ADDRESS VARCHAR(64), LONGITUDE VARCHAR(

mysql資料庫插入中文以及亂碼問題解決(統一設定utf-8)格式

1、編輯MySql的配置檔案 MySql的配置檔案Windows下一般在系統目錄下或者在MySql的安裝目錄下名字叫my.ini。像我的就在D:\Program Files (x86)\MySQL\M

mac下mysql 5.7.19字元編碼設定utf-8的方法

如果你查了一堆,都是說在/etc/資料夾下新增一個my.cnf檔案,然後把下面的命令寫進去就可以了 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] coll

如何用mysql 建資料庫並設定utf-8編碼和general_utf8_ci編碼格式

create database Herodefault character set utf8default collate utf8_general_ci;Query OK, 1 row affected (0.00 sec)utf8_general_ci;表示編碼格式,此編

Tomcat亂碼問題 catalina.bat設定UTF-8 控制檯出現亂碼

1、catalina.bat中必須設定為UTF-8,如果我不設定為UTF-8,頁面接收到的就是亂碼了,嘗試過各種UTF-8的除錯,都無解,最後還是隻能在catalina.bat的set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%  -Dfile.en

Oracle編碼設定UTF-8

①執行regedit命令進入登錄檔在目錄下 HKEY_LOCAL_MACHINE SOFTWARE ORACLE KEY_ORADB11g_HOME1 NLS_LANG中預設的SIMPLIFIED C

Eclipse+MyEclipse開發將全域性編碼從GBK設定UTF-8

在使用Eclipse+MyEclipse開發中,許多檔案編碼預設是ISO-8859-1,不支援中文(如常用的JSP)。這樣我們每次建檔案都要手動改編碼,其實我們可以在設定檔案預設編碼,今後再建立時就不用每次修改編碼了, UTF-8 如果要使外掛開發應用能有更好的國際化支援,能夠最大程度的支援中文輸出,則最好

把 編碼UTF-8的XML檔案轉為字元流輸出

package com.wxd.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputS

html 引用檔案編碼utf-8 的 js檔案亂碼問題

html 已經宣告 <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 引用檔案編碼為utf-8 的 js檔案(用editplus開啟,此檔案顯示為utf-8

git 跨平臺使用檔案設定

今天用Git bash遇到的問題,看了幾個回答之後發現一個比較有價值的,給大家分享一下,其他很多的回答都有很或多或少存在一些弊端。 原回答地址在stackoverflow上,附上鍊接--http://stackoverflow.com/questions/1967370/g

php如何將html的br轉換文字輸入

PHP中的有個非常好的函式:nl2br(),將文字框中的換行轉換為HTML頁面的<br />,但是如何實現將html中的<br />換行符轉換為文字框中的換行符呢?下面這幾個方法將能夠幫你解決這個問題。 PHP版將html中的<br /&g

Jenkins maven 構建亂碼修改file.encoding系統變量編碼UTF-8

out selenium 可能 odi 沒有 linu 分享 log image 一切都是windows的控制臺默認編碼GBK問題 情景: 使用jenkins構建,console 輸出的中文亂碼。代碼編碼格式是utf-8,因為Jenkins會默認讀取當前系統的編碼格式,導致

設定MYSQL資料庫編碼UTF-8 設定MYSQL資料庫編碼UTF-8

設定MYSQL資料庫編碼為UTF-8   1、  編輯MySql的配置檔案 MySql的配置檔案Windows下一般在系統目錄下或者在MySql的安裝目錄下名字叫my.ini,可以搜尋,Linux下一般是/etc/my.cnf  

deepin15.7安裝與解除安裝MySQL(解決不提示設定密碼問題)、修改預設編碼utf-8以及查詢MySQL的一些命令

一、首先安裝MySQL 安裝前更新一下倉庫,輸入命令:sudo apt-get update [email protected]:~$ sudo apt-get autoremove --purge mysql-server-5.7 輸入命令:sudo

Pycharm設定預設字元編碼 utf-8

呃...又來水一篇 為什麼要預設使用utf-8編碼 為了避免亂碼問題,我們統一用utf-8編碼。由於Python原始碼也是一個文字檔案,所以當你的原始碼包含中文的時候,在儲存原始碼的時候就務必指定儲存為UTF-8編碼。為了讓Python直譯器讀取原始碼的時候,能夠按utf-8編碼讀取,我

myeclipse設定全部編碼方式UTF-8

1、windows--Preferences開啟"首選項"對話方塊,左側導航樹,導航到general->Workspace, 右側Text file encoding,選擇Other,改變為UTF-8,以後新建立工程其屬性對話方塊中的Text file encodin

設定MYSQL資料庫編碼UTF-8

1、  編輯MySql的配置檔案 MySql的配置檔案Windows下一般在系統目錄下或者在MySql的安裝目錄下名字叫my.ini,可以搜尋,Linux下一般是/etc/my.cnf --在 [mysqld] 標籤下加上以下內容: default-characte

MySql建立Table時設定編碼utf-8

設定資料庫編碼 CREATE DATABASE dbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 設定資料表編碼 CREATE TA