Comment puis-je déplacer un seul répertoire d'un référentiel git vers un nouveau référentiel tout en conservant l'historique?

StackOverflow https://stackoverflow.com/questions/811251

  •  03-07-2019
  •  | 
  •  

Question

J'ai hérité d'un référentiel git contenant plusieurs projets dans des répertoires distincts. J'aimerais diviser le référentiel en nouveaux référentiels individuels, un pour chaque projet, puis faire en sorte que le référentiel maître contienne les projets en tant que sous-modules. J'aimerais faire tout cela en conservant, si possible, l'historique des révisions des projets individuels.

Je pourrais cloner le référentiel pour chaque projet et supprimer tous les autres projets à chaque fois, mais y aurait-il un meilleur moyen d'éviter d'avoir l'historique cloné dans chaque nouveau référentiel de projet?

Était-ce utile?

La solution

Vous pouvez utiliser la branche de filtre git . réécrire l'histoire d'un projet. De la documentation:

  

Pour réécrire le référentiel afin qu'il ressemble à   si foodir / avait été sa racine de projet,   et rejeter tout autre historique:

git filter-branch --subdirectory-filter foodir -- --all

Faites plusieurs copies de votre rapport, faites-le pour chaque sous-répertoire que vous voulez diviser, et vous devriez vous retrouver avec ce que vous recherchez.

Autres conseils

Pour exporter un dossier en tant que nouveau référentiel, vous devez disposer des éléments suivants:

  1. Pour cloner le référentiel dans lequel se trouve le dossier que vous souhaitez exporter.
  2. Pour créer un référentiel vide sur votre fournisseur d'hébergement en tant que GitHub, pour stocker le dossier exporté.
  3. Ouvrez le dossier du référentiel cloné et exécutez la commande suivante:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
    

L’intérêt de git est que l’historique est incorporé dans chaque commit en hachant le commit parent. Vous pouvez "rejouer" les commits (c'est essentiellement ainsi que fonctionne svn-importer) dans un nouveau référentiel et ne conservant que chaque sous-projet. Ceci, cependant, détruirait le sens des hachages de commit. Si cela ne vous pose aucun problème, qu’il en soit ainsi.

Dans le passé, je viens de le cloner et de passer à autre chose. Cela rend les choses plus grandes mais l’espace disque est peu coûteux; mon temps est cher.

Je ne connais pas non plus d’outil pour épisser un répertoire. Je suppose que vous pouvez vous connecter sur le répertoire pour trouver tous les commits dessus, puis les rejouer avec quelque chose comme git-fast-export?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top