1 votes

Git ne pousse pas les changements vers github après avoir poussé les changements depuis un autre PC

J'ai la configuration suivante concernant Git :

  • Un petit serveur sous Arch Linux et le client Git par défaut. Je l'ai configuré pour qu'il apporte automatiquement des modifications à certains fichiers et qu'il pousse ensuite ces modifications vers mon dépôt Github.
  • Mon PC sous Windows 8.1 avec SmartGit installé. J'apporte occasionnellement des modifications à des fichiers que je pousse ensuite manuellement vers mon dépôt Github.

Le problème que je rencontre est que lorsque j'apporte des modifications aux fichiers sur mon PC Windows puis que je pousse ces modifications, mon serveur Arch Linux perd apparemment la capacité de pousser ses modifications vers le référentiel distant. Le client Arch Linux est capable de pousser ses changements automatiques sans problème jusqu'à ce que je pousse quelque chose avec le PC Windows. Quelque chose se casse après cela. La seule façon que j'ai trouvée pour résoudre ce problème est de supprimer le dépôt local sur mon serveur Arch Linux et ensuite de créer un nouveau dépôt local en tirant du dépôt distant.

J'ai programmé le client Arch Linux pour extraire et récupérer des données du dépôt distant avant d'effectuer des modifications et je fais de même lorsque je fais des modifications sur mon PC.

Quelqu'un peut-il m'aider à comprendre pourquoi cela se produit et ce que je peux faire pour empêcher ce problème de se produire à l'avenir ? Toute aide sera grandement appréciée.

Voici les scripts que j'utilise sur mon serveur Arch Linux :

Principal script :

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

# Test if an internet connection is present
ping -c 3 google.com > /dev/null 2> /dev/null
if [ $? != 0 ]; then
        exit 1
fi

# Git requires that the working directory be the repository I am working with
cd /home/git-user/repositories/xjdhdr-random-code

# Update local repository to ensure no conflicts exist before I make changes
/home/git-user/bin/expect-gitpull.sh

# snip: Everything between these two commands basically make a lot of changes to a lot of text files. Probably has nothing to do with Git or my problem.

# Commit changes to remote repository.
cd /home/git-user/repositories/xjdhdr-random-code
git add -A -f --ignore-errors --
git commit -m "Automatic commit of machine generated changes to repository" --no-edit --

/home/git-user/bin/expect-gitpush.sh

exit 0

/home/git-user/bin/expect-gitpull.sh

#!/bin/expect

set password {*don't need anyone to see my passphrase*}

cd /home/git-user/repositories/xjdhdr-random-code

spawn git pull origin

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

spawn git fetch -p origin

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

/home/git-user/bin/expect-gitpush.sh

#!/bin/expect

set password {*ditto*}

cd /home/git-user/repositories/xjdhdr-random-code

spawn git push --recurse-submodules=check

expect "Enter passphrase for key '/home/git-user/.ssh/id_rsa':"

send -- "$password\r"

send -- "\r"

expect "%PROMPT%"

0voto

XJDHDR Points 193

J'ai trouvé quel est le problème. Par défaut, expect est configuré de manière à ce que toute commande Expect se termine au bout de 10 secondes si la chaîne de caractères qu'on lui a demandé d'attendre n'apparaît pas. Dans mon cas, la commande attendez "%PROMPT%" s'arrêtait alors que la commande "git push" était en cours d'exécution. Et comme il n'y avait pas d'autres commandes par la suite, le script était terminé. Cela signifie que le push n'a pas pu se terminer avec succès.

La solution consiste à ajouter définir le délai d'attente X vers le haut du script, en remplaçant X par le nombre de secondes que vous voulez qu'Expect attende (ou utilisez -1 si vous voulez qu'il attende indéfiniment).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X