Por Anónimo (no verificado) , 29 Abril 2026

El objetivo

Quieres mover un directorio de un repo a otro, manteniendo la historia completa de commits de los archivos movidos. Copy-paste pierde la procedencia; git filter-repo la preserva.

Paso 1: extraer el subset

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

Paso 2: importar al objetivo

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

Paso 3: ubicar los archivos

git filter-repo --to-subdirectory-filter vendor/widget

Limpieza

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

Verificar la historia

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

Eliminar los archivos del source

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

Evitar trampas

  • Siempre trabaja en clones, no en tus checkouts principales.
  • Ejecuta en un clone fresco — filter-repo se rehúsa por defecto.
  • Coordina con el equipo — los SHAs cambian.
  • Los tags se preservan.