Passaggi manuali con semplici comandi git
Il piano è quello di dividere le singole directory nei propri repository, quindi unirle insieme. I seguenti passaggi manuali non utilizzavano script geek da usare ma comandi di facile comprensione e potevano aiutare a unire N sottocartelle aggiuntive in un altro singolo repository.
Dividere
Supponiamo che il tuo repository originale sia: original_repo
1 - Dividi app:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Dividi librerie
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Continua se hai più di 2 cartelle. Ora avrai due repository git nuovi e temporanei.
Conquista unendo app e librerie
3 - Preparare il nuovissimo repository:
mkdir my-desired-repo
cd my-desired-repo
git init
E dovrai fare almeno un commit. Se le seguenti tre righe devono essere ignorate, il primo repository apparirà immediatamente sotto la radice del repository:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
Dopo aver eseguito il commit del file temporaneo, il merge
comando nella sezione successiva verrà interrotto come previsto.
Prendendo il feedback degli utenti, invece di aggiungere un file casuale come a_file_and_make_a_commit
, puoi scegliere di aggiungere un .gitignore
, o README.md
ecc.
4 - Unisci prima il repository di app:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
Ora dovresti vedere la directory delle app nel tuo nuovo repository. git log
dovrebbe mostrare tutti i messaggi di commit storici rilevanti.
Nota: come Chris ha osservato di seguito nei commenti, per la versione più recente (> = 2.9) di git, è necessario specificare --allow-unrelated-histories
congit merge
5 - Unisci il repository di librerie libere successivamente allo stesso modo:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
Continua se hai più di 2 repository da unire.
Riferimento: unisci una sottodirectory di un altro repository con git