我们的网站有一个部分经常更改以匹配用户。 (例子大大简化了。)
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 :(得分: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\n
或0x0D0A
)转换为Unix换行符(\n
或0x0A)。如果您的HTML包含Windows行结尾,则搜索以字符串中间结尾的Unix样式行将不起作用。你可以明确说出你想要的那个:
$stats = "user:Mike\r\nlast visit:Yesterday";
或者:
$stats = "user:Mike\nlast visit:Yesterday";
答案 3 :(得分:0)
在安装过程中,mysGit提供了保留换行符的选项。
一旦我升级就解决了这个问题。