Comment éviter l'erreur fatale "unsafe repository ('/home/repon' is owned by someone else)" ?

Le système de gestion de versions Git est très utilisé, que ce soit en entreprise ou en privé. Il est donc régulièrement mis à jour, notamment pour corriger les failles de sécurité, afin de protéger plus efficacement le code des développeurs. Le message d'erreur "unsafe repository ('<mon-dossier>' is owned by someone else)" est dû à un correctif de sécurité de Git.

La version 2.35.2 a été déployée en urgence car il y avait une faille dans la gestion des dépôts Git sur un PC avec plusieurs comptes utilisateur. Git contrôle que vous avez les droits de propriété sur le dépôt avant de vous laisser exécuter la commande. Ce correctif est donc un point positif pour la sécurité, mais il peut poser problème quand vous souhaitez automatiser vos commandes. Si par exemple, vous souhaitez exécuter un code PHP qui lance une commande Git, vous obtiendrez ce message d'erreur, car l'utilisateur qui exécute Apache n'est pas le même que votre compte utilisateur.

Git propose en parallèle un mécanisme pour vous permettre d'inscrire un dossier comme étant "safe", ce qui permet d'éviter ce contrôle de l'utilisateur. Utilisez la commande suivante pour ajouter le dossier de votre choix à la liste des dossiers ne nécessitant pas de contrôle utilisateur.

git config --global --add safe.directory <mon-dossier>

La version 2.36 de Git a ajouté la possibilité d'utiliser le préfixe "*". Cela permet de faire en sorte que le contrôle utilisateur ne soit plus effectué sur tous les dossiers. Si vous travaillez seul sur votre machine ou que vous savez ce que vous faites, vous pouvez utiliser ce préfixe.

# Windows
git config --global --add safe.directory *
# Linux
git config --global --add safe.directory '*'

Une autre solution possible consiste à utiliser le système d'exploitation. Vous pouvez changer le propriétaire du dossier. C'est possible grâce à la commande "chown" sous Linux dans les propriétés du fichier sous Windows.

sudo chown -R www-data:www-data <mon-dossier>

Git