我在通过 SSH 访问的服务器上有一个裸 git 存储库。我可以推拉就好了。但是,我推送的文件是在具有访问权限的服务器上创建的644
,这意味着只有我可以更改文件。只要我是唯一的贡献者,这很好,但是我可以做些什么来允许多个用户使用存储库?我在服务器上没有 root 权限,所以我无法更改任何全局选项。
在推入存储库后,我正在考虑一些挂钩脚本来更改文件权限。
这是解决我的问题的首选方法吗?我应该如何前进?还有其他/更好的解决方案吗?
我在通过 SSH 访问的服务器上有一个裸 git 存储库。我可以推拉就好了。但是,我推送的文件是在具有访问权限的服务器上创建的644
,这意味着只有我可以更改文件。只要我是唯一的贡献者,这很好,但是我可以做些什么来允许多个用户使用存储库?我在服务器上没有 root 权限,所以我无法更改任何全局选项。
在推入存储库后,我正在考虑一些挂钩脚本来更改文件权限。
这是解决我的问题的首选方法吗?我应该如何前进?还有其他/更好的解决方案吗?
您必须将文件夹更改为 775,将文件更改为 664。之后,您需要配置core.sharedRepository
.
https://www.kernel.org/pub/software/scm/git/docs/git-config.html
当 group (或 true)时,存储库可在组中的多个用户之间共享(确保所有文件和对象都是组可写的)。当所有人(或世界或所有人)时,所有用户都可以读取存储库,此外还可以组共享。当 umask(或 false)时,git 将使用 umask(2) 报告的权限。当 0xxx(其中 0xxx 是八进制数)时,存储库中的文件将具有此模式值。0xxx 将覆盖用户的 umask 值(而其他选项只会覆盖用户的 umask 值的请求部分)。示例:0660 将使所有者和组可以读/写 repo,但其他人无法访问(相当于组,除非 umask 是例如 0022)。0640 是组可读但不可组写的存储库。请参阅 git-init(1)。默认为假。
在我的团队存储库中,我将其设置为group
. 所以,我的config
样子是这样的:
sharedRepository = group
你在服务器上没有权限?除非您计划与多个贡献者共享您的一个 SSH 帐户,否则这需要解决。
服务器用户只是 repo 文件的所有者。贡献者是可以访问服务器的其他用户,但不一定是真正的系统用户。
假设您有用户git
on yourserver.com
,并且您的 repo 在/home/git/yourproject.git
. 在本例中,我们将使用 authorized_keys 方法来验证您的用户:您需要将贡献者的 SSH 公钥添加到用户 git 的 authorized_keys 文件中(例如 inside /home/git/.ssh/authorized_keys
)。
此时,贡献者可以轻松地克隆项目并将更改推送回来:
$ git clone git@yourserver.com:/home/git/yourproject.git
贡献者第一次必须配置他们的身份:
$ git config --global user.email "bob@example.com"
使用这种方法,您可以为少数开发人员快速启动并运行一个读/写 Git 服务器,而无需担心文件权限,而是跟踪单个更改;我总是使用这个设置来配置一个 git 存储库。