我们有一个平台,多人可以在同一个包上工作。因此,我们希望维护每个人的个人 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[电子邮件受保护]
恭喜你已经完成了