我从事一个开源项目。我们将生产配置文件保存在一个单独的 git 存储库中,仅供我们团队的少数成员使用。这个 repo 是我们更大项目的一个子模块,它允许人们在不看到我们的 prod creds 的情况下获取和编译该项目。
问题是 Hudson 试图 pull 下子模块,而 Hudson 用户没有对该 repo 的 pull 权限。
hudson.plugins.git.GitException: Error performing command: git submodule update
Command "git submodule update" returned status code 1: Initialized empty Git repository in <http://athenadev.fracturedatlas.org:5904/job/ATHENA/ws/assembly/.git/>
ERROR: Permission to fracturedatlas/assembly.git denied to fracturedatlas/artful.ly.
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:fracturedatlas/assembly.git' into submodule path 'assembly' failed
at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:691)
是否有一个很好的“git”方法来解决这个问题,或者我们是否需要重新考虑我们的策略,以使生产凭证远离作恶者?
最佳答案
如果那个 secret 仓库是一个更大的仓库的子模块,那么...... Hudson 应该不尝试从那个更大的仓库中提取 ;)
它应该从与第一个相同的“另一个更大的 repo”中提取,但是因为该子模块的存在。
在以下情况下很容易做到:
- 父仓库是空的,只声明子模块(一个用于“大项目”,一个用于“ secret 仓库”)
- “更大的项目”包含一个指向 secret 仓库的符号链接(symbolic link)(这样,您不必在更大的项目中直接声明 secret 仓库子模块,您可以在准空父仓库中声明它)<
当这样的父存储库存在时(内容仅限于两个子模块),很容易复制这样的父存储库以获得仅包含一个子模块的子模块(“更大的项目”),没有其他(“ secret 仓库”)。
这将是 Hudson 能够从中提取的第二个父 repo 协议(protocol)。
关于git - 有什么办法可以解决克隆 git 子模块的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770861/