2012-04-02 9 views
8

Mi piacerebbe creare un nuovo ramo nel mio repository che includa solo i file da una specifica directory nel master e la sua cronologia quindi premere quel ramo di un nuovo repository.Git crea un nuovo ramo con solo una directory specificata e la sua cronologia quindi spinge al nuovo repository

... o qualcosa di equivalente: ad esempio, è possibile trasferire una directory in un nuovo repository in un nuovo repository senza creare un ramo.

Finora penso che quanto segue funzionerà, ma mi chiedo se c'è un modo più semplificato.

1 - Creazione di un ramo vuoto:

git symbolic-ref HEAD refs/heads/<new-branch> 
rm .git/index 
git clean -fdx 

2 - Acquista una directory da maestro:

git checkout master <paths> ... 
git add <paths> ... 
git commit 

3 - ramo Push to nuovo telecomando:

git push -u <remote-URL> <new-branch> 

4 - Quindi, nel nuovo repository, unire il ramo con il master:

git checkout -t origin/<new-branch> 
git checkout master 
git merge <new-branch> 
git branch -d afterimage 
git branch -d -r afterimage 

Sto tentando di fare qualcosa di equivalente a Detach subdirectory into separate Git repository, ma senza il pasticcio git filter-branch.

+3

... ma in realtà * è necessario * utilizzare 'git filter-branch' per estrarre la cronologia per la sottodirectory. Senza quello, ottieni solo i file. –

+1

Davvero non vedo l'interesse di non seguire post il tuo link. Farlo nel modo in cui proponi funziona, ma è una forza bruta, e non pulirà i tuoi dati storici o di deposito. – CharlesB

risposta

13

Perché non si desidera utilizzare git filter-branch? È stato creato appositamente per attività come quella che desideri.

git branch subdir_branch HEAD 
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch 
git push git://.../new_repo.git subdir_branch:master 

Questo vi darà solo il contenuto della vostra dir/to/filter in un nuovo repository, tra cui tutta la sua storia e niente di più. Dato che filtrerai solo il ramo appena creato, il resto del tuo repository rimarrà intatto. È possibile eliminare il subdir_branch in seguito.

Problemi correlati