programing

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

lovejava 2023. 9. 11. 21:18

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

특정 분기가 지정된 원격 저장소에 있는 경우 하위 트리 병합을 수행해야 합니다.문제는 원격 저장소가 로컬로 체크아웃되지 않아 사용할 수 없다는 것입니다.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

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

enter image description here

오리진에 대한 자세한 내용 : 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