Existe-t-il un moyen de savoir si un fichier est suivi en exécutant une git
commande et en vérifiant son code de sortie?
En d'autres termes: git suit-il un fichier?
Existe-t-il un moyen de savoir si un fichier est suivi en exécutant une git
commande et en vérifiant son code de sortie?
En d'autres termes: git suit-il un fichier?
Réponses:
essayer:
git ls-files --error-unmatch <file name>
quittera avec 1 si le fichier n'est pas suivi
--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
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
}
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 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.sh
est suivi et modifié et newbla
n'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")
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 utiles
git 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 git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
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,
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.
Je suggère une coutume alias sur vous .gitconfig
.
Il faut bien faire:
1) Avec la commande git:
git config --global alias.check-file <command>
2) Modification ~/.gitconfig
et ajout de cette ligne sur la section alias:
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
Une fois la commande lancée (1) ou le fichier enregistré (2), sur votre espace de travail vous pouvez le tester:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
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,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Si le fichier n'est pas git tracké,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Juste mes deux cents:
git ls-files | grep -x relative/path
où relative/path
peut être facilement déterminé en appuyant sur tab
dans un shell de complétion automatique. Ajoutez-en un supplémentaire | wc -l
pour obtenir une sortie 1 ou 0.
grep
option --fixed-strings
.