programing

지역 깃브랜치가 존재하는지 알 수 있는 더 좋은 방법이 있습니까?

magicmemo 2023. 6. 20. 21:30
반응형

지역 깃브랜치가 존재하는지 알 수 있는 더 좋은 방법이 있습니까?

다음 명령을 사용하여 다음과 같은 로컬 깃 분기가 있는지 확인하고 있습니다.branch-name내 저장소에 존재합니다.이거 맞는건가요?더 좋은 방법이 있습니까?

제가 스크립트 안에서 이 작업을 수행 중입니다.이러한 이유로 가능하면 배관 명령어를 사용하고 싶습니다.

git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists. 

검색 엔진에서 '지점이 존재하는지 확인'을 검색하면 이 페이지가 가장 먼저 표시됩니다.

저는 제가 원하는 것을 얻었지만, 원래 게시물이 2011년부터였기 때문에 업데이트된 답변을 드리고 싶습니다.

git rev-parse --verify <branch_name>

이것은 기본적으로 승인된 답변과 동일하지만 "refs/heads/<branch_name>"에 입력할 필요는 없습니다.

그래서 셸 스크립트에서, 이것은.

if [ `git rev-parse --verify main 2>/dev/null` ]
then
   ...
fi

제가 알기로는 대본에서 그렇게 하는 것이 가장 좋은 방법입니다.거기에 추가할 것이 훨씬 더 있는지는 모르겠지만, "그 명령은 당신이 원하는 모든 것을 수행합니다"라고 말하는 답이 하나 더 있을 수도 있습니다:)

하고 싶은 될 수 입니다. 은 지점이포수있주로할의야다같사다니습음항과은해으므함될름놀문자라에가운▁want▁names▁the다니같▁can습▁quote▁to▁mayers다▁in▁branch▁that점음▁so▁surpr▁you▁have지과▁you▁thing▁want▁is▁might▁careful▁only▁of▁themising,▁charact를 인용하는 것이 좋습니다.<branch-name>.

를 합니다.git show-ref --quiet refs/heads/$name.

  • --quiet출력이 없음을 의미합니다. 그러면 종료 상태를 깨끗하게 확인할 수 있기 때문에 좋습니다.

  • refs/heads/$name이름과 합니다("는 "full name"dev일치할 것입니다.develop)

스크립트에서의 사용:

if git show-ref --quiet refs/heads/develop; then
    echo develop branch exists
fi

거의 다 왔습니다.

그냥 생략하세요.--verify그리고.--quiet그리고 분기가 존재하면 해시를 얻거나 그렇지 않으면 아무것도 얻지 못합니다.

변수에 할당하고 빈 문자열을 확인합니다.

exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
    echo 'branch exists!'
fi

스크립트에서 사용하는 경우:

git show-ref -q --heads <branch-name>

은 종됩니다를 할 것입니다.0의 에만.<branch-name>로컬 분기로 존재합니다.

예:

if git show-ref -q --heads <branch-name>; then
   echo 'Branch exists'
fi

사용할 수 있을 것 같습니다.git show-branch여기서.

$ git show-branch --list
  [master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128

그렇게,$? == 0분기가 존재하며 참조/헤드/의 배관을 전혀 파고들 필요가 없다는 것을 나타냅니다.당신이 합격하지 않는 한-rshow-branch로컬 지점에서만 작동합니다.

git branch -l <branch-name>

분기가 있으면 분기 이름을 반환하고 없으면 아무것도 반환하지 않습니다.

윈도우 배치 스크립트에서는 약간 다릅니다.

git rev-parse --verify <branch>

if %ERRORLEVEL% == 0  (
    echo "Yes"
) else (
    echo "No"
)

네, 있습니다.

git rev-parse [<options>] <args>…​

인수 집합과 함수를 찾을 수 있는 https://git-scm.com/docs/git-rev-parse 을 참조하십시오.

git rev-parse --verify <branch-name>

끝내꾸나라고 부르자.git is_localbranch.).gitconfig).

용도:

$ git is_localbranch BRANCH

출처:

git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
  echo "branch exists"
fi

둘 다 아니다.git show-ref도 아니다git rev-parse제 경우엔 효과가 있어요

$ git --version
git version 2.21.0

$ git show-branch --list
* [master] mybranch commit

$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision

$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists

나는 이것으로 끝이 났습니다.

$ BRANCH_NAME=mybranch
$ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME`
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists

스크립트 파일로도 할 수 있습니다.

#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
`git show-branch --all`
EOF
then
   echo "$BRANCH_NAME exists"
else
   echo "$BRANCH_NAME not exists"
fi

첫 번째 질문에 대한 '업데이트'에 대한 제 '제안 편집'에 대한 검토 결과 '댓글 또는 답변으로 작성했어야 합니다'였기 때문에 여기에 올립니다.

제안된 다른 방법은 분기뿐만 아니라 @jhuynh라는 이름을 가진 참조도 확인합니다.

git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.

초기 질문에 대한 '업데이트' 문제는 다음과 같습니다.

'master.000'이 태그일 뿐이며, 이러한 로컬 분기가 존재하지 않으며, grep이 태그인 항목 하나를 반환한다고 가정하고 확인합니다.rev-parse는 참조가 있는 경우 로컬 분기가 없는 경우에도 0을 반환합니다.이것은 @paul-s가 언급한 것과 정확히 같은 거짓 일치입니다.

$ git show-ref |grep master.000

f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0
git show-branch <BRANCH-NAME> &>/dev/null && echo yes || echo no

이게 제가 구현한 방법이고, 더 안정적으로 보입니다.

$branchExists = git ls-remote $gitUrl $gitBranch
if(!([bool]$branchExists))
{
   Write-Host "branch $branchName does not exist"  
} 
else
{
   Write-Host "branch $branchName exists"         
}

분기가 존재하는 경우 branchExist 변수의 내용은 다음과 같습니다.

hashcode of branch name         feature/my_branch

원격에 브랜치가 있는지 확인하려면 다음과 같이 하면 됩니다.

git branch -r | grep -qn origin/${GIT_BRANCH_NAME}$ && echo "branch exists" || echo "branch does not exists"

스크립트에서 사용하려면 다음 명령을 사용하는 것이 좋습니다.

git ls-remote --heads <repo_url> "<branch_name>" | wc -l

참고:<repo_url>사용자가 디렉토리 구조 안에 있는 경우 로컬 repo, 로컬 repo의 경로 또는 원격 repo의 주소를 지정하는 "."일 수 있습니다.

명령은 다음과 같은 경우 0을 반환합니다.<branch_name>존재하는 경우 1이 없습니다.

git branch --list $branch_name | grep $branch_name

그런 다음 반환 값이 0 또는 1인지 확인합니다.

만약 당신이 grep을 포함할 수 있다면요.

git branch | grep -q <branch>

언급URL : https://stackoverflow.com/questions/5167957/is-there-a-better-way-to-find-out-if-a-local-git-branch-exists

반응형