Da Anonimo (non verificato) , 29 Aprile 2026

L'obiettivo

Vuoi spostare una directory da un repo a un altro, mantenendo la storia completa dei file spostati.

Passo 1: estrarre il sottoinsieme

git clone <source-repo> source-extract
cd source-extract
git filter-repo --path packages/widget --path-rename packages/widget:

Passo 2: importare nel target

cd ../target-repo
git remote add widget-source ../source-extract
git fetch widget-source
git merge --allow-unrelated-histories widget-source/main

Passo 3: posizionare i file

# Before merging, in source-extract:
git filter-repo --to-subdirectory-filter vendor/widget

Pulizia

git remote remove widget-source
rm -rf ../source-extract

Verificare la storia

git log --follow vendor/widget/index.js
git blame vendor/widget/index.js

Rimuovere i file dal sorgente

cd source-repo
git filter-repo --invert-paths --path packages/widget

Alternativa: git subtree

git subtree add --prefix=vendor/widget <source-url> main --squash
git subtree pull --prefix=vendor/widget <source-url> main --squash

Evitare insidie

  • Lavorare sempre su cloni, non sui checkout primari.
  • Eseguire su un clone fresco.
  • Coordinarsi con il team.
  • I tag sono preservati da filter-repo.