1

J'aimerai migrer le contenu d'un dossier spécifique (avec l'historique) d'une branche d'un repo source vers un repo destination.
Comme Git est un peu pas du tout userfriendly pour les commandes, savait vous si il existe un moyen de le faire via des commandes natif git ou il faut le faire à la "main" ?

Par exemple :
Dans le schéma suivant, j'aimerai déplacer tout le contenu du dossier "truc/machin/chose" du "repo source" dans un nouveau dépôt "repo destination" tout en migrant aussi l'historique des modifications de ce contenu.
Est-ce que c'est possible de faire ça ?

La méthode bourrin par exemple serait de faire un script qui boucle sur toutes les révision et pour chaque révision du dossier copie le contenu vers l'autre repo et recommit à chaque fois. Est-ce qu'il y a plus simple ?


Repo source :

Main ___
        \\__br_A
			|_ truc/machin/chose/
			        |__ dossier1
				|__ dossier2
				|__ ....
				|__ fichier1
				|__ ....

Repo destination :

Main ___
		|__ dossier1
		|__ dossier2
		|__ ....
		|__ fichier1
		|__ ....
avatar

2

Mettons que ton dépôt original s'appelle "origin", il faut que tu commences par déclarer le nouveau dépôt dans ta copie locale :
git remote add nouveau ssh://toi@tonserveur/tonprojetEnsuite pour chaque branche (et/ou pour chaque tag) que tu connais en local, tu peux faire un simple "push" pour l'envoyer en intégralité sur le nouveau dépôt (avec tout l'historique) :
git push nouveau branche1 branche2 branche3 ...Une fois que c'est terminé, tu auras probablement envie de supprimer le dépôt original et de renommer le nouveau pour que ce soit lui qui s'appelle "origin" à partir de maintenant :
git remote rm origin && git remote rename nouveau origin
[edit] Pardon je réalise en relisant ton message que tu ne veux extraire qu'un dossier, pas tout le repository. Du coup tu auras besoin de la commande "filter-repo" pour extraire le dossier qui t'intéresse. Une fois sur la branche dont tu veux extraire ce dossier et son historique :
git filter-repo --subdirectory-filter le/dossier/a/extraire
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Merci !


git filter-repo à parfaitement fait l'affaire.


J'ai juste un peu galéré pour l'installer vu que ce n'est visiblement pas une commande native mais une extension et sur un environnement offline c'est un peu chiant smile
avatar

4

Oh pardon je n'avais pas réalisé ! Tu aurais probablement pu utiliser git filter-branch à la place qui est native, mais l'essentiel c'est que tu t'en sois sorti smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

En effet, `git filter-branch` avait déjà le subdirectory filter. Mais `git filter-repo`, quoique non natif, est censé être plus facile / plus sûr à utiliser pour faire certaines choses plus complexes, non ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

merci pour le "filter-repo" c'est une question que je me posais il y a quelque temps, ca pourra etre pratique (un depot mal fait et besoin de le nettoyer)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.