Git fusion de sous répertoire et de l’historique dans un autre dépôt

Dans le cadre du projet Fire Soft Board il a été décidé de créer un dépôts git dédié aux traductions. Pour ce faire il a fallut reprendre els fichiers mais aussi les placer dans des sous répertoires spécifiques. Voici la démarche effectuée.

On désire prendre certaines sous répertoires et les transposer dans le nouveau dépôts.
/Fire-Soft-Board-2/tpl/WhiteSummer/img/fr –> pack/fr/tpl/WhiteSummer/img/fr
/Fire-Soft-Board-2/lang/fr –> pack/fr/lang/fr

  1. Clone du dépôt principal
    git clone https://github.com/FSB/Fire-Soft-Board-2.git
    cd Fire-Soft-Board-2
  2. Nous avons deux sous répertoires, nous créons donc deux clone local
    cd ..
    git clone Fire-Soft-Board-2 fsb2-tpl-fr
    git clone Fire-Soft-Board-2 fsb2-lang-fr
  3. Il faut désormais nettoyer les fichiers mais aussi l’historique des commits dont nous n’avons plus besoin. Pour cela, nous allons simplement dire à git de ne garder que les sous répertories dont nous avons besoin.
    cd fsb2-lang-fr
    git checkout dev
    git filter-branch --subdirectory-filter lang/fr HEAD
    git gc --prune --aggressive
    cd ..
    cd fsb2-tpl-fr
    git checkout dev
    git filter-branch --subdirectory-filter tpl/WhiteSummer/img/fr HEAD
    git gc --prune --aggressive
    cd ..

    git gc permet de nettoyer l’historique et de compacter l’index. Cela évite ainsi de potentiel mauvaises surprise dans les logs.
  4. Il faut désormais fusionner ces fichiers ainsi que l’historique qui va avec dans le dépôt des traductions. Commençons par cloner celui-ci.git clone https://github.com/FSB/FSB2-language-packs.git
    cd FSB2-language-packs/
  5. Fusionnons les ressources lié au templatesgit remote add -f tpl ../FSB2-tpl-fr/
    git merge -s ours --no-commit tpl/dev
    git read-tree --prefix=pack/fr/tpl/WhiteSummer/img/fr -u tpl/dev
    git commit -m'Ajout des sources et de l''historique du pack de langue fr des templates'
    On effectue un merge mais sans commiter. En mode de merging, on dit que le merge doit s’effectuer non pas sur la base mais sur un sous répertoire précis.
  6. Ensuite, on fait de même pour la traductions en elle-même.git remote add -f lang ../FSB2-lang-fr/
    git merge -s ours --no-commit lang/dev
    git read-tree --prefix=pack/fr/lang/fr -u lang/dev
    git commit -m'Ajout des sources et de l''historique du pack de langue fr'
  7. On finit par un petit nettoyagegit gc
    git remote rm lang
    git remote rm tpl

Pour aller plus loin :
http://progit.org/book/fr/ch6-4.html

Similar Posts:

    None Found