From 11371121306b8c57ee039af8e067356bbcd92d91 Mon Sep 17 00:00:00 2001
From: Sergio Zharinov <zharinov@users.noreply.github.com>
Date: Fri, 3 Jul 2020 18:47:00 +0400
Subject: [PATCH] refactor: Separate 'git' and 'fs' util modules (#6665)

---
 lib/manager/bundler/artifacts.spec.ts         |  2 +-
 lib/manager/bundler/artifacts.ts              |  2 +-
 lib/manager/bundler/extract.spec.ts           |  2 +-
 lib/manager/bundler/extract.ts                |  2 +-
 lib/manager/bundler/utils.ts                  |  2 +-
 lib/manager/cargo/artifacts.ts                |  2 +-
 lib/manager/cocoapods/artifacts.ts            |  2 +-
 lib/manager/cocoapods/utils.ts                |  2 +-
 lib/manager/composer/artifacts.spec.ts        |  4 +-
 lib/manager/composer/artifacts.ts             |  2 +-
 lib/manager/composer/extract.spec.ts          |  2 +-
 lib/manager/composer/extract.ts               |  2 +-
 lib/manager/gitlabci-include/extract.ts       |  2 +-
 lib/manager/gomod/artifacts.spec.ts           |  2 +-
 lib/manager/gomod/artifacts.ts                |  2 +-
 lib/manager/gradle-wrapper/artifacts.spec.ts  |  2 +-
 lib/manager/gradle-wrapper/artifacts.ts       |  2 +-
 lib/manager/gradle/index.spec.ts              |  6 +--
 lib/manager/gradle/index.ts                   |  2 +-
 lib/manager/helm-requirements/extract.spec.ts |  2 +-
 lib/manager/helm-requirements/extract.ts      |  2 +-
 lib/manager/maven/extract.ts                  |  2 +-
 lib/manager/maven/index.spec.ts               |  2 +-
 lib/manager/mix/artifacts.ts                  |  2 +-
 lib/manager/npm/extract/index.spec.ts         |  2 +-
 lib/manager/npm/extract/index.ts              |  2 +-
 lib/manager/npm/extract/npm.spec.ts           |  2 +-
 lib/manager/npm/extract/npm.ts                |  2 +-
 lib/manager/npm/extract/yarn.spec.ts          |  2 +-
 lib/manager/npm/extract/yarn.ts               |  2 +-
 lib/manager/npm/post-update/index.ts          |  2 +-
 .../npm/post-update/node-version.spec.ts      |  2 +-
 lib/manager/npm/post-update/node-version.ts   |  2 +-
 lib/manager/pip_requirements/artifacts.ts     |  2 +-
 lib/manager/pipenv/artifacts.spec.ts          |  2 +-
 lib/manager/pipenv/artifacts.ts               |  2 +-
 lib/manager/poetry/artifacts.ts               |  2 +-
 lib/platform/azure/index.spec.ts              |  6 +--
 lib/platform/azure/index.ts                   | 36 +++++++--------
 lib/platform/bitbucket-server/index.spec.ts   |  6 +--
 lib/platform/bitbucket-server/index.ts        | 44 +++++++++----------
 lib/platform/bitbucket/index.spec.ts          |  6 +--
 lib/platform/bitbucket/index.ts               | 38 ++++++++--------
 lib/platform/gitea/index.spec.ts              |  6 +--
 lib/platform/gitea/index.ts                   | 38 ++++++++--------
 lib/platform/github/index.spec.ts             |  6 +--
 lib/platform/github/index.ts                  | 40 ++++++++---------
 lib/platform/gitlab/index.spec.ts             |  6 +--
 lib/platform/gitlab/index.ts                  | 42 +++++++++---------
 lib/platform/index.ts                         |  2 +-
 lib/util/{gitfs => }/fs/index.spec.ts         |  4 +-
 lib/util/{gitfs => }/fs/index.ts              |  4 +-
 .../git/__snapshots__/index.spec.ts.snap      |  0
 lib/util/{gitfs => }/git/index.spec.ts        |  2 +-
 lib/util/{gitfs => }/git/index.ts             | 10 ++---
 lib/util/{gitfs => }/git/private-key.spec.ts  |  6 +--
 lib/util/{gitfs => }/git/private-key.ts       |  6 +--
 lib/util/gitfs/index.ts                       |  2 -
 lib/util/index.ts                             |  2 +-
 lib/workers/branch/auto-replace.spec.ts       |  2 +-
 lib/workers/branch/auto-replace.ts            |  2 +-
 lib/workers/branch/index.spec.ts              |  2 +-
 lib/workers/branch/index.ts                   |  2 +-
 .../repository/extract/manager-files.spec.ts  |  2 +-
 .../repository/extract/manager-files.ts       |  2 +-
 lib/workers/repository/init/config.spec.ts    |  2 +-
 lib/workers/repository/init/config.ts         |  2 +-
 .../repository/onboarding/branch/check.ts     |  2 +-
 .../repository/onboarding/branch/config.ts    |  2 +-
 .../onboarding/branch/index.spec.ts           |  2 +-
 test/util.ts                                  |  4 +-
 71 files changed, 208 insertions(+), 210 deletions(-)
 rename lib/util/{gitfs => }/fs/index.spec.ts (86%)
 rename lib/util/{gitfs => }/fs/index.ts (94%)
 rename lib/util/{gitfs => }/git/__snapshots__/index.spec.ts.snap (100%)
 rename lib/util/{gitfs => }/git/index.spec.ts (99%)
 rename lib/util/{gitfs => }/git/index.ts (98%)
 rename lib/util/{gitfs => }/git/private-key.spec.ts (89%)
 rename lib/util/{gitfs => }/git/private-key.ts (88%)
 delete mode 100644 lib/util/gitfs/index.ts

diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index 4cd088e938..7e1260f449 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -20,7 +20,7 @@ jest.mock('fs-extra');
 jest.mock('child_process');
 jest.mock('../../../lib/util/exec/env');
 jest.mock('../../../lib/datasource');
-jest.mock('../../../lib/util/gitfs/fs');
+jest.mock('../../../lib/util/fs');
 jest.mock('../../../lib/util/host-rules');
 jest.mock('./host-rules');
 
diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts
index 780737a0f9..661c7f1195 100644
--- a/lib/manager/bundler/artifacts.ts
+++ b/lib/manager/bundler/artifacts.ts
@@ -10,7 +10,7 @@ import {
   getSiblingFileName,
   readLocalFile,
   writeLocalFile,
-} from '../../util/gitfs';
+} from '../../util/fs';
 import { isValid } from '../../versioning/ruby';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import {
diff --git a/lib/manager/bundler/extract.spec.ts b/lib/manager/bundler/extract.spec.ts
index 7f4f407f00..f7585134f5 100644
--- a/lib/manager/bundler/extract.spec.ts
+++ b/lib/manager/bundler/extract.spec.ts
@@ -3,7 +3,7 @@ import { fs } from '../../../test/util';
 import { isValid } from '../../versioning/ruby';
 import { extractPackageFile } from './extract';
 
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 
 const railsGemfile = readFileSync(
   'lib/manager/bundler/__fixtures__/Gemfile.rails',
diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts
index 01ec422d9c..91096269fb 100644
--- a/lib/manager/bundler/extract.ts
+++ b/lib/manager/bundler/extract.ts
@@ -1,7 +1,7 @@
 import * as datasourceRubygems from '../../datasource/rubygems';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { regEx } from '../../util/regex';
 import { PackageDependency, PackageFile } from '../common';
 import { extractLockFileEntries } from './locked-version';
diff --git a/lib/manager/bundler/utils.ts b/lib/manager/bundler/utils.ts
index 070f9fa516..322f5a2af1 100644
--- a/lib/manager/bundler/utils.ts
+++ b/lib/manager/bundler/utils.ts
@@ -1,6 +1,6 @@
 import { join } from 'upath';
 import { logger } from '../../logger';
-import { ensureDir } from '../../util/gitfs';
+import { ensureDir } from '../../util/fs';
 import { UpdateArtifactsConfig } from '../common';
 
 export async function getGemHome(
diff --git a/lib/manager/cargo/artifacts.ts b/lib/manager/cargo/artifacts.ts
index 0efbc06442..c94ff14e40 100644
--- a/lib/manager/cargo/artifacts.ts
+++ b/lib/manager/cargo/artifacts.ts
@@ -5,7 +5,7 @@ import {
   getSiblingFileName,
   readLocalFile,
   writeLocalFile,
-} from '../../util/gitfs';
+} from '../../util/fs';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
 export async function updateArtifacts({
diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts
index 11028be373..2436c02f38 100644
--- a/lib/manager/cocoapods/artifacts.ts
+++ b/lib/manager/cocoapods/artifacts.ts
@@ -7,7 +7,7 @@ import {
   getSiblingFileName,
   readLocalFile,
   writeLocalFile,
-} from '../../util/gitfs';
+} from '../../util/fs';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { getCocoaPodsHome } from './utils';
 
diff --git a/lib/manager/cocoapods/utils.ts b/lib/manager/cocoapods/utils.ts
index c1f081e4fd..cf2383a978 100644
--- a/lib/manager/cocoapods/utils.ts
+++ b/lib/manager/cocoapods/utils.ts
@@ -1,6 +1,6 @@
 import { join } from 'upath';
 import { logger } from '../../logger';
-import { ensureDir } from '../../util/gitfs';
+import { ensureDir } from '../../util/fs';
 import { UpdateArtifactsConfig } from '../common';
 
 export async function getCocoaPodsHome(
diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts
index 4242edb2d6..799fa1e994 100644
--- a/lib/manager/composer/artifacts.spec.ts
+++ b/lib/manager/composer/artifacts.spec.ts
@@ -6,12 +6,12 @@ import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import { StatusResult } from '../../util/gitfs';
+import { StatusResult } from '../../util/git';
 import * as composer from './artifacts';
 
 jest.mock('child_process');
 jest.mock('../../util/exec/env');
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 jest.mock('../../util/host-rules');
 
 const hostRules = require('../../util/host-rules');
diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts
index 557e51f63d..1b1ad2286f 100644
--- a/lib/manager/composer/artifacts.ts
+++ b/lib/manager/composer/artifacts.ts
@@ -18,7 +18,7 @@ import {
   getSiblingFileName,
   readLocalFile,
   writeLocalFile,
-} from '../../util/gitfs';
+} from '../../util/fs';
 import * as hostRules from '../../util/host-rules';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
diff --git a/lib/manager/composer/extract.spec.ts b/lib/manager/composer/extract.spec.ts
index 1a740d2f8c..17a4f48071 100644
--- a/lib/manager/composer/extract.spec.ts
+++ b/lib/manager/composer/extract.spec.ts
@@ -2,7 +2,7 @@ import { readFileSync } from 'fs';
 import { fs } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 
 const requirements1 = readFileSync(
   'lib/manager/composer/__fixtures__/composer1.json',
diff --git a/lib/manager/composer/extract.ts b/lib/manager/composer/extract.ts
index fbe806e795..1a53277532 100644
--- a/lib/manager/composer/extract.ts
+++ b/lib/manager/composer/extract.ts
@@ -3,7 +3,7 @@ import * as datasourceGitTags from '../../datasource/git-tags';
 import * as datasourcePackagist from '../../datasource/packagist';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { api as semverComposer } from '../../versioning/composer';
 import { PackageDependency, PackageFile } from '../common';
 
diff --git a/lib/manager/gitlabci-include/extract.ts b/lib/manager/gitlabci-include/extract.ts
index 0dd2d75d38..b683a5a445 100644
--- a/lib/manager/gitlabci-include/extract.ts
+++ b/lib/manager/gitlabci-include/extract.ts
@@ -3,7 +3,7 @@ import yaml from 'js-yaml';
 import * as datasourceGitlabTags from '../../datasource/gitlab-tags';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { ExtractConfig, PackageDependency, PackageFile } from '../common';
 import * as gitlabci from '../gitlabci/extract';
 
diff --git a/lib/manager/gomod/artifacts.spec.ts b/lib/manager/gomod/artifacts.spec.ts
index 3bb563100d..2e28dade2e 100644
--- a/lib/manager/gomod/artifacts.spec.ts
+++ b/lib/manager/gomod/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import { StatusResult } from '../../util/gitfs';
+import { StatusResult } from '../../util/git';
 import * as _hostRules from '../../util/host-rules';
 import * as gomod from './artifacts';
 
diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts
index 24c3716923..48f219aba9 100644
--- a/lib/manager/gomod/artifacts.ts
+++ b/lib/manager/gomod/artifacts.ts
@@ -6,7 +6,7 @@ import { logger } from '../../logger';
 import { platform } from '../../platform';
 import { ExecOptions, exec } from '../../util/exec';
 import { BinarySource } from '../../util/exec/common';
-import { readLocalFile, writeLocalFile } from '../../util/gitfs';
+import { readLocalFile, writeLocalFile } from '../../util/fs';
 import { find } from '../../util/host-rules';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts
index 609439fd8f..d343734a36 100644
--- a/lib/manager/gradle-wrapper/artifacts.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts.spec.ts
@@ -19,7 +19,7 @@ import { resetPrefetchedImages } from '../../util/exec/docker';
 import * as dcUpdate from '.';
 
 jest.mock('child_process');
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 jest.mock('../../util/exec/env');
 
 const exec: jest.Mock<typeof _exec> = _exec as any;
diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts
index f20fb0d641..dc020ce7e4 100644
--- a/lib/manager/gradle-wrapper/artifacts.ts
+++ b/lib/manager/gradle-wrapper/artifacts.ts
@@ -4,7 +4,7 @@ import Git from 'simple-git/promise';
 import { logger } from '../../logger';
 import { platform } from '../../platform';
 import { ExecOptions, exec } from '../../util/exec';
-import { readLocalFile, writeLocalFile } from '../../util/gitfs';
+import { readLocalFile, writeLocalFile } from '../../util/fs';
 import { Http } from '../../util/http';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import { gradleWrapperFileName, prepareGradleCommand } from '../gradle/index';
diff --git a/lib/manager/gradle/index.spec.ts b/lib/manager/gradle/index.spec.ts
index fe19ad34f6..a3cc67e177 100644
--- a/lib/manager/gradle/index.spec.ts
+++ b/lib/manager/gradle/index.spec.ts
@@ -9,7 +9,7 @@ import * as _util from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as _docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import * as _fs from '../../util/gitfs/fs';
+import * as _fs from '../../util/fs';
 import { ExtractConfig } from '../common';
 import { ifSystemSupportsGradle } from './__testutil__/gradle';
 import { GRADLE_DEPENDENCY_REPORT_FILENAME } from './gradle-updates-report';
@@ -44,11 +44,11 @@ async function setupMocks() {
 
   jest.mock('child_process');
   jest.mock('../../util/exec/env');
-  jest.mock('../../util/gitfs/fs');
+  jest.mock('../../util/fs');
   jest.mock('os');
 
   const os: jest.Mocked<typeof _os> = require('os');
-  const fs: jest.Mocked<typeof _fs> = require('../../util/gitfs/fs');
+  const fs: jest.Mocked<typeof _fs> = require('../../util/fs');
   const env: jest.Mocked<typeof _env> = require('../../util/exec/env');
   const exec: jest.Mock<typeof _exec> = require('child_process').exec;
   const util: jest.Mocked<typeof _util> = require('../../util');
diff --git a/lib/manager/gradle/index.ts b/lib/manager/gradle/index.ts
index 06613990dd..2af2a8e97e 100644
--- a/lib/manager/gradle/index.ts
+++ b/lib/manager/gradle/index.ts
@@ -8,7 +8,7 @@ import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { ExecOptions, exec } from '../../util/exec';
 import { BinarySource } from '../../util/exec/common';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import * as gradleVersioning from '../../versioning/gradle';
 import {
   ExtractConfig,
diff --git a/lib/manager/helm-requirements/extract.spec.ts b/lib/manager/helm-requirements/extract.spec.ts
index 02aa1cff9e..ec06ca950e 100644
--- a/lib/manager/helm-requirements/extract.spec.ts
+++ b/lib/manager/helm-requirements/extract.spec.ts
@@ -1,7 +1,7 @@
 import { fs } from '../../../test/util';
 import { extractPackageFile } from './extract';
 
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 
 describe('lib/manager/helm-requirements/extract', () => {
   describe('extractPackageFile()', () => {
diff --git a/lib/manager/helm-requirements/extract.ts b/lib/manager/helm-requirements/extract.ts
index 7f9105e7c2..ad3b0472a5 100644
--- a/lib/manager/helm-requirements/extract.ts
+++ b/lib/manager/helm-requirements/extract.ts
@@ -3,7 +3,7 @@ import yaml from 'js-yaml';
 import * as datasourceHelm from '../../datasource/helm';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
-import { getSiblingFileName, readLocalFile } from '../../util/gitfs';
+import { getSiblingFileName, readLocalFile } from '../../util/fs';
 import { ExtractConfig, PackageDependency, PackageFile } from '../common';
 
 export async function extractPackageFile(
diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts
index 948ae5022f..f10dda6210 100644
--- a/lib/manager/maven/extract.ts
+++ b/lib/manager/maven/extract.ts
@@ -5,7 +5,7 @@ import * as datasourceMaven from '../../datasource/maven';
 import { MAVEN_REPO } from '../../datasource/maven/common';
 import { logger } from '../../logger';
 import { SkipReason } from '../../types';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { ExtractConfig, PackageDependency, PackageFile } from '../common';
 
 export function parsePom(raw: string): XmlDocument | null {
diff --git a/lib/manager/maven/index.spec.ts b/lib/manager/maven/index.spec.ts
index 7b0f304935..99d518d383 100644
--- a/lib/manager/maven/index.spec.ts
+++ b/lib/manager/maven/index.spec.ts
@@ -4,7 +4,7 @@ import { PackageDependency, PackageFile } from '../common';
 import { extractPackage, resolveParents } from './extract';
 import { extractAllPackageFiles, updateDependency } from './index';
 
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 
 const pomContent = readFileSync(
   'lib/manager/maven/__fixtures__/simple.pom.xml',
diff --git a/lib/manager/mix/artifacts.ts b/lib/manager/mix/artifacts.ts
index cb5972c91b..c037f01da1 100644
--- a/lib/manager/mix/artifacts.ts
+++ b/lib/manager/mix/artifacts.ts
@@ -4,7 +4,7 @@ import upath from 'upath';
 import { logger } from '../../logger';
 import { exec } from '../../util/exec';
 import { BinarySource } from '../../util/exec/common';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
 export async function updateArtifacts({
diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts
index 7d7ac8a659..fd0b9ec959 100644
--- a/lib/manager/npm/extract/index.spec.ts
+++ b/lib/manager/npm/extract/index.spec.ts
@@ -1,7 +1,7 @@
 import { readFileSync } from 'fs';
 import path from 'path';
 import { getConfig } from '../../../config/defaults';
-import * as _fs from '../../../util/gitfs/fs';
+import * as _fs from '../../../util/fs';
 import * as npmExtract from '.';
 
 const fs: any = _fs;
diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts
index 5142e8c5c3..514fc77348 100644
--- a/lib/manager/npm/extract/index.ts
+++ b/lib/manager/npm/extract/index.ts
@@ -10,7 +10,7 @@ import {
   deleteLocalFile,
   getSiblingFileName,
   readLocalFile,
-} from '../../../util/gitfs';
+} from '../../../util/fs';
 import * as nodeVersioning from '../../../versioning/node';
 import { isValid, isVersion } from '../../../versioning/npm';
 import {
diff --git a/lib/manager/npm/extract/npm.spec.ts b/lib/manager/npm/extract/npm.spec.ts
index 0d79fa64da..3156240410 100644
--- a/lib/manager/npm/extract/npm.spec.ts
+++ b/lib/manager/npm/extract/npm.spec.ts
@@ -2,7 +2,7 @@ import { readFileSync } from 'fs';
 import { fs } from '../../../../test/util';
 import { getNpmLock } from './npm';
 
-jest.mock('../../../util/gitfs/fs');
+jest.mock('../../../util/fs');
 
 describe('manager/npm/extract/npm', () => {
   describe('.getNpmLock()', () => {
diff --git a/lib/manager/npm/extract/npm.ts b/lib/manager/npm/extract/npm.ts
index 99da47163c..bfabceffa2 100644
--- a/lib/manager/npm/extract/npm.ts
+++ b/lib/manager/npm/extract/npm.ts
@@ -1,5 +1,5 @@
 import { logger } from '../../../logger';
-import { readLocalFile } from '../../../util/gitfs';
+import { readLocalFile } from '../../../util/fs';
 import { LockFileEntry } from './common';
 
 export async function getNpmLock(
diff --git a/lib/manager/npm/extract/yarn.spec.ts b/lib/manager/npm/extract/yarn.spec.ts
index 7bb289dab4..155621af57 100644
--- a/lib/manager/npm/extract/yarn.spec.ts
+++ b/lib/manager/npm/extract/yarn.spec.ts
@@ -2,7 +2,7 @@ import { readFileSync } from 'fs';
 import { fs } from '../../../../test/util';
 import { getYarnLock } from './yarn';
 
-jest.mock('../../../util/gitfs/fs');
+jest.mock('../../../util/fs');
 
 describe('manager/npm/extract/yarn', () => {
   describe('.getYarnLock()', () => {
diff --git a/lib/manager/npm/extract/yarn.ts b/lib/manager/npm/extract/yarn.ts
index b40f8636ef..5af375e6c2 100644
--- a/lib/manager/npm/extract/yarn.ts
+++ b/lib/manager/npm/extract/yarn.ts
@@ -1,6 +1,6 @@
 import { parse } from '@yarnpkg/lockfile';
 import { logger } from '../../../logger';
-import { readLocalFile } from '../../../util/gitfs';
+import { readLocalFile } from '../../../util/fs';
 import { LockFileEntry } from './common';
 
 export type YarnLock = Record<string, string>;
diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts
index 86e542d8b5..f380fb2890 100644
--- a/lib/manager/npm/post-update/index.ts
+++ b/lib/manager/npm/post-update/index.ts
@@ -8,7 +8,7 @@ import { logger } from '../../../logger';
 import { platform } from '../../../platform';
 import { ExternalHostError } from '../../../types/errors/external-host-error';
 import { getChildProcessEnv } from '../../../util/exec/env';
-import { deleteLocalFile } from '../../../util/gitfs';
+import { deleteLocalFile } from '../../../util/fs';
 import * as hostRules from '../../../util/host-rules';
 import { PackageFile, PostUpdateConfig, Upgrade } from '../../common';
 import * as lerna from './lerna';
diff --git a/lib/manager/npm/post-update/node-version.spec.ts b/lib/manager/npm/post-update/node-version.spec.ts
index 01519fa9ef..06622fec82 100644
--- a/lib/manager/npm/post-update/node-version.spec.ts
+++ b/lib/manager/npm/post-update/node-version.spec.ts
@@ -1,7 +1,7 @@
 import { fs } from '../../../../test/util';
 import { getNodeConstraint } from './node-version';
 
-jest.mock('../../../util/gitfs/fs');
+jest.mock('../../../util/fs');
 
 describe('getNodeConstraint', () => {
   const config = {
diff --git a/lib/manager/npm/post-update/node-version.ts b/lib/manager/npm/post-update/node-version.ts
index aa0be56fbf..b929499b63 100644
--- a/lib/manager/npm/post-update/node-version.ts
+++ b/lib/manager/npm/post-update/node-version.ts
@@ -1,6 +1,6 @@
 import { validRange } from 'semver';
 import { logger } from '../../../logger';
-import { getSiblingFileName, readLocalFile } from '../../../util/gitfs';
+import { getSiblingFileName, readLocalFile } from '../../../util/fs';
 import { PostUpdateConfig } from '../../common';
 
 async function getNodeFile(filename: string): Promise<string> | null {
diff --git a/lib/manager/pip_requirements/artifacts.ts b/lib/manager/pip_requirements/artifacts.ts
index f0f175a622..98a3bfeb82 100644
--- a/lib/manager/pip_requirements/artifacts.ts
+++ b/lib/manager/pip_requirements/artifacts.ts
@@ -1,7 +1,7 @@
 import is from '@sindresorhus/is';
 import { logger } from '../../logger';
 import { ExecOptions, exec } from '../../util/exec';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 
 export async function updateArtifacts({
diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts
index 9e6f5a42c6..e806ae87ce 100644
--- a/lib/manager/pipenv/artifacts.spec.ts
+++ b/lib/manager/pipenv/artifacts.spec.ts
@@ -7,7 +7,7 @@ import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
-import { StatusResult } from '../../util/gitfs';
+import { StatusResult } from '../../util/git';
 import * as pipenv from './artifacts';
 
 jest.mock('fs-extra');
diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts
index a82a434711..9e33a4dd91 100644
--- a/lib/manager/pipenv/artifacts.ts
+++ b/lib/manager/pipenv/artifacts.ts
@@ -3,7 +3,7 @@ import { join } from 'upath';
 import { logger } from '../../logger';
 import { platform } from '../../platform';
 import { ExecOptions, exec } from '../../util/exec';
-import { readLocalFile } from '../../util/gitfs';
+import { readLocalFile } from '../../util/fs';
 import {
   UpdateArtifact,
   UpdateArtifactsConfig,
diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts
index 0da8632431..9c6c87c508 100644
--- a/lib/manager/poetry/artifacts.ts
+++ b/lib/manager/poetry/artifacts.ts
@@ -8,7 +8,7 @@ import {
   getSiblingFileName,
   readLocalFile,
   writeLocalFile,
-} from '../../util/gitfs';
+} from '../../util/fs';
 import {
   UpdateArtifact,
   UpdateArtifactsConfig,
diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts
index 32906620c2..20d9b7d8d4 100644
--- a/lib/platform/azure/index.spec.ts
+++ b/lib/platform/azure/index.spec.ts
@@ -1,7 +1,7 @@
 import is from '@sindresorhus/is';
 import { REPOSITORY_DISABLED } from '../../constants/error-messages';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import * as _hostRules from '../../util/host-rules';
 import { Platform, RepoParams } from '../common';
 
@@ -16,14 +16,14 @@ describe('platform/azure', () => {
     jest.resetModules();
     jest.mock('./azure-got-wrapper');
     jest.mock('./azure-helper');
-    jest.mock('../../util/gitfs/git');
+    jest.mock('../../util/git');
     jest.mock('../../util/host-rules');
     hostRules = require('../../util/host-rules');
     require('../../util/sanitize').sanitize = jest.fn((input) => input);
     azure = await import('.');
     azureApi = require('./azure-got-wrapper');
     azureHelper = require('./azure-helper');
-    git = require('../../util/gitfs/git');
+    git = require('../../util/git');
     git.branchExists.mockResolvedValue(true);
     git.isBranchStale.mockResolvedValue(false);
     hostRules.find.mockReturnValue({
diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts
index 399e0f294d..acc2608ec3 100644
--- a/lib/platform/azure/index.ts
+++ b/lib/platform/azure/index.ts
@@ -13,7 +13,7 @@ import {
 } from '../../constants/pull-requests';
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import { sanitize } from '../../util/sanitize';
 import { ensureTrailingSlash } from '../../util/url';
@@ -163,7 +163,7 @@ export async function initRepo({
   const url =
     defaults.endpoint +
     `${encodeURIComponent(projectName)}/_git/${encodeURIComponent(repoName)}`;
-  await gitfs.initRepo({
+  await git.initRepo({
     ...config,
     localDir,
     url,
@@ -185,7 +185,7 @@ export function getRepoForceRebase(): Promise<boolean> {
 // Search
 
 export /* istanbul ignore next */ function getFileList(): Promise<string[]> {
-  return gitfs.getFileList();
+  return git.getFileList();
 }
 
 export /* istanbul ignore next */ async function setBaseBranch(
@@ -194,14 +194,14 @@ export /* istanbul ignore next */ async function setBaseBranch(
   logger.debug(`Setting baseBranch to ${branchName}`);
   config.baseBranch = branchName;
   delete config.baseCommitSHA;
-  const baseBranchSha = await gitfs.setBaseBranch(branchName);
+  const baseBranchSha = await git.setBaseBranch(branchName);
   return baseBranchSha;
 }
 
 export /* istanbul ignore next */ function setBranchPrefix(
   branchPrefix: string
 ): Promise<void> {
-  return gitfs.setBranchPrefix(branchPrefix);
+  return git.setBranchPrefix(branchPrefix);
 }
 
 // Branch
@@ -209,26 +209,26 @@ export /* istanbul ignore next */ function setBranchPrefix(
 export /* istanbul ignore next */ function branchExists(
   branchName: string
 ): Promise<boolean> {
-  return gitfs.branchExists(branchName);
+  return git.branchExists(branchName);
 }
 
 export /* istanbul ignore next */ function getAllRenovateBranches(
   branchPrefix: string
 ): Promise<string[]> {
-  return gitfs.getAllRenovateBranches(branchPrefix);
+  return git.getAllRenovateBranches(branchPrefix);
 }
 
 export /* istanbul ignore next */ function isBranchStale(
   branchName: string
 ): Promise<boolean> {
-  return gitfs.isBranchStale(branchName);
+  return git.isBranchStale(branchName);
 }
 
 export /* istanbul ignore next */ function getFile(
   filePath: string,
   branchName: string
 ): Promise<string> {
-  return gitfs.getFile(filePath, branchName);
+  return git.getFile(filePath, branchName);
 }
 
 // istanbul ignore next
@@ -272,7 +272,7 @@ export async function getPrList(): Promise<AzurePr[]> {
 
 /* istanbul ignore next */
 export async function getPrFiles(pr: Pr): Promise<string[]> {
-  return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+  return git.getBranchFiles(pr.branchName, pr.targetBranch);
 }
 
 export async function getPr(pullRequestId: number): Promise<Pr | null> {
@@ -361,7 +361,7 @@ export /* istanbul ignore next */ async function deleteBranch(
   branchName: string,
   abandonAssociatedPr = false
 ): Promise<void> {
-  await gitfs.deleteBranch(branchName);
+  await git.deleteBranch(branchName);
   if (abandonAssociatedPr) {
     const pr = await getBranchPr(branchName);
     await abandonPr(pr.number);
@@ -371,19 +371,19 @@ export /* istanbul ignore next */ async function deleteBranch(
 export /* istanbul ignore next */ function getBranchLastCommitTime(
   branchName: string
 ): Promise<Date> {
-  return gitfs.getBranchLastCommitTime(branchName);
+  return git.getBranchLastCommitTime(branchName);
 }
 
 export /* istanbul ignore next */ function getRepoStatus(): Promise<
-  gitfs.StatusResult
+  git.StatusResult
 > {
-  return gitfs.getRepoStatus();
+  return git.getRepoStatus();
 }
 
 export /* istanbul ignore next */ function mergeBranch(
   branchName: string
 ): Promise<void> {
-  return gitfs.mergeBranch(branchName);
+  return git.mergeBranch(branchName);
 }
 
 export /* istanbul ignore next */ function commitFiles({
@@ -391,7 +391,7 @@ export /* istanbul ignore next */ function commitFiles({
   files,
   message,
 }: CommitFilesConfig): Promise<string | null> {
-  return gitfs.commitFiles({
+  return git.commitFiles({
     branchName,
     files,
     message,
@@ -401,7 +401,7 @@ export /* istanbul ignore next */ function commitFiles({
 export /* istanbul ignore next */ function getCommitMessages(): Promise<
   string[]
 > {
-  return gitfs.getCommitMessages();
+  return git.getCommitMessages();
 }
 
 export async function getBranchStatusCheck(
@@ -769,7 +769,7 @@ export function getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {
 }
 
 export function cleanRepo(): Promise<void> {
-  gitfs.cleanRepo();
+  git.cleanRepo();
   config = {} as any;
   return Promise.resolve();
 }
diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts
index 1e9857fb3c..97415f7103 100644
--- a/lib/platform/bitbucket-server/index.spec.ts
+++ b/lib/platform/bitbucket-server/index.spec.ts
@@ -7,7 +7,7 @@ import {
 } from '../../constants/error-messages';
 import { PR_STATE_CLOSED, PR_STATE_OPEN } from '../../constants/pull-requests';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import { Platform } from '../common';
 
 function repoMock(
@@ -172,11 +172,11 @@ describe('platform/bitbucket-server', () => {
         httpMock.reset();
         httpMock.setup();
         jest.mock('delay');
-        jest.mock('../../util/gitfs/git');
+        jest.mock('../../util/git');
         jest.mock('../../util/host-rules');
         hostRules = require('../../util/host-rules');
         bitbucket = await import('.');
-        git = require('../../util/gitfs/git');
+        git = require('../../util/git');
         git.branchExists.mockResolvedValue(true);
         git.isBranchStale.mockResolvedValue(false);
         git.getBranchCommit.mockResolvedValue(
diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts
index ec8ab9d98e..b6df5da0bd 100644
--- a/lib/platform/bitbucket-server/index.ts
+++ b/lib/platform/bitbucket-server/index.ts
@@ -10,7 +10,7 @@ import { PLATFORM_TYPE_BITBUCKET_SERVER } from '../../constants/platforms';
 import { PR_STATE_ALL, PR_STATE_OPEN } from '../../constants/pull-requests';
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import { HttpResponse } from '../../util/http';
 import {
@@ -107,7 +107,7 @@ export async function getRepos(): Promise<string[]> {
 
 export function cleanRepo(): Promise<void> {
   logger.debug(`cleanRepo()`);
-  gitfs.cleanRepo();
+  git.cleanRepo();
   config = {} as any;
   return Promise.resolve();
 }
@@ -175,7 +175,7 @@ export async function initRepo({
   }
 
   const { host, pathname } = url.parse(defaults.endpoint!);
-  const gitUrl = gitfs.getUrl({
+  const gitUrl = git.getUrl({
     protocol: defaults.endpoint!.split(':')[0],
     auth: `${opts.username}:${opts.password}`,
     host: `${host}${pathname}${
@@ -184,7 +184,7 @@ export async function initRepo({
     repository,
   });
 
-  await gitfs.initRepo({
+  await git.initRepo({
     ...config,
     localDir,
     url: gitUrl,
@@ -250,21 +250,21 @@ export async function setBaseBranch(
   branchName: string = config.defaultBranch
 ): Promise<string> {
   config.baseBranch = branchName;
-  const baseBranchSha = await gitfs.setBaseBranch(branchName);
+  const baseBranchSha = await git.setBaseBranch(branchName);
   return baseBranchSha;
 }
 
 export /* istanbul ignore next */ function setBranchPrefix(
   branchPrefix: string
 ): Promise<void> {
-  return gitfs.setBranchPrefix(branchPrefix);
+  return git.setBranchPrefix(branchPrefix);
 }
 
 // Search
 
 // Get full file list
 export function getFileList(): Promise<string[]> {
-  return gitfs.getFileList();
+  return git.getFileList();
 }
 
 // Branch
@@ -272,12 +272,12 @@ export function getFileList(): Promise<string[]> {
 // Returns true if branch exists, otherwise false
 export function branchExists(branchName: string): Promise<boolean> {
   logger.debug(`branchExists(${branchName})`);
-  return gitfs.branchExists(branchName);
+  return git.branchExists(branchName);
 }
 
 export function isBranchStale(branchName: string): Promise<boolean> {
   logger.debug(`isBranchStale(${branchName})`);
-  return gitfs.isBranchStale(branchName);
+  return git.isBranchStale(branchName);
 }
 
 // Gets details for a PR
@@ -400,7 +400,7 @@ export async function getPrList(_args?: any): Promise<Pr[]> {
 
 /* istanbul ignore next */
 export async function getPrFiles(pr: Pr): Promise<string[]> {
-  return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+  return git.getBranchFiles(pr.branchName, pr.targetBranch);
 }
 
 // TODO: coverage
@@ -439,13 +439,13 @@ export function getAllRenovateBranches(
   branchPrefix: string
 ): Promise<string[]> {
   logger.debug('getAllRenovateBranches');
-  return gitfs.getAllRenovateBranches(branchPrefix);
+  return git.getAllRenovateBranches(branchPrefix);
 }
 
 export async function commitFiles(
   commitFilesConfig: CommitFilesConfig
 ): Promise<string | null> {
-  const commit = gitfs.commitFiles(commitFilesConfig);
+  const commit = git.commitFiles(commitFilesConfig);
 
   // wait for pr change propagation
   await delay(1000);
@@ -456,7 +456,7 @@ export async function commitFiles(
 
 export function getFile(filePath: string, branchName: string): Promise<string> {
   logger.debug(`getFile(${filePath}, ${branchName})`);
-  return gitfs.getFile(filePath, branchName);
+  return git.getFile(filePath, branchName);
 }
 
 export async function deleteBranch(
@@ -477,30 +477,30 @@ export async function deleteBranch(
       updatePrVersion(pr.number, body.version);
     }
   }
-  return gitfs.deleteBranch(branchName);
+  return git.deleteBranch(branchName);
 }
 
 export function mergeBranch(branchName: string): Promise<void> {
   logger.debug(`mergeBranch(${branchName})`);
-  return gitfs.mergeBranch(branchName);
+  return git.mergeBranch(branchName);
 }
 
 export function getBranchLastCommitTime(branchName: string): Promise<Date> {
   logger.debug(`getBranchLastCommitTime(${branchName})`);
-  return gitfs.getBranchLastCommitTime(branchName);
+  return git.getBranchLastCommitTime(branchName);
 }
 
 export /* istanbul ignore next */ function getRepoStatus(): Promise<
-  gitfs.StatusResult
+  git.StatusResult
 > {
-  return gitfs.getRepoStatus();
+  return git.getRepoStatus();
 }
 
 async function getStatus(
   branchName: string,
   useCache = true
 ): Promise<utils.BitbucketCommitStatus> {
-  const branchCommit = await gitfs.getBranchCommit(branchName);
+  const branchCommit = await git.getBranchCommit(branchName);
 
   return (
     await bitbucketServerHttp.getJson<utils.BitbucketCommitStatus>(
@@ -557,7 +557,7 @@ async function getStatusCheck(
   branchName: string,
   useCache = true
 ): Promise<utils.BitbucketStatus[]> {
-  const branchCommit = await gitfs.getBranchCommit(branchName);
+  const branchCommit = await git.getBranchCommit(branchName);
 
   return utils.accumulateValues(
     `./rest/build-status/1.0/commits/${branchCommit}`,
@@ -610,7 +610,7 @@ export async function setBranchStatus({
   }
   logger.debug({ branch: branchName, context, state }, 'Setting branch status');
 
-  const branchCommit = await gitfs.getBranchCommit(branchName);
+  const branchCommit = await git.getBranchCommit(branchName);
 
   try {
     const body: any = {
@@ -1077,7 +1077,7 @@ export function getPrBody(input: string): string {
 
 export function getCommitMessages(): Promise<string[]> {
   logger.debug(`getCommitMessages()`);
-  return gitfs.getCommitMessages();
+  return git.getCommitMessages();
 }
 
 export function getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {
diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts
index 1dbb5740c8..cb0946e584 100644
--- a/lib/platform/bitbucket/index.spec.ts
+++ b/lib/platform/bitbucket/index.spec.ts
@@ -3,7 +3,7 @@ import * as httpMock from '../../../test/httpMock';
 import { REPOSITORY_DISABLED } from '../../constants/error-messages';
 import { logger as _logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import { setBaseUrl } from '../../util/http/bitbucket';
 import { Platform, RepoParams } from '../common';
 
@@ -55,13 +55,13 @@ describe('platform/bitbucket', () => {
     jest.resetModules();
     httpMock.reset();
     httpMock.setup();
-    jest.mock('../../util/gitfs/git');
+    jest.mock('../../util/git');
     jest.mock('../../util/host-rules');
     jest.mock('../../logger');
     hostRules = require('../../util/host-rules');
     bitbucket = await import('.');
     logger = (await import('../../logger')).logger as any;
-    git = require('../../util/gitfs/git');
+    git = require('../../util/git');
     git.branchExists.mockResolvedValue(true);
     git.isBranchStale.mockResolvedValue(false);
     // clean up hostRules
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index 3e1b0d07bb..f1bc34f244 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -10,7 +10,7 @@ import { PLATFORM_TYPE_BITBUCKET } from '../../constants/platforms';
 import { PR_STATE_ALL, PR_STATE_OPEN } from '../../constants/pull-requests';
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import { BitbucketHttp, setBaseUrl } from '../../util/http/bitbucket';
 import { sanitize } from '../../util/sanitize';
@@ -148,14 +148,14 @@ export async function initRepo({
   // `api-staging.<host>` to `staging.<host>`
   const hostnameWithoutApiPrefix = /api[.|-](.+)/.exec(hostname)[1];
 
-  const url = gitfs.getUrl({
+  const url = git.getUrl({
     protocol: 'https',
     auth: `${opts.username}:${opts.password}`,
     hostname: hostnameWithoutApiPrefix,
     repository,
   });
 
-  await gitfs.initRepo({
+  await git.initRepo({
     ...config,
     localDir,
     url,
@@ -179,7 +179,7 @@ export function getRepoForceRebase(): Promise<boolean> {
 
 // Get full file list
 export function getFileList(): Promise<string[]> {
-  return gitfs.getFileList();
+  return git.getFileList();
 }
 
 export async function setBaseBranch(
@@ -188,38 +188,38 @@ export async function setBaseBranch(
   logger.debug(`Setting baseBranch to ${branchName}`);
   config.baseBranch = branchName;
   delete config.baseCommitSHA;
-  const baseBranchSha = await gitfs.setBaseBranch(branchName);
+  const baseBranchSha = await git.setBaseBranch(branchName);
   return baseBranchSha;
 }
 
 export /* istanbul ignore next */ function setBranchPrefix(
   branchPrefix: string
 ): Promise<void> {
-  return gitfs.setBranchPrefix(branchPrefix);
+  return git.setBranchPrefix(branchPrefix);
 }
 
 // Branch
 
 // Returns true if branch exists, otherwise false
 export function branchExists(branchName: string): Promise<boolean> {
-  return gitfs.branchExists(branchName);
+  return git.branchExists(branchName);
 }
 
 export function getAllRenovateBranches(
   branchPrefix: string
 ): Promise<string[]> {
-  return gitfs.getAllRenovateBranches(branchPrefix);
+  return git.getAllRenovateBranches(branchPrefix);
 }
 
 export function isBranchStale(branchName: string): Promise<boolean> {
-  return gitfs.isBranchStale(branchName);
+  return git.isBranchStale(branchName);
 }
 
 export function getFile(
   filePath: string,
   branchName?: string
 ): Promise<string> {
-  return gitfs.getFile(filePath, branchName);
+  return git.getFile(filePath, branchName);
 }
 
 // istanbul ignore next
@@ -248,7 +248,7 @@ export async function getPrList(): Promise<Pr[]> {
 
 /* istanbul ignore next */
 export async function getPrFiles(pr: Pr): Promise<string[]> {
-  return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+  return git.getBranchFiles(pr.branchName, pr.targetBranch);
 }
 
 export async function findPr({
@@ -282,31 +282,31 @@ export async function deleteBranch(
       );
     }
   }
-  return gitfs.deleteBranch(branchName);
+  return git.deleteBranch(branchName);
 }
 
 export function getBranchLastCommitTime(branchName: string): Promise<Date> {
-  return gitfs.getBranchLastCommitTime(branchName);
+  return git.getBranchLastCommitTime(branchName);
 }
 
 // istanbul ignore next
-export function getRepoStatus(): Promise<gitfs.StatusResult> {
-  return gitfs.getRepoStatus();
+export function getRepoStatus(): Promise<git.StatusResult> {
+  return git.getRepoStatus();
 }
 
 export function mergeBranch(branchName: string): Promise<void> {
-  return gitfs.mergeBranch(branchName);
+  return git.mergeBranch(branchName);
 }
 
 // istanbul ignore next
 export function commitFiles(
   commitFilesConfig: CommitFilesConfig
 ): Promise<string | null> {
-  return gitfs.commitFiles(commitFilesConfig);
+  return git.commitFiles(commitFilesConfig);
 }
 
 export function getCommitMessages(): Promise<string[]> {
-  return gitfs.getCommitMessages();
+  return git.getCommitMessages();
 }
 
 async function isPrConflicted(prNo: number): Promise<boolean> {
@@ -873,7 +873,7 @@ export async function mergePr(
 // Pull Request
 
 export function cleanRepo(): Promise<void> {
-  gitfs.cleanRepo();
+  git.cleanRepo();
   config = {} as any;
   return Promise.resolve();
 }
diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts
index 5388932ae2..10f801e725 100644
--- a/lib/platform/gitea/index.spec.ts
+++ b/lib/platform/gitea/index.spec.ts
@@ -18,7 +18,7 @@ import {
 } from '../../constants/error-messages';
 import { logger as _logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import { setBaseUrl } from '../../util/http/gitea';
 import * as ght from './gitea-helper';
 
@@ -157,13 +157,13 @@ describe('platform/gitea', () => {
     jest.resetModules();
     jest.clearAllMocks();
     jest.mock('./gitea-helper');
-    jest.mock('../../util/gitfs/git');
+    jest.mock('../../util/git');
     jest.mock('../../logger');
 
     gitea = await import('.');
     helper = (await import('./gitea-helper')) as any;
     logger = (await import('../../logger')).logger as any;
-    gitvcs = require('../../util/gitfs/git');
+    gitvcs = require('../../util/git');
     gitvcs.isBranchStale.mockResolvedValue(false);
     gitvcs.getBranchCommit.mockResolvedValue(mockCommitHash);
 
diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts
index c96e8ca5c4..ca6cca3f80 100644
--- a/lib/platform/gitea/index.ts
+++ b/lib/platform/gitea/index.ts
@@ -14,7 +14,7 @@ import { PLATFORM_TYPE_GITEA } from '../../constants/platforms';
 import { PR_STATE_ALL, PR_STATE_OPEN } from '../../constants/pull-requests';
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import { setBaseUrl } from '../../util/http/gitea';
 import { sanitize } from '../../util/sanitize';
@@ -333,7 +333,7 @@ const platform: Platform = {
     gitEndpoint.auth = opts.token;
 
     // Initialize Git storage
-    await gitfs.initRepo({
+    await git.initRepo({
       ...config,
       url: URL.format(gitEndpoint),
       gitAuthorName: global.gitAuthor?.name,
@@ -363,7 +363,7 @@ const platform: Platform = {
   },
 
   cleanRepo(): Promise<void> {
-    gitfs.cleanRepo();
+    git.cleanRepo();
     config = {} as any;
     return Promise.resolve();
   },
@@ -377,7 +377,7 @@ const platform: Platform = {
   }: BranchStatusConfig): Promise<void> {
     try {
       // Create new status for branch commit
-      const branchCommit = await gitfs.getBranchCommit(branchName);
+      const branchCommit = await git.getBranchCommit(branchName);
       await helper.createCommitStatus(config.repository, branchCommit, {
         state: helper.renovateToGiteaStatusMapping[state] || 'pending',
         context,
@@ -456,7 +456,7 @@ const platform: Platform = {
     baseBranch: string = config.defaultBranch
   ): Promise<string> {
     config.baseBranch = baseBranch;
-    const baseBranchSha = await gitfs.setBaseBranch(baseBranch);
+    const baseBranchSha = await git.setBaseBranch(baseBranch);
     return baseBranchSha;
   },
 
@@ -476,7 +476,7 @@ const platform: Platform = {
 
   /* istanbul ignore next */
   async getPrFiles(pr: Pr): Promise<string[]> {
-    return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+    return git.getBranchFiles(pr.branchName, pr.targetBranch);
   },
 
   async getPr(number: number): Promise<Pr | null> {
@@ -838,7 +838,7 @@ const platform: Platform = {
       }
     }
 
-    return gitfs.deleteBranch(branchName);
+    return git.deleteBranch(branchName);
   },
 
   async addAssignees(number: number, assignees: string[]): Promise<void> {
@@ -857,7 +857,7 @@ const platform: Platform = {
   },
 
   commitFiles(commitFilesConfig: CommitFilesConfig): Promise<string | null> {
-    return gitfs.commitFiles(commitFilesConfig);
+    return git.commitFiles(commitFilesConfig);
   },
 
   getPrBody(prBody: string): string {
@@ -865,43 +865,43 @@ const platform: Platform = {
   },
 
   isBranchStale(branchName: string): Promise<boolean> {
-    return gitfs.isBranchStale(branchName);
+    return git.isBranchStale(branchName);
   },
 
   setBranchPrefix(branchPrefix: string): Promise<void> {
-    return gitfs.setBranchPrefix(branchPrefix);
+    return git.setBranchPrefix(branchPrefix);
   },
 
   branchExists(branchName: string): Promise<boolean> {
-    return gitfs.branchExists(branchName);
+    return git.branchExists(branchName);
   },
 
   mergeBranch(branchName: string): Promise<void> {
-    return gitfs.mergeBranch(branchName);
+    return git.mergeBranch(branchName);
   },
 
   getBranchLastCommitTime(branchName: string): Promise<Date> {
-    return gitfs.getBranchLastCommitTime(branchName);
+    return git.getBranchLastCommitTime(branchName);
   },
 
   getFile(lockFileName: string, branchName?: string): Promise<string> {
-    return gitfs.getFile(lockFileName, branchName);
+    return git.getFile(lockFileName, branchName);
   },
 
-  getRepoStatus(): Promise<gitfs.StatusResult> {
-    return gitfs.getRepoStatus();
+  getRepoStatus(): Promise<git.StatusResult> {
+    return git.getRepoStatus();
   },
 
   getFileList(): Promise<string[]> {
-    return gitfs.getFileList();
+    return git.getFileList();
   },
 
   getAllRenovateBranches(branchPrefix: string): Promise<string[]> {
-    return gitfs.getAllRenovateBranches(branchPrefix);
+    return git.getAllRenovateBranches(branchPrefix);
   },
 
   getCommitMessages(): Promise<string[]> {
-    return gitfs.getCommitMessages();
+    return git.getCommitMessages();
   },
 
   getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {
diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts
index 7834a77cbb..32c6f656d0 100644
--- a/lib/platform/github/index.spec.ts
+++ b/lib/platform/github/index.spec.ts
@@ -7,7 +7,7 @@ import {
   REPOSITORY_RENAMED,
 } from '../../constants/error-messages';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import { Platform } from '../common';
 
 const githubApiHost = 'https://api.github.com';
@@ -24,8 +24,8 @@ describe('platform/github', () => {
     jest.mock('../../util/host-rules');
     github = await import('.');
     hostRules = mocked(await import('../../util/host-rules'));
-    jest.mock('../../util/gitfs/git');
-    git = mocked(await import('../../util/gitfs/git'));
+    jest.mock('../../util/git');
+    git = mocked(await import('../../util/git'));
     git.branchExists.mockResolvedValue(true);
     git.isBranchStale.mockResolvedValue(true);
     git.getBranchCommit.mockResolvedValue(
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index 1e0403ee82..773291d293 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -24,7 +24,7 @@ import {
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
 import { ExternalHostError } from '../../types/errors/external-host-error';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import * as githubHttp from '../../util/http/github';
 import { sanitize } from '../../util/sanitize';
@@ -150,7 +150,7 @@ export async function getRepos(): Promise<string[]> {
 }
 
 export function cleanRepo(): Promise<void> {
-  gitfs.cleanRepo();
+  git.cleanRepo();
   // In theory most of this isn't necessary. In practice..
   config = {} as any;
   return Promise.resolve();
@@ -429,7 +429,7 @@ export async function initRepo({
   );
   parsedEndpoint.pathname = config.repository + '.git';
   const url = URL.format(parsedEndpoint);
-  await gitfs.initRepo({
+  await git.initRepo({
     ...config,
     url,
     gitAuthorName: global.gitAuthor?.name,
@@ -493,39 +493,39 @@ export async function setBaseBranch(
 ): Promise<string> {
   config.baseBranch = branchName;
   config.baseCommitSHA = null;
-  const baseBranchSha = await gitfs.setBaseBranch(branchName);
+  const baseBranchSha = await git.setBaseBranch(branchName);
   return baseBranchSha;
 }
 
 // istanbul ignore next
 export function setBranchPrefix(branchPrefix: string): Promise<void> {
-  return gitfs.setBranchPrefix(branchPrefix);
+  return git.setBranchPrefix(branchPrefix);
 }
 
 // Search
 
 // istanbul ignore next
 export function getFileList(): Promise<string[]> {
-  return gitfs.getFileList();
+  return git.getFileList();
 }
 
 // Branch
 
 // istanbul ignore next
 export function branchExists(branchName: string): Promise<boolean> {
-  return gitfs.branchExists(branchName);
+  return git.branchExists(branchName);
 }
 
 // istanbul ignore next
 export function getAllRenovateBranches(
   branchPrefix: string
 ): Promise<string[]> {
-  return gitfs.getAllRenovateBranches(branchPrefix);
+  return git.getAllRenovateBranches(branchPrefix);
 }
 
 // istanbul ignore next
 export function isBranchStale(branchName: string): Promise<boolean> {
-  return gitfs.isBranchStale(branchName);
+  return git.isBranchStale(branchName);
 }
 
 // istanbul ignore next
@@ -533,7 +533,7 @@ export function getFile(
   filePath: string,
   branchName?: string
 ): Promise<string> {
-  return gitfs.getFile(filePath, branchName);
+  return git.getFile(filePath, branchName);
 }
 
 // istanbul ignore next
@@ -541,17 +541,17 @@ export function deleteBranch(
   branchName: string,
   closePr?: boolean
 ): Promise<void> {
-  return gitfs.deleteBranch(branchName);
+  return git.deleteBranch(branchName);
 }
 
 // istanbul ignore next
 export function getBranchLastCommitTime(branchName: string): Promise<Date> {
-  return gitfs.getBranchLastCommitTime(branchName);
+  return git.getBranchLastCommitTime(branchName);
 }
 
 // istanbul ignore next
-export function getRepoStatus(): Promise<gitfs.StatusResult> {
-  return gitfs.getRepoStatus();
+export function getRepoStatus(): Promise<git.StatusResult> {
+  return git.getRepoStatus();
 }
 
 // istanbul ignore next
@@ -562,19 +562,19 @@ export function mergeBranch(branchName: string): Promise<void> {
       'Branch protection: Attempting to merge branch when push protection is enabled'
     );
   }
-  return gitfs.mergeBranch(branchName);
+  return git.mergeBranch(branchName);
 }
 
 // istanbul ignore next
 export function commitFiles(
   commitFilesConfig: CommitFilesConfig
 ): Promise<string | null> {
-  return gitfs.commitFiles(commitFilesConfig);
+  return git.commitFiles(commitFilesConfig);
 }
 
 // istanbul ignore next
 export function getCommitMessages(): Promise<string[]> {
-  return gitfs.getCommitMessages();
+  return git.getCommitMessages();
 }
 
 async function getClosedPrs(): Promise<PrList> {
@@ -985,7 +985,7 @@ export async function getPrList(): Promise<Pr[]> {
 
 /* istanbul ignore next */
 export async function getPrFiles(pr: Pr): Promise<string[]> {
-  return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+  return git.getBranchFiles(pr.branchName, pr.targetBranch);
 }
 
 export async function findPr({
@@ -1135,7 +1135,7 @@ async function getStatusCheck(
   branchName: string,
   useCache = true
 ): Promise<GhBranchStatus[]> {
-  const branchCommit = await gitfs.getBranchCommit(branchName);
+  const branchCommit = await git.getBranchCommit(branchName);
 
   const url = `repos/${config.repository}/commits/${branchCommit}/statuses`;
 
@@ -1190,7 +1190,7 @@ export async function setBranchStatus({
   }
   logger.debug({ branch: branchName, context, state }, 'Setting branch status');
   try {
-    const branchCommit = await gitfs.getBranchCommit(branchName);
+    const branchCommit = await git.getBranchCommit(branchName);
     const url = `repos/${config.repository}/statuses/${branchCommit}`;
     const renovateToGitHubStateMapping = {
       green: 'success',
diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts
index 05d5975cf4..edab97df8e 100644
--- a/lib/platform/gitlab/index.spec.ts
+++ b/lib/platform/gitlab/index.spec.ts
@@ -14,7 +14,7 @@ import {
   PR_STATE_OPEN,
 } from '../../constants/pull-requests';
 import { BranchStatus } from '../../types';
-import * as _git from '../../util/gitfs/git';
+import * as _git from '../../util/git';
 import * as _hostRules from '../../util/host-rules';
 
 const gitlabApiHost = 'https://gitlab.com';
@@ -31,8 +31,8 @@ describe('platform/gitlab', () => {
     jest.mock('../../util/host-rules');
     jest.mock('delay');
     hostRules = require('../../util/host-rules');
-    jest.mock('../../util/gitfs/git');
-    git = require('../../util/gitfs/git');
+    jest.mock('../../util/git');
+    git = require('../../util/git');
     git.branchExists.mockResolvedValue(true);
     git.isBranchStale.mockResolvedValue(true);
     git.getBranchCommit.mockResolvedValue(
diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index 0451d9a75e..d91a6eb0e7 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -18,7 +18,7 @@ import { PLATFORM_TYPE_GITLAB } from '../../constants/platforms';
 import { PR_STATE_ALL, PR_STATE_OPEN } from '../../constants/pull-requests';
 import { logger } from '../../logger';
 import { BranchStatus } from '../../types';
-import * as gitfs from '../../util/gitfs';
+import * as git from '../../util/git';
 import * as hostRules from '../../util/host-rules';
 import { HttpResponse } from '../../util/http';
 import { GitlabHttp, setBaseUrl } from '../../util/http/gitlab';
@@ -139,7 +139,7 @@ function urlEscape(str: string): string {
 }
 
 export function cleanRepo(): Promise<void> {
-  gitfs.cleanRepo();
+  git.cleanRepo();
   // In theory most of this isn't necessary. In practice..
   config = {} as any;
   return Promise.resolve();
@@ -229,7 +229,7 @@ export async function initRepo({
     ) {
       logger.debug('no http_url_to_repo found. Falling back to old behaviour.');
       const { host, protocol } = URL.parse(defaults.endpoint);
-      url = gitfs.getUrl({
+      url = git.getUrl({
         protocol: protocol.slice(0, -1) as any,
         auth: 'oauth2:' + opts.token,
         host,
@@ -241,7 +241,7 @@ export async function initRepo({
       repoUrl.auth = 'oauth2:' + opts.token;
       url = URL.format(repoUrl);
     }
-    await gitfs.initRepo({
+    await git.initRepo({
       ...config,
       url,
       gitAuthorName: global.gitAuthor?.name,
@@ -283,26 +283,26 @@ export async function setBaseBranch(
 ): Promise<string> {
   logger.debug(`Setting baseBranch to ${branchName}`);
   config.baseBranch = branchName;
-  const baseBranchSha = await gitfs.setBaseBranch(branchName);
+  const baseBranchSha = await git.setBaseBranch(branchName);
   return baseBranchSha;
 }
 
 export /* istanbul ignore next */ function setBranchPrefix(
   branchPrefix: string
 ): Promise<void> {
-  return gitfs.setBranchPrefix(branchPrefix);
+  return git.setBranchPrefix(branchPrefix);
 }
 
 // Search
 
 // Get full file list
 export function getFileList(): Promise<string[]> {
-  return gitfs.getFileList();
+  return git.getFileList();
 }
 
 // Returns true if branch exists, otherwise false
 export function branchExists(branchName: string): Promise<boolean> {
-  return gitfs.branchExists(branchName);
+  return git.branchExists(branchName);
 }
 
 type BranchState = 'pending' | 'running' | 'success' | 'failed' | 'canceled';
@@ -317,7 +317,7 @@ async function getStatus(
   branchName: string,
   useCache = true
 ): Promise<GitlabBranchStatus[]> {
-  const branchSha = await gitfs.getBranchCommit(branchName);
+  const branchSha = await git.getBranchCommit(branchName);
   const url = `projects/${config.repository}/repository/commits/${branchSha}/statuses`;
 
   return (
@@ -624,25 +624,25 @@ export async function getBranchPr(branchName: string): Promise<Pr> {
 export function getAllRenovateBranches(
   branchPrefix: string
 ): Promise<string[]> {
-  return gitfs.getAllRenovateBranches(branchPrefix);
+  return git.getAllRenovateBranches(branchPrefix);
 }
 
 export function isBranchStale(branchName: string): Promise<boolean> {
-  return gitfs.isBranchStale(branchName);
+  return git.isBranchStale(branchName);
 }
 
 // istanbul ignore next
 export function commitFiles(
   commitFilesConfig: CommitFilesConfig
 ): Promise<string | null> {
-  return gitfs.commitFiles(commitFilesConfig);
+  return git.commitFiles(commitFilesConfig);
 }
 
 export function getFile(
   filePath: string,
   branchName?: string
 ): Promise<string> {
-  return gitfs.getFile(filePath, branchName);
+  return git.getFile(filePath, branchName);
 }
 
 export async function deleteBranch(
@@ -657,20 +657,20 @@ export async function deleteBranch(
       await closePr(pr.number);
     }
   }
-  return gitfs.deleteBranch(branchName);
+  return git.deleteBranch(branchName);
 }
 
 export function mergeBranch(branchName: string): Promise<void> {
-  return gitfs.mergeBranch(branchName);
+  return git.mergeBranch(branchName);
 }
 
 export function getBranchLastCommitTime(branchName: string): Promise<Date> {
-  return gitfs.getBranchLastCommitTime(branchName);
+  return git.getBranchLastCommitTime(branchName);
 }
 
 // istanbul ignore next
-export function getRepoStatus(): Promise<gitfs.StatusResult> {
-  return gitfs.getRepoStatus();
+export function getRepoStatus(): Promise<git.StatusResult> {
+  return git.getRepoStatus();
 }
 
 export async function getBranchStatusCheck(
@@ -696,7 +696,7 @@ export async function setBranchStatus({
   url: targetUrl,
 }: BranchStatusConfig): Promise<void> {
   // First, get the branch commit SHA
-  const branchSha = await gitfs.getBranchCommit(branchName);
+  const branchSha = await git.getBranchCommit(branchName);
   // Now, check the statuses for that commit
   const url = `projects/${config.repository}/statuses/${branchSha}`;
   let state = 'success';
@@ -1080,7 +1080,7 @@ export async function getPrList(): Promise<Pr[]> {
 
 /* istanbul ignore next */
 export async function getPrFiles(pr: Pr): Promise<string[]> {
-  return gitfs.getBranchFiles(pr.branchName, pr.targetBranch);
+  return git.getBranchFiles(pr.branchName, pr.targetBranch);
 }
 
 function matchesState(state: string, desiredState: string): boolean {
@@ -1109,7 +1109,7 @@ export async function findPr({
 }
 
 export function getCommitMessages(): Promise<string[]> {
-  return gitfs.getCommitMessages();
+  return git.getCommitMessages();
 }
 
 export function getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {
diff --git a/lib/platform/index.ts b/lib/platform/index.ts
index a9f4a6d265..7aafff9c7b 100644
--- a/lib/platform/index.ts
+++ b/lib/platform/index.ts
@@ -3,7 +3,7 @@ import addrs from 'email-addresses';
 import { RenovateConfig } from '../config/common';
 import { PLATFORM_NOT_FOUND } from '../constants/error-messages';
 import { logger } from '../logger';
-import { setPrivateKey } from '../util/gitfs';
+import { setPrivateKey } from '../util/git';
 import * as hostRules from '../util/host-rules';
 import platforms from './api.generated';
 import { Platform } from './common';
diff --git a/lib/util/gitfs/fs/index.spec.ts b/lib/util/fs/index.spec.ts
similarity index 86%
rename from lib/util/gitfs/fs/index.spec.ts
rename to lib/util/fs/index.spec.ts
index 331eafaae3..f987ad83bb 100644
--- a/lib/util/gitfs/fs/index.spec.ts
+++ b/lib/util/fs/index.spec.ts
@@ -1,5 +1,5 @@
-import { getName } from '../../../../test/util';
-import { readLocalFile } from '.';
+import { getName } from '../../../test/util';
+import { readLocalFile } from './index';
 
 describe(getName(__filename), () => {
   describe('readLocalFile', () => {
diff --git a/lib/util/gitfs/fs/index.ts b/lib/util/fs/index.ts
similarity index 94%
rename from lib/util/gitfs/fs/index.ts
rename to lib/util/fs/index.ts
index d68fe20ce9..602b810a1e 100644
--- a/lib/util/gitfs/fs/index.ts
+++ b/lib/util/fs/index.ts
@@ -1,7 +1,7 @@
 import * as fs from 'fs-extra';
 import { join, parse } from 'upath';
-import { RenovateConfig } from '../../../config/common';
-import { logger } from '../../../logger';
+import { RenovateConfig } from '../../config/common';
+import { logger } from '../../logger';
 
 let localDir = '';
 
diff --git a/lib/util/gitfs/git/__snapshots__/index.spec.ts.snap b/lib/util/git/__snapshots__/index.spec.ts.snap
similarity index 100%
rename from lib/util/gitfs/git/__snapshots__/index.spec.ts.snap
rename to lib/util/git/__snapshots__/index.spec.ts.snap
diff --git a/lib/util/gitfs/git/index.spec.ts b/lib/util/git/index.spec.ts
similarity index 99%
rename from lib/util/gitfs/git/index.spec.ts
rename to lib/util/git/index.spec.ts
index 156ac77652..32beeb01a3 100644
--- a/lib/util/gitfs/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -1,7 +1,7 @@
 import fs from 'fs-extra';
 import Git from 'simple-git/promise';
 import tmp from 'tmp-promise';
-import * as git from '.';
+import * as git from './index';
 
 describe('platform/git', () => {
   jest.setTimeout(15000);
diff --git a/lib/util/gitfs/git/index.ts b/lib/util/git/index.ts
similarity index 98%
rename from lib/util/gitfs/git/index.ts
rename to lib/util/git/index.ts
index c08b3caa82..9ca9185e90 100644
--- a/lib/util/gitfs/git/index.ts
+++ b/lib/util/git/index.ts
@@ -8,11 +8,11 @@ import {
   REPOSITORY_EMPTY,
   REPOSITORY_TEMPORARY_ERROR,
   SYSTEM_INSUFFICIENT_DISK_SPACE,
-} from '../../../constants/error-messages';
-import { logger } from '../../../logger';
-import { CommitFilesConfig } from '../../../platform/common';
-import { ExternalHostError } from '../../../types/errors/external-host-error';
-import * as limits from '../../../workers/global/limits';
+} from '../../constants/error-messages';
+import { logger } from '../../logger';
+import { CommitFilesConfig } from '../../platform/common';
+import { ExternalHostError } from '../../types/errors/external-host-error';
+import * as limits from '../../workers/global/limits';
 import { writePrivateKey } from './private-key';
 
 export * from './private-key';
diff --git a/lib/util/gitfs/git/private-key.spec.ts b/lib/util/git/private-key.spec.ts
similarity index 89%
rename from lib/util/gitfs/git/private-key.spec.ts
rename to lib/util/git/private-key.spec.ts
index e99061784d..61a9a32b03 100644
--- a/lib/util/gitfs/git/private-key.spec.ts
+++ b/lib/util/git/private-key.spec.ts
@@ -1,9 +1,9 @@
-import { getName, mocked } from '../../../../test/util';
-import * as exec_ from '../../exec';
+import { getName, mocked } from '../../../test/util';
+import * as exec_ from '../exec';
 import { setPrivateKey, writePrivateKey } from './private-key';
 
 jest.mock('fs-extra');
-jest.mock('../../exec');
+jest.mock('../exec');
 
 const exec = mocked(exec_);
 
diff --git a/lib/util/gitfs/git/private-key.ts b/lib/util/git/private-key.ts
similarity index 88%
rename from lib/util/gitfs/git/private-key.ts
rename to lib/util/git/private-key.ts
index f4f6ecd6a7..9490d40c29 100644
--- a/lib/util/gitfs/git/private-key.ts
+++ b/lib/util/git/private-key.ts
@@ -1,9 +1,9 @@
 import os from 'os';
 import path from 'path';
 import fs from 'fs-extra';
-import { PLATFORM_GPG_FAILED } from '../../../constants/error-messages';
-import { logger } from '../../../logger';
-import { exec } from '../../exec';
+import { PLATFORM_GPG_FAILED } from '../../constants/error-messages';
+import { logger } from '../../logger';
+import { exec } from '../exec';
 
 let gitPrivateKey: string;
 let keyId: string;
diff --git a/lib/util/gitfs/index.ts b/lib/util/gitfs/index.ts
deleted file mode 100644
index c4924195be..0000000000
--- a/lib/util/gitfs/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './fs';
-export * from './git';
diff --git a/lib/util/index.ts b/lib/util/index.ts
index c72f151a0a..58b1c8631c 100644
--- a/lib/util/index.ts
+++ b/lib/util/index.ts
@@ -2,7 +2,7 @@ import findUp from 'find-up';
 import { join } from 'upath';
 import { RenovateConfig } from '../config/common';
 import { setExecConfig } from './exec';
-import { setFsConfig } from './gitfs';
+import { setFsConfig } from './fs';
 
 export async function setUtilConfig(
   config: Partial<RenovateConfig>
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index 0d669c1381..3ab53b7745 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -10,7 +10,7 @@ const sampleHtml = readFileSync(
   'utf8'
 );
 
-jest.mock('../../util/gitfs/fs');
+jest.mock('../../util/fs');
 
 describe('workers/branch/auto-replace', () => {
   describe('doAutoReplace', () => {
diff --git a/lib/workers/branch/auto-replace.ts b/lib/workers/branch/auto-replace.ts
index 6d17fa28e4..0cd88d02e3 100644
--- a/lib/workers/branch/auto-replace.ts
+++ b/lib/workers/branch/auto-replace.ts
@@ -2,7 +2,7 @@ import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages';
 import { logger } from '../../logger';
 import { get } from '../../manager';
 import { PackageDependency } from '../../manager/common';
-import { writeLocalFile } from '../../util/gitfs';
+import { writeLocalFile } from '../../util/fs';
 import { escapeRegExp, regEx } from '../../util/regex';
 import { matchAt, replaceAt } from '../../util/string';
 import { compile } from '../../util/template';
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index 85bd692ee0..f4d16a2f4c 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -12,7 +12,7 @@ import {
 import * as _npmPostExtract from '../../manager/npm/post-update';
 import { File } from '../../platform';
 import * as _exec from '../../util/exec';
-import { StatusResult } from '../../util/gitfs';
+import { StatusResult } from '../../util/git';
 import { BranchConfig, PrResult } from '../common';
 import * as _prWorker from '../pr';
 import * as _automerge from './automerge';
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index f5f4521e18..ce865f3cc7 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -24,7 +24,7 @@ import { BranchStatus } from '../../types';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { emojify } from '../../util/emoji';
 import { exec } from '../../util/exec';
-import { readLocalFile, writeLocalFile } from '../../util/gitfs';
+import { readLocalFile, writeLocalFile } from '../../util/fs';
 import { regEx } from '../../util/regex';
 import { BranchConfig, PrResult, ProcessBranchResult } from '../common';
 import { checkAutoMerge, ensurePr } from '../pr';
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index c447596b45..85e4814cb2 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -6,7 +6,7 @@ import { getManagerPackageFiles } from './manager-files';
 
 jest.mock('./file-match');
 jest.mock('../../../manager/html');
-jest.mock('../../../util/gitfs/fs');
+jest.mock('../../../util/fs');
 
 const fileMatch = mocked(_fileMatch);
 const html = mocked(_html);
diff --git a/lib/workers/repository/extract/manager-files.ts b/lib/workers/repository/extract/manager-files.ts
index 374b7974f3..c3e8880ffc 100644
--- a/lib/workers/repository/extract/manager-files.ts
+++ b/lib/workers/repository/extract/manager-files.ts
@@ -7,7 +7,7 @@ import {
   get,
 } from '../../../manager';
 import { PackageFile } from '../../../manager/common';
-import { readLocalFile } from '../../../util/gitfs';
+import { readLocalFile } from '../../../util/fs';
 
 export async function getManagerPackageFiles(
   config: RenovateConfig
diff --git a/lib/workers/repository/init/config.spec.ts b/lib/workers/repository/init/config.spec.ts
index 4fe7364f22..38a3c5e880 100644
--- a/lib/workers/repository/init/config.spec.ts
+++ b/lib/workers/repository/init/config.spec.ts
@@ -8,7 +8,7 @@ import {
 import * as _migrateAndValidate from '../../../config/migrate-validate';
 import { mergeRenovateConfig } from './config';
 
-jest.mock('../../../util/gitfs/fs');
+jest.mock('../../../util/fs');
 
 const migrateAndValidate = mocked(_migrateAndValidate);
 
diff --git a/lib/workers/repository/init/config.ts b/lib/workers/repository/init/config.ts
index c67276686c..68bce6f6bc 100644
--- a/lib/workers/repository/init/config.ts
+++ b/lib/workers/repository/init/config.ts
@@ -14,7 +14,7 @@ import { platform } from '../../../platform';
 import { ExternalHostError } from '../../../types/errors/external-host-error';
 import { getCache } from '../../../util/cache/repository';
 import { clone } from '../../../util/clone';
-import { readLocalFile } from '../../../util/gitfs';
+import { readLocalFile } from '../../../util/fs';
 import * as hostRules from '../../../util/host-rules';
 import { flattenPackageRules } from './flatten';
 
diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts
index bf6baab0ae..363c697cec 100644
--- a/lib/workers/repository/onboarding/branch/check.ts
+++ b/lib/workers/repository/onboarding/branch/check.ts
@@ -4,7 +4,7 @@ import { REPOSITORY_DISABLED } from '../../../../constants/error-messages';
 import { PR_STATE_NOT_OPEN } from '../../../../constants/pull-requests';
 import { logger } from '../../../../logger';
 import { platform } from '../../../../platform';
-import { readLocalFile } from '../../../../util/gitfs';
+import { readLocalFile } from '../../../../util/fs';
 
 const findFile = async (fileName: string): Promise<boolean> => {
   logger.debug(`findFile(${fileName})`);
diff --git a/lib/workers/repository/onboarding/branch/config.ts b/lib/workers/repository/onboarding/branch/config.ts
index 5ebfb796df..45cee4492b 100644
--- a/lib/workers/repository/onboarding/branch/config.ts
+++ b/lib/workers/repository/onboarding/branch/config.ts
@@ -2,7 +2,7 @@ import is from '@sindresorhus/is';
 import { RenovateConfig } from '../../../../config';
 import { logger } from '../../../../logger';
 import { clone } from '../../../../util/clone';
-import { readLocalFile } from '../../../../util/gitfs';
+import { readLocalFile } from '../../../../util/fs';
 
 export async function getOnboardingConfig(
   config: RenovateConfig
diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts
index b1b966b4c7..a9d53d2703 100644
--- a/lib/workers/repository/onboarding/branch/index.spec.ts
+++ b/lib/workers/repository/onboarding/branch/index.spec.ts
@@ -13,7 +13,7 @@ import { checkOnboardingBranch } from '.';
 const rebase: any = _rebase;
 
 jest.mock('../../../../workers/repository/onboarding/branch/rebase');
-jest.mock('../../../../util/gitfs/fs');
+jest.mock('../../../../util/fs');
 
 describe('workers/repository/onboarding/branch', () => {
   describe('checkOnboardingBranch', () => {
diff --git a/test/util.ts b/test/util.ts
index 4d662f001f..8b4b217034 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -4,8 +4,8 @@ import { RenovateConfig as _RenovateConfig } from '../lib/config';
 import { getConfig } from '../lib/config/defaults';
 import { platform as _platform } from '../lib/platform';
 import * as _env from '../lib/util/exec/env';
-import * as _fs from '../lib/util/gitfs/fs';
-import * as _git from '../lib/util/gitfs/git';
+import * as _fs from '../lib/util/fs';
+import * as _git from '../lib/util/git';
 import * as _hostRules from '../lib/util/host-rules';
 
 /**
-- 
GitLab