2011-09-12 11 views
19

Bir proje için otomatik bir değişiklik oluşturmak için tüm git taahhütlerini belirli bir etikete ulaştırmanın kolay bir yolu veya komutu var mı? Git reposlarını her zaman v0.1.0 gibi bir sürüm numarasıyla etiketlerim ve örneğin tüm üyeler v0.1.0 etiketini doldurabilir.Git changelog: belirli bir etikete kadar tüm değişiklikleri nasıl alabilirim?

Ben docs inceledim ama bunun için yararlı bir seçenek veya komutu bulmak için görünmüyor:

$ git log --oneline --decorate 
: http://git-scm.com/docs/git-log Örneğin

(bu arada şu anda aşağı)

İşlemlerin yanındaki etiketleri gösterir. Aynı şeyi isterdim, ama sadece belirli bir etikete kadar.

+1

İlgi alanları: Pimp My Changelog, bunu yapmak için bir Ruby betiği. https://github.com/pcreux/pimpmychangelog – olleolleolle

cevap

34

yol açan dalları görselleştirmek için --graph anahtarı gibi komutunuza tagname ekler ve ince :) olmalıdır Sen tıpkı yapabilirsiniz:

git log --oneline --decorate v0.1.0 

... v0.1.0'a kadar olan tüm taahhütleri göstermek için. Elbette git log da izin verir git rev-list anlar yollardan herhangi gösterilen kaydedilmesini kısıtlamak ayırabilir, böylece yalnızca v0.0.9 arasındaki değişiklikleri görmek istedim ve eğer v0.1.0 da yapabilirdi:

git log --oneline --decorate v0.0.9..v0.1.0 

Alternatif çıktı o Bu amaç için yararlı olabilir, her yazarın katkılarını gruplandıran ve özetleyen git shortlog. örneğin, deneyin:

git shortlog v0.1.0 
+0

Özenle cevap için teşekkürler :) Bu tam olarak istediğim şey. – Luwe

+2

Belirli bir etiketin ardından işlemleri görüntülemek için 'git log --oneline --decorate v0.1.0..' kullanabilirsiniz –

+0

Git komutunu çalıştırdıktan sonra günlüğü nasıl kopyalanırım go.e. go log --oneline --decorate? –

1

Sadece ben bu etikete :)

1

Sadece bir taahhüt belirtici olarak etiket adını kullanın: etiketlere göre changelog oluşturmak için git log --oneline --decorate v0.1.0

5

, ben bu senaryoyu kullandı:

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l | sort -u -r | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
+0

Eğer etiketleriniz xyz formunda ise, 1.0 gibi sürümleri doğru sıralamak için' -V' flagini 'sort' olarak ekleyin .9, 1.0.10 vb. –

2

komut için bir güncelleme Creotiv tarafından daha iyi tasnif edilmiş etiketleri almak için önerilmiştir

#!/bin/bash 
# Author:Andrey Nikishaev, Gunnar Lindholm 
echo "CHANGELOG" 
echo ---------------------- 
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^$' | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
0

tarafından taahhüt. Bu, sürüm etiketlerini doğru şekilde kullanır.

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l --sort=v:refname | tac | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l --sort=v:refname | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
İlgili konular