= Git Component
:doctitle: Git
:shortname: git
:artifactid: camel-git
:description: Perform operations on git repositories.
:since: 2.16
:supportlevel: Stable
: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 to do operations on a specific repository. +
The consumer allows consuming commits, tags and branches on a specific
repository.


// component-configure options: START

// component-configure options: END

// component options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
// component options: END

// endpoint options: START

// endpoint options: END


== Message Headers

[width="100%",cols="10%,10%,10%,20%,50%",options="header",]
|=======================================================================
|Name |Default Value |Type |Context |Description

|CamelGitOperation |`null` |String |Producer |The operation to do on a repository, if not specified as endpoint option

|CamelGitFilename |`null` |String |Producer |The file name in an add operation

|CamelGitCommitMessage |`null` |String |Producer |The commit message related in a commit operation

|CamelGitCommitUsername |`null` |String |Producer |The commit username in a commit operation

|CamelGitCommitEmail |`null` |String |Producer |The commit email in a commit operation

|CamelGitCommitId |`null` |String |Producer |The commit id

|CamelGitAllowEmpty |`null` |Boolean |Producer |The flag to manage empty git commits

|=======================================================================

== Producer Example

Below is an example route of a producer that add a file test.java to a
local repository, commit it with a specific message on master branch and
then push 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(....)
---------------------------------------


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