小熊糖否——木子兮的自留地
不同的作業系統有不同的換行符格式,跨平臺協作時需要考慮版本工具(git)對換行符的處理<!--more-->
回車和換行
回車(Carriage Return)和換行(Line Feed)概念:
- 回車CR:將游標移動到當前行開頭;
- 換行LF:將游標“垂直”移動到下一行,並不改變游標水平位置。
以上的概念只適用於打字機,現代計算機沿用的時候主要使用的是回到行首
和換行+回到行首
的功能。看下面的例子:
1、在Windows下應用程式輸出\n到檔案,會被自動轉換成\r\n
// output:
// first line
// second line
printf("first line\nsecond line" );
// test.txt output;
// first line\r\nsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line\nsecond line", sizeof("first line\nsecond line"));
fout.close();
}
2、在windows下應用程式輸出\r到檔案,不會被轉換,並且並不會起到“將游標移動到當前行開頭”的作用
// output:
// second line
printf("first line\rsecond line" );
// test.txt output;
// first line\rsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line\rsecond line", sizeof("first line\rsecond line"));
fout.close();
}
3、在Windows下應用程式輸出\r\n到檔案,\r\n會被自動轉換成\r\r\n
// output:
// first line
// second line
printf("first line\r\nsecond line" );
// test.txt output;
// first line\r\r\nsecond line
std::fstream fout("test.txt", std::ios::out);
if (fout.is_open())
{
fout.write("first line\r\nsecond line", sizeof("first line\r\nsecond line"));
fout.close();
}
不同系統下的換行符
CR、LF、CR/LF為不同作業系統上使用的換行符:
- Windows/DOS系統:採用CR/LF表示下一行;
- Unix/Linux系統:採用LF表示下一行;
- Mac OS系統:採用CR表示下一行;
- Mac OS X系統:採用LF表示下一行(Mac OS X已經改成和Unix/Linx一樣使用LF)。
CR使用符號'\r',十進位制ASCII程式碼是13,十六進位制程式碼為0x0D;LF使用'\n'符號表示,ASCII程式碼是10,十六製為0x0A。所以Windows平臺上換行在文字檔案中是使用 0d 0a 兩個位元組表示,而UNIX和蘋果平臺上換行則是使用 0a 或 0d 一個位元組表示。
Unix/Linux/Mac系統下的檔案在Windows裡開啟的話(使用Windows自帶記事本),會出現換行丟失,所有文字會變成一行,整個文字會亂成一團。Windows系統下的檔案在Unix/Linux/Mac裡開啟的話,在每行的結尾可能會多出一個^M符號。
目前大部分的編輯器和IDE都支援這幾種換行符(除了notepad),但是跨平臺協作專案原始碼到底儲存為哪種風格的換行符呢?輸出的文字需要儲存為哪種風格的換行符呢?Git提供了一個解決方案——在跨平臺協作場景時,會提供一個“換行符自動轉換”的功能。
Git CRLF
Git預設在提交時將Windows換行符(CRLF)轉換為LF,在拉取時將UNIX換行符(LF)替換成CRLF。我們可以通過設定autocrlf和safecrlf來設定具體的操作。
autocrlf and saftcrlf
1、autocrlf
// 提交時轉換為LF,檢出時轉換為CRLF
git config --global core.autocrlf true
// 提交時轉換為LF,檢出時不轉換
git config --global core.autocrlf input
// 提交檢出均不轉換
git config --global core.autocrlf false
2、safecrlf
// 拒絕提交包含混合換行符的檔案
git config --global core.safecrlf true
// 允許提交包含混合換行符的檔案
git config --global core.safecrlf false
// 提交包含混合換行符的檔案時給出警告
git config --global core.safecrlf warn
.gitattributes
.gitattributes檔案能夠設定每個倉庫的換行符配置,摘取Link中的設定為例:
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.vcxproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
1、text=auto:採用git認為最好的方式來處理檔案,未在.gitattributes中設定的項預設按照這種方式處理;
2、text eol=crlf/lf:在checkout時,轉換Line Ending為crlf/lf;
3、binary: 告訴git該檔案為二進位制,防止git修改該檔案。
注意:.gitattributes檔案必須要提交之後才能生效。
由於目前Jenkins推送到打包伺服器上的程式碼預設採用LF結尾,所以建議倉庫內建立.gitattributes檔案並設定。
專案實施一
設定原則
本地倉庫完全一致,適合單一平臺程式設計。
團隊設定
一個團隊需要使用同一的換行符標準(UNIX標準或者Windows標準),然後配置自己的程式碼編輯器和IDE,達到兩項要求:
- 在新建檔案時預設使用團隊統一的換行符標準;
- 在開啟檔案時保持現有換行符格式不變(不要做自動轉換)。
Git設定
1、關閉換行符自動轉換功能
// 提交檢出均不轉換
git config --global core.autocrlf false
2、開啟換行符檢查功能(按照需求設定)
// 拒絕提交包含混合換行符的檔案
git config --global core.safecrlf true
// 允許提交包含混合換行符的檔案
git config --global core.safecrlf false
// 提交包含混合換行符的檔案時給出警告
git config --global core.safecrlf warn
留意每次提交
如果提交的時候變更行數過多(超過自己修改),或者增減行數相同,很有可能是整個檔案的換行符被修改了,這個時候就要注意檢查了。
專案實施二
設定原則
保證倉庫永遠換行符永遠採用UNIX標準(LF),在Windows工作空間設定為Windows標準(CRLF),在Mac/Linux工作空間設定為Unxi標準(LF),適合跨平臺程式設計。
團隊設定
統一不同平臺下的換行符標準,按照上面設定原則的標準,配置自己的程式碼編輯器和IDE,,達到兩項要求:
- 在新建檔案時預設使用團隊統一的換行符標準;
- 在開啟檔案時保持現有換行符格式不變(不要做自動轉換)。
Git設定
1、設定換行符自動轉換功能
# Configure Git on OS X or Linux to properly handle line endings
git config --global core.autocrlf input
# Configure Git on Windows to properly handle line endings
git config --global core.autocrlf true
2、設定換行符檢查功能
// 提交包含混合換行符的檔案時給出警告
git config --global core.safecrlf warn
留意每次提交
1、留意每次提交的更改行數。
2、留意提交時的換行符警告。
相關推薦
小熊糖否——木子兮的自留地
不同的作業系統有不同的換行符格式,跨平臺協作時需要考慮版本工具(git)對換行符的處理<!--more--> 回車和換行 回車(Carriage Return)和換行(Line Feed)概念: 回車CR:將游標移動到當前行開頭;換行LF:將游
【拼多多】小熊吃糖
連結:https://www.nowcoder.com/questionTerminal/dc49df3bbc0146dd92322889d40afcb1 來源:牛客網 [程式設計題]小熊吃糖 熱度指數:838 時間限制:1秒 空間限制:32768K 演算法知識
笨小熊 南陽acm62
ins 並且 class == IT include mpi href strlen 笨小熊 時間限制:2000 ms | 內存限制:65535 KB 難度:2 描述 笨小熊的詞匯量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用
nyoj 62-笨小熊(以對應數組中的ASC位 + 1)
ora 選擇 else max 代碼 OS title 數組 插入 62-笨小熊 內存限制:64MB 時間限制:2000ms Special Judge: No
兩隻小熊隊高階軟體工程第七次作業敏捷衝刺3
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成:1、完成登陸介面響應窗體,登陸成功即出現主窗體
兩隻小熊隊高階軟體工程第七次作業敏捷衝刺7
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成:實現修改班級資訊功能 遇到的問題:修改後的班
木子網羅java筆試題(一)
1.問:Java提供哪幾種運算子? 答:算術運算子、關係運算符、位運算子、邏輯運算子、賦值運算子、其他運算子。 答案相關連結 2.問:從下列選項選出java.lang包中的方法,用來比較兩個物件是否相等,相等返回true。 A.toString() B.equals() C.compare
高階軟體工程第八次作業:“兩隻小熊隊”團隊作業-5
團隊作業:學生資訊管理系統 成員:周菲(隊長)201810812007 孔繁燕 201810812001 1.Alpha版本測試報告 測試過程中發現
“兩隻小熊隊”Alpha版本展示部落格
團隊成員簡介: 周菲(隊長):熟練掌握java和C語言,熟悉java資料庫連線、JDBC和java桌面應用的開發,團隊合作能力較強,責任心較強,做事認真細緻,為人熱情開朗。  
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺1
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成: 開會討論了專案需要增加的幾個小功
怎麼重灌電腦系統,小熊一鍵重灌電腦系統教程
給電腦重灌系統現在已經是一件很平常的事了,電腦有什麼問題都是重啟開機,如果重啟電腦還是沒辦法解決的話,那就來一次系統重灌,除了電腦硬體出現問題以外,基本上電腦出現問題都可以通過重灌電腦系統解決。那要怎麼給電腦重灌系統呢? 一開始我們都是通過光碟來重灌系統的,但是一方面因為光
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺3
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成:使用者非法資訊錄入輸入提示框功能測
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺4
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成: 系統架構優化 遇到的問題:
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺5
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 Alpha敏捷衝刺: 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成: 學生資訊管理介面和成績管理介面增
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺6
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成: 設定所有視窗介面為單介面模式 遇到的問題: 暫無 明
兩隻小熊隊高階軟體工程第九次作業敏捷衝刺7
團隊的作業:學生資訊管理系統 隊員學號: 周菲(隊長) 201810812007 孔繁燕 201810812001 1、 站立式會議照片: 2、每個人的工作: 周菲: 今天已完成: 介面優化,增加了一些小圖示 明日計劃: SQLyog表
小熊線上一鍵重灌系統教程
電腦使用久了,因為資料越來越多導致越來越卡,這個時候重灌系統就可以解決電腦的卡頓問題了。不過不少人還不是很懂如何重灌系統,那麼接下來小編以重灌win7系統為例,教大家使用小熊一鍵重灌系統,線上一鍵重灌系統。 第一步:開啟小熊一鍵重灌系統,會為我們進行環境檢測,然後點選下一步
木子網羅資料庫筆試題(一)
1.問:刪除表資料,同時保留表結構,()方法比()方法效率高 A.delete B.drop table C.truncate table D.delete all 答:C,A 解析: truncate table 命令將快速刪除資料表中的所有記錄,但保留
Problem Q 小熊與糖果
樣例資料 輸入 10 3 2 4 2 1 1 1 2 1 3 9 3 9 11 9 12 9 1000 8 11 輸出 Bob Limak Limak Bob Bob Limak Limak Bob Bob Bob 樣例解釋 在第一組資料中,Limak 先吃一顆糖,然
java網路程式設計五:暴力法破解登入系統的完全實現(木子)
注:以下破解思路及程式碼源自我同學木子 1、先來看一個無任何安全措施的登入系統的破解方法:每次模擬表單提交,若登入成功,此時返回的報頭資訊中有Location欄位,登入失敗無此欄位,繼續模擬登入。直到破解成功,本人成功破解部分同學校園網登入密碼(純四位數字的)程式碼如下