翻译:Git处理换行问题

发布时间:2016-07-30 23:27:26 作者:JIALY 195次浏览

    如果在Github上你使用Git与其它开发者合作开发,必须要确保在处理换行问题上Git配置正确。

    每一次你在键盘上输入Enter键,实际上你插入了一个不可见的换行符。从历史上看,不同的操作系统在处理换行符上有不同的方式。

    当你查看一个文件的改变时,Git使用它自己的方式处理换行符。如果你在Git和Github上合作项目,Git可能产生不可期望的结果。例如,你在Windows系统上工作,而你的合作者在OS X系统上作了修改。

    对换行符的全局设定

    git config core.autocrlf 命令是用来改变Git是如何处理换行符的。它有一个参数。

    在OS X或Linux系统上,你可以输入input来配置,例如

    git config --global core.autocrlf input

    在Windows系统上,你可以输入true来配置,例如

    git config --global core.autocrlf true

    对每个仓库的设置

    可选的,你可以通过配置一个特殊的.gitattributes文件来设置在每个仓库上git处理换行符的方式。这个文件提交到存储库会覆盖掉个人设置,从而会忽略掉个人设置来确保所有用户的一致行为。使用配置文件的好处是你的换行配置是与你的存储库是关联在一起的。你不必担心你的合作者是否和你是使用的同样的换行配置。

    .gitattributes文件必须创建在资源库的根目录,像其它文件一样提交。

    一个.gitattributes文件像一个表格一样拥有两列。

    左边一列是git需要匹配的文件名

    右边一列是git对于匹配出来的文件使用的换行符规则

    Example

    下面是一个.gitattributes文件的例子,你可以把它当作你资源库的模版来使用:

    # Set the default behavior, in case people don't have core.autocrlf set.
    * text=auto
    
    # Explicitly declare text files you want to always be normalized and converted
    # to native line endings on checkout.
    *.c text
    *.h text
    
    # Declare files that will always have CRLF line endings on checkout.
    *.sln text eol=crlf
    
    # Denote all files that are truly binary and should not be modified.
    *.png binary
    *.jpg binary

    你会注意到将会匹配以.c、.sln、.png结尾的文件,它们是以空白行分割的并且有各自对应的配置,例如texttext eol=crlfbinary。下面我们继续看看一些设置。

    • text=auto

    Git会用它认为最好的方式来处理文件。这是一个比较好的选项。

    • text eol=crlf

    Git会检查文件行是否是以 CRLF结束(CRLF表示回车换行符),你必须要求文件每一行都是以回车换行符结束,即使是在OSX或Linux上。(Linux上一般都是以换行符结束)

    • text eol=lf

    Git会检查文件行是否是以 LF结束,你必须要求文件每一行都是以换行符结束,即使是在Windows系统上。(Windows上一般以回车换行符结束)

    • binary

    Git会认为文件不是文本文件,它将不会改变它们。binary设置也可以写成 -text -diff


    在改变行结束设置后刷新资源库

    在你设置完 core.autocrlf选项和提交一个.gitattributes文件后,你会发现Git想提交你未曾修改过的文件。在这一点上,Git希望为你改变每个文件的行结束设置。

    最好的方式来自动配置你的仓库的行结束设置是首先用Git来备份你的文件,删除存储库中的每一个文件(除了 .git 目录),然后恢复所有文件。

    步骤:

    ①在Git上保存最近的文件,这样就你的工作就不会丢失

    git add . -u
    git commit -m "Saving files before refreshing line endings"

    ②删除所有文件

    git rm --cached -r .

    重写Git的索引获取所有新的行结束配置

    git reset --hard

    ④添加你所有修改过的文件以准备提交。这是一个机会去检查哪些文件是没有修改过的。

    git add .
    # It is perfectly safe to see a lot of messages here that read
    # "warning: CRLF will be replaced by LF in file."

    ⑤提交改变

    git commit -m "Normalize all the line endings"


    原文地址:https://help.github.com/articles/dealing-with-line-endings/#platform-all


关键字词: git core.autocrlf 换行