我已经从另一个SCM导入了一个相当大的存储库到git中。不幸的是,在Windows上完成了迁移(必须),并且每个文件都被设置为执行位而被提交到git中。为了避免再次进行迁移(这是一个漫长而且易于发生的过程),我试图找出是否可以清除可执行位服务器端。我的想法是使用git filter-branch以某种方式结合git update-index,但我可以提示如何继续。
最后执行一个巨大的提交清除所有可执行位不是一个解决方案 - 我不希望每个文件都在历史记录中出现过冲突。
答案 0 :(得分:5)
这似乎可以解决问题:
git filter-branch --index-filter 'git ls-files -s |
sed s/^100755/10644/ |
git update-index --index-info' -- --all
答案 1 :(得分:1)
您的解决方案非常好,但还有另一种可能性:git config core.filemode false
:
http://git-scm.com/docs/git-config
core.fileMode
如果为false,则忽略索引和工作副本之间的可执行位差异;对像FAT这样的破碎文件系统很有用。请参阅git-update-index(1)。
默认值为true,但git-clone(1)或git-init(1)将在创建存储库时探测并设置core.fileMode false。
这可能为将来必须克隆回购的每个人创造更多的工作(或者可能不会,我不是很确定),所以你的解决方案可能更好,但我想我会把它扔出去因为它可能更适合其他人的用例...