我在 RedHat 8 服务器上安装了本地 git 版本控制,当我运行时,git add *
它要求我提供sudo
权限,sudo git add *
这使得添加对我和所有其他团队都使用 root 运行。
因此,当我运行时,git log
它会向我提供更改列表,但是所有改变的改变者是根。如何让每个用户使用自己的凭据运行?
答案1
因此,这里发生的情况是您尝试使用git
您的(非 root)用户无法访问的文件。
这可能是因为实际的源文件不属于您,或者因为 .git 目录不属于您——一旦有人(您也许?)使用了 .git 目录,这肯定会发生sudo git
。
Git 不适用于多用户存储库签出。你只是以原来的方式使用 git专门设计用于不是用于1.
你必须停止按照您当前使用的方式使用 git。这将导致有人最终破坏某些东西,回购协议将需要修复。这是最好的情况 - 我见过人们完全按照你正在做的事情做,他们最终将跟踪的状态与结账不可挽回地分开,结果就是源代码的丢失。这一切都是因为他们坚持使用sudo
单个共享存储库,而不是花 30 秒实际克隆该存储库,而是在本地工作并git push
在上游进行更改。
Git 的设计是这样的,每个用户都可以拥有自己的、独立的、100% 归他们所有的“上游”存储库的克隆。每个用户都应该处理自己的副本。没有共享副本。
如果您需要类似“我进行更改并且它们需要在共享基础架构上生效”之类的内容,那么您可以执行以下操作:
- 在服务器上的某个位置,您设置一个新用户(该用户通常称为
git
),然后通过将所有团队成员的 SSH 公钥添加到该用户的$HOME/.ssh/authorized_keys
. - 你创建一个裸repo 在该新用户的主目录中,
git init --bare mygitproject
. - 您将脚本添加为
post-receive
git钩子。当有人将某些内容推送到该存储库时,Git 将自动执行该脚本。 3.1.例如,在该脚本中,您可以执行类似“如果推送到main
存储库的分支,则将所有文件检出到目标目录”之类的操作。例如,git --work-tree=/etc/apache2 checkout main
如果您想将 apache2 配置保留在 git 中,您可以在该脚本中找到一些内容。 - 所有个人用户都用来
git clone
获取他们的当地的和自己的回购协议的副本。他们在那里工作,git commit
最后git push
。根本没有根/sudo
参与!
当然,上面所做的是实现一个微小的“持续部署”(CD)环境。有更多的软件可以为您完成所有这些工作,包括管理可以推送的用户等等。福尔盖霍就是其中之一。
¹ Git 支持所谓的共享存储库确实,有很多注意事项,并且严格要求您了解底层用户权限问题的后果。从你描述错误的方式来看,这确实不是你和你的同事所处的情况;我强烈建议不要使用该选项,如果询问使用细节,我不会详细说明。
官方的 git 手册是这样说的(我的解释):
你能这样做,如果您习惯了 41 年前的版本控制系统架构并且学习新事物速度缓慢,这将特别有吸引力。但不是这样做只会有好处,包括避免有人意外破坏所有东西。