[git] Git의 브랜치 설명

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

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



답변

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


답변

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

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

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

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


답변

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.

그리고 이미지로서, 당신은 색상을 볼 수 있습니다 :

여기에 이미지 설명을 입력하십시오


답변

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

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

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

$ git show myBranch:README

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


답변

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

  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.


답변

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

명령은 전역 옵션 alias.about을 쉘 표현식으로 정의합니다 . git about <branch>리포지토리에서 실행 하면 설정된 경우 분기의 ​​설명이 표시됩니다.


답변

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";
}