问题:当多个用户可以访问同一个工作目录时,如果git
执行任何操作,可能会在元数据中出现权限问题。
免责声明:在你责备我之前——我意识到共享一个工作目录与 Git 所代表的背道而驰,而且我不是在谈论在这个共享目录中做除了只读操作之外的任何事情——我们在我们自己的本地存储库中完成所有工作.
我愿意接受有关另一种方法来做我们正在尝试做的事情的建议,因为我们的方法肯定不是最佳实践,但我不确定这种对话是否对其他人有用。所以现在让我提供一些关于我们为什么这样做的细节:
我们的团队中有几位构建大师。我们部署到 Linux 服务器,并在那里进行构建,构建脚本直接从 Git 中提取。我们目前无法使用 CI(例如 Jenkins/cruisecontrol),因此我们有一个存储库,我们可以从中签出并进行 QA 构建。
作为脚本的一部分,我们执行了一些 git 操作。这包括提交的一些标记(东西被标记为 QA-current、QA-previous 等......)。所以我想我们实际上并不是完全只读的。由于构建脚本的性质,我们sudo
以普通用户的身份运行它(我们称该用户为 DevAdmin)。我意识到这可能是一种不好的做法,并且可能是痛苦的根源,因为它迫使我们使用共享的 repo 结帐。
这一切都很好,如果我们在那个工作目录中总是被 sudo'ed。问题是,有时,我们中的一个人会git pull
意外地做一个或类似的事情,而不会被 sudo'ed 为 DevAdmin。因此,其中的大多数文件.git
都归 DevAdmin(执行初始克隆)所有,但每当我们这样做时,我们最终.git/objects
都会得到包含特定用户拥有的文件的 dir。这些被创建为组不可写。例如,我还注意到ORIG_HEAD
所有权错误。因此,当我们尝试作为 DevAdmin 做某事时,我们会遇到问题。
我们能做些什么来解决这个问题吗?现在,我们必须认识到它已经发生,然后让服务器管理员chown .git
返回 DevAdmin。或者让用户删除有问题的元文件,或者至少chmod
将它们删除为组可写的。这一切似乎都很糟糕。
我考虑了几个不涉及显着改变我们的构建和维护过程的选项:
如果我们删除了组写入权限.git
并将其限制为 DevAdmin,那会阻止这种情况再次发生吗?这似乎是最直接的选择。
或者有没有办法让.gi
t 组中的所有内容都是可写的,即使它是新创建的?这似乎是从麻烦中问出来的。
我还缺少其他明显的东西吗?我意识到最好的办法可能是改变我们的流程,以便用户可以在他们自己的仓库中工作,但在商业环境中,仓库可能会变得非常大(罐子还没有分离出来,很多二进制文件等...),我们不能为每个人的帐户提供多 GB 的存储库。此外,我们的系统管理员在更改他们的流程以允许它之前还有很多工作要做。
任何想法表示赞赏。