2013-07-24 17 views
8

Sto cercando di creare un gitsubtree di un repository esistente, ad esempio:Come posso creare una gitsubtree di un repository esistente?

-> projectA/ProjectB

Progetto A è il genitore, voglio aggiungere progetto B come una sottostruttura git.

git sottostruttura -P ProjectB ssh: master //[email protected]/projectB.git

Ma non riesce, e mostra il seguente messaggio:

prefisso 'ProjectB ' esiste già.

Non voglio scaricare nuovamente tutto il repository, voglio solo aggiungere questa directory al mio gitsubtree.

Questo progetto di directory B non è tracciato dal progetto A git.

grazie in anticipo

+1

La cartella del progetto B esiste già? Se così contiene qualcosa? La sottostruttura di Git rifiuterà di creare la sottostruttura se la directory in cui verrebbe inserita contiene qualcosa. – LopSae

+0

Sembra impossibile attualmente (git v2.0) se la cartella projectB esiste già, e rimuovendo la directory projectB esistente con 'rm -rf projectB', quindi' git subtree aggiungi projectB_directory [email protected]/projectB.git master' per scaricare nuovamente è l'unica scelta. – Allen

risposta

4

È possibile aggiungere ProjectB come una sottostruttura di Projetta usando vaniglia git (non è necessario git subtree).

cd projectA 
git remote add projectB_remote [email protected]/projectB.git 
git fetch projectB_remote 
git checkout -b projectB_branch projectB_remote/master 
git checkout master 
git read-tree --prefix=projectB/ -u projectB 

Spiegazione

  1. Inserire il projectA repo locale.
  2. Aggiungi un nuovo telecomando chiamato projectB_remote con l'URL di projectB.
  3. Fetch projectB_remote senza unione.
  4. Creazione e checkout a projectB_branch; portare i file projectB_remote/master.
  5. Ritorno a projectA/master.
  6. Creare una sottostruttura in projectA/master che contiene una verifica di projectB_branch.

Directory risultante Struttura

projectA 
    projectB 
    other.txt 
    project.txt 
    A.txt 
    files.txt 

Vedi http://www.git-scm.com/book/en/v1/Git-Tools-Subtree-Merging

0

Quando si aggiunge una sottostruttura, sembra che il prefisso (sottodirectory in cui verrà aggiunto il sotto-albero) non può esistere già.

Ho risolto questo problema eseguendo il check-out su un commit prima che questa sottodirectory esistesse, facendo aggiungere il sottoalbero git e quindi unendo il ramo che conteneva il mio vecchio contenuto di sottodirectory.

Problemi correlati