我们为不同的项目提供了多个git存储库。还有一个用于基础架构目的的git存储库。我们在此基础结构存储库中编写了自定义gradle插件,我们在其他存储库中使用
示例:
buildscript {
apply from: 'foo/bar/devinfra-buildscript.gradle', to: buildscript
}
apply plugin: 'devinfra'
这里我们在每个Git存储库中都有buildscript {}文件,foo / bar / buildscript.gradle。我想知道是否有一种方法可以直接从基础架构存储库中应用该文件。这样就可以直接在其他存储库中看到任何更改。
答案 0 :(得分:15)
在这种情况下,你可以在你的每个仓库中添加一个git subtree Merging(不同于git子树),参考infra repo。
git read-tree --prefix=<subdirectory_name>/ –u <shared_library_branch>
你可以在“Managing Nested Libraries Using the GIT Subtree Merge Workflow”中看到一项研究。
在你的情况下:
cd /path/to/project
git remote add infrarepo /url/to/infra/repo
git fetch infrarepo
git checkout -b infra infrarepo/master
git checkout master
git read-tree --prefix=infra/ –u infra
git commit -m "Add Infra subtree"
使用子树更改更新项目仓库:
git checkout infra
git pull
git checkout master
git merge --squash –s subtree –-no-commit infra
git commit -m "update infra"
要更改子项目录,并更改项目仓库的子树文件夹:
git checkout infra
git merge --squash –s subtree --no-commit master
git commit -m "(infra subtree) nature of changes"
git push infrarepo infra
答案 1 :(得分:5)
答案取决于你将要实现的目标。
git submodule update
和后续git commit
接收项目回购中的更新内容。此方法的变体是@VonC git subtree merge
答案 2 :(得分:2)
假设可以通过HTTP(S)访问Git存储库,一个选项是使用apply from: "http://..."
。请注意,通过HTTP访问的脚本插件当前未被缓存,因此如果无法获取脚本,则构建将失败。