克隆存储库时的.gitattributes

时间:2018-02-06 18:47:25

标签: git attributes clone git-clone

讨论the propagation of changes to .gitattribute to other repos让我思考。如果我正在克隆具有.gitattribute?

的现有存储库,该怎么办?

此文件可能指定git哪些文件被视为文本而哪些文件不被视为文本。当我克隆这个存储库时,git是否确保在签出文件之前读取此文件并使其生效?

我做了一些实验,看起来像我期望的那样有效。

这是否记录在任何地方?

PS:.gitattributes文件是否影响自身不在这个问题的范围内。

2 个答案:

答案 0 :(得分:2)

  

当我克隆[a]存储库[其中我将为git checkout选择的提交中包含.gitattributes文件]时,git确保读取此文件并使其生效检查文件?

  

这是否记录在任何地方?

是的,在the gitattributes documentation前面:

  

当工作树中缺少.gitattributes文件时,索引中的路径将用作后备。在结帐过程中,使用索引中的.gitattributes,然后将工作树中的文件用作后备。

这里有一点不清楚,因为索引本身与工作树群体同时填充 - 整个过程就像通过一个大的原子事务一样 - 但事实上,这意味着什么Git从提交中创建索引 1 ,然后使用索引中的内容填充工作树。

1 这个“the”索引实际上是 new 索引,存储在index.lock中,以后成为索引通过原子重命名()操作。但是,在发生任何这种情况之前,Git必须扫描整个工作树并验证是否允许工作树更新,然后伪原子地执行工作树更新,然后重命名{{ 1}}文件到index.lock以通过释放锁来使原子事务提交。

答案 1 :(得分:1)

  

签出和签到

     

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

https://git-scm.com/docs/gitattributes#_effects