Git의 브랜치 설명


282

Git에서 브랜치에 대한 '설명'을 가질 수있는 방법이 있습니까?

설명적인 이름을 사용하려고 할 때 한 지점에서 잠시 일하면 때때로 다른 주제 지점 중 일부를 만든 이유에 대한 기억이 약해집니다. 브랜치에 설명적인 이름을 사용하려고 시도하지만 '설명'(브랜치의 목적에 대한 짧은 메모)이 좋을 것이라고 생각합니다.


1
나는 비슷한 문제 가 있었다 . 이 파일을 사용하여 브랜치 및 그 이유 (다른 것들 중에서)를 문서화합니다.
테미스

2
이것은 정말 유용한 기능입니다. git branch -a는 브랜치 이름 옆에 설명을 표시 할 수 있습니다. 어쩌면 git notes는 향후 커밋뿐만 아니라 브랜치에 대한 노트를 지원할 것입니까?
jhabbott

1
지점 설명은 푸시 할 수 없으므로 자신에게 메시지를 보내지 않으면 쓸모가 없습니다.
nurettin

@nurettin 사실이지만 내 요청은 어쨌든 개인 물건이었습니다. 나는 왜 내가 가지를 자르는 지 기억하고 싶었다.
Noufal Ibrahim 2016 년

답변:


200

Git 1.7.9가이를 지원합니다. 로부터 1.7.9 릴리스 노트 :

 * "git branch --edit-description"을 사용하여 설명 텍스트를 추가 할 수 있습니다
   주제 분기에 대해 설명합니다.

커밋 6f9a332 , 739453a3 , b7200e8 과 함께 2011 년 9 월에 다시 도입 된 기능을 볼 수 있습니다 .

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

--edit-description::

편집기를 열고 텍스트를 편집하여 분기가 무엇인지 설명하고 다양한 다른 명령 (예 :)에 사용 request-pull하십시오.

분리 된 HEAD 브랜치에서는 작동하지 않습니다.

그 설명은 스크립트 요청 풀에서 사용되는 : 참조 c016814783를 저지 뿐만 아니라 git merge --log.

request-pull 표준 출력에 대한 두 커밋 간의 변경 사항을 요약하고 생성 된 요약에 지정된 URL을 포함하는 데 사용되는 스크립트입니다.

[@AchalDave에서] 안타깝게도 설명이 구성에 저장되어 있기 때문에 설명을 푸시 할 수 없으므로 팀의 지점을 문서화하는 데 쓸모가 없습니다.


17
@Owen : 현재 내가 아는 유일한 방법 git config branch.topic.description은 branch에 대한 설명을 보여주는 것 topic입니다. .git/config파일에 저장 됩니다.
Greg Hewgill

12
@GregHewgill 감사합니다. 별명을 사용하면 실제로 볼 수있는 나쁜 방법이 아닙니다. 이제 git branch목록에 설명 만 표시 한다면 ...
Owen

4
이 때, 요점을 사용할 수하지 않는 것 이전의 주석에서 인용하지만,이 나타납니다 비슷한 수 : gist.github.com/carlosayam/5316969
pfalcon

166
불행히도 설명은 구성에 저장되어 있기 때문에 설명을 푸시 할 수 없으므로 팀의 지점을 문서화하는 데 쓸모가 없습니다.
Achal Dave

2
@PedroRodrigues 슬프게도 당신의 요지 링크가 깨졌습니다
UpAndAdam

40

당신이 경우 않는 있는 README를 사용하게하는 생성 자식 별칭 수정 git checkout하여 README 당신이 가지를 전환 할 때마다 표시되도록합니다.

예를 들어 ~ / .gitconfig의 [alias] 아래에 추가하십시오 .

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

이 후, 당신은 실행할 수있는 git cor <branch_name>스위치 지점에 당신이 전환하고있는 지점의 README를 표시합니다.


저에게는 $ 1 변수가 작동하지 않습니다. 아무것도 포함되어 있지 않습니다. 이유를 모르겠습니다 (버전을 사용하고 있습니다 1.7.11-msysgit.1). 대신 $ 0를 사용하고 있습니다. 그리고 모든 것이 좋습니다.
shytikov

이식성을 위해 인수를 사용하는 자식 별칭의 경우 @shytikov " sh -c" 대신 빠른 기능을 사용합니다 . 예를 들어. alias = "!f() { git checkout "${1}" && cat README.md; }; f" (이 경우 불필요한 괄호와 인용 부호는 좀 더 복잡한 것이 필요할 경우 완전성을 위해 포함되었습니다.)
michael

@michael_n 당신의 별명은, bash 별명 또는 git 별명입니다
UpAndAdam

유일한 문제는 체크 아웃 할 때 README가 폴더에 없으면 불만이 있다는 것입니다.
UpAndAdam

이에 정의 된 자식 별명이다 @UpAndAdam ~/.gitconfig아래 [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 ll같습니다 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 년 전에 게시 된 답변과 어떻게 다릅니 까?
피터 Mortensen


28

README제안 크리스 J , 작업 할 수 그것으로 설정되어 제공되는 A의 정의 된 사용자 정의 병합 드라이버.gitattribute .
이렇게하면 병합 중 로컬 버전 README이 항상 유지됩니다.

분기에 대한 "설명"은 해당 메타 데이터와 관련된 "설명"으로도 알려져 있으며 지원되지 않습니다.

적어도 README파일을 사용하면 모든 브랜치에서 다음을 수행 할 수 있습니다.

$ git show myBranch:README

README가 REPO의 루트 디렉토리에있는 경우 사용되는 경로 git show는 해당 repo의 최상위 디렉토리에있는 절대 경로이므로 모든 경로에서 작동 합니다.


3
팀의 모든 사람들이 이것을 알고 그들이 원하는 경우 개별적으로 .gitattribute에 설정해야합니까? 그렇다면, 이것은 관리하기 어려울 것 같으며 사람들이 실제로 그렇게 할 가능성은 적습니다.
돈 해치

@ Don Hatch : 일반적으로 .gitattributes파일을 저장소에 체크인 하므로 모든 사람에게 적합합니다. 불행히도 Azure DevOps에서 풀 요청을 사용할 때와 같이 일부 웹 기반 인터페이스를 병합 할 때 작동하지 않는 것 같습니다.
Soren Bjornstad

19

여기에 두 가지 인기있는 제안이 있습니다.

  1. git branch --edit-description: 당신이 그것을 밀 수 없기 때문에 우리는 이것을 좋아하지 않습니다. 어쩌면 내가 만든 지점이 무엇인지 기억할 수 있지만 팀은 확실히 할 수 없습니다.
  2. README파일 홍보 분기. 병합 과정에서 발생하는 어려움은 다음과 같습니다. 충돌이 발생하기 쉬우 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를 마스터로 가질 있습니다. 그것은 혼란을 더할 것이지만 항상 접근 할 수 있습니다.
피터-모니카 복직 자

2
@ PeterA.Schneider : 물론입니다. 그러나 새 브랜치를 추가하려면 변경 사항이 master와 관련이 없지만 마스터에 대한 커밋이 필요합니다. 또한 마스터에서 분기 할 때 모든 분기에 README 사본이 있습니다.
피터 V. Mørch

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"
aug

1
@aug-인수를 인용하기 전에 백 슬래시를 제거해야합니다.git config --global --add alias.about '!describe() { git config branch."$(git symbolic-ref --short -q HEAD)".description; }; describe'
Tom 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

일반적으로 브랜치 이름과 관련된 태그가 있거나 tag -f를 사용하여 주석이 달린 태그를 토픽 브랜치의 헤드에 유지할 수 있습니다.


13
이는 지점장을 추적하지 않기 때문에 이상적이지 않습니다
AndyL

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

1
@KaspervandenBerg : -1- 카드를 뽑는 대신 댓글을 남기고 잠시 기다렸다가, 게시물을 변경하지 않으려는 경우, 그 / 그녀가 그 사이트를 방문한 것을 볼 수 있습니다. 철자. 또는 정답이 여전히 올바른지 확인하기 위해 주어진 모든 답변 정기적으로 확인합니까?
Sebastian Mach

1
@phresnel : 좋은 지적; 저의 의도는이 질문에 대한 미래의 요청자들을 돕고 좋은 anwers가 정상에 오도록하고 잘못된 것을 아래로 향하게하는 것이 었습니다. 그것은 Chris J를“처벌”하지 않고 평판을 잃게 만들었습니다. 불행하게도 사이트 내 투표 :( 잠겨 말한다.
캐스퍼 반 베르그 덴

1
@ KaspervandenBerg : 나는 당신이 징벌을 의심하는 데 조금 빠릅니다. 죄송합니다.
Sebastian Mach

0

선택한 대답은 나에게 과잉 것 같습니다. 나는 정상적인 소스 제어 파일, 말이고 지점마다 설명 파일 유지하는 경향 거라고 master.txt, dev.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

아 예. 주석에 언급되어 있습니다.
Caleb Miller


-3

사용하다

git branch --list -v

업스트림 지점을 표시하려면

git branch --list -vv

-r리모컨 만 표시하거나 -a리모컨 및 로컬을 표시 하려면 추가하십시오 .


이것들처럼 유용합니다, 나는 뭔가 관습을 찾고 있습니다. 어떤 종류의 메모가 참조에 첨부되었습니다.
Noufal Ibrahim

2
설명이 표시되지 않습니다. 이 답변이 잘못된 것이라고 생각합니다.
Pato Sandaña
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.