2013-04-07 1 views
2

J'ai un projet important avec une longue histoire et j'essaie de mettre certains fichiers dans leur propre dépôt tout en gardant leur historique de changements.
Avant de faire cela, j'ai déplacé tous les fichiers que j'ai besoin de garder dans leur propre project/subdirectory, donc je pourrais juste cloner mon dépôt, utiliser git filter-branch --subdirectory-filter mais cela jette l'histoire entière des fichiers depuis le subdirectory est très nouveau. Ce que je cherche est une façon de dire "garder tous les commits qui mènent à ces fichiers", donc je prendrais tous les fichiers dans ce sous-répertoire et marcherais les commits vers l'arrière en disant "était ce fichier dans ce commit? Oui, gardez le commit et le fichier dans ce commit ".Plus intelligent git filter-branch --subdirectory-filter

Existe-t-il un moyen de le faire relativement sans douleur?

+0

Ces fichiers se déplacent/ont été renommés dans le passé? – Chronial

Répondre

1

Peut-être que vous devez d'abord modifier votre dépôt d'origine, afin que l'historique de ces fichiers semble avoir toujours été dans ce sous-répertoire.
Ensuite, vous pouvez appliquer le filtre-beanch.

Voir "How can I rewrite history so that all files are in a subdirectory?":

récrire les commits de sorte que partout project/subdirectory n'existe pas, il est créé et tous les fichiers sont déplacés vers elle:

git filter-branch --prune-empty --tree-filter ' 
if [[ ! -e project/subdirectory ]]; then 
    mkdir -p project/subdirectory 
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files project/subdirectory 
fi' 

maintenant l'historique sera enregistré comme si tous les fichiers étaient toujours situés dans project/subdirectory.

Questions connexes