blob: 578506e8aab0f0e5f5693b2c0809bf207f43e4c9 [file]
= 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&amp;remotePath=https://github.com/example/repo.git&amp;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
----