如何使用git clone创建与git init --shared权限一致的共享仓库
注意:
git clone自带的--shared参数与git init的--shared参数作用完全不同:前者是让克隆仓库通过硬链接复用源仓库的Git对象以节省磁盘空间,和多用户访问的权限配置无关,不要混淆。
方案1:克隆后重新执行git init --shared(最稳妥,推荐)
对已经存在的Git仓库执行git init --shared不会覆盖现有提交数据,只会重新设置仓库的共享权限配置和目录权限位,和直接用git init --shared创建的仓库效果完全一致:
- 第一步:按正常流程克隆仓库,多用户共享的中央仓库建议加
--bare参数创建裸仓库git clone --bare <源仓库地址> <目标共享仓库路径> - 第二步:进入克隆生成的仓库目录,重新初始化共享配置,参数和你使用
git init --shared时的权限参数保持一致(常用值为group代表组内用户共享,all代表所有用户均可访问)cd <目标共享仓库路径> git init --shared=<权限模式> --bare - 第三步(可选):如果需要指定特定用户组访问仓库,递归修改仓库的属组并开启setgid位,保证后续新建文件自动继承目录的用户组权限
chgrp -R <共享用户组名> . chmod -R g+s .
方案2:克隆时直接指定共享配置
也可以在克隆命令中直接传入共享配置参数,克隆完成后手动修正一次文件权限即可:
- 执行带配置参数的克隆命令,core.sharedRepository的取值和
git init --shared的参数一致git clone --bare --config core.sharedRepository=<权限模式> <源仓库地址> <目标共享仓库路径> - 进入仓库目录,递归修正现有文件的组权限:
cd <目标共享仓库路径> chmod -R g+rwX . chmod -R g+s .
验证配置是否生效
执行以下命令,输出对应权限值(比如group/true)代表配置生效:
git config core.sharedRepository
查看目录权限,确认用户组有读写执行权限、setgid位已开启即可。
内容的提问来源于stack exchange,提问作者GOVarney
相关产品推荐
相关产品推荐

