= 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
//Manually maintained attributes
:camel-spring-boot-name: git

*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.

[source,java]
--------------------------------------------------------------------------------------------------------------------
from("direct:start")
    .setHeader(GitConstants.GIT_FILE_NAME, constant("test.java"))
    .to("git:///tmp/testRepo?operation=add")
    .setHeader(GitConstants.GIT_COMMIT_MESSAGE, 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:

[source,java]
---------------------------------------
from("git:///tmp/testRepo?type=commit")
    .to(....)
---------------------------------------

=== 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.

[source,java]
---------------------------------------
from("direct:clone")
    .to("git:///tmp/myRepo?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.

[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
---------------------------------------

include::spring-boot:partial$starter.adoc[]
