Git'teki şube açıklamaları


282

Git'te şubeler için 'açıklama' almanın bir yolu var mı?

Açıklayıcı adları kullanmaya çalışırken, bir süre tek bir dalda çalışmak bazen diğer konu dallarından bazılarını neden yaptığımın hafızasını hafifletir. Dallar için açıklayıcı isimler kullanmaya çalışıyorum, ama bence bir 'açıklama' (dalın amacı hakkında kısa not) iyi olurdu.


1
Benzer bir sorun yaşadım . Bu dosyayı şubeleri ve neden var olduklarını belgelemek için kullanıyorum (diğer şeylerin yanı sıra).
themis

2
Bu gerçekten kullanışlı bir özellik. git branch -a, şube adlarının yanındaki açıklamaları gösterebilir. Belki git notları gelecekte şubelerin yanı sıra taahhütlerle ilgili notları da destekleyecektir?
jhabbott

1
Şube açıklamaları aktarılamaz, bu nedenle kendinize mesaj göndermek istemediğiniz sürece oldukça işe yaramazlar.
nurettin

@nurettin Doğru ama isteğim zaten özel şeyler içindi. Sadece dalı neden kestiğimi hatırlamak istedim.
Noufal Ibrahim

Yanıtlar:


200

Git 1.7.9 bunu desteklemektedir. Gönderen 1.7.9 sürüm notları :

 * "git branch --edit-description" açıklayıcı metin eklemek için kullanılabilir
   bir konu dalının ne hakkında olduğunu açıklamak.

6f9a332 , 739453a3 , b7200e8 taahhütleriyle Eylül 2011'de tanıtılan bu özelliği görebilirsiniz :

struct branch_desc_cb {
  const char *config_name;
  const char *value;
};

--edit-description::

Bir düzenleyici açın ve diğer çeşitli komutlar tarafından kullanılmak üzere dalın ne için olduğunu açıklamak için metni düzenleyin (örn. request-pull).

Ayrılmış bir HEAD dalı için çalışmayacağını unutmayın.

Bu açıklama komut istemi çekme tarafından kullanılır: bkz . Command c016814783 , aynı zamanda git merge --log.

request-pull standart çıktıya iki taahhüt arasındaki değişiklikleri özetlemek için kullanılan bir komut dosyasıdır ve verilen URL'yi oluşturulan özete ekler.

[@AchalDave'den] Maalesef açıklamaları yapılandırmanızda saklandıkları için zorlayamazsınız.


17
@Owen: Şu anda bilmemin tek yolu git config branch.topic.descriptionşube tanımını göstermek için kullanmak topic. .git/configDosyada saklanır .
Greg Hewgill

12
@GregHewgill Teşekkür ederim. Birkaç takma adla bu aslında onu görüntülemek için kötü bir yol değildir. Şimdi git branchlistedeki açıklamaları gösterecek olsaydı ...
Owen

4
Şu anda, önceki yorumda alıntılanan gist
pfalcon

166
Ne yazık ki, açıklamaları yapılandırmanızda saklandıkları için zorlayamazsınız, bu da bir takımdaki şubeleri belgelemek adına işe yaramaz hale gelir.
Achal Dave

2
@PedroRodrigues ne yazık ki gist bağlantınız koptu
UpAndAdam

40

Eğer varsa do README kullanarak sonuna, bir oluşturmak git takma değiştirerek git checkoutsizin README dalları geçiş her zaman görüntülenecek şekilde.

Örneğin, bunu [diğer ad] altındaki ~ / .gitconfig dosyasına ekleyin

cor = !sh -c 'git checkout $1 && cat README' -

Bundan sonra, git cor <branch_name>dalı değiştirmek ve geçiş yaptığınız dalın README'sini görüntülemek için çalışabilirsiniz .


Benim için $ 1 değişkeni çalışmıyor - hiçbir şey içermiyor. Neden bilmiyorum (versiyon kullanıyorum 1.7.11-msysgit.1). Bunun yerine $ 0 kullanıyorum. Ve her şey yolunda.
shytikov

@shytikov argümanlar kullanan git takma adları için, taşınabilirlik için " sh -c" yerine hızlı bir işlev kullanıyorum ; Örneğin,. alias = "!f() { git checkout "${1}" && cat README.md; }; f" (bu durumda gereksiz parantezler ve alıntılar, daha karmaşık bir şey için gerekli olmaları durumunda tamlık için dahil edilmiştir.)
michael

@michael_n sizin takma adınız, bir bash takma adı veya git takma adı
UpAndAdam

Tek sorun README ödeme yaparken bulunduğunuz klasörde değilse sadece şikayet olduğunu.
UpAndAdam

@UpAndAdam, içinde ~/.gitconfig, altında tanımlanan bir git takma [alias]adıdır ve takma adın adı aslında (ve anlaşılır bir şekilde kafa karıştırıcı) aliasgerçek yapılandırmamdan çağrılır ( corbu örnek için tutarlı olması için yeniden adlandırmalıydım ). Gerçek aliastakma adım: alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f" Kullanım: git alias {alias_name}veya git alias {alias_regexp}. Bash aliaskomutuna benzer , örneğin, $ alias llverim (benim için) alias ll='ls -l':; ve $ git alias brdönüşleri: alias.br branch -v --list(aynı zamanda kullanımı olabilir: $ git alias 'b.*')
Michael

31

git branch --edit-descriptionŞube açıklamasını ayarlamak veya düzenlemek için kullanın .

Dallara benzer git branchancak açıklamaları eklenmiş olan bir kabuk işlevi .

# Shows branches with descriptions
function gb() {
  current=$(git rev-parse --abbrev-ref HEAD)
  branches=$(git for-each-ref --format='%(refname)' refs/heads/ | sed 's|refs/heads/||')
  for branch in $branches; do
    desc=$(git config branch.$branch.description)
    if [ $branch == $current ]; then
      branch="* \033[0;32m$branch\033[0m"
     else
       branch="  $branch"
     fi
     echo -e "$branch \033[0;36m$desc\033[0m"
  done
}

İşte budur gbgörüntü çürüyene durumda metin olarak burada gösterildiği gibi görünüyor:

$ gb
* logging Log order details.  Waiting for clarification from business.
  master 
  sprocket Adding sprockets to the parts list.  Pending QA approval.

Ve bir görüntü olarak, renkleri görebilirsiniz:

resim açıklamasını buraya girin


Bunun kabul edilen cevaptan farkı nedir (bir yıldan daha uzun bir süre önce yayınlanmış)?
Peter Mortensen


28

READMEÖnerdiği Chris J , çalışabilir bir ile kurulum olması koşuluyla bir de tanımlanan özel birleştirme sürücü.gitattribute .
Bu şekilde, birleştirme sırasında yerel sürümü READMEher zaman korunur.

Şubeler için "açıklama", bu meta verilerle ilişkilendirilmiş bir "yorum" olarak da bilinir ve desteklenmez.

En azından, bir READMEdosyayla, herhangi bir dal için şunları yapabilirsiniz:

$ git show myBranch:README

README'niz REPO'nuzun kök dizinindeyse, tarafından kullanılan yol, git showbelirtilen deponun üst dizininden mutlak bir yol olduğu için herhangi bir yoldan çalışacaktır .


3
Takımdaki herkes bunun farkında olmalı ve isterlerse .gitattribute'a yerleştirmelidir mi? Eğer öyleyse, bana öyle geliyor ki, bunu yönetmek zor olurdu ve insanların bunu yapma şansı zayıf olacaktır.
Don Hatch

@DonHatch: Normalde .gitattributesdosyayı deponuzda kontrol edersiniz, bu nedenle hayır, sadece herkes için çalışır. Ne yazık ki bu, bazı web tabanlı arayüzler ile birleştirilirken, örneğin Azure DevOps'ta çekme istekleri kullanılırken işe yaramaz gibi görünüyor.
Soren Bjornstad

19

Burada iki popüler öneri var:

  1. git branch --edit-description: Bunu sevmiyoruz çünkü itemezsiniz. Belki oluşturduğum dalların ne yaptığını hatırlayabilirim, ama ekibim kesinlikle yapamaz.
  2. READMEdosya pr. dalı. Bu birleşme sırasındaki bir acıdır: Çatışmaları birleştirmeye eğilimlidir ve READMEözellik dallarını birleştirdiğimizde dallardan çekiliriz. Dallar arasındaki farklar da bir acıdır.

Bir yetim branches-readmedalı oluşturmaya karar verdik . Yetim şubeleri kendi ayrı geçmişlerine sahip şubelerdir - bunları Github gh-pagesşubelerinden tanıyabilirsiniz . Bu yetim dalı tek bir READMEdosya içeriyor . İçeriği:

master:
    The default branch
mojolicious:
    Start using Mojolicious
branch-whatever:
    Description of the whatever branch

İtme ve birleştirme dostudur. İle READMEherhangi bir şubeden görüntüle :

git show branches-readme:README

Dezavantajları, güncellemek istediğinizde garip yetim şubesini kontrol etmeniz READMEve READMEşubeler yeniden adlandırıldıkça, geldikçe veya gittikçe otomatik olarak güncellenmez. Yine de bu bizim için iyi.

Gibi yapın:

git checkout --orphan branches-readme
# All the files from the old branch are marked for addition - skip that
git reset --hard
# There are no files yet - an empty branch
ls
vi README
# put in contents similar to above
git add README
git commit -m "Initial description of the branches we already have"
git push origin branches-readme
# get all your original files back
git checkout master

Benzer şekilde, bireysel ekip üyeleri branches-$useristedikleri taktirde kendi özel dallarını tanımlayan kendi yetim şubelerini de oluşturabilirler, ancak onları takıma itmedikleri sürece.

Daha fazla takım ile bu çıktı ile de entegre edilebilir git branch. Bu amaçla, belki bir README.yamldosya yerine bir dosya düşünülebilir README.


Birtanesi olabilir usta README var. Bu dağınıklığı artıracak ama her zaman erişilebilir olacak
Peter - Monica'yı eski

2
@ PeterA.Schneider: Elbette, ancak yeni bir şube eklemek, değişikliğin master ile hiçbir ilgisi olmasa bile ustalaşmak için bir taahhüt gerektirecektir. Ayrıca, ustadan ayrılırken, tüm dallarda README'nin bir kopyasına sahip olacaksınız, yani bir karışıklık.
Peter V. Mørch

10
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

Command, global seçeneği alias.aboutkabuk ifadesi olarak tanımlar . git about <branch>Bir havuzda çalıştırıldığında , ayarlanmışsa dalın açıklaması görüntülenir.


4
Teşekkürler! Sadece ben değilim şube bakar bu yüzden değişti -"!describe() { git config branch.\"$(git symbolic-ref --short -q HEAD)\".description; }; describe"
aug

1
@aug - Bunu işe almak için argüman tırnak önünde ters eğik çizgiler düşmesi gerekiyordu:git config --global --add alias.about '!describe() { git config branch."$(git symbolic-ref --short -q HEAD)".description; }; describe'
Tom Tresansky

5

İşte git branchesGreg Hewgill'in bahsettiği komutun olası bir uygulaması :

#!/usr/bin/perl

sub clean {
    map { s/^[\s\*]*\s// } @_;
    map { s/\s*$// } @_;
    return @_;
}

sub descr {
    $_ = `git config branch.@_.description`;
    s/\s*$//;
    return $_;
};
sub indent {
    $_ = shift;
    s/^/      /mg;
    return $_;
};

my @branches = clean `git branch --color=never --list`;
my %merged = map { $_ => 1 } clean `git branch --color=never --merged`;

for my $branch (@branches) {
    my $asis = `git branch --list --color=always $branch`;
    $asis =~ s/\s*$//;
    print "  $asis";
    print " \033[33m(merged)\033[0m" if ($merged{$branch} and $branch ne "master");
    print "\n";

    print indent descr $branch;
    print "\n";
    print "\n";
}

4

git aliasGeçerli dalda açıklamaları ayarlamanızı ve okumanızı sağlayan bir a :

git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'

Kullanım / örnekler:

(develop) $ git about
(develop) $ git about message
(develop) $ git about
message
(develop) $ git about "this is a new message"
(develop) $ git about
this is a new message
(develop) $ git checkout -b test_branch
Switched to a new branch 'test_branch'
(test_branch) $ git about
(test_branch) $ git about "this is the test branch"
(test_branch) $ git about
this is the test branch
(test_branch) $ git checkout -
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
(develop) $ git about
this is a new message

Beni başlatan cevap için @Felicio'ya özel teşekkürler.


Güzel! Kabuk veya ohmyzsh için derlenebilir mi?
mqliutie

2

Etiketlere yorum ekleyebilirsiniz:

git tag -m 'this was a very good commit' tag1

Kural olarak, şube adlarınızla ilgili etiketleriniz olabilir veya yorumlanan bir etiketi konu dallarınızın başında tutmak için -f etiketini kullanabilirsiniz.


13
bu ideal değil çünkü şube başkanını takip etmiyor
AndyL

1

Diyelim ki bir şube oluşturmak istiyorsunuz

git branch branch-20200328
git notes add branch-20200328 -m "This branch is for whatever"
git notes show branch-20200328

0

Bu özelliğin şu anda desteklenmediğinden eminim. En iyi bahsinizin, istediğiniz bir bilgiye sahip olan şubede bir README açıklaması metni dosyası oluşturmak olduğunu düşünüyorum.


4
Bu dosyayı şubeler arasında birleştirmekten endişe etmem gerekecekti. Yapmaz mıydım?
Noufal Ibrahim

1
@KaspervandenBerg: Belki -1 kartı çıkarmak yerine bir yorum bırakın, sonra biraz bekleyin ve eğer asker görevi değiştirmek istemiyorsa, ancak bu siteyi ziyaret ettiğini görürsünüz, hecele. Ya yok sen hala doğru olup olmadığını görmek için düzenli olarak verilen tüm cevaplarını kontrol?
Sebastian Mach

1
@phresnel: iyi bir nokta; niyetim bu sorunun gelecekteki soru soranlarına yardımcı olmak ve iyi anwers yukarı ve yanlış olanlar aşağı gitmek, Chris J "cezalandırmak ve itibarını kaybetmek neden değildi. Ne yazık ki site oyumu kilitli söylüyor :(.
Kasper van den Berg

1
@KaspervandenBerg: Cezalandırıldığından şüphelenmek için biraz hızlıydım, üzgünüm.
Sebastian Mach

0

Seçilen cevap benim için aşırı dolu gibi görünüyor. Ben normal bir kaynak kontrollü dosya, diyelim bir şube başına açıklama dosyası korumak için eğimli olurdu master.txt, dev.txtvb ve kullanılması zor bir numara veya dalları olup olmadığını daha iyi bir hiyerarşi oluşturmak organize ediyorum.


6
Ardından, bu dosyaları diğer tüm şubelerle birleştirmekten endişelenmeniz veya git show master:dev.txtseçilen yanıttan daha basit olmayan kullanmayı unutmayın .
Sridhar Ratnakumar

0

Sadece kullan:

git config branch.<branch name>.description

Kredinin vadesi geldiğinde kredi vermek için: https://glebbahmutov.com/blog/git-branches-with-description/


Bu, soruyu ekledikten sonra yayınlanan bir git sürümüne eklendi. Kabul edilen cevap bundan bahsediyor.
Noufal Ibrahim

Ah evet. Yorumlarda belirtilmiştir.
Caleb Miller


-3

kullanım

git branch --list -v

yukarı yönlü bir şube göstermek için:

git branch --list -vv

-rYalnızca uzaktan kumandaları göstermek veya -auzaktan kumandaları ve yerelleri göstermek için ekleyin .


Bunlar gibi kullanışlı, özel bir şey arıyorum. Bir referansa eklenmiş bir tür not.
Noufal Ibrahim

2
Açıklamaları göstermez. Bence bu cevap yanıltıcı.
Pato Sandaña
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.