2010-12-13 7 views
1

J'ai récemment extrait quelques sous-répertoires à partir d'un dépôt git partagé avec
git filter-branch --subdirectory-filter foodir -- --allQuel est l'impact sur les dépôts clonés après un --index-filtre git filtre-branche « git rm ... »

Maintenant, je Les sous-répertoires sont toujours laissés dans le référentiel central partagé et je voudrais les supprimer. Pour autant que j'ai compris de la recherche sur le web quelque chose comme
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
devrait être utilisé pour supprimer les anciens répertoires de l'histoire. Même si je crois que cela fonctionnera, je me demande maintenant si c'est la meilleure façon de supprimer quelque chose de l'historique dans le cas où le référentiel est partagé, car j'ai compris que tout le monde avec un clone local devrait -clone le dépôt? Donc, ma question ultime est, est-ce que j'ai raison avec ces suppositions ou existe-t-il un moyen de supprimer des répertoires de plusieurs branches dans l'histoire sans que tout le monde doive à nouveau cloner le référentiel?

MISE À JOUR
Je couru quelques tests et un en cours d'exécution avec cette commande: git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch -- Dir1 DIR2' --prune-empty --tag-name-filter cat -- --all qui fonctionne, mais il change aussi complètement toutes les clés SHA-1 de tous les engage, ce qui est compréhensible mais pas souhaitable. Et cela signifierait que tout le monde doit re-cloner le dépôt et tous les liens précédents via Gitweb vont être brisés.

+0

Nous avons maintenant décidé de supprimer simplement les fichiers dans les répertoires et de les valider. Ce n'est pas un problème de sécurité de les avoir dans le reste de l'historique. Mais si quelqu'un a une meilleure idée s'il vous plaît répondez toujours – AGrunewald

Répondre

1

Vous ne pouvez pas modifier les validations en silence si d'autres personnes les possèdent déjà. C'est comme ça que Git fonctionne et c'est une fonctionnalité.

+0

Je sais que c'est une caractéristique, mais je me demande quel est le moyen le moins perturbateur d'atteindre l'objectif. – AGrunewald

+0

'git pull -f' est probablement le moins perturbateur. Cela écrasera l'histoire locale. Mais vous devez toujours le faire dans chaque référentiel. – Bartosz

Questions connexes