{"id":47636796,"url":"https://github.com/gitflow-incremental-builder/gitflow-incremental-builder","last_synced_at":"2026-04-02T00:19:34.026Z","repository":{"id":36954182,"uuid":"49982695","full_name":"gitflow-incremental-builder/gitflow-incremental-builder","owner":"gitflow-incremental-builder","description":"A Maven extension for incremental building of multi-module projects when using Git Flow (or Git in general).","archived":false,"fork":false,"pushed_at":"2026-03-23T15:04:09.000Z","size":30228,"stargazers_count":176,"open_issues_count":18,"forks_count":42,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-23T16:43:15.650Z","etag":null,"topics":["git","git-flow","incremental-builds","maven-extension"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gitflow-incremental-builder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-01-19T20:58:50.000Z","updated_at":"2026-03-23T15:04:13.000Z","dependencies_parsed_at":"2023-01-17T08:01:42.857Z","dependency_job_id":"e0801f5d-3969-4716-b75c-4efcfb616c0b","html_url":"https://github.com/gitflow-incremental-builder/gitflow-incremental-builder","commit_stats":null,"previous_names":["vackosar/gitflow-incremental-builder"],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/gitflow-incremental-builder/gitflow-incremental-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitflow-incremental-builder%2Fgitflow-incremental-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitflow-incremental-builder%2Fgitflow-incremental-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitflow-incremental-builder%2Fgitflow-incremental-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitflow-incremental-builder%2Fgitflow-incremental-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitflow-incremental-builder","download_url":"https://codeload.github.com/gitflow-incremental-builder/gitflow-incremental-builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitflow-incremental-builder%2Fgitflow-incremental-builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","git-flow","incremental-builds","maven-extension"],"created_at":"2026-04-02T00:19:33.409Z","updated_at":"2026-04-02T00:19:34.003Z","avatar_url":"https://github.com/gitflow-incremental-builder.png","language":"Java","readme":"# gitflow-incremental-builder (GIB)\n[![GitHub license](https://img.shields.io/github/license/gitflow-incremental-builder/gitflow-incremental-builder.svg)](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/blob/main/LICENSE)\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.gitflow-incremental-builder/gitflow-incremental-builder)](https://central.sonatype.com/artifact/io.github.gitflow-incremental-builder/gitflow-incremental-builder/overview)\n[![CI](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/workflows/CI/badge.svg)](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/actions?query=workflow%3A%22CI%22+branch%3Amain)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/2a74eedd5e0c4694ac8cf44b315cfb5a)](https://app.codacy.com/gh/gitflow-incremental-builder/gitflow-incremental-builder/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=gitflow-incremental-builder/gitflow-incremental-builder\u0026amp;utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/2a74eedd5e0c4694ac8cf44b315cfb5a)](https://app.codacy.com/gh/gitflow-incremental-builder/gitflow-incremental-builder/dashboard?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=gitflow-incremental-builder/gitflow-incremental-builder\u0026utm_campaign=Badge_Coverage)\n[![Supported JVM Versions](https://img.shields.io/badge/JVM-11_17_21_25-brightgreen.svg?logo=Java)](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/actions?query=workflow%3A%22CI%22+branch%3Amain)\n[![GitHub Discussions](https://img.shields.io/github/discussions/gitflow-incremental-builder/gitflow-incremental-builder)](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/discussions)\n\nA maven extension for incremental building of multi-module projects when using [feature branches (Git Flow)](http://nvie.com/posts/a-successful-git-branching-model/).\nBuilds or tests only changed maven modules compared to reference branch in Git (e.g. origin/develop) and all their dependents.\u003cbr/\u003e\nPowered by [JGit](https://www.eclipse.org/jgit/).\n\nThis extension is **not limited to Git Flow setups!** The [extensive configuration options](#configuration) provide support for many other branch setups and/or use cases. \n\n## Table of Contents\n\n- [Requirements](#requirements)\n\n- [Usage](#usage)\n  - [Usage as a Maven plugin](#usage-as-a-maven-plugin)\n  - [Usage as a Maven extension](#usage-as-a-maven-extension)\n  - [Disable in IDE](#disable-in-ide)\n\n- [Example](#example)\n\n- [Configuration](#configuration)\n  - [gib.help](#gibhelp)\n  - [gib.disable](#gibdisable)\n  - [gib.disableIfBranchMatches](#gibdisableifbranchmatches)\n  - [gib.disableIfReferenceBranchMatches](#gibdisableifreferencebranchmatches)\n  - [gib.disableBranchComparison](#gibdisablebranchcomparison)\n  - [gib.referenceBranch](#gibreferencebranch)\n  - [gib.fetchReferenceBranch](#gibfetchreferencebranch)\n  - [gib.baseBranch](#gibbasebranch)\n  - [gib.fetchBaseBranch](#gibfetchbasebranch)\n  - [gib.compareToMergeBase](#gibcomparetomergebase)\n  - [gib.uncommitted](#gibuncommitted)\n  - [gib.untracked](#gibuntracked)\n  - [gib.skipIfPathMatches](#gibskipifpathmatches)\n  - [gib.excludePathsMatching](#gibexcludepathsmatching)\n  - [gib.includePathsMatching](#gibincludepathsmatching)\n  - [gib.buildAll](#gibbuildall)\n  - [gib.buildAllIfNoChanges](#gibbuildallifnochanges)\n  - [gib.buildDownstream](#gibbuilddownstream)\n  - [gib.buildUpstream](#gibbuildupstream)\n  - [gib.buildUpstreamMode](#gibbuildupstreammode)\n  - [gib.skipTestsForUpstreamModules](#gibskiptestsforupstreammodules)\n  - [gib.argsForUpstreamModules](#gibargsforupstreammodules)\n  - [gib.argsForDownstreamModules](#gibargsfordownstreammodules)\n  - [gib.forceBuildModules](#gibforcebuildmodules)\n  - [gib.excludeDownstreamModulesPackagedAs](#gibexcludedownstreammodulespackagedas)\n  - [gib.disableSelectedProjectsHandling](#gibdisableselectedprojectshandling)\n  - [gib.failOnMissingGitDir](#failonmissinggitdir)\n  - [gib.failOnError](#gibfailonerror)\n  - [gib.logImpactedTo](#giblogimpactedto)\n  - [gib.logImpactedFormat](#giblogimpactedformat)\n  - [gib.loadImpactedDependenciesFrom](#gibloadimpacteddependenciesfrom)\n  - [gib.logProjectsMode](#giblogprojectsmode)\n\n- [Explicitly selected projects](#explicitly-selected-projects)\n  - [mvn -pl](#mvn--pl)\n  - [mvn -f and others](#mvn--f-and-others)\n  - [mvn -N](#mvn--N)\n\n- [BOM support](#bom-support)\n\n- [Test only changes](#test-only-changes)\n\n- [Authentication](#authentication)\n  - [HTTP](#http)\n  - [SSH](#ssh)\n\n## Requirements\n\nTo be able to use GIB, your project must use:\n\n- **Apache Maven** build tool, version 3.9.14 is recommended\n  - The minimum Maven version is 3.6.3 due to [MNG-6580](https://issues.apache.org/jira/browse/MNG-6580)\n\n- **Git** version control\n\n- **Java 11** (or higher)\n\nℹ️ If you need support for Maven \u003c= 3.6.2 and/or Java \u003c 11, you might want to consider using [version 3 of GIB](https://github.com/gitflow-incremental-builder/gitflow-incremental-builder/tree/3.x).\n\n## Usage\n\nThere are two usage scenarios of GIB:\n\n### Usage as a Maven plugin\n\nℹ️ This is the recommended way to configure GIB!\n\nAdd to (root) `pom.xml`:\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eio.github.gitflow-incremental-builder\u003c/groupId\u003e\n            \u003cartifactId\u003egitflow-incremental-builder\u003c/artifactId\u003e\n            \u003cversion\u003e4.6.0\u003c/version\u003e\n            \u003cextensions\u003etrue\u003c/extensions\u003e\n            \u003cconfiguration\u003e\n                \u003c!-- ... --\u003e\n            \u003c/configuration\u003e\n        \u003c/plugin\u003e\n        \u003c!-- ... --\u003e\n    \u003c/plugins\u003e\n    \u003c!-- ... --\u003e\n\u003c/build\u003e\n```\n\nThe [Configuration](#configuration) can then be added to the `configuration` block of the plugin (and/or via project or system properties).\n\nWhen defined as a plugin, GIB will still do its work as an extension (see `\u003cextensions\u003etrue\u003c/extensions\u003e`).\u003cbr/\u003e\nThe plugin definition is merely a \"shell\" to provide `\u003cprofile\u003e`-support, better visibility of parameters and works around 3rd-party issues like\n[`versions-maven-plugin`: Support for reporting new extenions versions](https://github.com/mojohaus/versions-maven-plugin/issues/74).\n\n:warning: GIB comes with a \"fake\" mojo (or goal). **Do _not_ try to execute this fake mojo!**\u003cbr/\u003e\nIt only exists to generate a plugin descriptor so that you can see the parameters nicely in your IDE or via `maven-help-plugin`.\u003cbr/\u003e\nBecause of this limitation, you have to use the general `\u003cconfiguration\u003e` section of the plugin instead of any `\u003cexecution\u003e` block.\n\n### Usage as a Maven extension\n\nAdd to (root) `pom.xml`:\n```xml\n\u003cbuild\u003e\n    \u003cextensions\u003e\n        \u003cextension\u003e\n            \u003cgroupId\u003eio.github.gitflow-incremental-builder\u003c/groupId\u003e\n            \u003cartifactId\u003egitflow-incremental-builder\u003c/artifactId\u003e\n            \u003cversion\u003e4.6.0\u003c/version\u003e\n        \u003c/extension\u003e\n    \u003c/extensions\u003e\n    \u003c!-- ... --\u003e\n\u003c/build\u003e\n```\nOr use [`.mvn/extensions.xml`](https://maven.apache.org/ref/3.8.8/maven-embedder/core-extensions.html).\nIf using `.mvn/extensions.xml` and Maven 3.8.8 or higher, it's strongly recommended to add `\u003cclassLoadingStrategy\u003eplugin\u003c/classLoadingStrategy\u003e` to the `extension` element. See [MNG-7160](https://issues.apache.org/jira/browse/MNG-7160) for more details.\n\nIn both cases the [Configuration](#configuration) can then be added via project or system properties.\n\n### Disable in IDE\n\nAs IDEs like IntelliJ IDEA or Eclipse usually apply their own custom strategy to building changed modules,\nthis extension should be disabled in such environments to avoid inconsistencies or errors (e.g. see [issue 49](../../issues/49)).\n\nSee [gib.disable](#gibdisable) in the configuration section.\n\n:information_source: If using IntelliJ IDEA, version **2019.3.1** or higher is required for GIB 3.8+ (even if disabled).\nSee [IDEA-200272](https://youtrack.jetbrains.com/issue/IDEA-200272) and [issue 91](../../issues/91) for more details.\n\n## Example\n\nMaven project `parent` has two submodules `child1` and `child2`:\n```\n$ ls *\npom.xml\n\nchild1:\npom.xml  src\n\nchild2:\npom.xml  src\n```\n`parent` has gitflow-incremental-builder configured:\n```\n$ cat pom.xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n    \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n\n    \u003cgroupId\u003eparent\u003c/groupId\u003e\n    \u003cartifactId\u003eparent\u003c/artifactId\u003e\n    \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n    \u003cpackaging\u003epom\u003c/packaging\u003e\n\n    \u003cproperties\u003e\n        \u003cgib.referenceBranch\u003erefs/heads/develop\u003c/gib.referenceBranch\u003e\n    \u003c/properties\u003e\n\n    \u003cmodules\u003e\n        \u003cmodule\u003echild1\u003c/module\u003e\n        \u003cmodule\u003echild2\u003c/module\u003e\n    \u003c/modules\u003e\n\n    \u003cbuild\u003e\n        \u003cextensions\u003e\n            \u003cextension\u003e\n                \u003cgroupId\u003eio.github.gitflow-incremental-builder\u003c/groupId\u003e\n                \u003cartifactId\u003egitflow-incremental-builder\u003c/artifactId\u003e\n                \u003cversion\u003e4.6.0\u003c/version\u003e\n            \u003c/extension\u003e\n        \u003c/extensions\u003e\n    \u003c/build\u003e\n\n\u003c/project\u003e\n```\nCurrently checked out branch is `feature`. There is also a branch `develop`:\n```\n$ git branch\n  develop\n* feature\n```\nBranches are the same now:\n```\n$ git diff develop\n```\nThus incremental does not build and test anything (see [gib.buildAllIfNoChanges](#gibbuildallifnochanges) for an alternate mode):\n```\n$ mvn test\n[INFO] Scanning for projects...\n[INFO] gitflow-incremental-builder starting...\n[INFO] Git dir is: C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\.git\n[INFO] Head of branch HEAD is commit of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -----p\n[INFO] Head of branch refs/heads/develop is commit of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -----p\n[INFO] Using merge base of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -tr-sp\n[INFO] ------------------------------------------------------------------------\n[INFO] Changed Artifacts:\n[INFO]\n[INFO]\n[INFO] No changed artifacts to build. Executing validate goal only.\n[INFO] gitflow-incremental-builder exiting...\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO]\n[INFO] child1\n[INFO] child2\n[INFO] parent\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building child1 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building child2 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building parent 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO]\n[INFO] child1 ............................................. SUCCESS [  0.002 s]\n[INFO] child2 ............................................. SUCCESS [  0.001 s]\n[INFO] parent ............................................. SUCCESS [  0.000 s]\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 0.953 s\n[INFO] Finished at: 2016-12-30T16:56:35+01:00\n[INFO] Final Memory: 9M/162M\n[INFO] ------------------------------------------------------------------------\n```\nNow a file is written and added to git control making branches different:\n```\n$ echo \"text\" \u003e child1/src/main/java/file1.txt\n$ git add child1/src/main/java/file1.txt\n$ git diff develop\ndiff --git a/child1/src/main/java/file1.txt b/child1/src/main/java/file1.txt\nnew file mode 100644\nindex 0000000..8e27be7\n--- /dev/null\n+++ b/child1/src/main/java/file1.txt\n@@ -0,0 +1 @@\n+text\nwarning: LF will be replaced by CRLF in child1/src/main/java/file1.txt.\nThe file will have its original line endings in your working directory.\n```\n\nThus incremental build builds and tests only child1:\n```\n$ mvn test\n[INFO] Scanning for projects...\n[INFO] gitflow-incremental-builder starting...\n[INFO] Git dir is: C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\.git\n[INFO] Head of branch HEAD is commit of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -----p\n[INFO] Head of branch refs/heads/develop is commit of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -----p\n[INFO] Using merge base of id: commit 17b09f1f9ee9d2a56b7d7bf43d319db529cade9e 1483112738 -tr-sp\n[INFO] ------------------------------------------------------------------------\n[INFO] Changed Artifacts:\n[INFO]\n[INFO] child1\n[INFO]\n[INFO] gitflow-incremental-builder exiting...\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building child1 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ child1 ---\n[WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent!\n[INFO] skip non existing resourceDirectory C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\child1\\src\\main\\resources\n[INFO]\n[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ child1 ---\n[INFO] Changes detected - recompiling the module!\n[WARNING] File encoding has not been set, using platform encoding Cp1250, i.e. build is platform dependent!\n[INFO] Compiling 1 source file to C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\child1\\target\\classes\n[INFO]\n[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ child1 ---\n[WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent!\n[INFO] skip non existing resourceDirectory C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\child1\\src\\test\\resources\n[INFO]\n[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ child1 ---\n[INFO] Changes detected - recompiling the module!\n[WARNING] File encoding has not been set, using platform encoding Cp1250, i.e. build is platform dependent!\n[INFO] Compiling 1 source file to C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\child1\\target\\test-classes\n[INFO]\n[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ child1 ---\n[INFO] Surefire report directory: C:\\Users\\Vaclav\\IdeaProjects\\gitflow-incremental-builder\\tmp\\example\\child1\\target\\surefire-reports\n\n-------------------------------------------------------\n T E S T S\n-------------------------------------------------------\nRunning ATest\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.041 sec\n\nResults :\n\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2.043 s\n[INFO] Finished at: 2016-12-30T17:01:56+01:00\n[INFO] Final Memory: 18M/167M\n[INFO] ------------------------------------------------------------------------\n```\n\n## Configuration\n\nMaven pom properties configuration with default values is below:\n```xml\n\u003cproperties\u003e\n    \u003cgib.help\u003efalse\u003c/gib.help\u003e                                                         \u003c!-- or -Dgib.h=...     --\u003e\n    \u003cgib.disable\u003efalse\u003c/gib.disable\u003e                                                   \u003c!-- or -Dgib.d=...     --\u003e\n    \u003cgib.disableIfBranchMatches\u003e\u003c/gib.disableIfBranchMatches\u003e                          \u003c!-- or -Dgib.dibm=...  --\u003e\n    \u003cgib.disableIfReferenceBranchMatches\u003e\u003c/gib.disableIfReferenceBranchMatches\u003e        \u003c!-- or -Dgib.dirbm=... --\u003e\n    \u003cgib.disableBranchComparison\u003efalse\u003c/gib.disableBranchComparison\u003e                   \u003c!-- or -Dgib.dbc=...   --\u003e\n    \u003cgib.referenceBranch\u003erefs/remotes/origin/develop\u003c/gib.referenceBranch\u003e             \u003c!-- or -Dgib.rb=...    --\u003e\n    \u003cgib.fetchReferenceBranch\u003efalse\u003c/gib.fetchReferenceBranch\u003e                         \u003c!-- or -Dgib.frb=...   --\u003e\n    \u003cgib.baseBranch\u003eHEAD\u003c/gib.baseBranch\u003e                                              \u003c!-- or -Dgib.bb=...    --\u003e\n    \u003cgib.fetchBaseBranch\u003efalse\u003c/gib.fetchBaseBranch\u003e                                   \u003c!-- or -Dgib.fbb=...   --\u003e\n    \u003cgib.compareToMergeBase\u003etrue\u003c/gib.compareToMergeBase\u003e                              \u003c!-- or -Dgib.ctmb=...  --\u003e\n    \u003cgib.uncommitted\u003etrue\u003c/gib.uncommitted\u003e                                            \u003c!-- or -Dgib.uc=...    --\u003e\n    \u003cgib.untracked\u003etrue\u003c/gib.untracked\u003e                                                \u003c!-- or -Dgib.ut=...    --\u003e\n    \u003cgib.skipIfPathMatches\u003e\u003c/gib.skipIfPathMatches\u003e                                    \u003c!-- or -Dgib.sipm=...  --\u003e\n    \u003cgib.excludePathsMatching\u003e\u003c/gib.excludePathsMatching\u003e                              \u003c!-- or -Dgib.epm=...   --\u003e\n    \u003cgib.includePathsMatching\u003e\u003c/gib.includePathsMatching\u003e                              \u003c!-- or -Dgib.ipm=...   --\u003e\n    \u003cgib.buildAll\u003efalse\u003c/gib.buildAll\u003e                                                 \u003c!-- or -Dgib.ba=...    --\u003e\n    \u003cgib.buildAllIfNoChanges\u003efalse\u003c/gib.buildAllIfNoChanges\u003e                           \u003c!-- or -Dgib.bainc=... --\u003e\n    \u003cgib.buildDownstream\u003ealways\u003c/gib.buildDownstream\u003e                                  \u003c!-- or -Dgib.bd=...    --\u003e\n    \u003cgib.buildUpstream\u003ederived\u003c/gib.buildUpstream\u003e                                     \u003c!-- or -Dgib.bu=...    --\u003e\n    \u003cgib.buildUpstreamMode\u003echanged\u003c/gib.buildUpstreamMode\u003e                             \u003c!-- or -Dgib.bum=...   --\u003e\n    \u003cgib.skipTestsForUpstreamModules\u003efalse\u003c/gib.skipTestsForUpstreamModules\u003e           \u003c!-- or -Dgib.stfum=... --\u003e\n    \u003cgib.argsForUpstreamModules\u003e\u003c/gib.argsForUpstreamModules\u003e                          \u003c!-- or -Dgib.afum=...  --\u003e\n    \u003cgib.argsForDownstreamModules\u003e\u003c/gib.argsForDownstreamModules\u003e                      \u003c!-- or -Dgib.afdm=...  --\u003e\n    \u003cgib.forceBuildModules\u003e\u003c/gib.forceBuildModules\u003e                                    \u003c!-- or -Dgib.fbm=...   --\u003e\n    \u003cgib.excludeDownstreamModulesPackagedAs\u003e\u003c/gib.excludeDownstreamModulesPackagedAs\u003e  \u003c!-- or -Dgib.edmpa=... --\u003e\n    \u003cgib.disableSelectedProjectsHandling\u003efalse\u003c/gib.disableSelectedProjectsHandling\u003e   \u003c!-- or -Dgib.dsph=...  --\u003e\n    \u003cgib.failOnMissingGitDir\u003etrue\u003c/gib.failOnMissingGitDir\u003e                            \u003c!-- or -Dgib.fomgd=... --\u003e\n    \u003cgib.failOnError\u003etrue\u003c/gib.failOnError\u003e                                            \u003c!-- or -Dgib.foe=...   --\u003e\n    \u003cgib.logImpactedTo\u003e\u003c/gib.logImpactedTo\u003e                                            \u003c!-- or -Dgib.lit=...   --\u003e\n    \u003cgib.logImpactedFormat\u003epath\u003c/gib.logImpactedFormat\u003e                                \u003c!-- or -Dgib.lif=...   --\u003e\n    \u003cgib.loadImpactedDependenciesFrom\u003e\u003c/gib.loadImpactedDependenciesFrom\u003e              \u003c!-- or -Dgib.lidf=...  --\u003e\n    \u003cgib.logProjectsMode\u003echanged\u003c/gib.logProjectsMode\u003e                                 \u003c!-- or -Dgib.lpm=...   --\u003e\n\u003c/properties\u003e\n```\n\nEach property can also be set via `-D` on the command line and to reduce typing to a minimum, each property has a short name (see code block above).\n\nE.g. `-Dgib.d=true` yields the same result as `-Dgib.disable=true`.\n\nProperties that support the value `true` can be specified _without_ a value, e.g. `-Dgib.disable` is the same as `-Dgib.disable=true`.\n\nSystem properties (`-D`) take precedence over project properties from the POM and secondarily to that a full name takes precedence over the respective short name.\u003cbr/\u003e\nShort names can only be used as system properties.\n\nIf GIB is [used as a **plugin**](#usage-as-a-maven-plugin) (instead of an extension), the same properties _can_ still be used but it is recommended\nto put the properties into the plugin `\u003cconfiguration\u003e`-section, but _without_ the `gib.`-prefix.\u003cbr/\u003e\nE.g. instead of:\n```xml\n\u003cproperties\u003e\n    \u003cgib.uncommitted\u003etrue\u003c/gib.uncommitted\u003e\n\u003c/properties\u003e\n```\nuse:\n```xml\n\u003cconfiguration\u003e\n    \u003cuncommitted\u003etrue\u003c/uncommitted\u003e\n\u003c/configuration\u003e\n```\nJust like for regular plugins, a plugin config property that is set to a _fixed_ value **cannot be changed via the respective system property** (here: `-Dgib.uncommitted=false`).\n\n### gib.help\n\nLogs the available properties etc.\n\nNote: Independent of `gib.disable`.\n\nSince: 3.9.0\n\n### gib.disable\n\nCan be used to disable this extension temporarily or permanently (e.g. to avoid clashes with IDE building strategy).\n\nSince: 3.11.2 (replaces previously used `enabled` property)\n\n### gib.disableIfBranchMatches\n\nCan be used to disable this extension on certain branches (e.g. `main|develop`). By default, GIB runs on all branches.\n\nSince: 3.11.0\n\nWas renamed from `disableIfBranchRegex` in 3.13.0.\n\n### gib.disableIfReferenceBranchMatches\n\nCan be used to disable this extension on certain _reference_ branches (e.g. `origin/(main|develop)`). By default, GIB runs for all reference branches.\n\nSee also: [gib.referenceBranch](#gibreferencebranch)\n\nSince: 3.14.2\n\n### gib.disableBranchComparison\n\nDisables the comparison between `baseBranch` and `referenceBranch`. This property should be enabled if _only_ uncommitted and/or untracked files shall be detected to only build projects that have been changed since the last commit in the current branch (see `gib.uncommitted` and `gib.untracked`).\nThe following properties are _not_ evaluated when `gib.disableBranchComparison` is enabled:\n- `gib.referenceBranch`\n- `gib.compareToMergeBase`\n- `gib.fetchReferenceBranch`\n\n### gib.referenceBranch\n\nThe branch to compare `baseBranch` to. You can use the simple branch name to compare against a local branch, e.g. `develop`.\n\nIf you want to compare to a _remote_ branch you need to use the prefix `refs/remotes/\u003cremoteName\u003e/`, e.g. `refs/remotes/origin/develop`.\n\nYou can also use a tag name, e.g. `refs/tags/myTag` or simply `myTag`, or just reference the previous commit via `HEAD~1`.\n\n### gib.fetchReferenceBranch\n\nFetches the `referenceBranch` from the remote repository.\n\nYou _must_ use the prefix `refs/remotes/\u003cremoteName\u003e/`, e.g. `refs/remotes/origin/develop`, so that GIB can determine the remote repo name.\n\nAlternatively, since 3.15.0, you can also fetch tags via `refs/tags/\u003ctagName\u003e`.\n\nSee also: [Authentication](#authentication)\n\n### gib.baseBranch\n\nThe branch that is compared to `referenceBranch`. Usually just the current `HEAD`.\n\nSee also: [gib.referenceBranch](#gibreferencebranch)\n\n### gib.fetchBaseBranch\n\nFetches the `baseBranch` from the remote repository.\n\nSee also:\n\n- [Authentication](#authentication)\n- [gib.fetchReferenceBranch](#gibfetchreferencebranch)\n\n### gib.compareToMergeBase\n\nControls whether or not to the [merge-base](https://git-scm.com/docs/git-merge-base) mechanism to compare the branches.\n\n### gib.uncommitted\n\nDetects changed files that have not yet been committed. This does **not** include _untracked_ files (see `git status` manual).\n\n### gib.untracked\n\nDetects files that are not yet tracked by git (see `git status` manual). This does **not** include _uncommitted_ files. A new file is not _untracked_ anymore after it is added to the index.\n\n### gib.skipIfPathMatches\n\nCan be used to skip this extension on certain changes. By default, no changed file results in GIB being skipped.\n\nThis property is helpful for more complex project setups in which not all submodules depend on the root module (= are not direct or indirect children of the root module).\u003cbr/\u003e\nIn such a case, GIB will assign a change to e.g. `.github/workflows/ci.yml` to the root module, building all modules that depend on the root module.\u003cbr/\u003e\nConsequently, this will **not** include the other modules that are referenced top-down from root, but not bottom-up via `\u003cparent\u003e...\u003c/parent\u003e`.\u003cbr/\u003e\nOne example of such modules are [the independent-projects of Quarkus](https://github.com/quarkusio/quarkus/tree/1.11.3.Final/independent-projects).\n\nBy setting this property to e.g. `\\.github[/\\\\].*` you can tell GIB that this path has a _global_ effect and that it's pointless to attempt an incremental build.\n\n:information_source: Use `[/\\\\]` instead of just `/` to also cover Windows path separators.\n\nSince: 3.12.2\n\n### gib.excludePathsMatching\n\nCan be used to exclude certain changed files from being detected as changed, reducing the number of modules to build. By default, nothing is excluded.\n\nThe regular expression does _not_ need to describe the entire (absolute) path, but only the relevant part _inside_ the git repository context. Example:\n```\n/tmp/repo/excluded/some-file.txt\n```\nwill be excluded when using `-Dgib.excludePathsMatching=.*excluded.*` or `-Dgib.excludePathsMatching=.*some-file\\..*` etc., but is _not_ excluded when adding to the regular expression anything _outside_ of the git repository context like `/tmp/repo` or `repo`.\n\nThis the opposite of [gib.includePathsMatching](#gibincludepathsmatching) which can be combined with this property, but `gib.excludePathsMatching` will take precedence.\n\n:information_source: Use `[/\\\\]` instead of just `/` to also cover Windows path separators.\n\nWas renamed from `excludePathRegex` in 3.13.0.\n\n### gib.includePathsMatching\n\nCan be used to include only certain changed files from being detected as changed, reducing the number of modules to build. By default, everything is included.\n\nThis the opposite of [gib.excludePathsMatching](#gibexcludepathsmatching) which can be combined with this property, but `gib.excludePathsMatching` will take precedence.\n\nSee [gib.excludePathsMatching](#gibexcludepathsmatching) for general path matching rules.\n\n:information_source: Use `[/\\\\]` instead of just `/` to also cover Windows path separators.\n\nSince: 3.10.0\n\nWas renamed from `includePathRegex` in 3.13.0.\n\n### gib.buildAll\n\nBuilds all modules, including upstream modules (see also `gib.buildUpstream`). Can be used to (temporarily) override the reduction of modules to build.\n\nCan be combined/useful with `gib.skipTestsForUpstreamModules` and/or `gib.argsForUpstreamModules`.\n\n### gib.buildAllIfNoChanges\n\nIn case no changes are detected, GIB will (by default) just invoke goal `validate` in the \"current project\" (usually the root module), skipping any submodules.\n\nIf this property is enabled, GIB will instead auto-activate [gib.buildAll](#gibbuildall) for all modules and will leave the goals untouched.\n\nThis property is ignored when [explicitly selected projects](#explicitly-selected-projects) are involved.\n\nSince: 3.9.2\n\n### gib.buildDownstream\n\nControls whether or not to build downstream modules (= modules that depend on the modules GIB detected as changed):\n\n- `always` or `true` (default value): always build downstream modules (depends on `-amd` when `-pl` is used)\n- `derived`: only build downstream modules if `mvn -amd` is called\n- `never` or `false`: never build downstream modules\n\nSince: 3.8\n\n### gib.buildUpstream\n\nControls whether or not to build upstream modules (= dependencies and parents of the modules GIB has determined to build):\n\n- `always` or `true`: always build upstream modules (depends on `-am` when `-pl` is used)\n- `derived` (default value): only build upstream modules if `mvn -am` is called\n- `never` or `false`: never build upstream modules\n\nSee also `gib.buildUpstreamMode`.\n\nSince: 3.8\n\n### gib.buildUpstreamMode\n\nThis property controls which upstream modules to build (_if_ at all building upstream modules, see `gib.buildUpstream`):\n\n- `changed` (default value): selects only upstream modules of the _directly changed_ modules\n- `impacted`: like `changed` but also selects upstream modules of modules _that depend on_ the directly changed modules (in other words: upstream modules of the downstream modules of the changed modules)\n\n`changed` is a subset of `impacted`.\n\n`impacted` may seem odd at first, but it does come in handy in certain scenarios, e.g. a Jenkins PR job that locally merges target branch into the PR branch before building.\nHere it might be required to freshly compile upstream modules of not directly changed modules to avoid compile errors or test failures which originate from the target branch.\n\nBoth strategies can and usually should be combined with `gib.skipTestsForUpstreamModules` and/or `gib.argsForUpstreamModules`.\n\nThis property is ignored when [explicitly selected projects](#explicitly-selected-projects) are involved.\n\nNote: _Before_ 3.8, GIB did non have this property and was implicitly applying the `impacted` strategy, see also [issue 44](../../issues/44).\n\nSince: 3.8\n\n### gib.skipTestsForUpstreamModules\n\nThis property disables the compilation/execution of tests for upstream modules by adding `maven.test.skip=true`. In case an upstream module produces a test jar just the test _execution_ is disabled via `skipTests=true`.\n\nSee `gib.buildUpstream` or `gib.buildAll` to learn when upstream modules are built.\n\nCan be combined with `gib.argsForUpstreamModules`.\n\n### gib.argsForUpstreamModules\n\nThis property allows adding arbitrary arguments/properties for upstream modules to further reduce overhead, e.g. skip Checkstyle or Enforcer plugin.\nArguments have to be sparated with a single space character and values are optional. Example:\n\n```\nmvn clean install -am -Dgib.argsForUpstreamModules='enforcer.skip checkstyle.skip=true'\n```\n(notice the missing `-D`)\n\nSee `gib.buildUpstream` or `gib.buildAll` to learn when upstream modules are built.\n\nCan be combined with `gib.skipTestsForUpstreamModules`.\n\n### gib.argsForDownstreamModules\n\nThis property allows adding arbitrary arguments/properties for downstream modules to e.g. run them with a smaller testset than the directly changed modules. Only _unchanged_ downstream modules are affected by this setting.\nArguments have to be sparated with a single space character and values are optional. Example:\n\n```\nmvn clean install -am -Dgib.argsForDownstreamModules='testprofile=small'\n```\n(notice the missing `-D`)\n\nSee `gib.buildDownstream` or `gib.buildAll` to learn when upstream modules are built.\n\nSince: 4.2.0\n\n### gib.forceBuildModules\n\nDefines artifact ids of modules to build forcibly, even if these modules have not been changed and/or do not depend on changed modules. Example:\n\n```\nmvn clean install -Dgib.forceBuildModules=unchanged-module-1,unchanged-module-2\n```\n\nRegular expressions are also supported in each comma separated part, e.g.:\n\n```\nmvn clean install -Dgib.forceBuildModules=unchanged-module-.*,another-module\n```\n\nEach of these modules is subject to `argsForUpstreamModules` and `skipTestsForUpstreamModules`.\n\nThis property has no effect in case `buildAll` is enabled.\n\nAdditionally (since 3.14.4), forced modules can be defined _conditionally_, e.g.:\n\n```\nchanged-module=unchanged-module-1|unchanged-module-2\n```\n\nwill build `unchanged-module-1` _and_ `unchanged-module-2` only if `changed-module` was changed (or depends on changed modules).\n\nThere can be multiple such key=value pairs, fully supporting regular expressions and you can mix both flavors, e.g.:\n\n```\nanother-module, changed-module=unchanged-module-1|unchanged-module-2, .*-core-module=lib-.*-module, test-.*\n```\n\nNote: `,` and `=` are reserved delimiters and can therefore _not_ be used in artifact id strings/patterns.\n\n### gib.excludeDownstreamModulesPackagedAs\n\nDefines the packaging (e.g. `jar`) of modules that depend on changed modules but shall not be built.\n\nOne possible use case for this is mainly working in an IDE, fixing all compile errors etc. and then just quickly building the least possible amount of modules\nwhich are needed to (hot-)deploy the changes via `mvn` on the command line.\nIn this scenario, by defining `-Dgib.excludeDownstreamModulesPackagedAs=jar,pom`, only the directly changed `jar` modules and the dependent `war` and/or `ear`\ndeployment modules will be built.\n\nThis property has no effect in case `buildAll` is enabled and an exclusion might be overridden by `gib.forceBuildModules`.\n\n### gib.disableSelectedProjectsHandling\n\nDisables special handling of [explicitly selected projects](#explicitly-selected-projects) (-pl, -f etc.).\n\nThis can come in handy if you select just one module with `-pl` but you only want to have it built _fully_ (with tests etc.)\nif the selected module itself is changed or one of its (non-selected) upstream modules.\n\nSince: 3.12.0\n\n### gib.failOnMissingGitDir\n\nControls whether or not to fail on missing `.git` directory.\n\n### gib.failOnError\n\nControls whether or not to fail on any error.\n\n### gib.logImpactedTo\n\nDefines an optional logfile which GIB shall write all \"impacted\" modules to. Each line represents the base directory of a changed module\nor a downstream module of a changed module.\n\nGIB overwrites the file if it already exists and will create an empty file in case no changes are detected.\n\nStarting with 4.5.0, GIB does also write the actually built modules to this file:\n\n- if only [explicitly selected projects](#explicitly-selected-projects) are present\n- or if Maven is building non-recursively (`-N`)\n- or if Maven is building only a single leaf module\n\nBefore 4.5.0 GIB only created an empty file in those cases.\n\nStarting with 4.5.0, GIB will always remove the file first (unless disabled via any of the `disabled*` properties), so that cases like [skipIfPathMatches](#gibskipifpathmatches) don't leave behind an empty file which could be misinterpreted as \"no changes are detected\".\n\nSince: 3.10.1\n\n### gib.logImpactedFormat\n\nControls the output format of the logfile defined by [gib.logImpactedTo](#giblogimpactedto):\n\n- `path` (default): each line contains the relative base directory path of an impacted module\n- `gav`: each line contains the full Maven coordinates (`GroupId:ArtifactId:Version`) of an impacted module\n\nThis property has no effect if `gib.logImpactedTo` is not set.\n\nSince: 4.6.0\n\n### gib.loadImpactedDependenciesFrom\n\nDefines an optional file containing a list of GAVs (GroupId:ArtifactId:Version, one per line) of dependencies. When specified, GIB will read this file and determine which modules should be built based on whether they have transitive dependencies matching the listed GAVs. This overrides the normal git-based change detection.\n\nEach line in the file should contain a single GAV in the format `groupId:artifactId:version`. Lines starting with `#` are treated as comments and ignored, as are blank lines.\n\nThis is useful for scenarios where you want to rebuild modules that depend on specific updated dependencies, without relying on git change detection.\n\n**Example file contents:**\n```\n# Updated dependencies that trigger rebuilds\ncom.example:lib-a:1.0\ncom.example:lib-b:2.1\norg.apache:commons-lang:3.8\n```\n\nAny module in the reactor that has one of these dependencies (directly or transitively) will be included in the build, along with any downstream modules that depend on the impacted modules.\n\nSince: 4.6.0\n\n### gib.logProjectsMode\n\nControls which projects to log to the console. Default is `changed`, other options are `none`, `impacted` (changed + downstream) and `all` (including upstream).\n\nSince: 4.5.0\n\n## Explicitly selected projects\n\nBy default, GIB tries not to interfere with any projects/modules that have been selected explicitly by the user.\n\nThe details are described in the following subsections. This special handling can be disabled via [gib.disableSelectedProjectsHandling](#gibdisableselectedprojectshandling).\n\n### mvn -pl\n\nSince 3.10.0, special rules apply when `mvn -pl ...` (or `--projects ...`) is used:\n\n- _Every_ such \"preselected\" project is _always_ built, including tests etc., **regardless of being changed or not!**\n\n- Downstream projects of these selected projects are built if:\n  - `-amd` (`--also-make-dependents`) is used\n  - _and_:\n    - [`buildDownstream`](#gibbuilddownstream) is _not_ `never` or `false`\n    - _or_ [`buildAll`](#gibbuildall) is enabled\n\n- Upstream projects of these selected projects are built if:\n  - `-am` (`--also-make`) is used\n  - _and_:\n    - [`buildUpstream`](#gibbuildUpstream) is _not_ `never` or `false`\n    - _or_ [`buildAll`](#gibbuildall) is enabled\n\nOther properties/features are applied as usual to the resulting subset of modules/projects.\n\nSince 3.10.1, \"deselected\" projects (`mvn -pl !...`) that contain changes will _not_ be built, but their up- and downstream projects will be built\n(if not also deselected).\n\n### mvn -f and others\n\nSince 3.10.0, GIB will _always_ build a \"leaf module\" that is selected via `mvn -f ...` (or `--file ...`), **regardless of being changed or not!**\n\nA \"leaf module\" is a module without submodules.\n\nThe same applies if the current directory is changed from the root directory of the multi-module-project to the leaf module subdirectory via `cd`.\n\nIn contrast, a module _with_ submodules that is selected via `-f` or via `cd` is subject to the regular change detection rules (unless [`-pl`](#mvn--pl) or [`-N`](#mvn--N) is added).\n\n### mvn -N\n\nSince 3.10.2, GIB will _always_ build a \"node module\" when non-recursive build is activated via `mvn -N` (or `--non-recursive`), **regardless of being changed or not!**\n\nA \"node module\" is a module _with_ submodules.\n\n## BOM support\n\nMaven does not consider modules importing a BOM (bill of material) via `dependencyManagement` as downstream modules of that BOM module.\n\nThis effectively means that (without GIB) you **cannot** just change e.g. a dependency version in the BOM and run `mvn -pl bom -amd` as this will only build `bom`.\n\nTo close this \"gap\", GIB adds downstream detection for BOM modules so that your Dependabot PRs or similar can trigger a proper incremental builds.\n\n## Test only changes\n\nIf a module contains changes only within `src/test`, GIB will **not** build any of its downstream modules _unless_ that module defines a\n[test-jar goal and those downstream modules are depending on that jar](https://maven.apache.org/guides/mini/guide-attached-tests.html#guide-to-using-attached-tests).\n\n## Authentication\n\nWhen using `gib.fetchBaseBranch` or `gib.fetchReferenceBranch`, GIB provides basic support to authenticate against a possibly protected remote repository.\n\n### HTTP\n\nFor HTTP(S), GIB will query the credentials from the local native Git executable via [`git credential fill`](https://git-scm.com/docs/git-credential).\u003cbr/\u003e\nThese credentials are then forwarded to JGit and are not persisted in any way. GIB will only cache the credentials _transiently_ for a very short time and will actively remove them as soon as possible.\u003cbr/\u003e\nSee also [HttpDelegatingCredentialsProvider](../main/src/main/java/io/github/gitflowincrementalbuilder/jgit/HttpDelegatingCredentialsProvider.java).\n\nSince `git credential fill` will trigger all configured [credential helpers](https://git-scm.com/docs/gitcredentials) (if any), you _might_ see a popup dialog box asking for credentials.\u003cbr/\u003e\nThis only happens in case the respective helper was _not_ able to provide the credentials. Such a dialog box is _not_ created by GIB, instead it is spawned by a configured credential helper!\n\nAs GIB does _not_ (yet) provide a console input passthrough mechanism to native Git, console input queries by native Git are disabled. This means that if _no_ credential helper is configured, GIB will _not_ be able to fetch via HTTP(S) from a remote repo that requires authentication.\n\n### SSH\n\nFor SSH, GIB pretty much relies on [JGit SSH agent support via Apache MINA sshd](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/master/org.eclipse.jgit.ssh.apache/README.md#support-for-ssh-agents).\u003cbr/\u003e\nYour private key will be picked up automatically in case it is located in `~/.ssh/` (as `identity`, `id_rsa` or `id_dsa`).\n\nTo use a custom key, create a [SSH config](https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/) in `~/.ssh/config` like the following:\n\n```\nHost git.somedomain.org\n  IdentityFile ~/.ssh/my_key\n```\n\nIf your key is protected by a **passphrase**, you will have to use a SSH agent (`ssh-agent` on Linux or `pageant` from `PuTTY` on Windows) and add your key(s) to it.\n\nGIB relies on [SSH Agent Support as provided by JGit 6.0+](https://wiki.eclipse.org/JGit/New_and_Noteworthy/6.0#SSH_Agent_Support).\n\nHint: When using an agent, you don't need to put your key in a standard location, you don't need `~/.ssh/config` and your key is also _not required_ to be passphrase protected.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitflow-incremental-builder%2Fgitflow-incremental-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitflow-incremental-builder%2Fgitflow-incremental-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitflow-incremental-builder%2Fgitflow-incremental-builder/lists"}