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