讨论the propagation of changes to .gitattribute to other repos让我思考。如果我正在克隆具有.gitattribute?
的现有存储库,该怎么办?此文件可能指定git哪些文件被视为文本而哪些文件不被视为文本。当我克隆这个存储库时,git是否确保在签出文件之前读取此文件并使其生效?
我做了一些实验,看起来像我期望的那样有效。
这是否记录在任何地方?
PS:.gitattributes文件是否影响自身不在这个问题的范围内。
答案 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上存储您在存储库的工作树中准备的内容。