Deskripsi cabang di Git

282

Apakah ada cara di Git untuk memiliki 'deskripsi' untuk cabang?

Sementara saya mencoba menggunakan nama deskriptif, bekerja sebentar di satu cabang terkadang mengurangi ingatan saya mengapa saya membuat beberapa cabang topik lainnya. Saya mencoba menggunakan nama deskriptif untuk cabang, tapi saya pikir 'deskripsi' (catatan singkat tentang tujuan cabang) akan menyenangkan.

Noufal Ibrahim
sumber
1
Saya punya masalah serupa . Saya menggunakan file itu untuk mendokumentasikan cabang dan mengapa mereka ada (antara lain).
themis
2
Ini akan menjadi fitur yang sangat berguna. git branch -a bisa menampilkan deskripsi di sebelah nama cabang. Mungkin git note akan mendukung catatan di cabang serta melakukan di masa depan?
jhabbott
1
Deskripsi cabang tidak dapat didorong, sehingga tidak berguna kecuali Anda ingin mengirim pesan kepada diri sendiri.
nurettin
@nurettin Benar tapi permintaan saya adalah untuk barang pribadi. Saya hanya ingin mengingat mengapa saya memotong cabang.
Noufal Ibrahim

Jawaban:

200

Git 1.7.9 mendukung ini. Dari catatan rilis 1.7.9 :

 * "git branch --edit-description" dapat digunakan untuk menambahkan teks deskriptif
   untuk menjelaskan tentang apa topik cabang.

Anda dapat melihat fitur yang diperkenalkan kembali pada September 2011, dengan komit 6f9a332 , 739453a3 , b7200e8 :

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

--edit-description::

Buka editor dan edit teks untuk menjelaskan untuk apa cabang, untuk digunakan oleh berbagai perintah lain (misalnya request-pull).

Perhatikan bahwa ini tidak akan berfungsi untuk cabang HEAD yang terpisah.

Uraian itu digunakan oleh tarikan permintaan skrip: lihat commit c016814783 , tetapi juga git merge --log.

request-pull adalah skrip yang digunakan untuk merangkum perubahan antara dua commit ke output standar, dan menyertakan URL yang diberikan dalam ringkasan yang dihasilkan.

[Dari @AchalDave] Sayangnya, Anda tidak dapat mendorong deskripsi karena disimpan di konfigurasi Anda, menjadikannya tidak berguna demi mendokumentasikan cabang dalam tim.

Greg Hewgill
sumber
17
@Owen: Satu-satunya cara yang saya tahu saat ini adalah menggunakan git config branch.topic.descriptionuntuk menampilkan deskripsi untuk cabang topic. Itu disimpan dalam .git/configfile.
Greg Hewgill
12
@GregHewgill Terima kasih. Dengan beberapa alias itu sebenarnya bukan cara yang buruk untuk melihatnya. Sekarang jika hanya git branchakan menunjukkan deskripsi dalam daftar ...
Owen
4
Pada saat ini, intisari dikutip dalam komentar sebelumnya tampaknya tidak tersedia, tetapi ini tampaknya serupa: gist.github.com/carlosayam/5316969
pfalcon
166
Sayangnya, Anda tidak dapat mendorong deskripsi karena disimpan dalam konfigurasi Anda, menjadikannya tidak berguna demi mendokumentasikan cabang dalam tim.
Achal Dave
2
@PedroRodrigues sayangnya tautan inti Anda rusak
UpAndAdam
40

Jika Anda tidak berakhir dengan menggunakan README, membuat git alias memodifikasi git checkoutsehingga README Anda ditampilkan setiap kali Anda beralih cabang.

Sebagai contoh, tambahkan ini di ~ / .gitconfig, di bawah [alias]

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

Setelah ini, Anda dapat menjalankan git cor <branch_name>untuk beralih cabang dan menampilkan README dari cabang yang Anda pindah.

tta
sumber
Bagi saya $ 1 variabel tidak berfungsi - tidak mengandung apa pun. Saya tidak tahu mengapa (saya menggunakan versi 1.7.11-msysgit.1). Saya menggunakan $ 0 sebagai gantinya. Dan semuanya baik-baik saja.
shytikov
@shytikov untuk alias git yang menggunakan argumen, untuk portabilitas, saya menggunakan fungsi cepat alih-alih " sh -c"; misalnya,. alias = "!f() { git checkout "${1}" && cat README.md; }; f" (tanda kurung dan kutipan tidak perlu dalam kasus ini, hanya disertakan untuk kelengkapan jika mereka diperlukan untuk sesuatu yang lebih rumit.)
michael
@michael_n alias Anda, adalah alias bash atau alias git
UpAndAdam
Satu-satunya masalah adalah bahwa jika README tidak ada di folder Anda saat Anda checkout itu hanya mengeluh.
UpAndAdam
@UpAndAdam itu adalah alias git, didefinisikan dalam ~/.gitconfig, di bawah [alias], dan nama alias sebenarnya (dan dapat dimengerti membingungkan) dipanggil aliasdari konfigurasi saya yang sebenarnya (saya seharusnya menamainya coruntuk contoh ini agar konsisten). aliasAlias saya yang sebenarnya adalah: alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f" Penggunaan: git alias {alias_name}atau git alias {alias_regexp}. Analog dengan aliasperintah bash , misalnya, $ alias llmenghasilkan (untuk saya) alias ll='ls -l':; dan $ git alias brhasil: alias.br branch -v --list(bisa juga menggunakan: $ git alias 'b.*')
michael
31

Menggunakan git branch --edit-description untuk mengatur atau mengedit deskripsi cabang.

Berikut adalah fungsi shell untuk menampilkan cabang yang mirip git branchtetapi dengan deskripsi yang ditambahkan.

# 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
}

Berikut ini gbtampilannya, ditampilkan di sini sebagai teks jika gambar membusuk:

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

Dan sebagai gambar, sehingga Anda dapat melihat warna:

masukkan deskripsi gambar di sini

jsageryd
sumber
Bagaimana ini berbeda dari jawaban yang diterima (diposting lebih dari satu tahun sebelumnya)?
Peter Mortensen
28

The READMEdisarankan oleh Chris J dapat bekerja, asalkan itu adalah setup dengan sopir merge kustom didefinisikan dalam.gitattribute .
Dengan begitu, versi lokalREADME selalu dipertahankan selama penggabungan.

"Deskripsi" untuk cabang juga dikenal sebagai "komentar" yang terkait dengan data meta itu, dan itu tidak didukung.

Setidaknya, dengan READMEfile, Anda dapat, untuk cabang apa pun, melakukan:

$ git show myBranch:README

Jika README Anda berada di direktori root REPO Anda, itu akan bekerja dari jalur apa pun, karena jalur yang digunakan oleh git showadalah mutlak dari direktori teratas dari repo tersebut.

VONC
sumber
3
Apakah semua orang di tim harus mengetahui hal ini dan memasukkannya ke dalam git. Memberikan kontribusi secara individual jika mereka menginginkannya? Jika demikian, menurut saya ini akan sulit untuk dikelola, dan peluang orang benar-benar melakukannya akan langsing.
Don Hatch
@ DonHatch: Anda biasanya memeriksa .gitattributesfile di repositori Anda, jadi tidak, itu hanya akan berfungsi untuk semua orang. Sayangnya ini tampaknya tidak berfungsi ketika menggabungkan melalui beberapa antarmuka berbasis web, misalnya, ketika menggunakan permintaan tarik di Azure DevOps.
Soren Bjornstad
19

Ada dua saran populer di sini:

  1. git branch --edit-description: Kami tidak suka ini karena Anda tidak bisa mendorongnya. Mungkin saya bisa mengingat apa yang dilakukan cabang-cabang yang saya buat, tetapi tim saya pasti tidak bisa.
  2. READMEfile pr. cabang. Ini menyusahkan selama penggabungan: Sangat rentan untuk menggabungkan konflik dan kami akan menarik READMEdari cabang ketika kami menggabungkan cabang fitur. Perbedaan antar cabang juga menyebalkan.

Kami telah memutuskan untuk membuat branches-readmecabang yatim . Cabang-cabang yatim adalah cabang-cabang dengan sejarah mereka sendiri yang terpisah - Anda mungkin mengenal mereka dari gh-pagescabang - cabang Github . Cabang yatim ini berisi satu READMEfile. Ini memiliki konten seperti:

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

Ini push-mampu dan ramah-gabung. Lihat READMEdari cabang mana saja dengan:

git show branches-readme:README

Kerugiannya adalah Anda harus checkout cabang yatim aneh ketika Anda ingin memperbarui READMEdan READMEtidak memperbarui secara otomatis ketika cabang diganti nama, datang atau pergi. Tapi itu baik untuk kita.

Lakukan seperti:

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

Serupa, anggota tim individu juga dapat membuat branches-$usercabang yatim mereka sendiri menggambarkan cabang pribadi mereka jika mereka mau, selama mereka tidak mendorong mereka ke tim.

Dengan tooling lebih lanjut, ini juga dapat diintegrasikan dengan output git branch. Untuk itu, mungkin sebuah README.yamlfile dapat dianggap sebagai ganti file biasa README.

Peter V. Mørch
sumber
Seseorang hanya dapat memiliki README di master. Itu akan menambah kekacauan tetapi selalu dapat diakses.
Peter - Reinstate Monica
2
@ PeterA.Schneider: Tentu, tetapi kemudian menambahkan cabang baru akan membutuhkan komit untuk dikuasai meskipun perubahan tidak ada hubungannya dengan master. Juga, ketika bercabang dari master, Anda akan memiliki salinan README di semua cabang, yang ia berantakan.
Peter V. Mørch
10
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

Perintah akan menentukan opsi global alias.aboutsebagai ekspresi shell. Berjalan git about <branch>di repositori akan menampilkan deskripsi cabang jika disetel.

Felicio
sumber
4
Terima kasih! Saya mengubahnya jadi hanya terlihat pada cabang saya di -"!describe() { git config branch.\"$(git symbolic-ref --short -q HEAD)\".description; }; describe"
Agustus
1
@ aug - Saya harus meletakkan backslash di depan kutipan argumen agar ini berfungsi:git config --global --add alias.about '!describe() { git config branch."$(git symbolic-ref --short -q HEAD)".description; }; describe'
Tom Tresansky
5

Berikut adalah kemungkinan implementasi dari git branchesperintah yang disinggung oleh Greg Hewgill:

#!/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";
}
Owen
sumber
4

Inilah git aliasyang memungkinkan Anda mengatur dan membaca deskripsi di cabang saat ini:

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

Penggunaan / contoh:

(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

Terima kasih khusus kepada @Felicio untuk jawaban yang membuat saya mulai.

Wayne
sumber
Bagus! Apakah bisa dikompilasi ke shell atau ohmyzsh?
mqliutie
2

Anda dapat melampirkan komentar ke tag:

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

Secara konvensi, Anda dapat memiliki tag yang terkait dengan nama cabang Anda atau Anda dapat menggunakan tag -f untuk menyimpan tag komentar di kepala cabang topik Anda.

Jamey Hicks
sumber
13
ini tidak ideal karena tidak melacak kepala cabang
AndyL
1

Katakanlah Anda ingin membuat cabang

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

Saya cukup yakin bahwa fitur saat ini tidak didukung. Saya pikir taruhan terbaik Anda adalah membuat file teks deskripsi, README pada dasarnya, di cabang yang memiliki informasi yang Anda inginkan.

Chris J
sumber
4
Saya harus khawatir tentang (tidak) menggabungkan file ini di seluruh cabang. Bukan?
Noufal Ibrahim
1
@KaspervandenBerg: Mungkin hanya meninggalkan komentar alih-alih mengeluarkan kartu -1, lalu tunggu beberapa saat, dan jika penanya tidak mau mengubah pos, tetapi Anda melihat dia mengunjungi situs ini sementara itu, mengejanya. Atau apakah Anda secara teratur memeriksa semua jawaban yang diberikan untuk melihat apakah jawaban itu masih benar?
Sebastian Mach
1
@phirnel: poin bagus; maksud saya adalah untuk membantu para penanya di masa depan dari pertanyaan ini dan memiliki jawaban yang baik ke atas dan yang salah ke bawah, itu bukan untuk "menghukum" Chris J dan menyebabkan dia kehilangan reputasi. Sayangnya situs mengatakan suara saya terkunci :(.
Kasper van den Berg
1
@KaspervandenBerg: Saya agak cepat mencurigai Anda menghukum, maaf.
Sebastian Mach
0

Jawaban yang dipilih sepertinya berlebihan bagi saya. Aku akan cenderung untuk mempertahankan file deskripsi per cabang yang merupakan sumber dikendalikan file normal, katakanlah master.txt, dev.txt, dll dan jika ada nomor atau cabang berat saya akan membuat hirarki untuk lebih mengatur itu.

piyama0
sumber
6
Maka Anda harus khawatir tentang menggabungkan file-file ini ke setiap cabang lain, atau ingat untuk menggunakan git show master:dev.txtyang tidak lebih sederhana dari jawaban yang dipilih.
Sridhar Ratnakumar
0

Cukup gunakan:

git config branch.<branch name>.description

Untuk memberikan kredit saat kredit jatuh tempo: https://glebbahmutov.com/blog/git-branches-with-description/

Caleb Miller
sumber
Ini ditambahkan dalam versi git yang dirilis setelah saya menambahkan pertanyaan. Jawaban yang diterima menyebutkan ini.
Noufal Ibrahim
Ah iya. Itu disebutkan dalam komentar.
Caleb Miller
Meskipun jalan pintas, bukankah ini pada dasarnya identik dengan jawaban yang diterima? - "Sayangnya, Anda tidak dapat mendorong deskripsi karena disimpan di konfigurasi Anda, menjadikannya tidak berguna demi mendokumentasikan cabang dalam tim."
Peter Mortensen
-3

Menggunakan

git branch --list -v

untuk menampilkan cabang hulu:

git branch --list -vv

Tambahkan -runtuk menampilkan hanya remote atau -auntuk menunjukkan remote dan lokal.

Markus Hartman
sumber
Berguna seperti ini, saya mencari sesuatu yang khusus. Catatan dari beberapa jenis yang dilampirkan pada referensi.
Noufal Ibrahim
2
Itu tidak menunjukkan deskripsi. Saya pikir jawaban ini menyesatkan.
Pato Sandaña