Je pense que le point est de savoir quels sont les critères pour décider qu'un fichier est suivi ou non. Il devrait y avoir une sorte de collection de fichiers suivis à rechercher.
Au moins avec mon ancienne version (1.6.0) de git, vous devez mettre l' --error-unmatchoption avant le nom de fichier pour obtenir une erreur. D'une manière ou d'une autre, l'option n'est appliquée qu'aux noms de fichiers qui la suivent.
Alex Dupuy
En fait, le problème semble être que l'option permutation GNU getopt n'est pas activée, et lorsqu'elle apparaît après un nom de fichier (ou après --), elle --error-unmatchest traitée comme un autre nom de fichier (pas dans l'index) et n'a aucun effet.
[Une manière naïve] Faites une petite modification dans le fichier (ajouter / supprimer un espace). Et voyez si le fichier est répertorié lorsque «git status» est tapé. Une manière idiote, mais peut gagner du temps.
BraveNinja
Mais je l'ai ajouté et validé avec la commande "git add -A && git commit -m" blah ". Voir même des fichiers entiers avec la commande" git ls-tree --name-only -r sha1 ".
Dr.jacky
66
Si vous ne voulez pas encombrer votre console de messages d'erreur, vous pouvez également exécuter
git ls-files file_name
puis vérifiez le résultat. Si git ne renvoie rien, le fichier n'est pas suivi. S'il est suivi, git retournera le chemin du fichier.
Cela est pratique si vous souhaitez le combiner dans un script, par exemple PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
Je pense que file_namedoit être une correspondance exacte (chemin complet + nom de fichier), mais peut être utilisé avec des caractères génériques:git ls-files *foo.rb
dechimp
16
ÉDITER
Si vous devez utiliser git depuis bash, il est --porcelainpossible de git status:
--porcelaine
Donnez la sortie dans un format stable et facile à analyser pour les scripts. Actuellement, c'est identique à --short, mais il est garanti qu'il ne changera pas à l'avenir, ce qui le rend sûr pour les scripts.
La sortie ressemble à ceci:
> git status --porcelain
M starthudson.sh
?? bla
Ou si vous ne créez qu'un seul fichier à la fois:
> git status --porcelain bla
?? bla
ORIGINAL
faire:
git status
Vous verrez un rapport indiquant quels fichiers ont été mis à jour et lesquels ne sont pas suivis.
Vous pouvez voir bla.shest suivi et modifié et newblan'est pas suivi:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
Désolé, j'aurais dû être plus clair. L'état est correct, mais je préfère vérifier un code de sortie plutôt que d'analyser la sortie.
Dale Forester,
git status --porcelainest votre ami si vous avez besoin d'analyser la sortie par script, jetez un oeil au document lié il montre quelques autres options utiles
stefanB
Hihi, ne fonctionne pas avec le très vieux Git: git status --porcelain error: unknown option porcelain 'La version est 1.6.0 :-)
Laryx Decidua
@ user465139 c'est correct ... vous avez besoin de git 1.7.0 ou plus récent (l'option porcelaine n'a pas été ajoutée jusque-là).
mason81
13
Essayez de lancer git statusle fichier. Il affichera une erreur s'il n'est pas suivi par git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Sensationnel. Je dois l'avoir exécuté sur un répertoire et il a agi comme s'il vérifiait le dépôt entier. Merci.
Dale Forester,
4
En fait, si j'exécute, git status trackedfilej'obtiens le code de sortie 1 (attendu que 0 soit utile) mais cela ne me donne pas "erreur:" dans la sortie. Je préfère analyser un code de sortie plutôt qu'une sortie de chaîne.
Dale Forester,
43
Je constate qu'aucune erreur n'est générée si j'exécute git status sur un fichier qui existe dans ma copie de travail git mais qui est exclu par .gitignore. (C'est-à-dire que cette réponse ne fera pas l'affaire.)
JellicleCat
Veuillez noter que cela ne fonctionne pas bien si le fichier est dans la liste des ignorés, c'est-à-dire dans le fichier.gitignore
Robin Hsu
8
Ça ne marche pas. Il imprime toujours la même chose, même si le fichier n'existe pas. $ git status notthere:On branch master nothing to commit, working directory clean
Chloe
6
Je ne connais aucune commande git qui donne un "mauvais" code de sortie, mais il semble qu'un moyen facile de le faire serait d'utiliser une commande git qui ne donne aucune sortie pour un fichier qui n'est pas suivi, comme fichiers git-log ou git-ls. De cette façon, vous n'avez pas vraiment besoin d'analyser, vous pouvez l'exécuter via un autre utilitaire simple comme grep pour voir s'il y a une sortie.
Par exemple,
git-ls-files fichier_test.c | grep.
quittera avec un code zéro si le fichier est suivi, mais un code de sortie de un si le fichier n'est pas suivi.
en utilisant git logdonnera des informations à ce sujet. Si le fichier est suivi dans git, la commande affiche des résultats (journaux). Sinon, il est vide.
où relative/pathpeut être facilement déterminé en appuyant sur tabdans un shell de complétion automatique. Ajoutez-en un supplémentaire | wc -l pour obtenir une sortie 1 ou 0.
Réponses:
essayer:
quittera avec 1 si le fichier n'est pas suivi
la source
--error-unmatch
option avant le nom de fichier pour obtenir une erreur. D'une manière ou d'une autre, l'option n'est appliquée qu'aux noms de fichiers qui la suivent.--
), elle--error-unmatch
est traitée comme un autre nom de fichier (pas dans l'index) et n'a aucun effet.git ls-files | grep <PATTERN>
? exemple:git ls-files | grep Main.h
Si vous ne voulez pas encombrer votre console de messages d'erreur, vous pouvez également exécuter
puis vérifiez le résultat. Si git ne renvoie rien, le fichier n'est pas suivi. S'il est suivi, git retournera le chemin du fichier.
Cela est pratique si vous souhaitez le combiner dans un script, par exemple PowerShell:
la source
file_name
doit être une correspondance exacte (chemin complet + nom de fichier), mais peut être utilisé avec des caractères génériques:git ls-files *foo.rb
ÉDITER
Si vous devez utiliser git depuis bash, il est
--porcelain
possible degit status
:La sortie ressemble à ceci:
Ou si vous ne créez qu'un seul fichier à la fois:
ORIGINAL
faire:
Vous verrez un rapport indiquant quels fichiers ont été mis à jour et lesquels ne sont pas suivis.
Vous pouvez voir
bla.sh
est suivi et modifié etnewbla
n'est pas suivi:la source
git status --porcelain
est votre ami si vous avez besoin d'analyser la sortie par script, jetez un oeil au document lié il montre quelques autres options utilesgit status --porcelain error: unknown option
porcelain 'La version est 1.6.0 :-)Essayez de lancer
git status
le fichier. Il affichera une erreur s'il n'est pas suivi par gitla source
git status trackedfile
j'obtiens le code de sortie 1 (attendu que 0 soit utile) mais cela ne me donne pas "erreur:" dans la sortie. Je préfère analyser un code de sortie plutôt qu'une sortie de chaîne..gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
Je ne connais aucune commande git qui donne un "mauvais" code de sortie, mais il semble qu'un moyen facile de le faire serait d'utiliser une commande git qui ne donne aucune sortie pour un fichier qui n'est pas suivi, comme fichiers git-log ou git-ls. De cette façon, vous n'avez pas vraiment besoin d'analyser, vous pouvez l'exécuter via un autre utilitaire simple comme grep pour voir s'il y a une sortie.
Par exemple,
quittera avec un code zéro si le fichier est suivi, mais un code de sortie de un si le fichier n'est pas suivi.
la source
Je suggère une coutume alias sur vous
.gitconfig
.Il faut bien faire:
1) Avec la commande git:
2) Modification
~/.gitconfig
et ajout de cette ligne sur la section alias:Une fois la commande lancée (1) ou le fichier enregistré (2), sur votre espace de travail vous pouvez le tester:
la source
en utilisant
git log
donnera des informations à ce sujet. Si le fichier est suivi dans git, la commande affiche des résultats (journaux). Sinon, il est vide.Par exemple, si le fichier est suivi par git,
Si le fichier n'est pas git tracké,
la source
Juste mes deux cents:
git ls-files | grep -x relative/path
où
relative/path
peut être facilement déterminé en appuyant surtab
dans un shell de complétion automatique. Ajoutez-en un supplémentaire| wc -l
pour obtenir une sortie 1 ou 0.la source
grep
option--fixed-strings
.