2017-03-24 7 views
0

Je veux faire l'équivalent de git-subtree split uniquement sur un seul fichier plutôt que sur un répertoire. C'est-à-dire, je veux faire un nouveau dépôt ayant seulement ce fichier et tout son historique.Diviser le fichier en référentiel séparé, en conservant l'historique

En passant le nom du fichier à l'argument --prefix ne fonctionne pas

git subtree split --prefix=file_name -b split 

J'ai essayé des variations de couple sur git-filter-branch mais n'a pas trouvé le bon incantatoire.

+0

[Voir ce lié (mais pas tout à fait la même chose) question] (http://stackoverflow.com/q/42661978/1256452). Pour réaliser ce que vous voulez, vous devez copier les commits que vous souhaitez copier, et non les autres. Vous pouvez * le faire avec 'git filter-branch', c'est juste lent et douloureux. Vous pouvez le faire d'autres façons qui seront plus rapides; Jusqu'à ce que vous écriviez un script comme 'git subtree', il sera quand même douloureux. – torek

+0

Voici une solution qui fonctionne pour un ou plusieurs fichiers: https://stackoverflow.com/a/6006679/1072626 – vossad01

Répondre

1

Vous pouvez utiliser filter-branch avec un tree-filter tout supprimer sauf le fichier que vous voulez garder comme

git filter-branch --tree-filter 'find -type f -not -path ./foo/bar -delete' --prune-empty 
+0

Notez qu'il est essentiel d'inclure '. /' Au début du chemin du fichier. – vossad01

+0

J'ai ensuite utilisé [cet appel de filter-branch] (http://stackoverflow.com/a/6149972/1072626) pour abandonner la validation racine. Dans mon cas, le fichier que je voulais n'était pas dans le commit racine mais le commit était conservé comme un commit vide. – vossad01