Je tourne sur FreeBSD 11.1, le concept de virtualisation des prisons FreeBSD rend le système d'exploitation optimal. La version actuelle de Git que j'utilise est la 2.15.1, je préfère également exécuter tout sur des scripts shell. Avec cela à l'esprit, j'ai modifié les suggestions ci-dessus comme suit :
git push: .git/hooks/pre-commit
#! /bin/sh -
#
# Un script de crochet appelé par "git commit" sans arguments. Le hook doit
# sortir avec un statut différent de zéro après avoir émis un message approprié s'il veut
# arrêter le commit.
SELF_DIR=$(git rev-parse --show-toplevel);
DATABASE=$SELF_DIR/.permissions;
# Effacer le fichier de base de données de permissions
> $DATABASE;
printf "Sauvegarde des permissions de fichiers...\n";
OLDIFS=$IFS;
IFS=$'\n';
for FILE in $(git ls-files);
do
# Enregistrer les autorisations de tous les fichiers dans l'index
printf "%s;%s\n" $FILE $(stat -f "%Lp;%u;%g" $FILE) >> $DATABASE;
done
IFS=$OLDIFS;
# Ajouter le fichier de base de données de permissions à l'index
git add $DATABASE;
printf "OK\n";
git pull: .git/hooks/post-merge
#! /bin/sh -
SELF_DIR=$(git rev-parse --show-toplevel);
DATABASE=$SELF_DIR/.permissions;
printf "Restauration des permissions de fichiers...\n";
OLDIFS=$IFS;
IFS=$'\n';
while read -r LINE || [ -n "$LINE" ];
do
FILE=$(printf "%s" $LINE | cut -d ";" -f 1);
PERMISSIONS=$(printf "%s" $LINE | cut -d ";" -f 2);
USER=$(printf "%s" $LINE | cut -d ";" -f 3);
GROUP=$(printf "%s" $LINE | cut -d ";" -f 4);
# Définir les permissions du fichier
chmod $PERMISSIONS $FILE;
# Définir le propriétaire et les groupes du fichier
chown $USER:$GROUP $FILE;
done < $DATABASE
IFS=$OLDIFS
pritnf "OK\n";
exit 0;
Si pour une raison quelconque vous avez besoin de recréer le script, le fichier .permissions doit avoir le format suivant :
.gitignore;644;0;0
Pour un fichier .gitignore avec des autorisations 644 données à root:wheel
Remarquez que j'ai dû apporter quelques modifications aux options stat.
Profitez-en,
1 votes
Possible duplicate de git - comment récupérer les autorisations de fichier que git pense que le fichier devrait avoir?
1 votes
Ouais, je suppose, bien que la solution à laquelle ils font référence, franchement, je ne suis pas sûr de ce que je dois en faire. J'espérais une approche plus directe.
0 votes
Que dire de la situation où le code source provient de l'environnement de développement (par exemple Windows - XAMPP, etc.) qui n'a pas d'informations sur la propriété des fichiers? Les fichiers à la fin du processus git doivent correspondre à la propriété et aux autorisations de l'emplacement cible. Git-cache-meta peut-il gérer cela? D'accord avec Yarin ... sûrement il s'agit d'un cas d'utilisation assez classique, qui devrait avoir une solution assez simple?