设置 git 并在多个用户的平台上管理文件所有权

设置 git 并在多个用户的平台上管理文件所有权

我们有一个平台,多人可以在同一个包上工作。因此,我们希望维护每个人的个人 git 凭据,这样它不仅仅是一个人的 sshkey 和一个人的整个提交历史记录。

我们的想法是,可能存在这样的用户:

  • platform_name是主用户,并且拥有所有文件的所有权的用户。这也是人们用来对系统进行更改的用户
  • firstname_lastname对于每个人,该用户只有 git 凭据。这样,当人们firstname lastname想要提交时,他们会从用户那里进行操作

但这变得很困难,因为 git 操作通常会更改文件所有权。是否有解决方法或是否有更好的系统来管理此类事情?

答案1

因此,我们希望维护每个人的个人 git 凭据,这样它不仅仅是一个人的 sshkey 和一个人的整个提交历史记录。

是的,这就是标准用例:git 是一个分布式版本控制系统。每个人都在自己的本地副本上工作。合作是通过他们将更改“推送”到上游共享存储库而发生的,该共享存储库不属于个人贡献者所有。

是否有解决方法或是否有更好的系统来管理此类事情?

像 gitolite、github、gitlab、gitea/forgejo 一样操作,...开箱即用!

与往常一样,每个用户在自己的计算机上都有自己的用户帐户——这一点没有任何改变。

对于中央 git 存储库,您执行以下操作: 有一个 Unix 用户(通常名为git)。您设置 SSH 服务器以将该用户的任何连接转发到了解各个贡献者的守护程序,并通过他们进行身份验证时使用的 SSH 密钥来区分他们。

设置起来相对容易:我不知道你使用的是哪种 UNIX 系统,但对我来说,我所要做的就是(Fedora F38,同样适用于 RedHat/Alma/Rocky/CentOS/OpenSUSE...)安装podman,确保我可以运行容器(usermod --add-subuids 100000-165535 --add-subgids 100000-165535 YOURUSERNAMEHERE这样做),然后运行

podman volume create forgejo-config
podman volume create forgejo-data
podman run \
   -it \
   -p 3000:3000 -p 2222:2222 \
   -v forgejo-config:/etc/gitea \
   -v forgejo-data:/var/lib/gitea \
   --name forgejo \
   codeberg.org/forgejo/forgejo:1.18.3-1-rootless

之后将浏览器转向 http://localhost:3000,只需接受默认值,注册一个新用户,该用户将成为管理员。每个 git 用户也会在同一界面上注册一个新用户。这很容易!

他们转到 Web UI 中的“设置”,然后上传他们的公共 ssh 密钥。

从那里开始,他们可以在自己的命名空间中创建新的存储库,或者通过各个存储库维护者访问他们已获得访问权限的存储库,例如

git clone ssh://git@localhost:2222/projectowner/project

(当然,localhost如果您不在同一台计算机上,则替换为您的计算机的名称,并替换projectowner为拥有的用户或项目名称以及project存储库的名称。)

答案2

要在 Linux 中设置 git 并授予对您的电脑的访问权限以推送或拉取您的存储库并授予权限,因此您需要为 git 创建 SSH 密钥。

只需按照以下步骤操作:

编写命令(在示例电子邮件中提供您的电子邮件):

ssh-keygen -t ed25519 -C[电子邮件受保护]

写入第二条命令

评估“$(ssh-agent-s)”

第三条命令(如果文件不存在则创建文件)

〜/ .ssh /配置

触摸〜/.ssh/config

第四条命令使用此命令在 vim 编辑器上打开配置文件

vim ~/.ssh/config

在文件中输入这些命令:

主持人 *

AddKeysToAgent yes  

IdentityFile ~/.ssh/id_ed25519

<现在使用命令保存文件

运行这个命令

ssh-添加 ~/.ssh/id_ed25519

猫 ~/.ssh/id_ed25519.pub

.SSH-T[电子邮件受保护]

或者

ssh-T[电子邮件受保护]

恭喜你已经完成了

相关内容