Git diff 报告本地更改 'old mode'/'new mode'

标签 git filesystems file-permissions

有 2 台机器,A 和 B。有 2 个分支,p16 和 c2。

A 有一个 ext3 文件系统,但在 B 上,存档位于带有 vfat 的 truecrypt 驱动器上,mount 显示 rw,uid=1000,gid=1000,umask=077

A 使用 sshfs 将 B 的目录树链接到它的目录树,然后 A 使用文件系统将其 push B 的 p16。

现在有一些权限问题:

B$ git status
# On branch p16
nothing to commit (working directory clean)
B$ git checkout c2
Switched to branch 'c2'
B$ git checkout p16
error: You have local changes to 'help.txt'; cannot switch branches.

git diff 现在向我显示所有文件的更改模式:

B$git diff
diff --git a/help.txtt b/help.txt
old mode 100644
new mode 100755
diff --git a/169.txt b/169.txt
old mode 100644
new mode 100755
... 
(a list with all files having their mode changed follows)
...

我猜问题是本地文件系统是一个 vfat truecrypt 容器,文件系统不允许其他机器期望的权限。

有什么想法可以更好地链接具有不同文件系统的两台机器吗?

最佳答案

如果操作系统的文件权限在该位置无法正常运行,则使用 git 时可能会出现此类问题。例如,挂载外部文件系统时。

meagar 在他对上述问题的评论中指出了解决方案:

只要确保你有(在[core]部分)一行

filemode=false

在 .git/config 中,它将告诉 git 忽略它正在跟踪的文件的可执行位。

做同样事情的另一种方法是在终端中转到 git repo 的根目录并键入:

git config core.filemode false

请注意,有时需要更改此设置,否则最好保持默认行为。在许多情况下,git 正确跟踪文件权限非常重要,这样您的项目才能正常工作。

关于Git diff 报告本地更改 'old mode'/'new mode',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425088/

相关文章:

android - 将Android Studio项目导出到GIT

macos - Git 配置 - 仍然询问用户名和密码

android - 通过 USB 看不到在 android 中添加的文件夹和文件

linux - 'others' 的文件读取权限不起作用

linux - Set-user-id 位在 Linux 上如何工作?

git - 在本地打包一个尊重 .gitignore 的 git 存储库

git - 使用 git 时组织多个项目的最佳方式是什么

c - Linux/将目录作为文件打开

windows - os.listdir() 显示文件实际上不在 Python 和 Windows 的文件夹中

java - 在程序文件夹中创建锁定文件会导致异常