1

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

*.tt eol=crlf

什么时候哪个进程会应用这个规则并改变行尾;在merge或 在commit或 在push? 它将在客户端或存储源的任何位置(bitbucket、stash、github)上运行它们?每个操作系统都不同吗?

.gitattributes的git 手册页在签出和签入下有点含糊:

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

究竟是什么时候做出这些改变的?

这与 in 中的设置有何不同.gitconfig

4

1 回答 1

2

行尾转换完成时

  1. 将文件从索引复制到工作目录(在您的示例中,这是 CR 映射到 CRLF 的时间)
  2. 将文件从工作目录复制到索引(在您的示例中,这是 CRLF 映射到 CR 的时间)。

由于 amerge将文件添加到索引中(除非发生冲突),因此该规则确实在 a 上运行merge。从技术上讲,它不会发生在 a 上commit,因为 acommit只是将文件从索引复制到存储库,但是如果您传入该-a选项,那么文件确实会复制到索引,因此然后执行该规则。A 将checkout文件从索引复制到工作目录,因此该规则也随之执行。期间不执行任何规则push

于 2015-06-05T17:51:37.797 回答