Voici le script que j'utilise pour réécrire l'historique d'un sous-module référencé dans plusieurs référentiels parents. Cela fonctionne dans Git bash dans un environnement Windows.Mise à jour des références à un sous-module dans le référentiel parent après que l'historique git du sous-module a été réécrit
#!/bin/bash
cd submodule_repo
git filter-branch --index-filter 'git rm -q --cached --ignore-unmatch files_to_remove' \--tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
J'ai besoin de la carte en quelque sorte les SHA s des anciens commits ceux nouvellement créés SHA s, afin que je puisse mettre à jour la même référence dans les dépôts de parents. Y a-t-il un moyen de le faire? J'ai regardé Repository with submodules after rewriting history of submodule, mais cela n'aide pas vraiment car je suis en train de mettre à jour les références d'origine pour m'assurer que les fichiers que je supprime ne sont pas reconditionnés par hasard. Je suis relativement nouveau à l'utilisation de git donc toute orientation serait vraiment appréciée.
Modifier:
En suivant les étapes mentionnées dans les commentaires de la section réponse acceptée (par @torek) a travaillé pour moi.
Merci @torek C'est un peu décevant :(Il devrait y avoir une option pour garder ou rejeter la carte une fois la branche de filtre terminée, serait vraiment utile dans un tel scénario.Toute solution de contournement que je peux utiliser pour créer manuellement la carte –
Le plus simple serait de pirater le code du filtre-branche.C'est un script shell, il est donc très facile à modifier.Il suffit de trouver le point où il supprime le répertoire temporaire, et qu'il fasse quelque chose d'utile avec la carte pour le sauvegarder. – torek
Été un certain temps, mais je suis de retour sur cette tâche maintenant, alors j'ai utilisé la variable '$ GIT_COMMIT' comme mentionné [ici] (https://stackoverflow.com/questions/14782906/how-do-i-get- une-liste-de-vieux-nouveau-réécrit-commit-shas-de-git-filtre-branche.) et a créé la carte en tant que partie de filtre-branche.Il semble peupler la carte correctement (tous mes commits modifiés sont enregistrés sur la carte) avec les anciens commits. –