出于某种原因,当我最初为我的git项目从存储库中提取时, 我的工作副本中有大量的文件,它们没有明显的更改,但一直出现在我的非阶段性更改区域中。
我在Windows xp上使用Git Gui,当我去看文件,看看有什么改变。 我看到的是:
old mode 100755
new mode 100644
有人知道这是什么意思吗?
如何将这些文件从未分级更改列表中删除?(为了挑出我最近编辑过并想提交的文件,不得不浏览100个文件,这很烦人)。
出于某种原因,当我最初为我的git项目从存储库中提取时, 我的工作副本中有大量的文件,它们没有明显的更改,但一直出现在我的非阶段性更改区域中。
我在Windows xp上使用Git Gui,当我去看文件,看看有什么改变。 我看到的是:
old mode 100755
new mode 100644
有人知道这是什么意思吗?
如何将这些文件从未分级更改列表中删除?(为了挑出我最近编辑过并想提交的文件,不得不浏览100个文件,这很烦人)。
当前回答
我只是在与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之间没有差异。
其他回答
设置git配置核心的可接受答案。Filemode false,工作,但有后果。设置的核心。Filemode to false告诉git忽略文件系统上的任何可执行位变化,这样它就不会将其视为更改。如果您确实需要在将来的任何时候对这个存储库进行可执行位更改,您将不得不手动执行,或者设置core。文件模式返回为true。
如果所有修改的文件都应该具有模式100755,那么另一种影响较小的替代方法是执行如下操作
chmod 100755 $(git ls-files --modified)
它只是做了模态的改变,不多不少,没有额外的含义。
(在我的例子中,这是因为在MacOS上OneDrive与我的文件系统同步;不改变核心。filemode,我保留了模式改变可能在未来再次发生的可能性;就我的情况而言,我想知道它是否会再次发生,以及改变核心。filemode将隐藏它从我,这是我不想要)
对我来说,这看起来像unix文件权限模式(755=rwxr-xr-x, 644=rw-r——r——)-旧模式包括+x(可执行)标志,新模式没有。
这个msysgit问题的回复建议设置核心。Filemode为false,以摆脱这个问题:
git config core.filemode false
这与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
我只是在与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之间没有差异。
您可以使用以下命令将文件模式更改回。 Git添加——chmod=+x——文件名 然后提交到分支。