相关疑难解决方法(0)

通过ssh或https自动访问git子模块

问题:
有没有办法通过与主存储库相同的方法(ssh或https)自动检出git子模块?

背景:

我们有一个非公开的gitlab存储库(main),它有一个子模块(utils),它也作为非公共gitlab存储库托管在同一台服务器上.可以通过ssh或https访问这些存储库:

  • user@gitlabserver.com:my/path/repo.git
  • https://gitlabserver.com/my/path/repo.git

两种变体显然都需要不同形式的认证,并且取决于客户端计算机和用户,优选一种或另一种.

对于main不是问题的顶级存储库(),任何人都可以选择他或她喜欢的方法,但对于子模块,这取决于.gitmodules文件,因此(最初)对所有人都是相同的.
现在,而不是每个人都必须将.gitmodules文件调整为他们喜欢的任何内容,并确保他们不会意外地提交这些更改,如果有一种方法只需指定服务器和repo路径并且git选择其中一个,那就太好了.用于主repo的方法,或者可以在gitconfig中设置的方法.

git git-submodules gitlab

40
推荐指数
2
解决办法
6863
查看次数

使用相对网址的Git子模块

我使用git(TortoiseGit 1.7.5.0)并拥有一个带子模块的repo,它们通过以下方式通过绝对路径引用:

[submodule "common/sub"]
path = common/sub
url = ssh://localhost/lib/common/sub
Run Code Online (Sandbox Code Playgroud)

虽然super-repo被克隆为ssh://user@localhost/super,但用户名不应该进入每个子模块url,因为不同的用户应该使用自己的凭据来处理代码.
当拉/推子模块时,我必须输入我的登录名(不需要密码,因为我正在运行Pageant):用户名不会通过命令行传递给TortoisePlink.

在网上冲浪,我发现有几个帖子提到子模块的相对网址,但显然这种方法与TortoiseGit不兼容:我尝试了几种格式 - 程序经常崩溃.无论如何,我成功的格式如下:

[submodule "common/sub"]
path = common/sub
url = ../common/sub
Run Code Online (Sandbox Code Playgroud)

该文件.git/config填充了正确的绝对URL,但在那之后TortoiseGit崩溃了......

我已经回顾了其他选项,包括:

  1. 使用gitolite(这里提出)或sdorra(这里提出),但这看起来像一个过于复杂的解决方案.

  2. 遵循子树合并策略(如建议在这里).这看起来很不错.

其中一个工作解决方法是使用"非标准"URL初始化子模块,git子模块解释结束时所述(此处链接已在此处找到).

我想一些更简单的解决方法可能对我的情况有帮助(比如在某些本地配置文件中或通过命令行提供默认登录),但我没有找到任何可行的提示.

这个问题:什么是使用子模块没有绝对URL硬编码的用户名的最简单的方法?

git tortoisegit git-submodules

8
推荐指数
1
解决办法
3103
查看次数

github 代码空间上的 git 子模块

我对 github 代码空间上的子模块有疑问。

当我使用命令时

git submodule update --init
Run Code Online (Sandbox Code Playgroud)

终端显示给我

Warning: Permanently added 'github.com,xxxxx' (ECDSA) to the list of known hosts.
    git@github.com: Permission denied (publickey).
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
Run Code Online (Sandbox Code Playgroud)

git github codespaces

7
推荐指数
1
解决办法
1190
查看次数

如何使用子模块和n层git存储库策略

我们正在迁移到git.我们有大量的模块构成我们的产品,其中一些模块在产品之间共享.该产品由"瘦"超级存储库(ssh://server/product.git)表示,该存储库仅包含子模块:

[submodule "module1"]
path=module1
url=ssh://server/product/module1.git
[submodule "module2"]
path=module2
url=ssh://server/product/module2.git
...
Run Code Online (Sandbox Code Playgroud)

我可以克隆超级存储库并使用子模块并提交它们,然后将子模块提交到超级存储库.

当我想引入另一层时,问题出现了.有两种基本方案(这可以组合起来制作更复杂的设置,但任何东西都应该是这些的组合):

  1. 作为开发人员,我克隆了一个中央存储库并开始工作.然后我想将我的代码提交到我们的持续集成服务器,然后再将我的更改合并到中央存储库.我让CI服务器克隆我的repo.这不起作用,CI服务器将克隆我的超级仓库,然后它将从中央存储库位置克隆子模块(因为它是在.gitmodules中所说的).

  2. 作为一个团队,我们希望在sprint结束之前将我们的代码合并到中央存储库之前,我们需要一个集成存储库.出于同样的原因,这失败了.

我尝试为子模块指定相对URL,但这也不起作用,因为当我们将第二层克隆到第三层时,相对URL相对于第二层存储库位置解析,但第二层子模块位置在第二层超级存储库.

我能同时拥有它吗?Git子模块和n层存储库结构?

git relative-url git-submodules

5
推荐指数
1
解决办法
490
查看次数

Jenkins,在多个用户的ssh上获取git子模块?

不知道标题是否描述了我想说的内容,但这里是:

我想知道使用git子模块设置Jenkins时的"最佳实践".main和submodule repo都可以通过ssh访问,因为我们有几个用户,所有这些用户都有自己的用户名.对于拥有自己用户的Jenkins也是如此.但是,我们(我)偶然发现了一个问题.如果我创建一个子模块: git submodule添加ssh:// my-user-name @ address-to-module-repo推送它,Jenkins会在尝试获取子模块时将我称为用户,这显然会失败.如果其他一些用户执行了拉取,我的用户名仍然在路径中(在.gitmodule,.git/config等等).

我在"普通"用户之间发现了另一个帖子Git子模块和ssh访问处理共享,但是当Jenkins尝试构建时,它并没有真正解决问题,因为我只允许在Jenkins取出所有我无法执行的操作后执行shell cmd如链接中提到的那样,还是可以(Jenkins新手)?

所以,总结一下.如何解决这个问题,以便在通过ssh获取子模块时Jenkins将使用自己的用户?

Br,Pistol先生

git ssh fetch git-submodules jenkins

4
推荐指数
1
解决办法
1947
查看次数