寻找一种可以本地 Linux 下安装的 git 服务器,可以设置不同的用户有不同的分支权限,以及不同目录的访问权限

2023-08-22 16:00:42 +08:00
 gdb

开发的人员越来越多,希望对 git 仓库进行管理和权限设置。

比如某些分支,只能由特殊的一些用户访问,不是所有人都能访问到,这里是读和写的权限都需要考虑。

另外,比如某些 git 的目录下,最好也能做到权限控制,比如某些目录针对某些用户是不能读的。

我不知道是否有这样的功能,貌似网上搜索了一下,微软公司有一个网页:Set Git branch security and permissions - Azure Repos | Microsoft Learn — https://learn.microsoft.com/en-us/azure/devops/repos/git/branch-permissions?view=azure-devops

但是感觉这个是云服务,而我需要的是一个本地能装的代码版本管理系统。

我也看了一下,似乎 svn 有不同的目录权限,但是 svn 是很老的东西,基本上现在所有人都在用 git 了。

请各位 v 友推荐一下是否有这样的 git 服务器软件,谢谢!

1612 次点击
所在节点    git
18 条回复
duke807
2023-08-22 16:15:17 +08:00
gerrit 看一下
v2kid
2023-08-22 16:34:20 +08:00
gitea 试试。
dobelee
2023-08-22 16:37:27 +08:00
gitolite 能配置分支权限。
vicalloy
2023-08-22 16:42:58 +08:00
git 从原理上说不支持按照目录分配权限。
如果你要安装目录分配权限,得用 submodules 控制。
zjsxwc
2023-08-22 16:45:47 +08:00
偷懒的解决办法:使用 svn

不偷懒的办法:使用 git submodule
https://git-scm.com/book/en/v2/Git-Tools-Submodules
```
比如说,如果您的团队 α 和 β 应该有单独的代码库,但其他一些项目同时使用它们,请将 α 和 β 的代码库放入单独的存储库中,并且使用它们的项目也是一个单独的存储库,该存储库使用子模块来引用这两个项目 这取决于。

子模块的一个属性是子模块引用始终引用相应存储库中的精确提交,因此第三个(依赖)存储库中的每次提交都将引用 α 和 β 代码库的精确状态,从而在过去的任何时间点提供可重现的构建。
```
ashuai
2023-08-22 16:56:08 +08:00
简单点 gitlab
NessajCN
2023-08-22 17:00:20 +08:00
这些都是 git 基本功能,根本不用什么额外软件
git 是分布式工具,软件不分服务端客户端,只要你能被 ssh 进来就能直接用 git 全部实现你要的功能
https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server
gdb
2023-08-22 17:09:13 +08:00
@dobelee @ashuai @v2kid 我感觉这些工具有分支权限设置,但是这些设置权限只是设置“写权限”,并不能屏蔽“读权限”。也不能屏蔽针对目录的“读权限”。

@duke807 看了一下 gerrit ,似乎不行。

@zjsxwc submodule 也挺烦人,多了之后相互依赖,也不是很好弄。

谢谢各位的回复。
Reficul
2023-08-22 17:22:42 +08:00
git 服务端的 hook 去做目录权限管理,其他配合 girret 应该可以吧。。。
Reficul
2023-08-22 17:24:04 +08:00
BTW ,不让读特定目录应该做不到,Git 是分布式版本管理系统,一拉就得是完整的仓库。 不让写特定目录配合 Hook 应该可以的,机器人自动 -1.
cheneydog
2023-08-22 17:24:50 +08:00
gogs
someday3
2023-08-22 17:25:40 +08:00
你这个需求不对,是伪需求。

如果你需要控制某些分支一些人连读都不能读,那么他已经不能算是这个项目的分支了。虽然逻辑上可能是这个项目的一个子分支,但是要求上已经是一个独立的项目了,比如一些政府类的定制,那升级为单独的仓库来控制。

不然的话像你说的,分支会很乱。

git 是产品上的抽象,产品的分支就应该是所有的分支有相同的权限。每个分支拥有单独的读写控制,那就是一个产品下有 N 个产品,这在逻辑上是混乱的。这样的产品应该抽象为一个组,一个组有一个基线仓库,就是产品的公版。另外一些是组内的另一些仓库,单独控制权限。
gdb
2023-08-23 08:44:03 +08:00
@someday3 谢谢你的建议,我也感觉应该用不同的项目仓库比较好。

@cheneydog 研究了一下 gogs 的文档,似乎也没有对“读权限”的限制,谢谢!

@Reficul 对的,你的理解是正确的,谢谢!我现在还没有看到哪个 git 的管理工具,能对“读”某个分支或者某个目录进行限制的。
coderzhangsan
2023-08-23 09:20:18 +08:00
既然 SVN 能满足需求,就用 SVN 吧,其他工具能不能实现,需要调研,弄不好也是瞎折腾;至于 SVN 担心用的人少,我觉得担心是多余的,说到底就是个版本管理工具,开发人员不了解可以学习,制定好基本操作规范流程,就可以了,也不是非要精通,况且很多人也是经历过 SVN 的时代,或多或少都有了解的。
gegewu0927
2023-08-23 09:20:32 +08:00
https://github.com/PGYER/codefever 不知道满足不,可以看看其中的功能。
cslive
2023-08-23 09:30:46 +08:00
换 svn 然后用 git 操作一样的,git svn clone url
vibbow
2023-08-23 10:39:11 +08:00
bitbucket server
gdb
2023-08-23 10:44:25 +08:00
@vibbow 你这个服务器应该不行吧,我网上查了一下,见一个回答:BitBucket File and folder level permissions within same repository - Stack Overflow — https://stackoverflow.com/questions/39976046/bitbucket-file-and-folder-level-permissions-within-same-repository 总而言之,在可以读取一个 git 的情况下,要对 git 中的某些目录或者某些分支进行读的功能限制,估计在目前 git 里面是做不到的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX