J'ai un repo git avec de très gros fichiers binaires en elle. Je n'ai plus besoin d'eux, et je ne se soucient pas de pouvoir extraire les fichiers à partir plus tôt s'engage. Donc, afin de réduire les pensions de taille, je veux supprimer les fichiers binaires à partir de l'histoire".
Après une recherche sur le web, j'en ai conclu que ma meilleure (seule?) l'option est d'utiliser git-filter-branch
:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Cela vous semble comme une bonne approche jusqu'à présent?
En supposant que la réponse est oui, j'ai un autre problème à résoudre. Le git manuel a cet avertissement:
AVERTISSEMENT! Le réécrit l'histoire aura différents noms d'objets pour tous les objets et converge pas avec l'origine de la branche. Vous ne serez pas en mesure de pousser facilement et distribuer la version remaniée de la branche sur le dessus de l'origine de la branche. S'il vous plaît ne pas utiliser cette commande si vous ne connaissez pas toutes les implications, et éviter de l'utiliser de toute façon, si une simple et unique commettre suffirait pour résoudre votre problème. (Voir la "RÉCUPÉRATION DE l'AMONT REBASE" section git-git rebase(1) pour de plus amples informations à propos de la réécriture publié l'histoire.)
Nous avons une distance de pensions de titres sur notre serveur. Chaque développeur pousse et tire d'elle. Basé sur l'avertissement ci-dessus (et ma compréhension de la façon dont git-filter-branch
des travaux), je ne pense pas que je vais être en mesure d'exécuter git-filter-branch
sur ma copie locale et de pousser ensuite les modifications.
Donc, je suis provisoirement de la planification à passer par les étapes suivantes:
- Dis à tous mes développeurs de commit, push, et arrêter de travailler un peu.
- Connectez-vous au serveur et d'exécuter le filtre sur le repo central.
- Demandez à chacun de supprimer leurs copies anciennes et clone à partir du serveur.
Est-ce à son droit? Est-ce la meilleure solution?