情况是这样的,我有一个名为 git 的文件夹,其中包含各种 --bare git 存储库。这是在我的服务器上,服务器是 CentOS 5。我家里的个人电脑是 Windows XP。
我想使用每个存储库基础上的帐户将本地存储库推送到我的服务器。我搜索了几个小时,但毫无收获。以下是我所做的最接近的方法。
我通过输入以下内容在我的服务器上运行了一个守护进程:
git daemon --verbose --base-path=/path/to/git/parent/folder --export-all
然后我使用 TortoiseGit 推送到地址:git://myserver.com/project,并从守护进程获得以下信息:
来自 XX.XX.XX.XX 的连接存在扩展
属性(22 个字节)
请求
“/project”的接收包
“receive-pack”:未
为“/path/to/git/parent/project”启用服务
[XXXX] 断开连接(出现错误)
我使用了 --enable=receive-pack 并成功将我的本地存储库推送到服务器,但结果却不是我想要的:即以用户身份登录。Receive-pack 允许所有人匿名推送到服务器。
我搜索了几个小时,但找不到如何为每个存储库独立配置帐户。我读过各种关于 SSH 的文章,但我不确定这是否是我想要的。据我所知,SSH 是通过登录服务器上的 Linux 帐户(即 root、userA 等)来安全地连接到我的服务器,而这不是我想要的。
以 SVN 为例,使用 subversion 可以创建一个 .htpasswd 文件,其中包含您想要的仅用于该特定存储库的帐户。Git 有类似的方法吗?
谢谢。
答案1
查看吉托西斯这是一个 git 存储库托管应用程序。引用 Debian gitosis 包中的描述:
This package aims to make hosting git repositories easier and safer.
It manages multiple repositories under one user account, using SSH
keys to identify users. End users do not need shell accounts on the
server; they will talk to one shared account that will not let them
run arbitrary commands.
你可以在以下位置找到 gitosis 源代码http://eagain.net/gitweb/?p=gitosis.git
有关如何设置的文档: http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
我对 gitosis 非常满意,我们在 grml 项目中使用它(http://grml.org/) 拥有超过 100 个存储库,并且它运行良好,没有任何问题。
答案2
您可以尝试使用'git+ssh//' uri 而不是 'git//'。这将允许您运行无服务器(git wise)并为每个存储库授予不同的用户权限。完成此操作后,您可以使用
git+ssh://user@remotehost/repos/path/project.git
作为 git 远程位置。
要初始化一个可以推送数据的空存储库,请使用'git --bare init'远程主机上的命令。
答案3
你可能还需要考虑的另一件事是,这取决于你正在做的事情Github。它运行良好,价格便宜,易于维护,并且具有一些优点,例如要点、内置问题跟踪等。我非常喜欢将它用于个人项目,并且添加单独的私人存储库的成本也不高。
有时不必亲自做这件事也是值得的。