web-gelistirme-sc.com

Git şubesindeki taahhüt sayısını sayın

Bu cevabı çoktan buldum: Git .__ 'daki şubedeki taahhütlerin sayısı, ancak şubenin ustadan yaratıldığını varsayar.

Bu varsayımdan yola çıkarak olmadan şubesindeki komisyon sayısını nasıl sayabilirim?

SVN'de bu önemsiz olmakla birlikte, bir nedenden dolayı git'i anlamak gerçekten zordur.

112
aaronbauman

Bulunduğunuz şubenin taahhütlerini saymak için:

git rev-list --count HEAD

dal için

git rev-list --count <branch-name>

Şube oluşturduğunuzdan bu yana yapılan bir şubedeki taahhütleri saymak istiyorsanız

git rev-list --count HEAD ^<branch-name>

Bu, aynı zamanda şube adına olmayan tüm taahhütleri de hesaba katacaktır.

Örnekler

git checkout master
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^master

Sonuç: 3

Şubeniz develop adlı bir şubeden geliyorsa:

git checkout develop
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^develop

Sonuç: 3

Birleştirmeleri Yoksayma

Hızlı ileri sarmadan başka bir dalı geçerli dalıyla birleştirirseniz ve yukarıdakileri yaparsanız birleştirme de sayılır. Çünkü git için bir birleşme bir taahhüttür.

Bu taahhütleri saymak istemiyorsanız --no-merges:

git rev-list --no-merges --count HEAD ^develop
226

bu hat

git shortlog -s -n

böyle çıktı üretecek

135  Tom Preston-Werner
15  Jack Danger Canty
10  Chris Van Pelt
7  Mark Reid
6  remi
45
Asnad Atta

Git'in nispeten yeni bir sürümünü gerektirebilir, ancak bu benim için iyi sonuç veriyor:

git rev-list --count develop..HEAD

Bu bana, mevcut üssünde ana üssüne sahip olduğu kesin bir taahhüt numarası verir.

Peter'ın cevabındaki komut, git rev-list --count HEAD ^develop, şu anki projemde 678'e ve 97'ye daha fazla taahhüt içeriyor.

Bağlılık geçmişim bu dalda doğrusaldır, bu nedenle YMMV, ancak bana istediğim cevabı veriyor, "Bu özellik dalında şimdiye kadar ne kadar taahhütte bulundum?".

28
scanny

git shortlog -s -n --all yapmayı seviyorum. Size "isim levhası" tarzı bir ad ve görev sayısı verir.

3
inorganik

Tarihin başlangıcından beri mevcut şubeye ne kadar taahhüt yapıldı, birleştirilmiş şubelerdeki taahhütleri saymaz:

git rev-list HEAD --count --first-parent

Belgelere göre git rev-list --help:

--first-parent 

Bir birleştirme taahhüdü görüldüğünde yalnızca ilk ebeveyn taahhüdünü izleyin. Bu seçenek, belirli bir konu dalının evrimini görüntülerken daha iyi bir genel bakış sağlayabilir, çünkü bir konu dalına yapılan birleşmeler zaman zaman güncellenen yukarı akışa uyum sağlama eğilimindedir ve bu seçenek, söz konusu komisyonları dikkate almamanızı sağlar. tarihin böyle bir birleşme ile. --Bisect ile birleştirilemez.

, bir takım diğer taahhütlerden bu yana yapılan taahhütlerin sayısı:

git rev-list HEAD abc0923f --count --first-parent

veya aynı:

git rev-list abc0923f.. --count --first-parent

veya başka herhangi bir git referansı kullan :

git rev-list master tag-v20 --count --first-parent

Not: Sığ klon, tarih boyutunu küçültür. Örneğin. --depth 1 ile klonlarsanız, 1 değerini döndürür. 


2018 yılından bu yana yapılan taahhüt sayımı

git rev-list HEAD --count --first-parent --since=2018-01-01

01-01-2018, 01.01.2018, 2018.01.01 ayrıca çalışır.


git revision

Git'ten '$refname-c$count-g$short$_dirty''a genişleyen master-c137-gabd32ef biçiminde sürüm revizyonunu almak için bir komut dosyası yazdım.
Yardım betiği kendisine dahil edilmiştir.

installation

cd ~/bin
wget 'https://gitlab.com/kyb/build-info-header/raw/master/git-revision.sh?inline=false' -qO git-revision.sh  &&  chmod +x git-revision.sh
ln -s $PWD/git-revision.sh /usr/local/bin/git-revision

kullanım

git revision
git revision '$refname-c$count-g$short$_dirty'
3
kyb

git log --pretty=oneline | wc -l hakkında

Bu, tüm taahhütleri mevcut şubenizin bakış açısından değerlendirmelidir.

2
Remear

Bunu yapmanın bir yolu, şubenizin günlüğünü listelemek ve satırları saymaktır.

git log <branch_name> --oneline | wc -l
1
kjw0188

Eh, seçilen cevap şubenizi belirli bir daldan çıkardıysanız (yani master veya develop değil) işe yaramazsa işe yaramaz. 

Burada, pre-Push git kancalarımda kullandığım başka bir yolu öneriyorum.

# Run production build before Push
echo "[INFO] run .git/hooks/pre-Push"

echo "[INFO] Check if only one commit"

# file .git/hooks/pre-Push
currentBranch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

gitLog=$(git log --graph --abbrev-commit --decorate  --first-parent HEAD)

commitCountOfCurrentBranch=0
startCountCommit=""
baseBranch=""

while read -r line; do

    # if git log line started with something like "* commit aaface7 (Origin/BRANCH_NAME)" or "commit ae4f131 (HEAD -> BRANCH_NAME)"
    # that means it's on our branch BRANCH_NAME

    matchedCommitSubstring="$( [[ $line =~ \*[[:space:]]commit[[:space:]].*\((.*)\) ]] && echo ${BASH_REMATCH[1]} )"

    if [[ ! -z ${matchedCommitSubstring} ]];then

      if [[  $line =~ $currentBranch ]];then
        startCountCommit="true"
      else
        startCountCommit=""

        if [[ -z ${baseBranch} ]];then
          baseBranch=$( [[ ${matchedCommitSubstring} =~ (.*)\, ]] && echo ${BASH_REMATCH[1]} || echo ${matchedCommitSubstring} )

        fi

      fi

    fi


    if [[ ! -z ${startCountCommit} && $line =~ ^\*[[:space:]]commit[[:space:]] ]];then
      ((commitCountOfCurrentBranch++))
    fi


done <<< "$gitLog"

if [[ -z ${baseBranch} ]];then

  baseBranch="Origin/master"

else

  baseBranch=$( [[ ${baseBranch} =~ ^(.*)\, ]] && echo ${BASH_REMATCH[1]} || echo ${baseBranch} )

fi


echo "[INFO] Current commit count of the branch ${currentBranch}:  ${commitCountOfCurrentBranch}"

if [[ ${commitCountOfCurrentBranch} -gt 1 ]];then
  echo "[ERROR] Only a commit per branch is allowed. Try run 'git rebase -i ${baseBranch}'"
  exit 1
fi

Daha fazla analiz için, lütfen blogumu

0
Paul Lan

OP referansları Git'teki şube taahhütlerinin sayısı Eklemek istediğim, verilen cevapların, en azından 2.17.1 sürümünden beri (ve görünüşte cevaptan daha güvenilir şekilde) Peter van der mu):

doğru çalışıyor:

git checkout current-development-branch
git rev-list --no-merges --count master..
62
git checkout -b testbranch_2
git rev-list --no-merges --count current-development-branch..
0

Son komut, dalı yeni oluşturduğum için beklendiği gibi sıfır taahhüt veriyor. Önceden gelen komut bana, geliştirme şubemden eksi birleşme taahhüdüne ilişkin gerçek taahhüt sayısını verir.

düzgün çalışmıyor:

git checkout current-development-branch
git rev-list --no-merges --count HEAD
361
git checkout -b testbranch_1
git rev-list --no-merges --count HEAD
361

Her iki durumda da, geliştirme branşındaki tüm taahhütlerin sayısını alıyorum ve dalların (dolaylı olarak) indiği usta.

0
sdoe