【发布时间】:2016-11-29 19:48:50
【问题描述】:
我想使用 git filter-branch 将企业 git 存储库历史中的 Windows/混合行尾转换为 Unix 行尾。由于存储库包含一些特定于域的二进制文件类型,.gitattributes 文件非常详细,所以我宁愿使用 git 自己的机制进行 EOL 转换,而不是像 here 这样的 dos2unix 脚本。
我设法使用我在https://github.com/cnaj/demo-crlf-rewrite/tree/so-question 中描述的过程进行转换,即执行添加.gitattributes 然后执行git reset 的树过滤器。如果没有重置,历史记录将保持不变。但是,显然在过滤操作期间索引仍处于 HEAD 修订版,因此仅识别相对于 HEAD 更改的文件,并且仅根据 .gitattributes 转换那些文件(因此演示中的“NUKE”提交)。
我的问题:
- 此程序是否可以安全使用,还是只是无证(或被误解)行为的意外结果?
- tree-filter 操作期间 git 的索引是多少?可以在 tree-filter 中使用改变索引的命令吗(我没有找到关于这个主题的明确文档)?
- 额外问题:究竟是什么导致 git 在此设置中获取行尾转换? (我很难理解发生了什么......)
【问题讨论】:
标签: git newline gitattributes