Reputation: 1986
We have multiple git repositories for different projects. There is also a git repository for infrastructure purpose. We have custom gradle plugins written in this infrastructure repository which we use in other repositories
Example:
buildscript {
apply from: 'foo/bar/devinfra-buildscript.gradle', to: buildscript
}
apply plugin: 'devinfra'
Here we are having the buildscript{} file, foo/bar/buildscript.gradle in every Git repository. I want to know if there is a way where we can apply the file directly from a infrastructure repository. So that any change is visible across other repositories directly.
Upvotes: 14
Views: 31778
Reputation: 1328262
In that case, you could add a git subtree Merging (different to git subtree) to each of your repo, referring to the infra repo.
git read-tree --prefix=<subdirectory_name>/ –u <shared_library_branch>
You can see a study doing that in "Managing Nested Libraries Using the GIT Subtree Merge Workflow".
In your case:
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"
To update the project repo with subtree changes:
git checkout infra
git pull
git checkout master
git merge --squash –s subtree –-no-commit infra
git commit -m "update infra"
To update the subtree repo with change from the subtree folder of the project repo:
git checkout infra
git merge --squash –s subtree --no-commit master
git commit -m "(infra subtree) nature of changes"
git push infrarepo infra
Upvotes: 18
Reputation: 123960
Assuming the Git repository is accessible over HTTP(S), one option is to use apply from: "http://..."
. Note that script plugins accessed over HTTP aren't currently cached, so the build will fail if the script cannot be fetched.
Upvotes: 3
Reputation: 17455
The answer depends on what exactly you're going to achieve.
git submodule update
and subsequent git commit
to receive updated contents in your project repos. The variant of this method is git subtree merge
proposed by @VonCUpvotes: 6