diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts
index 0513b3cdfd2b2496927ac7c564ed4cdc185fc804..39dcaf5b7c8133cb66a73cef95e46efb98661bf3 100644
--- a/lib/datasource/crate/index.ts
+++ b/lib/datasource/crate/index.ts
@@ -7,6 +7,7 @@ import { ExternalHostError } from '../../types/errors/external-host-error';
 import * as memCache from '../../util/cache/memory';
 import * as packageCache from '../../util/cache/package';
 import { privateCacheDir, readFile } from '../../util/fs';
+import { simpleGitConfig } from '../../util/git/config';
 import { Http } from '../../util/http';
 import * as cargoVersioning from '../../versioning/cargo';
 import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
@@ -159,7 +160,7 @@ async function fetchRegistryInfo(
       clonePath = join(privateCacheDir(), cacheDirFromUrl(url));
       logger.info({ clonePath, registryUrl }, `Cloning private cargo registry`);
 
-      const git = Git();
+      const git = Git(simpleGitConfig());
       const clonePromise = git.clone(registryUrl, clonePath, {
         '--depth': 1,
       });
diff --git a/lib/datasource/git-refs/index.ts b/lib/datasource/git-refs/index.ts
index 0a5abffa94bf18c3146621bae7316f67c3cb318e..7d12032c88c59d249caef307d96909661a038b40 100644
--- a/lib/datasource/git-refs/index.ts
+++ b/lib/datasource/git-refs/index.ts
@@ -1,5 +1,6 @@
 import simpleGit from 'simple-git';
 import * as packageCache from '../../util/cache/package';
+import { simpleGitConfig } from '../../util/git/config';
 import { getRemoteUrlWithToken } from '../../util/git/url';
 import * as semver from '../../versioning/semver';
 import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types';
@@ -17,7 +18,7 @@ export async function getRawRefs(
   { lookupName }: GetReleasesConfig,
   hostType: string
 ): Promise<RawRefs[] | null> {
-  const git = simpleGit();
+  const git = simpleGit(simpleGitConfig());
   const cacheNamespace = 'git-raw-refs';
 
   const cachedResult = await packageCache.get<RawRefs[]>(
diff --git a/lib/manager/git-submodules/extract.ts b/lib/manager/git-submodules/extract.ts
index 6c23db7018e3cf9b4a5f8e7950c375b840e24b2e..b5083af836e8e0a8b4ba8b9feb61a7a58e27c167 100644
--- a/lib/manager/git-submodules/extract.ts
+++ b/lib/manager/git-submodules/extract.ts
@@ -4,6 +4,7 @@ import upath from 'upath';
 import { getGlobalConfig } from '../../config/global';
 import * as datasourceGitRefs from '../../datasource/git-refs';
 import { logger } from '../../logger';
+import { simpleGitConfig } from '../../util/git/config';
 import { getHttpUrl, getRemoteUrlWithToken } from '../../util/git/url';
 import type { ExtractConfig, PackageFile } from '../types';
 import { GitModule } from './types';
@@ -14,7 +15,7 @@ async function getUrl(
   submoduleName: string
 ): Promise<string> {
   const path = (
-    await Git().raw([
+    await Git(simpleGitConfig()).raw([
       'config',
       '--file',
       gitModulesPath,
diff --git a/lib/util/git/config.spec.ts b/lib/util/git/config.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..65c03da6c58bae78359ec646ec52806ca8764a5f
--- /dev/null
+++ b/lib/util/git/config.spec.ts
@@ -0,0 +1,9 @@
+import { simpleGitConfig } from './config';
+
+describe('util/git/config', () => {
+  it('uses "close" events, ignores "exit" events from child processes', () => {
+    expect(simpleGitConfig()).toEqual({
+      completion: { onClose: true, onExit: false },
+    });
+  });
+});
diff --git a/lib/util/git/config.ts b/lib/util/git/config.ts
index 957a069f57b90000dd8ca09b05528d14a4e4ddac..7842559b577edb53f81c122b034922654cd5da3e 100644
--- a/lib/util/git/config.ts
+++ b/lib/util/git/config.ts
@@ -1,4 +1,5 @@
 import is from '@sindresorhus/is';
+import { SimpleGitOptions } from 'simple-git';
 
 export const enum GitNoVerifyOption {
   Commit = 'commit',
@@ -21,3 +22,12 @@ export function setNoVerify(value: GitNoVerifyOption[]): void {
 export function getNoVerify(): GitNoVerifyOption[] {
   return noVerify;
 }
+
+export function simpleGitConfig(): Partial<SimpleGitOptions> {
+  return {
+    completion: {
+      onClose: true,
+      onExit: false,
+    },
+  };
+}
diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts
index 96fa264a5ff041bd87d3beab694c34f3a8b9e185..345fb32af8a49ad5af85af3a2cb8844b7fa624c3 100644
--- a/lib/util/git/index.ts
+++ b/lib/util/git/index.ts
@@ -25,7 +25,7 @@ import { ExternalHostError } from '../../types/errors/external-host-error';
 import { GitOptions, GitProtocol } from '../../types/git';
 import { Limit, incLimitedValue } from '../../workers/global/limits';
 import { parseGitAuthor } from './author';
-import { GitNoVerifyOption, getNoVerify } from './config';
+import { GitNoVerifyOption, getNoVerify, simpleGitConfig } from './config';
 import { configSigningKey, writePrivateKey } from './private-key';
 
 export { GitNoVerifyOption, setNoVerify } from './config';
@@ -186,7 +186,7 @@ export async function initRepo(args: StorageConfig): Promise<void> {
   config.additionalBranches = [];
   config.branchIsModified = {};
   const { localDir } = getGlobalConfig();
-  git = Git(localDir);
+  git = Git(localDir, simpleGitConfig());
   gitInitialized = false;
   await fetchBranchCommits();
 }