Comment git reset --hard un sous-répertoire?

Mise à JOUR: Ce travail de manière plus intuitive que de Git 1.8.3, voir ma propre réponse.

Imaginer la suite de cas d'utilisation: je veux me débarrasser de tous les changements dans un sous-répertoire de mon Git arbre de travail, en laissant toutes les autres sous-répertoires intacte.

Quelle est la bonne commande Git pour cette opération?

Le script ci-dessous illustre le problème. Insérez le bon de commande ci-dessous la How to make files commentaire -- la commande en cours sera de restaurer le fichier a/c/ac qui est censé être exclus par les rares de la caisse. Notez que je ne pas veulent explicitement restaurer a/a et a/b, je ne le "connais" a et que vous voulez restaurer tout en dessous. MODIFIER: Et j'ai aussi ne pas "savoir" b, ou d'autres répertoires se trouvent sur le même niveau que a.

#!/bin/sh

rm -rf repo; git init repo; cd repo
for f in a b; do
  for g in a b c; do
    mkdir -p $f/$g
    touch $f/$g/$f$g
    git add $f/$g
    git commit -m "added $f/$g"
  done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f

rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status

# How to make files a/* reappear without changing b and without recreating a/c?
git checkout -- a

echo "After checkout:"
git status
find * -type f
  • que penser d'un git stash && git stash drop ?
  • qu'en est git checkout -- /path/to/subdir/?
  • git stash ne pas accepter un argument de chemin...
  • Nope. Sera également ajouter des fichiers exclus par le peu de caisse.
  • Re: bounty. Ce n'est pas le lieu pour obtenir des réponses à partir crédible / sources officielles ou pour des réponses à partir de git développeurs. Pour journal d'un bug sur éparses caisse, vous devez utiliser la commande git liste de diffusion [email protected] .
  • Il ne ressemble pas à la éparses fonction commande est quelque chose de prévu pour être vraiment utilisé... il suffit de ne pas l'utiliser et de définir un repo git pour chaque projet.
  • Alors pourquoi il y a un bouton radio à la lecture de "la Recherche d'une réponse dessin de crédible et/ou de sources officielles." dans le monde des chasseurs de dialogue? Je n'ai pas le type que moi-même! Aussi essayer de googler "git reset sous-répertoire" (sans les guillemets) et voir ce qui est sur les 3 premières positions. Pour assurer un message à un kernel.org liste de diffusion seront plus difficiles à trouver. -- Aussi, pour moi, il n'est pas encore clair si ce comportement est du à un bug ou une fonctionnalité.
  • Cela ne me permet pas à l'aide de bisect et amis sur plusieurs projets en même temps. -- Je pense que sparse checkout est un doux fonctionnalité, bugs ou autres problèmes peuvent être résolus.
  • Je viens de dire que si vous voulez une réponse de la part du Git développeurs, alors vous devriez demander à l'endroit approprié; il semble un peu inutile d'espérer que l'on viendra ici ou que quelqu'un va relayer le message sur quand la liste de diffusion existe un moyen pour vous de communiquer avec Git développeurs.
  • La droite. Je vais poster un lien vers la liste de diffusion (merci pour l'adresse btw), nous allons voir si il y aura plus de commentaires.

InformationsquelleAutor krlmlr | 2013-03-14