Git 2 force commits but Git 1 doesn't
- From
- Michael Ward <mward@smartsoftwareinc.com>
- Date
- Jun 22, 2020, 19:40 UTC
- Message-ID
- <dea24348-770c-1228-115d-23153fbecebd@smartsoftwareinc.com>
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:
<Location /[reponame].git> DAV on AuthType Basic AuthName "Git" AuthBasicProvider ldap AuthLDAPUrl [ldap server info] <RequireAny> require [ldap filter] </RequireAny> </Location>
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