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