J'ai deux branches sur mon repo nu, Master et "desarrollo" qui est le développement en espagnol. Je veux créer un crochet de pré-réception pour éviter de pousser les conflits au centre nu. Ce crochet serait positionné sur le centre nu. Voilà ce que j'ai:Comment éviter les conflits de push avec un hook de pré-réception placé sur le repo nu distant?
#!/bin/bash
protected_branch='master'
# check each branch being pushed
while read local_ref local_sha remote_ref remote_sha
do
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<|>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
remote_branch=$(echo $remote_ref | sed -e 's,.*/\(.*\),\1,')
if [ $protected_branch = $remote_branch ]
then
echo "ABORT PUSH: Not allowed to push directly to $protected_branch."
exit 1 # push will not execute
fi
done
exit 0
La première partie est d'empêcher de pousser les fichiers en conflit, et la deuxième partie est d'empêcher de pousser à maîtriser, je laisse à la branche ne fait que repousser Desarrollo. La deuxième partie fonctionne parfaitement, mais la première partie n'empêche pas les poussées, mais elle ne génère pas non plus d'erreurs lorsque j'essaie de télécharger un fichier avec des balises non plus. Je veux la transaction échouer complètement, et pas seulement rejeter le dossier conflictuel, mais toute poussée dans le cas où il y a même un seul fichier en conflit:
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<|>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
Je dois dire que je copiais les deux parties de différentes sources, donc il faut être quelque chose de mal avec les noms de variables, je veux juste savoir est old_sha et new_sha variables sont la raison pour laquelle cela échoue depuis que je ne suis pas particulièrement bon à faire des crochets
EDIT: J'ai changé la comparaison de chaîne de 5 à 7 '< < < < < < <' et maintenant cela fonctionne perfec tly, le script final est
#!/bin/bash
protected_branch='master'
# check each branch being pushed
while read old_sha new_sha refname
do
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<<<|>>>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
remote_branch=$(echo $refname | sed -e 's,.*/\(.*\),\1,')
if [ $protected_branch = $remote_branch ]
then
echo "ABORT PUSH: Not allowed to push directly to $protected_branch."
exit 1 # push will not execute
fi
done
exit 0
Maintenant, cela fonctionne, mais le problème est qu'il continue à rejeter le push quoi qu'il arrive avec le message "Saw a conflict marker in desarrollo" et je ne semble pas avoir de fichiers en conflit ..... git diff - -name-only --diff-filter = UI vérifié avec cette commande et la liste est vide ..... Est-ce que la vérification que je fais est la bonne façon de vérifier les conflits sur le script bash en utilisant le <<<<< << chaîne ou il y a une meilleure alternative là-bas ?? ... Mon script est maintenant https://codeshare.io/266oZ – Juan
J'ai changé les chaînes de caractères de '<<<<<' à '<<<<< << 'puisque j'avais des fichiers qui avaient <<<<< et n'étaient pas conflictuels et git met exactement 7 <. Merci beaucoup pour votre aide mon ami. Problème résolu – Juan