如何从Git中的暂时更改中删除“旧模式100755新模式100644”的文件?
出于某种原因,当我最初从仓库中为我的一个git项目拉出来的时候,我的工作拷贝中有大量的文件没有对它们做出明显的改变,而是一直显示在我unstaged changes
区域。
我在Windows XP上使用Git Gui,当我去看文件,看看有什么变化。 我所看到的是:
old mode 100755 new mode 100644
有谁知道这是什么意思?
我怎样才能将这些文件从未分离的更改列表中取出? (非常烦人,必须通过100个文件,只是挑出我最近编辑的文件,并希望提交)。
对于我来说,这看起来像unix文件许可模式( 755
= rwxr-xr-x
, 644
= rw-r--r--
) – 旧模式包含+ x(可执行)标志,新模式没有。
这msysgit问题的答复build议将core.filemode设置为false以摆脱该问题:
git config core.filemode false
将core.filemode设置为false是行不通的。 但是你要确保〜/ .gitconfig中的设置不会被.git / config中的设置覆盖。
你可以试试git reset –hard HEAD将repo重置为预期的默认状态。
看来你已经改变了目录的一些权限。 我做了以下步骤来恢复它。
$ git diff > backup-diff.txt ### in case you have some other code changes $ git checkout .
我只有一个更改权限的麻烦文件。 为了单独回滚,我只是用rm <file>
手动删除它,然后做了一个结帐来取出新的副本。
幸运的是我还没有上演呢。
如果我有我可以在运行git checkout -- <file>
之前运行git checkout -- <file>
git reset -- <file>
git checkout -- <file>
发生这种情况时,您可以在远程存储库中执行所有文件。 使它们再次可执行将使所有事情恢复正常。
chmod +x <yourfile> //For one file chmod +x folder/* // For files in a folder
您可能需要执行以下操作:
chmod -x <file> // Removes execute bit
相反,对于没有设置为可执行文件并且由于上述操作而被更改的文件。 有一个更好的方法来做到这一点,但这只是一个非常快速和肮脏的修复。
从旧硬盘复制工作文件的git repo时遇到过这个问题。 问题源于事实,所有者和权限从旧的驱动器/机器更改为新的驱动器/机器。 总而言之,运行以下命令来解决问题( 感谢这个超级用户的回答 ):
sudo chmod -R -x . # remove the executable bit from all files
前者的命令实际上可以解决git diff报告的不同之处,但会撤销你列出目录的能力,所以ls ./
失败, ls: .: Permission denied
。 要解决这个问题:
sudo chmod -R +X . # add the executable bit only for directories
坏消息是,如果你有任何想要保持可执行文件,如.sh
脚本,你需要恢复这些文件。 您可以使用以下命令为每个文件执行此操作:
chmod +x ./build.sh # where build.sh is the file you want to make executable again