This is an automated email from the ASF dual-hosted git repository.

fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 431dbd07909b camel-git - Add depth option to provide shallow clone
431dbd07909b is described below

commit 431dbd07909b1c2149f00febd85c3218cf38ea69
Author: Croway <[email protected]>
AuthorDate: Mon Feb 23 15:28:15 2026 +0100

    camel-git - Add depth option to provide shallow clone
---
 .../org/apache/camel/catalog/components/git.json   |  47 +++---
 .../camel/component/git/GitEndpointConfigurer.java |   3 +
 .../camel/component/git/GitEndpointUriFactory.java |   3 +-
 .../org/apache/camel/component/git/git.json        |  47 +++---
 .../camel-git/src/main/docs/git-component.adoc     |  12 ++
 .../apache/camel/component/git/GitEndpoint.java    |  30 ++--
 .../camel/component/git/RepositoryFactory.java     |  11 +-
 .../camel/component/git/producer/GitProducer.java  |  51 +++---
 .../git/consumer/GitConsumerCommitTest.java        |   2 +-
 .../component/git/consumer/GitConsumerTest.java    |  10 +-
 .../component/git/producer/GitProducerTest.java    | 177 +++++++++++----------
 .../endpoint/dsl/GitEndpointBuilderFactory.java    |  30 ++++
 12 files changed, 243 insertions(+), 180 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
index f648b7ca2ec4..fc475b1d1f74 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
@@ -55,28 +55,29 @@
     "exchangePattern": { "index": 6, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "pollStrategy": { "index": 7, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the pol 
[...]
     "allowEmpty": { "index": 8, "kind": "parameter", "displayName": "Allow 
Empty", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": true, "description": "The 
flag to manage empty git commits" },
-    "operation": { "index": 9, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick", 
"clean", "clone", "commit", "commitAll", "createBranch", "createTag", 
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd", 
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated": 
false, "autowired": false, "secret": false, " [...]
-    "remoteName": { "index": 10, "kind": "parameter", "displayName": "Remote 
Name", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository name to use in 
particular operation like pull" },
-    "remotePath": { "index": 11, "kind": "parameter", "displayName": "Remote 
Path", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository path" },
-    "tagName": { "index": 12, "kind": "parameter", "displayName": "Tag Name", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The tag name to work on" },
-    "targetBranchName": { "index": 13, "kind": "parameter", "displayName": 
"Target Branch Name", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "master", "description": 
"Name of target branch in merge operation. If not supplied will try to use 
init.defaultBranch git configs. If not configured will use default value" },
-    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "gitConfigFile": { "index": 15, "kind": "parameter", "displayName": "Git 
Config File", "group": "advanced", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "A String with path to a 
.gitconfig file" },
-    "backoffErrorThreshold": { "index": 16, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 17, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 18, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
-    "delay": { "index": 19, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
-    "greedy": { "index": 20, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
-    "initialDelay": { "index": 21, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 22, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
-    "runLoggingLevel": { "index": 23, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", 
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": "TRACE", 
"description": "The consumer logs a start\/complete log line when it polls. 
This option allows you to configure the log [...]
-    "scheduledExecutorService": { "index": 24, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
-    "scheduler": { "index": 25, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 26, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler. This i [...]
-    "startScheduler": { "index": 27, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 28, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
-    "useFixedDelay": { "index": 29, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
-    "password": { "index": 30, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository password" },
-    "username": { "index": 31, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository username" }
+    "depth": { "index": 9, "kind": "parameter", "displayName": "Depth", 
"group": "producer", "label": "producer", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"description": "Clone depth for shallow clones. A value of 1 fetches only the 
latest commit. When set to 0 or not specified, a full clone is performed." },
+    "operation": { "index": 10, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick", 
"clean", "clone", "commit", "commitAll", "createBranch", "createTag", 
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd", 
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated": 
false, "autowired": false, "secret": false,  [...]
+    "remoteName": { "index": 11, "kind": "parameter", "displayName": "Remote 
Name", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository name to use in 
particular operation like pull" },
+    "remotePath": { "index": 12, "kind": "parameter", "displayName": "Remote 
Path", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository path" },
+    "tagName": { "index": 13, "kind": "parameter", "displayName": "Tag Name", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The tag name to work on" },
+    "targetBranchName": { "index": 14, "kind": "parameter", "displayName": 
"Target Branch Name", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "master", "description": 
"Name of target branch in merge operation. If not supplied will try to use 
init.defaultBranch git configs. If not configured will use default value" },
+    "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "gitConfigFile": { "index": 16, "kind": "parameter", "displayName": "Git 
Config File", "group": "advanced", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "A String with path to a 
.gitconfig file" },
+    "backoffErrorThreshold": { "index": 17, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
+    "delay": { "index": 20, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "index": 22, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
+    "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", 
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": "TRACE", 
"description": "The consumer logs a start\/complete log line when it polls. 
This option allows you to configure the log [...]
+    "scheduledExecutorService": { "index": 25, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "index": 26, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 27, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler. This i [...]
+    "startScheduler": { "index": 28, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
+    "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
+    "password": { "index": 31, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository password" },
+    "username": { "index": 32, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository username" }
   }
 }
diff --git 
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
 
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
index 40684aba086c..d23a53d56d1d 100644
--- 
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
+++ 
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
@@ -36,6 +36,7 @@ public class GitEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "delay": target.setDelay(property(camelContext, long.class, 
value)); return true;
+        case "depth": target.setDepth(property(camelContext, int.class, 
value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": 
target.setExceptionHandler(property(camelContext, 
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
@@ -98,6 +99,7 @@ public class GitEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "delay": return long.class;
+        case "depth": return int.class;
         case "exceptionhandler":
         case "exceptionHandler": return 
org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
@@ -161,6 +163,7 @@ public class GitEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
         case "delay": return target.getDelay();
+        case "depth": return target.getDepth();
         case "exceptionhandler":
         case "exceptionHandler": return target.getExceptionHandler();
         case "exchangepattern":
diff --git 
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
 
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
index 699008cdee0b..845bf2d81f2d 100644
--- 
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
+++ 
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class GitEndpointUriFactory extends 
org.apache.camel.support.component.En
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Map<String, String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(32);
+        Set<String> props = new HashSet<>(33);
         props.add("allowEmpty");
         props.add("backoffErrorThreshold");
         props.add("backoffIdleThreshold");
@@ -31,6 +31,7 @@ public class GitEndpointUriFactory extends 
org.apache.camel.support.component.En
         props.add("branchName");
         props.add("bridgeErrorHandler");
         props.add("delay");
+        props.add("depth");
         props.add("exceptionHandler");
         props.add("exchangePattern");
         props.add("gitConfigFile");
diff --git 
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
 
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
index f648b7ca2ec4..fc475b1d1f74 100644
--- 
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
+++ 
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
@@ -55,28 +55,29 @@
     "exchangePattern": { "index": 6, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "enum", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "pollStrategy": { "index": 7, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the pol 
[...]
     "allowEmpty": { "index": 8, "kind": "parameter", "displayName": "Allow 
Empty", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": true, "description": "The 
flag to manage empty git commits" },
-    "operation": { "index": 9, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick", 
"clean", "clone", "commit", "commitAll", "createBranch", "createTag", 
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd", 
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated": 
false, "autowired": false, "secret": false, " [...]
-    "remoteName": { "index": 10, "kind": "parameter", "displayName": "Remote 
Name", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository name to use in 
particular operation like pull" },
-    "remotePath": { "index": 11, "kind": "parameter", "displayName": "Remote 
Path", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository path" },
-    "tagName": { "index": 12, "kind": "parameter", "displayName": "Tag Name", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The tag name to work on" },
-    "targetBranchName": { "index": 13, "kind": "parameter", "displayName": 
"Target Branch Name", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "master", "description": 
"Name of target branch in merge operation. If not supplied will try to use 
init.defaultBranch git configs. If not configured will use default value" },
-    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "gitConfigFile": { "index": 15, "kind": "parameter", "displayName": "Git 
Config File", "group": "advanced", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "A String with path to a 
.gitconfig file" },
-    "backoffErrorThreshold": { "index": 16, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 17, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 18, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
-    "delay": { "index": 19, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
-    "greedy": { "index": 20, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
-    "initialDelay": { "index": 21, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 22, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
-    "runLoggingLevel": { "index": 23, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", 
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": "TRACE", 
"description": "The consumer logs a start\/complete log line when it polls. 
This option allows you to configure the log [...]
-    "scheduledExecutorService": { "index": 24, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
-    "scheduler": { "index": 25, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 26, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler. This i [...]
-    "startScheduler": { "index": 27, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 28, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
-    "useFixedDelay": { "index": 29, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
-    "password": { "index": 30, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository password" },
-    "username": { "index": 31, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository username" }
+    "depth": { "index": 9, "kind": "parameter", "displayName": "Depth", 
"group": "producer", "label": "producer", "required": false, "type": "integer", 
"javaType": "int", "deprecated": false, "autowired": false, "secret": false, 
"description": "Clone depth for shallow clones. A value of 1 fetches only the 
latest commit. When set to 0 or not specified, a full clone is performed." },
+    "operation": { "index": 10, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick", 
"clean", "clone", "commit", "commitAll", "createBranch", "createTag", 
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd", 
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated": 
false, "autowired": false, "secret": false,  [...]
+    "remoteName": { "index": 11, "kind": "parameter", "displayName": "Remote 
Name", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository name to use in 
particular operation like pull" },
+    "remotePath": { "index": 12, "kind": "parameter", "displayName": "Remote 
Path", "group": "producer", "label": "producer", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The remote repository path" },
+    "tagName": { "index": 13, "kind": "parameter", "displayName": "Tag Name", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The tag name to work on" },
+    "targetBranchName": { "index": 14, "kind": "parameter", "displayName": 
"Target Branch Name", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "master", "description": 
"Name of target branch in merge operation. If not supplied will try to use 
init.defaultBranch git configs. If not configured will use default value" },
+    "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "gitConfigFile": { "index": 16, "kind": "parameter", "displayName": "Git 
Config File", "group": "advanced", "label": "advanced", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "A String with path to a 
.gitconfig file" },
+    "backoffErrorThreshold": { "index": 17, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
+    "delay": { "index": 20, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "index": 22, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
+    "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", 
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": "TRACE", 
"description": "The consumer logs a start\/complete log line when it polls. 
This option allows you to configure the log [...]
+    "scheduledExecutorService": { "index": 25, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "index": 26, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 27, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler. This i [...]
+    "startScheduler": { "index": 28, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
+    "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
+    "password": { "index": 31, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository password" },
+    "username": { "index": 32, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "producer,security", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": true, "description": "Remote repository username" }
   }
 }
diff --git a/components/camel-git/src/main/docs/git-component.adoc 
b/components/camel-git/src/main/docs/git-component.adoc
index 595279bdbb06..b5818d89d9c8 100644
--- a/components/camel-git/src/main/docs/git-component.adoc
+++ b/components/camel-git/src/main/docs/git-component.adoc
@@ -75,6 +75,18 @@ 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. 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.
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
index 59ccfcf4c879..2c8a4aa2b734 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
@@ -73,6 +73,11 @@ public class GitEndpoint extends ScheduledPollEndpoint {
     @Metadata(label = "producer")
     private boolean allowEmpty = true;
 
+    @UriParam(label = "producer",
+              description = "Clone depth for shallow clones. A value of 1 
fetches only the latest commit. "
+                            + "When set to 0 or not specified, a full clone is 
performed.")
+    private int depth;
+
     @UriParam(label = "producer",
               enums = 
"add,cherryPick,clean,clone,commit,commitAll,createBranch,createTag,deleteBranch,deleteTag,gc,init,log,pull,push,remoteAdd,remoteList,remove,showBranches,showTags,status")
     private String operation;
@@ -91,15 +96,11 @@ public class GitEndpoint extends ScheduledPollEndpoint {
 
     @Override
     public Consumer createConsumer(Processor processor) throws Exception {
-        if (type == GitType.COMMIT) {
-            return new GitCommitConsumer(this, processor);
-        } else if (type == GitType.TAG) {
-            return new GitTagConsumer(this, processor);
-        } else if (type == GitType.BRANCH) {
-            return new GitBranchConsumer(this, processor);
-        } else {
-            throw new IllegalArgumentException("Cannot create consumer with 
type " + type);
-        }
+        return switch (type) {
+            case COMMIT -> new GitCommitConsumer(this, processor);
+            case TAG -> new GitTagConsumer(this, processor);
+            case BRANCH -> new GitBranchConsumer(this, processor);
+        };
     }
 
     /**
@@ -212,6 +213,17 @@ public class GitEndpoint extends ScheduledPollEndpoint {
         this.allowEmpty = allowEmpty;
     }
 
+    /**
+     * Clone depth for shallow clones
+     */
+    public int getDepth() {
+        return depth;
+    }
+
+    public void setDepth(int depth) {
+        this.depth = depth;
+    }
+
     /**
      * The branch name to merge
      */
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
index 1bf2c8118b31..6fd1349f75ca 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
@@ -24,12 +24,10 @@ import java.nio.channels.Channels;
 import java.nio.channels.ReadableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
@@ -38,7 +36,7 @@ import org.eclipse.jgit.util.SystemReader;
 public abstract class RepositoryFactory {
 
     private static final SystemReader DEFAULT_INSTANCE;
-    private static final List<String> VALID_SCHEMES = 
Arrays.asList("classpath:", "file:", "http:", "https:");
+    private static final List<String> VALID_SCHEMES = List.of("classpath:", 
"file:", "http:", "https:");
 
     static {
         DEFAULT_INSTANCE = SystemReader.getInstance();
@@ -105,12 +103,9 @@ public abstract class RepositoryFactory {
 
     private static File getTempFileFromHttp(String url) throws IOException {
         Path tempFile = Files.createTempFile(null, null);
-        FileOutputStream outputStream = new 
FileOutputStream(tempFile.toString());
-        try {
-            ReadableByteChannel byteChannel = 
Channels.newChannel(URI.create(url).toURL().openStream());
+        try (ReadableByteChannel byteChannel = 
Channels.newChannel(URI.create(url).toURL().openStream());
+             FileOutputStream outputStream = new 
FileOutputStream(tempFile.toString())) {
             outputStream.getChannel().transferFrom(byteChannel, 0, 
Long.MAX_VALUE);
-        } finally {
-            IOHelper.close(outputStream);
         }
         return tempFile.toFile();
     }
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
index 5079684f8ae1..fc87b50f408d 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
@@ -204,30 +204,26 @@ public class GitProducer extends DefaultProducer {
             throw new IllegalArgumentException("Local path must specified to 
execute " + operation);
         }
         try {
-            File localRepo = new File(endpoint.getLocalPath(), "");
+            File localRepo = new File(endpoint.getLocalPath());
             if (!localRepo.exists()) {
-                if (ObjectHelper.isNotEmpty(endpoint.getUsername()) && 
ObjectHelper.isNotEmpty(endpoint.getPassword())) {
-                    UsernamePasswordCredentialsProvider credentials
-                            = new 
UsernamePasswordCredentialsProvider(endpoint.getUsername(), 
endpoint.getPassword());
-                    if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
-                        result = 
Git.cloneRepository().setCredentialsProvider(credentials).setURI(endpoint.getRemotePath())
-                                .setDirectory(new 
File(endpoint.getLocalPath(), ""))
-                                .call();
-                    } else {
-                        result = 
Git.cloneRepository().setCredentialsProvider(credentials).setURI(endpoint.getRemotePath())
-                                .setDirectory(new 
File(endpoint.getLocalPath(), ""))
-                                .setBranch(endpoint.getBranchName()).call();
-                    }
-                } else {
-                    if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
-                        result = 
Git.cloneRepository().setURI(endpoint.getRemotePath())
-                                .setDirectory(new 
File(endpoint.getLocalPath(), "")).call();
-                    } else {
-                        result = 
Git.cloneRepository().setURI(endpoint.getRemotePath())
-                                .setDirectory(new 
File(endpoint.getLocalPath(), "")).setBranch(endpoint.getBranchName())
-                                .call();
-                    }
+                var cloneCommand = Git.cloneRepository()
+                        .setURI(endpoint.getRemotePath())
+                        .setDirectory(localRepo);
+
+                if (ObjectHelper.isNotEmpty(endpoint.getBranchName())) {
+                    cloneCommand.setBranch(endpoint.getBranchName());
+                }
+                if (ObjectHelper.isNotEmpty(endpoint.getUsername())
+                        && ObjectHelper.isNotEmpty(endpoint.getPassword())) {
+                    cloneCommand.setCredentialsProvider(
+                            new UsernamePasswordCredentialsProvider(
+                                    endpoint.getUsername(), 
endpoint.getPassword()));
+                }
+                if (endpoint.getDepth() > 0) {
+                    cloneCommand.setDepth(endpoint.getDepth());
                 }
+
+                result = cloneCommand.call();
             } else {
                 throw new IllegalArgumentException("The local repository 
directory already exists");
             }
@@ -264,7 +260,7 @@ public class GitProducer extends DefaultProducer {
             throw new IllegalArgumentException("Local path must specified to 
execute " + operation);
         }
         try {
-            result = Git.init().setDirectory(new File(endpoint.getLocalPath(), 
"")).setBare(false).call();
+            result = Git.init().setDirectory(new 
File(endpoint.getLocalPath())).setBare(false).call();
         } catch (GitAPIException e) {
             LOG.error("There was an error in Git {} operation", operation);
             throw e;
@@ -585,10 +581,11 @@ public class GitProducer extends DefaultProducer {
             } else {
                 throw new IllegalArgumentException("Commit id must be 
specified to execute " + operation);
             }
-            RevWalk walk = new RevWalk(repo);
-            ObjectId id = repo.resolve(commitId);
-            RevCommit commit = walk.parseCommit(id);
-            walk.dispose();
+            RevCommit commit;
+            try (RevWalk walk = new RevWalk(repo)) {
+                ObjectId id = repo.resolve(commitId);
+                commit = walk.parseCommit(id);
+            }
             if (ObjectHelper.isNotEmpty(endpoint.getBranchName())) {
                 
git.checkout().setCreateBranch(false).setName(endpoint.getBranchName()).call();
             }
diff --git 
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
 
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
index c7996e9af109..ea1d54f72d57 100644
--- 
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
+++ 
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
@@ -39,7 +39,7 @@ public class GitConsumerCommitTest extends GitTestSupport {
 
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
diff --git 
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
 
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
index c722a8bfa17c..124a69a9ca96 100644
--- 
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
+++ 
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
@@ -41,7 +41,7 @@ public class GitConsumerTest extends GitTestSupport {
         mockResultCommit.expectedMessageCount(0);
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -70,7 +70,7 @@ public class GitConsumerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -82,7 +82,7 @@ public class GitConsumerTest extends GitTestSupport {
                 tagCreated = true;
             }
         }
-        assertEquals(true, tagCreated);
+        assertTrue(tagCreated);
 
         // Test
         mockResultTag.assertIsSatisfied();
@@ -104,7 +104,7 @@ public class GitConsumerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -116,7 +116,7 @@ public class GitConsumerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
 
         // Test
         mockResultBranch.assertIsSatisfied();
diff --git 
a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
 
b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
index 2cb1d2f7029b..6c4b5b01c26c 100644
--- 
a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
+++ 
b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
@@ -26,8 +26,6 @@ import java.util.Properties;
 import java.util.Set;
 
 import org.apache.camel.CamelExecutionException;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.git.GitConstants;
 import org.apache.camel.component.git.GitTestSupport;
@@ -56,14 +54,14 @@ public class GitProducerTest extends GitTestSupport {
     public void cloneTest() {
         template.sendBody("direct:clone", "");
         File gitDir = new File(getCloneDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
     }
 
     @Test
     public void initTest() {
         template.sendBody("direct:init", "");
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
     }
 
     @Test
@@ -71,7 +69,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -90,7 +88,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
         git.close();
     }
 
@@ -102,7 +100,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -118,7 +116,7 @@ public class GitProducerTest extends GitTestSupport {
                 tagCreated = true;
             }
         }
-        assertEquals(true, tagCreated);
+        assertTrue(tagCreated);
 
         // Test camel-git create-branch
         template.sendBody("direct:checkout-specific-tag", "");
@@ -131,7 +129,42 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
+        git.close();
+    }
+
+    @Test
+    public void shallowCloneTest() throws Exception {
+        // Init - create multiple commits in the source repo
+        Git git = getGitTestRepository();
+        File fileToAdd = new File(getGitDir(), filenameToAdd);
+        fileToAdd.createNewFile();
+        git.add().addFilepattern(filenameToAdd).call();
+        git.commit().setMessage("First commit").call();
+
+        File fileToAdd2 = new File(getGitDir(), filenameBranchToAdd);
+        fileToAdd2.createNewFile();
+        git.add().addFilepattern(filenameBranchToAdd).call();
+        git.commit().setMessage("Second commit").call();
+
+        // Verify source repo has 2 commits
+        validateGitLogs(git, "Second commit", "First commit");
+
+        // Test camel-git shallow clone with depth=1
+        template.sendBody("direct:clone-shallow", "");
+
+        // Check that clone dir exists
+        File gitDir = new File(getCloneDir(), ".git");
+        assertTrue(gitDir.exists());
+
+        // Verify only 1 commit in shallow clone
+        Git clonedGit = Git.open(getCloneDir());
+        int commitCount = 0;
+        for (RevCommit ignored : clonedGit.log().call()) {
+            commitCount++;
+        }
+        assertEquals(1, commitCount);
+        clonedGit.close();
         git.close();
     }
 
@@ -142,14 +175,14 @@ public class GitProducerTest extends GitTestSupport {
         assertThrows(CamelExecutionException.class, () -> 
template.sendBody("direct:clone", ""));
 
         File gitDir = new File(getCloneDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
     }
 
     @Test
     public void pullTest() {
         template.sendBody("direct:clone", "");
         File gitDir = new File(getCloneDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         PullResult pr = template.requestBody("direct:pull", "", 
PullResult.class);
         assertTrue(pr.isSuccessful());
     }
@@ -164,7 +197,7 @@ public class GitProducerTest extends GitTestSupport {
         template.sendBodyAndHeader("direct:add", "", 
GitConstants.GIT_FILE_NAME, filenameToAdd);
 
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.close();
@@ -175,7 +208,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -187,7 +220,7 @@ public class GitProducerTest extends GitTestSupport {
 
         // Check
         gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         git.commit().setMessage(commitMessage).call();
         validateGitLogs(git, commitMessage);
         status = git.status().call();
@@ -218,7 +251,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -239,7 +272,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -261,7 +294,7 @@ public class GitProducerTest extends GitTestSupport {
         // Initialize repository using JGit
         Repository repository = getTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Git git = new Git(repository);
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
@@ -279,7 +312,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -290,12 +323,8 @@ public class GitProducerTest extends GitTestSupport {
         
git.checkout().setCreateBranch(true).setName(branchTest).setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM).call();
 
         // Test camel-git commit (with branch)
-        template.send("direct:commit-branch", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageBranch);
-            }
-        });
+        template.send("direct:commit-branch",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageBranch));
         validateGitLogs(git, commitMessageBranch, commitMessage);
         git.close();
     }
@@ -307,12 +336,8 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
 
-        template.send("direct:commit-all", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageAll);
-            }
-        });
+        template.send("direct:commit-all",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, commitMessageAll));
         validateGitLogs(git, commitMessageAll);
         git.close();
     }
@@ -322,7 +347,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -335,19 +360,11 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd1.createNewFile();
 
         // Test camel-git add and commit (different branches)
-        template.send("direct:add-on-branch", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, 
filenameBranchToAdd);
-            }
-        });
+        template.send("direct:add-on-branch",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, filenameBranchToAdd));
 
-        template.send("direct:commit-all-branch", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageAll);
-            }
-        });
+        template.send("direct:commit-all-branch",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, commitMessageAll));
 
         // Check
         validateGitLogs(git, commitMessageAll, commitMessage);
@@ -359,7 +376,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -375,12 +392,8 @@ public class GitProducerTest extends GitTestSupport {
         validateGitLogs(git, commitMessageAll, commitMessage);
 
         // Test camel-git remove
-        template.send("direct:remove-on-branch", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, 
filenameToAdd);
-            }
-        });
+        template.send("direct:remove-on-branch",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, filenameToAdd));
 
         // Check
         git.checkout().setCreateBranch(false).setName(branchTest).call();
@@ -394,7 +407,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -413,7 +426,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
         git.close();
     }
 
@@ -425,7 +438,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -437,7 +450,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
 
         // Test camel-git delete-branch
         template.sendBody("direct:delete-branch", "");
@@ -449,7 +462,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(false, branchCreated);
+        assertFalse(branchCreated);
         git.close();
     }
 
@@ -461,7 +474,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
 
         // Test camel-git status
         Status status = template.requestBody("direct:status", "", 
Status.class);
@@ -481,7 +494,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -493,7 +506,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
         File fileToAddDifferent = new File(getGitDir(), filenameBranchToAdd);
         fileToAddDifferent.createNewFile();
         git.add().addFilepattern(filenameBranchToAdd).call();
@@ -517,7 +530,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -543,7 +556,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -555,7 +568,7 @@ public class GitProducerTest extends GitTestSupport {
                 branchCreated = true;
             }
         }
-        assertEquals(true, branchCreated);
+        assertTrue(branchCreated);
         File fileToAddDifferent = new File(getGitDir(), filenameBranchToAdd);
         fileToAddDifferent.createNewFile();
         git.add().addFilepattern(filenameBranchToAdd).call();
@@ -582,7 +595,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -598,7 +611,7 @@ public class GitProducerTest extends GitTestSupport {
                 tagCreated = true;
             }
         }
-        assertEquals(true, tagCreated);
+        assertTrue(tagCreated);
         git.close();
     }
 
@@ -610,7 +623,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -622,7 +635,7 @@ public class GitProducerTest extends GitTestSupport {
                 tagCreated = true;
             }
         }
-        assertEquals(true, tagCreated);
+        assertTrue(tagCreated);
 
         // Test camel-git delete-tag
         template.sendBody("direct:delete-tag", "");
@@ -635,7 +648,7 @@ public class GitProducerTest extends GitTestSupport {
                 tagExists = true;
             }
         }
-        assertEquals(false, tagExists);
+        assertFalse(tagExists);
         git.close();
     }
 
@@ -647,7 +660,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -675,7 +688,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -715,7 +728,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -752,7 +765,7 @@ public class GitProducerTest extends GitTestSupport {
     public void remoteAddTest() throws Exception {
         Repository repository = getTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Git git = new Git(repository);
         List<RemoteConfig> remoteConfigList = git.remoteList().call();
         assertEquals(0, remoteConfigList.size());
@@ -770,7 +783,7 @@ public class GitProducerTest extends GitTestSupport {
     public void remoteListTest() throws Exception {
         Repository repository = getTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Git git = new Git(repository);
         RemoteAddCommand remoteAddCommand = git.remoteAdd();
         remoteAddCommand.setName("origin");
@@ -797,7 +810,7 @@ public class GitProducerTest extends GitTestSupport {
                 = template.requestBodyAndHeader("direct:clean", "", 
GitConstants.GIT_FILE_NAME, filenameToAdd, Set.class);
 
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         assertTrue(cleaned.contains(filenameToAdd));
         git.close();
     }
@@ -806,7 +819,7 @@ public class GitProducerTest extends GitTestSupport {
     public void gcTest() throws Exception {
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -833,7 +846,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -844,12 +857,8 @@ public class GitProducerTest extends GitTestSupport {
         
git.checkout().setCreateBranch(true).setName(branchTest).setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM).call();
 
         // Test camel-git commit (with branch)
-        template.send("direct:commit-branch", new Processor() {
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageBranch);
-            }
-        });
+        template.send("direct:commit-branch",
+                exchange -> 
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, 
commitMessageBranch));
         validateGitLogs(git, commitMessageBranch, commitMessage);
 
         // Test camel-git commit (with branch)
@@ -866,7 +875,7 @@ public class GitProducerTest extends GitTestSupport {
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         Status status = git.status().call();
         assertTrue(status.getAdded().contains(filenameToAdd));
         git.commit().setMessage(commitMessage).call();
@@ -882,7 +891,7 @@ public class GitProducerTest extends GitTestSupport {
                 tagCreated = true;
             }
         }
-        assertEquals(true, tagCreated);
+        assertTrue(tagCreated);
         git.close();
     }
 
@@ -891,7 +900,7 @@ public class GitProducerTest extends GitTestSupport {
         // Init
         Git git = getGitTestRepository();
         File gitDir = new File(getGitDir(), ".git");
-        assertEquals(true, gitDir.exists());
+        assertTrue(gitDir.exists());
         File fileToAdd = new File(getGitDir(), filenameToAdd);
         fileToAdd.createNewFile();
         git.add().addFilepattern(filenameToAdd).call();
@@ -928,6 +937,8 @@ public class GitProducerTest extends GitTestSupport {
             public void configure() {
                 from("direct:clone").to("git://" + cloneDir
                                         + 
"?remotePath=https://github.com/oscerd/json-webserver-example.git&operation=clone";);
+                from("direct:clone-shallow").to("git://" + cloneDir
+                                                + "?remotePath=" + 
getGitDir().toURI() + "&operation=clone&depth=1");
                 from("direct:init").to("git://" + dir + "?operation=init");
                 from("direct:add").to("git://" + dir + "?operation=add");
                 from("direct:checkout").to("git://" + dir + 
"?operation=checkout&branchName=" + branchTest);
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
index 05f9da4595b7..02f2ce2c8306 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
@@ -810,6 +810,36 @@ public interface GitEndpointBuilderFactory {
             doSetProperty("allowEmpty", allowEmpty);
             return this;
         }
+        /**
+         * Clone depth for shallow clones. A value of 1 fetches only the latest
+         * commit. When set to 0 or not specified, a full clone is performed.
+         * 
+         * The option is a: <code>int</code> type.
+         * 
+         * Group: producer
+         * 
+         * @param depth the value to set
+         * @return the dsl builder
+         */
+        default GitEndpointProducerBuilder depth(int depth) {
+            doSetProperty("depth", depth);
+            return this;
+        }
+        /**
+         * Clone depth for shallow clones. A value of 1 fetches only the latest
+         * commit. When set to 0 or not specified, a full clone is performed.
+         * 
+         * The option will be converted to a <code>int</code> type.
+         * 
+         * Group: producer
+         * 
+         * @param depth the value to set
+         * @return the dsl builder
+         */
+        default GitEndpointProducerBuilder depth(String depth) {
+            doSetProperty("depth", depth);
+            return this;
+        }
         /**
          * The operation to do on the repository.
          * 

Reply via email to