2009-09-01 66 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提供了按照原样保留换行符的选项。

这个解决了我升级后的问题。