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

주어진 원격 저장소에있는 경우 특정 분기에 대해 하위 트리 병합을 수행해야합니다. 문제는 원격 저장소가 로컬로 체크 아웃되지 않았기 때문에 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.