원격 분기가 지정된 원격 저장소에 있는지 확인하는 방법은 무엇입니까?
특정 분기가 지정된 원격 저장소에 있는 경우 하위 트리 병합을 수행해야 합니다.문제는 원격 저장소가 로컬로 체크아웃되지 않아 사용할 수 없다는 것입니다.git branch -r
. 제가 가진 것은 원격 주소 같은 것뿐입니다.https://github.com/project-name/project-name.git
. 원격 주소만으로 원격 지점을 나열할 수 있는 방법이 있습니까?유용한 것을 찾을 수 없었습니다 :(
$ git ls-remote --heads git@github.com:user/repo.git refs/heads/[branch-name]
# or
$ git ls-remote --heads origin refs/heads/[branch-name]
경우에.[branch-name]
다음과 같은 출력을 얻을 수 있는 것으로 나타났습니다.
b523c9000c4df1afbd8371324083fef218669108 refs/heads/branch-name
그렇지 않으면 출력이 전송되지 않습니다.
에 파이핑을 합니다.wc
당신에게 줄 것입니다1
아니면0
:
$ git ls-remote --heads git@github.com:user/repo.git refs/heads/[branch-name] | wc -l
또는 설정할 수 있습니다.--exit-code
에 깃발을 꽂다git ls-remote
종료 코드를 반환할 것입니다.2
일치하는 레퍼런스가 발견되지 않을 경우.결과는 shell test를 통해 직접 확인하거나 status variable을 통해 확인할 수 있습니다.$?
.
$ git ls-remote --exit-code --heads git@github.com:user/repo.git refs/heads/[branch-name]
앞에 다음과 같은 정보를 입력해야 합니다.[branch-name]
와 함께refs/heads/
그렇지 않으면 부분적으로 일치합니다. 예를 들어.bar
가지가 일치할 것입니다.bar
그리고.foo/bar
.
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
여기에 나와 있는 모든 답변은 Linux 셸에 특화되어 있기 때문에 Windows의 명령 프롬프트와 같은 종류의 작업을 지원하지 않는 환경에서는 그다지 도움이 되지 않습니다.
다행히도.git ls-remote
을 받아들입니다--exit-code
분기의 존재 여부에 따라 각각 0 또는 2를 반환하는 인수입니다.그래서:
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
.
다음을 사용할 수도 있습니다.
git show-branch remotes/origin/<<remote-branch-name>>
최신 커밋을 반환하고 $? 값이 0이면 "bad: bad sha1 reference remotes/remotes/<>"을 반환하고 $? 값이 128입니다.
그러면 매번 저장소 이름을 수동으로 전달할 필요가 없습니다.
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
둘 다 동일한 출력을 제공합니다.
오리진에 대한 자세한 내용 : Git은 "원격"이라는 개념을 가지고 있으며, 단순히 저장소의 다른 복사본에 대한 URL입니다.다른 저장소를 복제하면 Git은 자동으로 "origin"이라는 이름의 원격지를 생성하고 이를 가리킵니다.git remote show origin을 입력하면 원격에 대한 자세한 정보를 볼 수 있습니다.
실행할 깃레포인 경우 현재 폴더에서 사용할 수 있는 다른 방법
git branch -a | egrep 'remotes/origin/${YOUR_BRANCH_NAME}$'
바시 터미널에서 이런 일을 할 수 있습니다.실행할 명령으로 에코를 교체하기만 하면 됩니다.
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 --heads origin <branch> | wc -l
대부분의 경우 작동합니다.
그러나 아래와 같이 브랜치가 부분적으로 일치하면 작동하지 않을 것입니다.
$ git branch -a
creative/dev
qa/dev
$ git ls-remote --heads origin dev | wc -l
2
사용하다
git ls-remote --heads origin <branch> | \
cut -d$'\t' -f2 | \
sed 's,refs/heads/,,' | \
grep ^<branch>$ | wc -l
믿을 수 있는 방법을 원한다면요
스크립트에서 사용하고 다음과 같이 가정하지 않을 경우origin
기본 리모트로 설정할 수 있습니다.
git ls-remote --heads $(git remote | head -1) "$branch" | \
cut -d$'\t' -f2 | \
sed 's,refs/heads/,,' | \
grep ^"$branch"$ | wc -l
효과가 있을 겁니다
:git branch -a | grep ...
마지막 이후로 시간이 좀 걸릴 수도 있기 때문에 신뢰할 수 없습니다.fetch
실행되었습니다.
이름에 쿼리가 들어 있는 모든 분기(원격 또는 로컬)를 반환합니다.
git branch --all | grep <query>
그냥.
if [ -e .git/refs/remotes/origin/mybranch ]; then
echo remote branch still exists - locally at least
else
echo remote branch is gone
fi
git ls-remote
원격 서버와 상호 작용합니다. 원격 서버는 원하는 서버일 수도 있고 그렇지 않을 수도 있습니다.
원격으로 가지고 있는 저장소를 사용하여 추가할 수 있습니다.git remote add something https://github.com/project-name/project-name.git
에를 합니다.git remote show something
원격지에 대한 모든 정보를 얻을 수 있습니다.이를 위해서는 네트워크 연결이 필요하며 사람이 사용하는 데 유용합니다.
, A를 .git fetch something
에서 . . 의 를 된 를 된 의 something
로컬 저장소에 보관할 수 있습니다.그런 다음 원하는 대로 로컬 지점에 병합할 수 있습니다.최종적으로 병합해야 한다고 결정한 경우 이 경로를 사용할 것을 권장합니다.
OT: "로컬 체크아웃"을 사용한 것은 중앙 집중식 버전 제어 시스템 관점에서 접근하고 있음을 나타냅니다.당신이 그것을 다룰 때는 보통 막다른 길에 있습니다.이것은 예전 시스템과 다르게 "체크아웃" 등의 단어를 사용합니다.
해봐도 좋습니다.
git diff --quiet @{u} @{0}
여기서@{u}
는 원격/원격 및/원격을 .@{0}
로컬 HEAD (의 git,재컬를 HEAD다운의,운의 git,@{0}
로 단축할 수 있습니다@
원격이 존재하지 않으면 오류가 발생합니다.
git 2.16.2(예를 들어 git 1.7.1에 없는 것과 같이 어떤 버전이 이 기능을 최초로 가지고 있는지 잘 모르겠습니다)로 할 수 있습니다.
git checkout
원격 분기가 존재할 경우 다음과 같은 출력이 발생합니다.
Your branch is up to date with 'origin/master'
그렇지 않으면 출력이 없습니다.
위의 몇 가지 답변을 스크립트로 조합하고 있습니다.
BRANCHES=(develop master 7.0 7.0-master)
ORIGIN=bitbucket
REMOTE=github
for BRANCH in "${BRANCHES[@]}"; do
BRANCH=$(git ls-remote --heads "${ORIGIN}" "${BRANCH}" \
| cut --delimiter=$'\t' --fields=2 \
| sed 's,refs/heads/,,' \
| grep --line-regexp "${BRANCH}")
if [ -n "${BRANCH}" ]
then
git branch --force "${BRANCH}" "${ORIGIN}"/"${BRANCH}"
git checkout "${BRANCH}"
git push "${REMOTE}" "${BRANCH}"
fi
done
git push github --tags
이 스크립트는 원격 비트 버킷에서 4개의 가지를 얻어 원격 깃허브에 밀어 넣은 후 모든 태그를 깃허브에 밀어 넣습니다.젠킨스의 직장에서 이걸 쓰고 있어요 그래서 당신들은 아무 것도 못 보는 거예요git fetch
아니면git pull
구성 에서 입니다 된 입니다 된 에서 .
저는 보통 대본에서 긴 형태의 옵션을 선호합니다.합칠 수도 있었을 텐데요git branch
그리고.git checkout
을 이용하여git checkout -B
.
여기 간단한 것이 있습니다.bash
일을 할 수 있는
#!/bin/bash
BRANCH="your-branch-name"
# Replace above value with the URL of your git repository
REPO_URL="https://github.com/lsst-dm/qserv-ingest.git"
if git ls-remote --exit-code --heads "$REPO_URL" "$BRANCH"
then
echo "REMOTE BRANCH EXISTS"
else
echo "REMOTE BRANCH NOT FOUND"
fi
분기 이름이 매우 구체적인 경우 단순한 분기 이름 일치를 위해 grep을 사용할 필요가 없을 수 있습니다.
git ls-remote --heads $(git remote | head -1) "*${BRANCH_NAME}*" | \
cut -d$'\t' -f2 | \
sed 's,refs/heads/,,' | \
wc -l
어느 쪽이 좋습니까?
BRANCH=master
BRANCH=mas
BRANCH=NonExistingBranch (returns 0)
BRANCH=ISSUE-123
우리는 지점명으로 고유한 이슈 ID를 사용하며 잘 작동합니다.
방금 해봤어요
git ls-remote --heads 2>/dev/null|awk -F 'refs/heads/' '{print $2}'|grep -x "your-branch"|wc -l
분기 "당신의 분기"가 발견되면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
이것이 저에게 가장 간단한 방법입니다.(※ 어패류)
if test (git ls-remote | grep your-branch-name)
echo exist
else
echo not_exist
end
옵션이 원격 지점의 사항이 를 들어 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ, 예를 들어, 입력 옵션이 주어졌습니다.master
아니면main
.
다른 사람의 해킹인데 어디서 왔는지 기억이 안 나네요 다른 여행자에게 도움이 될까봐 여기에 공유해요~ 찾았다! https://stackoverflow.com/a/68098145, 은 @Eugene Yarmash 덕분에
도 하지 하지 은 도 branch1
아니면branch2
는 원격지에 존재하며 지정된 분기 이름 중 하나입니다.
git branch -l branch1 branch2 | sed 's/^* //'
사용자 지정 깃 함수의 변수를 설정하는 데 사용합니다.
branch=$(git branch -l master main | sed 's/^* //')
언급URL : https://stackoverflow.com/questions/8223906/how-to-check-if-remote-branch-exists-on-a-given-remote-repository
'programing' 카테고리의 다른 글
libxml/tree.h 해당 파일 또는 디렉토리가 없습니다. (0) | 2023.09.11 |
---|---|
PHP in_array()에서 키를 얻는 방법은 무엇입니까? (0) | 2023.09.11 |
Ctrl + D를 사용하여 종료하고 Ctrl + L을 사용하여 Powershell 콘솔의 cls로 이동합니다. (0) | 2023.09.11 |
URL 문자열에 "utm_"이 있으면 Wordpress의 $_GET 변수가 끊어집니다. (0) | 2023.09.11 |
다른 Colate를 사용하여 지속 열 (0) | 2023.09.06 |