在什么时候会运行.gitattribute eol设置?

时间:2015-06-05 14:38:08

标签: git line-endings git-config gitattributes

在存储库根目录中的.gitattributes文件中添加一行后:

*.tt eol=crlf

什么过程将适用此规则并更改行结尾;在mergecommitpush?它将在客户端上运行它们或者存储原点的任何内容(bitbucket,stash,github)?每个操作系统有什么不同吗?

在{Check out and check in:

下,git man page for .gitattributes有点模糊
  

当git checkout和git merge等命令运行时,这些属性会影响存储库中存储的内容如何复制到工作树文件中。它们还会影响Git如何在git add和git commit上存储您在存储库的工作树中准备的内容。

确切地说,这些变化何时发生?

这与.gitconfig中的设置有什么不同?

1 个答案:

答案 0 :(得分:2)

行结束转换是在

时完成的
  1. 将文件从索引复制到工作目录(这是在示例中将CR映射到CRLF的时候)
  2. 将文件从工作目录复制到索引(这是在示例中将CRLF映射到CR)。
  3. 由于merge将文件添加到索引(冲突除外),因此该规则确实在merge上运行。从技术上讲,它不会发生在commit上,因为commit只是将文件从索引复制到存储库,但如果传入-a选项,则文件确实被复制到索引,然后执行规则。 checkout将文件从索引复制到工作目录,因此也会执行规则。 push期间不执行任何规则。