Lorsque je fais git status dans un sous-dossier de mon dépôt, cela inclut le statut des dossiers parents également.
Existe-t-il un moyen de limiter git-status à un dossier particulier ?
Lorsque je fais git status dans un sous-dossier de mon dépôt, cela inclut le statut des dossiers parents également.
Existe-t-il un moyen de limiter git-status à un dossier particulier ?
git status .
affichera l'état du répertoire actuel et des sous-répertoires.
Par exemple, des fichiers donnés (numéros) dans cet arbre :
a/1
a/2
b/3
b/4
b/c/5
b/c/6
du sous-répertoire "b", git status
montre les nouveaux fichiers dans l'ensemble de l'arbre :
% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: ../a/1
# new file: ../a/2
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
mais git status .
ne montre que les fichiers en "b" et en dessous.
% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
git status .
affiche tous les fichiers situés sous "b" de manière récursive. Pour afficher seulement les fichiers dans le "b" mais pas en dessous, vous devez passer une liste de seulement les fichiers (et pas les répertoires) à git status
. C'est un peu compliqué, en fonction de votre shell.
Dans zsh, vous pouvez sélectionner des fichiers ordinaires avec le "qualificateur global". (.)
. Par exemple :
% git status *(.)
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Bash n'a pas de qualificatifs globaux mais vous pouvez utiliser GNU find
pour sélectionner des fichiers ordinaires et les transmettre ensuite à git status
comme ça :
bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Cela utilise -maxdepth
qui est un GNU find extension. POSIX find n'a pas -maxdepth
mais vous pouvez le faire :
bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Désolé d'avoir mis tant de temps pour revenir à cette réponse - simple et correcte ! Je me demande si <pathspec> a été ajouté au statut git suite à ma question ?
Et si vous n'êtes intéressé que par le dossier actuel où .
fait référence mais pas à ses sous-dossiers. Y a-t-il un moyen de contourner ce problème ? Merci !
@benjaminz dépend de votre utilisation -- pour ce genre de choses, j'utilise le globbing shell pour sélectionner les fichiers mais pas les sous-répertoires, par exemple (pour zsh). git status *(.)
. Bash ne dispose pas d'un raccourci permettant de regrouper uniquement les fichiers, mais vous pouvez utiliser une méthode étendue de type find
par exemple find . -type f -maxdepth 1 -exec git status {} +
. Cela semble être le genre de choses que vous voudriez mettre dans un alias ou un script plutôt que de les taper tout le temps.
Imparfait, mais cela fonctionne aussi bien à partir du répertoire qui vous intéresse :
git status | grep -v ' \.\./'
Cela masquera tous les répertoires qui nécessiteraient une référence ascendante dans leur chemin relatif.
Si vous voulez avoir de la couleur qui sort de l'autre côté, définissez color.status
a always
:
git config color.status always
Certaines commandes de plomberie prennent un répertoire comme paramètre :
git ls-files -t -o -m aDirectory
vous donnerait tous les fichiers modifiés mais non mis à jour (non ajoutés à l'étape), ou non suivis. Et cela pour un répertoire.
Comme écrit dans ce fil git ls-files ne prend pas en charge l'option ' --added
option.
La raison la plus fondamentale est que
ls-files
la plomberie concerne le indice .
Ajouté est no sur la comparaison entre l'index et l'arbre de travail.
Il se trouve entre le commit HEAD et l'index, et il n'appartient pas à la plomberie ls-files.
Donc, en utilisant les commandes mentionné ici :
git diff-index --name-only -B -R -M -C HEAD src
vous donnerait à la fois des fichiers ajoutés et non ajoutés.
git diff-files --name-only -B -R -M -C src
vous donnerait uniquement les fichiers non ajoutés. (tout en détectant les réécritures, renommages, copies, ...)
Comme d'habitude avec les commandes de plomberie, un peu de script est nécessaire ;)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Non, "git status ." donne les dossiers frères et soeurs comme par exemple "../sibling".
0 votes
Pourriez-vous nous donner un peu plus de détails sur les raisons pour lesquelles vous souhaitez filtrer les modifications apportées ailleurs dans votre arbre ? Dans quelles situations souhaiteriez-vous utiliser cette fonctionnalité ?
1 votes
S'il y a plus d'un écran complet de sortie de la commande normale "git status"
3 votes
Duplication possible de git status - existe-t-il un moyen d'afficher les changements uniquement dans un répertoire spécifique ?