2009-09-01 64 views
1

我們的網站有一個部分經常改變以匹配用戶。 (例子被大大簡化)。PHP的換行符被GIT搞砸了

user:Mike 
last visit:Yesterday 

用來更新內容[我現在不能改變該方法是PHP搜索默認內容的Html網頁,並將其投放到用戶之前用新的內容替換它。

$stats = "user:Mike 
last visit:Yesterday"; 
$defaults = "user:Guest 
last visit:None"; 
$code = implode($stats, explode($defaults, $code)); 

一切都很好,直到我們開始備份網站與GIT [懲罰饞嘴,我們]。

看來,GIT改變了html頁面中的換行符,因此php不能再找到原文。

我不明白換行符是如何存儲或更改的,但偶爾會在提交過程中從GIT收到錯誤,稱它必須更改換行符,並提供「解鎖」或「繼續」。

這是後面的網站不工作,直到我複製/粘貼默認文本從外部存儲的副本到該頁面 - 並且不做提交。

我知道我可以使用正則表達式來進行搜索/替換,但頁面看到足夠的用法,以避免不必要的表達式。

我的本地機器運行Windows。服務器運行Unix。

+0

真的嗎?這只是一個痛苦。 – karim79 2009-09-01 11:01:57

回答

6

http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

CRLF

此屬性控制 行結束約定。

一個 路徑上設置CRLF屬性是爲了紀念路徑作爲 「文本」文件。 core.autocrlf轉換 發生時沒有通過檢查猜測 內容類型。

取消設置取消設置上 一個路徑告訴GIT中不要試圖在檢入或檢出 任何 結束線轉換所CRLF屬性。

讓Git不指定crlfUnset有問題的文件CRLFs轉換和問題應該消失。

+0

請幫我理解如何做到這一點? – SamGoody 2009-09-01 11:31:27

+1

http://progit.org/book/ch7-2.html應該給你一個更方便用戶友好的gitattributes文件如何工作的概述。但具體來說,你想要做的是進入目錄,不應該被CRLF轉換的文件,並創建一個名爲'.gitattributes'的行,其中'* .html -crlf'作爲其內容。這將停止轉換該目錄中任何.html文件的CRLF。 – Amber 2009-09-01 11:36:55

1

它似乎將Windows換行符(\r\n0x0D0A)轉換爲Unix換行符(\n或0x0A)。如果您的HTML包含Windows行結束符,則搜索以字符串中間結尾的Unix樣式行將不起作用。你可以明確地說明你想喜歡這其中的一個:

$stats = "user:Mike\r\nlast visit:Yesterday"; 

或者:

$stats = "user:Mike\nlast visit:Yesterday"; 
+0

實際內容非常長且複雜,我無法用[\ r \ n]替換[人體設計師需要]的空間。 如果有一種方法有\ r \ n以及在編輯器中顯示的新行,那很好 - 可以這樣做嗎?爲了記錄,在切換到GIT之前,即使我的機器是Windows機器,也不成問題。 – SamGoody 2009-09-01 11:06:10

+0

當GIT引發新行錯誤時,「繼續」和「解鎖」選項有區別嗎? – SamGoody 2009-09-01 11:08:15

+0

我不是Git用戶,所以我不能說。看來Dav有解決方法。 – 2009-09-01 12:54:58

2

檢查您是否沒有設置爲「輸入」的core.autocrlf(例如,使用「git config --get core.autocrlf」)。

此配置變量使Git將MS Windows行結束符約定「\ r \ n」(CRLF)轉換爲UNIX約定「\ n」(LF)。有關詳細信息,請參見git-config聯機幫助頁; crlf gitattribute Dav mentioned in answer是有更多的微調選擇。

0

在安裝過程中,mysGit提供了按照原樣保留換行符的選項。

這個解決了我升級後的問題。