L'objectif
Vous voulez déplacer un répertoire d'un repo vers un autre, en gardant l'historique complet de commits des fichiers déplacés.
Étape 1 : extraire le sous-ensemble
git clone <source-repo> source-extract
cd source-extract
git filter-repo --path packages/widget --path-rename packages/widget:
Étape 2 : importer dans la cible
cd ../target-repo
git remote add widget-source ../source-extract
git fetch widget-source
git merge --allow-unrelated-histories widget-source/main
Étape 3 : placer les fichiers
git filter-repo --to-subdirectory-filter vendor/widget
Nettoyage
git remote remove widget-source
rm -rf ../source-extract
Vérifier l'historique
git log --follow vendor/widget/index.js
git blame vendor/widget/index.js
Supprimer les fichiers de la source
cd source-repo
git filter-repo --invert-paths --path packages/widget
Alternative : git subtree
git subtree add --prefix=vendor/widget <source-url> main --squash
git subtree pull --prefix=vendor/widget <source-url> main --squash
Éviter les pièges
- Travaillez toujours sur des clones.
- Lancez sur un clone frais.
- Coordonnez avec l'équipe.
- Les tags sont préservés.