W repozytorium GitHub możesz zobaczyć „statystyki języka”, która wyświetla procent projektu napisanego w języku. Nie pokazuje jednak, ile wierszy kodu składa się z projektu. Często chcę szybko uzyskać wrażenie skali i złożoności projektu, a liczba wierszy kodu może dać dobre pierwsze wrażenie. 500 linii kodu oznacza stosunkowo prosty projekt, 100 000 linii kodu oznacza bardzo duży / skomplikowany projekt.
Czy możliwe jest uzyskanie wierszy kodu napisanych w różnych językach z repozytorium GitHub, najlepiej bez klonowania?
Pytanie „ Policz liczbę linii w repozytorium git ” pyta, jak policzyć linie kodu w lokalnym repozytorium Git, ale:
- Musisz sklonować projekt, który może być ogromny. Klonowanie projektu takiego jak na przykład Wine zajmuje wieki.
- Policzyłbyś wiersze w plikach, które niekoniecznie byłyby kodem, takie jak pliki i13n.
- Jeśli policzysz tylko (na przykład) pliki Ruby, potencjalnie stracisz ogromną ilość kodu w innych językach, takich jak JavaScript. Musisz wcześniej wiedzieć, jakich języków używa projekt. Musisz także powtórzyć liczenie dla każdego języka, którego używa projekt.
Podsumowując, jest to potencjalnie zbyt czasochłonne, aby „szybko sprawdzić skalę projektu”.
git
github
line-count
Hubro
źródło
źródło
git clone --depth 1
. Jeśli chodzi o 2 i 3, podejrzewam, że istnieje oprogramowanie, które może przeprowadzić analizę za Ciebie i możesz dużo zgadywać na podstawie rozszerzeń plików, ale mam sporo czasu, aby wymyślić dobre wyszukiwanie termin na znalezienie wspomnianego oprogramowania. Może musisz zadać kolejne pytanie.Odpowiedzi:
Skrypt powłoki,
cloc-git
Za pomocą tego skryptu powłoki można policzyć liczbę wierszy w zdalnym repozytorium Git za pomocą jednego polecenia:
Instalacja
Ten skrypt wymaga zainstalowania CLOC („Count Lines of Code”).
cloc
prawdopodobnie można go zainstalować za pomocą menedżera pakietów - na przykład zabrew install cloc
pomocą Homebrew . Istnieje również obraz dokera opublikowany podmribeiro/cloc
.Możesz zainstalować skrypt, zapisując jego kod do pliku
cloc-git
, uruchamiającchmod +x cloc-git
, a następnie przenosząc plik do folderu w swoim,$PATH
np/usr/local/bin
.Stosowanie
Skrypt przyjmuje jeden argument, którym jest dowolny
git clone
akceptowany adres URL . Przykładami sąhttps://github.com/evalEmpire/perl5i.git
(HTTPS) lub[email protected]:evalEmpire/perl5i.git
(SSH). Możesz pobrać ten adres URL z dowolnej strony projektu GitHub, klikając „Klonuj lub pobierz”.Przykładowe dane wyjściowe:
Alternatywy
Uruchom polecenia ręcznie
Jeśli nie chcesz zawracać sobie głowy zapisywaniem i instalowaniem skryptu powłoki, możesz uruchomić polecenia ręcznie. Przykład:
Językoznawca
Jeśli chcesz, aby wyniki dokładnie odpowiadały procentom językowym GitHub, możesz spróbować zainstalować Linguist zamiast CLOC . Zgodnie z README musisz
gem install linguist
uruchomić, a następnie uruchomićlinguist
. Nie mogłem zmusić go do pracy ( problem nr 2223 ).źródło
--depth 1
tylko do pobrania ostatniego zatwierdzenia. W przypadku większości repozytoriów pozwala to uniknąć pierwotnego pytania o zbyt długie klonowanie.cloc
aby uzyskać wiersze kodu w repozytorium github bez klonowania repozytorium na naszym komputerze (przez Internet). powyższe podanecloc-git
również pierwsze klony do projektu przed rozpoczęciem liczenia liczby liniicloc
dla Ciebie. Abycloc
policzyć wiersze w kodzie, komputer musi pobrać ten kod, choć tylko tymczasowo. Pamiętaj, że nawet przeglądarki internetowe technicznie pobierają strony internetowe, gdy je odwiedzasz; po prostu zapisują je w pamięci zamiast na dysku.co da ci całkowitą liczbę →
Lub użyj tego narzędzia → http://line-count.herokuapp.com/
źródło
git ls-files | grep '\.py' | xargs wc -l
.xargs
dowc -l
wszystkich plików, a następnie za pomocą ręcznieawk
podsumować kolumnę, OMG to jest o wiele łatwiej.Istnieje rozszerzenie przeglądarki Google Chrome - GLOC, która działa w publicznych i prywatnych repozytoriach.
Liczy liczbę wierszy kodu projektu z:
źródło
Jeśli przejdziesz na stronę wykresów / autorów, zobaczysz listę wszystkich autorów repozytorium oraz liczbę dodanych i usuniętych linii.
O ile mi czegoś nie brakuje, odjęcie łącznej liczby wierszy usuniętych od łącznej liczby wierszy dodanych wśród wszystkich autorów powinno dać całkowitą liczbę wierszy kodu w repozytorium. (EDYCJA: okazuje się, że mimo wszystko czegoś mi brakowało. Spójrz na komentarz orbitbota, aby uzyskać szczegółowe informacje.)
AKTUALIZACJA:
Te dane są również dostępne w interfejsie API GitHub . Napisałem więc szybki skrypt, aby pobrać dane i wykonać obliczenia:
Wystarczy wkleić go we fragmencie kodu Chrome DevTools, zmienić repozytorium i kliknąć Uruchom.
Oświadczenie (dzięki lovasoa ):
Weź wyniki tej metody z odrobiną soli, ponieważ dla niektórych repozytoriów (sorich87 / bootstrap-tour) daje to wartości ujemne, co może wskazywać, że coś jest nie tak z danymi zwracanymi z API GitHub.
AKTUALIZACJA:
Wygląda na to, że ta metoda obliczania całkowitej liczby linii nie jest całkowicie niezawodna. Spójrz na komentarz orbitbot w celu uzyskania szczegółowych informacji.
źródło
fetch("https://api.github.com/repos/jquery/jquery/stats/code_frequency").then(x=>x.json()).then(x=>alert(x.reduce((total,changes)=>total+changes[1]+changes[2],0)))
Możesz sklonować tylko najnowsze zatwierdzenie za pomocą,
git clone --depth 1 <url>
a następnie przeprowadzić własną analizę za pomocą Linguist , tego samego oprogramowania, którego używa Github. To jedyny sposób, w jaki wiem, że dostaniesz linie kodu.Inną opcją jest użycie interfejsu API do wyświetlenia listy języków używanych w projekcie . Nie podaje ich w wierszach, ale w bajtach. Na przykład...
Choć weźmy to z odrobiną soli, ten projekt obejmuje YAML i JSON, co potwierdza strona internetowa, ale API nie.
Na koniec możesz użyć wyszukiwania kodu, aby zapytać, które pliki pasują do danego języka. Ten przykład pyta, które pliki w Perl5i to Perl.
https://api.github.com/search/code?q=language:perl+repo:evalEmpire/perl5i
. Nie podadzą ci wierszy i musisz poprosić o rozmiar pliku osobno, używając zwrotuurl
dla każdego pliku.źródło
Obecnie nie jest możliwe na Github.com lub ich interfejsach API
Rozmawiałem z obsługą klienta i potwierdziłem, że nie można tego zrobić na github.com. Przekazali tę sugestię zespołowi Github, więc mam nadzieję, że będzie to możliwe w przyszłości. Jeśli tak, na pewno zedytuję tę odpowiedź.
Tymczasem odpowiedź Rory O'Kane jest doskonałą alternatywą opartą na
cloc
płytkim klonie repo.źródło
Możesz użyć GitHub API, aby uzyskać sloc podobny do poniższej funkcji
Osobiście zrobiłem rozszerzenie chrome, które pokazuje liczbę SLOC zarówno na liście projektów github, jak i na stronie szczegółów projektu. Możesz także ustawić swój osobisty token dostępu, aby uzyskać dostęp do prywatnych repozytoriów i ominąć limit prędkości API.
Możesz pobrać stąd https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnjmihibcmdnianbcbccpnn
Kod źródłowy jest dostępny tutaj https://github.com/martianyi/github-sloc
źródło
Dodatek Firefox Github SLOC
Napisałem mały dodatek do Firefoksa, który drukuje liczbę wierszy kodu na stronach projektu github: Github SLOC
źródło
Jeśli pytanie brzmi „czy możesz szybko uzyskać LICZBĘ LINII repozytorium github”, odpowiedź brzmi „nie”, jak podają inne odpowiedzi.
Jeśli jednak pytanie brzmi: „czy możesz szybko sprawdzić SKALĘ projektu”, zwykle oceniam projekt na podstawie jego wielkości. Oczywiście rozmiar będzie zawierał delty ze wszystkich aktywnych zatwierdzeń, ale jest to dobra miara, ponieważ rząd wielkości jest dość bliski.
Na przykład
Jak duży jest projekt „dokera”?
W przeglądarce wpisz api.github.com/repos/ORG_NAME/PROJECT_NAME, tj. Api.github.com/repos/docker/docker
W haszu odpowiedzi można znaleźć atrybut rozmiaru:
To powinno dać ci wyobrażenie o względnej skali projektu. Wydaje się, że liczba ta jest w KB, ale kiedy sprawdziłem ją na moim komputerze, jest ona faktycznie mniejsza, mimo że rząd wielkości jest spójny. (161432 KB = 161 MB, dok-du -s-h = 65 MB)
źródło
Instrukcje i objaśnienia
SLOC obsługuje formatowanie danych wyjściowych postaci
cli-table
, jakjson
icsv
. Wykluczeń regularnych można używać do wykluczania plików i folderów ( dalsze informacje na temat npm ).Powershell:
rm -r -force ".\react\"
lub na Mac / Unix:rm -rf ".\react\"
Zrzuty ekranu z wykonanych kroków (cli-table):
wyjście sloc (bez argumentów):
źródło
Potokuj dane wyjściowe z liczby linii w każdym pliku,
sort
aby uporządkować pliki według liczby linii.git ls-files | xargs wc -l |sort -n
źródło
Z komentarza @ Tgr istnieje narzędzie online: https://codetabs.com/count-loc/count-loc-online.html
źródło
Otwórz terminal i uruchom następujące polecenie:
źródło