2010-09-07 122 views
5

我将一个盒子用作共享回购,并且我的团队通过ssh连接到它。通过ssh共享git repo的正确方法

我做的是:

  1. 中央机器git init

  2. 从每个工作站创建一个空的Git仓库然后做一些像git clone ssh://[email protected]/Users/user/Projects/my-project/.git/

这工作不错,但每次我推这样的东西时,git总是大吼大叫:

alt text

有超过SSH共享回购一种更好的方式。

重要提示:我很清楚gitosis和这样的工具的存在,我不想要任何幻想。只是通过ssh共享.git回购。

感谢

回答

8

在主机上,你应该做

git init --bare 

因为你并不需要实际的文件,只需回购。

如果警告信息是在第一推到回购,而没有人碰过它,做一个

git push -f 

否则,这个错误意味着你的分支计划是不正确的。你不应该编辑分支来源/分支名称。你想你自己的本地分支称为分支名称,那么当你准备在你的代码来检查你做

git commit 
git pull 
git push 

你会从你的本地分支名称原产/ BRANCHNAME推。

编辑

我想看到你的本地回购该命令的输出:

git branch 

你不应该看到这个词的起源或您的服务器名称在输出的任何地方

+0

不,我机器上的git分支(不是“裸”回购)产生*主 – 2010-09-07 15:11:45

+0

有没有一种方法来“修复”中央盒子,现在我已经创建回购没有通过 - 作为一个论点? :S – 2010-09-07 15:12:36

+0

您当地的回购应该包含远程回购所做的一切。把它拉下来确保,然后吹走回购,做一个裸机,并把所有东西都推回去。 – bwawok 2010-09-07 15:38:09

3

除了bwawok的解决方案之外,您还需要注意许可问题。默认情况下,当git代表用户创建文件时,他们的权限来源于用户的umask,并且他们的组被设置为用户的默认组。对于常见的umasks和默认组,这将打破共享repo,因为这些文件将不可由其他用户修改。

幸运的是,git可以配置为在这种情况下做正确的事情:看看--shared选项git init(或core.sharedRepository设置)。最简单的选项可能是--shared=group,它授予对“git”组中所有用户的写入权限。