Gitでのブランチの説明


282

ブランチに「説明」を付ける方法はGitにありますか?

説明的な名前を使おうとしていますが、単一のブランチでしばらく作業すると、他のトピックブランチをいくつか作成した理由を思い出すことが時々あります。私はブランチにわかりやすい名前を付けようとしていますが、「説明」(ブランチの目的についての短いメモ)がいいと思います。


1
私が持っていた同様の問題を。私はそのファイルを使用して、ブランチとそれらが存在する理由(とりわけ)を文書化します。
themis

2
これは本当に便利な機能です。git branch -aは、ブランチ名の横に説明を表示できます。たぶんgit notesは将来のブランチだけでなくコミットに関するノートもサポートするでしょうか?
jhabbott、2011年

1
ブランチの説明はプッシュできないので、自分にメッセージを送信したい場合を除いて、ほとんど役に立ちません。
ヌレッティン

@nurettin真実ですが、私のリクエストはとにかく私的なものに対するものでした。どうして枝を切ったのかを思い出したかっただけです。
Noufal Ibrahim

回答:


200

Git 1.7.9はこれをサポートしています。1.7.9のリリースノート

 *「git branch --edit-description」を使用して説明テキストを追加できます
   トピックブランチとは何かを説明します。

あなたがコミットして、2011年9月に戻って導入されたその機能を見ることができます6f9a332739453a3b7200e8

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

--edit-description::

エディターを開き、テキストを編集して、ブランチの目的を説明し、他のさまざまなコマンド(などrequest-pull)で使用します。

切り離されたHEADブランチでは機能しないことに注意してください。

その説明は、スクリプト要求プルで使用されている:参照c016814783をコミットするだけでなく、git merge --log

request-pull 標準出力への2つのコミット間の変更を要約するために使用されるスクリプトであり、生成された要約に特定のURLを含めます。

[@AchalDaveから]残念ながら、説明はconfigに保存されているためプッシュできません。チームのブランチを文書化するためには役に立たないからです。


17
@オーウェン:私が現時点で知っている唯一の方法は、を使用git config branch.topic.descriptionしてブランチの説明を表示することtopicです。.git/configファイルに保存されます。
グレッグヒューギル

12
@GregHewgillありがとうございます。いくつかのエイリアスを使用すると、実際にそれを表示するのに悪い方法ではありません。今git branchリストに説明を表示するだけの場合...
オーウェン

4
現時点では、前のコメントで引用されている要旨は利用できないようですが、これは類似しているようです:gist.github.com/carlosayam/5316969
pfalcon '27

166
残念ながら、説明はconfigに保存されているため、プッシュすることはできません。チーム内のブランチを文書化するためには役に立たなくなります。
Achal Dave 2013

2
@PedroRodrigues悲しいことにあなたの要旨のリンクが壊れています
UpAndAdam

40

あなたがいる場合 READMEを使用して終了、作成Gitのエイリアス変更git checkoutあなたのREADMEは、あなたが枝を切り替えるたびに表示されるように。

たとえば、これを[エイリアス]の下の〜/ .gitconfigに追加します

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

この後は、実行することができますgit cor <branch_name>スイッチブランチにあなたに切り替えている枝のREADMEを表示します。


私にとって、$ 1変数は機能していません。何も含まれていません。理由はわかりません(バージョンを使用しています1.7.11-msysgit.1)。代わりに$ 0を使用しています。そして、すべてが大丈夫です。
shytikov

引数を使用するgitエイリアスの@shytikov、移植性のために、 " sh -c"の代わりにクイック関数を使用します。例えば、。alias = "!f() { git checkout "${1}" && cat README.md; }; f" (この場合、括弧と引用符は不要です。より複雑なものに必要な場合に備えて、完全を期すために含まれています。)
michael


唯一の問題は、READMEがチェックアウトしたときのフォルダーにREADMEが含まれていない場合、それだけで問題があります。
UpAndAdam

@UpAndAdamこれは~/.gitconfig、under で定義されたgitエイリアスで[alias]あり、エイリアスの名前は実際に(そして当然のことながら紛らわしく)alias実際の構成から呼び出されます(corこの例を一貫させるために名前を変更する必要がありました)。私の実際のaliasエイリアスは: alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f" Usage:git alias {alias_name}またはgit alias {alias_regexp}です。bash aliasコマンドに似ています。たとえば、$ alias llyields(私にとって)alias ll='ls -l':; そして$ git alias br利回り:alias.br branch -v --list(も使用できます。$ git alias 'b.*'
マイケル・

31

git branch --edit-descriptionブランチの説明を設定または編集するために使用します。

以下は、ブランチに似ているgit branchが説明が追加されたシェル関数です。

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

ここでは何であるgb画像腐敗場合にテキストとしてここに示されている、次のようになります。

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

そして画像として、色を見ることができます:

ここに画像の説明を入力してください


これは、受け入れられた回答(1年以上前に投稿されたもの)とどのように異なりますか?
Peter Mortensen、


28

定義されたカスタムマージドライバーで設定されている場合、Chris JREADMEによって提案されたものが機能します。 そうすることで、マージ時にローカルバージョンのが常に保持されます。.gitattribute
README

ブランチの「説明」は、そのメタデータに関連付けられた「コメント」とも呼ばれ、サポートされていません。

少なくとも、READMEファイルを使用すると、どのブランチでも次のことができます。

$ git show myBranch:README

READMEがREPOのルートディレクトリにある場合、が使用するパスgit showは、そのリポジトリの最上位ディレクトリからの絶対パスであるため、任意のパスから機能します。


3
チームの全員がこれを認識し、必要に応じて.gitattributeに個別に設定する必要がありますか?もしそうなら、これは管理するのが難しいように思え、実際にそれを行う人々の可能性はごくわずかになるでしょう。
ドンハッチ

@DonHatch:通常は.gitattributesファイルをリポジトリにチェックインするので、いいえ、それは誰にとっても機能します。残念ながら、これは、Azure DevOpsでプルリクエストを使用する場合など、一部のWebベースのインターフェイスを介してマージする場合には機能しないようです。
Soren Bjornstad

19

ここには2つの一般的な提案があります。

  1. git branch --edit-description:プッシュできないので、これは好きではありません。たぶん私が作成したブランチが何をするか覚えているかもしれませんが、私のチームは確かにできません。
  2. READMEファイルpr ブランチ。これはマージ中の苦痛です:競合をマージする傾向が非常に強く、README機能ブランチをマージするときにブランチからプルインします。ブランチ間の差異もまた苦痛です。

孤立したbranches-readmeブランチを作成することにしました。孤立したブランチは、独自の個別の履歴をgh-pages持つブランチです。Githubのブランチからそれらを知っているかもしれません。この孤立したブランチには、単一のREADMEファイルが含まれています。次のような内容です。

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

プッシュ可能で、マージに対応しています。READMEブランチからの表示:

git show branches-readme:README

不利な点は、更新したいときに奇妙な孤立したブランチをチェックアウトする必要があることREADMEと、READMEブランチの名前が変更されたり、来たり入ったりするときにが自動更新されないことです。しかし、それは私たちにとっては問題ありません。

次のようにします。

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

同様に、個々のチームメンバーはbranches-$user、チームにプッシュしない限り、必要に応じて、自分のプライベートブランチを表す独自の孤立したブランチを作成することもできます 。

さらにツールを使用すると、これをの出力と統合することもできgit branchます。そのために、おそらくREADME.yamlプレーンではなくファイルが考えられますREADME


一つは、単に可能性があり、マスターにREADMEを持っています。それは混乱を追加しますが、常にアクセス可能です。
ピーター-モニカの復活2017

2
@ PeterA.Schneider:もちろんですが、新しいブランチを追加すると、変更がマスターとはまったく関係なくても、マスターへのコミットが必要になります。また、マスターから分岐すると、すべての分岐にREADMEのコピーが作成されます。
PeterV.Mørch2017

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

コマンドは、グローバルオプションalias.aboutをシェル式として定義します。git about <branch>リポジトリで実行すると、設定されている場合はブランチの説明が表示されます。


4
ありがとう!それはちょうど私が上だ枝を見て、私はそれを変更-"!describe() { git config branch.\"$(git symbolic-ref --short -q HEAD)\".description; }; describe"
8月

1
@aug -私は仕事にこれを取得するには、引数の引用符の前にバックスラッシュをドロップするために必要な:git config --global --add alias.about '!describe() { git config branch."$(git symbolic-ref --short -q HEAD)".description; }; describe'
トムTresansky

5

以下は、git branchesGreg 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";
}

4

ここだgit aliasあなたにセットし、現在のブランチの読み取り記述の両方をすることができています:

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

使用法/例:

(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

私を始めた答えを@Felicioに特に感謝します。


いいね!シェルまたはohmyzshにコンパイルできますか?
mqliutie

2

タグにコメントを付けることができます:

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

慣例により、ブランチ名に関連するタグを付けるか、タグ-fを使用して、トピックブランチの先頭にコメントタグを付けます。


13
ブランチのヘッドを追跡しないため、これは理想的ではありません
AndyL、2011年

1

ブランチを作成したいとします

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

0

この機能は現在サポートされていません。私はあなたの最善の策は、あなたが欲しい情報を持っているブランチで説明テキストファイル、基本的にREADMEを作成することだと思います。


4
このファイルをブランチ間でマージする(しない)ことについて心配する必要があります。しませんか?
Noufal Ibrahim、2010

1
@KaspervandenBerg:-1-カードを引き出す代わりにコメントを残して、しばらく待ってください。そして、質問者が投稿を変更するつもりはないが、その間にこのサイトにアクセスしたことがわかった場合は、それを綴る。または、与えられたすべての回答定期的にチェックして、それらがまだ正しいかどうかを確認しますか?
セバスチャンマッハ

1
@phresnel:良い点。私の意図は、この質問の将来の質問者を助け、良い答えを上に、間違った答えを下にしてもらうことでした。クリスJに「罰」を与え、評判をゆるめることではありませんでした。残念ながら、サイトは私の投票がロックされていると言います
。– Kasper van den Berg '15

1
@KaspervandenBerg:申し訳ありませんが、あなたを罰した疑いは少し早かったです。
セバスチャンマッハ

0

選択した答えは私にはやり過ぎのようです。私は、通常のソース管理ファイルであるブランチごとの説明ファイルを維持する傾向があります。たとえばmaster.txtdev.txt扱いにくい数やブランチがある場合は、階層を作成してより適切に整理します。


6
次に、これらのファイルを他のすべてのブランチにマージすることを心配するgit show master:dev.txtか、選択した回答よりも簡単なものを使用することを忘れないでください。
Sridhar Ratnakumar、

0

ただ使用する:

git config branch.<branch name>.description

クレジットの期日にクレジットを付与するには:https : //glebbahmutov.com/blog/git-branches-with-descriptions/


これは、質問を追加した後にリリースされたバージョンのgitに追加されました。受け入れられた答えはこれに言及しています。
Noufal Ibrahim 2017

ああそう。コメントに記載されています。
Caleb Miller


-3

使用する

git branch --list -v

上流のブランチを表示するには:

git branch --list -vv

-rリモートのみ-aを表示するか、リモートとローカルを表示するように追加します。


これらが役に立つので、私は何かカスタムを探しています。参照に添付されたある種のメモ。
Noufal Ibrahim、2015

2
説明は表示されません。この答えは誤解を招くと思います。
パトサンダナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.