Extraire plusieurs files du même nom dans Git

J'ai fusionné de plusieurs autres twigs sur un grand projet avec plusieurs projets d'éclipse, et j'ai fini avec un tas de parameters org.eclipse.jdt.core.prefs qui ont été changés, que je voudrais revenir sur ma twig. Y at-il une command magique que je peux utiliser pour 'réinitialiser' seulement ces files, sur tous les projets d'éclipse dans mon repo git?

J'ai essayé quelque chose dans le genre de

git checkout origin/BRANCH_WITH_CORRECT_FILES -- *org.eclipse.jdt.core.prefs 

Cela renvoie

 error: pathspec '*org.eclipse.jdt.core.prefs' did not match any file(s) known to git. 

Est-ce à cause du *? Comment puis-je le contourner?

Solutions Collecting From Web of "Extraire plusieurs files du même nom dans Git"

Le problème vient du fait que git checkout ne search pas dans les sous-directorys. Pour archiver des files en utilisant des astérisques, vous devez spécifier le dossier dans lequel git peut les find.

Néanless, il est possible de récupérer tous les files avec une string spécifique dans leur nom, indépendamment de leur location dans le référentiel. Pour y parvenir, nous devons combiner un certain nombre de commands.

 git ls-tree -r --name-only <branch> | grep <pattern> 

Cela returnnera une list de tous les files avec le model donné dans leur nom; nous passons la sortie de cette command à git checkout qui mettra à jour l'tree de travail en conséquence.

 git checkout <branch> -- $(git ls-tree -r --name-only <branch> | grep <pattern>) 

Et la magie est faite.


Pour faciliter l'utilisation, je suggère de créer un alias dans votre gitconfig global.

 git config --global alias.super-checkout '!f() { git checkout $1 -- $(git ls-tree -r --name-only $1 | grep "$2"); }; f' 

Après cela, vous pouvez utiliser la command avec git super-checkout <branch> <pattern> , ou dans votre cas:

 git super-checkout origin/BRANCH_WITH_CORRECT_FILES org.eclipse.jdt.core.prefs 

Remarque : Vous pouvez évidemment utiliser un alias différent de super-checkout .


Jetez un oeil à la documentation de git ls-tree pour une meilleure compréhension.