diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
index 4433dcc..8e0b93f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -1763,25 +1763,6 @@ public void createSymLink(File path, String target) throws IOException {
 	}
 
 	/**
-	 * Create a new file. See {@link java.io.File#createNewFile()}. Subclasses
-	 * of this class may take care to provide a safe implementation for this
-	 * even if {@link #supportsAtomicCreateNewFile()} is <code>false</code>
-	 *
-	 * @param path
-	 *            the file to be created
-	 * @return <code>true</code> if the file was created, <code>false</code> if
-	 *         the file already existed
-	 * @throws java.io.IOException
-	 *             if an IO error occurred
-	 * @deprecated use {@link #createNewFileAtomic(File)} instead
-	 * @since 4.5
-	 */
-	@Deprecated
-	public boolean createNewFile(File path) throws IOException {
-		return path.createNewFile();
-	}
-
-	/**
 	 * A token representing a file created by
 	 * {@link #createNewFileAtomic(File)}. The token must be retained until the
 	 * file has been deleted in order to guarantee that the unique file was
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
index e73095f..db2b5b4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
@@ -341,73 +341,6 @@ public boolean supportsAtomicCreateNewFile() {
 		return supportsAtomicFileCreation == AtomicFileCreation.SUPPORTED;
 	}
 
-	@Override
-	@SuppressWarnings("boxing")
-	/**
-	 * {@inheritDoc}
-	 * <p>
-	 * An implementation of the File#createNewFile() semantics which works also
-	 * on NFS. If the config option
-	 * {@code core.supportsAtomicCreateNewFile = true} (which is the default)
-	 * then simply File#createNewFile() is called.
-	 *
-	 * But if {@code core.supportsAtomicCreateNewFile = false} then after
-	 * successful creation of the lock file a hard link to that lock file is
-	 * created and the attribute nlink of the lock file is checked to be 2. If
-	 * multiple clients manage to create the same lock file nlink would be
-	 * greater than 2 showing the error.
-	 *
-	 * @see "https://www.time-travellers.org/shane/papers/NFS_considered_harmful.html"
-	 *
-	 * @deprecated use {@link FS_POSIX#createNewFileAtomic(File)} instead
-	 * @since 4.5
-	 */
-	@Deprecated
-	public boolean createNewFile(File lock) throws IOException {
-		if (!lock.createNewFile()) {
-			return false;
-		}
-		if (supportsAtomicCreateNewFile()) {
-			return true;
-		}
-		Path lockPath = lock.toPath();
-		Path link = null;
-		FileStore store = null;
-		try {
-			store = Files.getFileStore(lockPath);
-		} catch (SecurityException e) {
-			return true;
-		}
-		try {
-			Boolean canLink = CAN_HARD_LINK.computeIfAbsent(store,
-					s -> Boolean.TRUE);
-			if (Boolean.FALSE.equals(canLink)) {
-				return true;
-			}
-			link = Files.createLink(
-					Paths.get(lock.getAbsolutePath() + ".lnk"), //$NON-NLS-1$
-					lockPath);
-			Integer nlink = (Integer) Files.getAttribute(lockPath,
-					"unix:nlink"); //$NON-NLS-1$
-			if (nlink > 2) {
-				LOG.warn(MessageFormat.format(
-						JGitText.get().failedAtomicFileCreation, lockPath,
-						nlink));
-				return false;
-			} else if (nlink < 2) {
-				CAN_HARD_LINK.put(store, Boolean.FALSE);
-			}
-			return true;
-		} catch (UnsupportedOperationException | IllegalArgumentException e) {
-			CAN_HARD_LINK.put(store, Boolean.FALSE);
-			return true;
-		} finally {
-			if (link != null) {
-				Files.delete(link);
-			}
-		}
-	}
-
 	/**
 	 * {@inheritDoc}
 	 * <p>
