Merge branch 'stable-6.3' into stable-6.4

* stable-6.3:
  Checkout: better directory handling

Change-Id: Ie0fefa8afc07f638ee05a46d272db7b7b0f8d464
diff --git a/DEPENDENCIES b/DEPENDENCIES
deleted file mode 100644
index ffb3d90..0000000
--- a/DEPENDENCIES
+++ /dev/null
@@ -1,70 +0,0 @@
-maven/mavencentral/args4j/args4j/2.33, MIT, approved, CQ11068
-maven/mavencentral/com.google.code.gson/gson/2.8.9, Apache-2.0, approved, CQ23496
-maven/mavencentral/com.googlecode.javaewah/JavaEWAH/1.1.13, Apache-2.0, approved, CQ11658
-maven/mavencentral/com.jcraft/jsch/0.1.55, BSD-3-Clause, approved, CQ19435
-maven/mavencentral/com.jcraft/jzlib/1.1.3, BSD-2-Clause, approved, CQ6218
-maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0 AND BSD-3-Clause, approved, CQ15971
-maven/mavencentral/commons-logging/commons-logging/1.2, Apache-2.0, approved, CQ10162
-maven/mavencentral/javax.servlet/javax.servlet-api/4.0.0, (CDDL-1.1 OR GPL-2.0-only WITH Classpath-exception-2.0) AND Apache-2.0, approved, CQ16125
-maven/mavencentral/junit/junit/4.13.2, EPL-2.0, approved, CQ23636
-maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.9.0, Apache-2.0, approved, clearlydefined
-maven/mavencentral/net.bytebuddy/byte-buddy/1.9.0, Apache-2.0, approved, clearlydefined
-maven/mavencentral/net.i2p.crypto/eddsa/0.3.0, CC0-1.0, approved, CQ22537
-maven/mavencentral/net.java.dev.jna/jna-platform/5.8.0, Apache-2.0 OR LGPL-2.1-or-later, approved, CQ23218
-maven/mavencentral/net.java.dev.jna/jna/5.8.0, Apache-2.0 OR LGPL-2.1-or-later, approved, CQ23217
-maven/mavencentral/net.sf.jopt-simple/jopt-simple/4.6, MIT, approved, clearlydefined
-maven/mavencentral/org.apache.ant/ant-launcher/1.10.12, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
-maven/mavencentral/org.apache.ant/ant/1.10.12, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
-maven/mavencentral/org.apache.commons/commons-compress/1.21, Apache-2.0 AND BSD-3-Clause AND bzip2-1.0.6 AND LicenseRef-Public-Domain, approved, CQ23710
-maven/mavencentral/org.apache.commons/commons-math3/3.2, Apache-2.0, approved, clearlydefined
-maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0 AND LicenseRef-Public-Domain, approved, CQ23527
-maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.14, Apache-2.0, approved, CQ23528
-maven/mavencentral/org.apache.sshd/sshd-common/2.8.0, Apache-2.0 AND ISC, approved, #2349
-maven/mavencentral/org.apache.sshd/sshd-core/2.8.0, Apache-2.0, approved, #2331
-maven/mavencentral/org.apache.sshd/sshd-osgi/2.8.0, Apache-2.0, approved, CQ23892
-maven/mavencentral/org.apache.sshd/sshd-sftp/2.8.0, Apache-2.0, approved, CQ23893
-maven/mavencentral/org.assertj/assertj-core/3.20.2, Apache-2.0, approved, clearlydefined
-maven/mavencentral/org.bouncycastle/bcpg-jdk18on/1.71, Apache-2.0, approved, #2665
-maven/mavencentral/org.bouncycastle/bcpkix-jdk18on/1.71, MIT, approved, #2662
-maven/mavencentral/org.bouncycastle/bcprov-jdk18on/1.71, MIT AND LicenseRef-scancode-ocb-open-source-2013, approved, #2666
-maven/mavencentral/org.bouncycastle/bcutil-jdk18on/1.71, MIT, approved, #2663
-maven/mavencentral/org.eclipse.jetty.toolchain/jetty-servlet-api/4.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-http/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-io/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-security/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-server/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-servlet/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jetty/jetty-util/10.0.6, EPL-2.0 OR Apache-2.0, approved, rt.jetty
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.agent/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/6.3.0-SNAPSHOT, BSD-3-Clause, approved, technology.jgit
-maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ11429
-maven/mavencentral/org.mockito/mockito-core/2.23.0, Apache-2.0 AND MIT, approved, #958
-maven/mavencentral/org.objenesis/objenesis/2.6, Apache-2.0, approved, CQ15478
-maven/mavencentral/org.openjdk.jmh/jmh-core/1.32, GPL-2.0-only with Classpath-exception-2.0, approved, #959
-maven/mavencentral/org.openjdk.jmh/jmh-generator-annprocess/1.32, GPL-2.0-only with Classpath-exception-2.0, approved, #962
-maven/mavencentral/org.osgi/org.osgi.core/6.0.0, Apache-2.0, approved, #1794
-maven/mavencentral/org.slf4j/jcl-over-slf4j/1.7.32, Apache-2.0, approved, CQ12843
-maven/mavencentral/org.slf4j/slf4j-api/1.7.30, MIT, approved, CQ13368
-maven/mavencentral/org.slf4j/slf4j-simple/1.7.30, MIT, approved, CQ7952
-maven/mavencentral/org.tukaani/xz/1.9, LicenseRef-Public-Domain, approved, CQ23498
diff --git a/WORKSPACE b/WORKSPACE
index fc626ce..ceb0e48 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -12,11 +12,11 @@
 
 http_archive(
     name = "rbe_jdk11",
-    sha256 = "766796de71916118e528b9f4334c29c9c9b4e926227bf3264dee555e6a4306c8",
-    strip_prefix = "rbe_autoconfig-2.0.0",
+    sha256 = "dbcfd6f26589ef506b91fe03a12dc559ca9c84699e4cf6381150522287f0e6f6",
+    strip_prefix = "rbe_autoconfig-3.1.0",
     urls = [
-        "https://gerrit-bazel.storage.googleapis.com/rbe_autoconfig/v2.0.0.tar.gz",
-        "https://github.com/davido/rbe_autoconfig/archive/v2.0.0.tar.gz",
+        "https://gerrit-bazel.storage.googleapis.com/rbe_autoconfig/v3.1.0.tar.gz",
+        "https://github.com/davido/rbe_autoconfig/archive/v3.1.0.tar.gz",
     ],
 )
 
@@ -24,20 +24,20 @@
 
 register_toolchains("//tools:error_prone_warnings_toolchain_java17_definition")
 
-JMH_VERS = "1.32"
+JMH_VERS = "1.35"
 
 maven_jar(
     name = "jmh-core",
     artifact = "org.openjdk.jmh:jmh-core:" + JMH_VERS,
     attach_source = False,
-    sha1 = "9a8b69ea08118fd4e5d30a152d37b7087ee4a720",
+    sha1 = "c14d712be8e423969fcd344bc801cf5d3ea3b62a",
 )
 
 maven_jar(
     name = "jmh-annotations",
     artifact = "org.openjdk.jmh:jmh-generator-annprocess:" + JMH_VERS,
     attach_source = False,
-    sha1 = "0a28eccc75e0d65984ce25e1ec4dd021a0ca6c57",
+    sha1 = "50fba446d32d22f95f51a391f3450e03af006754",
 )
 
 maven_jar(
@@ -86,32 +86,34 @@
 
 maven_jar(
     name = "httpcore",
-    artifact = "org.apache.httpcomponents:httpcore:4.4.14",
-    sha1 = "9dd1a631c082d92ecd4bd8fd4cf55026c720a8c1",
+    artifact = "org.apache.httpcomponents:httpcore:4.4.15",
+    sha1 = "7f2e0c573eaa7a74bac2e89b359e1f73d92a0a1d",
 )
 
+SSHD_VERS = "2.9.2"
+
 maven_jar(
     name = "sshd-osgi",
-    artifact = "org.apache.sshd:sshd-osgi:2.8.0",
-    sha1 = "b2a59b73c045f40d5722b9160d4f909a646d86c9",
+    artifact = "org.apache.sshd:sshd-osgi:" + SSHD_VERS,
+    sha1 = "bac0415734519b2fe433fea196017acf7ed32660",
 )
 
 maven_jar(
     name = "sshd-sftp",
-    artifact = "org.apache.sshd:sshd-sftp:2.8.0",
-    sha1 = "d3cd9bc8d335b3ed1a86d2965deb4d202de27442",
+    artifact = "org.apache.sshd:sshd-sftp:" + SSHD_VERS,
+    sha1 = "7f9089c87b3b44f19998252fd3b68637e3322920",
 )
 
 maven_jar(
     name = "jna",
-    artifact = "net.java.dev.jna:jna:5.8.0",
-    sha1 = "3551d8d827e54858214107541d3aff9c615cb615",
+    artifact = "net.java.dev.jna:jna:5.12.1",
+    sha1 = "b1e93a735caea94f503e95e6fe79bf9cdc1e985d",
 )
 
 maven_jar(
     name = "jna-platform",
-    artifact = "net.java.dev.jna:jna-platform:5.8.0",
-    sha1 = "2f12f6d7f7652270d13624cef1b82d8cd9a5398e",
+    artifact = "net.java.dev.jna:jna-platform:5.12.1",
+    sha1 = "097406a297c852f4a41e688a176ec675f72e8329",
 )
 
 maven_jar(
@@ -176,8 +178,8 @@
 
 maven_jar(
     name = "mockito",
-    artifact = "org.mockito:mockito-core:2.23.0",
-    sha1 = "497ddb32fd5d01f9dbe99a2ec790aeb931dff1b1",
+    artifact = "org.mockito:mockito-core:4.8.1",
+    sha1 = "d8eb9dec8747d08645347bb8c69088ac83197975",
 )
 
 maven_jar(
@@ -186,30 +188,30 @@
     sha1 = "66f1f0ebd6db2b24e4a731979171da16ba919cd5",
 )
 
-BYTE_BUDDY_VERSION = "1.9.0"
+BYTE_BUDDY_VERSION = "1.12.18"
 
 maven_jar(
     name = "bytebuddy",
     artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
-    sha1 = "8cb0d5baae526c9df46ae17693bbba302640538b",
+    sha1 = "875a9c3f29d2f6f499dfd60d76e97a343f9b1233",
 )
 
 maven_jar(
     name = "bytebuddy-agent",
     artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
-    sha1 = "37b5703b4a6290be3fffc63ae9c6bcaaee0ff856",
+    sha1 = "417a7310a7bf1c1aae5ca502d26515f9c2f94396",
 )
 
 maven_jar(
     name = "objenesis",
-    artifact = "org.objenesis:objenesis:2.6",
-    sha1 = "639033469776fd37c08358c6b92a4761feb2af4b",
+    artifact = "org.objenesis:objenesis:3.3",
+    sha1 = "1049c09f1de4331e8193e579448d0916d75b7631",
 )
 
 maven_jar(
     name = "gson",
-    artifact = "com.google.code.gson:gson:2.8.9",
-    sha1 = "8a432c1d6825781e21a02db2e2c33c5fde2833b9",
+    artifact = "com.google.code.gson:gson:2.9.1",
+    sha1 = "02cc2131b98ebfb04e2b2c7dfb84431f4045096b",
 )
 
 JETTY_VER = "10.0.6"
@@ -263,32 +265,32 @@
     src_sha1 = "f35f5525a5d30dc1237b85457d758d578e3ce8d0",
 )
 
-BOUNCYCASTLE_VER = "1.71"
+BOUNCYCASTLE_VER = "1.72"
 
 maven_jar(
     name = "bcpg",
     artifact = "org.bouncycastle:bcpg-jdk18on:" + BOUNCYCASTLE_VER,
-    sha1 = "d42ad9fe1b89246bb4ca2a45c0646bf6f6066013",
-    src_sha1 = "75b8faa0a36bd27207489c06a21a1958e208034e",
+    sha1 = "1a36a1740d07869161f6f0d01fae8d72dd1d8320",
+    src_sha1 = "fe19ed35a28b345d00459de55cd20ad9e1385a4f",
 )
 
 maven_jar(
     name = "bcprov",
     artifact = "org.bouncycastle:bcprov-jdk18on:" + BOUNCYCASTLE_VER,
-    sha1 = "943e8d0c2bd592ad78759c39d6f749fafaf29cf4",
-    src_sha1 = "5d398e3d54c0b8d6e24b0d929f45a89939d78f02",
+    sha1 = "d8dc62c28a3497d29c93fee3e71c00b27dff41b4",
+    src_sha1 = "308b5a8a89c29169390210b7b8e2b2534b27ff19",
 )
 
 maven_jar(
     name = "bcutil",
     artifact = "org.bouncycastle:bcutil-jdk18on:" + BOUNCYCASTLE_VER,
-    sha1 = "57daa18bc93730eab46291d9b55a15480e013265",
-    src_sha1 = "2ece8feb18f69679f9b23d36007ac3b79eaf9e6d",
+    sha1 = "41f19a69ada3b06fa48781120d8bebe1ba955c77",
+    src_sha1 = "fc16dc9eb28a2ee6cbe35ecda6ec7e050ddf3cba",
 )
 
 maven_jar(
     name = "bcpkix",
     artifact = "org.bouncycastle:bcpkix-jdk18on:" + BOUNCYCASTLE_VER,
-    sha1 = "211bcae48a96c688ca215394d631eec2b874fff1",
-    src_sha1 = "c72fab9b147394495a0a2858730f62b262f8a844",
+    sha1 = "bb3fdb5162ccd5085e8d7e57fada4d8eaa571f5a",
+    src_sha1 = "6fa7015a0be76b270e911bf426abf8efd1c5e42d",
 )
diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
index 87a5f5a..75d80a2 100644
--- a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
@@ -5,13 +5,13 @@
 Automatic-Module-Name: org.eclipse.jgit.ant.test
 Bundle-SymbolicName: org.eclipse.jgit.ant.test
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.apache.tools.ant,
- org.eclipse.jgit.ant.tasks;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.ant.tasks;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest.core;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)"
diff --git a/org.eclipse.jgit.ant.test/pom.xml b/org.eclipse.jgit.ant.test/pom.xml
index bcd87a7..ac65936 100644
--- a/org.eclipse.jgit.ant.test/pom.xml
+++ b/org.eclipse.jgit.ant.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ant.test</artifactId>
diff --git a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
index 0d3e40f..0bebf8e 100644
--- a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
@@ -3,13 +3,13 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ant
 Bundle-SymbolicName: org.eclipse.jgit.ant
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.apache.tools.ant,
-  org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)"
+  org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)"
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.ant;version="6.3.1",
- org.eclipse.jgit.ant.tasks;version="6.3.1";
+Export-Package: org.eclipse.jgit.ant;version="6.4.1",
+ org.eclipse.jgit.ant.tasks;version="6.4.1";
   uses:="org.apache.tools.ant,
    org.apache.tools.ant.types"
diff --git a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
index af7a021..1d0b760 100644
--- a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ant - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ant.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml
index df207ca..8110b0f 100644
--- a/org.eclipse.jgit.ant/pom.xml
+++ b/org.eclipse.jgit.ant/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ant</artifactId>
diff --git a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
index 42e207d..d186e7b 100644
--- a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.archive
 Bundle-SymbolicName: org.eclipse.jgit.archive
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -13,17 +13,17 @@
  org.apache.commons.compress.compressors.bzip2;version="[1.4,2.0)",
  org.apache.commons.compress.compressors.gzip;version="[1.4,2.0)",
  org.apache.commons.compress.compressors.xz;version="[1.4,2.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.osgi.framework;version="[1.3.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.jgit.archive.FormatActivator
-Export-Package: org.eclipse.jgit.archive;version="6.3.1";
+Export-Package: org.eclipse.jgit.archive;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.api,
    org.apache.commons.compress.archivers,
    org.osgi.framework",
- org.eclipse.jgit.archive.internal;version="6.3.1";x-internal:=true
+ org.eclipse.jgit.archive.internal;version="6.4.1";x-internal:=true
diff --git a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
index 816fef3..590b30b 100644
--- a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.archive - Sources
 Bundle-SymbolicName: org.eclipse.jgit.archive.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml
index 3376350..4a7265d 100644
--- a/org.eclipse.jgit.archive/pom.xml
+++ b/org.eclipse.jgit.archive/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.archive</artifactId>
diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml
index dfab1d9..3998b65 100644
--- a/org.eclipse.jgit.benchmarks/pom.xml
+++ b/org.eclipse.jgit.benchmarks/pom.xml
@@ -14,7 +14,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.eclipse.jgit</groupId>
-  <version>6.3.1-SNAPSHOT</version>
+  <version>6.4.1-SNAPSHOT</version>
   <artifactId>org.eclipse.jgit.benchmarks</artifactId>
   <packaging>jar</packaging>
 
@@ -23,7 +23,7 @@
   <properties>
     <java.version>11</java.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <jmh.version>1.32</jmh.version>
+    <jmh.version>1.35</jmh.version>
     <uberjar.name>benchmarks</uberjar.name>
   </properties>
 
@@ -180,7 +180,7 @@
             <dependency><!-- add support for ssh/scp -->
               <groupId>org.apache.maven.wagon</groupId>
               <artifactId>wagon-ssh</artifactId>
-              <version>3.4.3</version>
+              <version>3.5.2</version>
             </dependency>
           </dependencies>
         </plugin>
diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml
index d148b72..7518dd9 100644
--- a/org.eclipse.jgit.coverage/pom.xml
+++ b/org.eclipse.jgit.coverage/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -27,88 +27,88 @@
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.archive</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.apache</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.server</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ui</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
index 0eec0f6..3fc9043 100644
--- a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.gpg.bc.test
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -12,9 +12,9 @@
  org.bouncycastle.openpgp.operator;version="[1.65.0,2.0.0)",
  org.bouncycastle.openpgp.operator.jcajce;version="[1.65.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.65.0,2.0.0)",
- org.eclipse.jgit.gpg.bc.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.gpg.bc.internal.keys;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.sha1;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.gpg.bc.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.sha1;version="[6.4.1,6.5.0)",
  org.hamcrest;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.gpg.bc.test/pom.xml b/org.eclipse.jgit.gpg.bc.test/pom.xml
index 5f16956..05a407b 100644
--- a/org.eclipse.jgit.gpg.bc.test/pom.xml
+++ b/org.eclipse.jgit.gpg.bc.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc.test</artifactId>
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
index 02d9cfe..dba21ee 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
@@ -3,10 +3,10 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.gpg.bc
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc;singleton:=true
-Fragment-Host: org.eclipse.jgit;bundle-version="[6.3.1,6.4.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[6.4.1,6.5.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.bouncycastle.asn1;version="[1.69.0,2.0.0)",
  org.bouncycastle.asn1.cryptlib;version="[1.69.0,2.0.0)",
@@ -29,9 +29,9 @@
  org.bouncycastle.util;version="[1.69.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.69.0,2.0.0)",
  org.bouncycastle.util.io;version="[1.69.0,2.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.gpg.bc;version="6.3.1",
- org.eclipse.jgit.gpg.bc.internal;version="6.3.1";x-friends:="org.eclipse.jgit.gpg.bc.test",
- org.eclipse.jgit.gpg.bc.internal.keys;version="6.3.1";x-friends:="org.eclipse.jgit.gpg.bc.test"
+Export-Package: org.eclipse.jgit.gpg.bc;version="6.4.1",
+ org.eclipse.jgit.gpg.bc.internal;version="6.4.1";x-friends:="org.eclipse.jgit.gpg.bc.test",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="6.4.1";x-friends:="org.eclipse.jgit.gpg.bc.test"
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
index 795cbce..040c4c9 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.gpg.bc - Sources
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.gpg.bc/pom.xml b/org.eclipse.jgit.gpg.bc/pom.xml
index 3110807..bf3b015 100644
--- a/org.eclipse.jgit.gpg.bc/pom.xml
+++ b/org.eclipse.jgit.gpg.bc/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc</artifactId>
diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
index 0587abf..b7fd8ec 100644
--- a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.apache
 Bundle-SymbolicName: org.eclipse.jgit.http.apache
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
@@ -25,11 +25,11 @@
  org.apache.http.impl.conn;version="[4.4.0,5.0.0)",
  org.apache.http.params;version="[4.3.0,5.0.0)",
  org.apache.http.ssl;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)"
-Export-Package: org.eclipse.jgit.transport.http.apache;version="6.3.1";
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)"
+Export-Package: org.eclipse.jgit.transport.http.apache;version="6.4.1";
   uses:="org.apache.http.client,
    org.eclipse.jgit.transport.http,
    org.apache.http.entity,
diff --git a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
index fcc2df7..16fdf72 100644
--- a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.http.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml
index a7e4f3b..454b01b 100644
--- a/org.eclipse.jgit.http.apache/pom.xml
+++ b/org.eclipse.jgit.http.apache/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.apache</artifactId>
diff --git a/org.eclipse.jgit.http.server/.settings/.api_filters b/org.eclipse.jgit.http.server/.settings/.api_filters
deleted file mode 100644
index 2c32c98..0000000
--- a/org.eclipse.jgit.http.server/.settings/.api_filters
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jgit.http.server" version="2">
-    <resource path="src/org/eclipse/jgit/http/server/UploadPackErrorHandler.java" type="org.eclipse.jgit.http.server.UploadPackErrorHandler">
-        <filter id="1210056707">
-            <message_arguments>
-                <message_argument value="6.1.1"/>
-                <message_argument value="statusCodeForThrowable(Throwable)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-</component>
diff --git a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
index 2eb2978..41a1fd7 100644
--- a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
@@ -3,13 +3,13 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.server
 Bundle-SymbolicName: org.eclipse.jgit.http.server
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.http.server;version="6.3.1",
- org.eclipse.jgit.http.server.glue;version="6.3.1";
+Export-Package: org.eclipse.jgit.http.server;version="6.4.1",
+ org.eclipse.jgit.http.server.glue;version="6.4.1";
   uses:="javax.servlet,javax.servlet.http",
- org.eclipse.jgit.http.server.resolver;version="6.3.1";
+ org.eclipse.jgit.http.server.resolver;version="6.4.1";
   uses:="org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.transport,
@@ -18,14 +18,14 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: javax.servlet;version="[2.5.0,5.0.0)",
  javax.servlet.http;version="[2.5.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.parser;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.resolver;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)"
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)"
diff --git a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
index b9aefb0..023b15c 100644
--- a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.http.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml
index 8364fc6..3c98883 100644
--- a/org.eclipse.jgit.http.server/pom.xml
+++ b/org.eclipse.jgit.http.server/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.server</artifactId>
diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java
index f1155dc..078b22a 100644
--- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java
+++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/GitSmartHttpTools.java
@@ -226,7 +226,8 @@
 			// So, cheat and read the first line.
 			String line = new PacketLineIn(req.getInputStream()).readString();
 			FirstCommand parsed = FirstCommand.fromLine(line);
-			return parsed.getCapabilities().contains(CAPABILITY_SIDE_BAND_64K);
+			return parsed.getCapabilities()
+					.containsKey(CAPABILITY_SIDE_BAND_64K);
 		} catch (IOException e) {
 			// Probably the connection is closed and a subsequent write will fail, but
 			// try it just in case.
diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
index b0a07f1..f16e56d 100644
--- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
+++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
@@ -168,42 +168,43 @@
 		}
 
 		UploadPackRunnable r = () -> {
-			UploadPack up = (UploadPack) req.getAttribute(ATTRIBUTE_HANDLER);
-			// to be explicitly closed by caller
-			@SuppressWarnings("resource")
-			SmartOutputStream out = new SmartOutputStream(req, rsp, false) {
-				@Override
-				public void flush() throws IOException {
-					doFlush();
-				}
-			};
-
-			up.setBiDirectionalPipe(false);
-			rsp.setContentType(UPLOAD_PACK_RESULT_TYPE);
-
-			try {
-				up.uploadWithExceptionPropagation(getInputStream(req), out,
-						null);
-				out.close();
-			} catch (ServiceMayNotContinueException e) {
-				if (e.isOutput()) {
-					consumeRequestBody(req);
-					out.close();
-				}
-				throw e;
-			} catch (UploadPackInternalServerErrorException e) {
-				// Special case exception, error message was sent to client.
-				log(up.getRepository(), e.getCause());
-				consumeRequestBody(req);
-				out.close();
-			} finally {
-				up.close();
-			}
+			upload(req, rsp);
 		};
 
 		handler.upload(req, rsp, r);
 	}
 
+	private void upload(HttpServletRequest req, HttpServletResponse rsp)
+			throws IOException, ServiceMayNotContinueException {
+		// to be explicitly closed by caller
+		@SuppressWarnings("resource")
+		SmartOutputStream out = new SmartOutputStream(req, rsp, false) {
+			@Override
+			public void flush() throws IOException {
+				doFlush();
+			}
+		};
+		Repository repo = null;
+		try (UploadPack up = (UploadPack) req.getAttribute(ATTRIBUTE_HANDLER)) {
+			up.setBiDirectionalPipe(false);
+			rsp.setContentType(UPLOAD_PACK_RESULT_TYPE);
+			repo = up.getRepository();
+			up.uploadWithExceptionPropagation(getInputStream(req), out, null);
+			out.close();
+		} catch (ServiceMayNotContinueException e) {
+			if (e.isOutput()) {
+				consumeRequestBody(req);
+				out.close();
+			}
+			throw e;
+		} catch (UploadPackInternalServerErrorException e) {
+			// Special case exception, error message was sent to client.
+			log(repo, e.getCause());
+			consumeRequestBody(req);
+			out.close();
+		}
+	}
+
 	private void defaultUploadPackHandler(HttpServletRequest req,
 			HttpServletResponse rsp, UploadPackRunnable r) throws IOException {
 		try {
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
index d585f28..8347693 100644
--- a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.test
 Bundle-SymbolicName: org.eclipse.jgit.http.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -26,26 +26,26 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.http.server;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.http.server.glue;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.http.server.resolver;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.resolver;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.http.server;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.http.server.glue;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.http.server.resolver;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest;version="[1.1.0,3.0.0)",
  org.hamcrest.core;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml
index f71782b..39a11fa 100644
--- a/org.eclipse.jgit.http.test/pom.xml
+++ b/org.eclipse.jgit.http.test/pom.xml
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.test</artifactId>
diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
index 30e3306..5b5534f 100644
--- a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit.http
 Bundle-SymbolicName: org.eclipse.jgit.junit.http
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
@@ -21,17 +21,17 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.ssl;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.http.server;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.resolver;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.http.server;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.4.1,6.5.0)",
  org.junit;version="[4.13,5.0.0)",
  org.slf4j.helpers;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.junit.http;version="6.3.1";
+Export-Package: org.eclipse.jgit.junit.http;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.junit,
    javax.servlet.http,
diff --git a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
index d50a9a4..416d9b7 100644
--- a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit.http - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.http.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml
index 7020d02..8ebd77d 100644
--- a/org.eclipse.jgit.junit.http/pom.xml
+++ b/org.eclipse.jgit.junit.http/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.http</artifactId>
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
index e878090..79684e5 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
@@ -3,46 +3,46 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit.ssh
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.apache.sshd.common;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.helpers;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.io;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.kex;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.keyprovider;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.session;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.signature;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.buffer;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.logging;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.security;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.threads;version="[2.8.0,2.9.0)",
- org.apache.sshd.core;version="[2.8.0,2.9.0)",
- org.apache.sshd.server;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.auth;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.auth.gss;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.auth.keyboard;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.auth.password;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.command;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.session;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.shell;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.subsystem;version="[2.8.0,2.9.0)",
- org.apache.sshd.sftp;version="[2.8.0,2.9.0)",
- org.apache.sshd.sftp.server;version="[2.8.0,2.9.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+Import-Package: org.apache.sshd.common;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.file.virtualfs;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.helpers;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.io;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.kex;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.keyprovider;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.session;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.signature;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.buffer;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.logging;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.security;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.threads;version="[2.9.2,2.10.0)",
+ org.apache.sshd.core;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.auth;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.auth.gss;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.auth.keyboard;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.auth.password;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.command;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.session;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.shell;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.subsystem;version="[2.9.2,2.10.0)",
+ org.apache.sshd.sftp;version="[2.9.2,2.10.0)",
+ org.apache.sshd.sftp.server;version="[2.9.2,2.10.0)",
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.junit.ssh;version="6.3.1"
+Export-Package: org.eclipse.jgit.junit.ssh;version="6.4.1"
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
index 8627975..a1f99de 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit.ssh - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml
index ba82ed4..9fb3d31 100644
--- a/org.eclipse.jgit.junit.ssh/pom.xml
+++ b/org.eclipse.jgit.junit.ssh/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.ssh</artifactId>
diff --git a/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java b/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java
index 4fe98f8..5d043ff 100644
--- a/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java
+++ b/org.eclipse.jgit.junit.ssh/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java
@@ -480,13 +480,13 @@
 
 		@Override
 		public void run() {
-			UploadPack uploadPack = new UploadPack(repository);
-			String gitProtocol = getEnvironment().getEnv().get("GIT_PROTOCOL");
-			if (gitProtocol != null) {
-				uploadPack
-						.setExtraParameters(Collections.singleton(gitProtocol));
-			}
-			try {
+			try (UploadPack uploadPack = new UploadPack(repository)) {
+				String gitProtocol = getEnvironment().getEnv()
+						.get("GIT_PROTOCOL");
+				if (gitProtocol != null) {
+					uploadPack.setExtraParameters(
+							Collections.singleton(gitProtocol));
+				}
 				uploadPack.upload(getInputStream(), getOutputStream(),
 						getErrorStream());
 				onExit(0);
diff --git a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
index b2cb44b..320f4a7 100644
--- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -3,35 +3,35 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit
 Bundle-SymbolicName: org.eclipse.jgit.junit
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.dircache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.merge;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="6.3.1",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.time;version="[6.3.1,6.4.0)",
+Import-Package: org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.dircache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.merge;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="6.4.1",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.time;version="[6.4.1,6.5.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)",
  org.junit.runners.model;version="[4.13,5.0.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.junit;version="6.3.1";
+Export-Package: org.eclipse.jgit.junit;version="6.4.1";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -44,4 +44,4 @@
    org.junit.runners.model,
    org.junit.runner,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.junit.time;version="6.3.1";uses:="org.eclipse.jgit.util.time"
+ org.eclipse.jgit.junit.time;version="6.4.1";uses:="org.eclipse.jgit.util.time"
diff --git a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
index 4daa576..367787c 100644
--- a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml
index fe2211b..0a69906 100644
--- a/org.eclipse.jgit.junit/pom.xml
+++ b/org.eclipse.jgit.junit/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit</artifactId>
diff --git a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
index 5962ebb..7b3d7e0 100644
--- a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.server.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -26,24 +26,24 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.server;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.server.fs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.test;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.server;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.test;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest.core;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.lfs.server.test/pom.xml b/org.eclipse.jgit.lfs.server.test/pom.xml
index baa6a9d..b0f6a5b 100644
--- a/org.eclipse.jgit.lfs.server.test/pom.xml
+++ b/org.eclipse.jgit.lfs.server.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
diff --git a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
index 1e7dc5f..e27cc90 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.server
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs.server;version="6.3.1";
+Export-Package: org.eclipse.jgit.lfs.server;version="6.4.1";
   uses:="javax.servlet.http,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.fs;version="6.3.1";
+ org.eclipse.jgit.lfs.server.fs;version="6.4.1";
   uses:="javax.servlet,
    javax.servlet.http,
    org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.internal;version="6.3.1";x-internal:=true,
- org.eclipse.jgit.lfs.server.s3;version="6.3.1";
+ org.eclipse.jgit.lfs.server.internal;version="6.4.1";x-internal:=true,
+ org.eclipse.jgit.lfs.server.s3;version="6.4.1";
   uses:="org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -24,15 +24,15 @@
  javax.servlet.annotation;version="[3.1.0,5.0.0)",
  javax.servlet.http;version="[3.1.0,5.0.0)",
  org.apache.http;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
diff --git a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
index b42fb0a..595a04e 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.lfs.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml
index 7944938..69336a6 100644
--- a/org.eclipse.jgit.lfs.server/pom.xml
+++ b/org.eclipse.jgit.lfs.server/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server</artifactId>
diff --git a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
index e849423..8facd81 100644
--- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
@@ -3,27 +3,27 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.attributes;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+Import-Package: org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.attributes;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest.core;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)"
-Export-Package: org.eclipse.jgit.lfs.test;version="6.3.1";x-friends:="org.eclipse.jgit.lfs.server.test"
+Export-Package: org.eclipse.jgit.lfs.test;version="6.4.1";x-friends:="org.eclipse.jgit.lfs.server.test"
diff --git a/org.eclipse.jgit.lfs.test/pom.xml b/org.eclipse.jgit.lfs.test/pom.xml
index ab82454..43a5d08 100644
--- a/org.eclipse.jgit.lfs.test/pom.xml
+++ b/org.eclipse.jgit.lfs.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.test</artifactId>
diff --git a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
index f1aee3a..f951183 100644
--- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
@@ -3,32 +3,32 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs
 Bundle-SymbolicName: org.eclipse.jgit.lfs
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs;version="6.3.1",
- org.eclipse.jgit.lfs.errors;version="6.3.1",
- org.eclipse.jgit.lfs.internal;version="6.3.1";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
- org.eclipse.jgit.lfs.lib;version="6.3.1"
+Export-Package: org.eclipse.jgit.lfs;version="6.4.1",
+ org.eclipse.jgit.lfs.errors;version="6.4.1",
+ org.eclipse.jgit.lfs.internal;version="6.4.1";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
+ org.eclipse.jgit.lfs.lib;version="6.4.1"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.google.gson;version="[2.8.2,3.0.0)",
  com.google.gson.stream;version="[2.8.2,3.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)";resolution:=optional,
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.attributes;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.diff;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.dircache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.hooks;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)"
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)";resolution:=optional,
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.attributes;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.diff;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.dircache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.hooks;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)"
diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
index e1ff6fa..62dad42 100644
--- a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.lfs - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml
index abf2ff7..18942f0 100644
--- a/org.eclipse.jgit.lfs/pom.xml
+++ b/org.eclipse.jgit.lfs/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
index 75f416a..7930aa1 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
index ee11048..93f42ab 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
index e73ae31..5acf8ff 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.gpg.bc"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
index 1bbf567..bf6fe5d 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
index 58d484f..85ff865 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.http.apache"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
index 00ff3ce..a1f6f0f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
index 9e2aec3..55fdba6 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.junit"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -24,7 +24,7 @@
 
    <requires>
       <import plugin="com.jcraft.jsch"/>
-      <import plugin="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
index ecfcf55..88b2cd2 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
index 0996158..4ef4c5d 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.lfs"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
index 6c415aa..9a4d7fd 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
index 9aa6af1..6573c6f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.pgm"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -35,9 +35,9 @@
          version="0.0.0"/>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.lfs" version="6.3.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.ssh.apache" version="6.3.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit.lfs" version="6.4.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit.ssh.apache" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
index 47a6a20..979c357 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
index 9ed0f5e..a091a7e 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.repository</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
index fb5b764..1b45654 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.source"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
index e558c89..382375b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
@@ -30,7 +30,7 @@
     <dependency>
       <groupId>org.eclipse.jgit.feature</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>6.3.1-SNAPSHOT</version>
+      <version>6.4.1-SNAPSHOT</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
index 3cecf6d..c904e2d 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.ssh.apache"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
index 92a0300..669213d 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
index a8bae00..8c4a14b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.ssh.jsch"
       label="%featureName"
-      version="6.3.1.qualifier"
+      version="6.4.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.3.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.4.1" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
index bf08c98..7d1a08f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
index 8861f40..ee07a32 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
@@ -2,4 +2,4 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: JGit Target Platform Bundle
 Bundle-SymbolicName: org.eclipse.jgit.target
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target
index 76aafcc..d5ee87b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.17" sequenceNumber="1662389260">
+<target name="jgit-4.17" sequenceNumber="1669195943">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
index 8c28b96..60438d7 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.17" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-09/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target
index f48ed6e..36e37b1 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.18" sequenceNumber="1662389260">
+<target name="jgit-4.18" sequenceNumber="1669195943">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
index a0cf7f7..c894dfe 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.18" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-12/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target
index d30352c..2966e88 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.19-staging" sequenceNumber="1662389263">
+<target name="jgit-4.19-staging" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
index ec33a08..6157842 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.19-staging" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2021-03/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target
index e20ef5b..6e6e7fb 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.20" sequenceNumber="1662389260">
+<target name="jgit-4.20" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
index ccca715..afc5f34 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.20" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2021-06/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
index b98b23b..edfc027 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.21" sequenceNumber="1662389260">
+<target name="jgit-4.21" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
index 2652598..b701c81 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.21" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2021-09/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target
index 7186609..f5efb8c 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.22" sequenceNumber="1662389260">
+<target name="jgit-4.22" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd
index bc87048..e69ab0a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.22" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2021-12/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
index 670d61d..1100bf2 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.23" sequenceNumber="1662389260">
+<target name="jgit-4.23" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd
index 2d15b9f..87a7b7f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.23" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2022-03/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
index 4d78a59..ccd8d23 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.24" sequenceNumber="1662389260">
+<target name="jgit-4.24" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,17 +77,17 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd
index 0b7176a..91108fc 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.24" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
 location "https://download.eclipse.org/releases/2022-06/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target
index 568da28..364f49e 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.25" sequenceNumber="1662389260">
+<target name="jgit-4.25" sequenceNumber="1669195941">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="jakarta.servlet-api" version="4.0.0"/>
@@ -23,50 +23,50 @@
       <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.9.v20220111-1409"/>
-      <unit id="com.google.gson.source" version="2.8.9.v20220111-1409"/>
-      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
-      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
       <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
-      <unit id="com.sun.jna" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.source" version="5.8.0.v20210503-0343"/>
-      <unit id="com.sun.jna.platform" version="5.8.0.v20210406-1004"/>
-      <unit id="com.sun.jna.platform.source" version="5.8.0.v20210406-1004"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
       <unit id="javaewah" version="1.1.13.v20211029-0839"/>
       <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
-      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
-      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
-      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
       <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
       <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
       <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
-      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
       <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
-      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
-      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
-      <unit id="org.apache.sshd.osgi" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp" version="2.8.0.v20211227-1750"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.8.0.v20211227-1750"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
       <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
       <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
-      <unit id="org.bouncycastle.bcpg" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil" version="1.71.0.v20220723-1943"/>
-      <unit id="org.bouncycastle.bcutil.source" version="1.71.0.v20220723-1943"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
       <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
@@ -77,21 +77,21 @@
       <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
-      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
-      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
-      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
-      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
-      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
       <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
       <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20220830213456/repository"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
-      <repository location="https://download.eclipse.org/staging/2022-09/"/>
+      <repository location="https://download.eclipse.org/releases/2022-09/"/>
     </location>
   </locations>
 </target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.tpd
index 0005893..7a67a97 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.tpd
@@ -1,8 +1,8 @@
 target "jgit-4.25" with source configurePhase
 
 include "projects/jetty-10.0.x.tpd"
-include "orbit/R20220830213456-2022-09.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
 
-location "https://download.eclipse.org/staging/2022-09/" {
+location "https://download.eclipse.org/releases/2022-09/" {
 	org.eclipse.osgi lazy
 }
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target
new file mode 100644
index 0000000..257f45e
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="jgit-4.25" sequenceNumber="1669195949">
+  <locations>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="jakarta.servlet-api" version="4.0.0"/>
+      <unit id="jakarta.servlet-api.source" version="4.0.0"/>
+      <unit id="org.eclipse.jetty.http" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.http.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.io" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.io.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.security" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.security.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.server" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.server.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.servlet" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.util" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.util.source" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="10.0.6"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="10.0.6"/>
+      <repository id="jetty-10.0.x" location="https://download.eclipse.org/eclipse/jetty/10.0.6/"/>
+    </location>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="com.google.gson" version="2.9.1.v20220915-1632"/>
+      <unit id="com.google.gson.source" version="2.9.1.v20220915-1632"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20221112-0806"/>
+      <unit id="com.jcraft.jzlib" version="1.1.3.v20220502-1820"/>
+      <unit id="com.jcraft.jzlib.source" version="1.1.3.v20220502-1820"/>
+      <unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
+      <unit id="com.sun.jna.platform.source" version="5.12.1.v20221103-2317"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20220506-1020"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20220506-1020"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20221112-0806"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
+      <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20221112-0806"/>
+      <unit id="org.apache.httpcomponents.httpcore" version="4.4.15.v20220209-2345"/>
+      <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.15.v20220209-2345"/>
+      <unit id="org.apache.sshd.osgi" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp" version="2.9.2.v20221117-1942"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.9.2.v20221117-1942"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil" version="1.72.0.v20221013-1810"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.72.0.v20221013-1810"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
+      <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
+      <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
+      <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
+      <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
+      <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
+      <unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
+      <unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
+      <unit id="org.objenesis" version="3.3.0.v20221103-2317"/>
+      <unit id="org.objenesis.source" version="3.3.0.v20221103-2317"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20221112-0806"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20221112-0806"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository"/>
+    </location>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="org.eclipse.osgi" version="0.0.0"/>
+      <repository location="https://download.eclipse.org/staging/2022-12/"/>
+    </location>
+  </locations>
+</target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.tpd
new file mode 100644
index 0000000..5fc49cd
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.tpd
@@ -0,0 +1,8 @@
+target "jgit-4.25" with source configurePhase
+
+include "projects/jetty-10.0.x.tpd"
+include "orbit/R20221123021534-2022-12.tpd"
+
+location "https://download.eclipse.org/staging/2022-12/" {
+	org.eclipse.osgi lazy
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20221123021534-2022-12.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20221123021534-2022-12.tpd
new file mode 100644
index 0000000..bc4929b
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20221123021534-2022-12.tpd
@@ -0,0 +1,69 @@
+target "R20221123021534-2022-12" with source configurePhase
+// see https://download.eclipse.org/tools/orbit/downloads/
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20221123021534/repository" {
+	com.google.gson [2.9.1.v20220915-1632,2.9.1.v20220915-1632]
+	com.google.gson.source [2.9.1.v20220915-1632,2.9.1.v20220915-1632]
+	com.jcraft.jsch [0.1.55.v20221112-0806,0.1.55.v20221112-0806]
+	com.jcraft.jsch.source [0.1.55.v20221112-0806,0.1.55.v20221112-0806]
+	com.jcraft.jzlib [1.1.3.v20220502-1820,1.1.3.v20220502-1820]
+	com.jcraft.jzlib.source [1.1.3.v20220502-1820,1.1.3.v20220502-1820]
+	com.sun.jna [5.12.1.v20221103-2317,5.12.1.v20221103-2317]
+	com.sun.jna.source [5.12.1.v20221103-2317,5.12.1.v20221103-2317]
+	com.sun.jna.platform [5.12.1.v20221103-2317,5.12.1.v20221103-2317]
+	com.sun.jna.platform.source [5.12.1.v20221103-2317,5.12.1.v20221103-2317]
+	javaewah [1.1.13.v20211029-0839,1.1.13.v20211029-0839]
+	javaewah.source [1.1.13.v20211029-0839,1.1.13.v20211029-0839]
+	net.bytebuddy.byte-buddy [1.12.18.v20221114-2102,1.12.18.v20221114-2102]
+	net.bytebuddy.byte-buddy.source [1.12.18.v20221114-2102,1.12.18.v20221114-2102]
+	net.bytebuddy.byte-buddy-agent [1.12.18.v20221114-2102,1.12.18.v20221114-2102]
+	net.bytebuddy.byte-buddy-agent.source [1.12.18.v20221114-2102,1.12.18.v20221114-2102]
+	net.i2p.crypto.eddsa [0.3.0.v20220506-1020,0.3.0.v20220506-1020]
+	net.i2p.crypto.eddsa.source [0.3.0.v20220506-1020,0.3.0.v20220506-1020]
+	org.apache.ant [1.10.12.v20211102-1452,1.10.12.v20211102-1452]
+	org.apache.ant.source [1.10.12.v20211102-1452,1.10.12.v20211102-1452]
+	org.apache.commons.codec [1.14.0.v20221112-0806,1.14.0.v20221112-0806]
+	org.apache.commons.codec.source [1.14.0.v20221112-0806,1.14.0.v20221112-0806]
+	org.apache.commons.compress [1.21.0.v20211103-2100,1.21.0.v20211103-2100]
+	org.apache.commons.compress.source [1.21.0.v20211103-2100,1.21.0.v20211103-2100]
+	org.apache.commons.logging [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.commons.logging.source [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.httpcomponents.httpclient [4.5.13.v20221112-0806,4.5.13.v20221112-0806]
+	org.apache.httpcomponents.httpclient.source [4.5.13.v20221112-0806,4.5.13.v20221112-0806]
+	org.apache.httpcomponents.httpcore [4.4.15.v20220209-2345,4.4.15.v20220209-2345]
+	org.apache.httpcomponents.httpcore.source [4.4.15.v20220209-2345,4.4.15.v20220209-2345]
+	org.apache.sshd.osgi [2.9.2.v20221117-1942,2.9.2.v20221117-1942]
+	org.apache.sshd.osgi.source [2.9.2.v20221117-1942,2.9.2.v20221117-1942]
+	org.apache.sshd.sftp [2.9.2.v20221117-1942,2.9.2.v20221117-1942]
+	org.apache.sshd.sftp.source [2.9.2.v20221117-1942,2.9.2.v20221117-1942]
+	org.assertj [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.assertj.source [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.bouncycastle.bcpg [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcpg.source [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcpkix [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcpkix.source [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcprov [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcprov.source [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcutil [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.bouncycastle.bcutil.source [1.72.0.v20221013-1810,1.72.0.v20221013-1810]
+	org.hamcrest [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.source [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.library [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.hamcrest.library.source [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.junit [4.13.2.v20211018-1956,4.13.2.v20211018-1956]
+	org.junit.source [4.13.2.v20211018-1956,4.13.2.v20211018-1956]
+	org.kohsuke.args4j [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.kohsuke.args4j.source [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.mockito.mockito-core [4.8.1.v20221103-2317,4.8.1.v20221103-2317]
+	org.mockito.mockito-core.source [4.8.1.v20221103-2317,4.8.1.v20221103-2317]
+	org.objenesis [3.3.0.v20221103-2317,3.3.0.v20221103-2317]
+	org.objenesis.source [3.3.0.v20221103-2317,3.3.0.v20221103-2317]
+	org.slf4j.api [1.7.30.v20221112-0806,1.7.30.v20221112-0806]
+	org.slf4j.api.source [1.7.30.v20221112-0806,1.7.30.v20221112-0806]
+	org.slf4j.binding.simple [1.7.30.v20221112-0806,1.7.30.v20221112-0806]
+	org.slf4j.binding.simple.source [1.7.30.v20221112-0806,1.7.30.v20221112-0806]
+	org.tukaani.xz [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+	org.tukaani.xz.source [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
index 0baf5ac..fbcb20c 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
@@ -16,7 +16,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.target</artifactId>
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml
index bebd2a4..3ccac7d 100644
--- a/org.eclipse.jgit.packaging/pom.xml
+++ b/org.eclipse.jgit.packaging/pom.xml
@@ -16,7 +16,7 @@
 
   <groupId>org.eclipse.jgit</groupId>
   <artifactId>jgit.tycho.parent</artifactId>
-  <version>6.3.1-SNAPSHOT</version>
+  <version>6.4.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>JGit Tycho Parent</name>
diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
index cd947f0..0bdc408 100644
--- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
@@ -3,30 +3,30 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm.test
 Bundle-SymbolicName: org.eclipse.jgit.pgm.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.diff;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.dircache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.diffmergetool;version="6.3.1",
- org.eclipse.jgit.internal.storage.file;version="6.3.1",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.merge;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.pgm;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.pgm.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.pgm.opt;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)",
+Import-Package: org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.diff;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.dircache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="6.4.1",
+ org.eclipse.jgit.internal.storage.file;version="6.4.1",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.merge;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.pgm;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.pgm.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.pgm.opt;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)",
  org.hamcrest.core;bundle-version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.pgm.test/pom.xml b/org.eclipse.jgit.pgm.test/pom.xml
index fd87d92..dad9288 100644
--- a/org.eclipse.jgit.pgm.test/pom.xml
+++ b/org.eclipse.jgit.pgm.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm.test</artifactId>
diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DiffTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DiffTest.java
new file mode 100644
index 0000000..859b54d
--- /dev/null
+++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/DiffTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.pgm;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.jgit.lib.CLIRepositoryTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+public class DiffTest extends CLIRepositoryTestCase {
+
+	private static final String NO_NEWLINE = "\\ No newline at end of file";
+
+	@Before
+	public void setup() throws Exception {
+		writeTrashFile("a", "a");
+		execute("git add a");
+		execute("git commit -m added");
+	}
+
+	@Test
+	public void testDiffCommitNewFile() throws Exception {
+		writeTrashFile("a1", "a");
+		String result = toString(execute("git diff"));
+		assertEquals(
+				toString("diff --git a/a1 b/a1", "new file mode 100644",
+						"index 0000000..2e65efe", "--- /dev/null", "+++ b/a1",
+						"@@ -0,0 +1 @@", "+a", NO_NEWLINE),
+				result);
+	}
+
+	@Test
+	public void testDiffCommitModifiedFile() throws Exception {
+		writeTrashFile("a", "a1");
+		String result = toString(execute("git diff"));
+		assertEquals(
+				toString("diff --git a/a b/a", "index 2e65efe..59ef8d1 100644",
+						"--- a/a", "+++ b/a", "@@ -1 +1 @@",
+						"-a", NO_NEWLINE, "+a1", NO_NEWLINE),
+				result);
+	}
+
+	@Test
+	public void testDiffCommitModifiedFileNameOnly() throws Exception {
+		writeTrashFile("a", "a1");
+		writeTrashFile("b", "b");
+		String result = toString(execute("git diff --name-only"));
+		assertEquals(toString("a", "b"), result);
+	}
+
+	@Test
+	public void testDiffCommitModifiedFileNameStatus() throws Exception {
+		writeTrashFile("a", "a1");
+		writeTrashFile("b", "b");
+		String result = toString(execute("git diff --name-status"));
+		assertEquals(toString("M\ta", "A\tb"), result);
+	}
+}
diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/LogTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/LogTest.java
new file mode 100644
index 0000000..1cc52a4
--- /dev/null
+++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/LogTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.pgm;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.jgit.lib.CLIRepositoryTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LogTest extends CLIRepositoryTestCase {
+
+	@Before
+	public void setup() throws Exception {
+		writeTrashFile("a", "a");
+		writeTrashFile("b", "a");
+		execute("git add a b");
+		execute("git commit -m added");
+	}
+
+	@Test
+	public void testLogCommitNewFile() throws Exception {
+		String result = toString(execute("git log"));
+		assertEquals(
+				toString("commit b4680f542095a8b41ea4258a5c03b548543a817c",
+						"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+						"Date:   Sat Aug 15 20:12:58 2009 -0330", "added"),
+				result);
+	}
+
+	@Test
+	public void testLogNameOnly() throws Exception {
+		String result = toString(execute("git log --name-only"));
+		assertEquals(
+				toString("commit b4680f542095a8b41ea4258a5c03b548543a817c",
+						"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+						"Date:   Sat Aug 15 20:12:58 2009 -0330", "added", "a",
+						"b"),
+				result);
+	}
+
+	@Test
+	public void testDiffCommitModifiedFileNameStatus() throws Exception {
+		String result = toString(execute("git log --name-status"));
+		assertEquals(toString("commit b4680f542095a8b41ea4258a5c03b548543a817c",
+				"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+				"Date:   Sat Aug 15 20:12:58 2009 -0330", "added", "A\ta",
+				"A\tb"),
+				result);
+	}
+}
diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ShowTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ShowTest.java
new file mode 100644
index 0000000..47d5d34
--- /dev/null
+++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ShowTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022, Matthias Sohn <matthias.sohn@sap.com> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.pgm;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.jgit.lib.CLIRepositoryTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ShowTest extends CLIRepositoryTestCase {
+
+	private static final String NO_NEWLINE = "\\ No newline at end of file";
+
+	@Before
+	public void setup() throws Exception {
+		writeTrashFile("a", "a");
+		writeTrashFile("b", "b");
+		execute("git add a b");
+		execute("git commit -m added");
+		writeTrashFile("a", "a1");
+		execute("git add a");
+		execute("git commit -m modified");
+	}
+
+	@Test
+	public void testShow() throws Exception {
+		String result = toString(execute("git show"));
+		assertEquals(
+				toString("commit ecdf62e777b7413fc463c20e935403d424410ab2",
+						"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+						"Date:   Sat Aug 15 20:12:58 2009 -0330", "",
+						"    modified", "", "diff --git a/a b/a",
+						"index 2e65efe..59ef8d1 100644", "--- a/a", "+++ b/a",
+						"@@ -1 +1 @@", "-a", NO_NEWLINE, "+a1", NO_NEWLINE),
+				result);
+	}
+
+	@Test
+	public void testShowNameOnly() throws Exception {
+		String result = toString(execute("git show --name-only"));
+		assertEquals(toString("commit ecdf62e777b7413fc463c20e935403d424410ab2",
+				"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+				"Date:   Sat Aug 15 20:12:58 2009 -0330", "", "    modified",
+				"a"), result);
+	}
+
+	@Test
+	public void testShowNameStatus() throws Exception {
+		String result = toString(execute("git show --name-status"));
+		assertEquals(toString("commit ecdf62e777b7413fc463c20e935403d424410ab2",
+				"Author: GIT_COMMITTER_NAME <GIT_COMMITTER_EMAIL>",
+				"Date:   Sat Aug 15 20:12:58 2009 -0330", "", "    modified",
+				"M\ta"), result);
+	}
+}
diff --git a/org.eclipse.jgit.pgm/BUILD b/org.eclipse.jgit.pgm/BUILD
index 2593122..a267b15 100644
--- a/org.eclipse.jgit.pgm/BUILD
+++ b/org.eclipse.jgit.pgm/BUILD
@@ -8,6 +8,7 @@
     visibility = ["//visibility:public"],
     runtime_deps = [
         ":services",
+        "//lib:javaewah",
         "//org.eclipse.jgit.gpg.bc:gpg-bc",
     ],
     deps = [
diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
index 39ea131..ecbb24c 100644
--- a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm
 Bundle-SymbolicName: org.eclipse.jgit.pgm
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -14,49 +14,49 @@
  org.eclipse.jetty.servlet;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.component;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.archive;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.awtui;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.blame;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.diff;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.dircache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.gitrepo;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.io;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.server;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.server.fs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs.server.s3;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.merge;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.notes;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revplot;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.resolver;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.sshd;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.archive;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.awtui;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.blame;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.diff;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.dircache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.gitrepo;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.io;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.server;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs.server.s3;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.merge;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.notes;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revplot;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.sshd;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)",
  org.kohsuke.args4j;version="[2.33.0,3.0.0)",
  org.kohsuke.args4j.spi;version="[2.33.0,3.0.0)"
-Export-Package: org.eclipse.jgit.console;version="6.3.1";
+Export-Package: org.eclipse.jgit.console;version="6.4.1";
  uses:="org.eclipse.jgit.transport,
   org.eclipse.jgit.util",
- org.eclipse.jgit.pgm;version="6.3.1";
+ org.eclipse.jgit.pgm;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.awtui,
@@ -68,14 +68,14 @@
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.api,
    javax.swing",
- org.eclipse.jgit.pgm.debug;version="6.3.1";
+ org.eclipse.jgit.pgm.debug;version="6.4.1";
   uses:="org.eclipse.jgit.util.io,
    org.eclipse.jgit.pgm,
    org.eclipse.jetty.servlet",
- org.eclipse.jgit.pgm.internal;version="6.3.1";
+ org.eclipse.jgit.pgm.internal;version="6.4.1";
   x-friends:="org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.test",
- org.eclipse.jgit.pgm.opt;version="6.3.1";
+ org.eclipse.jgit.pgm.opt;version="6.4.1";
   uses:="org.kohsuke.args4j,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
diff --git a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
index 4850be9..e2bc4f0 100644
--- a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.pgm - Sources
 Bundle-SymbolicName: org.eclipse.jgit.pgm.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml
index 2a9f5d7..eda51f1 100644
--- a/org.eclipse.jgit.pgm/pom.xml
+++ b/org.eclipse.jgit.pgm/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm</artifactId>
diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
index 74ea867..e0db759 100644
--- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
+++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
@@ -40,6 +40,7 @@
 cannotResolve=Cannot resolve {0}
 cannotSetupConsole=Cannot setup console
 cannotUseObjectsWithGlog=Cannot use --objects with glog
+cannotUseNameStatusOnlyAndNameOnly=Cannot use --name-only, --name-status are mutually exclusive
 cantFindGitDirectory=error: can't find git directory
 cantWrite=Can''t write {0}
 changesNotStagedForCommit=Changes not staged for commit:
@@ -414,6 +415,7 @@
 usage_message=Set the commit message to be used for the merge commit (in case one is created).
 usage_moveRenameABranch=move/rename a branch
 usage_nameStatus=show only name and status of files
+usage_nameOnly=show only name of files
 usage_noCheckoutAfterClone=no checkout of HEAD is performed after the clone is complete
 usage_noCommit=Don't commit after a successful merge
 usage_noPrefix=do not show any source or destination prefix
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java
index cdbcbc0..3152c44 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java
@@ -48,6 +48,10 @@
 class Diff extends TextBuiltin {
 	private DiffFormatter diffFmt;
 
+	private boolean showNameOnly = false;
+
+	private boolean showNameAndStatusOnly = false;
+
 	@Argument(index = 0, metaVar = "metaVar_treeish")
 	private AbstractTreeIterator oldTree;
 
@@ -81,7 +85,22 @@
 	private Integer renameLimit;
 
 	@Option(name = "--name-status", usage = "usage_nameStatus")
-	private boolean showNameAndStatusOnly;
+	void nameAndStatusOnly(boolean on) {
+		if (showNameOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameAndStatusOnly = on;
+	}
+
+	@Option(name = "--name-only", usage = "usage_nameOnly")
+	void nameOnly(boolean on) {
+		if (showNameAndStatusOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameOnly = on;
+	}
 
 	@Option(name = "--ignore-space-at-eol")
 	void ignoreSpaceAtEol(@SuppressWarnings("unused") boolean on) {
@@ -183,6 +202,9 @@
 			if (showNameAndStatusOnly) {
 				nameStatus(outw, diffFmt.scan(oldTree, newTree));
 				outw.flush();
+			} else if(showNameOnly) {
+				nameOnly(outw, diffFmt.scan(oldTree, newTree));
+				outw.flush();
 			} else {
 				diffFmt.format(oldTree, newTree);
 				diffFmt.flush();
@@ -220,4 +242,27 @@
 			}
 		}
 	}
+
+	static void nameOnly(ThrowingPrintWriter out, List<DiffEntry> files)
+			throws IOException {
+		for (DiffEntry ent : files) {
+			switch (ent.getChangeType()) {
+				case ADD:
+					out.println(ent.getNewPath());
+					break;
+				case DELETE:
+					out.println(ent.getOldPath());
+					break;
+				case MODIFY:
+					out.println(ent.getNewPath());
+					break;
+				case COPY:
+					out.println(ent.getNewPath());
+					break;
+				case RENAME:
+					out.println(ent.getNewPath());
+					break;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java
index 353b64b..d693051 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java
@@ -60,6 +60,10 @@
 
 	private Map<String, NoteMap> noteMaps;
 
+	private boolean showNameOnly = false;
+
+	private boolean showNameAndStatusOnly = false;
+
 	@Option(name="--decorate", usage="usage_showRefNamesMatchingCommits")
 	private boolean decorate;
 
@@ -99,7 +103,22 @@
 	private Integer renameLimit;
 
 	@Option(name = "--name-status", usage = "usage_nameStatus")
-	private boolean showNameAndStatusOnly;
+	void nameAndStatusOnly(boolean on) {
+		if (showNameOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameAndStatusOnly = on;
+	}
+
+	@Option(name = "--name-only", usage = "usage_nameOnly")
+	void nameOnly(boolean on) {
+		if (showNameAndStatusOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameOnly = on;
+	}
 
 	@Option(name = "--ignore-space-at-eol")
 	void ignoreSpaceAtEol(@SuppressWarnings("unused") boolean on) {
@@ -266,8 +285,10 @@
 		if (showNotes(c))
 			outw.println();
 
-		if (c.getParentCount() <= 1 && (showNameAndStatusOnly || showPatch))
+		if (c.getParentCount() <= 1 && (showNameAndStatusOnly || showPatch
+				|| showNameOnly)) {
 			showDiff(c);
+		}
 		outw.flush();
 	}
 
@@ -364,9 +385,11 @@
 				: null;
 		final RevTree b = c.getTree();
 
-		if (showNameAndStatusOnly)
+		if (showNameAndStatusOnly) {
 			Diff.nameStatus(outw, diffFmt.scan(a, b));
-		else {
+		} else if (showNameOnly) {
+			Diff.nameOnly(outw, diffFmt.scan(a, b));
+		} else {
 			outw.flush();
 			diffFmt.format(a, b);
 			diffFmt.flush();
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java
index 3beab60..c18d35a 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java
@@ -58,6 +58,10 @@
 
 	private DiffFormatter diffFmt;
 
+	private boolean showNameOnly = false;
+
+	private boolean showNameAndStatusOnly = false;
+
 	@Argument(index = 0, metaVar = "metaVar_object")
 	private String objectName;
 
@@ -83,7 +87,22 @@
 	private Integer renameLimit;
 
 	@Option(name = "--name-status", usage = "usage_nameStatus")
-	private boolean showNameAndStatusOnly;
+	void nameAndStatusOnly(boolean on) {
+		if (showNameOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameAndStatusOnly = on;
+	}
+
+	@Option(name = "--name-only", usage = "usage_nameOnly")
+	void nameOnly(boolean on) {
+		if (showNameAndStatusOnly) {
+			throw new IllegalArgumentException(
+					CLIText.get().cannotUseNameStatusOnlyAndNameOnly);
+		}
+		showNameOnly = on;
+	}
 
 	@Option(name = "--ignore-space-at-eol")
 	void ignoreSpaceAtEol(@SuppressWarnings("unused") boolean on) {
@@ -302,9 +321,11 @@
 		final RevTree a = c.getParent(0).getTree();
 		final RevTree b = c.getTree();
 
-		if (showNameAndStatusOnly)
+		if (showNameAndStatusOnly) {
 			Diff.nameStatus(outw, diffFmt.scan(a, b));
-		else {
+		} else if (showNameOnly) {
+			Diff.nameOnly(outw, diffFmt.scan(a, b));
+		} else {
 			outw.flush();
 			diffFmt.format(a, b);
 			diffFmt.flush();
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java
index 36103f2..ac51643 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java
@@ -42,12 +42,13 @@
 		try {
 			FileKey key = FileKey.lenient(srcGitdir, FS.DETECTED);
 			db = key.open(true /* must exist */);
-			org.eclipse.jgit.transport.UploadPack up = new org.eclipse.jgit.transport.UploadPack(
-					db);
-			if (0 <= timeout) {
-				up.setTimeout(timeout);
+			try (org.eclipse.jgit.transport.UploadPack up = new org.eclipse.jgit.transport.UploadPack(
+					db)) {
+				if (0 <= timeout) {
+					up.setTimeout(timeout);
+				}
+				up.upload(ins, outs, errs);
 			}
-			up.upload(ins, outs, errs);
 		} catch (RepositoryNotFoundException notFound) {
 			throw die(MessageFormat.format(CLIText.get().notAGitRepository,
 					srcGitdir.getPath()), notFound);
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
index e06f150..490f800 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java
@@ -119,6 +119,7 @@
 	/***/ public String cannotResolve;
 	/***/ public String cannotSetupConsole;
 	/***/ public String cannotUseObjectsWithGlog;
+	/***/ public String cannotUseNameStatusOnlyAndNameOnly;
 	/***/ public String cantFindGitDirectory;
 	/***/ public String cantWrite;
 	/***/ public String changesNotStagedForCommit;
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
index ac14d95..0f26a38 100644
--- a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
@@ -2,16 +2,16 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent;singleton:=true
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.3.1,6.4.0)"
+Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.4.1,6.5.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.agent
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.transport.sshd;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)"
+Import-Package: org.eclipse.jgit.transport.sshd;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)"
 Require-Bundle: com.sun.jna;bundle-version="[5.8.0,6.0.0)",
  com.sun.jna.platform;bundle-version="[5.8.0,6.0.0)"
-Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="6.3.1";x-internal:=true
+Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="6.4.1";x-internal:=true
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
index 89a56b7..f59f6fe 100644
--- a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ssh.apache.agent - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache.agent/pom.xml b/org.eclipse.jgit.ssh.apache.agent/pom.xml
index e43e3fc..9f16d47 100644
--- a/org.eclipse.jgit.ssh.apache.agent/pom.xml
+++ b/org.eclipse.jgit.ssh.apache.agent/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.agent</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
index 68b9ea0..3175a4a 100644
--- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -3,34 +3,34 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.apache.sshd.client.config.hosts;version="[2.8.0,2.9.0)",
- org.apache.sshd.common;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.auth;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.helpers;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.kex;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.keyprovider;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.session;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.signature;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.net;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.security;version="[2.8.0,2.9.0)",
- org.apache.sshd.core;version="[2.8.0,2.9.0)",
- org.apache.sshd.server;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.forward;version="[2.8.0,2.9.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit.ssh;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.sshd;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.sshd.agent;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+Import-Package: org.apache.sshd.client.config.hosts;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.auth;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.helpers;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.kex;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.keyprovider;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.session;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.signature;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.net;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.security;version="[2.9.2,2.10.0)",
+ org.apache.sshd.core;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.forward;version="[2.9.2,2.10.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit.ssh;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.sshd;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.sshd.agent;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.apache.test/pom.xml b/org.eclipse.jgit.ssh.apache.test/pom.xml
index fd882bd..6adcb89 100644
--- a/org.eclipse.jgit.ssh.apache.test/pom.xml
+++ b/org.eclipse.jgit.ssh.apache.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
index 0ff3c8d..786c664 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
@@ -6,9 +6,9 @@
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.3.1";x-internal:=true;
+Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.4.1";x-internal:=true;
   uses:="org.apache.sshd.client,
    org.apache.sshd.client.auth,
    org.apache.sshd.client.auth.keyboard,
@@ -23,75 +23,75 @@
    org.apache.sshd.common.signature,
    org.apache.sshd.common.util.buffer,
    org.eclipse.jgit.transport",
- org.eclipse.jgit.internal.transport.sshd.agent;version="6.3.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.auth;version="6.3.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.proxy;version="6.3.1";x-friends:="org.eclipse.jgit.ssh.apache.test",
- org.eclipse.jgit.transport.sshd;version="6.3.1";
+ org.eclipse.jgit.internal.transport.sshd.agent;version="6.4.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.auth;version="6.4.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="6.4.1";x-friends:="org.eclipse.jgit.ssh.apache.test",
+ org.eclipse.jgit.transport.sshd;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.apache.sshd.client.config.hosts,
    org.apache.sshd.common.keyprovider,
    org.eclipse.jgit.util,
    org.apache.sshd.client.session,
    org.apache.sshd.client.keyverifier",
- org.eclipse.jgit.transport.sshd.agent;version="6.3.1"
+ org.eclipse.jgit.transport.sshd.agent;version="6.4.1"
 Import-Package: net.i2p.crypto.eddsa;version="[0.3.0,0.4.0)",
- org.apache.sshd.agent;version="[2.8.0,2.9.0)",
- org.apache.sshd.client;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.auth;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.auth.keyboard;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.auth.password;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.auth.pubkey;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.channel;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.config.hosts;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.config.keys;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.future;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.keyverifier;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.session;version="[2.8.0,2.9.0)",
- org.apache.sshd.client.session.forward;version="[2.8.0,2.9.0)",
- org.apache.sshd.common;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.auth;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.channel;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.compression;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys.loader;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.config.keys.u2f;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.digest;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.forward;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.future;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.helpers;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.io;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.kex;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.kex.extension;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.kex.extension.parser;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.keyprovider;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.mac;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.random;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.session;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.session.helpers;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.signature;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.buffer;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.buffer.keys;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.closeable;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.io;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.io.der;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.io.functors;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.io.resource;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.logging;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.net;version="[2.8.0,2.9.0)",
- org.apache.sshd.common.util.security;version="[2.8.0,2.9.0)",
- org.apache.sshd.core;version="[2.8.0,2.9.0)",
- org.apache.sshd.server.auth;version="[2.8.0,2.9.0)",
- org.apache.sshd.sftp;version="[2.8.0,2.9.0)",
- org.apache.sshd.sftp.client;version="[2.8.0,2.9.0)",
- org.apache.sshd.sftp.common;version="[2.8.0,2.9.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.fnmatch;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.apache.sshd.agent;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.auth;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.auth.keyboard;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.auth.password;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.auth.pubkey;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.channel;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.config.hosts;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.config.keys;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.future;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.keyverifier;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.session;version="[2.9.2,2.10.0)",
+ org.apache.sshd.client.session.forward;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.auth;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.channel;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.compression;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys.loader;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.config.keys.u2f;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.digest;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.forward;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.future;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.helpers;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.io;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.kex;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.kex.extension;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.kex.extension.parser;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.keyprovider;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.mac;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.random;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.session;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.session.helpers;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.signature;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.buffer;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.buffer.keys;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.closeable;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.io;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.io.der;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.io.functors;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.io.resource;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.logging;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.net;version="[2.9.2,2.10.0)",
+ org.apache.sshd.common.util.security;version="[2.9.2,2.10.0)",
+ org.apache.sshd.core;version="[2.9.2,2.10.0)",
+ org.apache.sshd.server.auth;version="[2.9.2,2.10.0)",
+ org.apache.sshd.sftp;version="[2.9.2,2.10.0)",
+ org.apache.sshd.sftp.client;version="[2.9.2,2.10.0)",
+ org.apache.sshd.sftp.common;version="[2.9.2,2.10.0)",
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.fnmatch;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
index 406a56d..2693c45 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ssh.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml
index 3a97b3a..e68e68a 100644
--- a/org.eclipse.jgit.ssh.apache/pom.xml
+++ b/org.eclipse.jgit.ssh.apache/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
index e1036c6..e2da799 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
@@ -131,17 +131,6 @@
 	@Override
 	protected PublicKeyIdentity resolveAttemptedPublicKeyIdentity(
 			ClientSession session, String service) throws Exception {
-		PublicKeyIdentity result = getNextKey(session, service);
-		// This fixes SSHD-1231. Can be removed once we're using Apache MINA
-		// sshd > 2.8.0.
-		//
-		// See https://issues.apache.org/jira/browse/SSHD-1231
-		currentAlgorithms.clear();
-		return result;
-	}
-
-	private PublicKeyIdentity getNextKey(ClientSession session, String service)
-			throws Exception {
 		PublicKeyIdentity id = super.resolveAttemptedPublicKeyIdentity(session,
 				service);
 		if (addKeysToAgent && id != null && !(id instanceof KeyAgentIdentity)) {
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/agent/SshAgentClient.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/agent/SshAgentClient.java
index cbcb4d2..4969414 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/agent/SshAgentClient.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/agent/SshAgentClient.java
@@ -427,14 +427,14 @@
 	private static PublicKey readKey(Buffer buffer) throws BufferException {
 		int endOfBuffer = buffer.wpos();
 		int keyLength = buffer.getInt();
-		int afterKey = buffer.rpos() + keyLength;
-		if (keyLength <= 0 || afterKey > endOfBuffer) {
+		if (keyLength <= 0 || keyLength > buffer.available()) {
 			throw new BufferException(
 					MessageFormat.format(SshdText.get().sshAgentWrongKeyLength,
 							Integer.toString(keyLength),
 							Integer.toString(buffer.rpos()),
 							Integer.toString(endOfBuffer)));
 		}
+		int afterKey = buffer.rpos() + keyLength;
 		// Limit subsequent reads to the public key blob
 		buffer.wpos(afterKey);
 		try {
diff --git a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
index 5a47db3..106cf13 100644
--- a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
@@ -3,18 +3,18 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.jcraft.jsch;version="[0.1.54,0.2.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit.ssh;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit.ssh;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
  org.hamcrest;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.jsch.test/pom.xml b/org.eclipse.jgit.ssh.jsch.test/pom.xml
index 2d5b023..8984813 100644
--- a/org.eclipse.jgit.ssh.jsch.test/pom.xml
+++ b/org.eclipse.jgit.ssh.jsch.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.jsch.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
index 18cb794..785b873 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch;singleton:=true
-Fragment-Host: org.eclipse.jgit;bundle-version="[6.3.1,6.4.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[6.4.1,6.5.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.3.1"
+Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.4.1"
 Import-Package: com.jcraft.jsch;version="[0.1.37,0.2.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
index 4ecfbe7..37aaf8d 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ssh.jsch - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.jsch/pom.xml b/org.eclipse.jgit.ssh.jsch/pom.xml
index d1d2391..f859caf 100644
--- a/org.eclipse.jgit.ssh.jsch/pom.xml
+++ b/org.eclipse.jgit.ssh.jsch/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.jsch</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch/resources/org/eclipse/jgit/internal/transport/jsch/JSchText.properties b/org.eclipse.jgit.ssh.jsch/resources/org/eclipse/jgit/internal/transport/ssh/jsch/JSchText.properties
similarity index 100%
rename from org.eclipse.jgit.ssh.jsch/resources/org/eclipse/jgit/internal/transport/jsch/JSchText.properties
rename to org.eclipse.jgit.ssh.jsch/resources/org/eclipse/jgit/internal/transport/ssh/jsch/JSchText.properties
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
index 97fe1be..a68d5e3 100644
--- a/org.eclipse.jgit.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.test
 Bundle-SymbolicName: org.eclipse.jgit.test
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -16,62 +16,62 @@
  org.apache.commons.compress.compressors.gzip;version="[1.15.0,2.0)",
  org.apache.commons.compress.compressors.xz;version="[1.15.0,2.0)",
  org.assertj.core.api;version="[3.14.0,4.0.0)",
- org.eclipse.jgit.annotations;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.api.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.archive;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.attributes;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.awtui;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.blame;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.diff;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.dircache;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.events;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.fnmatch;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.gitrepo;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.hooks;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.ignore;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.ignore.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.diff;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.fsck;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.io;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.connectivity;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.parser;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.junit.time;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lfs;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.logging;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.merge;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.notes;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.patch;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.pgm;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.pgm.internal;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revplot;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.file;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.storage.pack;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.submodule;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.http;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport.resolver;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.io;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util.sha1;version="[6.3.1,6.4.0)",
+ org.eclipse.jgit.annotations;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.api.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.archive;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.attributes;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.awtui;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.blame;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.diff;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.dircache;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.events;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.fnmatch;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.gitrepo;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.hooks;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.ignore;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.ignore.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.diff;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.fsck;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.io;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.connectivity;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.junit.time;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lfs;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.logging;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.merge;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.notes;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.patch;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.pgm;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.pgm.internal;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revplot;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.file;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.storage.pack;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.submodule;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.http;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.io;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util.sha1;version="[6.4.1,6.5.0)",
  org.hamcrest;version="[1.1.0,3.0.0)",
  org.hamcrest.collection;version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
@@ -80,10 +80,10 @@
  org.junit.rules;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)",
- org.mockito;version="[2.23.0,3.0.0)",
- org.mockito.invocation;version="[2.23.0,3.0.0)",
- org.mockito.junit;version="[2.23.0,3.0.0)",
- org.mockito.stubbing;version="[2.23.0,3.0.0)",
- org.objenesis;version="[2.6.0,3.0.0)",
+ org.mockito;version="[4.8.0,5.0.0)",
+ org.mockito.invocation;version="[4.8.0,5.0.0)",
+ org.mockito.junit;version="[4.8.0,5.0.0)",
+ org.mockito.stubbing;version="[4.8.0,5.0.0)",
+ org.objenesis;version="[3.3.0,4.0.0)",
  org.slf4j;version="[1.7.0,2.0.0)",
  org.tukaani.xz
diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml
index 3eb762f..0274fa9 100644
--- a/org.eclipse.jgit.test/pom.xml
+++ b/org.eclipse.jgit.test/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.test</artifactId>
@@ -73,7 +73,7 @@
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>2.23.0</version>
+      <version>4.8.1</version>
     </dependency>
 
     <dependency>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java
index 40764b7..a746823 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java
@@ -19,19 +19,13 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 
 import org.eclipse.jgit.api.errors.PatchApplyException;
 import org.eclipse.jgit.api.errors.PatchFormatException;
-import org.eclipse.jgit.attributes.FilterCommand;
-import org.eclipse.jgit.attributes.FilterCommandFactory;
-import org.eclipse.jgit.attributes.FilterCommandRegistry;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.junit.RepositoryTestCase;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.util.FS;
 import org.eclipse.jgit.util.IO;
 import org.junit.Test;
@@ -68,189 +62,6 @@
 		}
 	}
 
-	@Test
-	public void testCrLf() throws Exception {
-		try {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
-			ApplyResult result = init("crlf", true, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "crlf"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "crlf"),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	@Test
-	public void testCrLfOff() throws Exception {
-		try {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
-			ApplyResult result = init("crlf", true, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "crlf"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "crlf"),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	@Test
-	public void testCrLfEmptyCommitted() throws Exception {
-		try {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
-			ApplyResult result = init("crlf3", true, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "crlf3"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "crlf3"),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	@Test
-	public void testCrLfNewFile() throws Exception {
-		try {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
-			ApplyResult result = init("crlf4", false, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "crlf4"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "crlf4"),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	@Test
-	public void testPatchWithCrLf() throws Exception {
-		try {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
-			ApplyResult result = init("crlf2", true, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "crlf2"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "crlf2"),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	@Test
-	public void testPatchWithCrLf2() throws Exception {
-		String name = "crlf2";
-		try (Git git = new Git(db)) {
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
-			a = new RawText(readFile(name + "_PreImage"));
-			write(new File(db.getWorkTree(), name),
-					a.getString(0, a.size(), false));
-
-			git.add().addFilepattern(name).call();
-			git.commit().setMessage("PreImage").call();
-
-			b = new RawText(readFile(name + "_PostImage"));
-
-			db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
-			ApplyResult result = git.apply()
-					.setPatch(getTestResource(name + ".patch")).call();
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), name),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), name),
-					b.getString(0, b.size(), false));
-		} finally {
-			db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
-					ConfigConstants.CONFIG_KEY_AUTOCRLF);
-		}
-	}
-
-	// Clean/smudge filter for testFiltering. The smudgetest test resources were
-	// created with C git using a clean filter sed -e "s/A/E/g" and the smudge
-	// filter sed -e "s/E/A/g". To keep the test independent of the presence of
-	// sed, implement this with a built-in filter.
-	private static class ReplaceFilter extends FilterCommand {
-
-		private final char toReplace;
-
-		private final char replacement;
-
-		ReplaceFilter(InputStream in, OutputStream out, char toReplace,
-				char replacement) {
-			super(in, out);
-			this.toReplace = toReplace;
-			this.replacement = replacement;
-		}
-
-		@Override
-		public int run() throws IOException {
-			int b = in.read();
-			if (b < 0) {
-				in.close();
-				out.close();
-				return -1;
-			}
-			if ((b & 0xFF) == toReplace) {
-				b = replacement;
-			}
-			out.write(b);
-			return 1;
-		}
-	}
-
-	@Test
-	public void testFiltering() throws Exception {
-		// Set up filter
-		FilterCommandFactory clean = (repo, in, out) -> {
-			return new ReplaceFilter(in, out, 'A', 'E');
-		};
-		FilterCommandFactory smudge = (repo, in, out) -> {
-			return new ReplaceFilter(in, out, 'E', 'A');
-		};
-		FilterCommandRegistry.register("jgit://builtin/a2e/clean", clean);
-		FilterCommandRegistry.register("jgit://builtin/a2e/smudge", smudge);
-		try (Git git = new Git(db)) {
-			Config config = db.getConfig();
-			config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
-					"clean", "jgit://builtin/a2e/clean");
-			config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
-					"smudge", "jgit://builtin/a2e/smudge");
-			write(new File(db.getWorkTree(), ".gitattributes"),
-					"smudgetest filter=a2e");
-			git.add().addFilepattern(".gitattributes").call();
-			git.commit().setMessage("Attributes").call();
-			ApplyResult result = init("smudgetest", true, true);
-			assertEquals(1, result.getUpdatedFiles().size());
-			assertEquals(new File(db.getWorkTree(), "smudgetest"),
-					result.getUpdatedFiles().get(0));
-			checkFile(new File(db.getWorkTree(), "smudgetest"),
-					b.getString(0, b.size(), false));
-
-		} finally {
-			// Tear down filter
-			FilterCommandRegistry.unregister("jgit://builtin/a2e/clean");
-			FilterCommandRegistry.unregister("jgit://builtin/a2e/smudge");
-		}
-	}
-
 	private void checkBinary(String name, boolean hasPreImage)
 			throws Exception {
 		checkBinary(name, hasPreImage, 1);
@@ -280,21 +91,6 @@
 	}
 
 	@Test
-	public void testBinaryDelta() throws Exception {
-		checkBinary("delta", true);
-	}
-
-	@Test
-	public void testBinaryLiteral() throws Exception {
-		checkBinary("literal", true);
-	}
-
-	@Test
-	public void testBinaryLiteralAdd() throws Exception {
-		checkBinary("literal_add", false);
-	}
-
-	@Test
 	public void testEncodingChange() throws Exception {
 		// This is a text patch that changes a file containing ÄÖÜ in UTF-8 to
 		// the same characters in ISO-8859-1. The patch file itself uses mixed
@@ -410,188 +206,6 @@
 				b.getString(0, b.size(), false));
 	}
 
-	@Test
-	public void testModifyM2() throws Exception {
-		ApplyResult result = init("M2", true, true);
-		assertEquals(1, result.getUpdatedFiles().size());
-		if (FS.DETECTED.supportsExecute()) {
-			assertTrue(FS.DETECTED.canExecute(result.getUpdatedFiles().get(0)));
-		}
-		checkFile(new File(db.getWorkTree(), "M2"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testModifyM3() throws Exception {
-		ApplyResult result = init("M3", true, true);
-		assertEquals(1, result.getUpdatedFiles().size());
-		if (FS.DETECTED.supportsExecute()) {
-			assertFalse(
-					FS.DETECTED.canExecute(result.getUpdatedFiles().get(0)));
-		}
-		checkFile(new File(db.getWorkTree(), "M3"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testModifyX() throws Exception {
-		ApplyResult result = init("X");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "X"), result.getUpdatedFiles()
-				.get(0));
-		checkFile(new File(db.getWorkTree(), "X"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testModifyY() throws Exception {
-		ApplyResult result = init("Y");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "Y"), result.getUpdatedFiles()
-				.get(0));
-		checkFile(new File(db.getWorkTree(), "Y"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testModifyZ() throws Exception {
-		ApplyResult result = init("Z");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "Z"), result.getUpdatedFiles()
-				.get(0));
-		checkFile(new File(db.getWorkTree(), "Z"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testModifyNL1() throws Exception {
-		ApplyResult result = init("NL1");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NL1"), result
-				.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "NL1"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testNonASCII() throws Exception {
-		ApplyResult result = init("NonASCII");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NonASCII"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "NonASCII"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testNonASCII2() throws Exception {
-		ApplyResult result = init("NonASCII2");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NonASCII2"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "NonASCII2"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testNonASCIIAdd() throws Exception {
-		ApplyResult result = init("NonASCIIAdd");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NonASCIIAdd"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "NonASCIIAdd"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testNonASCIIAdd2() throws Exception {
-		ApplyResult result = init("NonASCIIAdd2", false, true);
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NonASCIIAdd2"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "NonASCIIAdd2"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testNonASCIIDel() throws Exception {
-		ApplyResult result = init("NonASCIIDel", true, false);
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "NonASCIIDel"),
-				result.getUpdatedFiles().get(0));
-		assertFalse(new File(db.getWorkTree(), "NonASCIIDel").exists());
-	}
-
-	@Test
-	public void testRenameNoHunks() throws Exception {
-		ApplyResult result = init("RenameNoHunks", true, true);
-		assertEquals(2, result.getUpdatedFiles().size());
-		assertTrue(result.getUpdatedFiles().contains(new File(db.getWorkTree(), "RenameNoHunks")));
-		assertTrue(result.getUpdatedFiles().contains(new File(db.getWorkTree(), "nested/subdir/Renamed")));
-		checkFile(new File(db.getWorkTree(), "nested/subdir/Renamed"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testRenameWithHunks() throws Exception {
-		ApplyResult result = init("RenameWithHunks", true, true);
-		assertEquals(2, result.getUpdatedFiles().size());
-		assertTrue(result.getUpdatedFiles().contains(new File(db.getWorkTree(), "RenameWithHunks")));
-		assertTrue(result.getUpdatedFiles().contains(new File(db.getWorkTree(), "nested/subdir/Renamed")));
-		checkFile(new File(db.getWorkTree(), "nested/subdir/Renamed"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testCopyWithHunks() throws Exception {
-		ApplyResult result = init("CopyWithHunks", true, true);
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "CopyResult"), result.getUpdatedFiles()
-				.get(0));
-		checkFile(new File(db.getWorkTree(), "CopyResult"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testShiftUp() throws Exception {
-		ApplyResult result = init("ShiftUp");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "ShiftUp"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "ShiftUp"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testShiftUp2() throws Exception {
-		ApplyResult result = init("ShiftUp2");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "ShiftUp2"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "ShiftUp2"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testShiftDown() throws Exception {
-		ApplyResult result = init("ShiftDown");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "ShiftDown"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "ShiftDown"),
-				b.getString(0, b.size(), false));
-	}
-
-	@Test
-	public void testShiftDown2() throws Exception {
-		ApplyResult result = init("ShiftDown2");
-		assertEquals(1, result.getUpdatedFiles().size());
-		assertEquals(new File(db.getWorkTree(), "ShiftDown2"),
-				result.getUpdatedFiles().get(0));
-		checkFile(new File(db.getWorkTree(), "ShiftDown2"),
-				b.getString(0, b.size(), false));
-	}
-
 	private static byte[] readFile(String patchFile) throws IOException {
 		final InputStream in = getTestResource(patchFile);
 		if (in == null) {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
index 6053c8c..63ab809 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
@@ -9,8 +9,10 @@
  */
 package org.eclipse.jgit.api;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -121,9 +123,32 @@
 	}
 
 	@Test
-	public void testCloneRepository_refLogForLocalRefs()
+	public void testCloneRepositoryNoCheckout()
 			throws IOException, JGitInternalException, GitAPIException {
-		File directory = createTempDirectory("testCloneRepository");
+		File directory = createTempDirectory("testCloneRepositoryNoCheckout");
+		CloneCommand command = Git.cloneRepository();
+		command.setDirectory(directory);
+		command.setURI(fileUri());
+		command.setNoCheckout(true);
+		try (Git git2 = command.call()) {
+			Repository clonedRepo = git2.getRepository();
+			Ref main = clonedRepo.exactRef(Constants.R_HEADS + "test");
+			assertNotNull(main);
+			ObjectId id = main.getObjectId();
+			assertNotNull(id);
+			assertNotEquals(id, ObjectId.zeroId());
+			ObjectId headId = clonedRepo.resolve(Constants.HEAD);
+			assertEquals(id, headId);
+			assertArrayEquals(new String[] { Constants.DOT_GIT },
+					directory.list());
+		}
+	}
+
+	@Test
+	public void testCloneRepositoryRefLogForLocalRefs()
+			throws IOException, JGitInternalException, GitAPIException {
+		File directory = createTempDirectory(
+				"testCloneRepositoryRefLogForLocalRefs");
 		CloneCommand command = Git.cloneRepository();
 		command.setDirectory(directory);
 		command.setURI(fileUri());
@@ -331,7 +356,8 @@
 				allRefNames(git2.branchList().setListMode(ListMode.ALL).call()));
 
 		// Same thing, but now without checkout
-		directory = createTempDirectory("testCloneRepositoryWithBranch_bare");
+		directory = createTempDirectory(
+				"testCloneRepositoryWithBranch_noCheckout");
 		command = Git.cloneRepository();
 		command.setBranch("refs/heads/master");
 		command.setDirectory(directory);
@@ -341,7 +367,8 @@
 		addRepoToClose(git2.getRepository());
 
 		assertEquals(git2.getRepository().getFullBranch(), "refs/heads/master");
-		assertEquals("refs/remotes/origin/master, refs/remotes/origin/test",
+		assertEquals(
+				"refs/heads/master, refs/remotes/origin/master, refs/remotes/origin/test",
 				allRefNames(git2.branchList().setListMode(ListMode.ALL).call()));
 
 		// Same thing, but now test with bare repo
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java
index 6f7aa63..ff5f8b7 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java
@@ -16,9 +16,12 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
 import java.util.Properties;
 
 import org.eclipse.jgit.api.errors.DetachedHeadException;
@@ -115,7 +118,7 @@
 				+ "\"\nexit 0");
 
 		try (Git git1 = new Git(db)) {
-			// create some refs via commits and tag
+			// create a commit
 			RevCommit commit = git1.commit().setMessage("initial commit").call();
 
 			RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
@@ -126,6 +129,54 @@
 		}
 	}
 
+	@Test
+	public void testPrePushHookRedirects() throws JGitInternalException,
+			IOException, GitAPIException, URISyntaxException {
+
+		// create other repository
+		Repository db2 = createWorkRepository();
+
+		// setup the first repository
+		final StoredConfig config = db.getConfig();
+		RemoteConfig remoteConfig = new RemoteConfig(config, "test");
+		URIish uri = new URIish(db2.getDirectory().toURI().toURL());
+		remoteConfig.addURI(uri);
+		remoteConfig.update(config);
+		config.save();
+
+		writeHookFile(PrePushHook.NAME, "#!/bin/sh\n"
+				+ "echo \"1:$1, 2:$2, 3:$3\"\n" // to stdout
+				+ "cat - 1>&2\n" // to stderr
+				+ "exit 0\n");
+
+		try (Git git1 = new Git(db)) {
+			// create a commit
+			RevCommit commit = git1.commit().setMessage("initial commit")
+					.call();
+
+			RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
+			try (ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
+					ByteArrayOutputStream errBytes = new ByteArrayOutputStream();
+					PrintStream stdout = new PrintStream(outBytes, true,
+							StandardCharsets.UTF_8);
+					PrintStream stderr = new PrintStream(errBytes, true,
+							StandardCharsets.UTF_8)) {
+				git1.push()
+						.setRemote("test")
+						.setRefSpecs(spec)
+						.setHookOutputStream(stdout)
+						.setHookErrorStream(stderr)
+						.call();
+				String out = outBytes.toString(StandardCharsets.UTF_8);
+				String err = errBytes.toString(StandardCharsets.UTF_8);
+				assertEquals("1:test, 2:" + uri + ", 3:\n", out);
+				assertEquals("refs/heads/master " + commit.getName()
+						+ " refs/heads/x " + ObjectId.zeroId().name() + '\n',
+						err);
+			}
+		}
+	}
+
 	private File writeHookFile(String name, String data)
 			throws IOException {
 		File path = new File(db.getWorkTree() + "/.git/hooks/", name);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/RawTextTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/RawTextTest.java
index ad14b01..48a062d 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/RawTextTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/RawTextTest.java
@@ -18,8 +18,10 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.util.RawParseUtils;
@@ -244,6 +246,38 @@
 		assertTrue(rt.isMissingNewlineAtEnd());
 	}
 
+	@Test
+	public void testCrAtLimit() throws Exception {
+		int limit = RawText.getBufferSize();
+		byte[] data = new byte[RawText.getBufferSize() + 2];
+		data[0] = 'A';
+		for (int i = 1; i < limit - 1; i++) {
+			if (i % 7 == 0) {
+				data[i] = '\n';
+			} else {
+				data[i] = (byte) ('A' + i % 7);
+			}
+		}
+		data[limit - 1] = '\r';
+		data[limit] = '\n';
+		data[limit + 1] = 'A';
+		assertTrue(RawText.isBinary(data, limit, true));
+		assertFalse(RawText.isBinary(data, limit, false));
+		assertFalse(RawText.isBinary(data, data.length, true));
+		byte[] buf = Arrays.copyOf(data, limit);
+		try (ByteArrayInputStream in = new ByteArrayInputStream(buf)) {
+			assertTrue(RawText.isBinary(in));
+		}
+		byte[] buf2 = Arrays.copyOf(data, limit + 1);
+		try (ByteArrayInputStream in = new ByteArrayInputStream(buf2)) {
+			assertFalse(RawText.isBinary(in));
+		}
+		byte[] buf3 = Arrays.copyOf(data, limit + 2);
+		try (ByteArrayInputStream in = new ByteArrayInputStream(buf3)) {
+			assertFalse(RawText.isBinary(in));
+		}
+	}
+
 	private static RawText t(String text) {
 		StringBuilder r = new StringBuilder();
 		for (int i = 0; i < text.length(); i++) {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheTest.java
index ab588cb..3dd4190 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheTest.java
@@ -289,8 +289,7 @@
 
 		assertEquals(1, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		assertEquals(1, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		// Reverse index has no pack extension, it defaults to 0.
-		assertEquals(1, cache.getMissCount()[0]);
+		assertEquals(1, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	@SuppressWarnings("resource")
@@ -319,7 +318,7 @@
 		waitForExecutorPoolTermination();
 		assertEquals(2, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		assertEquals(2, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		assertEquals(2, cache.getMissCount()[0]);
+		assertEquals(2, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	@SuppressWarnings("resource")
@@ -348,7 +347,7 @@
 		waitForExecutorPoolTermination();
 		assertEquals(2, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		assertEquals(2, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		assertEquals(2, cache.getMissCount()[0]);
+		assertEquals(2, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	@SuppressWarnings("resource")
@@ -380,7 +379,7 @@
 		assertEquals(2, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		// Index is loaded once for each repo.
 		assertEquals(2, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		assertEquals(2, cache.getMissCount()[0]);
+		assertEquals(2, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	@Test
@@ -402,7 +401,7 @@
 
 		assertEquals(1, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		assertEquals(1, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		assertEquals(1, cache.getMissCount()[0]);
+		assertEquals(1, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	@Test
@@ -426,7 +425,7 @@
 
 		assertEquals(1, cache.getMissCount()[PackExt.BITMAP_INDEX.ordinal()]);
 		assertEquals(1, cache.getMissCount()[PackExt.INDEX.ordinal()]);
-		assertEquals(1, cache.getMissCount()[0]);
+		assertEquals(1, cache.getMissCount()[PackExt.REVERSE_INDEX.ordinal()]);
 	}
 
 	private void resetCache() {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBundleWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBundleWriterTest.java
index 4238ee6..bce62b9 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBundleWriterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsBundleWriterTest.java
@@ -19,6 +19,8 @@
 import java.util.Collections;
 import java.util.Set;
 
+import org.eclipse.jgit.api.GarbageCollectCommand;
+import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.junit.TestRepository;
 import org.eclipse.jgit.lib.NullProgressMonitor;
 import org.eclipse.jgit.lib.Ref;
@@ -44,7 +46,7 @@
 	}
 
 	@Test
-	public void testRepo() throws Exception {
+	public void makeBundle_containsUnreferencedObject() throws Exception {
 		RevCommit commit0 = git.commit().message("0").create();
 		RevCommit commit1 = git.commit().message("1").parent(commit0).create();
 		git.update("master", commit1);
@@ -64,6 +66,31 @@
 		}
 	}
 
+	@Test
+	public void makeBundle_containsObjectInGcRestPack() throws Exception {
+		RevCommit commit0 = git.commit().message("0").create();
+		RevCommit commit1 = git.commit().message("1").parent(commit0).create();
+		git.update("master", commit1);
+
+		RevCommit commit2 = git.commit().message("0").create();
+
+		// This moves unreachable commit2 to GC_REST pack.
+		GarbageCollectCommand gc = Git.wrap(repo).gc();
+		gc.call();
+
+		byte[] bundle = makeBundle();
+		try (Repository newRepo = new InMemoryRepository(
+				new DfsRepositoryDescription("copy"))) {
+			fetchFromBundle(newRepo, bundle);
+			Ref ref = newRepo.exactRef("refs/heads/master");
+			assertNotNull(ref);
+			assertEquals(commit1.toObjectId(), ref.getObjectId());
+
+			// Unreferenced objects in GC_REST pack are included as well.
+			assertTrue(newRepo.getObjectDatabase().has(commit2));
+		}
+	}
+
 	private byte[] makeBundle() throws IOException {
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		DfsBundleWriter.writeEntireRepositoryAsBundle(
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstCommandTest.java
new file mode 100644
index 0000000..29819a4
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstCommandTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022, Google LLC. and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.internal.transport.parser;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Map;
+
+import org.junit.Test;
+
+public class FirstCommandTest {
+	@Test
+	public void testClientSID() {
+		String oldStr = "0000000000000000000000000000000000000000";
+		String newStr = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
+		String refName = "refs/heads/master";
+		String command = oldStr + " " + newStr + " " + refName;
+		String fl = command + "\0"
+				+ "some capabilities session-id=the-clients-SID and more unknownCap=some-value";
+		FirstCommand fc = FirstCommand.fromLine(fl);
+
+		Map<String, String> options = fc.getCapabilities();
+
+		assertEquals("the-clients-SID", options.get("session-id"));
+		assertEquals(command, fc.getLine());
+		assertTrue(options.containsKey("unknownCap"));
+		assertEquals(6, options.size());
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstWantTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstWantTest.java
index 1e8ce8e..230f6a4 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstWantTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/transport/parser/FirstWantTest.java
@@ -27,7 +27,8 @@
 	@Test
 	public void testFirstWantWithOptions() throws PackProtocolException {
 		String line = "want b9d4d1eb2f93058814480eae9e1b67550f46ee38 "
-				+ "no-progress include-tag ofs-delta agent=JGit/unknown";
+				+ "no-progress include-tag ofs-delta agent=JGit/unknown "
+				+ "session-id=the.client.sid";
 
 		FirstWant r = FirstWant.fromLine(line);
 		assertEquals("want b9d4d1eb2f93058814480eae9e1b67550f46ee38",
@@ -37,6 +38,7 @@
 				Arrays.asList("no-progress", "include-tag", "ofs-delta"));
 		assertEquals(expectedCapabilities, capabilities);
 		assertEquals("JGit/unknown", r.getAgent());
+		assertEquals("the.client.sid", r.getClientSID());
 	}
 
 	@Test
@@ -94,4 +96,12 @@
 		assertEquals(r.getCapabilities().size(), 0);
 		assertEquals("pack.age/Version", r.getAgent());
 	}
+
+	@Test
+	public void testFirstWantValidSessionID() throws PackProtocolException {
+		FirstWant r = FirstWant
+				.fromLine(makeFirstWantLine("session-id=client.session.id"));
+		assertEquals(r.getCapabilities().size(), 0);
+		assertEquals("client.session.id", r.getClientSID());
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergerTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergerTest.java
index dc119c9..022e8cd 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergerTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergerTest.java
@@ -1036,6 +1036,32 @@
 	}
 
 	/**
+	 * This is a high-level test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=535919
+	 *
+	 * The actual fix was made in {@link org.eclipse.jgit.treewalk.NameConflictTreeWalk}
+	 * and tested in {@link org.eclipse.jgit.treewalk.NameConflictTreeWalkTest#tesdDF_LastItemsInTreeHasDFConflictAndSpecialNames}.
+	 */
+	@Theory
+	public void checkMergeDoesntCrashWithSpecialFileNames(
+			MergeStrategy strategy) throws Exception {
+		Git git = Git.wrap(db);
+
+		writeTrashFile("subtree", "");
+		writeTrashFile("subtree-0", "");
+		git.add().addFilepattern("subtree").call();
+		git.add().addFilepattern("subtree-0").call();
+		RevCommit toMerge = git.commit().setMessage("commit-1").call();
+
+		git.rm().addFilepattern("subtree").call();
+		writeTrashFile("subtree/file", "");
+		git.add().addFilepattern("subtree").call();
+		RevCommit mergeTip = git.commit().setMessage("commit2").call();
+
+		ResolveMerger merger = (ResolveMerger) strategy.newMerger(db, false);
+		assertTrue(merger.merge(mergeTip, toMerge));
+	}
+
+	/**
 	 * Merging after criss-cross merges. In this case we merge together two
 	 * commits which have two equally good common ancestors
 	 *
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/patch/PatchApplierTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/patch/PatchApplierTest.java
new file mode 100644
index 0000000..aeb3e61
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/patch/PatchApplierTest.java
@@ -0,0 +1,534 @@
+/*
+ * Copyright (C) 2022, Google Inc. and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.patch;
+
+import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.PatchApplyException;
+import org.eclipse.jgit.api.errors.PatchFormatException;
+import org.eclipse.jgit.attributes.FilterCommand;
+import org.eclipse.jgit.attributes.FilterCommandFactory;
+import org.eclipse.jgit.attributes.FilterCommandRegistry;
+import org.eclipse.jgit.junit.RepositoryTestCase;
+import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.lib.ConfigConstants;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.patch.PatchApplier.Result;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevTree;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.IO;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ 		PatchApplierTest.WithWorktree. class, //
+		PatchApplierTest.InCore.class, //
+})
+public class PatchApplierTest {
+
+	public abstract static class Base extends RepositoryTestCase {
+
+		protected String name;
+
+		/** data before patching. */
+		protected byte[] preImage;
+		/** expected data after patching. */
+		protected byte[] postImage;
+
+		protected String expectedText;
+		protected RevTree baseTip;
+		public boolean inCore;
+
+		Base(boolean inCore) {
+			this.inCore = inCore;
+		}
+
+		protected void init(String aName, boolean preExists, boolean postExists)
+				throws Exception {
+			/* Patch and pre/postimage are read from data org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/ */
+			this.name = aName;
+			if (postExists) {
+				postImage = IO
+						.readWholeStream(getTestResource(name + "_PostImage"), 0)
+						.array();
+				expectedText = new String(postImage, StandardCharsets.UTF_8);
+			}
+
+			File f = new File(db.getWorkTree(), name);
+			if (preExists) {
+				preImage = IO
+						.readWholeStream(getTestResource(name + "_PreImage"), 0)
+						.array();
+				try (Git git = new Git(db)) {
+					Files.write(f.toPath(), preImage);
+					git.add().addFilepattern(name).call();
+				}
+			}
+			try (Git git = new Git(db)) {
+				RevCommit base = git.commit().setMessage("PreImage").call();
+				baseTip = base.getTree();
+			}
+		}
+
+		void init(final String aName) throws Exception {
+			init(aName, true, true);
+		}
+
+		protected Result applyPatch()
+				throws PatchApplyException, PatchFormatException, IOException {
+			InputStream patchStream = getTestResource(name + ".patch");
+			if (inCore) {
+				try (ObjectInserter oi = db.newObjectInserter()) {
+					return new PatchApplier(db, baseTip, oi).applyPatch(patchStream);
+				}
+			}
+			return new PatchApplier(db).applyPatch(patchStream);
+		}
+
+		protected static InputStream getTestResource(String patchFile) {
+			return PatchApplierTest.class.getClassLoader()
+					.getResourceAsStream("org/eclipse/jgit/diff/" + patchFile);
+		}
+		void verifyChange(Result result, String aName) throws Exception {
+			verifyChange(result, aName, true);
+		}
+
+		protected void verifyContent(Result result, String path, boolean exists) throws Exception {
+			if (inCore) {
+				byte[] output = readBlob(result.getTreeId(), path);
+				if (!exists)
+					assertNull(output);
+				else {
+					assertNotNull(output);
+					assertEquals(new String(output, StandardCharsets.UTF_8), expectedText);
+				}
+			} else {
+				File f = new File(db.getWorkTree(), path);
+				if (!exists)
+					assertFalse(f.exists());
+				else
+					checkFile(f, expectedText);
+			}
+		}
+
+		void verifyChange(Result result, String aName, boolean exists) throws Exception {
+			assertEquals(1, result.getPaths().size());
+			verifyContent(result, aName, exists);
+		}
+
+		protected byte[] readBlob(ObjectId treeish, String path) throws Exception {
+			try (TestRepository<?> tr = new TestRepository<>(db);
+					RevWalk rw = tr.getRevWalk()) {
+				db.incrementOpen();
+				RevTree tree = rw.parseTree(treeish);
+				try (TreeWalk tw = TreeWalk.forPath(db,path,tree)){
+					if (tw == null) {
+						return null;
+					}
+					return tw.getObjectReader().open(tw.getObjectId(0), OBJ_BLOB).getBytes();
+				}
+			}
+		}
+
+		protected void checkBinary(Result result, int numberOfFiles) throws Exception {
+			assertEquals(numberOfFiles, result.getPaths().size());
+			if (inCore) {
+				assertArrayEquals(postImage, readBlob(result.getTreeId(), result.getPaths().get(0)));
+			} else {
+				File f = new File(db.getWorkTree(), name);
+				assertArrayEquals(postImage, Files.readAllBytes(f.toPath()));
+			}
+		}
+
+		/* tests */
+
+		@Test
+		public void testBinaryDelta() throws Exception {
+			init("delta");
+			checkBinary(applyPatch(), 1);
+		}
+
+		@Test
+		public void testBinaryLiteral() throws Exception {
+			init("literal");
+			checkBinary(applyPatch(), 1);
+		}
+
+		@Test
+		public void testBinaryLiteralAdd() throws Exception {
+			init("literal_add", false, true);
+			checkBinary(applyPatch(), 1);
+		}
+
+		@Test
+		public void testModifyM2() throws Exception {
+			init("M2", true, true);
+
+			Result result = applyPatch();
+
+			if (!inCore && FS.DETECTED.supportsExecute()) {
+				assertEquals(1, result.getPaths().size());
+				File f = new File(db.getWorkTree(), result.getPaths().get(0));
+				assertTrue(FS.DETECTED.canExecute(f));
+			}
+
+			verifyChange(result, "M2");
+		}
+
+		@Test
+		public void testModifyM3() throws Exception {
+			init("M3", true, true);
+
+			Result result = applyPatch();
+
+			verifyChange(result, "M3");
+			if (!inCore && FS.DETECTED.supportsExecute()) {
+				File f = new File(db.getWorkTree(), result.getPaths().get(0));
+				assertFalse(FS.DETECTED.canExecute(f));
+			}
+		}
+
+		@Test
+		public void testModifyX() throws Exception {
+			init("X");
+
+			Result result = applyPatch();
+			verifyChange(result, "X");
+		}
+
+		@Test
+		public void testModifyY() throws Exception {
+			init("Y");
+
+			Result result = applyPatch();
+
+			verifyChange(result, "Y");
+		}
+
+		@Test
+		public void testModifyZ() throws Exception {
+			init("Z");
+
+			Result result = applyPatch();
+			verifyChange(result, "Z");
+		}
+
+		@Test
+		public void testNonASCII() throws Exception {
+			init("NonASCII");
+
+			Result result = applyPatch();
+			verifyChange(result, "NonASCII");
+		}
+
+		@Test
+		public void testNonASCII2() throws Exception {
+			init("NonASCII2");
+
+			Result result = applyPatch();
+			verifyChange(result, "NonASCII2");
+		}
+
+		@Test
+		public void testNonASCIIAdd() throws Exception {
+			init("NonASCIIAdd");
+
+			Result result = applyPatch();
+			verifyChange(result, "NonASCIIAdd");
+		}
+
+		@Test
+		public void testNonASCIIAdd2() throws Exception {
+			init("NonASCIIAdd2", false, true);
+
+			Result result = applyPatch();
+			verifyChange(result, "NonASCIIAdd2");
+		}
+
+		@Test
+		public void testNonASCIIDel() throws Exception {
+			init("NonASCIIDel", true, false);
+
+			Result result = applyPatch();
+			verifyChange(result, "NonASCIIDel", false);
+			assertEquals("NonASCIIDel", result.getPaths().get(0));
+		}
+
+		@Test
+		public void testRenameNoHunks() throws Exception {
+			init("RenameNoHunks", true, true);
+
+			Result result = applyPatch();
+
+			assertEquals(2, result.getPaths().size());
+			assertTrue(result.getPaths().contains("RenameNoHunks"));
+			assertTrue(result.getPaths().contains("nested/subdir/Renamed"));
+
+			verifyContent(result,"nested/subdir/Renamed", true);
+		}
+
+		@Test
+		public void testRenameWithHunks() throws Exception {
+			init("RenameWithHunks", true, true);
+
+			Result result = applyPatch();
+			assertEquals(2, result.getPaths().size());
+			assertTrue(result.getPaths().contains("RenameWithHunks"));
+			assertTrue(result.getPaths().contains("nested/subdir/Renamed"));
+
+			verifyContent(result,"nested/subdir/Renamed", true);
+		}
+
+		@Test
+		public void testCopyWithHunks() throws Exception {
+			init("CopyWithHunks", true, true);
+
+			Result result = applyPatch();
+			verifyChange(result, "CopyResult", true);
+		}
+
+		@Test
+		public void testShiftUp() throws Exception {
+			init("ShiftUp");
+
+			Result result = applyPatch();
+			verifyChange(result, "ShiftUp");
+		}
+
+		@Test
+		public void testShiftUp2() throws Exception {
+			init("ShiftUp2");
+
+			Result result = applyPatch();
+			verifyChange(result, "ShiftUp2");
+		}
+
+		@Test
+		public void testShiftDown() throws Exception {
+			init("ShiftDown");
+
+			Result result = applyPatch();
+			verifyChange(result, "ShiftDown");
+		}
+
+		@Test
+		public void testShiftDown2() throws Exception {
+			init("ShiftDown2");
+
+			Result result = applyPatch();
+			verifyChange(result, "ShiftDown2");
+		}
+	}
+
+	public static class InCore extends Base {
+
+		public InCore() {
+			super(true);
+		}
+	}
+
+	public static class WithWorktree extends Base {
+		public WithWorktree() { super(false); }
+
+		@Test
+		public void testModifyNL1() throws Exception {
+			init("NL1");
+
+			Result result = applyPatch();
+			verifyChange(result, "NL1");
+		}
+
+		@Test
+		public void testCrLf() throws Exception {
+			try {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
+				init("crlf", true, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, "crlf");
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		@Test
+		public void testCrLfOff() throws Exception {
+			try {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
+				init("crlf", true, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, "crlf");
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		@Test
+		public void testCrLfEmptyCommitted() throws Exception {
+			try {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
+				init("crlf3", true, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, "crlf3");
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		@Test
+		public void testCrLfNewFile() throws Exception {
+			try {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
+				init("crlf4", false, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, "crlf4");
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		@Test
+		public void testPatchWithCrLf() throws Exception {
+			try {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
+				init("crlf2", true, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, "crlf2");
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		@Test
+		public void testPatchWithCrLf2() throws Exception {
+			String aName = "crlf2";
+			try (Git git = new Git(db)) {
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, false);
+				init(aName, true, true);
+				db.getConfig().setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, aName);
+			} finally {
+				db.getConfig().unset(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_AUTOCRLF);
+			}
+		}
+
+		// Clean/smudge filter for testFiltering. The smudgetest test resources were
+		// created with C git using a clean filter sed -e "s/A/E/g" and the smudge
+		// filter sed -e "s/E/A/g". To keep the test independent of the presence of
+		// sed, implement this with a built-in filter.
+		private static class ReplaceFilter extends FilterCommand {
+
+			private final char toReplace;
+
+			private final char replacement;
+
+			ReplaceFilter(InputStream in, OutputStream out, char toReplace,
+					char replacement) {
+				super(in, out);
+				this.toReplace = toReplace;
+				this.replacement = replacement;
+			}
+
+			@Override
+			public int run() throws IOException {
+				int b = in.read();
+				if (b < 0) {
+					in.close();
+					out.close();
+					return -1;
+				}
+				if ((b & 0xFF) == toReplace) {
+					b = replacement;
+				}
+				out.write(b);
+				return 1;
+			}
+		}
+
+		@Test
+		public void testFiltering() throws Exception {
+			// Set up filter
+			FilterCommandFactory clean = (repo, in, out) -> new ReplaceFilter(in, out, 'A', 'E');
+			FilterCommandFactory smudge = (repo, in, out) -> new ReplaceFilter(in, out, 'E', 'A');
+			FilterCommandRegistry.register("jgit://builtin/a2e/clean", clean);
+			FilterCommandRegistry.register("jgit://builtin/a2e/smudge", smudge);
+			Config config = db.getConfig();
+			try (Git git = new Git(db)) {
+				config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
+						"clean", "jgit://builtin/a2e/clean");
+				config.setString(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
+						"smudge", "jgit://builtin/a2e/smudge");
+				write(new File(db.getWorkTree(), ".gitattributes"),
+						"smudgetest filter=a2e");
+				git.add().addFilepattern(".gitattributes").call();
+				git.commit().setMessage("Attributes").call();
+				init("smudgetest", true, true);
+
+				Result result = applyPatch();
+
+				verifyChange(result, name);
+			} finally {
+				config.unset(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
+						"clean");
+				config.unset(ConfigConstants.CONFIG_FILTER_SECTION, "a2e",
+						"smudge");
+				// Tear down filter
+				FilterCommandRegistry.unregister("jgit://builtin/a2e/clean");
+				FilterCommandRegistry.unregister("jgit://builtin/a2e/smudge");
+			}
+		}
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/PackParserTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/PackParserTest.java
index 93bedb3..f02428e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/PackParserTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/PackParserTest.java
@@ -24,6 +24,9 @@
 import java.io.InputStream;
 import java.security.MessageDigest;
 import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.zip.Deflater;
 
 import org.eclipse.jgit.errors.TooLargeObjectInPackException;
@@ -76,6 +79,49 @@
 		}
 	}
 
+	@Test
+	public void testParsePack1ReadsObjectSizes() throws IOException {
+		File packFile = JGitTestUtil.getTestResourceFile(
+				"pack-34be9032ac282b11fa9babdc2b2a93ca996c9c2f.pack");
+
+		// Sizes from git cat-file -s after unpacking in a local repo
+		Map<String, Long> expected = new HashMap<>();
+		// Commits
+		expected.put("540a36d136cf413e4b064c2b0e0a4db60f77feab",
+				Long.valueOf(191));
+		expected.put("c59759f143fb1fe21c197981df75a7ee00290799",
+				Long.valueOf(240));
+		expected.put("82c6b885ff600be425b4ea96dee75dca255b69e7",
+				Long.valueOf(245));
+
+		// Trees
+		expected.put("4b825dc642cb6eb9a060e54bf8d69288fbee4904",
+				Long.valueOf(0)); // empty
+		expected.put("902d5476fa249b7abc9d84c611577a81381f0327",
+				Long.valueOf(35));
+		expected.put("aabf2ffaec9b497f0950352b3e582d73035c2035",
+				Long.valueOf(35));
+
+		// Blobs
+		expected.put("6ff87c4664981e4397625791c8ea3bbb5f2279a3",
+				Long.valueOf(18787));
+
+		// Deltas
+		expected.put("5b6e7c66c276e7610d4a73c70ec1a1f7c1003259",
+				Long.valueOf(18009)); // delta-oid blob
+
+
+		try (InputStream is = new FileInputStream(packFile)) {
+			ObjectDirectoryPackParser p = (ObjectDirectoryPackParser) index(is);
+			p.parse(NullProgressMonitor.INSTANCE);
+			List<PackedObjectInfo> parsedObjects = p.getSortedObjectList(null);
+			for (PackedObjectInfo objInfo: parsedObjects) {
+				assertEquals(objInfo.getName(), objInfo.getFullSize(),
+						expected.get(objInfo.getName()).longValue());
+			}
+		}
+	}
+
 	/**
 	 * This is just another pack. It so happens that we have two convenient pack to
 	 * test with in the repository.
@@ -107,6 +153,39 @@
 	}
 
 	@Test
+	public void testParsePack2ReadsObjectSizes() throws IOException {
+		File packFile = JGitTestUtil.getTestResourceFile(
+				"pack-df2982f284bbabb6bdb59ee3fcc6eb0983e20371.pack");
+		Map<String, Long> expected = new HashMap<>();
+		// Deltified commit
+		expected.put("d0114ab8ac326bab30e3a657a0397578c5a1af88",
+				Long.valueOf(222));
+		// Delta of delta of commit
+		expected.put("f73b95671f326616d66b2afb3bdfcdbbce110b44",
+				Long.valueOf(221));
+		// Deltified tree
+		expected.put("be9b45333b66013bde1c7314efc50fabd9b39c6d",
+				Long.valueOf(94));
+
+		try (InputStream is = new FileInputStream(packFile)) {
+			ObjectDirectoryPackParser p = (ObjectDirectoryPackParser) index(is);
+			p.parse(NullProgressMonitor.INSTANCE);
+			List<PackedObjectInfo> parsedObjects = p.getSortedObjectList(null);
+			// Check only the interesting objects
+			int assertedObjs = 0;
+			for (PackedObjectInfo objInfo : parsedObjects) {
+				if (!expected.containsKey(objInfo.getName())) {
+					continue;
+				}
+				assertEquals(objInfo.getName(), objInfo.getFullSize(),
+						expected.get(objInfo.getName()).longValue());
+				assertedObjs += 1;
+			}
+			assertEquals(assertedObjs, expected.size());
+		}
+	}
+
+	@Test
 	public void testTinyThinPack() throws Exception {
 		RevBlob a;
 		try (TestRepository d = new TestRepository<Repository>(db)) {
@@ -150,6 +229,45 @@
 	}
 
 	@Test
+	public void testParseOfsDeltaFullSize() throws Exception {
+		final byte[] data = Constants.encode("0123456789");
+		try (TestRepository<Repository> d = new TestRepository<>(db)) {
+			db.incrementOpen();
+			assertTrue(db.getObjectDatabase().has(d.blob(data)));
+		}
+
+		TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(1024);
+		packHeader(pack, 2);
+		pack.write((Constants.OBJ_BLOB) << 4 | 10); // offset 12
+		deflate(pack, data);
+		pack.write((Constants.OBJ_OFS_DELTA) << 4 | 4); // offset 31
+		pack.write(19);
+		deflate(pack, new byte[] { 0xA, 0xB, 0x1, 'b' });
+		digest(pack);
+
+		PackParser p = index(new ByteArrayInputStream(pack.toByteArray()));
+		p.parse(NullProgressMonitor.INSTANCE);
+
+		List<PackedObjectInfo> sortedObjectList = p.getSortedObjectList(null);
+		assertEquals(sortedObjectList.size(), 2);
+
+		// Deltified comes first because they are sorted by SHA1
+		PackedObjectInfo deltifiedObj = sortedObjectList.get(0);
+		assertEquals(deltifiedObj.getName(),
+				"16646543f87fb53e30b032eec7dfc88f2e717966");
+		assertEquals(deltifiedObj.getOffset(), 31);
+		assertEquals(deltifiedObj.getType(), Constants.OBJ_BLOB);
+		assertEquals(deltifiedObj.getFullSize(), 11);
+
+		PackedObjectInfo baseObj = sortedObjectList.get(1);
+		assertEquals(baseObj.getName(),
+				"ad471007bd7f5983d273b9584e5629230150fd54");
+		assertEquals(baseObj.getOffset(), 12);
+		assertEquals(baseObj.getType(), Constants.OBJ_BLOB);
+		assertEquals(baseObj.getFullSize(), 10);
+	}
+
+	@Test
 	public void testPackWithTrailingGarbage() throws Exception {
 		RevBlob a;
 		try (TestRepository d = new TestRepository<Repository>(db)) {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV0ParserTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV0ParserTest.java
index b2a4af3..61b7fb6 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV0ParserTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV0ParserTest.java
@@ -98,6 +98,25 @@
 						"f900c8326a43303685c46b279b9f70411bff1a4b"));
 	}
 
+	@Test
+	public void testRecvWantsWithSessionID()
+			throws PackProtocolException, IOException {
+		PacketLineIn pckIn = formatAsPacketLine(String.join(" ", "want",
+				"4624442d68ee402a94364191085b77137618633e", "thin-pack",
+				"agent=JGit.test/0.0.1", "session-id=client-session-id", "\n"),
+				"want f900c8326a43303685c46b279b9f70411bff1a4b\n",
+				PacketLineIn.end());
+		ProtocolV0Parser parser = new ProtocolV0Parser(defaultConfig());
+		FetchV0Request request = parser.recvWants(pckIn);
+		assertTrue(request.getClientCapabilities()
+				.contains(GitProtocolConstants.OPTION_THIN_PACK));
+		assertEquals(1, request.getClientCapabilities().size());
+		assertEquals("client-session-id", request.getClientSID());
+		assertThat(request.getWantIds(),
+				hasOnlyObjectIds("4624442d68ee402a94364191085b77137618633e",
+						"f900c8326a43303685c46b279b9f70411bff1a4b"));
+	}
+
 	/*
 	 * First round of protocol v0 negotiation. Client send wants, no
 	 * capabilities.
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV2ParserTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV2ParserTest.java
index 167b5b7..bab4a36 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV2ParserTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ProtocolV2ParserTest.java
@@ -361,4 +361,28 @@
 		assertEquals(2, req.getRefPrefixes().size());
 		assertThat(req.getRefPrefixes(), hasItems("refs/for", "refs/heads"));
 	}
+
+	@Test
+	public void testFetchWithSessionID() throws IOException {
+		PacketLineIn pckIn = formatAsPacketLine("session-id=the.client.sid",
+				PacketLineIn.end());
+
+		ProtocolV2Parser parser = new ProtocolV2Parser(
+				ConfigBuilder.start().allowFilter().done());
+		FetchV2Request request = parser.parseFetchRequest(pckIn);
+
+		assertEquals("the.client.sid", request.getClientSID());
+	}
+
+	@Test
+	public void testLsRefsWithSessionID() throws IOException {
+		PacketLineIn pckIn = formatAsPacketLine("session-id=the.client.sid",
+				PacketLineIn.delimiter(), PacketLineIn.end());
+
+		ProtocolV2Parser parser = new ProtocolV2Parser(
+				ConfigBuilder.getDefault());
+		LsRefsV2Request req = parser.parseLsRefsRequest(pckIn);
+
+		assertEquals("the.client.sid", req.getClientSID());
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransferConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransferConfigTest.java
index d9b85fb..8dad571 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransferConfigTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransferConfigTest.java
@@ -11,6 +11,8 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import org.eclipse.jgit.lib.Config;
 import org.junit.Test;
@@ -66,4 +68,19 @@
 		TransferConfig tc = new TransferConfig(rc);
 		assertNull(tc.protocolVersion);
 	}
+
+	@Test
+	public void testParseAdvertiseSIDDefault() {
+		Config rc = new Config();
+		TransferConfig tc = new TransferConfig(rc);
+		assertFalse(tc.isAllowReceiveClientSID());
+	}
+
+	@Test
+	public void testParseAdvertiseSIDSet() {
+		Config rc = new Config();
+		rc.setBoolean("transfer", null, "advertiseSID", true);
+		TransferConfig tc = new TransferConfig(rc);
+		assertTrue(tc.isAllowReceiveClientSID());
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransportTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransportTest.java
index 5ae440f..92da340 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransportTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/TransportTest.java
@@ -242,6 +242,40 @@
 	}
 
 	@Test
+	public void testOpenPushUseBitmaps() throws Exception {
+		URIish uri = new URIish("file://" + db.getWorkTree().getAbsolutePath());
+		// default
+		try (Transport transport = Transport.open(uri)) {
+			try (PushConnection pushConnection = transport.openPush()) {
+				assertTrue(pushConnection instanceof BasePackPushConnection);
+				@SuppressWarnings("resource")
+				BasePackPushConnection basePackPushConnection = (BasePackPushConnection) pushConnection;
+				assertTrue(basePackPushConnection.isUseBitmaps());
+			}
+		}
+		// true
+		try (Transport transport = Transport.open(uri)) {
+			transport.setPushUseBitmaps(true);
+			try (PushConnection pushConnection = transport.openPush()) {
+				assertTrue(pushConnection instanceof BasePackPushConnection);
+				@SuppressWarnings("resource")
+				BasePackPushConnection basePackPushConnection = (BasePackPushConnection) pushConnection;
+				assertTrue(basePackPushConnection.isUseBitmaps());
+			}
+		}
+		// false
+		try (Transport transport = Transport.open(uri)) {
+			transport.setPushUseBitmaps(false);
+			try (PushConnection pushConnection = transport.openPush()) {
+				assertTrue(pushConnection instanceof BasePackPushConnection);
+				@SuppressWarnings("resource")
+				BasePackPushConnection basePackPushConnection = (BasePackPushConnection) pushConnection;
+				assertFalse(basePackPushConnection.isUseBitmaps());
+			}
+		}
+	}
+
+	@Test
 	public void testSpi() {
 		List<TransportProtocol> protocols = Transport.getTransportProtocols();
 		assertNotNull(protocols);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
index 2b05dec..7e6d6f2 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
@@ -2416,16 +2416,38 @@
 		RevCommit one = remote.commit().message("1").create();
 		remote.update("one", one);
 
-		UploadPack up = new UploadPack(server);
-		ByteArrayInputStream send = linesAsInputStream(
-				"want " + one.getName() + " agent=JGit-test/1.2.3\n",
-				PacketLineIn.end(),
-				"have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n");
+		try (UploadPack up = new UploadPack(server)) {
+			ByteArrayInputStream send = linesAsInputStream(
+					"want " + one.getName() + " agent=JGit-test/1.2.3\n",
+					PacketLineIn.end(),
+					"have 11cedf1b796d44207da702f7d420684022fc0f09\n",
+					"done\n");
 
-		ByteArrayOutputStream recv = new ByteArrayOutputStream();
-		up.upload(send, recv, null);
+			ByteArrayOutputStream recv = new ByteArrayOutputStream();
+			up.upload(send, recv, null);
 
-		assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.3");
+			assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.3");
+		}
+	}
+
+	@Test
+	public void testGetSessionIDValueProtocolV0() throws Exception {
+		RevCommit one = remote.commit().message("1").create();
+		remote.update("one", one);
+
+		try (UploadPack up = new UploadPack(server)) {
+			ByteArrayInputStream send = linesAsInputStream(
+					"want " + one.getName() + " agent=JGit-test/1.2.3"
+							+ " session-id=client-session-id\n",
+					PacketLineIn.end(),
+					"have 11cedf1b796d44207da702f7d420684022fc0f09\n",
+					"done\n");
+
+			ByteArrayOutputStream recv = new ByteArrayOutputStream();
+			up.upload(send, recv, null);
+
+			assertEquals(up.getClientSID(), "client-session-id");
+		}
 	}
 
 	@Test
@@ -2437,19 +2459,45 @@
 		RevCommit one = remote.commit().message("1").create();
 		remote.update("one", one);
 
-		UploadPack up = new UploadPack(server);
-		up.setExtraParameters(Sets.of("version=2"));
+		try (UploadPack up = new UploadPack(server)) {
+			up.setExtraParameters(Sets.of("version=2"));
 
-		ByteArrayInputStream send = linesAsInputStream(
-				"command=fetch\n", "agent=JGit-test/1.2.4\n",
-				PacketLineIn.delimiter(), "want " + one.getName() + "\n",
-				"have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n",
-				PacketLineIn.end());
+			ByteArrayInputStream send = linesAsInputStream("command=fetch\n",
+					"agent=JGit-test/1.2.4\n", PacketLineIn.delimiter(),
+					"want " + one.getName() + "\n",
+					"have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n",
+					PacketLineIn.end());
 
-		ByteArrayOutputStream recv = new ByteArrayOutputStream();
-		up.upload(send, recv, null);
+			ByteArrayOutputStream recv = new ByteArrayOutputStream();
+			up.upload(send, recv, null);
 
-		assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.4");
+			assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.4");
+		}
+	}
+
+	@Test
+	public void testGetSessionIDValueProtocolV2() throws Exception {
+		server.getConfig().setString(ConfigConstants.CONFIG_PROTOCOL_SECTION,
+				null, ConfigConstants.CONFIG_KEY_VERSION,
+				TransferConfig.ProtocolVersion.V2.version());
+
+		RevCommit one = remote.commit().message("1").create();
+		remote.update("one", one);
+
+		try (UploadPack up = new UploadPack(server)) {
+			up.setExtraParameters(Sets.of("version=2"));
+
+			ByteArrayInputStream send = linesAsInputStream("command=fetch\n",
+					"agent=JGit-test/1.2.4\n", "session-id=client-session-id\n",
+					PacketLineIn.delimiter(), "want " + one.getName() + "\n",
+					"have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n",
+					PacketLineIn.end());
+
+			ByteArrayOutputStream recv = new ByteArrayOutputStream();
+			up.upload(send, recv, null);
+
+			assertEquals(up.getClientSID(), "client-session-id");
+		}
 	}
 
 	private static class RejectAllRefFilter implements RefFilter {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/NameConflictTreeWalkTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/NameConflictTreeWalkTest.java
index f03163d..69d90aa 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/NameConflictTreeWalkTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/NameConflictTreeWalkTest.java
@@ -137,6 +137,177 @@
 		}
 	}
 
+	/**
+	 * The test reproduces https://bugs.eclipse.org/bugs/show_bug.cgi?id=535919.
+	 */
+	@Test
+	public void tesdDF_LastItemsInTreeHasDFConflictAndSpecialNames()
+			throws Exception {
+
+		final DirCache tree0 = db.readDirCache();
+		final DirCache tree1 = db.readDirCache();
+
+		final DirCacheBuilder b0 = tree0.builder();
+		final DirCacheBuilder b1 = tree1.builder();
+		// The tree0 has the following order in git:
+		//     subtree, subtree-0
+		b0.add(createEntry("subtree", REGULAR_FILE));
+		b0.add(createEntry("subtree-0", REGULAR_FILE));
+		// The tree1 has the following order in git:
+		//     subtree-0, subtree/file
+		b1.add(createEntry("subtree/file", REGULAR_FILE));
+		b1.add(createEntry("subtree-0", REGULAR_FILE));
+
+		b0.finish();
+		b1.finish();
+
+		try (NameConflictTreeWalk tw = new NameConflictTreeWalk(db)) {
+			tw.addTree(new DirCacheIterator(tree0));
+			tw.addTree(new DirCacheIterator(tree1));
+
+			assertModes("subtree", REGULAR_FILE, TREE, tw);
+			assertTrue(tw.isSubtree());
+			assertTrue(tw.isDirectoryFileConflict());
+			tw.enterSubtree();
+			assertModes("subtree/file", MISSING, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			// isDirectoryFileConflict is true, because the conflict is detected
+			// on parent.
+			assertTrue(tw.isDirectoryFileConflict());
+			assertModes("subtree-0", REGULAR_FILE, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			assertFalse(tw.isDirectoryFileConflict());
+			assertFalse(tw.next());
+		}
+	}
+
+	/**
+	 * The test reproduces https://bugs.eclipse.org/bugs/show_bug.cgi?id=535919.
+	 */
+	@Test
+	public void tesdDF_LastItemsInTreeHasDFConflictAndSpecialNames2()
+			throws Exception {
+
+		final DirCache tree0 = db.readDirCache();
+		final DirCache tree1 = db.readDirCache();
+
+		final DirCacheBuilder b0 = tree0.builder();
+		final DirCacheBuilder b1 = tree1.builder();
+		// The tree0 has the following order in git:
+		//     subtree-0, subtree/file
+		b0.add(createEntry("subtree/file", REGULAR_FILE));
+		b0.add(createEntry("subtree-0", REGULAR_FILE));
+		// The tree1 has the following order in git:
+		//     subtree, subtree-0
+		b1.add(createEntry("subtree", REGULAR_FILE));
+		b1.add(createEntry("subtree-0", REGULAR_FILE));
+
+		b0.finish();
+		b1.finish();
+
+		try (NameConflictTreeWalk tw = new NameConflictTreeWalk(db)) {
+			tw.addTree(new DirCacheIterator(tree0));
+			tw.addTree(new DirCacheIterator(tree1));
+
+			assertModes("subtree", TREE, REGULAR_FILE, tw);
+			assertTrue(tw.isSubtree());
+			assertTrue(tw.isDirectoryFileConflict());
+			tw.enterSubtree();
+			assertModes("subtree/file", REGULAR_FILE, MISSING, tw);
+			assertFalse(tw.isSubtree());
+			// isDirectoryFileConflict is true, because the conflict is detected
+			// on parent.
+			assertTrue(tw.isDirectoryFileConflict());
+			assertModes("subtree-0", REGULAR_FILE, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			assertFalse(tw.isDirectoryFileConflict());
+			assertFalse(tw.next());
+		}
+	}
+
+	@Test
+	public void tesdDF_NonLastItemsInTreeHasDFConflictAndSpecialNames()
+			throws Exception {
+		final DirCache tree0 = db.readDirCache();
+		final DirCache tree1 = db.readDirCache();
+
+		final DirCacheBuilder b0 = tree0.builder();
+		final DirCacheBuilder b1 = tree1.builder();
+		b0.add(createEntry("subtree", REGULAR_FILE));
+		b0.add(createEntry("subtree-0", REGULAR_FILE));
+		b0.add(createEntry("x", REGULAR_FILE));
+
+		b1.add(createEntry("subtree/file", REGULAR_FILE));
+		b1.add(createEntry("subtree-0", REGULAR_FILE));
+		b1.add(createEntry("x", REGULAR_FILE));
+
+		b0.finish();
+		b1.finish();
+
+		try (NameConflictTreeWalk tw = new NameConflictTreeWalk(db)) {
+			tw.addTree(new DirCacheIterator(tree0));
+			tw.addTree(new DirCacheIterator(tree1));
+
+			assertModes("subtree", REGULAR_FILE, TREE, tw);
+			assertTrue(tw.isSubtree());
+			assertTrue(tw.isDirectoryFileConflict());
+			tw.enterSubtree();
+			assertModes("subtree/file", MISSING, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			// isDirectoryFileConflict is true, because the conflict is detected
+			// on parent.
+			// see JavaDoc for isDirectoryFileConflict for details
+			assertTrue(tw.isDirectoryFileConflict());
+			assertModes("subtree-0", REGULAR_FILE, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			assertFalse(tw.isDirectoryFileConflict());
+			assertModes("x", REGULAR_FILE, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			assertFalse(tw.isDirectoryFileConflict());
+			assertFalse(tw.next());
+		}
+	}
+
+	@Test
+	public void tesdDF_NoSpecialNames() throws Exception {
+		final DirCache tree0 = db.readDirCache();
+		final DirCache tree1 = db.readDirCache();
+
+		final DirCacheBuilder b0 = tree0.builder();
+		final DirCacheBuilder b1 = tree1.builder();
+		// In this test both trees (tree0 and tree1) have exactly the same order
+		// of entries:
+		//     subtree, xubtree-0
+		b0.add(createEntry("subtree", REGULAR_FILE));
+		b0.add(createEntry("xubtree-0", REGULAR_FILE));
+
+		b1.add(createEntry("subtree/file", REGULAR_FILE));
+		b1.add(createEntry("xubtree-0", REGULAR_FILE));
+
+		b0.finish();
+		b1.finish();
+
+		try (NameConflictTreeWalk tw = new NameConflictTreeWalk(db)) {
+			tw.addTree(new DirCacheIterator(tree0));
+			tw.addTree(new DirCacheIterator(tree1));
+
+			assertModes("subtree", REGULAR_FILE, TREE, tw);
+			assertTrue(tw.isSubtree());
+			assertTrue(tw.isDirectoryFileConflict());
+			tw.enterSubtree();
+			assertModes("subtree/file", MISSING, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			// isDirectoryFileConflict is true, because the conflict is detected
+			// on parent.
+			// see JavaDoc for isDirectoryFileConflict for details
+			assertTrue(tw.isDirectoryFileConflict());
+			assertModes("xubtree-0", REGULAR_FILE, REGULAR_FILE, tw);
+			assertFalse(tw.isSubtree());
+			assertFalse(tw.isDirectoryFileConflict());
+			assertFalse(tw.next());
+		}
+	}
+
 	@Test
 	public void testDF_specialFileNames() throws Exception {
 		final DirCache tree0 = db.readDirCache();
diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
index 3552ffb..0d3324d 100644
--- a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
@@ -4,14 +4,14 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ui
 Bundle-SymbolicName: org.eclipse.jgit.ui
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.awtui;version="6.3.1"
-Import-Package: org.eclipse.jgit.errors;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.lib;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.nls;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revplot;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.revwalk;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.transport;version="[6.3.1,6.4.0)",
- org.eclipse.jgit.util;version="[6.3.1,6.4.0)"
+Export-Package: org.eclipse.jgit.awtui;version="6.4.1"
+Import-Package: org.eclipse.jgit.errors;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.lib;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.nls;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revplot;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.revwalk;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.transport;version="[6.4.1,6.5.0)",
+ org.eclipse.jgit.util;version="[6.4.1,6.5.0)"
diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
index 147b1e4..4700584 100644
--- a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ui - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ui.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml
index fce6d4d..a46fdbc 100644
--- a/org.eclipse.jgit.ui/pom.xml
+++ b/org.eclipse.jgit.ui/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ui</artifactId>
diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters
deleted file mode 100644
index dfb788c..0000000
--- a/org.eclipse.jgit/.settings/.api_filters
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jgit" version="2">
-    <resource path="src/org/eclipse/jgit/api/GarbageCollectCommand.java" type="org.eclipse.jgit.api.GarbageCollectCommand">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="setPackKeptObjects(boolean)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/errors/PackMismatchException.java" type="org.eclipse.jgit.errors.PackMismatchException">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.9.1"/>
-                <message_argument value="isPermanent()"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.9.1"/>
-                <message_argument value="setPermanent(boolean)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/lib/ConfigConstants.java" type="org.eclipse.jgit.lib.ConfigConstants">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="CONFIG_KEY_BITMAP_EXCLUDED_REFS_PREFIXES"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="CONFIG_KEY_PRESERVE_OLD_PACKS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="CONFIG_KEY_PRUNE_PRESERVED"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="CONFIG_KEY_SKIPHASH"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="SHA1_IMPLEMENTATION"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="CONFIG_KEY_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="CONFIG_REPACK_SECTION"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="6.1.1"/>
-                <message_argument value="CONFIG_KEY_TRUST_PACKED_REFS_STAT"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/lib/CoreConfig.java" type="org.eclipse.jgit.lib.CoreConfig$TrustPackedRefsStat">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="6.1.1"/>
-                <message_argument value="TrustPackedRefsStat"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/lib/Repository.java" type="org.eclipse.jgit.lib.Repository">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="getReflogReader(Ref)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/merge/ResolveMerger.java" type="org.eclipse.jgit.merge.ResolveMerger">
-        <filter id="336658481">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="workTreeUpdater"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="builder"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="implicitDirCache"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="toBeCheckedOut"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="toBeDeleted"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="workingTreeOptions"/>
-            </message_arguments>
-        </filter>
-        <filter id="338792546">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="addCheckoutMetadata(Map&lt;String,DirCacheCheckout.CheckoutMetadata&gt;, String, Attributes)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338792546">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.merge.ResolveMerger"/>
-                <message_argument value="cleanUp()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/merge/ResolveMerger.java" type="org.eclipse.jgit.merge.ResolveMerger$WorkTreeUpdater">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="6.3.1"/>
-                <message_argument value="WorkTreeUpdater"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/storage/pack/PackConfig.java" type="org.eclipse.jgit.storage.pack.PackConfig">
-        <filter id="336658481">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.storage.pack.PackConfig"/>
-                <message_argument value="DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES"/>
-            </message_arguments>
-        </filter>
-        <filter id="336658481">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.storage.pack.PackConfig"/>
-                <message_argument value="DEFAULT_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="getBitmapExcludedRefsPrefixes()"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="setBitmapExcludedRefsPrefixes(String[])"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="DEFAULT_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="isPackKeptObjects()"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="setPackKeptObjects(boolean)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/transport/AwsRequestSignerV4.java" type="org.eclipse.jgit.transport.AwsRequestSignerV4">
-        <filter id="1109393411">
-            <message_arguments>
-                <message_argument value="5.13.1"/>
-                <message_argument value="org.eclipse.jgit.transport.AwsRequestSignerV4"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/util/HttpSupport.java" type="org.eclipse.jgit.util.HttpSupport">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.1"/>
-                <message_argument value="urlEncode(String, boolean)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/util/Paths.java" type="org.eclipse.jgit.util.Paths">
-        <filter id="337768515">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.Paths"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/util/sha1/SHA1.java" type="org.eclipse.jgit.util.sha1.SHA1">
-        <filter id="337764418">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="digest()"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="digest(MutableObjectId)"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="hasCollision()"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="reset()"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="setDetectCollision(boolean)"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="toObjectId()"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="update(byte)"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="update(byte[])"/>
-            </message_arguments>
-        </filter>
-        <filter id="421650549">
-            <message_arguments>
-                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
-                <message_argument value="update(byte[], int, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/util/sha1/SHA1.java" type="org.eclipse.jgit.util.sha1.SHA1$Sha1Implementation">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.2"/>
-                <message_argument value="Sha1Implementation"/>
-            </message_arguments>
-        </filter>
-    </resource>
-</component>
diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF
index 307a801..7f18cfb 100644
--- a/org.eclipse.jgit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/MANIFEST.MF
@@ -3,12 +3,12 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit
 Bundle-SymbolicName: org.eclipse.jgit
-Bundle-Version: 6.3.1.qualifier
+Bundle-Version: 6.4.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Eclipse-ExtensibleAPI: true
-Export-Package: org.eclipse.jgit.annotations;version="6.3.1",
- org.eclipse.jgit.api;version="6.3.1";
+Export-Package: org.eclipse.jgit.annotations;version="6.4.1",
+ org.eclipse.jgit.api;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.notes,
    org.eclipse.jgit.dircache,
@@ -23,18 +23,18 @@
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.blame,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.api.errors;version="6.3.1";
+ org.eclipse.jgit.api.errors;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.attributes;version="6.3.1";
+ org.eclipse.jgit.attributes;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.blame;version="6.3.1";
+ org.eclipse.jgit.blame;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.diff;version="6.3.1";
+ org.eclipse.jgit.diff;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.revwalk,
@@ -42,51 +42,51 @@
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.dircache;version="6.3.1";
+ org.eclipse.jgit.dircache;version="6.4.1";
   uses:="org.eclipse.jgit.events,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.errors;version="6.3.1";
+ org.eclipse.jgit.errors;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.internal.storage.pack",
- org.eclipse.jgit.events;version="6.3.1";
+ org.eclipse.jgit.events;version="6.4.1";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.fnmatch;version="6.3.1",
- org.eclipse.jgit.gitrepo;version="6.3.1";
+ org.eclipse.jgit.fnmatch;version="6.4.1",
+ org.eclipse.jgit.gitrepo;version="6.4.1";
   uses:="org.xml.sax.helpers,
    org.eclipse.jgit.api,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.xml.sax",
- org.eclipse.jgit.gitrepo.internal;version="6.3.1";x-internal:=true,
- org.eclipse.jgit.hooks;version="6.3.1";uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.ignore;version="6.3.1",
- org.eclipse.jgit.ignore.internal;version="6.3.1";
+ org.eclipse.jgit.gitrepo.internal;version="6.4.1";x-internal:=true,
+ org.eclipse.jgit.hooks;version="6.4.1";uses:="org.eclipse.jgit.lib",
+ org.eclipse.jgit.ignore;version="6.4.1",
+ org.eclipse.jgit.ignore.internal;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal;version="6.3.1";
+ org.eclipse.jgit.internal;version="6.4.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.test",
- org.eclipse.jgit.internal.diff;version="6.3.1";
+ org.eclipse.jgit.internal.diff;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.diffmergetool;version="6.3.1";
+ org.eclipse.jgit.internal.diffmergetool;version="6.4.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.pgm,
    org.eclipse.egit.ui",
- org.eclipse.jgit.internal.fsck;version="6.3.1";
+ org.eclipse.jgit.internal.fsck;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.revwalk;version="6.3.1";
+ org.eclipse.jgit.internal.revwalk;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.dfs;version="6.3.1";
+ org.eclipse.jgit.internal.storage.dfs;version="6.4.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.server,
    org.eclipse.jgit.http.test,
    org.eclipse.jgit.lfs.test",
- org.eclipse.jgit.internal.storage.file;version="6.3.1";
+ org.eclipse.jgit.internal.storage.file;version="6.4.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.junit.http,
@@ -95,32 +95,32 @@
    org.eclipse.jgit.pgm,
    org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.ssh.apache",
- org.eclipse.jgit.internal.storage.io;version="6.3.1";
+ org.eclipse.jgit.internal.storage.io;version="6.4.1";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.pack;version="6.3.1";
+ org.eclipse.jgit.internal.storage.pack;version="6.4.1";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.reftable;version="6.3.1";
+ org.eclipse.jgit.internal.storage.reftable;version="6.4.1";
   x-friends:="org.eclipse.jgit.http.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.submodule;version="6.3.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.connectivity;version="6.3.1";
+ org.eclipse.jgit.internal.submodule;version="6.4.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.connectivity;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.http;version="6.3.1";
+ org.eclipse.jgit.internal.transport.http;version="6.4.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.parser;version="6.3.1";
+ org.eclipse.jgit.internal.transport.parser;version="6.4.1";
   x-friends:="org.eclipse.jgit.http.server,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.ssh;version="6.3.1";
+ org.eclipse.jgit.internal.transport.ssh;version="6.4.1";
   x-friends:="org.eclipse.jgit.ssh.apache,
    org.eclipse.jgit.ssh.jsch,
    org.eclipse.jgit.test",
- org.eclipse.jgit.lib;version="6.3.1";
+ org.eclipse.jgit.lib;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.sha1,
    org.eclipse.jgit.dircache,
@@ -134,12 +134,12 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.submodule,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.lib.internal;version="6.3.1";
+ org.eclipse.jgit.lib.internal;version="6.4.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.pgm,
    org.eclipse.egit.ui",
- org.eclipse.jgit.logging;version="6.3.1",
- org.eclipse.jgit.merge;version="6.3.1";
+ org.eclipse.jgit.logging;version="6.4.1",
+ org.eclipse.jgit.merge;version="6.4.1";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -148,40 +148,40 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.api,
    org.eclipse.jgit.attributes",
- org.eclipse.jgit.nls;version="6.3.1",
- org.eclipse.jgit.notes;version="6.3.1";
+ org.eclipse.jgit.nls;version="6.4.1",
+ org.eclipse.jgit.notes;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.patch;version="6.3.1";
+ org.eclipse.jgit.patch;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.revplot;version="6.3.1";
+ org.eclipse.jgit.revplot;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk",
- org.eclipse.jgit.revwalk;version="6.3.1";
+ org.eclipse.jgit.revwalk;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.revwalk.filter;version="6.3.1";
+ org.eclipse.jgit.revwalk.filter;version="6.4.1";
   uses:="org.eclipse.jgit.revwalk,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.file;version="6.3.1";
+ org.eclipse.jgit.storage.file;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.pack;version="6.3.1";
+ org.eclipse.jgit.storage.pack;version="6.4.1";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.submodule;version="6.3.1";
+ org.eclipse.jgit.submodule;version="6.4.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.transport;version="6.3.1";
+ org.eclipse.jgit.transport;version="6.4.1";
   uses:="javax.crypto,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.lib,
@@ -194,21 +194,21 @@
    org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.storage.pack,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.transport.http;version="6.3.1";
+ org.eclipse.jgit.transport.http;version="6.4.1";
   uses:="javax.net.ssl",
- org.eclipse.jgit.transport.resolver;version="6.3.1";
+ org.eclipse.jgit.transport.resolver;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.treewalk;version="6.3.1";
+ org.eclipse.jgit.treewalk;version="6.4.1";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.util",
- org.eclipse.jgit.treewalk.filter;version="6.3.1";
+ org.eclipse.jgit.treewalk.filter;version="6.4.1";
   uses:="org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util;version="6.3.1";
+ org.eclipse.jgit.util;version="6.4.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.hooks,
    org.eclipse.jgit.revwalk,
@@ -221,12 +221,12 @@
    org.eclipse.jgit.treewalk,
    javax.net.ssl,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.util.io;version="6.3.1";
+ org.eclipse.jgit.util.io;version="6.4.1";
   uses:="org.eclipse.jgit.attributes,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util.sha1;version="6.3.1",
- org.eclipse.jgit.util.time;version="6.3.1"
+ org.eclipse.jgit.util.sha1;version="6.4.1",
+ org.eclipse.jgit.util.time;version="6.4.1"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)",
  javax.crypto,
diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
index 43e88e5..28f3fa1 100644
--- a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.3.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit;version="6.3.1.qualifier";roots="."
+Bundle-Version: 6.4.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit;version="6.4.1.qualifier";roots="."
diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml
index 7e6bc0a..1a33e72 100644
--- a/org.eclipse.jgit/pom.xml
+++ b/org.eclipse.jgit/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>6.3.1-SNAPSHOT</version>
+    <version>6.4.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit</artifactId>
diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
index fedb7f5..2460c15 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -14,7 +14,9 @@
 anExceptionOccurredWhileTryingToAddTheIdOfHEAD=An exception occurred while trying to add the Id of HEAD
 anSSHSessionHasBeenAlreadyCreated=An SSH session has been already created
 applyBinaryBaseOidWrong=Cannot apply binary patch; OID for file {0} does not match
+applyBinaryForInCoreNotSupported=Applying binary patch for inCore repositories is not yet supported
 applyBinaryOidTooShort=Binary patch for file {0} does not have full IDs
+applyBinaryPatchTypeNotSupported=Couldn't apply binary patch of type {0}
 applyBinaryResultOidWrong=Result of binary patch for file {0} has wrong OID.
 applyingCommit=Applying {0}
 archiveFormatAlreadyAbsent=Archive format already absent: {0}
@@ -156,6 +158,7 @@
 connectionTimeOut=Connection time out: {0}
 contextMustBeNonNegative=context must be >= 0
 cookieFilePathRelative=git config http.cookieFile contains a relative path, should be absolute: {0}
+copyFileFailedNullFiles=Cannot copy file. Either origin or destination files are null
 corruptionDetectedReReadingAt=Corruption detected re-reading at {0}
 corruptObjectBadDate=bad date
 corruptObjectBadEmail=bad email
@@ -630,6 +633,7 @@
 renameBranchUnexpectedResult=Unexpected rename result {0}
 renameCancelled=Rename detection was cancelled
 renameFileFailed=Could not rename file {0} to {1}
+renameFileFailedNullFiles=Cannot rename file. Either origin or destination files are null
 renamesAlreadyFound=Renames have already been found.
 renamesBreakingModifies=Breaking apart modified file pairs
 renamesFindingByContent=Finding renames by content similarity
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java
index e7f40d8..49f225f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java
@@ -9,62 +9,13 @@
  */
 package org.eclipse.jgit.api;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.InflaterInputStream;
-import org.eclipse.jgit.api.errors.FilterFailedException;
 import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.api.errors.PatchApplyException;
-import org.eclipse.jgit.api.errors.PatchFormatException;
-import org.eclipse.jgit.attributes.FilterCommand;
-import org.eclipse.jgit.attributes.FilterCommandRegistry;
-import org.eclipse.jgit.diff.DiffEntry.ChangeType;
-import org.eclipse.jgit.diff.RawText;
-import org.eclipse.jgit.dircache.DirCache;
-import org.eclipse.jgit.dircache.DirCacheCheckout;
-import org.eclipse.jgit.dircache.DirCacheCheckout.CheckoutMetadata;
-import org.eclipse.jgit.dircache.DirCacheIterator;
 import org.eclipse.jgit.internal.JGitText;
-import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.CoreConfig.EolStreamType;
-import org.eclipse.jgit.lib.FileMode;
-import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.patch.BinaryHunk;
-import org.eclipse.jgit.patch.FileHeader;
-import org.eclipse.jgit.patch.FileHeader.PatchType;
-import org.eclipse.jgit.patch.HunkHeader;
-import org.eclipse.jgit.patch.Patch;
-import org.eclipse.jgit.treewalk.FileTreeIterator;
-import org.eclipse.jgit.treewalk.TreeWalk;
-import org.eclipse.jgit.treewalk.TreeWalk.OperationType;
-import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
-import org.eclipse.jgit.treewalk.filter.NotIgnoredFilter;
-import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
-import org.eclipse.jgit.util.FS;
-import org.eclipse.jgit.util.FS.ExecutionResult;
-import org.eclipse.jgit.util.FileUtils;
-import org.eclipse.jgit.util.IO;
-import org.eclipse.jgit.util.RawParseUtils;
-import org.eclipse.jgit.util.StringUtils;
-import org.eclipse.jgit.util.TemporaryBuffer;
-import org.eclipse.jgit.util.TemporaryBuffer.LocalFile;
-import org.eclipse.jgit.util.io.BinaryDeltaInputStream;
-import org.eclipse.jgit.util.io.BinaryHunkInputStream;
-import org.eclipse.jgit.util.io.EolStreamTypeUtil;
-import org.eclipse.jgit.util.sha1.SHA1;
+import org.eclipse.jgit.patch.PatchApplier;
+import org.eclipse.jgit.patch.PatchApplier.Result;
 
 /**
  * Apply a patch to files and/or to the index.
@@ -80,10 +31,13 @@
 	/**
 	 * Constructs the command.
 	 *
-	 * @param repo
+	 * @param local
 	 */
-	ApplyCommand(Repository repo) {
-		super(repo);
+	ApplyCommand(Repository local) {
+		super(local);
+		if (local == null) {
+			throw new NullPointerException(JGitText.get().repositoryIsRequired);
+		}
 	}
 
 	/**
@@ -101,6 +55,7 @@
 
 	/**
 	 * {@inheritDoc}
+	 *
 	 * <p>
 	 * Executes the {@code ApplyCommand} command with all the options and
 	 * parameters collected by the setter methods (e.g.
@@ -109,621 +64,15 @@
 	 * method twice on an instance.
 	 */
 	@Override
-	public ApplyResult call() throws GitAPIException, PatchFormatException,
-			PatchApplyException {
+	public ApplyResult call() throws GitAPIException {
 		checkCallable();
 		setCallable(false);
 		ApplyResult r = new ApplyResult();
-		try {
-			final Patch p = new Patch();
-			try {
-				p.parse(in);
-			} finally {
-				in.close();
-			}
-			if (!p.getErrors().isEmpty()) {
-				throw new PatchFormatException(p.getErrors());
-			}
-			Repository repository = getRepository();
-			DirCache cache = repository.readDirCache();
-			for (FileHeader fh : p.getFiles()) {
-				ChangeType type = fh.getChangeType();
-				File f = null;
-				switch (type) {
-				case ADD:
-					f = getFile(fh.getNewPath(), true);
-					apply(repository, fh.getNewPath(), cache, f, fh);
-					break;
-				case MODIFY:
-					f = getFile(fh.getOldPath(), false);
-					apply(repository, fh.getOldPath(), cache, f, fh);
-					break;
-				case DELETE:
-					f = getFile(fh.getOldPath(), false);
-					if (!f.delete())
-						throw new PatchApplyException(MessageFormat.format(
-								JGitText.get().cannotDeleteFile, f));
-					break;
-				case RENAME:
-					f = getFile(fh.getOldPath(), false);
-					File dest = getFile(fh.getNewPath(), false);
-					try {
-						FileUtils.mkdirs(dest.getParentFile(), true);
-						FileUtils.rename(f, dest,
-								StandardCopyOption.ATOMIC_MOVE);
-					} catch (IOException e) {
-						throw new PatchApplyException(MessageFormat.format(
-								JGitText.get().renameFileFailed, f, dest), e);
-					}
-					apply(repository, fh.getOldPath(), cache, dest, fh);
-					r.addUpdatedFile(dest);
-					break;
-				case COPY:
-					File src = getFile(fh.getOldPath(), false);
-					f = getFile(fh.getNewPath(), false);
-					FileUtils.mkdirs(f.getParentFile(), true);
-					Files.copy(src.toPath(), f.toPath());
-					apply(repository, fh.getOldPath(), cache, f, fh);
-				}
-				r.addUpdatedFile(f);
-			}
-		} catch (IOException e) {
-			throw new PatchApplyException(MessageFormat.format(
-					JGitText.get().patchApplyException, e.getMessage()), e);
+		PatchApplier patchApplier = new PatchApplier(repo);
+		Result applyResult = patchApplier.applyPatch(in);
+		for (String p : applyResult.getPaths()) {
+			r.addUpdatedFile(new File(repo.getWorkTree(), p));
 		}
 		return r;
 	}
-
-	private File getFile(String path, boolean create)
-			throws PatchApplyException {
-		File f = new File(getRepository().getWorkTree(), path);
-		if (create) {
-			try {
-				File parent = f.getParentFile();
-				FileUtils.mkdirs(parent, true);
-				FileUtils.createNewFile(f);
-			} catch (IOException e) {
-				throw new PatchApplyException(MessageFormat.format(
-						JGitText.get().createNewFileFailed, f), e);
-			}
-		}
-		return f;
-	}
-
-	private void apply(Repository repository, String path, DirCache cache,
-			File f, FileHeader fh) throws IOException, PatchApplyException {
-		if (PatchType.BINARY.equals(fh.getPatchType())) {
-			return;
-		}
-		boolean convertCrLf = needsCrLfConversion(f, fh);
-		// Use a TreeWalk with a DirCacheIterator to pick up the correct
-		// clean/smudge filters. CR-LF handling is completely determined by
-		// whether the file or the patch have CR-LF line endings.
-		try (TreeWalk walk = new TreeWalk(repository)) {
-			walk.setOperationType(OperationType.CHECKIN_OP);
-			FileTreeIterator files = new FileTreeIterator(repository);
-			int fileIdx = walk.addTree(files);
-			int cacheIdx = walk.addTree(new DirCacheIterator(cache));
-			files.setDirCacheIterator(walk, cacheIdx);
-			walk.setFilter(AndTreeFilter.create(
-					PathFilterGroup.createFromStrings(path),
-					new NotIgnoredFilter(fileIdx)));
-			walk.setRecursive(true);
-			if (walk.next()) {
-				// If the file on disk has no newline characters, convertCrLf
-				// will be false. In that case we want to honor the normal git
-				// settings.
-				EolStreamType streamType = convertCrLf ? EolStreamType.TEXT_CRLF
-						: walk.getEolStreamType(OperationType.CHECKOUT_OP);
-				String command = walk.getFilterCommand(
-						Constants.ATTR_FILTER_TYPE_SMUDGE);
-				CheckoutMetadata checkOut = new CheckoutMetadata(streamType, command);
-				FileTreeIterator file = walk.getTree(fileIdx,
-						FileTreeIterator.class);
-				if (file != null) {
-					if (PatchType.GIT_BINARY.equals(fh.getPatchType())) {
-						applyBinary(repository, path, f, fh,
-								file::openEntryStream, file.getEntryObjectId(),
-								checkOut);
-					} else {
-						command = walk.getFilterCommand(
-								Constants.ATTR_FILTER_TYPE_CLEAN);
-						RawText raw;
-						// Can't use file.openEntryStream() as it would do CR-LF
-						// conversion as usual, not as wanted by us.
-						try (InputStream input = filterClean(repository, path,
-								new FileInputStream(f), convertCrLf, command)) {
-							raw = new RawText(
-									IO.readWholeStream(input, 0).array());
-						}
-						applyText(repository, path, raw, f, fh, checkOut);
-					}
-					return;
-				}
-			}
-		}
-		// File ignored?
-		RawText raw;
-		CheckoutMetadata checkOut;
-		if (PatchType.GIT_BINARY.equals(fh.getPatchType())) {
-			checkOut = new CheckoutMetadata(EolStreamType.DIRECT, null);
-			applyBinary(repository, path, f, fh, () -> new FileInputStream(f),
-					null, checkOut);
-		} else {
-			if (convertCrLf) {
-				try (InputStream input = EolStreamTypeUtil.wrapInputStream(
-						new FileInputStream(f), EolStreamType.TEXT_LF)) {
-					raw = new RawText(IO.readWholeStream(input, 0).array());
-				}
-				checkOut = new CheckoutMetadata(EolStreamType.TEXT_CRLF, null);
-			} else {
-				raw = new RawText(f);
-				checkOut = new CheckoutMetadata(EolStreamType.DIRECT, null);
-			}
-			applyText(repository, path, raw, f, fh, checkOut);
-		}
-	}
-
-	private boolean needsCrLfConversion(File f, FileHeader fileHeader)
-			throws IOException {
-		if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
-			return false;
-		}
-		if (!hasCrLf(fileHeader)) {
-			try (InputStream input = new FileInputStream(f)) {
-				return RawText.isCrLfText(input);
-			}
-		}
-		return false;
-	}
-
-	private static boolean hasCrLf(FileHeader fileHeader) {
-		if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
-			return false;
-		}
-		for (HunkHeader header : fileHeader.getHunks()) {
-			byte[] buf = header.getBuffer();
-			int hunkEnd = header.getEndOffset();
-			int lineStart = header.getStartOffset();
-			while (lineStart < hunkEnd) {
-				int nextLineStart = RawParseUtils.nextLF(buf, lineStart);
-				if (nextLineStart > hunkEnd) {
-					nextLineStart = hunkEnd;
-				}
-				if (nextLineStart <= lineStart) {
-					break;
-				}
-				if (nextLineStart - lineStart > 1) {
-					char first = (char) (buf[lineStart] & 0xFF);
-					if (first == ' ' || first == '-') {
-						// It's an old line. Does it end in CR-LF?
-						if (buf[nextLineStart - 2] == '\r') {
-							return true;
-						}
-					}
-				}
-				lineStart = nextLineStart;
-			}
-		}
-		return false;
-	}
-
-	private InputStream filterClean(Repository repository, String path,
-			InputStream fromFile, boolean convertCrLf, String filterCommand)
-			throws IOException {
-		InputStream input = fromFile;
-		if (convertCrLf) {
-			input = EolStreamTypeUtil.wrapInputStream(input,
-					EolStreamType.TEXT_LF);
-		}
-		if (StringUtils.isEmptyOrNull(filterCommand)) {
-			return input;
-		}
-		if (FilterCommandRegistry.isRegistered(filterCommand)) {
-			LocalFile buffer = new TemporaryBuffer.LocalFile(null);
-			FilterCommand command = FilterCommandRegistry.createFilterCommand(
-					filterCommand, repository, input, buffer);
-			while (command.run() != -1) {
-				// loop as long as command.run() tells there is work to do
-			}
-			return buffer.openInputStreamWithAutoDestroy();
-		}
-		FS fs = repository.getFS();
-		ProcessBuilder filterProcessBuilder = fs.runInShell(filterCommand,
-				new String[0]);
-		filterProcessBuilder.directory(repository.getWorkTree());
-		filterProcessBuilder.environment().put(Constants.GIT_DIR_KEY,
-				repository.getDirectory().getAbsolutePath());
-		ExecutionResult result;
-		try {
-			result = fs.execute(filterProcessBuilder, in);
-		} catch (IOException | InterruptedException e) {
-			throw new IOException(
-					new FilterFailedException(e, filterCommand, path));
-		}
-		int rc = result.getRc();
-		if (rc != 0) {
-			throw new IOException(new FilterFailedException(rc, filterCommand,
-					path, result.getStdout().toByteArray(4096), RawParseUtils
-							.decode(result.getStderr().toByteArray(4096))));
-		}
-		return result.getStdout().openInputStreamWithAutoDestroy();
-	}
-
-	private void initHash(SHA1 hash, long size) {
-		hash.update(Constants.encodedTypeString(Constants.OBJ_BLOB));
-		hash.update((byte) ' ');
-		hash.update(Constants.encodeASCII(size));
-		hash.update((byte) 0);
-	}
-
-	private ObjectId hash(File f) throws IOException {
-		SHA1 hash = SHA1.newInstance();
-		initHash(hash, f.length());
-		try (InputStream input = new FileInputStream(f)) {
-			byte[] buf = new byte[8192];
-			int n;
-			while ((n = input.read(buf)) >= 0) {
-				hash.update(buf, 0, n);
-			}
-		}
-		return hash.toObjectId();
-	}
-
-	private void checkOid(ObjectId baseId, ObjectId id, ChangeType type, File f,
-			String path)
-			throws PatchApplyException, IOException {
-		boolean hashOk = false;
-		if (id != null) {
-			hashOk = baseId.equals(id);
-			if (!hashOk && ChangeType.ADD.equals(type)
-					&& ObjectId.zeroId().equals(baseId)) {
-				// We create the file first. The OID of an empty file is not the
-				// zero id!
-				hashOk = Constants.EMPTY_BLOB_ID.equals(id);
-			}
-		} else {
-			if (ObjectId.zeroId().equals(baseId)) {
-				// File empty is OK.
-				hashOk = !f.exists() || f.length() == 0;
-			} else {
-				hashOk = baseId.equals(hash(f));
-			}
-		}
-		if (!hashOk) {
-			throw new PatchApplyException(MessageFormat
-					.format(JGitText.get().applyBinaryBaseOidWrong, path));
-		}
-	}
-
-	private void applyBinary(Repository repository, String path, File f,
-			FileHeader fh, DirCacheCheckout.StreamSupplier loader, ObjectId id,
-			CheckoutMetadata checkOut)
-			throws PatchApplyException, IOException {
-		if (!fh.getOldId().isComplete() || !fh.getNewId().isComplete()) {
-			throw new PatchApplyException(MessageFormat
-					.format(JGitText.get().applyBinaryOidTooShort, path));
-		}
-		BinaryHunk hunk = fh.getForwardBinaryHunk();
-		// A BinaryHunk has the start at the "literal" or "delta" token. Data
-		// starts on the next line.
-		int start = RawParseUtils.nextLF(hunk.getBuffer(),
-				hunk.getStartOffset());
-		int length = hunk.getEndOffset() - start;
-		SHA1 hash = SHA1.newInstance();
-		// Write to a buffer and copy to the file only if everything was fine
-		TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
-		try {
-			switch (hunk.getType()) {
-			case LITERAL_DEFLATED:
-				// This just overwrites the file. We need to check the hash of
-				// the base.
-				checkOid(fh.getOldId().toObjectId(), id, fh.getChangeType(), f,
-						path);
-				initHash(hash, hunk.getSize());
-				try (OutputStream out = buffer;
-						InputStream inflated = new SHA1InputStream(hash,
-								new InflaterInputStream(
-										new BinaryHunkInputStream(
-												new ByteArrayInputStream(
-														hunk.getBuffer(), start,
-														length))))) {
-					DirCacheCheckout.getContent(repository, path, checkOut,
-							() -> inflated, null, out);
-					if (!fh.getNewId().toObjectId().equals(hash.toObjectId())) {
-						throw new PatchApplyException(MessageFormat.format(
-								JGitText.get().applyBinaryResultOidWrong,
-								path));
-					}
-				}
-				try (InputStream bufIn = buffer.openInputStream()) {
-					Files.copy(bufIn, f.toPath(),
-							StandardCopyOption.REPLACE_EXISTING);
-				}
-				break;
-			case DELTA_DEFLATED:
-				// Unfortunately delta application needs random access to the
-				// base to construct the result.
-				byte[] base;
-				try (InputStream input = loader.load()) {
-					base = IO.readWholeStream(input, 0).array();
-				}
-				// At least stream the result!
-				try (BinaryDeltaInputStream input = new BinaryDeltaInputStream(
-						base,
-						new InflaterInputStream(new BinaryHunkInputStream(
-								new ByteArrayInputStream(hunk.getBuffer(),
-										start, length))))) {
-					long finalSize = input.getExpectedResultSize();
-					initHash(hash, finalSize);
-					try (OutputStream out = buffer;
-							SHA1InputStream hashed = new SHA1InputStream(hash,
-									input)) {
-						DirCacheCheckout.getContent(repository, path, checkOut,
-								() -> hashed, null, out);
-						if (!fh.getNewId().toObjectId()
-								.equals(hash.toObjectId())) {
-							throw new PatchApplyException(MessageFormat.format(
-									JGitText.get().applyBinaryResultOidWrong,
-									path));
-						}
-					}
-				}
-				try (InputStream bufIn = buffer.openInputStream()) {
-					Files.copy(bufIn, f.toPath(),
-							StandardCopyOption.REPLACE_EXISTING);
-				}
-				break;
-			default:
-				break;
-			}
-		} finally {
-			buffer.destroy();
-		}
-	}
-
-	private void applyText(Repository repository, String path, RawText rt,
-			File f, FileHeader fh, CheckoutMetadata checkOut)
-			throws IOException, PatchApplyException {
-		List<ByteBuffer> oldLines = new ArrayList<>(rt.size());
-		for (int i = 0; i < rt.size(); i++) {
-			oldLines.add(rt.getRawString(i));
-		}
-		List<ByteBuffer> newLines = new ArrayList<>(oldLines);
-		int afterLastHunk = 0;
-		int lineNumberShift = 0;
-		int lastHunkNewLine = -1;
-		for (HunkHeader hh : fh.getHunks()) {
-
-			// We assume hunks to be ordered
-			if (hh.getNewStartLine() <= lastHunkNewLine) {
-				throw new PatchApplyException(MessageFormat
-						.format(JGitText.get().patchApplyException, hh));
-			}
-			lastHunkNewLine = hh.getNewStartLine();
-
-			byte[] b = new byte[hh.getEndOffset() - hh.getStartOffset()];
-			System.arraycopy(hh.getBuffer(), hh.getStartOffset(), b, 0,
-					b.length);
-			RawText hrt = new RawText(b);
-
-			List<ByteBuffer> hunkLines = new ArrayList<>(hrt.size());
-			for (int i = 0; i < hrt.size(); i++) {
-				hunkLines.add(hrt.getRawString(i));
-			}
-
-			if (hh.getNewStartLine() == 0) {
-				// Must be the single hunk for clearing all content
-				if (fh.getHunks().size() == 1
-						&& canApplyAt(hunkLines, newLines, 0)) {
-					newLines.clear();
-					break;
-				}
-				throw new PatchApplyException(MessageFormat
-						.format(JGitText.get().patchApplyException, hh));
-			}
-			// Hunk lines as reported by the hunk may be off, so don't rely on
-			// them.
-			int applyAt = hh.getNewStartLine() - 1 + lineNumberShift;
-			// But they definitely should not go backwards.
-			if (applyAt < afterLastHunk && lineNumberShift < 0) {
-				applyAt = hh.getNewStartLine() - 1;
-				lineNumberShift = 0;
-			}
-			if (applyAt < afterLastHunk) {
-				throw new PatchApplyException(MessageFormat
-						.format(JGitText.get().patchApplyException, hh));
-			}
-			boolean applies = false;
-			int oldLinesInHunk = hh.getLinesContext()
-					+ hh.getOldImage().getLinesDeleted();
-			if (oldLinesInHunk <= 1) {
-				// Don't shift hunks without context lines. Just try the
-				// position corrected by the current lineNumberShift, and if
-				// that fails, the position recorded in the hunk header.
-				applies = canApplyAt(hunkLines, newLines, applyAt);
-				if (!applies && lineNumberShift != 0) {
-					applyAt = hh.getNewStartLine() - 1;
-					applies = applyAt >= afterLastHunk
-							&& canApplyAt(hunkLines, newLines, applyAt);
-				}
-			} else {
-				int maxShift = applyAt - afterLastHunk;
-				for (int shift = 0; shift <= maxShift; shift++) {
-					if (canApplyAt(hunkLines, newLines, applyAt - shift)) {
-						applies = true;
-						applyAt -= shift;
-						break;
-					}
-				}
-				if (!applies) {
-					// Try shifting the hunk downwards
-					applyAt = hh.getNewStartLine() - 1 + lineNumberShift;
-					maxShift = newLines.size() - applyAt - oldLinesInHunk;
-					for (int shift = 1; shift <= maxShift; shift++) {
-						if (canApplyAt(hunkLines, newLines, applyAt + shift)) {
-							applies = true;
-							applyAt += shift;
-							break;
-						}
-					}
-				}
-			}
-			if (!applies) {
-				throw new PatchApplyException(MessageFormat
-						.format(JGitText.get().patchApplyException, hh));
-			}
-			// Hunk applies at applyAt. Apply it, and update afterLastHunk and
-			// lineNumberShift
-			lineNumberShift = applyAt - hh.getNewStartLine() + 1;
-			int sz = hunkLines.size();
-			for (int j = 1; j < sz; j++) {
-				ByteBuffer hunkLine = hunkLines.get(j);
-				if (!hunkLine.hasRemaining()) {
-					// Completely empty line; accept as empty context line
-					applyAt++;
-					continue;
-				}
-				switch (hunkLine.array()[hunkLine.position()]) {
-				case ' ':
-					applyAt++;
-					break;
-				case '-':
-					newLines.remove(applyAt);
-					break;
-				case '+':
-					newLines.add(applyAt++, slice(hunkLine, 1));
-					break;
-				default:
-					break;
-				}
-			}
-			afterLastHunk = applyAt;
-		}
-		if (!isNoNewlineAtEndOfFile(fh)) {
-			newLines.add(null);
-		}
-		if (!rt.isMissingNewlineAtEnd()) {
-			oldLines.add(null);
-		}
-		if (oldLines.equals(newLines)) {
-			return; // Unchanged; don't touch the file
-		}
-
-		TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
-		try {
-			try (OutputStream out = buffer) {
-				for (Iterator<ByteBuffer> l = newLines.iterator(); l
-						.hasNext();) {
-					ByteBuffer line = l.next();
-					if (line == null) {
-						// Must be the marker for the final newline
-						break;
-					}
-					out.write(line.array(), line.position(), line.remaining());
-					if (l.hasNext()) {
-						out.write('\n');
-					}
-				}
-			}
-			try (OutputStream output = new FileOutputStream(f)) {
-				DirCacheCheckout.getContent(repository, path, checkOut,
-						buffer::openInputStream, null, output);
-			}
-		} finally {
-			buffer.destroy();
-		}
-		repository.getFS().setExecute(f,
-				fh.getNewMode() == FileMode.EXECUTABLE_FILE);
-	}
-
-	private boolean canApplyAt(List<ByteBuffer> hunkLines,
-			List<ByteBuffer> newLines, int line) {
-		int sz = hunkLines.size();
-		int limit = newLines.size();
-		int pos = line;
-		for (int j = 1; j < sz; j++) {
-			ByteBuffer hunkLine = hunkLines.get(j);
-			if (!hunkLine.hasRemaining()) {
-				// Empty line. Accept as empty context line.
-				if (pos >= limit || newLines.get(pos).hasRemaining()) {
-					return false;
-				}
-				pos++;
-				continue;
-			}
-			switch (hunkLine.array()[hunkLine.position()]) {
-			case ' ':
-			case '-':
-				if (pos >= limit
-						|| !newLines.get(pos).equals(slice(hunkLine, 1))) {
-					return false;
-				}
-				pos++;
-				break;
-			default:
-				break;
-			}
-		}
-		return true;
-	}
-
-	private ByteBuffer slice(ByteBuffer b, int off) {
-		int newOffset = b.position() + off;
-		return ByteBuffer.wrap(b.array(), newOffset, b.limit() - newOffset);
-	}
-
-	private boolean isNoNewlineAtEndOfFile(FileHeader fh) {
-		List<? extends HunkHeader> hunks = fh.getHunks();
-		if (hunks == null || hunks.isEmpty()) {
-			return false;
-		}
-		HunkHeader lastHunk = hunks.get(hunks.size() - 1);
-		byte[] buf = new byte[lastHunk.getEndOffset()
-				- lastHunk.getStartOffset()];
-		System.arraycopy(lastHunk.getBuffer(), lastHunk.getStartOffset(), buf,
-				0, buf.length);
-		RawText lhrt = new RawText(buf);
-		return lhrt.getString(lhrt.size() - 1)
-				.equals("\\ No newline at end of file"); //$NON-NLS-1$
-	}
-
-	/**
-	 * An {@link InputStream} that updates a {@link SHA1} on every byte read.
-	 * The hash is supposed to have been initialized before reading starts.
-	 */
-	private static class SHA1InputStream extends InputStream {
-
-		private final SHA1 hash;
-
-		private final InputStream in;
-
-		SHA1InputStream(SHA1 hash, InputStream in) {
-			this.hash = hash;
-			this.in = in;
-		}
-
-		@Override
-		public int read() throws IOException {
-			int b = in.read();
-			if (b >= 0) {
-				hash.update((byte) b);
-			}
-			return b;
-		}
-
-		@Override
-		public int read(byte[] b, int off, int len) throws IOException {
-			int n = in.read(b, off, len);
-			if (n > 0) {
-				hash.update(b, off, n);
-			}
-			return n;
-		}
-
-		@Override
-		public void close() throws IOException {
-			in.close();
-		}
-	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
index 1f979a9..107b00e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
@@ -216,16 +216,14 @@
 				// ignore - the VM is already shutting down
 			}
 		}
-		if (!noCheckout) {
-			try {
-				checkout(repository, fetchResult);
-			} catch (IOException ioe) {
-				repository.close();
-				throw new JGitInternalException(ioe.getMessage(), ioe);
-			} catch (GitAPIException | RuntimeException e) {
-				repository.close();
-				throw e;
-			}
+		try {
+			checkout(repository, fetchResult);
+		} catch (IOException ioe) {
+			repository.close();
+			throw new JGitInternalException(ioe.getMessage(), ioe);
+		} catch (GitAPIException | RuntimeException e) {
+			repository.close();
+			throw e;
 		}
 		return new Git(repository, true);
 	}
@@ -318,7 +316,9 @@
 		if (depth != null) {
 			command.setDepth(depth.intValue());
 		}
-		command.setShallowSince(shallowSince);
+		if (shallowSince != null) {
+			command.setShallowSince(shallowSince);
+		}
 		command.setShallowExcludes(shallowExcludes);
 		configure(command);
 
@@ -391,7 +391,7 @@
 		u.setNewObjectId(commit.getId());
 		u.forceUpdate();
 
-		if (!bare) {
+		if (!bare && !noCheckout) {
 			DirCache dc = clonedRepo.lockDirCache();
 			DirCacheCheckout co = new DirCacheCheckout(clonedRepo, dc,
 					commit.getTree());
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java
index a925a08..040b29d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/DiffCommand.java
@@ -51,6 +51,8 @@
 
 	private boolean showNameAndStatusOnly;
 
+	private boolean showNameOnly;
+
 	private OutputStream out;
 
 	private int contextLines = -1;
@@ -72,7 +74,7 @@
 	}
 
 	private DiffFormatter getDiffFormatter() {
-		return out != null && !showNameAndStatusOnly
+		return out != null && !showNameAndStatusOnly && !showNameOnly
 				? new DiffFormatter(new BufferedOutputStream(out))
 				: new DiffFormatter(NullOutputStream.INSTANCE);
 	}
@@ -114,7 +116,7 @@
 			diffFmt.setPathFilter(pathFilter);
 
 			List<DiffEntry> result = diffFmt.scan(oldTree, newTree);
-			if (showNameAndStatusOnly) {
+			if (showNameAndStatusOnly || showNameOnly) {
 				return result;
 			}
 			if (contextLines >= 0) {
@@ -195,6 +197,19 @@
 	}
 
 	/**
+	 * Set whether to return only names of changed files
+	 *
+	 * @param showNameOnly
+	 *            whether to return only names files
+	 * @return this instance
+	 * @since 6.4
+	 */
+	public DiffCommand setShowNameOnly(boolean showNameOnly) {
+		this.showNameOnly = showNameOnly;
+		return this;
+	}
+
+	/**
 	 * Set output stream
 	 *
 	 * @param out
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
index 38ece2f..3c772c2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
@@ -230,7 +230,9 @@
 				}
 				transport.setDepth(Constants.INFINITE_DEPTH);
 			}
-			transport.setDeepenSince(deepenSince);
+			if (deepenSince != null) {
+				transport.setDeepenSince(deepenSince);
+			}
 			transport.setDeepenNots(shallowExcludes);
 			configure(transport);
 			FetchResult result = transport.fetch(monitor,
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java
index 08353df..2ed1c52 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java
@@ -11,6 +11,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.PrintStream;
 import java.net.URISyntaxException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -73,6 +74,11 @@
 	private boolean atomic;
 	private boolean force;
 	private boolean thin = Transport.DEFAULT_PUSH_THIN;
+	private boolean useBitmaps = Transport.DEFAULT_PUSH_USE_BITMAPS;
+
+	private PrintStream hookOutRedirect;
+
+	private PrintStream hookErrRedirect;
 
 	private OutputStream out;
 
@@ -140,6 +146,9 @@
 					transport.setOptionReceivePack(receivePack);
 				transport.setDryRun(dryRun);
 				transport.setPushOptions(pushOptions);
+				transport.setPushUseBitmaps(useBitmaps);
+				transport.setHookOutputStream(hookOutRedirect);
+				transport.setHookErrorStream(hookErrRedirect);
 				configure(transport);
 
 				final Collection<RemoteRefUpdate> toPush = transport
@@ -305,6 +314,46 @@
 	}
 
 	/**
+	 * Sets a {@link PrintStream} a "pre-push" hook may write its stdout to. If
+	 * not set, {@link System#out} will be used.
+	 * <p>
+	 * When pushing to several remote repositories the stream is shared for all
+	 * pushes.
+	 * </p>
+	 *
+	 * @param redirect
+	 *            {@link PrintStream} to use; if {@code null},
+	 *            {@link System#out} will be used
+	 * @return {@code this}
+	 * @since 6.4
+	 */
+	public PushCommand setHookOutputStream(PrintStream redirect) {
+		checkCallable();
+		hookOutRedirect = redirect;
+		return this;
+	}
+
+	/**
+	 * Sets a {@link PrintStream} a "pre-push" hook may write its stderr to. If
+	 * not set, {@link System#err} will be used.
+	 * <p>
+	 * When pushing to several remote repositories the stream is shared for all
+	 * pushes.
+	 * </p>
+	 *
+	 * @param redirect
+	 *            {@link PrintStream} to use; if {@code null},
+	 *            {@link System#err} will be used
+	 * @return {@code this}
+	 * @since 6.4
+	 */
+	public PushCommand setHookErrorStream(PrintStream redirect) {
+		checkCallable();
+		hookErrRedirect = redirect;
+		return this;
+	}
+
+	/**
 	 * The remote executable providing receive-pack service for pack transports.
 	 * If no receive-pack is set, the default value of
 	 * <code>RemoteConfig.DEFAULT_RECEIVE_PACK</code> will be used.
@@ -576,6 +625,32 @@
 	}
 
 	/**
+	 * Whether to use bitmaps for push.
+	 *
+	 * @return true if push use bitmaps.
+	 * @since 6.4
+	 */
+	public boolean isUseBitmaps() {
+		return useBitmaps;
+	}
+
+	/**
+	 * Set whether to use bitmaps for push.
+	 *
+	 * Default setting is {@value Transport#DEFAULT_PUSH_USE_BITMAPS}
+	 *
+	 * @param useBitmaps
+	 *            false to disable use of bitmaps for push, true otherwise.
+	 * @return {@code this}
+	 * @since 6.4
+	 */
+	public PushCommand setUseBitmaps(boolean useBitmaps) {
+		checkCallable();
+		this.useBitmaps = useBitmaps;
+		return this;
+	}
+
+	/**
 	 * Whether this push should be executed atomically (all references updated,
 	 * or none)
 	 *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java
index 19961a1..b528035 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java
@@ -288,12 +288,13 @@
 	 *             if input stream could not be read
 	 */
 	public static boolean isBinary(InputStream raw) throws IOException {
-		final byte[] buffer = new byte[getBufferSize()];
+		final byte[] buffer = new byte[getBufferSize() + 1];
 		int cnt = 0;
 		while (cnt < buffer.length) {
 			final int n = raw.read(buffer, cnt, buffer.length - cnt);
-			if (n == -1)
+			if (n == -1) {
 				break;
+			}
 			cnt += n;
 		}
 		return isBinary(buffer, cnt, cnt < buffer.length);
@@ -347,8 +348,16 @@
 		// - limited buffer size; may be only the beginning of a large blob
 		// - no counting of printable vs. non-printable bytes < 0x20 and 0x7F
 		int maxLength = getBufferSize();
+		boolean isComplete = complete;
 		if (length > maxLength) {
+			// We restrict the length in all cases to getBufferSize() to get
+			// predictable behavior. Sometimes we load streams, and sometimes we
+			// have the full data in memory. With streams, we never look at more
+			// than the first getBufferSize() bytes. If we looked at more when
+			// we have the full data, different code paths in JGit might come to
+			// different conclusions.
 			length = maxLength;
+			isComplete = false;
 		}
 		byte last = 'x'; // Just something inconspicuous.
 		for (int ptr = 0; ptr < length; ptr++) {
@@ -358,7 +367,7 @@
 			}
 			last = curr;
 		}
-		if (complete) {
+		if (isComplete) {
 			// Buffer contains everything...
 			return last == '\r'; // ... so this must be a lone CR
 		}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
index b4e2ff4..7fc48d4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -42,7 +42,9 @@
 	/***/ public String anExceptionOccurredWhileTryingToAddTheIdOfHEAD;
 	/***/ public String anSSHSessionHasBeenAlreadyCreated;
 	/***/ public String applyBinaryBaseOidWrong;
+	/***/ public String applyBinaryForInCoreNotSupported;
 	/***/ public String applyBinaryOidTooShort;
+	/***/ public String applyBinaryPatchTypeNotSupported;
 	/***/ public String applyBinaryResultOidWrong;
 	/***/ public String applyingCommit;
 	/***/ public String archiveFormatAlreadyAbsent;
@@ -184,6 +186,7 @@
 	/***/ public String connectionTimeOut;
 	/***/ public String contextMustBeNonNegative;
 	/***/ public String cookieFilePathRelative;
+	/***/ public String copyFileFailedNullFiles;
 	/***/ public String corruptionDetectedReReadingAt;
 	/***/ public String corruptObjectBadDate;
 	/***/ public String corruptObjectBadEmail;
@@ -658,6 +661,7 @@
 	/***/ public String renameBranchUnexpectedResult;
 	/***/ public String renameCancelled;
 	/***/ public String renameFileFailed;
+	/***/ public String renameFileFailedNullFiles;
 	/***/ public String renamesAlreadyFound;
 	/***/ public String renamesBreakingModifies;
 	/***/ public String renamesFindingByContent;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCache.java
index b30d509..0a02180 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCache.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCache.java
@@ -712,7 +712,7 @@
 	private void reportIndexRequested(Ref<?> ref, boolean cacheHit,
 			long start) {
 		if (indexEventConsumer == null
-				|| !isIndexOrBitmapExtPos(ref.key.packExtPos)) {
+				|| !isIndexExtPos(ref.key.packExtPos)) {
 			return;
 		}
 		EvictKey evictKey = new EvictKey(ref);
@@ -728,7 +728,7 @@
 	private void reportIndexEvicted(Ref<?> dead) {
 		if (indexEventConsumer == null
 				|| !indexEventConsumer.shouldReportEvictedEvent()
-				|| !isIndexOrBitmapExtPos(dead.key.packExtPos)) {
+				|| !isIndexExtPos(dead.key.packExtPos)) {
 			return;
 		}
 		EvictKey evictKey = new EvictKey(dead);
@@ -742,8 +742,9 @@
 				Duration.ofNanos(sinceLastEvictionNanos));
 	}
 
-	private static boolean isIndexOrBitmapExtPos(int packExtPos) {
+	private static boolean isIndexExtPos(int packExtPos) {
 		return packExtPos == PackExt.INDEX.getPosition()
+				|| packExtPos == PackExt.REVERSE_INDEX.getPosition()
 				|| packExtPos == PackExt.BITMAP_INDEX.getPosition();
 	}
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
index f7a2c94..15511fe 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
@@ -16,6 +16,7 @@
 import static org.eclipse.jgit.internal.storage.pack.PackExt.BITMAP_INDEX;
 import static org.eclipse.jgit.internal.storage.pack.PackExt.INDEX;
 import static org.eclipse.jgit.internal.storage.pack.PackExt.PACK;
+import static org.eclipse.jgit.internal.storage.pack.PackExt.REVERSE_INDEX;
 
 import java.io.BufferedInputStream;
 import java.io.EOFException;
@@ -220,8 +221,7 @@
 		}
 
 		PackIndex idx = idx(ctx);
-		DfsStreamKey revKey = new DfsStreamKey.ForReverseIndex(
-				desc.getStreamKey(INDEX));
+		DfsStreamKey revKey = desc.getStreamKey(REVERSE_INDEX);
 		AtomicBoolean cacheHit = new AtomicBoolean(true);
 		DfsBlockCache.Ref<PackReverseIndex> revref = cache.getOrLoadRef(revKey,
 				REF_POSITION, () -> {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsStreamKey.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsStreamKey.java
index 4a6723f..f3f3091 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsStreamKey.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsStreamKey.java
@@ -95,19 +95,4 @@
 			return false;
 		}
 	}
-
-	static final class ForReverseIndex extends DfsStreamKey {
-		private final DfsStreamKey idxKey;
-
-		ForReverseIndex(DfsStreamKey idxKey) {
-			super(idxKey.hash + 1, null);
-			this.idxKey = idxKey;
-		}
-
-		@Override
-		public boolean equals(Object o) {
-			return o instanceof ForReverseIndex
-					&& idxKey.equals(((ForReverseIndex) o).idxKey);
-		}
-	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index af4b2ed..53fdc66 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -728,14 +728,17 @@
 
 	static class AlternateHandle {
 		static class Id {
-			String alternateId;
+			private final String alternateId;
 
 			public Id(File object) {
+				String id = null;
 				try {
-					this.alternateId = object.getCanonicalPath();
-				} catch (Exception e) {
-					alternateId = null;
+					// resolve symbolic links to their final target:
+					id = object.toPath().toRealPath().normalize().toString();
+				} catch (Exception ignored) {
+					// id == null
 				}
+				this.alternateId = id;
 			}
 
 			@Override
@@ -761,6 +764,8 @@
 
 		final ObjectDirectory db;
 
+		private AlternateHandle.Id id;
+
 		AlternateHandle(ObjectDirectory db) {
 			this.db = db;
 		}
@@ -769,8 +774,11 @@
 			db.close();
 		}
 
-		public Id getId(){
-			return db.getAlternateId();
+		public synchronized Id getId() {
+			if (id == null) {
+				id = new AlternateHandle.Id(db.objects);
+			}
+			return id;
 		}
 	}
 
@@ -799,6 +807,6 @@
 	}
 
 	AlternateHandle.Id getAlternateId() {
-		return new AlternateHandle.Id(objects);
+		return handle.getId();
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackExt.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackExt.java
index 6fb775d..c006995 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackExt.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackExt.java
@@ -27,7 +27,10 @@
 	BITMAP_INDEX("bitmap"), //$NON-NLS-1$
 
 	/** A reftable file. */
-	REFTABLE("ref"); //$NON-NLS-1$
+	REFTABLE("ref"), //$NON-NLS-1$
+
+	/** A pack reverse index file extension. */
+	REVERSE_INDEX("rev"); //$NON-NLS-1$
 
 	private final String ext;
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
index cd3f536..d43d8bb 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
@@ -2267,17 +2267,17 @@
 			int pathHashCode, @NonNull Set<? extends AnyObjectId> want)
 			throws IOException {
 
-		// Check if this object needs to be rejected, doing the cheaper
-		// checks first.
-		boolean reject =
-			(!filterSpec.allowsType(type) && !want.contains(src)) ||
-			(filterSpec.getBlobLimit() >= 0 &&
-				type == OBJ_BLOB &&
-				!want.contains(src) &&
-				reader.getObjectSize(src, OBJ_BLOB) > filterSpec.getBlobLimit());
-		if (!reject) {
-			addObject(src, type, pathHashCode);
+		// Cheaper checks first
+		if (!filterSpec.allowsType(type) && !want.contains(src)) {
+			return;
 		}
+
+		long blobLimit = filterSpec.getBlobLimit();
+		if (blobLimit >= 0 && type == OBJ_BLOB && !want.contains(src)
+				&& !reader.isNotLargerThan(src, OBJ_BLOB, blobLimit)) {
+			return;
+		}
+		addObject(src, type, pathHashCode);
 	}
 
 	private boolean exclude(AnyObjectId objectId) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstCommand.java
index 3f90080..c75cf5d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstCommand.java
@@ -9,12 +9,10 @@
  */
 package org.eclipse.jgit.internal.transport.parser;
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.unmodifiableSet;
-import static java.util.stream.Collectors.toSet;
 
-import java.util.Set;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.eclipse.jgit.annotations.NonNull;
 
@@ -34,7 +32,7 @@
  */
 public final class FirstCommand {
 	private final String line;
-	private final Set<String> capabilities;
+	private final Map<String, String> capabilities;
 
 	/**
 	 * Parse the first line of a receive-pack request.
@@ -47,16 +45,26 @@
 	public static FirstCommand fromLine(String line) {
 		int nul = line.indexOf('\0');
 		if (nul < 0) {
-			return new FirstCommand(line, emptySet());
+			return new FirstCommand(line,
+					Collections.<String, String> emptyMap());
 		}
-		Set<String> opts =
-				asList(line.substring(nul + 1).split(" ")) //$NON-NLS-1$
-					.stream()
-					.collect(toSet());
-		return new FirstCommand(line.substring(0, nul), unmodifiableSet(opts));
+		String[] splitCapablities = line.substring(nul + 1).split(" "); //$NON-NLS-1$
+		Map<String, String> options = new HashMap<>();
+
+		for (String c : splitCapablities) {
+			int i = c.indexOf("="); //$NON-NLS-1$
+			if (i != -1) {
+				options.put(c.substring(0, i), c.substring(i + 1));
+			} else {
+				options.put(c, null);
+			}
+		}
+
+		return new FirstCommand(line.substring(0, nul),
+				Collections.<String, String> unmodifiableMap(options));
 	}
 
-	private FirstCommand(String line, Set<String> capabilities) {
+	private FirstCommand(String line, Map<String, String> capabilities) {
 		this.line = line;
 		this.capabilities = capabilities;
 	}
@@ -67,9 +75,9 @@
 		return line;
 	}
 
-	/** @return capabilities parsed from the line, as an immutable set. */
+	/** @return capabilities parsed from the line, as an immutable map. */
 	@NonNull
-	public Set<String> getCapabilities() {
+	public Map<String, String> getCapabilities() {
 		return capabilities;
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstWant.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstWant.java
index 8138f06..30d6296 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstWant.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/parser/FirstWant.java
@@ -10,6 +10,7 @@
 package org.eclipse.jgit.internal.transport.parser;
 
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SESSION_ID;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -43,8 +44,13 @@
 	@Nullable
 	private final String agent;
 
+	@Nullable
+	private final String clientSID;
+
 	private static final String AGENT_PREFIX = OPTION_AGENT + '=';
 
+	private static final String SESSION_ID_PREFIX = OPTION_SESSION_ID + '=';
+
 	/**
 	 * Parse the first want line in the protocol v0/v1 pack negotiation.
 	 *
@@ -58,6 +64,7 @@
 		String wantLine;
 		Set<String> capabilities;
 		String agent = null;
+		String clientSID = null;
 
 		if (line.length() > 45) {
 			String opt = line.substring(45);
@@ -70,6 +77,9 @@
 			for (String clientCapability : opt.split(" ")) { //$NON-NLS-1$
 				if (clientCapability.startsWith(AGENT_PREFIX)) {
 					agent = clientCapability.substring(AGENT_PREFIX.length());
+				} else if (clientCapability.startsWith(SESSION_ID_PREFIX)) {
+					clientSID = clientCapability
+							.substring(SESSION_ID_PREFIX.length());
 				} else {
 					opts.add(clientCapability);
 				}
@@ -81,14 +91,15 @@
 			capabilities = Collections.emptySet();
 		}
 
-		return new FirstWant(wantLine, capabilities, agent);
+		return new FirstWant(wantLine, capabilities, agent, clientSID);
 	}
 
 	private FirstWant(String line, Set<String> capabilities,
-			@Nullable String agent) {
+			@Nullable String agent, @Nullable String clientSID) {
 		this.line = line;
 		this.capabilities = capabilities;
 		this.agent = agent;
+		this.clientSID = clientSID;
 	}
 
 	/** @return non-capabilities part of the line. */
@@ -98,7 +109,7 @@
 
 	/**
 	 * @return capabilities parsed from the line as an immutable set (excluding
-	 *         agent).
+	 *         agent and session-id).
 	 */
 	public Set<String> getCapabilities() {
 		return capabilities;
@@ -109,4 +120,10 @@
 	public String getAgent() {
 		return agent;
 	}
+
+	/** @return client session-id parsed from the line. */
+	@Nullable
+	public String getClientSID() {
+		return clientSID;
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectReader.java
index 26c3ff6..081f40e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectReader.java
@@ -333,6 +333,39 @@
 	}
 
 	/**
+	 * Check if the object size is less or equal than certain value
+	 *
+	 * By default, it reads the object from storage to get the size. Subclasses
+	 * can implement more efficient lookups.
+	 *
+	 * @param objectId
+	 *            identity of the object to open.
+	 * @param typeHint
+	 *            hint about the type of object being requested, e.g.
+	 *            {@link org.eclipse.jgit.lib.Constants#OBJ_BLOB};
+	 *            {@link #OBJ_ANY} if the object type is not known, or does not
+	 *            matter to the caller.
+	 * @param size
+	 *            threshold value for the size of the object in bytes.
+	 * @return true if the object size is equal or smaller than the threshold
+	 *         value
+	 * @throws org.eclipse.jgit.errors.MissingObjectException
+	 *             the object does not exist.
+	 * @throws org.eclipse.jgit.errors.IncorrectObjectTypeException
+	 *             typeHint was not OBJ_ANY, and the object's actual type does
+	 *             not match typeHint.
+	 * @throws java.io.IOException
+	 *             the object store cannot be accessed.
+	 *
+	 * @since 6.4
+	 */
+	public boolean isNotLargerThan(AnyObjectId objectId, int typeHint, long size)
+			throws MissingObjectException, IncorrectObjectTypeException,
+			IOException {
+		return open(objectId, typeHint).getSize() <= size;
+	}
+
+	/**
 	 * Asynchronous object size lookup.
 	 *
 	 * @param objectIds
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java b/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java
new file mode 100644
index 0000000..ca8ea5d
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java
@@ -0,0 +1,998 @@
+/*
+ * Copyright (C) 2022, Google Inc. and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.patch;
+
+import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
+import java.text.MessageFormat;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.zip.InflaterInputStream;
+import org.eclipse.jgit.annotations.Nullable;
+import org.eclipse.jgit.api.errors.FilterFailedException;
+import org.eclipse.jgit.api.errors.PatchApplyException;
+import org.eclipse.jgit.api.errors.PatchFormatException;
+import org.eclipse.jgit.attributes.Attribute;
+import org.eclipse.jgit.attributes.Attributes;
+import org.eclipse.jgit.attributes.FilterCommand;
+import org.eclipse.jgit.attributes.FilterCommandRegistry;
+import org.eclipse.jgit.diff.DiffEntry.ChangeType;
+import org.eclipse.jgit.diff.RawText;
+import org.eclipse.jgit.dircache.DirCache;
+import org.eclipse.jgit.dircache.DirCacheBuilder;
+import org.eclipse.jgit.dircache.DirCacheCheckout;
+import org.eclipse.jgit.dircache.DirCacheCheckout.CheckoutMetadata;
+import org.eclipse.jgit.dircache.DirCacheCheckout.StreamSupplier;
+import org.eclipse.jgit.dircache.DirCacheEntry;
+import org.eclipse.jgit.dircache.DirCacheIterator;
+import org.eclipse.jgit.errors.IndexWriteException;
+import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.lib.ConfigConstants;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.CoreConfig.EolStreamType;
+import org.eclipse.jgit.lib.FileMode;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.lib.ObjectLoader;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.patch.FileHeader.PatchType;
+import org.eclipse.jgit.revwalk.RevTree;
+import org.eclipse.jgit.treewalk.FileTreeIterator;
+import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.treewalk.TreeWalk.OperationType;
+import org.eclipse.jgit.treewalk.WorkingTreeOptions;
+import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
+import org.eclipse.jgit.treewalk.filter.NotIgnoredFilter;
+import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
+import org.eclipse.jgit.util.FS.ExecutionResult;
+import org.eclipse.jgit.util.FileUtils;
+import org.eclipse.jgit.util.IO;
+import org.eclipse.jgit.util.LfsFactory;
+import org.eclipse.jgit.util.LfsFactory.LfsInputStream;
+import org.eclipse.jgit.util.RawParseUtils;
+import org.eclipse.jgit.util.TemporaryBuffer;
+import org.eclipse.jgit.util.TemporaryBuffer.LocalFile;
+import org.eclipse.jgit.util.io.BinaryDeltaInputStream;
+import org.eclipse.jgit.util.io.BinaryHunkInputStream;
+import org.eclipse.jgit.util.io.EolStreamTypeUtil;
+import org.eclipse.jgit.util.sha1.SHA1;
+
+/**
+ * Applies a patch to files and the index.
+ * <p>
+ * After instantiating, applyPatch() should be called once.
+ * </p>
+ *
+ * @since 6.4
+ */
+public class PatchApplier {
+
+	/** The tree before applying the patch. Only non-null for inCore operation. */
+	@Nullable
+	private final RevTree beforeTree;
+
+	private final Repository repo;
+
+	private final ObjectInserter inserter;
+
+	private final ObjectReader reader;
+
+	private WorkingTreeOptions workingTreeOptions;
+
+	private int inCoreSizeLimit;
+
+	/**
+	 * @param repo
+	 *            repository to apply the patch in
+	 */
+	public PatchApplier(Repository repo) {
+		this.repo = repo;
+		inserter = repo.newObjectInserter();
+		reader = inserter.newReader();
+		beforeTree = null;
+
+		Config config = repo.getConfig();
+		workingTreeOptions = config.get(WorkingTreeOptions.KEY);
+		inCoreSizeLimit = config.getInt(ConfigConstants.CONFIG_MERGE_SECTION,
+				ConfigConstants.CONFIG_KEY_IN_CORE_LIMIT, 10 << 20);
+	}
+
+	/**
+	 * @param repo
+	 *            repository to apply the patch in
+	 * @param beforeTree
+	 *            ID of the tree to apply the patch in
+	 * @param oi
+	 *            to be used for modifying objects
+	 * @throws IOException
+	 *             in case of I/O errors
+	 */
+	public PatchApplier(Repository repo, RevTree beforeTree, ObjectInserter oi)
+			throws IOException {
+		this.repo = repo;
+		this.beforeTree = beforeTree;
+		inserter = oi;
+		reader = oi.newReader();
+	}
+
+	/**
+	 * A wrapper for returning both the applied tree ID and the applied files
+	 * list.
+	 *
+	 * @since 6.3
+	 */
+	public static class Result {
+
+		private ObjectId treeId;
+
+		private List<String> paths;
+
+		/**
+		 * @return List of modified paths.
+		 */
+		public List<String> getPaths() {
+			return paths;
+		}
+
+		/**
+		 * @return The applied tree ID.
+		 */
+		public ObjectId getTreeId() {
+			return treeId;
+		}
+	}
+
+	/**
+	 * Applies the given patch
+	 *
+	 * @param patchInput
+	 *            the patch to apply.
+	 * @return the result of the patch
+	 * @throws PatchFormatException
+	 *             if the patch cannot be parsed
+	 * @throws PatchApplyException
+	 *             if the patch cannot be applied
+	 */
+	public Result applyPatch(InputStream patchInput)
+			throws PatchFormatException, PatchApplyException {
+		Result result = new Result();
+		org.eclipse.jgit.patch.Patch p = new org.eclipse.jgit.patch.Patch();
+		try (InputStream inStream = patchInput) {
+			p.parse(inStream);
+
+			if (!p.getErrors().isEmpty()) {
+				throw new PatchFormatException(p.getErrors());
+			}
+
+			DirCache dirCache = (inCore()) ? DirCache.newInCore()
+					: repo.lockDirCache();
+
+			DirCacheBuilder dirCacheBuilder = dirCache.builder();
+			Set<String> modifiedPaths = new HashSet<>();
+			for (org.eclipse.jgit.patch.FileHeader fh : p.getFiles()) {
+				ChangeType type = fh.getChangeType();
+				switch (type) {
+				case ADD: {
+					File f = getFile(fh.getNewPath());
+					if (f != null) {
+						try {
+							FileUtils.mkdirs(f.getParentFile(), true);
+							FileUtils.createNewFile(f);
+						} catch (IOException e) {
+							throw new PatchApplyException(MessageFormat.format(
+									JGitText.get().createNewFileFailed, f), e);
+						}
+					}
+					apply(fh.getNewPath(), dirCache, dirCacheBuilder, f, fh);
+				}
+					break;
+				case MODIFY:
+					apply(fh.getOldPath(), dirCache, dirCacheBuilder,
+							getFile(fh.getOldPath()), fh);
+					break;
+				case DELETE:
+					if (!inCore()) {
+						File old = getFile(fh.getOldPath());
+						if (!old.delete())
+							throw new PatchApplyException(MessageFormat.format(
+									JGitText.get().cannotDeleteFile, old));
+					}
+					break;
+				case RENAME: {
+					File src = getFile(fh.getOldPath());
+					File dest = getFile(fh.getNewPath());
+
+					if (!inCore()) {
+						/*
+						 * this is odd: we rename the file on the FS, but
+						 * apply() will write a fresh stream anyway, which will
+						 * overwrite if there were hunks in the patch.
+						 */
+						try {
+							FileUtils.mkdirs(dest.getParentFile(), true);
+							FileUtils.rename(src, dest,
+									StandardCopyOption.ATOMIC_MOVE);
+						} catch (IOException e) {
+							throw new PatchApplyException(MessageFormat.format(
+									JGitText.get().renameFileFailed, src, dest),
+									e);
+						}
+					}
+					String pathWithOriginalContent = inCore() ?
+							fh.getOldPath() : fh.getNewPath();
+					apply(pathWithOriginalContent, dirCache, dirCacheBuilder, dest, fh);
+					break;
+				}
+				case COPY: {
+					File dest = getFile(fh.getNewPath());
+					if (!inCore()) {
+						File src = getFile(fh.getOldPath());
+						FileUtils.mkdirs(dest.getParentFile(), true);
+						Files.copy(src.toPath(), dest.toPath());
+					}
+					apply(fh.getOldPath(), dirCache, dirCacheBuilder, dest, fh);
+					break;
+				}
+				}
+				if (fh.getChangeType() != ChangeType.DELETE)
+					modifiedPaths.add(fh.getNewPath());
+				if (fh.getChangeType() != ChangeType.COPY
+						&& fh.getChangeType() != ChangeType.ADD)
+					modifiedPaths.add(fh.getOldPath());
+			}
+
+			// We processed the patch. Now add things that weren't changed.
+			for (int i = 0; i < dirCache.getEntryCount(); i++) {
+				DirCacheEntry dce = dirCache.getEntry(i);
+				if (!modifiedPaths.contains(dce.getPathString())
+						|| dce.getStage() != DirCacheEntry.STAGE_0)
+					dirCacheBuilder.add(dce);
+			}
+
+			if (inCore())
+				dirCacheBuilder.finish();
+			else if (!dirCacheBuilder.commit()) {
+				throw new IndexWriteException();
+			}
+
+			result.treeId = dirCache.writeTree(inserter);
+			result.paths = modifiedPaths.stream().sorted()
+					.collect(Collectors.toList());
+		} catch (IOException e) {
+			throw new PatchApplyException(MessageFormat.format(
+					JGitText.get().patchApplyException, e.getMessage()), e);
+		}
+		return result;
+	}
+
+	private File getFile(String path) {
+		return (inCore()) ? null : new File(repo.getWorkTree(), path);
+	}
+
+	/* returns null if the path is not found. */
+	@Nullable
+	private TreeWalk getTreeWalkForFile(String path, DirCache cache)
+			throws PatchApplyException {
+		try {
+			if (inCore()) {
+				// Only this branch may return null.
+				// TODO: it would be nice if we could return a TreeWalk at EOF
+				// iso. null.
+				return TreeWalk.forPath(repo, path, beforeTree);
+			}
+			TreeWalk walk = new TreeWalk(repo);
+
+			// Use a TreeWalk with a DirCacheIterator to pick up the correct
+			// clean/smudge filters.
+			int cacheTreeIdx = walk.addTree(new DirCacheIterator(cache));
+			FileTreeIterator files = new FileTreeIterator(repo);
+			if (FILE_TREE_INDEX != walk.addTree(files))
+				throw new IllegalStateException();
+
+			walk.setFilter(AndTreeFilter.create(
+					PathFilterGroup.createFromStrings(path),
+					new NotIgnoredFilter(FILE_TREE_INDEX)));
+			walk.setOperationType(OperationType.CHECKIN_OP);
+			walk.setRecursive(true);
+			files.setDirCacheIterator(walk, cacheTreeIdx);
+			return walk;
+		} catch (IOException e) {
+			throw new PatchApplyException(MessageFormat.format(
+					JGitText.get().patchApplyException, e.getMessage()), e);
+		}
+	}
+
+	private static final int FILE_TREE_INDEX = 1;
+
+	/**
+	 * Applies patch to a single file.
+	 *
+	 * @param pathWithOriginalContent
+	 *            The path to use for the pre-image. Also determines CRLF and
+	 *            smudge settings.
+	 * @param dirCache
+	 *            Dircache to read existing data from.
+	 * @param dirCacheBuilder
+	 *            Builder for Dircache to write new data to.
+	 * @param f
+	 *            The file to update with new contents. Null for inCore usage.
+	 * @param fh
+	 *            The patch header.
+	 * @throws PatchApplyException
+	 */
+	private void apply(String pathWithOriginalContent, DirCache dirCache,
+			DirCacheBuilder dirCacheBuilder, @Nullable File f,
+			org.eclipse.jgit.patch.FileHeader fh) throws PatchApplyException {
+		if (PatchType.BINARY.equals(fh.getPatchType())) {
+			// This patch type just says "something changed". We can't do
+			// anything with that.
+			// Maybe this should return an error code, though?
+			return;
+		}
+		try {
+			TreeWalk walk = getTreeWalkForFile(pathWithOriginalContent, dirCache);
+			boolean loadedFromTreeWalk = false;
+			// CR-LF handling is determined by whether the file or the patch
+			// have CR-LF line endings.
+			boolean convertCrLf = inCore() || needsCrLfConversion(f, fh);
+			EolStreamType streamType = convertCrLf ? EolStreamType.TEXT_CRLF
+					: EolStreamType.DIRECT;
+			String smudgeFilterCommand = null;
+			StreamSupplier fileStreamSupplier = null;
+			ObjectId fileId = ObjectId.zeroId();
+			if (walk == null) {
+				// For new files with inCore()==true, TreeWalk.forPath can be
+				// null. Stay with defaults.
+			} else if (inCore()) {
+				fileId = walk.getObjectId(0);
+				ObjectLoader loader = LfsFactory.getInstance()
+						.applySmudgeFilter(repo, reader.open(fileId, OBJ_BLOB),
+								null);
+				byte[] data = loader.getBytes();
+				convertCrLf = RawText.isCrLfText(data);
+				fileStreamSupplier = () -> new ByteArrayInputStream(data);
+				streamType = convertCrLf ? EolStreamType.TEXT_CRLF
+						: EolStreamType.DIRECT;
+				smudgeFilterCommand = walk
+						.getFilterCommand(Constants.ATTR_FILTER_TYPE_SMUDGE);
+				loadedFromTreeWalk = true;
+			} else if (walk.next()) {
+				// If the file on disk has no newline characters,
+				// convertCrLf will be false. In that case we want to honor the
+				// normal git settings.
+				streamType = convertCrLf ? EolStreamType.TEXT_CRLF
+						: walk.getEolStreamType(OperationType.CHECKOUT_OP);
+				smudgeFilterCommand = walk
+						.getFilterCommand(Constants.ATTR_FILTER_TYPE_SMUDGE);
+				FileTreeIterator file = walk.getTree(FILE_TREE_INDEX,
+						FileTreeIterator.class);
+				if (file != null) {
+					fileId = file.getEntryObjectId();
+					fileStreamSupplier = file::openEntryStream;
+					loadedFromTreeWalk = true;
+				} else {
+					throw new PatchApplyException(MessageFormat.format(
+							JGitText.get().cannotReadFile,
+							pathWithOriginalContent));
+				}
+			}
+
+			if (fileStreamSupplier == null)
+				fileStreamSupplier = inCore() ? InputStream::nullInputStream
+						: () -> new FileInputStream(f);
+
+			FileMode fileMode = fh.getNewMode() != null ? fh.getNewMode()
+					: FileMode.REGULAR_FILE;
+			ContentStreamLoader resultStreamLoader;
+			if (PatchType.GIT_BINARY.equals(fh.getPatchType())) {
+				// binary patches are processed in a streaming fashion. Some
+				// binary patches do random access on the input data, so we can't
+				// overwrite the file while we're streaming.
+				resultStreamLoader = applyBinary(pathWithOriginalContent, f, fh,
+						fileStreamSupplier, fileId);
+			} else {
+				String filterCommand = walk != null
+						? walk.getFilterCommand(
+								Constants.ATTR_FILTER_TYPE_CLEAN)
+						: null;
+				RawText raw = getRawText(f, fileStreamSupplier, fileId,
+						pathWithOriginalContent, loadedFromTreeWalk, filterCommand,
+						convertCrLf);
+				resultStreamLoader = applyText(raw, fh);
+			}
+
+			if (f != null) {
+				// Write to a buffer and copy to the file only if everything was
+				// fine.
+				TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
+				try {
+					CheckoutMetadata metadata = new CheckoutMetadata(streamType,
+							smudgeFilterCommand);
+
+					try (TemporaryBuffer buf = buffer) {
+						DirCacheCheckout.getContent(repo, pathWithOriginalContent,
+								metadata, resultStreamLoader.supplier, workingTreeOptions,
+								buf);
+					}
+					try (InputStream bufIn = buffer.openInputStream()) {
+						Files.copy(bufIn, f.toPath(),
+								StandardCopyOption.REPLACE_EXISTING);
+					}
+				} finally {
+					buffer.destroy();
+				}
+
+				repo.getFS().setExecute(f,
+						fileMode == FileMode.EXECUTABLE_FILE);
+			}
+
+			Instant lastModified = f == null ? null
+					: repo.getFS().lastModifiedInstant(f);
+			Attributes attributes = walk != null ? walk.getAttributes()
+					: new Attributes();
+
+			DirCacheEntry dce = insertToIndex(
+					resultStreamLoader.supplier.load(),
+					fh.getNewPath().getBytes(StandardCharsets.UTF_8), fileMode,
+					lastModified, resultStreamLoader.length,
+					attributes.get(Constants.ATTR_FILTER));
+			dirCacheBuilder.add(dce);
+			if (PatchType.GIT_BINARY.equals(fh.getPatchType())
+					&& fh.getNewId() != null && fh.getNewId().isComplete()
+					&& !fh.getNewId().toObjectId().equals(dce.getObjectId())) {
+				throw new PatchApplyException(MessageFormat.format(
+						JGitText.get().applyBinaryResultOidWrong,
+						pathWithOriginalContent));
+			}
+		} catch (IOException | UnsupportedOperationException e) {
+			throw new PatchApplyException(MessageFormat.format(
+					JGitText.get().patchApplyException, e.getMessage()), e);
+		}
+	}
+
+	private DirCacheEntry insertToIndex(InputStream input, byte[] path,
+			FileMode fileMode, Instant lastModified, long length,
+			Attribute lfsAttribute) throws IOException {
+		DirCacheEntry dce = new DirCacheEntry(path, DirCacheEntry.STAGE_0);
+		dce.setFileMode(fileMode);
+		if (lastModified != null) {
+			dce.setLastModified(lastModified);
+		}
+		dce.setLength(length);
+
+		try (LfsInputStream is = org.eclipse.jgit.util.LfsFactory.getInstance()
+				.applyCleanFilter(repo, input, length, lfsAttribute)) {
+			dce.setObjectId(inserter.insert(OBJ_BLOB, is.getLength(), is));
+		}
+
+		return dce;
+	}
+
+	/**
+	 * Gets the raw text of the given file.
+	 *
+	 * @param file
+	 *            to read from
+	 * @param fileStreamSupplier
+	 *            if fromTreewalk, the stream of the file content
+	 * @param fileId
+	 *            of the file
+	 * @param path
+	 *            of the file
+	 * @param fromTreeWalk
+	 *            whether the file was loaded by a {@link TreeWalk}
+	 * @param filterCommand
+	 *            for reading the file content
+	 * @param convertCrLf
+	 *            whether a CR-LF conversion is needed
+	 * @return the result raw text
+	 * @throws IOException
+	 *             in case of filtering issues
+	 */
+	private RawText getRawText(@Nullable File file,
+			StreamSupplier fileStreamSupplier, ObjectId fileId, String path,
+			boolean fromTreeWalk, String filterCommand, boolean convertCrLf)
+			throws IOException {
+		if (fromTreeWalk) {
+			// Can't use file.openEntryStream() as we cannot control its CR-LF
+			// conversion.
+			try (InputStream input = filterClean(repo, path,
+					fileStreamSupplier.load(), convertCrLf, filterCommand)) {
+				return new RawText(org.eclipse.jgit.util.IO
+						.readWholeStream(input, 0).array());
+			}
+		}
+		if (convertCrLf) {
+			try (InputStream input = EolStreamTypeUtil.wrapInputStream(
+					fileStreamSupplier.load(), EolStreamType.TEXT_LF)) {
+				return new RawText(org.eclipse.jgit.util.IO
+						.readWholeStream(input, 0).array());
+			}
+		}
+		if (inCore() && fileId.equals(ObjectId.zeroId())) {
+			return new RawText(new byte[] {});
+		}
+		return new RawText(file);
+	}
+
+	private InputStream filterClean(Repository repository, String path,
+			InputStream fromFile, boolean convertCrLf, String filterCommand)
+			throws IOException {
+		InputStream input = fromFile;
+		if (convertCrLf) {
+			input = EolStreamTypeUtil.wrapInputStream(input,
+					EolStreamType.TEXT_LF);
+		}
+		if (org.eclipse.jgit.util.StringUtils.isEmptyOrNull(filterCommand)) {
+			return input;
+		}
+		if (FilterCommandRegistry.isRegistered(filterCommand)) {
+			LocalFile buffer = new org.eclipse.jgit.util.TemporaryBuffer.LocalFile(
+					null, inCoreSizeLimit);
+			FilterCommand command = FilterCommandRegistry.createFilterCommand(
+					filterCommand, repository, input, buffer);
+			while (command.run() != -1) {
+				// loop as long as command.run() tells there is work to do
+			}
+			return buffer.openInputStreamWithAutoDestroy();
+		}
+		org.eclipse.jgit.util.FS fs = repository.getFS();
+		ProcessBuilder filterProcessBuilder = fs.runInShell(filterCommand,
+				new String[0]);
+		filterProcessBuilder.directory(repository.getWorkTree());
+		filterProcessBuilder.environment().put(Constants.GIT_DIR_KEY,
+				repository.getDirectory().getAbsolutePath());
+		ExecutionResult result;
+		try {
+			result = fs.execute(filterProcessBuilder, input);
+		} catch (IOException | InterruptedException e) {
+			throw new IOException(
+					new FilterFailedException(e, filterCommand, path));
+		}
+		int rc = result.getRc();
+		if (rc != 0) {
+			throw new IOException(new FilterFailedException(rc, filterCommand,
+					path, result.getStdout().toByteArray(4096),
+					org.eclipse.jgit.util.RawParseUtils
+							.decode(result.getStderr().toByteArray(4096))));
+		}
+		return result.getStdout().openInputStreamWithAutoDestroy();
+	}
+
+	private boolean needsCrLfConversion(File f,
+			org.eclipse.jgit.patch.FileHeader fileHeader) throws IOException {
+		if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
+			return false;
+		}
+		if (!hasCrLf(fileHeader)) {
+			try (InputStream input = new FileInputStream(f)) {
+				return RawText.isCrLfText(input);
+			}
+		}
+		return false;
+	}
+
+	private static boolean hasCrLf(
+			org.eclipse.jgit.patch.FileHeader fileHeader) {
+		if (PatchType.GIT_BINARY.equals(fileHeader.getPatchType())) {
+			return false;
+		}
+		for (org.eclipse.jgit.patch.HunkHeader header : fileHeader.getHunks()) {
+			byte[] buf = header.getBuffer();
+			int hunkEnd = header.getEndOffset();
+			int lineStart = header.getStartOffset();
+			while (lineStart < hunkEnd) {
+				int nextLineStart = RawParseUtils.nextLF(buf, lineStart);
+				if (nextLineStart > hunkEnd) {
+					nextLineStart = hunkEnd;
+				}
+				if (nextLineStart <= lineStart) {
+					break;
+				}
+				if (nextLineStart - lineStart > 1) {
+					char first = (char) (buf[lineStart] & 0xFF);
+					if (first == ' ' || first == '-') {
+						// It's an old line. Does it end in CR-LF?
+						if (buf[nextLineStart - 2] == '\r') {
+							return true;
+						}
+					}
+				}
+				lineStart = nextLineStart;
+			}
+		}
+		return false;
+	}
+
+	private ObjectId hash(File f) throws IOException {
+		try (FileInputStream fis = new FileInputStream(f);
+				SHA1InputStream shaStream = new SHA1InputStream(fis,
+						f.length())) {
+			shaStream.transferTo(OutputStream.nullOutputStream());
+			return shaStream.getHash().toObjectId();
+		}
+	}
+
+	private void checkOid(ObjectId baseId, ObjectId id, ChangeType type, File f,
+			String path) throws PatchApplyException, IOException {
+		boolean hashOk = false;
+		if (id != null) {
+			hashOk = baseId.equals(id);
+			if (!hashOk && ChangeType.ADD.equals(type)
+					&& ObjectId.zeroId().equals(baseId)) {
+				// We create a new file. The OID of an empty file is not the
+				// zero id!
+				hashOk = Constants.EMPTY_BLOB_ID.equals(id);
+			}
+		} else if (!inCore()) {
+			if (ObjectId.zeroId().equals(baseId)) {
+				// File empty is OK.
+				hashOk = !f.exists() || f.length() == 0;
+			} else {
+				hashOk = baseId.equals(hash(f));
+			}
+		}
+		if (!hashOk) {
+			throw new PatchApplyException(MessageFormat
+					.format(JGitText.get().applyBinaryBaseOidWrong, path));
+		}
+	}
+
+	private boolean inCore() {
+		return beforeTree != null;
+	}
+
+	/**
+	 * Provide stream, along with the length of the object. We use this once to
+	 * patch to the working tree, once to write the index. For on-disk
+	 * operation, presumably we could stream to the destination file, and then
+	 * read back the stream from disk. We don't because it is more complex.
+	 */
+	private static class ContentStreamLoader {
+
+		StreamSupplier supplier;
+
+		long length;
+
+		ContentStreamLoader(StreamSupplier supplier, long length) {
+			this.supplier = supplier;
+			this.length = length;
+		}
+	}
+
+	/**
+	 * Applies a binary patch.
+	 *
+	 * @param path
+	 *            pathname of the file to write.
+	 * @param f
+	 *            destination file
+	 * @param fh
+	 *            the patch to apply
+	 * @param inputSupplier
+	 *            a supplier for the contents of the old file
+	 * @param id
+	 *            SHA1 for the old content
+	 * @return a loader for the new content.
+	 * @throws PatchApplyException
+	 * @throws IOException
+	 * @throws UnsupportedOperationException
+	 */
+	private ContentStreamLoader applyBinary(String path, File f,
+			org.eclipse.jgit.patch.FileHeader fh, StreamSupplier inputSupplier,
+			ObjectId id) throws PatchApplyException, IOException,
+			UnsupportedOperationException {
+		if (!fh.getOldId().isComplete() || !fh.getNewId().isComplete()) {
+			throw new PatchApplyException(MessageFormat
+					.format(JGitText.get().applyBinaryOidTooShort, path));
+		}
+		org.eclipse.jgit.patch.BinaryHunk hunk = fh.getForwardBinaryHunk();
+		// A BinaryHunk has the start at the "literal" or "delta" token. Data
+		// starts on the next line.
+		int start = RawParseUtils.nextLF(hunk.getBuffer(),
+				hunk.getStartOffset());
+		int length = hunk.getEndOffset() - start;
+		switch (hunk.getType()) {
+		case LITERAL_DEFLATED: {
+			// This just overwrites the file. We need to check the hash of
+			// the base.
+			checkOid(fh.getOldId().toObjectId(), id, fh.getChangeType(), f,
+					path);
+			StreamSupplier supp = () -> new InflaterInputStream(
+					new BinaryHunkInputStream(new ByteArrayInputStream(
+							hunk.getBuffer(), start, length)));
+			return new ContentStreamLoader(supp, hunk.getSize());
+		}
+		case DELTA_DEFLATED: {
+			// Unfortunately delta application needs random access to the
+			// base to construct the result.
+			byte[] base;
+			try (InputStream in = inputSupplier.load()) {
+				base = IO.readWholeStream(in, 0).array();
+			}
+			// At least stream the result! We don't have to close these streams,
+			// as they don't hold resources.
+			StreamSupplier supp = () -> new BinaryDeltaInputStream(base,
+					new InflaterInputStream(
+							new BinaryHunkInputStream(new ByteArrayInputStream(
+									hunk.getBuffer(), start, length))));
+
+			// This just reads the first bits of the stream.
+			long finalSize = ((BinaryDeltaInputStream) supp.load()).getExpectedResultSize();
+
+			return new ContentStreamLoader(supp, finalSize);
+		}
+		default:
+			throw new UnsupportedOperationException(MessageFormat.format(
+					JGitText.get().applyBinaryPatchTypeNotSupported,
+					hunk.getType().name()));
+		}
+	}
+
+	private ContentStreamLoader applyText(RawText rt,
+			org.eclipse.jgit.patch.FileHeader fh)
+			throws IOException, PatchApplyException {
+		List<ByteBuffer> oldLines = new ArrayList<>(rt.size());
+		for (int i = 0; i < rt.size(); i++) {
+			oldLines.add(rt.getRawString(i));
+		}
+		List<ByteBuffer> newLines = new ArrayList<>(oldLines);
+		int afterLastHunk = 0;
+		int lineNumberShift = 0;
+		int lastHunkNewLine = -1;
+		for (org.eclipse.jgit.patch.HunkHeader hh : fh.getHunks()) {
+			// We assume hunks to be ordered
+			if (hh.getNewStartLine() <= lastHunkNewLine) {
+				throw new PatchApplyException(MessageFormat
+						.format(JGitText.get().patchApplyException, hh));
+			}
+			lastHunkNewLine = hh.getNewStartLine();
+
+			byte[] b = new byte[hh.getEndOffset() - hh.getStartOffset()];
+			System.arraycopy(hh.getBuffer(), hh.getStartOffset(), b, 0,
+					b.length);
+			RawText hrt = new RawText(b);
+
+			List<ByteBuffer> hunkLines = new ArrayList<>(hrt.size());
+			for (int i = 0; i < hrt.size(); i++) {
+				hunkLines.add(hrt.getRawString(i));
+			}
+
+			if (hh.getNewStartLine() == 0) {
+				// Must be the single hunk for clearing all content
+				if (fh.getHunks().size() == 1
+						&& canApplyAt(hunkLines, newLines, 0)) {
+					newLines.clear();
+					break;
+				}
+				throw new PatchApplyException(MessageFormat
+						.format(JGitText.get().patchApplyException, hh));
+			}
+			// Hunk lines as reported by the hunk may be off, so don't rely on
+			// them.
+			int applyAt = hh.getNewStartLine() - 1 + lineNumberShift;
+			// But they definitely should not go backwards.
+			if (applyAt < afterLastHunk && lineNumberShift < 0) {
+				applyAt = hh.getNewStartLine() - 1;
+				lineNumberShift = 0;
+			}
+			if (applyAt < afterLastHunk) {
+				throw new PatchApplyException(MessageFormat
+						.format(JGitText.get().patchApplyException, hh));
+			}
+			boolean applies = false;
+			int oldLinesInHunk = hh.getLinesContext()
+					+ hh.getOldImage().getLinesDeleted();
+			if (oldLinesInHunk <= 1) {
+				// Don't shift hunks without context lines. Just try the
+				// position corrected by the current lineNumberShift, and if
+				// that fails, the position recorded in the hunk header.
+				applies = canApplyAt(hunkLines, newLines, applyAt);
+				if (!applies && lineNumberShift != 0) {
+					applyAt = hh.getNewStartLine() - 1;
+					applies = applyAt >= afterLastHunk
+							&& canApplyAt(hunkLines, newLines, applyAt);
+				}
+			} else {
+				int maxShift = applyAt - afterLastHunk;
+				for (int shift = 0; shift <= maxShift; shift++) {
+					if (canApplyAt(hunkLines, newLines, applyAt - shift)) {
+						applies = true;
+						applyAt -= shift;
+						break;
+					}
+				}
+				if (!applies) {
+					// Try shifting the hunk downwards
+					applyAt = hh.getNewStartLine() - 1 + lineNumberShift;
+					maxShift = newLines.size() - applyAt - oldLinesInHunk;
+					for (int shift = 1; shift <= maxShift; shift++) {
+						if (canApplyAt(hunkLines, newLines, applyAt + shift)) {
+							applies = true;
+							applyAt += shift;
+							break;
+						}
+					}
+				}
+			}
+			if (!applies) {
+				throw new PatchApplyException(MessageFormat
+						.format(JGitText.get().patchApplyException, hh));
+			}
+			// Hunk applies at applyAt. Apply it, and update afterLastHunk and
+			// lineNumberShift
+			lineNumberShift = applyAt - hh.getNewStartLine() + 1;
+			int sz = hunkLines.size();
+			for (int j = 1; j < sz; j++) {
+				ByteBuffer hunkLine = hunkLines.get(j);
+				if (!hunkLine.hasRemaining()) {
+					// Completely empty line; accept as empty context line
+					applyAt++;
+					continue;
+				}
+				switch (hunkLine.array()[hunkLine.position()]) {
+				case ' ':
+					applyAt++;
+					break;
+				case '-':
+					newLines.remove(applyAt);
+					break;
+				case '+':
+					newLines.add(applyAt++, slice(hunkLine, 1));
+					break;
+				default:
+					break;
+				}
+			}
+			afterLastHunk = applyAt;
+		}
+		if (!isNoNewlineAtEndOfFile(fh)) {
+			newLines.add(null);
+		}
+		if (!rt.isMissingNewlineAtEnd()) {
+			oldLines.add(null);
+		}
+
+		// We could check if old == new, but the short-circuiting complicates
+		// logic for inCore patching, so just write the new thing regardless.
+		TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
+		try (OutputStream out = buffer) {
+			for (Iterator<ByteBuffer> l = newLines.iterator(); l.hasNext();) {
+				ByteBuffer line = l.next();
+				if (line == null) {
+					// Must be the marker for the final newline
+					break;
+				}
+				out.write(line.array(), line.position(), line.remaining());
+				if (l.hasNext()) {
+					out.write('\n');
+				}
+			}
+			return new ContentStreamLoader(buffer::openInputStream,
+					buffer.length());
+		}
+	}
+
+	private boolean canApplyAt(List<ByteBuffer> hunkLines,
+			List<ByteBuffer> newLines, int line) {
+		int sz = hunkLines.size();
+		int limit = newLines.size();
+		int pos = line;
+		for (int j = 1; j < sz; j++) {
+			ByteBuffer hunkLine = hunkLines.get(j);
+			if (!hunkLine.hasRemaining()) {
+				// Empty line. Accept as empty context line.
+				if (pos >= limit || newLines.get(pos).hasRemaining()) {
+					return false;
+				}
+				pos++;
+				continue;
+			}
+			switch (hunkLine.array()[hunkLine.position()]) {
+			case ' ':
+			case '-':
+				if (pos >= limit
+						|| !newLines.get(pos).equals(slice(hunkLine, 1))) {
+					return false;
+				}
+				pos++;
+				break;
+			default:
+				break;
+			}
+		}
+		return true;
+	}
+
+	private ByteBuffer slice(ByteBuffer b, int off) {
+		int newOffset = b.position() + off;
+		return ByteBuffer.wrap(b.array(), newOffset, b.limit() - newOffset);
+	}
+
+	private boolean isNoNewlineAtEndOfFile(
+			org.eclipse.jgit.patch.FileHeader fh) {
+		List<? extends org.eclipse.jgit.patch.HunkHeader> hunks = fh.getHunks();
+		if (hunks == null || hunks.isEmpty()) {
+			return false;
+		}
+		org.eclipse.jgit.patch.HunkHeader lastHunk = hunks
+				.get(hunks.size() - 1);
+		byte[] buf = new byte[lastHunk.getEndOffset()
+				- lastHunk.getStartOffset()];
+		System.arraycopy(lastHunk.getBuffer(), lastHunk.getStartOffset(), buf,
+				0, buf.length);
+		RawText lhrt = new RawText(buf);
+		return lhrt.getString(lhrt.size() - 1)
+				.equals("\\ No newline at end of file"); //$NON-NLS-1$
+	}
+
+	/**
+	 * An {@link InputStream} that updates a {@link SHA1} on every byte read.
+	 */
+	private static class SHA1InputStream extends InputStream {
+
+		private final SHA1 hash;
+
+		private final InputStream in;
+
+		SHA1InputStream(InputStream in, long size) {
+			hash = SHA1.newInstance();
+			hash.update(Constants.encodedTypeString(Constants.OBJ_BLOB));
+			hash.update((byte) ' ');
+			hash.update(Constants.encodeASCII(size));
+			hash.update((byte) 0);
+			this.in = in;
+		}
+
+		public SHA1 getHash() {
+			return hash;
+		}
+
+		@Override
+		public int read() throws IOException {
+			int b = in.read();
+			if (b >= 0) {
+				hash.update((byte) b);
+			}
+			return b;
+		}
+
+		@Override
+		public int read(byte[] b, int off, int len) throws IOException {
+			int n = in.read(b, off, len);
+			if (n > 0) {
+				hash.update(b, off, n);
+			}
+			return n;
+		}
+
+		@Override
+		public void close() throws IOException {
+			in.close();
+		}
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
index 81a70af..4fec5da 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
@@ -115,7 +115,7 @@
 		for (String v : list) {
 			if (s.length() > 0)
 				s.append(',');
-			s.append(v.replaceAll("\n", "").trim()); //$NON-NLS-1$ //$NON-NLS-2$
+			s.append(v.replace("\n", "").trim()); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		return s.toString();
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
index b7be59d..adc1c98 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
@@ -90,6 +90,7 @@
 
 	private final boolean thinPack;
 	private final boolean atomic;
+	private final boolean useBitmaps;
 
 	/** A list of option strings associated with this push. */
 	private List<String> pushOptions;
@@ -118,6 +119,7 @@
 		thinPack = transport.isPushThin();
 		atomic = transport.isPushAtomic();
 		pushOptions = transport.getPushOptions();
+		useBitmaps = transport.isPushUseBitmaps();
 	}
 
 	/** {@inheritDoc} */
@@ -320,7 +322,7 @@
 
 			writer.setIndexDisabled(true);
 			writer.setUseCachedPacks(true);
-			writer.setUseBitmaps(true);
+			writer.setUseBitmaps(useBitmaps);
 			writer.setThin(thinPack);
 			writer.setReuseValidatingObjects(false);
 			writer.setDeltaBaseAsOffset(capableOfsDelta);
@@ -421,6 +423,16 @@
 		return pushOptions;
 	}
 
+	/**
+	 * Whether to use bitmaps for push.
+	 *
+	 * @return true if push use bitmaps.
+	 * @since 6.4
+	 */
+	public boolean isUseBitmaps() {
+		return useBitmaps;
+	}
+
 	private static class CheckingSideBandOutputStream extends OutputStream {
 		private final InputStream in;
 		private final OutputStream out;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
index 0663c51..009a70b 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchRequest.java
@@ -40,6 +40,9 @@
 	@Nullable
 	final String agent;
 
+	@Nullable
+	final String clientSID;
+
 	/**
 	 * Initialize the common fields of a fetch request.
 	 *
@@ -61,12 +64,15 @@
 	 *            specific time, instead of depth
 	 * @param agent
 	 *            agent as reported by the client in the request body
+	 * @param clientSID
+	 *            agent as reported by the client in the request body
 	 */
 	FetchRequest(@NonNull Set<ObjectId> wantIds, int depth,
 			@NonNull Set<ObjectId> clientShallowCommits,
 			@NonNull FilterSpec filterSpec,
 			@NonNull Set<String> clientCapabilities, int deepenSince,
-			@NonNull List<String> deepenNots, @Nullable String agent) {
+			@NonNull List<String> deepenNots, @Nullable String agent,
+			@Nullable String clientSID) {
 		this.wantIds = requireNonNull(wantIds);
 		this.depth = depth;
 		this.clientShallowCommits = requireNonNull(clientShallowCommits);
@@ -75,6 +81,7 @@
 		this.deepenSince = deepenSince;
 		this.deepenNots = requireNonNull(deepenNots);
 		this.agent = agent;
+		this.clientSID = clientSID;
 	}
 
 	/**
@@ -160,4 +167,13 @@
 	String getAgent() {
 		return agent;
 	}
+
+	/**
+	 * @return string identifying the client session ID (as sent in the request body by the
+	 *         client)
+	 */
+	@Nullable
+	String getClientSID() {
+		return clientSID;
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV0Request.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV0Request.java
index 4decb79..ca3639d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV0Request.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV0Request.java
@@ -30,9 +30,11 @@
 			@NonNull Set<ObjectId> clientShallowCommits,
 			@NonNull FilterSpec filterSpec,
 			@NonNull Set<String> clientCapabilities, int deepenSince,
-			@NonNull List<String> deepenNotRefs, @Nullable String agent) {
+			@NonNull List<String> deepenNotRefs, @Nullable String agent,
+			@Nullable String clientSID) {
 		super(wantIds, depth, clientShallowCommits, filterSpec,
-				clientCapabilities, deepenSince, deepenNotRefs, agent);
+				clientCapabilities, deepenSince, deepenNotRefs, agent,
+				clientSID);
 	}
 
 	static final class Builder {
@@ -53,6 +55,8 @@
 
 		String agent;
 
+		String clientSID;
+
 		/**
 		 * @param objectId
 		 *            object id received in a "want" line
@@ -149,6 +153,16 @@
 		}
 
 		/**
+		 * @param clientSID
+		 *            session-id line sent by the client in the request body
+		 * @return this builder
+		 */
+		Builder setClientSID(String clientSID) {
+			this.clientSID = clientSID;
+			return this;
+		}
+
+		/**
 		 * @param filter
 		 *            the filter set in a filter line
 		 * @return this builder
@@ -160,7 +174,8 @@
 
 		FetchV0Request build() {
 			return new FetchV0Request(wantIds, depth, clientShallowCommits,
-					filterSpec, clientCaps, deepenSince, deepenNots, agent);
+					filterSpec, clientCaps, deepenSince, deepenNots, agent,
+					clientSID);
 		}
 
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
index 446a3bc..3d4f381 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
@@ -55,10 +55,11 @@
 			boolean doneReceived, boolean waitForDone,
 			@NonNull Set<String> clientCapabilities,
 			@Nullable String agent, @NonNull List<String> serverOptions,
-			boolean sidebandAll, @NonNull List<String> packfileUriProtocols) {
+			boolean sidebandAll, @NonNull List<String> packfileUriProtocols,
+			@Nullable String clientSID) {
 		super(wantIds, depth, clientShallowCommits, filterSpec,
 				clientCapabilities, deepenSince,
-				deepenNots, agent);
+				deepenNots, agent, clientSID);
 		this.peerHas = requireNonNull(peerHas);
 		this.wantedRefs = requireNonNull(wantedRefs);
 		this.doneReceived = doneReceived;
@@ -101,7 +102,7 @@
 	}
 
 	/**
-	 * Options received in server-option lines. The caller can choose to	 act on
+	 * Options received in server-option lines. The caller can choose to act on
 	 * these in an application-specific way
 	 *
 	 * @return Immutable list of server options received in the request
@@ -157,6 +158,9 @@
 		@Nullable
 		String agent;
 
+		@Nullable
+		String clientSID;
+
 		final List<String> serverOptions = new ArrayList<>();
 
 		boolean sidebandAll;
@@ -317,6 +321,17 @@
 		}
 
 		/**
+		 * @param clientSIDValue
+		 *            the client-supplied session capability, without the
+		 *            leading "session-id="
+		 * @return this builder
+		 */
+		Builder setClientSID(@Nullable String clientSIDValue) {
+			clientSID = clientSIDValue;
+			return this;
+		}
+
+		/**
 		 * Records an application-specific option supplied in a server-option
 		 * line, for later retrieval with
 		 * {@link FetchV2Request#getServerOptions}.
@@ -354,7 +369,8 @@
 					depth, filterSpec, doneReceived, waitForDone, clientCapabilities,
 					agent, Collections.unmodifiableList(serverOptions),
 					sidebandAll,
-					Collections.unmodifiableList(packfileUriProtocols));
+					Collections.unmodifiableList(packfileUriProtocols),
+					clientSID);
 		}
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
index be14e92..7e5179d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
@@ -248,6 +248,13 @@
 	public static final String OPTION_SERVER_OPTION = "server-option"; //$NON-NLS-1$
 
 	/**
+	 * Option for passing client session ID to the server.
+	 *
+	 * @since 6.4
+	 */
+	public static final String OPTION_SESSION_ID = "session-id"; //$NON-NLS-1$
+
+	/**
 	 * The server supports listing refs using protocol v2.
 	 *
 	 * @since 5.0
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/LsRefsV2Request.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/LsRefsV2Request.java
index f68d9c8..856047e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/LsRefsV2Request.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/LsRefsV2Request.java
@@ -36,17 +36,21 @@
 	@Nullable
 	private final String agent;
 
+	private final String clientSID;
+
 	@NonNull
 	private final List<String> serverOptions;
 
 	private LsRefsV2Request(List<String> refPrefixes, boolean symrefs,
 			boolean peel, @Nullable String agent,
-			@NonNull List<String> serverOptions) {
+			@NonNull List<String> serverOptions,
+			@Nullable String clientSID) {
 		this.refPrefixes = refPrefixes;
 		this.symrefs = symrefs;
 		this.peel = peel;
 		this.agent = agent;
 		this.serverOptions = requireNonNull(serverOptions);
+		this.clientSID = clientSID;
 	}
 
 	/** @return ref prefixes that the client requested. */
@@ -75,6 +79,16 @@
 	}
 
 	/**
+	 * @return session-id as reported by the client
+	 *
+	 * @since 6.4
+	 */
+	@Nullable
+	public String getClientSID() {
+		return clientSID;
+	}
+
+	/**
 	 * Get application-specific options provided by the client using
 	 * --server-option.
 	 * <p>
@@ -109,6 +123,8 @@
 
 		private String agent;
 
+		private String clientSID;
+
 		private Builder() {
 		}
 
@@ -171,11 +187,28 @@
 			return this;
 		}
 
+		/**
+		 * Value of a session-id line received after the command and before the
+		 * arguments. E.g. "session-id=a.b.c" should set "a.b.c".
+		 *
+		 * @param value
+		 *            the client-supplied session-id capability, without leading
+		 *            "session-id="
+		 * @return this builder
+		 *
+		 * @since 6.4
+		 */
+		public Builder setClientSID(@Nullable String value) {
+			clientSID = value;
+			return this;
+		}
+
 		/** @return LsRefsV2Request */
 		public LsRefsV2Request build() {
 			return new LsRefsV2Request(
 					Collections.unmodifiableList(refPrefixes), symrefs, peel,
-					agent, Collections.unmodifiableList(serverOptions));
+					agent, Collections.unmodifiableList(serverOptions),
+					clientSID);
 		}
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
index e43ea02..d966904 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
@@ -658,7 +658,8 @@
 			}
 
 			byte[] delta = inflateAndReturn(Source.DATABASE, info.size);
-			checkIfTooLarge(type, BinaryDelta.getResultSize(delta));
+			long finalSz = BinaryDelta.getResultSize(delta);
+			checkIfTooLarge(type, finalSz);
 
 			visit.data = BinaryDelta.apply(visit.parent.data, delta);
 			delta = null;
@@ -684,6 +685,7 @@
 
 			PackedObjectInfo oe;
 			oe = newInfo(tempObjectId, visit.delta, visit.parent.id);
+			oe.setFullSize(finalSz);
 			oe.setOffset(visit.delta.position);
 			oe.setType(type);
 			onInflatedObjectData(oe, type, visit.data);
@@ -861,6 +863,7 @@
 			final int typeCode = ldr.getType();
 			final PackedObjectInfo oe = newInfo(baseId, null, null);
 			oe.setType(typeCode);
+			oe.setFullSize(ldr.getSize());
 			if (onAppendBase(typeCode, visit.data, oe))
 				entries[entryCount++] = oe;
 			visit.nextChild = firstChildOf(oe);
@@ -1078,6 +1081,7 @@
 		obj.setOffset(pos);
 		obj.setType(type);
 		obj.setSize(sizeBeforeInflating);
+		obj.setFullSize(sz);
 		onEndWholeObject(obj);
 		if (data != null)
 			onInflatedObjectData(obj, type, data);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackedObjectInfo.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackedObjectInfo.java
index fe1209b..bf7997e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackedObjectInfo.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackedObjectInfo.java
@@ -31,6 +31,8 @@
 
 	private long sizeBeforeInflating;
 
+	private long fullSize;
+
 	PackedObjectInfo(final long headerOffset, final int packedCRC,
 			final AnyObjectId id) {
 		super(id);
@@ -111,11 +113,45 @@
 		this.type = type;
 	}
 
+	/**
+	 * Size in storage
+	 *
+	 * @param sizeBeforeInflating
+	 */
 	void setSize(long sizeBeforeInflating) {
 		this.sizeBeforeInflating = sizeBeforeInflating;
 	}
 
+	/**
+	 * Size in storage (maybe deflated and/or deltified).
+	 *
+	 * This is the size in storage. In packs, this is the bytes used by the
+	 * object contents (themselves or as deltas) compressed by zlib (deflated).
+	 *
+	 * @return size in storage
+	 */
 	long getSize() {
 		return sizeBeforeInflating;
 	}
+
+	/**
+	 * Real (materialized) size of the object (inflated, undeltified)
+	 *
+	 * @param size
+	 *            size of the object in bytes, without compressing nor
+	 *            deltifying
+	 * @since 6.4
+	 */
+	public void setFullSize(long size) {
+		this.fullSize = size;
+	}
+
+	/**
+	 * @return size of the object (inflated, undeltified)
+	 *
+	 * @since 6.4
+	 */
+	public long getFullSize() {
+		return fullSize;
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV0Parser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV0Parser.java
index 21a4925..9d05551 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV0Parser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV0Parser.java
@@ -152,6 +152,7 @@
 					FirstWant firstLine = FirstWant.fromLine(line);
 					reqBuilder.addClientCapabilities(firstLine.getCapabilities());
 					reqBuilder.setAgent(firstLine.getAgent());
+					reqBuilder.setClientSID(firstLine.getClientSID());
 					line = firstLine.getLine();
 				}
 			}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
index b38deb6..c4129ff 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
@@ -20,6 +20,7 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SESSION_ID;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_DEEPEN;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_DEEPEN_NOT;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_DEEPEN_SINCE;
@@ -63,10 +64,12 @@
 	 */
 	private static String consumeCapabilities(PacketLineIn pckIn,
 			Consumer<String> serverOptionConsumer,
-			Consumer<String> agentConsumer) throws IOException {
+			Consumer<String> agentConsumer,
+			Consumer<String> clientSIDConsumer) throws IOException {
 
 		String serverOptionPrefix = OPTION_SERVER_OPTION + '=';
 		String agentPrefix = OPTION_AGENT + '=';
+		String clientSIDPrefix = OPTION_SESSION_ID + '=';
 
 		String line = pckIn.readString();
 		while (!PacketLineIn.isDelimiter(line) && !PacketLineIn.isEnd(line)) {
@@ -75,6 +78,9 @@
 						.accept(line.substring(serverOptionPrefix.length()));
 			} else if (line.startsWith(agentPrefix)) {
 				agentConsumer.accept(line.substring(agentPrefix.length()));
+			} else if (line.startsWith(clientSIDPrefix)) {
+				clientSIDConsumer
+						.accept(line.substring(clientSIDPrefix.length()));
 			} else {
 				// Unrecognized capability. Ignore it.
 			}
@@ -108,7 +114,8 @@
 
 		String line = consumeCapabilities(pckIn,
 				serverOption -> reqBuilder.addServerOption(serverOption),
-				agent -> reqBuilder.setAgent(agent));
+				agent -> reqBuilder.setAgent(agent),
+				clientSID -> reqBuilder.setClientSID(clientSID));
 
 		if (PacketLineIn.isEnd(line)) {
 			return reqBuilder.build();
@@ -235,7 +242,8 @@
 
 		String line = consumeCapabilities(pckIn,
 				serverOption -> builder.addServerOption(serverOption),
-				agent -> builder.setAgent(agent));
+				agent -> builder.setAgent(agent),
+				clientSID -> builder.setClientSID(clientSID));
 
 		if (PacketLineIn.isEnd(line)) {
 			return builder.build();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
index b70eedc..816cec8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
@@ -22,6 +22,7 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_ERR;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_SHALLOW;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SESSION_ID;
 import static org.eclipse.jgit.transport.SideBandOutputStream.CH_DATA;
 import static org.eclipse.jgit.transport.SideBandOutputStream.CH_ERROR;
 import static org.eclipse.jgit.transport.SideBandOutputStream.CH_PROGRESS;
@@ -35,6 +36,7 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -113,7 +115,15 @@
 
 		/** @return capabilities parsed from the line. */
 		public Set<String> getCapabilities() {
-			return command.getCapabilities();
+			Set<String> reconstructedCapabilites = new HashSet<>();
+			for (Map.Entry<String, String> e : command.getCapabilities()
+					.entrySet()) {
+				String cap = e.getValue() == null ? e.getKey()
+						: e.getKey() + "=" + e.getValue(); //$NON-NLS-1$
+				reconstructedCapabilites.add(cap);
+			}
+
+			return reconstructedCapabilites;
 		}
 	}
 
@@ -166,6 +176,9 @@
 
 	private boolean allowQuiet = true;
 
+	/** Should the server advertise and accept the session-id capability. */
+	private boolean allowReceiveClientSID;
+
 	/** Identity to record action as within the reflog. */
 	private PersonIdent refLogIdent;
 
@@ -215,7 +228,10 @@
 	private Set<ObjectId> advertisedHaves;
 
 	/** Capabilities requested by the client. */
-	private Set<String> enabledCapabilities;
+	private Map<String, String> enabledCapabilities;
+
+	/** Session ID sent from the client. Null if none was received. */
+	private String clientSID;
 
 	String userAgent;
 
@@ -296,6 +312,7 @@
 
 		TransferConfig tc = db.getConfig().get(TransferConfig.KEY);
 		objectChecker = tc.newReceiveObjectChecker();
+		allowReceiveClientSID = tc.isAllowReceiveClientSID();
 
 		ReceiveConfig rc = db.getConfig().get(ReceiveConfig::new);
 		allowCreates = rc.allowCreates;
@@ -886,7 +903,7 @@
 	 */
 	public boolean isSideBand() throws RequestNotYetReadException {
 		checkRequestWasRead();
-		return enabledCapabilities.contains(CAPABILITY_SIDE_BAND_64K);
+		return enabledCapabilities.containsKey(CAPABILITY_SIDE_BAND_64K);
 	}
 
 	/**
@@ -987,7 +1004,11 @@
 	 * @since 4.0
 	 */
 	public String getPeerUserAgent() {
-		return UserAgent.getAgent(enabledCapabilities, userAgent);
+		if (enabledCapabilities == null || enabledCapabilities.isEmpty()) {
+			return userAgent;
+		}
+
+		return enabledCapabilities.getOrDefault(OPTION_AGENT, userAgent);
 	}
 
 	/**
@@ -1182,7 +1203,7 @@
 		pckOut = new PacketLineOut(rawOut);
 		pckOut.setFlushOnEnd(false);
 
-		enabledCapabilities = new HashSet<>();
+		enabledCapabilities = new HashMap<>();
 		commands = new ArrayList<>();
 	}
 
@@ -1267,25 +1288,33 @@
 		adv.advertiseCapability(CAPABILITY_SIDE_BAND_64K);
 		adv.advertiseCapability(CAPABILITY_DELETE_REFS);
 		adv.advertiseCapability(CAPABILITY_REPORT_STATUS);
-		if (allowQuiet)
+		if (allowReceiveClientSID) {
+			adv.advertiseCapability(OPTION_SESSION_ID);
+		}
+		if (allowQuiet) {
 			adv.advertiseCapability(CAPABILITY_QUIET);
+		}
 		String nonce = getPushCertificateParser().getAdvertiseNonce();
 		if (nonce != null) {
 			adv.advertiseCapability(nonce);
 		}
-		if (db.getRefDatabase().performsAtomicTransactions())
+		if (db.getRefDatabase().performsAtomicTransactions()) {
 			adv.advertiseCapability(CAPABILITY_ATOMIC);
-		if (allowOfsDelta)
+		}
+		if (allowOfsDelta) {
 			adv.advertiseCapability(CAPABILITY_OFS_DELTA);
+		}
 		if (allowPushOptions) {
 			adv.advertiseCapability(CAPABILITY_PUSH_OPTIONS);
 		}
 		adv.advertiseCapability(OPTION_AGENT, UserAgent.get());
 		adv.send(getAdvertisedOrDefaultRefs().values());
-		for (ObjectId obj : advertisedHaves)
+		for (ObjectId obj : advertisedHaves) {
 			adv.advertiseHave(obj);
-		if (adv.isEmpty())
+		}
+		if (adv.isEmpty()) {
 			adv.advertiseId(ObjectId.zeroId(), "capabilities^{}"); //$NON-NLS-1$
+		}
 		adv.end();
 	}
 
@@ -1437,6 +1466,9 @@
 		usePushOptions = isCapabilityEnabled(CAPABILITY_PUSH_OPTIONS);
 		sideBand = isCapabilityEnabled(CAPABILITY_SIDE_BAND_64K);
 		quiet = allowQuiet && isCapabilityEnabled(CAPABILITY_QUIET);
+
+		clientSID = enabledCapabilities.get(OPTION_SESSION_ID);
+
 		if (sideBand) {
 			OutputStream out = rawOut;
 
@@ -1457,7 +1489,7 @@
 	 * @return true if the peer requested the capability to be enabled.
 	 */
 	private boolean isCapabilityEnabled(String name) {
-		return enabledCapabilities.contains(name);
+		return enabledCapabilities.containsKey(name);
 	}
 
 	private void checkRequestWasRead() {
@@ -2118,6 +2150,14 @@
 	}
 
 	/**
+	 * @return The client session-id.
+	 * @since 6.4
+	 */
+	public String getClientSID() {
+		return clientSID;
+	}
+
+	/**
 	 * Execute the receive task on the socket.
 	 *
 	 * @param input
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
index 02be434..805166a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
@@ -125,6 +125,8 @@
 	private final boolean advertiseWaitForDone;
 	private final boolean advertiseObjectInfo;
 
+	private final boolean allowReceiveClientSID;
+
 	final @Nullable ProtocolVersion protocolVersion;
 	final String[] hideRefs;
 
@@ -214,6 +216,8 @@
 				"advertisewaitfordone", false);
 		advertiseObjectInfo = rc.getBoolean("uploadpack",
 				"advertiseobjectinfo", false);
+		allowReceiveClientSID = rc.getBoolean("transfer", "advertisesid",
+				false);
 	}
 
 	/**
@@ -329,6 +333,14 @@
 	}
 
 	/**
+	 * @return true to advertise and receive session-id capability
+	 * @since 6.4
+	 */
+	public boolean isAllowReceiveClientSID() {
+		return allowReceiveClientSID;
+	}
+
+	/**
 	 * Get {@link org.eclipse.jgit.transport.RefFilter} respecting configured
 	 * hidden refs.
 	 *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
index 7cea998..ee35f48 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
@@ -519,9 +519,7 @@
 
 			if (proto.canHandle(uri, local, remoteName)) {
 				Transport tn = proto.open(uri, local, remoteName);
-				tn.prePush = Hooks.prePush(local, tn.hookOutRedirect);
-				tn.prePush.setRemoteLocation(uri.toString());
-				tn.prePush.setRemoteName(remoteName);
+				tn.remoteName = remoteName;
 				return tn;
 			}
 		}
@@ -707,6 +705,13 @@
 	public static final boolean DEFAULT_PUSH_THIN = false;
 
 	/**
+	 * Default setting for {@link #pushUseBitmaps} option.
+	 *
+	 * @since 6.4
+	 */
+	public static final boolean DEFAULT_PUSH_USE_BITMAPS = true;
+
+	/**
 	 * Specification for fetch or push operations, to fetch or push all tags.
 	 * Acts as --tags.
 	 */
@@ -758,6 +763,9 @@
 	/** Should push be all-or-nothing atomic behavior? */
 	private boolean pushAtomic;
 
+	/** Should push use bitmaps? */
+	private boolean pushUseBitmaps = DEFAULT_PUSH_USE_BITMAPS;
+
 	/** Should push just check for operation result, not really push. */
 	private boolean dryRun;
 
@@ -783,7 +791,9 @@
 
 	private PrintStream hookOutRedirect;
 
-	private PrePushHook prePush;
+	private PrintStream hookErrRedirect;
+
+	private String remoteName;
 
 	private Integer depth;
 
@@ -812,7 +822,6 @@
 		this.protocol = tc.protocolVersion;
 		this.objectChecker = tc.newObjectChecker();
 		this.credentialsProvider = CredentialsProvider.getDefault();
-		prePush = Hooks.prePush(local, hookOutRedirect);
 	}
 
 	/**
@@ -862,6 +871,32 @@
 	}
 
 	/**
+	 * Sets a {@link PrintStream} a {@link PrePushHook} may write its stdout to.
+	 * If not set, {@link System#out} will be used.
+	 *
+	 * @param redirect
+	 *            {@link PrintStream} to use; if {@code null},
+	 *            {@link System#out} will be used
+	 * @since 6.4
+	 */
+	public void setHookOutputStream(PrintStream redirect) {
+		hookOutRedirect = redirect;
+	}
+
+	/**
+	 * Sets a {@link PrintStream} a {@link PrePushHook} may write its stderr to.
+	 * If not set, {@link System#err} will be used.
+	 *
+	 * @param redirect
+	 *            {@link PrintStream} to use; if {@code null},
+	 *            {@link System#err} will be used
+	 * @since 6.4
+	 */
+	public void setHookErrorStream(PrintStream redirect) {
+		hookErrRedirect = redirect;
+	}
+
+	/**
 	 * Get the description of how annotated tags should be treated during fetch.
 	 *
 	 * @return option indicating the behavior of annotated tags in fetch.
@@ -1028,6 +1063,28 @@
 	}
 
 	/**
+	 * Default setting is: {@value #DEFAULT_PUSH_USE_BITMAPS}
+	 *
+	 * @return true if push use bitmaps.
+	 * @since 6.4
+	 */
+	public boolean isPushUseBitmaps() {
+		return pushUseBitmaps;
+	}
+
+	/**
+	 * Set whether to use bitmaps for push. Default setting is:
+	 * {@value #DEFAULT_PUSH_USE_BITMAPS}
+	 *
+	 * @param useBitmaps
+	 *            false to disable use of bitmaps for push, true otherwise.
+	 * @since 6.4
+	 */
+	public void setPushUseBitmaps(boolean useBitmaps) {
+		this.pushUseBitmaps = useBitmaps;
+	}
+
+	/**
 	 * Whether destination refs should be removed if they no longer exist at the
 	 * source repository.
 	 *
@@ -1468,8 +1525,15 @@
 				throw new TransportException(JGitText.get().nothingToPush);
 		}
 
-		final PushProcess pushProcess = new PushProcess(this, toPush, prePush,
-				out);
+		PrePushHook prePush = null;
+		if (local != null) {
+			// Pushing will always have a local repository. But better safe than
+			// sorry.
+			prePush = Hooks.prePush(local, hookOutRedirect, hookErrRedirect);
+			prePush.setRemoteLocation(uri.toString());
+			prePush.setRemoteName(remoteName);
+		}
+		PushProcess pushProcess = new PushProcess(this, toPush, prePush, out);
 		return pushProcess.execute(monitor);
 	}
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
index d2a2a97..9b40dfe 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
@@ -34,6 +34,7 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDEBAND_ALL;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SESSION_ID;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
 import static org.eclipse.jgit.transport.GitProtocolConstants.PACKET_ACK;
@@ -1382,6 +1383,10 @@
 						: "")
 				+ OPTION_SHALLOW);
 		caps.add(CAPABILITY_SERVER_OPTION);
+		if (transferConfig.isAllowReceiveClientSID()) {
+			caps.add(OPTION_SESSION_ID);
+		}
+
 		return caps;
 	}
 
@@ -1700,6 +1705,21 @@
 		return userAgent;
 	}
 
+	/**
+	 * Get the session ID if received from the client.
+	 *
+	 * @return The session ID if it has been received from the client.
+	 * @since 6.4
+	 */
+	@Nullable
+	public String getClientSID() {
+		if (currentRequest == null) {
+			return null;
+		}
+
+		return currentRequest.getClientSID();
+	}
+
 	private boolean negotiate(FetchRequest req,
 			PackStatistics.Accumulator accumulator,
 			PacketLineOut pckOut)
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UserAgent.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UserAgent.java
index 604eb3a..df98d0c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UserAgent.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UserAgent.java
@@ -91,6 +91,15 @@
 		userAgent = StringUtils.isEmptyOrNull(agent) ? null : clean(agent);
 	}
 
+	/**
+	 *
+	 * @param options
+	 * @param transportAgent
+	 * @return The transport agent.
+	 * @deprecated Capabilities with <key>=<value> shape are now parsed
+	 *             alongside other capabilities in the ReceivePack flow.
+	 */
+	@Deprecated
 	static String getAgent(Set<String> options, String transportAgent) {
 		if (options == null || options.isEmpty()) {
 			return transportAgent;
@@ -105,6 +114,14 @@
 		return transportAgent;
 	}
 
+	/**
+	 *
+	 * @param options
+	 * @return True if the transport agent is set. False otherwise.
+	 * @deprecated Capabilities with <key>=<value> shape are now parsed
+	 *             alongside other capabilities in the ReceivePack flow.
+	 */
+	@Deprecated
 	static boolean hasAgent(Set<String> options) {
 		return getAgent(options, null) != null;
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/NameConflictTreeWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/NameConflictTreeWalk.java
index 2fd945b..ffb4137 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/NameConflictTreeWalk.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/NameConflictTreeWalk.java
@@ -56,6 +56,13 @@
 public class NameConflictTreeWalk extends TreeWalk {
 	private static final int TREE_MODE = FileMode.TREE.getBits();
 
+	/**
+	 * True if all {@link #trees} point to entries with equal names.
+	 *
+	 * If at least one tree iterator point to a different name or
+	 * reached end of the tree, the value is false.
+	 * Note: if all iterators reached end of trees, the value is true.
+	 */
 	private boolean allTreesNamesMatchFastMinRef;
 
 	private AbstractTreeIterator dfConflict;
@@ -125,13 +132,20 @@
 			return trees[trees.length - 1];
 		}
 		AbstractTreeIterator minRef = trees[i];
-		allTreesNamesMatchFastMinRef = true;
+		// if i > 0 then we already know that only some trees reached the end
+		// (but not all), so it is impossible that ALL trees points to the
+		// minRef entry.
+		// Only if i == 0 it is still possible that all trees points to the same
+		// minRef entry.
+		allTreesNamesMatchFastMinRef = i == 0;
 		boolean hasConflict = false;
 		minRef.matches = minRef;
 		while (++i < trees.length) {
 			final AbstractTreeIterator t = trees[i];
-			if (t.eof())
+			if (t.eof()) {
+				allTreesNamesMatchFastMinRef = false;
 				continue;
+			}
 
 			final int cmp = t.pathCompare(minRef);
 			if (cmp < 0) {
@@ -152,8 +166,9 @@
 				// Exact name/mode match is best.
 				//
 				t.matches = minRef;
-			} else if (allTreesNamesMatchFastMinRef && isTree(t) && !isTree(minRef)
-					&& !isGitlink(minRef) && nameEqual(t, minRef)) {
+			} else if (allTreesNamesMatchFastMinRef && isTree(t)
+					&& !isTree(minRef) && !isGitlink(minRef)
+					&& nameEqual(t, minRef)) {
 				// The minimum is a file (non-tree) but the next entry
 				// of this iterator is a tree whose name matches our file.
 				// This is a classic D/F conflict and commonly occurs like
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/AutoCRLFOutputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/AutoCRLFOutputStream.java
index e638b2d..305ccbd 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/AutoCRLFOutputStream.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/AutoCRLFOutputStream.java
@@ -10,6 +10,7 @@
 
 package org.eclipse.jgit.util.io;
 
+import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 
@@ -58,7 +59,9 @@
 	 * @since 4.3
 	 */
 	public AutoCRLFOutputStream(OutputStream out, boolean detectBinary) {
-		this.out = out;
+		// avoid to write single lines directly to FileOutputStream:
+		this.out = out instanceof BufferedOutputStream ? out
+				: new BufferedOutputStream(out);
 		this.detectBinary = detectBinary;
 	}
 
diff --git a/pom.xml b/pom.xml
index 5693c10..d271641 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
   <groupId>org.eclipse.jgit</groupId>
   <artifactId>org.eclipse.jgit-parent</artifactId>
   <packaging>pom</packaging>
-  <version>6.3.1-SNAPSHOT</version>
+  <version>6.4.1-SNAPSHOT</version>
 
   <name>JGit - Parent</name>
   <url>${jgit-url}</url>
@@ -152,7 +152,7 @@
 
     <jgit-last-release-version>6.2.0.202206071550-r</jgit-last-release-version>
     <ant-version>1.10.12</ant-version>
-    <apache-sshd-version>2.8.0</apache-sshd-version>
+    <apache-sshd-version>2.9.2</apache-sshd-version>
     <jsch-version>0.1.55</jsch-version>
     <jzlib-version>1.1.3</jzlib-version>
     <javaewah-version>1.1.13</javaewah-version>
@@ -165,19 +165,19 @@
     <jetty-version>10.0.6</jetty-version>
     <japicmp-version>0.15.3</japicmp-version>
     <httpclient-version>4.5.13</httpclient-version>
-    <httpcore-version>4.4.14</httpcore-version>
+    <httpcore-version>4.4.15</httpcore-version>
     <slf4j-version>1.7.30</slf4j-version>
     <maven-javadoc-plugin-version>3.3.1</maven-javadoc-plugin-version>
     <tycho-extras-version>2.6.0</tycho-extras-version>
-    <gson-version>2.8.9</gson-version>
-    <bouncycastle-version>1.71</bouncycastle-version>
+    <gson-version>2.9.1</gson-version>
+    <bouncycastle-version>1.72</bouncycastle-version>
     <spotbugs-maven-plugin-version>4.3.0</spotbugs-maven-plugin-version>
     <maven-project-info-reports-plugin-version>3.1.2</maven-project-info-reports-plugin-version>
     <maven-jxr-plugin-version>3.1.1</maven-jxr-plugin-version>
     <maven-surefire-plugin-version>3.0.0-M5</maven-surefire-plugin-version>
     <maven-surefire-report-plugin-version>${maven-surefire-plugin-version}</maven-surefire-report-plugin-version>
     <maven-compiler-plugin-version>3.8.1</maven-compiler-plugin-version>
-    <plexus-compiler-version>2.9.0</plexus-compiler-version>
+    <plexus-compiler-version>2.12.1</plexus-compiler-version>
     <hamcrest-version>2.2</hamcrest-version>
     <assertj-version>3.20.2</assertj-version>
 
@@ -185,6 +185,10 @@
     <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
     <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
     <sonar.jacoco.reportPath>${project.build.directory}/jacoco.exec</sonar.jacoco.reportPath>
+
+    <!-- license check -->
+    <dash.fail>true</dash.fail>
+    <dash.projectId>technology.jgit</dash.projectId>
   </properties>
 
   <repositories>
@@ -346,7 +350,7 @@
             <dependency><!-- add support for ssh/scp -->
               <groupId>org.apache.maven.wagon</groupId>
               <artifactId>wagon-ssh</artifactId>
-              <version>3.5.1</version>
+              <version>3.5.2</version>
             </dependency>
           </dependencies>
         </plugin>
@@ -556,6 +560,14 @@
       <plugin>
         <groupId>org.eclipse.dash</groupId>
         <artifactId>license-tool-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>license-check</id>
+            <goals>
+              <goal>license-check</goal>
+            </goals>
+          </execution>
+        </executions>
       </plugin>
     </plugins>
   </build>
@@ -870,7 +882,7 @@
               <dependency>
                 <groupId>org.eclipse.jdt</groupId>
                 <artifactId>ecj</artifactId>
-                <version>3.28.0</version>
+                <version>3.31.0</version>
               </dependency>
             </dependencies>
           </plugin>