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의 최상위 디렉토리에있는 절대 경로이므로 모든 경로에서 작동 합니다.
답변
여기에 두 가지 인기있는 제안이 있습니다.
git branch --edit-description
: 당신이 그것을 밀 수 없기 때문에 우리는 이것을 좋아하지 않습니다. 어쩌면 내가 만든 지점이 무엇인지 기억할 수 있지만 팀은 확실히 할 수 없습니다.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 branches
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";
}