2011-12-01 3 views
1

Je sais qu'il y a un gros fil Detach subdirectory into separate Git repository mais il y a toujours quelques variations. Ma tâche différencie de la question ci-dessus est qu'il existe des fichiers au lieu d'un sous-répertoire.Détacher certains fichiers dans un référentiel Git séparé

Ex.

XYZ/ 
    .git/ 
    XY1/ 
    ABC/foo.py 
    ABC/bar.py 
    ABC/asdf.py 
    ABC/... 

Et je voudrais extraire foo.py et bar.py dans un dépôt Git séparé.

Mon premier essai est de faire un sous-répertoire pour ces 2 fichiers et utiliser la méthode mentionnée dans 1:

$ mkdir foobar 
$ git mv ABC/foo.py ABC/bar.py foobar 
$ git commit -m '...' 
$ git filter-branch --subdirectory-filter foobar HEAD 

Jusqu'à présent, si bon, sauf l'histoire de validation est perdu. Une idée pour ça?

Répondre

0

Vous devez utiliser the subtree merge strategy pour fusionner le dossier "distant" "ABC" dans votre dossier local "ABC" et maintenir l'historique. Ensuite, vous utiliserez filter-branch pour supprimer les fichiers indésirables.

0

Ce que je fait pour y arriver était:

  1. git clone ABC/ DEF/; cd DEF
  2. git remote rm origin
  3. git filter-branch --prune-empty --tree-filter 'rm -fr <list of files/folders to remove>' -- --all
  4. git filter-branch -f --prune-empty --subdirectory-filter DEF -- --all

Et ce fut tout. Ajout d'un nouveau projet distant et poursuite du travail dans un référentiel séparé.

Questions connexes