Git - 多个用户使用相同的工作目录:.git 元文件中的权限问题

2024-01-12

问题:当多个用户有权访问同一工作目录时,元数据中可能会出现权限问题(如果有)git执行操作。

免责声明:在你责备我之前 - 我意识到共享工作目录与 Git 所代表的含义背道而驰,而且我不是在谈论在此共享目录中执行除只读操作之外的任何操作 - 我们在自己的本地存储库中完成所有工作。

我愿意接受关于另一种方法来完成我们正在尝试做的事情的建议,因为我们的方法当然不是最佳实践,但我不确定这种对话对其他人来说是否有用。现在让我提供一些有关我们这样做的原因的详细信息:

我们的团队中有几位构建大师。我们部署到 Linux 服务器,并使用直接从 Git 提取的构建脚本进行构建。我们目前无法使用 CI(例如 Jenkins/cruisecontrol),因此我们有一个存储库,我们可以从中签出并进行 QA 构建。

我们在脚本中执行一些 git 操作。这包括一些提交标记(内容被标记为 QA-current、QA-previous 等)。所以我想我们实际上并不完全是只读的。由于构建脚本的性质,我们运行它sudo'ed 作为普通用户(我们将该用户称为 DevAdmin)。我意识到这可能是一种不好的做法,并且可能是痛苦的根源,因为它迫使我们使用共享回购结账。

如果我们在那个工作目录中总是被 sudo 的话,这一切都很好。问题是,有时,我们中的一个人会做一件事git pull或意外类似的东西,而无需被 sudo 为 DevAdmin。所以大部分文件在.git属于 DevAdmin(执行初始克隆),但每当我们这样做时,我们最终都会得到目录.git/objects包含特定用户拥有的文件。这些被创建为组不可写。我也注意到了ORIG_HEAD例如,所有权错误。因此,当我们尝试以开发管理员身份执行某些操作时,我们会遇到问题。

我们可以做些什么来解决这个问题吗?现在,我们必须认识到它已经发生,然后让服务器管理员来处理chown .git回到开发管理员。或者让用户删除有问题的元文件,或者至少chmod将它们设置为组可写。这一切看起来都很糟糕。

我考虑了几个不涉及显着改变我们的构建和维护流程的选项:

如果我们删除组写访问权限.git并将其限制为 DevAdmin,这会阻止这种情况再次发生吗?这似乎是最直接的选择。

或者有没有办法让一切都在.git 组可写,即使它是新创建的?这看起来像是自找麻烦。

我还缺少其他明显的东西吗?我意识到最好的事情可能是改变我们的流程,以便用户可以在自己的存储库中工作,但在业务环境中,存储库可能会变得非常大(罐子尚未分离出来,大量二进制文件等...),而且我们无法为每个人的帐户提供多 GB 的存储库。此外,我们的系统管理员需要做大量的工作来改变他们的流程以实现这一点。

任何想法表示赞赏。


有一个方式数量 https://serverfault.com/questions/26954/how-do-i-share-a-git-repository-with-multiple-users-on-a-machine来解决这个问题。就我个人而言,我建议在您现有的存储库中使用以下内容:

# Create a group named "gitshare" that will share the repository.
sudo groupadd gitshare

# Add yourself and as many others as you want to the group.
sudo adduser "$LOGNAME" gitshare

# Everything else needs to run from the top level of your Git repository.
cd /path/to/repository

# Add group permissions for *new* modifications to repository.
git init --shared=group

# Fix permissions for existing repository objects.
chown -R :gitshare "$PWD"
chmod -R g+swX "$PWD" 

显然,您需要确保用户具有一直到您的存储库的目录遍历权限(例如,用户私有目录可能会导致问题),并且所有需要访问权限的团队成员都属于存储库的共享组。不过,经过初始设置后,它应该“正常工作”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git - 多个用户使用相同的工作目录:.git 元文件中的权限问题 的相关文章

  • 使用:文件上的“git update-index --skip-worktree”。现在无法更改分支

    我添加了一个带有 git update index skip worktree 的文件 效果很好 但现在我无法更改分支 由于对以下文件的现有更改 无法完成操作 它显示我更新了索引的文件 我有一次提交更改了该文件 之后我意识到我应该更新索引
  • Visual Studio Code 无法检测已安装的 git 并且“启动 git 时出错:文件名或扩展名太长”。

    我已经查看了大多数描述标题上的第一个错误的帖子 Visual Studio Code 无法检测已安装的 git 尽管如此 我相信第二个错误 启动 git 时出错 文件名或扩展名太长 生成第一个 你可以帮帮我吗 Git 在使用 Git Bas
  • 设置 PHP Web 项目、基础设施

    如何最好地设置 PHP LAMP 开发环境 以便拥有开发 登台和生产服务器 一键部署到其中任何一个 以及一键回滚到任何修订 回滚还应该将数据库模式和数据回滚到源代码当前的状态 现在 我已经使用 shell 脚本为一个应用程序完成了所有这些操
  • 如何使用 API 和 C# 将文件从 azure DevOps 服务器下载到指定路径

    我正在尝试使用 API 从 azure Devops 服务器下载文件 API 给出了成功响应 但是没有下载任何文件 如果我们删除格式参数 我们将获得带有文件链接的响应 单击该文件不会下载 示例代码 var personalaccesstok
  • 如何为 github 中两个分支之间的单个文件生成差异

    我需要为单个文件生成一个 diff 以显示两个版本之间的差异 这实际上是 github 中的标签 然后我想通过电子邮件将此差异发送给某人 因此差异的 github URL 将是理想的选择 github 比较视图将允许我对所有更改的文件执行此
  • git 分叉是如何工作的?

    所以我登录了 github 并 fork 了一个项目 每次原始存储库更新时 我的分叉存储库都会更新吗 或者我应该每次都从原始存储库进行分叉 这样我就不会错过对原始存储库所做的任何新更改 分叉是存储库的副本 分叉存储库允许您自由地尝试更改 而
  • Maven“部署”导致签名操作后代码重新打包(BAD 签名)

    我想将一个工件部署到 Sonatype OSS 存储库 当我使用以下命令进行部署时 签名无效 mvn clean source jar javadoc jar install gpg sign deploy gt gpg verify ta
  • Git 克隆致命

    我在执行 git clone 时遇到错误 fatal pack has bad object at offset 824775943 inflate returned 1 fatal index pack failed 它仅适用于 Wind
  • 恢复 git reset --soft

    我修改了我的分支中的一些文件并做了一个 git add all 但这添加了一些我不打算为提交添加的文件 所以我做了一个 git reset soft HEAD 2 instead of doing git reset HEAD 但之前的提交
  • 无法将 android“gen”文件夹提交到 Git

    我在 eclipse 中使用 EGit 为我正在开发的 Android 项目提供 Git 支持 问题是 将我的项目提交到本地存储库后 我意识到 gen 文件夹没有被提交 因此 当我从 Git 存储库获取最新源代码后尝试在另一台计算机上打开该
  • 在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)

    我现在真的很沮丧 我有一个现有的 hg 存储库 其中有几个月的编码历史 我想将其放入私有 Github 存储库中 以便我可以从那里对其进行处理 不幸的是我使用的是 Windows 我似乎找不到any转换我实际上可以正常工作的存储库的方法 实
  • 在 git 提交消息中使用任何 utf-8 字符是否安全?

    我发现使用 UTF8 字符 例如 很有用 请参阅here http www utf8icons com subsets dingbats 在提交消息中 重构 NewService 添加了更好的服务 OldServiceA 据我所见 它see
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • 从 master 更改为新的默认分支 git

    这是一个场景 我们有一个默认的分支 Master 我们以此为基础 创建分支并向上推等等 我们现在创建了一个Develop分支Master并将其设置为默认开发分支 我想知道的是 我现在如何知道我的 git pull 命令是否通过命令行请求默认
  • 在 GitHub 上执行拉取请求时避免不需要的合并提交和其他提交

    我在 Github 上分叉了一个项目 令远程上游为upstream我的远程存储库是origin 我当地的master分支设置为跟踪远程master分支 然后我在本地添加了一些东西master 时不时与上游汇合 直到今天我想发出pull re
  • Android 对 Runtime.getRuntime().exec() 的权限

    我有一个应用程序在清单上具有以下权限 我的应用程序在 Android JB 4 1 2 上运行 UPDATE 我尝试在 JB 上运行该应用程序 但它不起作用 它适用于早期的 API 版本
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • 返回到存储库中的特定修订后提交并推送更改?

    我们需要及时返回到某个特定的提交 一些意外的改变是为了掌握 尝试恢复它挖得太深 所以 master 的状态很糟糕 现在我们希望master回到66ada4cc61d62afc 根据git 恢复到某个提交 https stackoverflo

随机推荐

  • 为 Chrome 扩展注入 CSS

    我对 Chrome 扩展开发还很陌生 我知道可以注入CSS 但是是否可以为特定的 URL 注入它 例如 每当我访问 google com 时 CSS 就会被注入 谢谢您的帮助 那么 您有 2 个选择 编程注入和内容脚本 这些名字可能听起来非
  • 将 csv 文件导入 java swing 表

    我有纽约证券交易所所有股票报价的 csv 文件 第一列是符号第二列是公司名称 我有一个使用 java swing 库在 netbeans 中制作的搜索框和表格 现在 当我在框中输入名称时 它会返回正确的行数 例如 如果我搜索 GOOG 它只
  • 根据调整窗口大小的动态高度 div

    HTML div class header Header div div class body table class body table tr td Cell td td Cell td td Cell td tr tr td Cell
  • 如何在for循环中声明变量? (IDL)

    例如 我的文件以00 dat 01 dat 02 dat 每个文件包含多个列 我使用READCOL将它们读入变量 for i 0 n 1 do begin readcol string i F I02 dat F D D a0 b0 rea
  • postgresql中如何计算空值?

    select distinct column from table output column 1 0 0 2 null 3 1 0 但是当我尝试计算空值时 select count column from train where colu
  • 直接访问子类中自动合成的实例变量?

    为了提高效率 我想访问与子类中的属性关联的成员变量 如果我有一个声明如下的财产 interface Mumbo NSObject property nonatomic GLKVector3 position end 在 Mumbo 的实现中
  • 使用 Win32 API 连接字符串

    使用 Win32 连接字符串的最佳方法是什么 如果理解正确 正常的 C 方法是使用strcat 但由于 Win32 现在处理 Unicode 字符串 又名LPWSTR 我想不出办法strcat来处理这个 有这个功能吗 还是我应该自己写 ls
  • 从分页 URL 中删除“页面”

    我在更改 Wordpress 中的分页 URL 时遇到问题 我知道这个问题的通用解决方案是更改 WordPress 核心文件 但我只需要针对一个类别使用此解决方案 也许只有一个类别可以通过 htaccess 来完成 现在有这样的网址 htt
  • 未找到架构 x86_64 的符号 - Cmake - Mac sierra

    最近我开始了一个 C 的新项目 问题是 当我尝试编译它时 出现链接错误 我今天花了一整天的时间尝试调试它 但我并没有真正在任何地方找到好的解决方案 如果有人能帮忙那就太好了 我使用的是 Mac Sierra parsing methylat
  • 如何通过 EF Model First 数据库架构升级避免数据丢失?

    这是一个很长的问题 但如果我能就此得到一些好的建议 我将非常非常感激 简而言之 我正在寻找一种对 MS SQL 数据库模式进行版本升级的好方法 该方法还要求将数据从已删除的表移至新表 我认为 Stack Overflow 是解决这个问题最合
  • 如何在 Emacs 中输入希腊字符

    This http xahlee info emacs emacs emacs n unicode htmlpage 表明希腊字母可以通过使用插入到 Emacs 中M i 然而 Debian Squeeze 变体中的 Emacs 23 2
  • 如何将BottomAppBar + FAB与BottomNavigationView结合起来

    我想使用FloatingActionButton 以及它锚定在 BottomNavigationView 顶部的 BottomAppBar 上时的行为 我想出了一个相当 hacky 的技巧来放置BottomNavigationView在 B
  • 如何证明这个大o符号的说法?

    如何证明这一点 4n O 8n 8n O 4n 那么有哪些C and n0两种情况的值 EDIT 我试图澄清我更多 1 For a proof see formal definition of Big O http en wikipedia
  • 分布式tensorflow在运行server.__init__后独占GPU

    我有两台计算机 每台计算机都有两个 GPU 我试图从分布式张量流开始 但对它是如何工作的感到非常困惑 在计算机 A 上我想要一个ps任务 我的印象是这应该在CPU上进行 和两个worker任务 每个 GPU 一个 我想在计算机 B 上有两个
  • angularjs在控制器之间共享数据配置

    我想知道共享指令的好方法是什么 控制器之间 我有两个指令可以在不同的控制器中使用 我首先想到的是不同的配置 使用类似 html div class container div div div js controller MainCtrl f
  • 如何加载检查点文件并使用略有不同的图形结构继续训练

    当我训练图表时 我发现我忘记在图表中添加 dropout 但我已经训练了很长时间并得到了一些检查点 那么我是否可以加载检查点并添加 dropout 然后继续训练 我的代码现在是这样的 create a graph vgg fcn fcn8
  • Selenium 和 Angularjs 等待执行一些操作

    我正在使用 selenium 来测试 AngularJS 应用程序 我面临的问题是 在页面完全加载之前 我无法在页面上执行任何操作 我可以放置 Thread sleep 但据我所知 这不是一个好的解决方案 有很多方法可以等待页面加载 我用谷
  • Spring @ConditionalOnProperty 注释未按预期工作

    我在属性文件中定义了一个属性 property true 然后我有SomeClass java类 其中should创建属性配置 beanonly如果财产property设置为 true 这是我的SomeClass class public
  • fork() 和输出

    我有一个简单的程序 int main std cout lt lt Hello World fork 程序执行后我的输出是 Hello World Hello World 为什么会发生这种情况而不是单一的Hello world 我猜测子进程
  • Git - 多个用户使用相同的工作目录:.git 元文件中的权限问题

    问题 当多个用户有权访问同一工作目录时 元数据中可能会出现权限问题 如果有 git执行操作 免责声明 在你责备我之前 我意识到共享工作目录与 Git 所代表的含义背道而驰 而且我不是在谈论在此共享目录中执行除只读操作之外的任何操作 我们在自