git filter-branch --subdirectory-filter dir/name -- --all
pour construire une pension qui n'a que l'histoire se rapportant à ce répertoire/nom. Avant de faire le filtre, je clone le repo original (qui est beaucoup plus gros) dans un répertoire tmp. Après la branche de filtre, le repo regarde juste comme je le veux, à une exception près: Il semble toujours contenir tous les objets du repo original même s'ils ne sont pas montrés dans "git log". Comment puis-je supprimer complètement tous ces objets indésirables?
J'ai essayé des choses comme:
git reflog expire --expire=now --all
git gc --aggressive --prune=now
Il est clair pour moi que je ne sais pas pourquoi ils sont toujours là ou ce que cela signifie pour les enlever, mais je voudrais bien. Un peu d'information peut-être liée contre moi est que j'ai fait un repack git -a sur mon dépôt de la source il y a un certain temps et il semble copier ce fichier pack vers le nouveau repo. On dirait que je devrais encore être capable de faire ce que je veux bien.
Si c'est aussi simple que cela, je vais être un peu vexé. Dois-je littéralement juste .git/refs/original? – jettero
Eh bien, le rm-ing fonctionne bien (même s'il y a un meilleur moyen) et cela répond totalement à ma question, merci. – jettero
'rm' ne fonctionne que si GC n'a pas été exécuté, car GC déplace' refs' à 'packed-refs'. La bonne façon de supprimer les références d'origine sauvegardées par git-filter-branch serait «git for-each-ref --format ="% (refname) "refs/original/| xargs -n 1 git update-ref -d', comme indiqué dans la [documentation git-filter-branch] (http://git-scm.com/docs/git-filter-branch). @jettero – user