programing

Git의 분기 설명

stoneblock 2023. 5. 9. 22:03

Git의 분기 설명

Git에서 가지에 대한 '설명'을 할 수 있는 방법이 있습니까?

제가 설명적인 이름을 사용하려고 하는 동안, 한 지점에서 잠시 일을 하는 것은 제가 왜 다른 항목의 지점을 만들었는지에 대한 제 기억을 약화시킵니다.저는 지점에 설명적인 이름을 사용하려고 노력하지만, '설명'(지점의 목적에 대한 짧은 메모)이 좋을 것 같습니다.

Git 1.7.9는 이를 지원합니다.1.7.9 릴리스 정보:

"git branch --edit-description"을 사용하여 설명 텍스트를 추가할 수 있습니다.주제 분기가 무엇에 관한 것인지 설명합니다.

이 기능은 2011년 9월에 커밋 6f9a332, 739453a3, b7200e8과 함께 도입되었습니다.

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

--edit-description::

사용할 수 편를편예분집설용다명다고른명양령한하도를기여의하를트스열텍고집기:request-pull).

분리된 HEAD 분기에는 작동하지 않습니다.

이 설명은 스크립트 request-pull에서 사용됩니다. commit c016814783도 참조하십시오.

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

[@AchalDave에서] 안타깝게도 설명은 사용자 구성에 저장되어 팀 내 분기를 문서화하기 위해 사용할 수 없기 때문에 푸시할 수 없습니다.

README를 사용하게 되면 Git 별칭을 생성합니다. 수정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 에서 정의된 사용자 지정 병합 드라이버로 설정된 경우 Chris J가 제안한 를 사용할 수 있습니다.
그런 방식으로, 로컬 버전의README병합 중에는 항상 보존됩니다.

분기에 대한 "설명"은 해당 메타데이터와 연결된 "설명"이라고도 하며, 지원되지 않습니다.

어도와 , 과함께것과 함께.README파일, 모든 분기에 대해 다음 작업을 수행할 수 있습니다.

$ git show myBranch:README

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

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

  1. git branch --edit-description우리는 당신이 그것을 밀 수 없기 때문에 이것을 좋아하지 않습니다.제가 만든 지점들이 무엇을 하는지 기억할 수 있을지도 모르지만, 저희 팀은 확실히 기억할 수 없습니다.
  2. README 중의 입니다.병합 중에 발생하는 문제입니다.충돌을 병합하기가 매우 쉬우므로 우리는 여기에 참여할 것입니다.README피쳐 분기를 병합할 때 분기에서.나뭇가지 사이의 차이도 고통입니다.

branches-readme분점입. 고아 를 가진 입니다 - 고아가역가사진가를지다니한유고는지▁orphan▁them 알 수 있습니다. Github's에서 알 수 있습니다.gh-pages나뭇가지.이 고아 분기에는 단일 항목이 포함되어 있습니다.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

만의 " 가지로팀구, 개별도자신팀의만다수있을들습니구원성마원성찬▁their다▁sim있▁also니습▁members▁create수"를 만들 수도 있습니다."를 만들 수도 있습니다.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 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에게 특별한 감사를 드립니다.

가능한 구현 방법은 다음과 같습니다.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";
}

분기를 만들고 싶다고 합니다.

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

태그에 주석을 첨부할 수 있습니다.

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

일반적으로 분기 이름과 관련된 태그를 사용하거나 tag -f를 사용하여 주석이 달린 태그를 항목 분기의 맨 앞에 둘 수 있습니다.

사용할 수 있습니다.

git config --get-regexp "branch.*.description"

그냥 사용:

git config branch.<branch name>.description

신용이 있어야 할 곳에 신용을 부여하기 위해: https://glebbahmutov.com/blog/git-branches-with-descriptions/

저는 그 기능이 현재 지원되지 않는다고 확신합니다.제 생각에 당신이 원하는 정보를 가진 지점에 설명 텍스트 파일, 즉 README를 만드는 것이 최선의 방법이라고 생각합니다.

선택한 답은 나에게 과잉 살상인 것 같습니다.는 일반적인 를 들어, 나 일 반 적 파 유 는 하 지 경 이 향 있 습 니 다 을 일 는 설 명 별 기 분 인 일 인 소 파 스 어 제 ▁i ▁say , ▁that ▁contro ▁a ▁to ▁desc ▁be d ription ▁branch ▁source 나는 습 니 다 ▁file ▁maintainmaster.txt,dev.txt 나는 그것을더 잘입니다. 등, 그고다루기힘든숫자그나것더는을다잘기정만하것니리위입계구들조를해층리다면점있나이지▁etc▁to,▁or▁hierarchy등다▁i것만니▁a입들▁if▁it▁create▁and▁thered그'▁branches▁better.

Greg Hewgill2012년 답변과 관련하여 Git 1.7.9 (2012년 1분기)는 다음에 대한 몇 가지 확인 사항을 포함했습니다.git branch --edit-description:

주니오 C 하마노()gitster의 commit c2d17ba(2012년 2월 5일)를 참조하십시오.
(주니오 C 하마노에 의해 합병됨 -- -- 2012년 2월 10일, 88698e로 확정됨)

branch --edit-description잘못된 지점 이름으로부터 보호

설명을 편집할 때 지점 이름을 잘못 입력하기가 매우 쉽습니다.

$ git checkout -b my-topic master
: work work work
: now we are at a good point to switch working something else
$ git checkout master
: ah, let's write it down before we forget what we were doing
$ git branch --edit-description my-tpoic

명령은 'my-tpoic' 분기가 존재하지 않음을 인식하지 못합니다.
이것은 분실되지 않았지만(태어나지 않은 my-tpoic 분기에 대한 설명이 됨), 그다지 유용하지 않습니다.
따라서 이러한 경우를 감지하고 이 흔한 실수로 인한 슬픔 요소를 줄이기 위해 오류를 범합니다.

부수적으로 오류가 발생합니다.--edit-description 않은때HEAD 태어않지가때은가지리킬를나가직후"▁(때(▁"▁the가▁afterately킬medihead▁when리)직im▁at후▁an(" ")" 직후)init또는 "checkout --orphan그의 이력의 있지 , 이 된 분기와 가 없기 입니다. 즉, 입니다."), 분기 설명이 캡처하도록 설계된 유용한 정보인 분기와 이 분기가 어떻게 다른지 설명하는 것은 의미가 없기 때문입니다.

태어나지 않은 경우는 나중에 특수하게 처리하고 싶지만, 1.7.9 시리즈가 너무 널리 사용되기 전에 더 많은 일반적인 실수를 방지하기 위해 이 패치의 범위 밖에 있습니다.


Greg Hewgill2012년 답변은 정확하지만, 다음을 사용합니다.git branch --edit-description다음을 초래할 수 있습니다.

fatal: could not unset 'branch.main.description'

Git 2.39(Q4 2022)로 수정된 고장이 발생했습니다GIT_EDITOR=: git branch --edit-description(man).

주니오 차마노()gitster의 위원회 288b3d(2022년 9월 30일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 2022년 10월 17일 커밋 272be0d에서)

절대 실패하지 branch않습니다.--edit-desc

분기 설명이 없는 분기에서 ""를 git branch --edit-description(man)실행한 다음 편집 버퍼를 비운 후 편집기를 종료하는 것을 상상해 보십시오. 편집 버퍼는 명령어에 마음이 바뀌었고 결국 설명을 원하지 않습니다.

이 명령은 현재 분기에 대한 분기 설명을 추가하지 않고 종료하기만 하면 됩니다.
하지만 그렇게 하지 못합니다.

$ git init -b main
$ git commit --allow-empty -m commit
$ GIT_EDITOR=: git branch --edit-description
fatal: could not unset 'branch.main.description'

결과 저장소에 구성 변수가 존재하지 않는다는 점에서 최종 결과는 문제가 없지만 더 나은 결과를 얻을 수 있습니다.
만약 우리가 설명이 없었다는 것을 알고 편집자로부터 설명을 받지 말라는 요청을 받는다면, 우리는 그냥 아무것도 하지 않고 돌아갈 수 있습니다.

이것은 당연히 TOCTOU를 소개합니다.

(Time-of-Check to-Time-of-Use(토코우): 시스템의 일부 상태(예: 보안 자격 증명)를 확인하고 해당 검사 결과를 사용하는 것과 관련된 경합 조건으로 인해 발생하는 소프트웨어 버그의 클래스입니다.)

다른 창에서 분기 설명을 동일한 분기에 추가할 경우 편집기를 열어 설명을 편집한 다음 편집기를 종료하면 다른 창에서 추가한 설명이 제거되지 않습니다.
하지만 당신은 그 시점에서 자신의 저장소에서 자신을 속이고 있으며, 만약 그것이 아프다면 그렇게 하지 않는 것이 좋을 것입니다 ;-).


또한:git branch --edit-description(man) 태어나지 않은 가지에 대한 ""는 Git 2.39(Q4 2022)로 수정된 해당 가지가 없다고 잘못 말했습니다.

루벤 쥐스토()rjusto의 commit bcfc82b(2022년 10월 8일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 2022년 10월 17일 커밋 4050354에서)

존재하지 않는 분기 오류에 대한 branch설명

사인 오프 바이: 루벤 쥐스토

리포지토리에 아직 커밋이 없는 경우 일부 오류는 분기가 없음을 나타냅니다.

$ git init -b first

$ git branch --edit-description first
error: No branch named 'first'.

$ git branch --set-upstream-to=upstream
fatal: branch 'first' does not exist

$ git branch -c second
error: refname refs/heads/first not found
fatal: Branch copy failed

그 "첫 번째" 가지는 태어나지 않았지만 존재하지 않는다고 말하는 것은 혼란스럽습니다.

옵션 "-c"(복사본)와 "-m"(이름 변경)은 오리진 분기가 존재하지 않을 때 동일한 오류를 표시합니다.

$ git branch -c non-existent-branch second
error: refname refs/heads/non-existent-branch not found
fatal: Branch copy failed

$ git branch -m non-existent-branch second
error: refname refs/heads/non-existent-branch not found
fatal: Branch rename failed

고참:"--edit-description명시적인 인수가 없는 경우 이미 해당 오류에서 빈 리포지토리 상황을 고려하고 있습니다.
한또"도 하십시오.-m초기 분기에서는 허용되는 작업입니다.

생성되지 않았거나 존재하지 않는 분기가 있는 분기 작업에 대한 오류 설명을 더 자세히 설명합니다.

변경 결과는 다음과 같습니다.

$ git init -b first

$ git branch --edit-description first
error: No commit on branch 'first' yet.

$ git branch --set-upstream-to=upstream
fatal: No commit on branch 'first' yet.

$ git branch -c second
fatal: No commit on branch 'first' yet.

$ git branch [-c/-m] non-existent-branch second
fatal: No branch named 'non-existent-branch'.

Git 2.39(git branch --edit-description @{-1}(man)Q4 2022)에서는 ""가 현재 분기로 전환하기 전에 사용했던 분기의 분기 설명을 편집할 수 있습니다.

루벤 쥐스토()rjusto의 커밋 0dc4e5c(2022년 10월 11일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- commit c2058ea, 2022년 10월 21일)

branch바로 가기에 대한 지원@{-1}됨, 확인됨

사인 오프 바이: 루벤 쥐스토

"edit-description", "set-description-to", "unset-description", "unset-description" 분기입니다.
ae5a6c3 이후(checkout"현구를 합니다.@{-N}N번째 마지막 분기의 바로 가기 이름, 2009-01-17, Git v1.6.2-rc0 -- 병합), 다음과 같은 바로 가기를 사용하여 분기를 지정할 수 있습니다.@{-1}.
인수를 고려할 때 이러한 바로 가기를 해결해야 합니다.

다음을 사용하여 이전에 체크아웃한 분기에 대한 설명을 수정할 수 있습니다.

 $ git branch --edit--description @{-1}

다음을 사용하여 이전에 체크아웃한 지점의 업스트림을 수정할 수 있습니다.

 $ git branch --set-upstream-to upstream @{-1}
 $ git branch --unset-upstream @{-1}

사용하다

git branch --list -v

업스트림 분기 표시하기

git branch --list -vv

더하다-r 리모컨만 -a원격 및 로컬을 표시합니다.

언급URL : https://stackoverflow.com/questions/2108405/branch-descriptions-in-git