1

我有一个 Git 存储库(最初是 CVS,然后是 SVN,现在是 Git),其中包含一个已在 Linux 上部署一段时间的 Rails 项目。一切似乎都运行良好。

现在我已经转换为 git,我看到存储库中的许多文件都包含CRLF行尾。我希望它保持一致( ),但不会以丢失每个具有行尾LF的文件的编辑历史为代价。CRLF

你能想到我不能让文件保持原样的任何原因吗? 我似乎记得 shell 脚本或 cron 文件或响应CRLF不太好的东西存在问题。

另外,我知道所有关于 Git 选项的信息core.autocrlfcore.safecrlf但是有没有办法让它在结帐时将所有文本文件转换CRLFLF结帐时(对于 linux 端) ......即 core.autolf 选项或类似的东西?

4

2 回答 2

10

如果您可以重写存储库的历史记录(请参阅重写历史记录的问题),您可以使用 git filter-branch 将 CRLF 转换为 LF:

git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD

请注意,如果您的存储库中有二进制文件,则必须改进 find 命令以排除它们。

于 2009-01-22T21:02:57.743 回答
1

对davitenio 的回答和 Daniel Beardsley 的评论的评论我相信您可以使用这个小程序作为 dos2unix 的包装器:

#!/bin/sh
for f in $@; do
    if [ $(file -b -n -i -m /dev/null $f | grep -c "text") -gt 0 ]; then
        dos2unix $f
    fi
done

尽管可能仍有一些极端情况会失败。

于 2010-06-22T11:12:13.430 回答