| = Git Component |
| :doctitle: Git |
| :shortname: git |
| :artifactid: camel-git |
| :description: Perform operations on git repositories. |
| :since: 2.16 |
| :supportlevel: Stable |
| :tabs-sync-option: |
| :component-header: Both producer and consumer are supported |
| |
| *Since Camel {since}* |
| |
| *{component-header}* |
| |
| The Git component allows you to work with a generic Git repository. |
| |
| [source,xml] |
| ---- |
| <dependency> |
| <groupId>org.apache.camel</groupId> |
| <artifactId>camel-git</artifactId> |
| <version>x.x.x</version> |
| <!-- use the same version as your Camel core version --> |
| </dependency> |
| ---- |
| |
| *URI Format* |
| |
| ---- |
| git://localRepositoryPath[?options] |
| ---- |
| |
| == URI Options |
| |
| The producer allows doing operations on a specific repository. |
| The consumer allows consuming commits, tags, and branches in a specific |
| repository. |
| |
| |
| // component options: START |
| include::partial$component-configure-options.adoc[] |
| include::partial$component-endpoint-options.adoc[] |
| include::partial$component-endpoint-headers.adoc[] |
| // component options: END |
| |
| == Examples |
| |
| === Producer Example |
| |
| Below is an example route of a producer that adds a file test.java to a |
| local repository, commits it with a specific message on the `main` branch and |
| then pushes it to remote repository. |
| |
| ._Java-only: setting headers with GitConstants and chaining multiple git operations_ |
| [source,java] |
| ---- |
| from("direct:start") |
| .setHeader("CamelGitFilename", constant("test.java")) |
| .to("git:///tmp/testRepo?operation=add") |
| .setHeader("CamelGitCommitMessage", constant("first commit")) |
| .to("git:///tmp/testRepo?operation=commit") |
| .to("git:///tmp/testRepo?operation=push&remotePath=https://foo.com/test/test.git&username=xxx&password=xxx") |
| .to("git:///tmp/testRepo?operation=createTag&tagName=myTag") |
| .to("git:///tmp/testRepo?operation=pushTag&tagName=myTag&remoteName=origin"); |
| ---- |
| |
| === Consumer Example |
| |
| Below is an example route of a consumer that consumes commit: |
| |
| [tabs] |
| ==== |
| Java:: |
| + |
| [source,java] |
| ---- |
| from("git:///tmp/testRepo?type=commit") |
| .to("mock:result"); |
| ---- |
| |
| XML:: |
| + |
| [source,xml] |
| ---- |
| <route> |
| <from uri="git:///tmp/testRepo?type=commit"/> |
| <to uri="mock:result"/> |
| </route> |
| ---- |
| |
| YAML:: |
| + |
| [source,yaml] |
| ---- |
| - route: |
| from: |
| uri: git:///tmp/testRepo |
| parameters: |
| type: commit |
| steps: |
| - to: |
| uri: mock:result |
| ---- |
| ==== |
| |
| === Shallow Clone |
| |
| Use the `depth` option to perform a shallow clone, fetching only a limited number of commits. This reduces clone time and disk usage for large repositories when full history is not needed. |
| |
| [tabs] |
| ==== |
| Java:: |
| + |
| [source,java] |
| ---- |
| from("direct:clone") |
| .to("git:///tmp/myRepo?operation=clone&remotePath=https://github.com/example/repo.git&depth=1"); |
| ---- |
| |
| XML:: |
| + |
| [source,xml] |
| ---- |
| <route> |
| <from uri="direct:clone"/> |
| <to uri="git:///tmp/myRepo?operation=clone&remotePath=https://github.com/example/repo.git&depth=1"/> |
| </route> |
| ---- |
| |
| YAML:: |
| + |
| [source,yaml] |
| ---- |
| - route: |
| from: |
| uri: direct:clone |
| steps: |
| - to: |
| uri: git:///tmp/myRepo |
| parameters: |
| operation: clone |
| remotePath: "https://github.com/example/repo.git" |
| depth: 1 |
| ---- |
| ==== |
| |
| A `depth` of 1 fetches only the latest commit. The value must be a positive integer. When set to 0 or omitted, a full clone is performed. |
| |
| === Custom config file |
| |
| By default, camel-git will load ``.gitconfig`` file from user home folder. |
| You can override this by providing your own ``.gitconfig`` file. |
| |
| ._Java-only: configuring custom gitConfigFile with different resource schemes_ |
| [source,java] |
| ---- |
| from("git:///tmp/testRepo?type=commit&gitConfigFile=file:/tmp/configfile") |
| .to(....); // will load from os dirs |
| |
| from("git:///tmp/testRepo?type=commit&gitConfigFile=classpath:configfile") |
| .to(....); // will load from resources dir |
| |
| from("git:///tmp/testRepo?type=commit&gitConfigFile=http://somedomain.xyz/gitconfigfile") |
| .to(....); // will load from http. You could also use https |
| ---- |