【发布时间】:2011-07-22 10:59:17
【问题描述】:
有 2 台机器,A 和 B。并且有 2 个分支,p16 和 c2。
A 有一个 ext3 文件系统,但在 B 上,存档位于带有 vfat 的 truecrypt 驱动器上,mount 显示 rw,uid=1000,gid=1000,umask=077
A 已使用 sshfs 将 B 的目录树链接到其目录树中,然后 A 使用文件系统将其推入 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 容器并且文件系统不允许其他机器期望的权限。
有什么想法可以更好地将两台机器与不同的文件系统联系起来吗?
【问题讨论】:
-
只是猜测,但是分支 p16 是否有一个 .gitignore 忽略了更改的文件?
-
p16 有 2 行的 gitignore,请参阅更新后的问题
-
您在 Windows 上吗?它缺少
x位,这会导致您描述的很多痛苦。 -
你推送到非裸仓库?
-
您的操作系统可能在文件权限方面做了一些有趣的事情;尝试在 .git/config 中设置
filemode=false,这将告诉 git 忽略它正在跟踪的文件的可执行位。
标签: git filesystems file-permissions