git与unix组共享回购:权限问题/COMMIT\u EDITMSG使用错误模式创建

git与unix组共享回购:权限问题/COMMIT\u EDITMSG使用错误模式创建,git,Git,我一直在查看,但无法找出问题所在: $ git init --shared=group $ touch test && git add test $ git commit -m 'test' 现在,如果另一个用户提交,他会收到消息:fatal:无法打开.git/commit_EDITMSG”:权限被拒绝,因为文件模式是-rw-r-----(但是组是正常的) 因此,.git/objects/中的大多数文件也没有组的写入权限 对于其余部分,所有目录似乎都是使用适当的共享组和模式创建

我一直在查看,但无法找出问题所在:

$ git init --shared=group
$ touch test && git add test
$ git commit -m 'test'
现在,如果另一个用户提交,他会收到消息:
fatal:无法打开.git/commit_EDITMSG”:权限被拒绝
,因为文件模式是
-rw-r-----
(但是组是正常的)

因此,
.git/objects/
中的大多数文件也没有组的写入权限

对于其余部分,所有目录似乎都是使用适当的共享组和模式创建的


我错过了什么吗?

您可能遇到了另一个用户创建该文件时如何设置
umask
的问题。在您链接的问题中,注释中有一个指向的链接,该链接更详细地描述了可能的umask问题,并建议在repo目录上使用POSIX扩展属性


这就是说:由于您的问题是
.git/COMMIT_EDITMSG
文件,该文件仅在用户键入
git COMMIT
时创建/编辑,因此这表明您共享的是活动工作目录,而不是纯repo

如果您同时开始使用同一个存储库,可能会出现很多问题:

  • 您不能依赖于
    git status
    ,因为Becca可能会在之后键入
    git add foo
  • 你不能依赖于git提交,因为当你键入提交消息时,Fred可能运行了git签出端/分支机构或Melysa运行了git重置头4
  • 等等

除非您真的知道自己在做什么,否则至少要花时间设置一个共享的裸存储库,该存储库将用作所有团队的目标推/拉式回购。

您可能遇到了另一个用户创建该文件时如何设置
umask
的问题。在您链接的问题中,注释中有一个指向的链接,该链接更详细地描述了可能的umask问题,并建议在repo目录上使用POSIX扩展属性


这就是说:由于您的问题是
.git/COMMIT_EDITMSG
文件,该文件仅在用户键入
git COMMIT
时创建/编辑,因此这表明您共享的是活动工作目录,而不是纯repo

如果您同时开始使用同一个存储库,可能会出现很多问题:

  • 您不能依赖于
    git status
    ,因为Becca可能会在之后键入
    git add foo
  • 你不能依赖于git提交,因为当你键入提交消息时,Fred可能运行了git签出端/分支机构或Melysa运行了git重置头4
  • 等等

除非您真的知道自己在做什么,否则一定要花时间至少设置一个共享的裸存储库,将用作所有团队的目标推/拉式回购。

您是否查看了链接问题答案中的命令?可能是
umask的问题。
:似乎创建该文件的人在创建该文件时将umask设置为“不授予组写访问权”。文件的所有者可能是运行创建该文件的
git commit
命令的用户。您必须选择一种方法来统一与该repo交互的每个人的环境设置。您链接的问题中有一条注释,指出了umask可能存在的问题,并使用POSIX扩展属性给出了可能的解决方案。您的问题是
.git/COMMIT_EDITMSG
,似乎表明共享存储库不是一个简单的回购协议,它只能作为一个普通的推/拉目标。如果您共享的是活动回购,请注意在运行多个操作时可能触发的所有陷阱(例如:
git status
一旦显示其内容就过时,
git commit
可能会提交其他用户添加的文件,等等……)。除非你有一个很好的理解的理由,我强烈建议你至少花点时间设置一个普通的遥控器,不是共享工作目录。您是否查看了链接问题答案中的命令?可能是
umask
的问题:创建该文件的人在创建该文件时,似乎将umask设置为“不授予组写入权限”。文件的所有者可能是运行创建该文件的
git commit
命令的用户。您必须选择一种方法来统一与该repo交互的每个人的环境设置。您链接的问题中有一条注释,指出了umask可能存在的问题,并使用POSIX扩展属性给出了可能的解决方案。您的问题是
.git/COMMIT_EDITMSG
,似乎表明共享存储库不是一个简单的回购协议,它只能作为一个普通的推/拉目标。如果您共享的是活动回购,请注意在运行多个操作时可能触发的所有陷阱(例如:
git status
一旦显示其内容就过时,
git commit
可能会提交其他用户添加的文件,等等……)。除非你有一个很好的并且理解的理由,否则我强烈建议你至少花点时间设置一个公共的远程目录,而不是一个共享的工作目录。