Puis-je déplacer le directory .git pour un repo dans son directory parent?

J'ai deux sousdirectorys chacun avec un repo, donc:

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

Et je voudrais les combiner en un seul repository, donc, je suppose que la structure du directory serait comme ceci:

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

Est-ce que c'est posible?

Aussi actuellement plusieurs personnes ont les repos sur leurs machines. Combien plus compliqué cela fait-il la vie?

Ta.

Solutions Collecting From Web of "Puis-je déplacer le directory .git pour un repo dans son directory parent?"

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

  1. Déplacez le contenu de ABC dans un sous ABC/ directory ABC/ , et corrigez l'historique pour qu'il semble avoir toujours été présent:

     $ 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 directory est maintenant ABC/ABC/your_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 directory est maintenant DEF/DEF/your_code

  3. Enfin, créez le référentiel PPP et tirez-y ABC et DEF :

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

    Maintenant, vous avez PPP/ABC/your_code et PPP/DEF/your_code , avec tout l'historique.

Vous devriez probablement requestr à vos collègues d'exécuter les commands précédentes sur leur système, afin que tout le monde puisse être synchronisé.

Note: les commands funky de filter-branch viennent de la page man . đŸ™‚

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

Si vous voulez juste les grouper, alors git-submodule fera ce que vous voulez: vous finirez avec trois repositorys où le premier niveau sera relié aux deux actuels.

Comme un guide:

  • Vous devriez les merge dans un référentiel unique si vous voulez augmenter le couplage entre eux de sorte qu'il ne soit plus logique d'utiliser une version de repo A avec une version différente de repo B.

  • Vous devriez utiliser des sous-modules s'ils restnt quelque peu séparés (il serait parfois judicieux de travailler sur un seul), mais vous voulez être en mesure de travailler set (par exemple, download les deux à la fois, vérifier le bon état des deux , etc).

L'utilisation de sous-modules permet d'éviter les problèmes avec les copys existantes des référentiels, car l'historique ne change pas. Leur fusion créera un nouvel historique et il sera plus difficile pour les personnes travaillant dans les twigs existantes de merge leurs modifications.

Pour moi, il semble difficile de faire comme vous le voulez parce que l'histoire des deux projets ne mergea pas.

Mon meilleur conseil serait de créer un nouveau repository pour contenir ABC et DEF, en conservant les anciens repo de ces deux pour avoir une sauvegarde de l'historique et commencer une nouvelle histoire avec ce nouveau projet.