programing

Git 커밋 카운트를 얻으려면 어떻게 해야 하나요?

starjava 2023. 4. 12. 21:41
반응형

Git 커밋 카운트를 얻으려면 어떻게 해야 하나요?

SVN 리비전 번호와 같은 Git 저장소의 커밋 수를 알고 싶습니다.

목표는 이 번호를 고유한 증분 빌드 번호로 사용하는 것입니다.

현재 UNIX/Cygwin/msysGit에서는 다음과 같이 하고 있습니다.

git log --pretty=format:'' | wc -l

하지만 난 그게 좀 엉터리라고 느껴.

더은 방법 ?? ???.wc【Git】【Windows】【Windows】【Git】파일이나 디렉토리 구조를 읽기만 하면 됩니다.

를 해 주세요).HEAD,master 해시 , 「커밋 해시」:

git rev-list --count <revision>

모든 브랜치에서의 커밋카운트를 취득하려면 , 다음의 순서에 따릅니다.

git rev-list --all --count

빌드 식별자에 사용하지 않는 것이 좋습니다만, 필요한 경우 빌드 대상 브랜치에 카운트를 사용하는 것이 가장 좋습니다.이렇게 하면 동일한 리비전이 항상 동일한 번호를 갖게 됩니다.모든 분기에 대해 카운트를 사용하는 경우 다른 분기의 액티비티에 따라 번호가 변경될 수 있습니다.

git shortlog한 가지 방법입니다.

이 명령어는 커밋별로 그룹화된 커밋 수를 반환합니다.

git shortlog -s

출력:

14 John lennon
9  Janis Joplin

이 부분은 게 것 요.-s입니다.--summary.

git rev-list HEAD --count

git rev-list

git rev-list <commit>: 소정의 커밋(이 경우는 HEAD)에서 부모 링크를 따라가 도달 가능한 커밋을 나열합니다.

--count하고 다른 숨깁니다 표시된 커밋 수를 나타내는 숫자를 출력하고 다른 출력을 모두 숨깁니다.

커밋의 독자적이고 읽기 쉬운 식별자를 찾고 있다면 git descript가 당신에게 딱 맞을지도 모른다.

다음과 같이 사용할 수 있습니다.

git shortlog -s -n

결과:

 827  user one
    15  user two
     2  Gest 

Git의 '리비전 번호'를 생각한 것은 당신이 처음은 아니지만.wc커밋이 지워지거나 뭉개질 수 있고 역사가 다시 되돌아갈 수 있기 때문에 매우 위험합니다.

"리비전 번호"는 병합 시 필요했기 때문에 Subversion에 특히 중요했습니다(SVN1.5와 1.6은 그 면에서 개선되었습니다).

코멘트에 리비전 번호를 포함한 프리 커밋 후크를 사용할 수 있습니다.알고리즘에서는, 브랜치의 모든 이력을 검색해 올바른 번호를 판별할 필요가 없습니다.

바자는 실제로 그러한 알고리즘을 생각해 냈고, 그것은 여러분이 하고 싶은 일의 좋은 출발점이 될 수도 있다.

(Bombe의 답변에서 알 수 있듯이 Git은 실제로 최신 태그와 커밋 수, SHA-1 키 약간을 기반으로 한 자체 알고리즘을 가지고 있습니다).당신에게 도움이 된다면 그의 답변을 봐야 합니다.


Aaron의 아이디어를 설명하기 위해 Git 커밋 해시를 어플리케이션과 함께 배포하는 어플리케이션의 "info" 파일에 추가할 수 있습니다.

이렇게 하면 정보 상자의 모양은 다음과 같습니다.

정보 상자

적용 가능한 번호는 커밋의 일부이지만 '애플리케이션의 '정보' 파일은 패키징 프로세스 중에 생성되며, 실제로 적용 가능한 빌드 번호를 기술 리비전 ID에 링크합니다.

이를 변수로 만드는 가장 쉬운 방법은 다음과 같습니다.

export GIT_REV_COUNT=`git rev-list --all --count`

간단한 방법은 다음과 같습니다.

 git log --oneline | wc -l

oneline그것을 보증합니다.

Git shortlog는 커밋 세부사항을 얻는 한 가지 방법입니다.

git shortlog -s -n

그러면 커밋 수와 작성자 이름이 표시됩니다.-s 옵션은 작성자가 작성한 각 커밋의 모든 커밋메시지를 삭제합니다.커밋 메시지도 표시하는 경우는, 같은 옵션을 삭제합니다.-n 옵션은 전체 목록을 정렬하는 데 사용됩니다.이게 도움이 됐으면 좋겠다.

마스터와 같이 하나의 브랜치만 사용하는 경우에는 다음과 같이 하면 좋을 것 같습니다.

git rev-list --full-history --all | wc -l

이렇게 하면 숫자만 출력됩니다.이런 식으로 별칭을 붙일 수 있습니다.

git revno

하려면 , 편집..git/config[ ] [ 일 、 [ 。

[alias]
    revno = "!git rev-list --full-history --all | wc -l"

이것은 Windows 에서는 동작하지 않습니다.그 OS의 "wc"에 해당하는지는 모르겠지만, Python 스크립트를 작성하여 계산하면 멀티플랫폼 솔루션이 됩니다.

편집: 두 개의 커밋 사이의 개수를 가져옵니다.


2개의 임의의 리비전 사이에 커밋수를 얻는 방법을 나타내는 답을 찾고 있었는데, 아무것도 보이지 않았습니다.

git rev-list --count [older-commit]..[newer-commit]

이를 위한 몇 가지 멋진 방법이 있습니다.

  • 첫 번째 방법

git shortlog -s

이 명령어는 repo에 기여한 모든 사용자의 커밋 수 목록을 출력합니다.

956 Pankaj Tanwar
235 The Ninja
540 The Hardcore Geek
664 The Ever Shining Star
984 The Experienced Man

간단히 말하면, 총 커밋 수를 구하려면 -

git shortlog -s | grep "Pankaj Tanwar"

인쇄 -

956 Pankaj Tanwar
  • 또 다른 깨끗하고 시원한 방법은 다음과 같습니다.
git rev-list HEAD --author="Pankaj Tanwar" --count 

제공된 코드의 총 행과 제기된 풀 요청의 총 수를 계산하려면 이 블로그를 참조하십시오.

Git 사람들이 Git에 대해 설명하는 유용한 버전 번호를 생성하기 위해 사용하는 멋진 도우미 스크립트가 있습니다.스크립트를 보여주고 "현재 커밋 ID를 Git 프로젝트의 파일에 어떻게 포함하시겠습니까?"라는 답변에서 설명합니다.

다음 명령어는 현재 브랜치 상의 커밋의 총수를 출력합니다.

git shortlog -s -n  | awk '{ sum += $1; } END { print sum; }' "$@"

다음 두 부분으로 구성되어 있습니다.

  1. 작성자별로 그룹화된 총 로그 수를 인쇄합니다( ).git shortlog -s -n)

    출력 예

      1445  John C
      1398  Tom D
      1376  Chrsitopher P
       166  Justin T
       166  You
    
  2. 각 작성자의 총 커밋 번호(즉, 각 행의 첫 번째 인수)를 집계하여 결과를 출력합니다.awk '{ sum += $1; } END { print sum; }' "$@")

    위와 같은 예를 사용하여 요약할 수 있습니다.1445 + 1398 + 1376 + 166 + 166따라서 출력은 다음과 같습니다.

      4,551
    

git rev-parse --short HEAD

Bash 구문을 사용하여

$(git rev-list --count HEAD)

순수하게 선형적인 이력으로는 괜찮아 보입니다.브랜치로부터 「숫자」를 취득하는 경우도 있습니다(기준).master다음을 고려합니다.

$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)

의 체크아웃에서 실행되는 경우master심플하게1234.0뭐 그런 거.지점 체크아웃에서 실행할 때 다음과 같은 것을 얻을 수 있습니다.1234.13(그 브랜치로 13개의 커밋이 이루어졌을 경우).이것은, 1개의 브랜치에 근거하고 있는 한에만 유효합니다.master리비전.

--first-parentmicro number에 추가할 수 있기 때문에 다른 브런치를 Marge할 때만 발생하는 커밋을 억제할 수 있습니다.단, 불필요할 수도 있습니다.

빌드 중에 번호를 생성하여 파일에 씁니다.릴리스할 때마다 "빌드 147"(또는 현재 빌드 번호에 관계없이)이라는 코멘트와 함께 해당 파일을 커밋하십시오.정상적인 개발 중에는 파일을 커밋하지 마십시오.이렇게 하면 Git에서 빌드 번호와 버전을 쉽게 매핑할 수 있습니다.

저희 회사에서는 SVN에서 Git으로 이전했습니다.리비전 번호의 부족이 큰 문제였습니다!

하다git svn clone다음으로 마지막 SVN 커밋을 해당 SVN 리비전 번호로 태그 붙입니다.

export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD

그런 다음 의 도움을 받아 리비전 번호를 얻을 수 있습니다.

git describe --tags --long

이 명령어는 다음과 같습니다.

7603-3-g7f4610d

평균: 마지막 태그는 7603 - SVN 리비전입니다.3 - 이 태그의 커밋 수입니다.그것들을 추가해야 합니다.

따라서 리비전 번호는 다음 스크립트로 카운트할 수 있습니다.

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)

제가 쓰던 건

git log | grep "^commit" | wc -l

간단하지만 효과가 있었다.

시도해 보세요

git log --oneline | wc -l

또는 저장소에 기여하는 사람들이 수행한 모든 커밋을 나열합니다.

git shortlog -s

git shortlog그 자체로는 커밋의 총수에 대한 원래의 질문에 대처하지 않는다(작성자별로 그룹화되지 않음).

그것은 사실입니다.git rev-list HEAD --count는 가장 간단한 답변입니다.

그러나 Git 2.29 (4분기 2020)를 통해 "git shortlog(man) "는 더 정확해졌습니다.
"와 같이 트레일러 라인의 내용에 따라 그룹 커밋을 학습했습니다.Reviewed-by:", "Coauthored-by:" 등

Jeff peffKing의 commit 63d24fa, commit 56d5de, commit 87abb96, commit f17b0b9, commit 47beb37, commit f0939a0, commit 92338c4(2020년 9월 27일) 및 commit 45d93eb(2020년 9월 25일)를 참조하십시오().
(2020년 10월 4일, Junio C Hamano에 의해 합병)

: 여러 그룹을 지정할 수 있습니다shortlog.

서명자: Jeff King

, 이제...shortlog트레일러에서 읽을 수 있도록 지원하며, 여러 트레일러에서 또는 트레일러와 작성자 간에 카운트를 결합하는 것이 유용할 수 있다.
이 작업은 여러 실행의 출력을 후처리하여 수동으로 수행할 수 있지만 각 이름/커밋 쌍이 한 번만 카운트되도록 하는 것은 그리 간단한 일이 아닙니다.

가 여러 shortlog를 .--group옵션을 선택하고 모든 옵션에서 데이터를 가져옵니다.

이를 통해 다음을 실행할 수 있습니다.

git shortlog -ns --group=author --group=trailer:co-authored-by  

작가와 공동 집필자를 동등하게 평가하는 쇼트로그를 얻으려고요

구현은 대부분 간단합니다.는,groupenum은 리스트가 됩니다.
stdin을 때 그럴 수도 있겠지만, 기존의 일치 코드가 어색하고, 누가 신경 쓸지 의문입니다.

트레일러에 사용한 중복 억제에는 작성자 및 커밋도 포함됩니다(단, 비트레일러 단일 그룹 모드에서는 커밋당 하나의 값만 표시되므로 해시 삽입 및 검색을 건너뛸 수 있습니다).

한 가지 미묘한 점이 있습니다.그룹 비트가 설정되어 있지 않은 경우(이 경우 기본적으로 작성자를 표시합니다).
의 발신자는, 에 의존하지 않고, 작성자에게 명시적으로 요구하도록 적응할 필요가 있습니다.shortlog_init() 이 할 수 를 건 사람 한 에게는 그럴 체조를 하면 이 상태를 유지할 수 있지만, 전화를 건 사람 한 명에게는 그럴 가치가 없습니다.

git shortlog이제 man 페이지에 다음이 포함됩니다.

--group=<type>

「」에 커밋<type>--group은 ""입니다.★★★★★★★★★★★★★★★★★★:author<type>을 하다

  • author되어 있습니다.
  • committer커밋」과 ).-c)

은 것이의 this for for for for for for for for의 입니다.--group=committer.

git shortlog이제 man 페이지에도 다음이 포함됩니다.

if--group는 여러 번 지정되며 커밋은 각 값으로 카운트됩니다(단, 이 커밋의 고유 값별로1회만 카운트됩니다.를 들어, 「」라고 하는 것은,git shortlog --group=author --group=trailer:co-authored-by작가와 공동 연구자 모두를 카운트합니다.

git config --global alias.count 'rev-list --all --count'

이 명령어를 Configuration에 추가하면 명령어를 참조할 수 있습니다.

git count

......alias

alias gc="git rev-list --all --count"      #Or whatever name you wish

이와 같이 git shortlog를 사용합니다.

git shortlog -sn

또는 에일리어스를 만듭니다(ZSH 기반 단말용).

# show contributors by commits alias gcall="git shortlog -sn"

기능 브랜치와 타겟의 사용 등, 2개의 브랜치간에 다른 커밋의 수를 취득하려면 , 다음의 순서에 따릅니다.

git rev-list --count feature_branch..target_branch

언급URL : https://stackoverflow.com/questions/677436/how-do-i-get-the-git-commit-count

반응형