Git,如何将裸仓库更改为共享仓库?

32

这是我设置项目的方式:

git init --bare

后来我了解到,如果要在一个项目中与多个用户一起工作,这就是我应该做的方式:

git init --bare --shared

现在我已经尝试过这样的工作方式,幸运的是我们还处于开始阶段,所以我可以再次设置git。不过我仍然想知道,当你处于项目中途时,是否有办法将裸仓库更改为共享仓库?


1
另一个使用情况是,如果您的远程存储库已损坏并且您正在尝试使用从常规存储库反向工程化的裸存储库替换它,则需要修改现有的裸存储库。 - Sridhar Sarnobat
2
早在 git 1.7.1 版本中,您只需在 现有 裸仓库中运行 git init --bare --shared 命令,git 就会使用指定的共享方式重新初始化该仓库。 - go2null
可能是重复的问题:如何配置现有的git仓库以被UNIX组共享 - Trevor Boyd Smith
4个回答

40

因为--shared选项只是将存储库中的所有内容权限设置为组可写,所以您可以稍后手动执行此操作:

$ chmod -R g+w the/repo/path

加上,添加

sharedrepository = 1

.git/config 文件的 [core] 部分。共享仓库默认情况下还具有以下接收选项(可能需要也可能不需要):

[receive]
    denyNonFastforwards = true

注意:为了决定是否想要使用denyNonFastforwards选项:该选项意味着合并从不会在共享存储库中发生,这反过来又意味着共享存储库上永远不存在合并冲突。相反,推送将被拒绝,强制用户在其本地存储库中进行合并,这样更容易修复,并且不会干扰其他人使用共享存储库。


啊哈,好的!知道了,真希望我之前问过这个问题。谢谢! - bottleboot
1
好的,我明白了!我刚刚读了@jørgensen的答案,证实了这一点。 Stackoverflow应该有一个合并回答的按钮:D! 非常感谢大家,这很有启发性! - bottleboot
对我没用。它需要 chmod -R g+s ...。一个新的 git init --bare --shared 将具有组权限 "rws"。(Ubuntu 12.04) - Unapiedra
@Unapiedra - 你想在所有目录上添加组粘滞位,但常规文件只需是g+rw。粘滞位将确保任何新文件都具有相同的组设置。 - Tim Tisdall
FYI:在许多参考资料中,也建议使用 sharedrepository = group,根据 man 页面,这与 sharedrepository = 1 相同! - lanoxx

5
除了使用chmod -R g+w命令外,您还需要编辑(.git/)config文件并设置core.sharedRepository = ...。对于...,有一些值,在git-init(1)中有描述。

好的!这似乎证实了我的怀疑,我也需要更改配置。谢谢! - bottleboot

5

如果你尝试分享一个现有的仓库,可能会出现许多不同用户的提交。

1.如果你拥有超级用户权限,你可以继续使用步骤二自己更改所有权限。否则,你需要向所有具有使用其用户创建对象的用户询问,使用以下命令了解他们是谁:

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

2.现在,您和所有文件所有者的用户都需要更改这些文件的权限,执行以下操作:

$ chmod -R 774 .

3. 接下来,您需要添加一个新的属性,相当于为新存储库完成的 --shared=group 属性。根据文档,这将使存储库具有组可写性。执行以下操作:

$ git config core.sharedRepository group

3

我不认为这是我们目前仓库正在做的事情。不过还是谢谢! - bottleboot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接