出于某种原因,当我最初为我的git项目从存储库中提取时, 我的工作副本中有大量的文件,它们没有明显的更改,但一直出现在我的非阶段性更改区域中。

我在Windows xp上使用Git Gui,当我去看文件,看看有什么改变。 我看到的是:

old mode 100755  
new mode 100644  

有人知道这是什么意思吗?

如何将这些文件从未分级更改列表中删除?(为了挑出我最近编辑过并想提交的文件,不得不浏览100个文件,这很烦人)。


当前回答

设置的核心。Filemode设为false可以工作,但要确保~/中的设置。Gitconfig不会被.git/config中的那些覆盖。

其他回答

这通常发生在回购在Windows和Linux/Unix机器之间克隆时。

只需告诉git忽略文件模式更改。这里有几种方法:

配置仅为当前回购: Git配置核心。filemode假 在全球范围内配置: Git配置——全局核心。filemode假 在~/.gitconfig中添加: (核心) Filemode = false

只要从中选择一个。

我只有一个更改权限的麻烦文件。 为了单独回滚它,我只是用rm <file>手动删除它,然后签出一个新的副本。

幸运的是,我还没有上演。

如果我有,我可以在运行git checkout - <文件>之前运行git reset - <文件>

这与bkm的发现类似,但它也会考虑任何已删除的文件,并且只在应用更改时给出警告。

这可以很好地恢复上次提交的文件模式设置。

git diff -p --no-ext-diff --no-color --diff-filter=d | grep -E "^(diff|old mode|new mode)" | sed -e "s/^old/NEW/;s/^new/old/;s/^NEW/new/" | git apply

如果有任何删除的文件,上面的许多解决方案都将失效。

这将列出仅被修改而未删除的文件,并将它们全部更改为755

git diff-files --name-only --diff-filter=d | xargs -L 1 chmod 755

我只是在与master区分我的分支时遇到了这个问题。当我期望我的分支与master相同时,Git返回了一个“模式”错误。我通过删除文件,然后合并主在再次修正。

首先我运行差异:

git checkout my-branch
git diff master

这返回:

diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644

然后我运行以下来修复:

rm bin/script.sh
git merge -X theirs master

在此之后,git diff返回my-branch和master之间没有差异。