PHP换行被GIT搞砸了

时间:2009-09-01 10:56:35

标签: php git newline

我们的网站有一个部分经常更改以匹配用户。 (例子大大简化了。)

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。

4 个答案:

答案 0 :(得分:6)

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

  

<强> CRLF

     

此属性控制   行结束惯例。

     

设置在a上设置crlf属性   路径意味着将路径标记为   “文本文件。 core.autocrlf转换   没有猜测就发生了   内容类型通过检查。

     

取消设置取消设置crlf属性   一条路径告诉git不要尝试任何   签入或签署后的行尾转换   结帐。

告诉git不要转换CRLF,方法是将crlf指定为有问题的文件Unset,问题应该消失。

答案 1 :(得分: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将进行更精细的选择。

答案 2 :(得分:1)

似乎它正在将Windows换行符(\r\n0x0D0A)转换为Unix换行符(\n或0x0A)。如果您的HTML包含Windows行结尾,则搜索以字符串中间结尾的Unix样式行将不起作用。你可以明确说出你想要的那个:

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

或者:

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

答案 3 :(得分:0)

在安装过程中,mysGit提供了保留换行符的选项。

一旦我升级就解决了这个问题。