[git] 지정된 원격 저장소에 원격 분기가 있는지 확인하는 방법은 무엇입니까?

주어진 원격 저장소에있는 경우 특정 분기에 대해 하위 트리 병합을 수행해야합니다. 문제는 원격 저장소가 로컬로 체크 아웃되지 않았기 때문에 git branch -r. 내가 가진 것은 원격 주소뿐입니다 https://github.com/project-name/project-name.git. 원격 주소로 원격 분기를 나열하는 방법이 있습니까? 유용한 정보를 찾을 수 없습니다.



답변

$ git ls-remote --heads git@github.com:user/repo.git branch-name

branch-name발견되는 경우 다음과 같은 출력이 표시됩니다.

b523c9000c4df1afbd8371324083fef218669108        refs/heads/branch-name

그렇지 않으면 출력이 전송되지 않습니다.

따라서 파이프를 연결 wc하면 1또는 0다음 이 제공됩니다 .

$ git ls-remote --heads git@github.com:user/repo.git branch-name | wc -l

또는 일치하는 참조가없는 경우 종료 코드 를 반환하는 --exit-code플래그를 설정할 수 있습니다 . 이것은 가장 관용적 인 솔루션입니다. 결과는 쉘 테스트에서 직접 확인하거나 상태 변수를 확인하여 확인할 수 있습니다.git ls-remote2$?

$ git ls-remote --exit-code --heads  git@github.com:user/repo.git branch-name


답변

git ls-remote --heads https://github.com/rails/rails.git
5b3f7563ae1b4a7160fda7fe34240d40c5777dcd    refs/heads/1-2-stable
81d828a14c82b882e31612431a56f830bdc1076f    refs/heads/2-0-stable
b5d759fd2848146f7ee7a4c1b1a4be39e2f1a2bc    refs/heads/2-1-stable
c6cb5a5ab00ac9e857e5b2757d2bce6a5ad14b32    refs/heads/2-2-stable
e0774e47302a907319ed974ccf59b8b54d32bbde    refs/heads/2-3-stable
13ad87971cc16ebc5c286b484821e2cb0fc3e3b1    refs/heads/3-0-stable
3df6c73f9edb3a99f0d51d827ef13a439f31743a    refs/heads/3-1-stable
f4db3d72ea564c77d5a689b850751ce510500585    refs/heads/compressor
c5a809e29e9213102351def7e791c3a8a67d7371    refs/heads/deps_refactor
821e15e5f2d9ef2aa43918a16cbd00f40c221e95    refs/heads/encoding
8f57bf207ff4f28fa8da4544ebc573007b65439d    refs/heads/master
c796d695909c8632b4074b7af69a1ef46c68289a    refs/heads/sass-cleanup
afd7140b66e7cb32e1be58d9e44489e6bcbde0dc    refs/heads/serializers


답변

실행할 git repo 인 경우 현재 폴더에서 사용할 수있는 또 다른 방법

git branch -a | egrep 'remotes/origin/${YOUR_BRANCH_NAME}$'


답변

다음을 사용할 수도 있습니다.

git show-branch remotes/origin/<<remote-branch-name>>

$?의 최신 커밋과 값을 반환합니다. 값이 0이면 “심각 : 불량 sha1 참조 원격 / 원점 / <>”및 $? 128입니다


답변

Bash 터미널에서 이와 같이 할 수 있습니다. 에코를 실행하려는 명령으로 바꾸십시오.

if git ls-remote https://username:password@github.com/project-name/project-name.git | grep -sw "remote_branch_name" 2>&1>/dev/null; then echo "IT EXISTS..START MERGE" ; else echo "NOT FOUND" ; fi

도움이되기를 바랍니다.


답변

그러면 매번 수동으로 저장소 이름을 전달할 필요가 없습니다.

git ls-remote origin <branch>

대신에

git ls-remote <full repo url> <branch>

예 :

git ls-remote git@bitbucket.org:landmarkgroupme/in-store-application.git  uat_21dec

또는

git ls-remote origin uat_21dec

둘 다 동일한 출력을 제공합니다.

여기에 이미지 설명 입력

Origin에 대한 추가 정보 : Git에는 단순히 저장소의 다른 사본에 대한 URL 인 “원격”이라는 개념이 있습니다. 다른 저장소를 복제 할 때 Git은 자동으로 “origin”이라는 이름의 원격을 생성하고이를 가리 킵니다. git remote show origin을 입력하면 리모컨에 대한 자세한 정보를 볼 수 있습니다.


답변

여기에있는 모든 답변은 Linux 셸 전용이며, 이러한 종류의 작업을 지원하지 않는 환경 (예 : Windows의 명령 프롬프트)에있는 경우 그다지 도움이되지 않습니다.

다행히 분기의 존재 여부에 따라 각각 0 또는 2를 반환 git ls-remote하는 --exit-code인수를 허용합니다 . 그래서:

git ls-remote --exit-code --heads origin <branch-that-exists-in-origin>

0을 반환하고

git ls-remote --exit-code --heads origin <branch-that-only-exists-locally>

2를 반환합니다.

PowerShell의 경우 기본 제공 진리 처리 의미 체계를 간단히 사용할 수 있습니다.

if (git ls-remote --heads origin <branch-that-exists-in-origin>) { $true } else
{ $false }

수익률은 다음 $true과 같습니다.

if (git ls-remote --heads origin <branch-that-only-exists-locally>) { $true } else
{ $false }

수익률 $false.