Question

J'ai deux sous-répertoires avec chacun un rapport, donc:

PPP/
 |--ABC/
 |   |--.git/
 |   |--AAA/
 |   |    BBB/
 |   |   CCC/
 |   
 |--DEF/
 |   |--.git/
 |   |--DDD/
 |   |--EEE/

Et voudriez les combiner dans un même dépôt, alors je suppose que la structure de répertoire ressemblerait à ceci:

PPP/
 |--.git/
 |--ABC/
 |   |--AAA/
 |   |--BBB/
 |   |--CCC/
 |   
 |--DEF/
 |   |--DDD/
 |   |--EEE/

Est-ce possible?

De plus, à l’heure actuelle, plusieurs personnes ont des pensions sur leurs machines. Combien plus compliqué cela rend-il la vie?

Ta.

Était-ce utile?

La solution

Vous pouvez faire ce que vous décrivez comme ceci:

  1. Déplacez le contenu de ABC dans un sous-répertoire ABC / et corrigez l'historique afin qu'il ressemble à ce qu'il a toujours été là:

    $ cd /path/to/ABC
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&ABC/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Votre structure de répertoire est maintenant ABC / ABC / votre_code

  2. Idem pour le contenu de DEF :

    $ cd /path/to/DEF
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&DEF/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    Votre structure de répertoire est maintenant DEF / DEF / votre_code

  3. Enfin, créez le référentiel PPP et insérez-y les codes ABC et DEF :

    $ mkdir /path/to/PPP
    $ cd /path/to/PPP
    $ git init
    $ git pull /path/to/ABC
    $ git pull /path/to/DEF
    

    Vous avez maintenant PPP / ABC / your_code et PPP / DEF / your_code , ainsi que tout l'historique.

Vous devriez probablement demander à vos collègues d'exécuter les commandes précédentes sur leur système, afin que tout le monde soit synchronisé.

  

Remarque: les commandes géniales de branche-filtre provient de la page de manuel . : -)

Autres conseils

Avez-vous vraiment besoin de fusionner les deux référentiels existants dans un référentiel ou souhaitez-vous simplement les regrouper?

Si vous voulez juste les grouper, alors git-submodule fera ce que vous voulez: vous allez vous retrouver avec trois référentiels où le premier niveau est lié aux deux actuels.

À titre indicatif:

  • Vous devez les fusionner dans un seul référentiel si vous souhaitez augmenter le couplage entre eux, de sorte qu'il ne soit plus logique d'utiliser une version du référentiel A avec une version différente du référentiel B.

  • Vous devez utiliser des sous-modules s'ils restent un peu séparés (il est parfois logique de travailler sur un seul module), mais vous souhaitez pouvoir les utiliser ensemble (par exemple, téléchargez les deux à la fois, contrôlez connu-bon état à la fois, etc.).

L'utilisation de sous-modules évitera les problèmes liés aux copies existantes des référentiels, car l'historique ne change pas. Leur fusion créera une nouvelle histoire et il sera plus difficile pour les personnes travaillant dans les branches existantes de fusionner leurs changements.

Pour moi, il semble difficile de faire ce que vous voulez, car l'historique des deux projets ne se confondra pas.

Mon meilleur conseil serait de créer un nouveau référentiel pour contenir ABC et DEF, en conservant l'ancien référentiel pour sauvegarder l'historique et commencer un nouvel historique avec ce nouveau projet.

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