移动存储库后,git diff报告模式发生了变化

fen*_*ent 20 git

我通过复制到外部硬盘将一堆我的git存储库移动到另一个操作系统.现在,当我这样做时git diff,报告所有文件模式都已更改.

diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.npmignore b/.npmignore
old mode 100644
new mode 100755
diff --git a/.travis.yml b/.travis.yml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
Run Code Online (Sandbox Code Playgroud)

我对文件权限知之甚少,我该怎么办呢?

提交模式更改?为所有非可执行文件更改模式?git重置?

Ros*_*ill 41

您可以应用此设置

git config core.filemode false

导致git忽略文件模式的差异.

这个解决方案是在@kan对另一个问题的回答中找到的

  • @DeaDEnD这应该被标记为IMO的正确答案,也许值得一提。 (2认同)

Car*_*rum 11

可能你的外部硬盘驱动器上有一个不同于原始文件权限的文件系统.在提交之前,我只需要手动纠正它们.

例如,通常在USB拇指驱动器上使用的FAT32不支持执行权限.当您将文件从FAT32文件系统复制到普通的类Unix文件系统时,它通常会为所有文件设置执行权限,因为这比为所有文件关闭文件要小.

如果要保留此类信息,请不要将文件直接复制到驱动器; 相反,制作一个tar文件(可选择压缩),然后在另一端解压缩.tar格式确实跟踪Unix权限位.

请注意,git本身不会跟踪可执行文件与非可执行文件.如果模式更改是唯一的区别,并且您不想重新复制所有内容,则可以将输出git diff转换为脚本,chmod -x对所有受影响的文件执行操作.

  • 如果所有文件都是+ x,你可以运行`git diff --name-only | xargs chmod -x`从所有修改过的文件中删除执行位.更谨慎和彻底的方法是使用[本答案](http://stackoverflow.com/a/2083563/880767)中提供的命令,该命令专门处理模式更改(+ x和-x) (3认同)