192 votes

Git - force un pull pour tout écraser, à chaque pull

J'ai une CENTRALE nu repo qui a 3 développeur référentiels de tirer et de pousser à nouveau normalement.

J'ai aussi 2 autres dépôts, qui s'inspirent de la CENTRALE nu repo: l'un est le serveur live et l'autre est un test/stade serveur, chacun tirant de leur propre branche.

Le scénario est le suivant: j'ai un post-mise à jour du script hook sur le repo CENTRAL qui accède automatiquement à la tester et de vivre repos et exécute une commande pull sur chaque. cela met à jour la fois de l'essai et de vivre des serveurs, tout dépend de la branche a de nouveaux commits. Tout cela fonctionne très bien.

Le problème est: est-ce qu'il peut arriver que dans une situation d'urgence que les fichiers peuvent être directement mis à jour sur le serveur (via ftp ou autre) et la CENTRALE post-script de mise à jour sera alors l'échec depuis de fusion/écraser les conflits de se produire. Il n'y a aucun moyen d'éviter ce scénario, et c'est éventuelle.

Ce que je voudrais avoir arriver, c'est ceci: je veux l'extraire à partir du live et des sites d'essai à TOUJOURS remplacer/fusion sur pull. TOUJOURS. Ces pensions seront pull-seulement qu'ils ne sont pas pour le développement.

Dans toutes mes recherches, je ne trouve pas une bonne solution pour avoir une traction force TOUJOURS un écrasement des fichiers locaux. Est-ce possible? Il ferait un excellent scénario de développement.

Merci à l'avance!

484voto

Amber Points 159296

Vraiment le moyen idéal de le faire est de ne pas utiliser pull mais fetch et reset:

git fetch origin master
git reset --hard FETCH_HEAD
git clean -df

(Modifiant master quelle que soit la branche que vous souhaitez suivre.)

pull est conçu autour de modifications de la fusion ensemble en quelque sorte, alors que reset est conçu autour de simplement faire de votre copie locale corresponde à une validation.

Vous souhaitez mai à envisager légèrement différentes options d' clean selon votre système à ses besoins.

20voto

user1251007 Points 1652

Vous pouvez essayer ceci:

 git reset --hard HEAD
git pull
 

(de Force git pour écraser les fichiers locaux lors de l'extraction )

Une autre idée serait de supprimer tout le git et de créer un nouveau clone.

J'espère que cela pourra aider!

6voto

Matt Wolfe Points 4123

Je ne sais pas comment le faire en une seule commande, mais vous pouvez faire quelque chose comme:

 git reset --hard
git pull
 

ou même

 git stash
git pull
 

2voto

Dietrich Epp Points 72865

Vous pouvez changer le crochet pour tout nettoyer.

 # Danger! Wipes local data!

# Remove all local changes to tracked files
git reset --hard HEAD

# Remove all untracked files and directories
git clean -dfx

git pull ...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X