如何重写历史记录以删除git中的可执行位

时间:2011-07-01 08:46:36

标签: windows git executable git-filter-branch

我已经从另一个SCM导入了一个相当大的存储库到git中。不幸的是,在Windows上完成了迁移(必须),并且每个文件都被设置为执行位而被提交到git中。为了避免再次进行迁移(这是一个漫长而且易于发生的过程),我试图找出是否可以清除可执行位服务器端。我的想法是使用git filter-branch以某种方式结合git update-index,但我可以提示如何继续。

最后执行一个巨大的提交清除所有可执行位不是一个解决方案 - 我不希望每个文件都在历史记录中出现过冲突。

2 个答案:

答案 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。

这可能为将来必须克隆回购的每个人创造更多的工作(或者可能不会,我不是很确定),所以你的解决方案可能更好,但我想我会把它扔出去因为它可能更适合其他人的用例...