2011-10-07 4 views
7

J'ai une assez grande quantité de fichier dans le dépôt. Ainsi, git se bloque parfois en raison d'une exception de mémoire lors des changements de rebasage.crash git lors du rebas

E.g.

git checkout feature 
git rebase master 
(nasty out of memory exception) 
..... 

Donc, une fois que je suis arrivé cette exception, j'ai essayé à nouveau rebasage

git rebase master 

Et il m'a dit que la branche feature est à jour. Cela semble étrange, car rebase a fini avec exception.

Y a-t-il un moyen d'éviter une exception? Peut être en quelque sorte dire à git d'utiliser une plus petite quantité de mémoire. Cette exception peut-elle être la cause de la corruption du référentiel? Si cela cause une corruption, y a-t-il un moyen d'annuler en toute sécurité les changements effectués lors du rebasage jusqu'à l'état précédent git rebase master?

+0

Qu'a dit l'exception? Cela pourrait être important. – Chris

+0

Je ne peux pas le reproduire maintenant. Mais c'est comme suit: 'blablabla out of memory, blablabla, malloc a échoué (impossible d'allouer 100500 octets)' –

Répondre

2

Vous exécutez probablement ceci sur une VM ou stockez de gros fichiers. branche de filtrer des fichiers volumineux si vous pouvez ou buter la mémoire:/

Pas grand-chose que je peux ajouter à moins d'avoir plus d'info ..

+1

Qu'en est-il de la corruption du dépôt? –

+0

Que voulez-vous dire par «gros fichiers»? Est-ce que git a besoin de stocker tous les fichiers du dépôt dans le ram pour rebasculer les changements? –

+0

Pas certain. Mais il peut être essayer de. Quelle est la taille du plus gros fichier que vous avez dans l'histoire? –

0

git rebase $BASE commence par faire git reset --hard $BASE

S'il se bloque en raison d'un manque de mémoire après cela, cela signifie que vous êtes laissé avec yo Votre pointeur de branche pointant vers $BASE à la place du commit indiqué précédemment.

Voilà pourquoi on vous dit que feature est à jour lorsque vous git rebase master à nouveau, parce que feature est déjà pointant vers le même engagement que master après l'accident de la mémoire.

Pour réinitialiser votre branche avec la vous étiez commettras d'origine avant, exécutez

git reset --hard [email protected]{1}`. 

Ou si vous avez fait d'autres travaux sur la branche après l'accident, exécutez git reflog pour trouver le commettras d'origine.

Voir aussi Undoing a git rebase


Une fois que vous avez obtenu votre branche avec le commit d'origine, vous pouvez essayer

git rebase -m master 

qui va essayer une stratégie de rebasage différente qui utilise probablement moins de mémoire si vous avez gros fichiers binaires.

Questions connexes