使用 git 拉取的代碼問題解決


引言

在做嵌入式 Linux 開發的的程序員,不乏在 Windows 環境下編寫代碼,然后再復制到 Linux 系統中進行編譯。代碼托管或者版本管理絕大部分使用 git。

這樣的開發流程,相信很多開發者在用:從 git 拉取代碼到 Windows 系統中,添加或修改代碼后,復制到 Linux 中進行編譯,然后再下載到目標板運行。

然而,本來應該是正常的開發,卻遇到了問題。

問題描述

某個項目需要添加新的功能,便從 git 服務器上拉取已有的工程代碼到 Windows 系統進行開發。修改完代碼之后,復制到 Linux 虛擬機進行編譯,卻發現報錯了,編譯不通過。

當時覺得很奇怪,已經上線的程序,竟然會編譯失敗。經過一些列的對比查找,發現了一些端倪,代碼文件真的不一樣!

在 Linux 系統中打開工程文件,發現每行的結尾有特殊符號 “^M”。由此考慮,應該是文件換行符不一致引起的錯誤。這個特殊的換行符,使得工程中有些關鍵腳本文件執行失敗,從而導致工程編譯失敗或者目標程序執行異常。

為什么會出現特殊符號 “^M” 呢?

問題原因

不同操作系統的換行符是不一樣的。Unix/Linux 系統使用的是 LF 用作換行符;Windows 一直使用的 CRLF(即,回車 CR和換行 LF)作為換行符。將 Windows 系統下的文件,在Linux 下打開,就會在每行的末尾顯示 “^M”。

然而, git 入庫的代碼采用的是 LF 格式換行。

為了實現跨平台的寫作,git 提供了 “換行符自動轉換” 功能。如果在 Windows 安裝 git,在拉取文件時,會自動將 LF 換行符替換為 CRLF:在提交時,又會將 CRLF 轉化為 LF。

問題解決

解決問題的方法是:禁用 git 的換行符自動轉換功能。

解決方法一

修改 git 的本地配置文件。在本地路徑 C:\Users\[用戶名]目錄下,找到配置文件 .gitconfig,在 “[core]” 下添加如下內容:

autocrlf = false
filemode = false
safecrl = true

解決方法二

通過命令行修改 git 的配置:

/* 不轉換換行符 */
git config --global core.autocrlf false

/* 忽略文件權限修改 */
git config --global core.filemode false

/* 允許提交包含混合換行符的文件 */
git config --global core.safecrlf true

關注微信公眾號【一起學嵌入式】,一起學習,一起成長


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM