如何在 Linux 上以 root 身份进行 Git 提交?

如何在 Linux 上以 root 身份进行 Git 提交?

有时我必须修改配置文件,例如/etc由 etckeeper 创建的存储库。因此我这样做:

sudo git commit -am "Modified this setting"

不幸的是,它会使用 root 凭据提交。一个肮脏的替代方案是

sudo git commit -am "Modified this setting" --author "John Doe <[email protected]>"

还有其他解决方案吗?

另一个例子是我的/var/www文件设置了0640root:www-data。如果我想修改这些文件,我必须从上下文中进行修改root。如何使用我自己的用户帐户进行修改?

答案1

只要您已将 git 正确配置为普通用户,此简短脚本便可用于实现您想要的功能。它接受git commit除(它会自动生成)之外的任何和所有参数--author,并会自动提示您输入密码,因此您不必使用以下命令运行它sudo

#!/bin/bash

name=`git config --get user.name`
email=`git config --get user.email`

author="${name} <${email}>"

sudo git commit --author "$author" $@

它从用户的 git 配置中提取您的姓名和电子邮件,从中编写作者信息,然后调用 git 创建提交。您可以替换commit任何其他生成提交并接受参数的 git 子命令--author

或者,以普通用户身份克隆存储库(通过 SSH 克隆,因此对于您的/var/www示例,它将是git clone root@localhost:/var/www),以普通用户身份进行提交,然后将它们推送到主存储库。这为您提供了更多自由来根据需要管理您的副本,但要求人们能够通过环回接口上的 ssh 以 root 身份登录。

但请注意,直接使用 git 时要小心etckeeper,如果您添加或删除文件,则/etc/.etckeeper必须正确更新。如果您这样做,则会自动发生这种情况etckeeper commit(不幸的是,它不支持任意提交作者),但如果您只是这样做则不会发生这种情况git commit

答案2

为了自动包含非 root 用户的配置文件,我使用别名bash

alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""

然后我使用gsudo而不是git两者:

  • 以 root 身份运行
  • 有权访问所有非root用户的git配置

检查配置确实被导入:

gsudo config --list --show-origin --includes | less

相关内容