Étapes manuelles avec de simples commandes git
Le plan est de diviser les répertoires individuels en ses propres dépôts, puis de les fusionner. Les étapes manuelles suivantes n'utilisaient pas de scripts de geek mais des commandes faciles à comprendre et pourraient aider à fusionner N sous-dossiers supplémentaires dans un autre référentiel unique.
Diviser
Supposons que votre dépôt d'origine est: original_repo
1 - Applications fractionnées:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Diviser les bibliothèques
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Continuez si vous avez plus de 2 dossiers. Vous allez maintenant avoir deux nouveaux référentiels git temporaires.
Conquérir en fusionnant des applications et des bibliothèques
3 - Préparez le tout nouveau repo:
mkdir my-desired-repo
cd my-desired-repo
git init
Et vous devrez faire au moins un commit. Si les trois lignes suivantes doivent être ignorées, votre premier dépôt apparaîtra immédiatement sous la racine de votre dépôt:
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"
Avec le fichier temporaire validé, la merge
commande dans la section suivante s'arrêtera comme prévu.
En vous basant sur les commentaires des utilisateurs, au lieu d'ajouter un fichier aléatoire comme a_file_and_make_a_commit
, vous pouvez choisir d'ajouter un .gitignore
, ou README.md
etc.
4 - Fusionner d'abord le repo des applications:
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"
Vous devriez maintenant voir le répertoire des applications dans votre nouveau référentiel. git log
devrait afficher tous les messages de validation historiques pertinents.
Remarque: comme Chris l'a noté ci-dessous dans les commentaires, pour la version plus récente (> = 2.9) de git, vous devez spécifier --allow-unrelated-histories
avecgit merge
5 - Fusionnez ensuite libs repo de la même manière:
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"
Continuez si vous avez plus de 2 dépôts à fusionner.
Référence: Fusionner un sous-répertoire d'un autre référentiel avec git