Comment compter le nombre total de lignes présentes dans tous les fichiers d'un référentiel git?
git ls-files
me donne une liste des fichiers suivis par git.
Je recherche une commande pour cat
tous ces fichiers. Quelque chose comme
git ls-files | [cat all these files] | wc -l
bash
git
shell
line-count
Dogbert
la source
la source
grep cpp |
y avant lexargs
, alors.git ls-files -z | xargs -0 wc -l
si vous avez des fichiers avec des espaces dans le nom.git ls-files | grep -P ".*(hpp|cpp)" | xargs wc -l
où la partie grep est toute expression rationnelle de perl que vous voulez!git ls-files | grep "\.java$" | xargs wc -l
Cela montre les différences entre l'arborescence vide et votre arborescence de travail actuelle. Ce qui arrive à compter toutes les lignes de votre arbre de travail actuel.
Pour obtenir les nombres dans votre arborescence de travail actuelle, procédez comme suit:
Cela vous donnera une chaîne comme
1770 files changed, 166776 insertions(+)
.la source
git hash-object -t tree /dev/null
.git diff --stat `git hash-object -t tree /dev/null`
git diff --stat `git hash-object -t tree /dev/null` | tail -1
git diff --shortstat `git hash-object -t tree /dev/null`
pour obtenir la dernière ligne, la queue n'est pas nécessaire.Si vous voulez ce compte parce que vous voulez avoir une idée de la portée du projet, vous pouvez préférer la sortie de CLOC («Count Lines of Code»), qui vous donne une ventilation des lignes de code significatives et insignifiantes par langue.
(Cette ligne est équivalente à
git ls-files | xargs cloc
. Elle utilisesh
la fonction de$()
substitution de commandes de .)Exemple de sortie:
Vous devrez d'abord installer CLOC. Vous pouvez probablement installer
cloc
avec votre gestionnaire de paquets - par exemple,brew install cloc
avec Homebrew .cloc $(git ls-files)
est souvent une améliorationcloc .
. Par exemple, l'exemple de sortie ci-dessus avecgit ls-files
471 lignes de code de rapport. Pour le même projet,cloc .
signale un énorme 456 279 lignes (et prend six minutes pour s'exécuter), car il recherche les dépendances dans lenode_modules
dossier ignoré par Git .la source
cloc --vcs git
ces jours-ci, ce qui évite certains cas marginaux avec des fichiers mal nommés (ou trop nombreux).J'ai rencontré des problèmes de
git ls-files | xargs wc -l
traitement par lots lors du traitement d'un grand nombre de fichiers, où le nombre de lignes est divisé en plusieurstotal
lignes.Prendre un conseil à la question Pourquoi l'utilitaire wc génère-t-il plusieurs lignes avec "total"? , J'ai trouvé la commande suivante pour contourner le problème:
wc -l $(git ls-files)
Ou si vous souhaitez examiner uniquement certains fichiers, par exemple le code:
wc -l $(git ls-files | grep '.*\.cs')
la source
wc -l $(git ls-files | find *.m *.h)
wc -l --files0-from=<(git ls-files -z)
. La<(COMMAND)
syntaxe renvoie le nom d'un fichier dont le contenu est le résultat deCOMMAND
.La meilleure solution, pour moi en tout cas, est enterrée dans les commentaires de la réponse de @ ephemient. Je le tire juste ici pour qu'il ne passe pas inaperçu. Le mérite en revient à @FRoZeN (et @ephemient).
renvoie le total des fichiers et des lignes dans le répertoire de travail d'un dépôt, sans aucun bruit supplémentaire. En prime, seul le code source est compté - les fichiers binaires sont exclus du décompte.
La commande ci-dessus fonctionne sous Linux et OS X. La version multiplateforme de celle-ci est
Cela fonctionne aussi sur Windows.
Pour mémoire, les options pour exclure les lignes vides,
-w
/--ignore-all-space
,-b
/--ignore-space-change
,--ignore-blank-lines
,--ignore-space-at-eol
n'ont aucun effet lorsqu'il est utilisé avec
--shortstat
. Les lignes vides sont comptées.la source
git mktree </dev/null
outrue|git mktree
ougit mktree <&-
ou:|git mktree
pour les compteurs de touches parmi nous :-) - un arbre vide de rechange flottant autour du dépôt ne va rien faire de mal.Cela fonctionne à partir du cloc 1.68:
cloc --vcs=git
la source
--vcs
n'a pas fonctionné pour moi, peut-être qu'il a été supprimé.cloc .
tandis qu'au git repo a fonctionné, OTOH.Je jouais avec cmder ( http://gooseberrycreative.com/cmder/ ) et je voulais compter les lignes html, css, java et javascript. Alors que certaines des réponses ci-dessus fonctionnaient, le
or
modèle dans grep ne fonctionnait pas - j'ai trouvé ici ( /unix/37313/how-do-i-grep-for-multiple-patterns ) que j'avais pour y échapperVoici donc ce que j'utilise maintenant:
git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l
la source
J'utilise ce qui suit:
Cela recherche tous les fichiers versionnés par git pour l'expression régulière
^
, qui représente le début d'une ligne, donc cette commande donne le nombre total de lignes!la source
J'ai fait ça:
cela fonctionne si vous comptez tous les fichiers texte du référentiel comme fichiers d'intérêt. Si certains sont considérés comme de la documentation, etc., un filtre d'exclusion peut être ajouté.
la source
Cet outil sur github https://github.com/flosse/sloc peut donner la sortie de manière plus descriptive. Il créera des statistiques de votre code source:
la source
Essayer:
sur le répertoire / répertoires en question
la source
Ou:
la source
Selon que vous souhaitez ou non inclure des fichiers binaires, il existe deux solutions.
git grep --cached -al '' | xargs -P 4 cat | wc -l
git grep --cached -Il '' | xargs -P 4 cat | wc -l
-a, traite les fichiers binaires sous forme de texte (Inclure les binaires)
-l '', affiche uniquement les noms de fichiers au lieu des lignes correspondantes (Analyse uniquement les fichiers non vides)
-I, ne correspond pas aux modèles des fichiers binaires (Exclure les binaires)
--cached, rechercher dans l'index plutôt que dans l'arborescence de travail (inclure les fichiers non validés)
la source