From: Michael Ward Date: Mon, 22 Jun 2020 19:40:15 GMT Subject: Git 2 force commits but Git 1 doesn't Message-ID: We have some repositories we are hosting here using Apache's DAV module to handle remote connections. The repositories are created using the following: mkdir [reponame].git cd [reponame].git git --bare init git update-server-info Our Apache location directive is as follows:         DAV on         AuthType Basic         AuthName "Git"         AuthBasicProvider ldap         AuthLDAPUrl [ldap server info]                         require [ldap filter]         The repository config generates with the values in the core section below, and we add the receive and advice sections: [core]         repositoryformatversion = 0         filemode = true         bare = true [receive]         denyNonFastForwards = true         denyDeletes = true [advice]         pushFetchFirst = true The odd behavior comes when we have git 1 vs git 2 clients attempting to push in changes on the same branch. Git 1 clients will prompt the user that they are out of date and need to pull. Git 2 clients don't and will force push and overwrite the head revision. This occurs with either Git 1 or Git 2 on the server. We've tested this with the latest Git 2 client on Fedora 32 and Git 1 client on CentOS 7.8. The other oddity is that even when the Git 2 client does a pull to receive changes before making changes and pushing, when another user pulls the change, there is a message shown that a commit was forced. What am I missing in the repository settings to prevent forced pushes from working and force users to pull before being able to push? Thanks! Michael Ward