Git 从分支a切换到分支b会更改文件权限。但是,将*返回*到分支-a不会*恢复文件权限。为什么呢?
目前,在我的本地回购协议中,我签出了一个名为Git 从分支a切换到分支b会更改文件权限。但是,将*返回*到分支-a不会*恢复文件权限。为什么呢?,git,permissions,Git,Permissions,目前,在我的本地回购协议中,我签出了一个名为mybranch的分支,我的所有文件的权限为644()。工作目录中没有编辑,临时区域中没有任何内容。如果我签出master分支,两个文件的权限将更改为664()。如果我立即再次签出mybranch,则这些文件的权限不会变回644,而是保持在664。我有三个相关问题: 当我签出mybranch时,为什么权限不改回644?他们不应该吗 当我签出master分支时,为什么会发生权限更改?我认为Git只跟踪用户的执行权限 我如何正确地确保所有文件的权限保持在6
mybranch
的分支,我的所有文件的权限为644()。工作目录中没有编辑,临时区域中没有任何内容。如果我签出master
分支,两个文件的权限将更改为664()。如果我立即再次签出mybranch
,则这些文件的权限不会变回644,而是保持在664。我有三个相关问题:
master
分支时,为什么会发生权限更改?我认为Git只跟踪用户的执行权限- 我在以特定Linux用户身份登录时创建了这个repo和主分支:
。当时,我想不起对这两个文件的权限。但他们很有可能是664人user-a
- 创建repo之后,我开始使用另一个Linux用户:
。我将整个repo迁移到计算机上的另一个目录,进入一个只有user-b
才能访问的区域。以user-b
身份登录时,正在完成我当前的所有工作user-b
- 我相信我在开始使用
之后创建了user-b
,但我记不清了mybranch
- 在另一篇论坛帖子中,有人提到所有权限都保存在repo级别的文件
中。因此,恢复到.git/index
分支始终应用保存在该文件中的权限。那个人不知道如何查看该文件中设置的权限,并说我可以使用来更改该文件中的权限master
提前感谢。Git根本不存储组权限。1文件要么是
模式100644
,这意味着它们是rw-
,要么是模式100755
,这意味着它们是rwx
当用作Unix模式时,模式字符串100644
和100755
分别表示rw-r--r--
和rwxr-xr-x
。它们最初是Unix(或Linux)模式,但在很久以前,在除了Linus之外几乎没有人使用Git之前,它们已经不再是了
相反,当Git自己创建文件时,它使用mode
参数0666
(rw-rw-
)或0777
(rwxrwx
)。然后,根据您的个人umask设置,您的计算机操作系统会将这些模式位中的某些位切掉。此个人设置是每个进程的,通常是您在shell中操纵的
默认的码片外位通常为---w--w-
,即rwxrwx
变为rwxr-xr-x
。这是通过umask
设置022
实现的
要让shell创建新进程,将chip-away位设置为----w-
,请使用umask 002
。(如果愿意,可以省略前导零;为了清晰起见,我希望保留它们。)
对664
的更改似乎有些奇怪,但也许您在一个将umask设置为002
的shell中执行此操作,并在一个将umask设置为默认022
的shell中执行将644
留给您的签出操作
1在共享裸存储库的情况下,会应用某些组权限属性。但这并不是这里发生的事情。您提到,“对664的更改似乎很奇怪,但也许您在一个将umask设置为002的shell中这样做,并在将umask设置为默认022的shell中进行签出,从而使644保留在shell中。”我所做的所有更改都是签出一个不同的Git分支。如您所述,这可能会导致对shell进行更改吗?这似乎不太可能,但如果您打开了两个不同的shell窗口,可能这两个不同的shell窗口具有不同的umask设置。要查看当前设置,请运行shell内置的
umask
命令,该命令将打印当前值,而不是设置新值。现在,文件的权限设置为664,运行umask
返回0002
。无论我是在master
分支还是mybranch
,情况都是如此。那么在这一点上,你会建议我如何解决这个问题?i、 e.如何确保这些文件的权限设置为644,并且无论分支如何,都保持在644?我可以简单地切换到主机
,然后将权限设置为644吗?我承认我甚至还没有尝试过。现在umask
返回0002
这一事实意味着Git或几乎任何其他程序现在真正创建的任何新文件都将具有模式664
(不可执行)或775
(可执行)。您可以随时在任何此类文件上使用chmod
;只有新文件才会设置为此模式。当您使用git checkout
或git switch
从一个提交移动到另一个提交时,git将删除并重新创建两个提交中不同的任何文件,因此它们的权限将服从您当前的umask。如果您希望将来创建的文件具有模式664
,请立即将umask设置为022
,并找出是什么将其设置为002
,然后更改该设置。