Soru Git taahhüt kancalarını kullanarak bilet numarası ekle?


Böylelikle şubemde "issue-1234" gibi bir hata mesajı numarası bulunuyor, ve taahhüt mesajında ​​her zaman bilet numarasını yazacak bir sözleşmemiz var. Açıkça yazmadan bir sorun üzerinde çalıştığımda otomatik olarak taahhüt mesajında ​​bilet numarasının eklenip eklenemeyeceğini merak ediyorum.

Git taahhüt kancalarına baktım, yani ön-taahhüt, hazır mesaj ve post-commit, ve hiçbiri istediğimi yapamadı. İşlem sonrası kanca yakın geliyor, ancak -m ile işlenen iletiyi değiştiremezsiniz.

Tekrarlamak gerekirse, bunun mümkün olup olmadığını merak ediyorum:

Şubede: sayı 1234

git commit -a -m"fixed this pesky issue"

İşlemden sonra git günlüğünde mesajı şu şekilde gösterir:

fixed this pesky issue. ticket number: #1234

21
2018-04-28 19:15


Menşei




Cevaplar:


Bir kanca kaçırdın. İstediğinizi commit-msg:

Bu kanca git işlemi tarafından çağrılır ve --no-doğrulama seçeneği ile atlanabilir. Tek bir parametre alır, önerilen taahhüt günlük mesajını tutan dosyanın adı. Sıfır olmayan durumdan çıkmak, gitme işlemini iptal etmesine neden olur.

Yani örneğin:

#!/bin/sh

ticket=$(git symbolic-ref HEAD | awk -F- '/^issue-/ {print $2}')
if [ -n "$ticket" ]; then
    echo "ticket #$ticket" >> $1
fi

Bu, şube adınızın çok saf bir şekilde ayrıştırılmasıdır ve bu sadece kendi satırındaki taahhüt mesajına eklenir. Bu sizin için yeterince iyi değilse değiştirin.

Tabii ki, bunu gerçekten yapmanızı öneririm prepare-commit-msgve ile işlemek git commit (olmadan -m). Tek satırlık bir taahhüt mesajında ​​yeterli bilgiyi gerçekten yazabilmeniz çok nadirdir. Dahası, bu, mesajın yapmadan önce görmesini sağlar, çengeliniz tam istediğiniz şeyi yapmazsa.


17
2018-04-28 20:53



+1. Çok satırlı yorumunuzu bir dosyaya yönlendirirseniz, git commit --file=myMultiLineCommentFilehala kullanabilirsin commit-msgkanca, değil mi? - VonC
@ VonC: commit-msg Bir taahhüt yapıldığı zaman kanca yangınları - tam otomatik birleştirme taahhütleri hariç (yani, çakışma yok, hayır --no-commit). Bu OP için bir sorun olmamalı. (Bu gerçekten bir hata / gözetimdir, gerçekten. prepare-commit-msg otomatik birleştirme için kanca, ama inanıyorum post-commit ve commit-msg hala kayıp.) - Cascabel
bence git symbolic-ref HEAD her zaman ile başlar refs/heads yerine issue? - xi.lin


Sen de kullanabilirsiniz prepare-commit-msg daha fazla parametre kabul eden kanca commit-msg. Ardından istemediğiniz zaman sorun numaralarını eklemekten kaçınmak için mesajın bir dosyadan, şablondan vb. Gelip gelmediğini kontrol edebilirsiniz.

Aşağıdaki komut dosyası ile .git/hooks/prepare-commit-msg bir özellik dalında çalışırken foo-123, sonra [#123] Yaptığınız her işlemin üçüncü satırına eklenecektir.

Bu yazıda daha fazla bilgi yazdım

#!/bin/sh

if [ x = x${2} ]; then
  BRANCH_NAME=$(git symbolic-ref --short HEAD)
  STORY_NUMBER=$(echo $BRANCH_NAME | sed -n 's/.*-\([0-9]\)/\1/p')
  if [ x != x${STORY_NUMBER} ]; then
    sed -i.back "1s/^/\n\n[#$STORY_NUMBER]/" "$1"
  fi
fi

7
2017-07-19 14:20



Bu, amaçlandığı gibi çalışmayacak commit -m Hikaye numarasını taahhüt mesajına önceden vereceği gibi. Değiştirirseniz ^ ile $ regex içinde, o zaman her iki durumda da çalışmalıdır. - Geekfish


Başka bir seçenek kullanmaktır git notes Bahsettiğiniz kancalardan birini kullanarak bilet numarası bilgilerini taahhüt altına eklemek için.
(Görmek "Kendi kendine notlar" not mekanizmasında daha fazlası için blog yazısı girişi)


2
2018-04-28 19:20



kancalarla ilgili problem, zaten -m ile taahhüt mesajı sağladığımda gerçekten işe yaramayacağıdır. hazırlamak-commit-mesaj kanca sadece bir dış editör ateş olduğunda çalışır - EnToutCas
@EnToutCas: taahhüt mesajının belirlendiği zaman, bir taahhütte kendini yürütme konusunda hiç kancanız olmadığı anlamına gelir. -m ? - VonC
+1 VonC için de. Her gün yeni bilgi edinebilmek için güzel bir duygu. Stackoverflow kayalar ve bu onu yapan stackoverflow insanı. - ralphtheninja
Notlar ilginç bir fikirdir, ancak bunları paylaşmayla ilgili eksiklikler, bir taahhütte bir # eklemenin amacını yenilgiye uğratır (genellikle bunu yaparsınız, bir uzaktan kumanda bu mesajları iletebilir ve bir bilet izleme sistemi ile verilenler arasında bağlantı kurabilir ) işlemek. - Adam Parkin


Bu şekilde, taahhüt isminin başlangıcına branş adı ekleyebilirsiniz. Hazırla-yapıştır-msg kanca. "Git commit -m" ve "git commit" komutları için çalışın. Bu seçenek, otomatik olarak eklemeyi istemediğiniz dalların listesini içeren .git / hooks / pre-commit.skip dosyasıdır.

BRANCH="$(git rev-parse --abbrev-ref HEAD)"
FILE_CONTENT="$(cat $1)"
skip_list=`git rev-parse --git-dir`"/hooks/pre-commit.skip"
if grep -E "^$BRANCH$" $skip_list; then
  exit
fi
if [ $2 = "message" ]; then
  echo $BRANCH: $FILE_CONTENT > $1
else
  echo $BRANCH: > $1
  echo $FILE_CONTENT >> $1
fi

2
2017-10-23 18:44





İşte her türlü sorun / bilet numaralandırma taahhüt mesajları için eksiksiz bir çözüm:

-Tamamlama hazırlamak-Msg

#!/bin/bash
# Append issue number / bug tracking URL to commit.
#
# If the branch name contains the issue number, it will append it to the
# commit message. Example:
#
#   BRANCH NAME            LINE TO APPEND
#   feature/GH-123-emoji   GitHub: #123
#   WRIKE-123-add-payment  Wrike: https://www.wrike.com/open.htm?id=123
#   UNKNOWN-123            Issue: #123

branchName=`git rev-parse --abbrev-ref HEAD`

IFS=- read issueTracker issueNumber <<< $(echo $branchName | sed -nr 's,([a-z-]+/)?([A-Z]+-[0-9]+)-.+,\2,p')

if [[ -z $issueNumber ]]; then
  exit 0
fi

case "$issueTracker" in
  WRIKE)
    line="Wrike: https://www.wrike.com/open.htm?id=$issueNumber"
    ;;
  GH)
    line="GitHub: #$issueNumber"
    ;;
  GL)
    line="GitLab: #$issueNumber"
    ;;
  *)
    line="Issue: #$issueNumber"
    ;;
esac

# If the commit message already contains the line (`--amend`), then do
# not add it again.
if ! ( grep "$line" "$1" > /dev/null ); then
  sed -i.bak -e "/# Please enter the commit message for your changes./ s,^,$line\n\n," $1
fi

Onu depoya koy .git/hooks dizini sadece repoya uygulamak veya kurmak core.hooksPath içinde ~/.gitconfig ve tüm depolarınıza uygulamak için bu dizine kopyalayın.

Görmek benim config dosya depom diğer kullanışlı betiklerin yanı sıra.


1
2018-06-08 05:53