Bir karma işareti (#) ile git kesinleştirme mesajı başlatma


283

Git, işe başlarken ile başlayan satırları #yorum satırı olarak ele alır . bu, bir bilet izleme sistemi ile çalışırken ve satırın başlangıcında bilet numarasını yazmaya çalışırken çok can sıkıcı bir durum, örn.

#123 salt hashed passwords

git, satırı kesinleştirme mesajından silecektir. karmadan kaçmanın bir yolu var mı? denedim \ve !hiçbir şey işe yaramıyor. daha önce beyaz alanlar #korunur, bu yüzden soruna da çalışan bir çözüm değildir.


8
@AlexBudovski çünkü kısalıkta değer var.
Xavi

8
Git 1.8.2'den (Şubat 2013) beri, git config core.commentcharbu yorum karakterinin yapılandırılmasına izin verir. Aşağıdaki cevabımı
VonC

3
Git v2.0.0 (2014.05.21) git commit --cleanup=scissorsdaha esnek olacak. İçinde ayrıntıyı görün Cevabıma
Sungam

4
Söylemeliyim ki, GitHub halkı sayıları karmalarıyla işaretlemeye karar verdiklerinde bu sorunu düşünmediklerine şaşırdım!
Michael Scheper

1
@Michael Adil olmak gerekirse, bu sözleşme zaten Mantis, Trac, Redmine ve muhtemelen diğerleri tarafından kullanıldı. GitHub'ın tekerleği yeniden icat etmek yerine onu takip etmeye karar verdiğini düşünüyorum. Bkz. Stackoverflow.com/questions/40495/…
kelvin

Yanıtlar:


235

Bu davranış, git commit'varsayılan' temizleme ' davranışının bir parçasıdır . Satırları başlangıçta tutmak #istiyorsanız alternatif bir temizleme modu kullanabilirsiniz.

Örneğin

git commit --cleanup=whitespace

Bunu yaparsanız #, taahhütte görünmesini istemediğiniz tüm satırları kaldırmaya dikkat etmelisiniz .


Bir sonraki soru: Git'in varsayılan olarak bir # ile başladığı kesinleştirme mesajı yorumlarını nerede düzenleyebilirim?
Alex

2
@Alex: commit.templategit yapılandırma değişkeni tarafından kontrol edilir .
CB Bailey

23
Bu, mevcut taahhütleri değiştirmek için de harika çalışıyor. Örn:git commit --amend --cleanup=whitespace
James Andres

@CharlesBailey: git command -t / dev / null ile önceden tanımlanmış metinden kurtulmayı bekliyordum ama yine de bunu gösteriyor
Alex

Mac için GitHub ve SourceTree gibi istemcilerdeki yorumların yanı sıra "# 123 İşlem iletisi" nin bir taahhüt mesajına sahip olabildiğimi sanırım bu istemcilerin evet yaptıkları nedir?
Phil Ostler

134

Git1.8.2'den (Şubat 2013) beri #, tamamlama mesajındaki yorumlu satır için ' ' dışında bir karakter kullanabileceğinizi unutmayın .

Bu, #hata numarası referansınız için ' ' kullanmanızı sağlar .

Git, kullanıcıdan düzenleyicideki mesajları düzenlemesini istediğinde verdiği "ipucu" satırları #varsayılan olarak ' ' ile yorumlanır .

core.commentCharYapılandırma değişkeni bu 'özelleştirmek için kullanılabilir #farklı bir karaktere'.


Teorik olarak, olabilir bir koyun core.commentCharsözcüğü (çoklu karakter), ama git 2.0.x / 2.1 katı (Q3 2014) olacaktır.

Nguyễn Thái Ngọc Duy ( ) tarafından verilen 50b54fd taahhütlerine bakınız :pclouds

config: core.commentChar adresinde katı olun

Yorum dizelerini desteklemiyoruz (en azından henüz). Ve çok baytlık karakter kodlaması da yanlış yorumlanabilir.

İki virgül içeren test güncellenir çünkü bunu ihlal eder. Eff80a9'da tanıtılancore.commentChar yama ile eklenmiştir (Özel "yorum karakterine izin ver - 2013-01-16). Bu davranışın neden istendiği net değil .


git 2.0.x / 2.1 (3Ç 2014) için otomatik bir seçim ekleyecektir core.commentChar:
Bkz. taahhüt 84c9dc2

core.commentChar" auto" Olduğunda , yorum karakteri #varsayılan olarak ' ' ile başlar, ancak önceden hazırlanmış iletideyse küçük bir alt kümede başka bir karakter bulun. Git sürprizleri durdurmalı çünkü git beklenmedik şekilde bazı çizgiler çiziyor.

Git'in, ' #' özel şablonlarda yorum karakteri olarak tanıyabilecek kadar akıllı olmadığını ve son yorum karakteri farklıysa dönüştürdüğünü unutmayın.
İşleme şablonunun bir parçası olarak özel şablonlardaki '#' satırlarını düşünür. Bu yüzden bunu özel şablonlarla kullanmayın.

"Otomatik" için aday karakterlerin listesi:

# ; @ ! $ % ^ & | :

Bu gibi bir komut git commit -m '#1 fixed issue', commentChar öğesini otomatik olarak ' ;' olarak değiştirir , çünkü komut mesajında ' #' kullanıldı.


1
Bundan sonra söz dizimi
HL'sini

@Guten True, cevabı bunu yansıtacak şekilde yeniden yazdım.
VonC

1
@newbyca, hangi git sürümüyle etkileşimli bir rebase sırasında desteklenmediğini görüyor musunuz?
VonC

2
Yani, bunu ayarlamak için şunları yapabilirsiniz, örneğin:$ git config --global core.commentchar ';'
davetapley

6
Bu cevabı seviyorum. Yeni önerilen çözüm için Oneliner:git config --global core.commentChar auto
18'de 16

81

Buradaki cevaplar iyi ve ayrıntılı, ama benim gibi bir git noob için git config seçeneklerini özelleştirmek o kadar açık değil. İşte değiştirmek için bir örnek #için ;açıklama karakterleri için:

git config core.commentChar ";"

Tüm yapmanız gereken bu.


3
Bu ayrıca git komut git commitdosyasını düzenlemek için yapılandırılmış düzenleyiciyi açmak için kullanıldığında komut mesajına eklenen varsayılan yorumlanmış metni de değiştirir !
Michael Trouw

1
Bir defalık düzeltmeler için şunu kullanın: git -c core.commentChar="|" commit --amend( |ne istersen değiştir ).
Droogans

62

Komut satırı seçeneğini kullanabilirsiniz -m:

git commit -m "#123 fixed"

35
Ama bu korkunç bir taahhüt mesajı. hatanın ne olduğunu ve nasıl düzeltildiğini
Good Person

3
hata bir dizi olduğu sürece taahhüt mesajları tamam
Trident D'Gao

6
Hata izleme sistemi aniden bozulursa ve yedeğiniz yoksa değil! :)
caveman_dick

38

Etkileşimli bir rebase yapıyorsanız, taahhüt mesajınızı içinde hiçbir şey olmadan kaydettiğinizde (çünkü #başlangıçta bir yorum yaptı ve bu nedenle yok sayıldı) git size ne yapacağınızı gösterecektir:

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

Yani, mesajı değiştirin:

git commit --amend -m "#123 salt hashed passwords"

ve geri dönmeye devam et:

git rebase --continue

Bu, taahhüdü zaten itmiş, ancak mesajı değiştirmek isteyen biri için doğru
Hoang Trinh

Ayrıca, düzenleyicinizi kullanarak bir mesaj girerseniz ve başında bir karma varsa yeni taahhütler için de geçerlidir.
Owain Williams

29

git commit --cleanup=scissorskullanılmalıdır. 2014.05.21 tarihinde Git v2.0.0 sürümüne eklendi

itibaren git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.

@CharlesBailey'in önerdiği gibi, yorumları elle kullanmaktan commit.cleanup = whitespaceve kaldırmaktan nasıl daha iyi olduğunu anlamıyorum # …. scissors-mode ek olarak git format-patch/ mailinfo/ tarafından kullanılan makas-sözdizimini temizler am; o mu değil kullanmak …-- >8 --…mesajları işlemeye bir yorum eklerken sözdizimi .
Slipp D.Thompson24

1. Bence bu daha iyi çünkü # ...yorumların zorla kaldırılmasına gerek yok . 2. Yorumunuzun ikinci kısmından o kadar emin değilim, scissorsmod kesinlikle git commit --help. Hangi sürümü gitkullanıyorsunuz? @ SlippD.Thompson
Sungam

Ha? whitespacemodu boş satırların 1. ve sonrakiler, 2. sondaki boşluk, 3. ardışık boş satırlar daralma sunuyor. scissors1. satırları önde gelen ve sondaki boş satırları sıyırma, 2. sondaki boşluk, 3. ardışık boş satırları daralt, 4. satırdan (ve dahil) her şey # -…- >8 -…-. Ancak makas çizgileri ( # -…- >8 -…-) yalnızca git-format-patch/ mailinfo/ kullanılırken eklenir am. Bu nedenle, normal git-commit/ merge/ rebase/ cherry-pickiş akışı için scissorssıyırma modu, moda göre sıfır fayda sağlar whitespace. v2.11.0
Slipp D.Thompson

@ SlippD.Thompson Git'in hangi sürümünü kullanıyorsunuz? Ben 2.8.3 kullanıyorum ve git commit --cleanup=scissors YAPAR prepend # ------------------------ >8 ------------------------önce çizgiyi git statusbilgi. Aşağıdaki gibi: `# ------------------------> 8 ------------------- ----- # Yukarıdaki satıra dokunmayın. # Aşağıdaki her şey kaldırılacak. # Şube ustası # # İlk taahhüt # # Taahhüt edilecek değişiklikler: # yeni dosya: .gitignore `
Sungam

1
Bunun dibine geldiğime inanıyorum. Git gerçekten # ------------------------ >8 ------------------------“t olabilir gibi…” _ durumundan önce şunu ekler _ _ scissors; ancak, makas satırı ekler sonra# Conflicts: … metin. Ben commit.status = falseayarlamıştım .gitconfig, bu yüzden herhangi bir durum metni görmüyordum, sadece çatışma metni. Düzeltilmiş duruyorum; upvote olarak değiştiriliyor.
Slipp D.Thompson

3

Bilet numarası için farklı bir önek kullanın. Ya da "Bug # 42" gibi bilet numarasına bir kelime ekleyin. Veya satıra tek bir boşluk karakteri yerleştirin; o boşluğu kaldırmak isterseniz, bunun için bir kaydetme kancası ekleyebilirsiniz.

Şahsen bir kanca tarafından yapılan bu tür bir taahhüt mesajı manipülasyonu olmasını istemezdim, çünkü istemediğinizde tetiklendiğinde çok rahatsız edici olabilir. En kolay çözüm muhtemelen sorunu yeniden düşünmektir.


1
Farklı ifadeler sadece sorun için bir çözümdür. proje yönergeleri, bir taahhüt mesajının bilet kimliğiyle başlaması gerektiğini belirtirse, çalışmaz. ve işlem sonrası kanca çok çirkin. Ben bu geliştiricileri git geliştiricilere rapor gerektiğini düşünüyorum
knittl

Rahatsız etme, bu yanlış olur. Git geliştiricilerinden yönergelerinize göre çalışmalarını istemeyin. Dennis Ritchie'den C dilini değiştirmesini istemezsiniz, böylece karma karakterle başlayarak değişken isimler kuralını destekler, değil mi? Aynı şey burada da geçerlidir. Kesin mesajlar yorumlara izin veriyorsa, bu, kesin editörü eklenmiş ve yorumlanmış olarak taahhüt editörünü açmak gibi ilginç şeyler için destek ekler, böylece kesin değişikliklerinizi hatırlamanız gerekmez. Baştaki boşluk karakterini korumanın sorunu nedir?
wilhelmtell

1
Git'in

5
Son derece makul bir özellik isteği. Özellikle, Trac, AFAICT'nin, taahhüt mesajı bir karma ile başlayan slip numarası ile başlamazsa, bir hata notu ile ilgili bir taahhüdü ilişkilendirmediği gerçeği ışığında. Yani bu sadece birinin standartları değil, bir aracın gerekli sözdizimidir. Git geliştiricilerin değerli olup olmadığına karar vermesine izin verin. (Ve evet, Trac sorunu da düzeltebilir.
Luke Maurer

“Özellikle, Trac, AFAICT'nin, taahhüt mesajı bir karma ile başlayan slip numarası ile başlamazsa, bir hata notu ile ilgili bir taahhüdü ilişkilendirmediği gerçeği ışığında.” - Trac ile olan sınırlı deneyimimde #xxx, taahhüt mesajının herhangi bir yerinde meydana gelen gibi bir şey konuyla bağlantı kuracaktır. Taahhüdün başında olması gerekmez. Belki de bu son beş yılda değişen bir şeydir?
Guildenstern

1

Tüm benim kaydedilmesini başlar #issueNumberkız kardeşime karşı bu klişe koymak böylece vim .git/hooks/commit-msg:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

Diyelim ki şubemiz var #15ve taahhüt mesajı veriyoruz add new awesome feature. Bu yaklaşımla nihai taahhüt mesajı olacaktır #15 add new awesome feature.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.