4

首先请允许我说我是一个 Git n00b 并且完全对版本控制相对较新。到目前为止,我们在带有 Visual Studio 的 Windows 环境中使用 Git 做得很好,而且一切似乎进展顺利。然而,令人讨厌的是.gitmodules我们目前手头的“战斗”。

如果 UserA 创建了一个新的子模块,.gitmodules“origin”的路径将类似于:

ssh://usera@myserver/Repositories/NewModule

.gitmodules当我,用户 B,从我下载该条目的副本的服务器中提取更改时。当我尝试初始化新的子模块时,我不可避免地无法从 myserver 下载,因为我是 userb 并且只为 userb 持有我的 SSH 密钥。我最终不得不更改.gitmodules以反映我的用户名:

ssh://userb@myserver/Repositories/NewModule

我最终会推动这种改变。

因此,我们最终会遇到一个递归问题,即我们都将用户名从 UserA 更改为 UserB,反之亦然。当我们中的任何一个拉/推到服务器时。

有什么想法可以解决这个问题吗?也许我们俩的共享用户帐户只是用于子模块?可以这样做吗?如何?还有其他想法,或者以前解决过这个问题的任何人吗?

4

3 回答 3

1

一种选择是在 myserver上安装Gitosis 。每个人的克隆 URL 都将是相同的,格式为ssh://git@myserver:/path/to/repo.git. Gitosis 允许您注册开发人员的 SSH 密钥,并允许您指定身份验证和授权规则。

您还可以~git/.ssh/authorized_keys通过修改 myserver 并通过修改此示例更新钩子来进行授权来自行开发。

于 2010-07-13T23:50:12.833 回答
1

简短的回答是“检查是否可以使用子模块的相对路径”。

详细的答案是:我们有多个应用程序正在使用的子模块。我们将子模块保存在同一个仓库中。

结构是这样的,repo

|-app1
|-app2
|-子模块

当我们克隆应用程序时,app/.git/config会使用当前用户获取 URL,例如“ userA@repo.com”。在.gitmodules应用程序中,我们将 URL 指定为../submod. 这样,当我们这样做时git submodule init,git 会根据我们提供的相对 URL 为子模块生成一个绝对 URL .gitmodules

于 2011-05-19T07:00:51.163 回答
0

除了像 gbacon 所说的那样使用 gitosis 之外,你可以稍微改变你的工作流程。

在公共分支(与团队中的其他人共享的分支)上工作时,始终使用来自单个官方存储库的公共分支的子模块。而不是使用您的用户名从子模块的存储库中提取,而是使用团队共享的一个普通用户。此用户将对存储库具有只读访问权限。

缺点是,如果你想推送到公共子模块存储库,你需要使用你的用户名从另一个工作副本中进行。这有时是个问题,有时不是。取决于模块之间的关系和您的流程。

于 2010-07-14T07:11:10.067 回答