로컬 지점에서 어떤 원격 지점을 추적하고 있는지 어떻게 알 수 있습니까?
git config
출력 을 구문 분석해야합니까 , 아니면 이것을 수행하는 명령이 있습니까?
로컬 지점에서 어떤 원격 지점을 추적하고 있는지 어떻게 알 수 있습니까?
git config
출력 을 구문 분석해야합니까 , 아니면 이것을 수행하는 명령이 있습니까?
답변:
다음 은 모든 추적 분기 ( 'pull'에 대해 구성된)를 제공하는 명령입니다.
$ git branch -vv
main aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit
SHA와 긴 줄 바꿈 커밋 메시지를 통과해야하지만 빠르게 입력하면 추적 지점이 세 번째 열에 세로로 정렬됩니다.
분기당 '풀'및 '푸시'구성에 대한 정보가 필요한 경우의 다른 답변을 참조하십시오 git remote show origin
.
최신 정보
자식 버전부터 1.8.5는 상류 지점을 표시 할 수 있습니다 git status
및git status -sb
git branch -av
또는 보다 직접적이며 git remote show origin
, 추적 된 리모콘뿐만 아니라 많은 데이터를 제공합니다.
git status
하고 git status -sb
- 당신이 1.8.5.x로 업그레이드 그래서 일단,이 질문 (과 답변) 무관하다.
두 가지 선택 :
% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline
또는
% git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"
origin/mainline
%(refname:short)
는 안에있는 현재 심판의 이름입니다 --format
.
git help revisions
(문서에서 거의 알려지지 않았지만 가장 유용한 부분 중 하나)를 검색하십시오 upstream
.
git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
SOMEBRANCH를 지점 이름으로 바꾸거나 현재 지점의 "HEAD"로 바꾸는 것입니다.
나는 git branch -av
당신이 가지고있는 지점과 어떤 커밋에 대해서만 알려 주므로 로컬 지점이 추적하는 원격 지점을 유추 할 수 있습니다.
git remote show origin
어떤 브랜치가 어떤 원격 브랜치를 추적하고 있는지 명시 적으로 알려줍니다. 다음은 단일 커밋과 원격 분기가있는 리포지토리의 출력 예입니다 abranch
.
$ git branch -av
* abranch d875bf4 initial commit
master d875bf4 initial commit
remotes/origin/HEAD -> origin/master
remotes/origin/abranch d875bf4 initial commit
remotes/origin/master d875bf4 initial commit
대
$ git remote show origin
* remote origin
Fetch URL: /home/ageorge/tmp/d/../exrepo/
Push URL: /home/ageorge/tmp/d/../exrepo/
HEAD branch (remote HEAD is ambiguous, may be one of the following):
abranch
master
Remote branches:
abranch tracked
master tracked
Local branches configured for 'git pull':
abranch merges with remote abranch
master merges with remote master
Local refs configured for 'git push':
abranch pushes to abranch (up to date)
master pushes to master (up to date)
git remote show origin
은 로컬 분기와 푸시 및 풀 모두에 대해 추적하는 것을 보여줍니다.
origin
실제로는 무엇이든 될 수 있다고 생각합니다 (예 : 여러 가지가 다른 리모컨의 분기를 추적하는 여러 리모컨).
업데이트 : 글쎄, 내가 게시한지 몇 년이 지났습니다! HEAD를 업스트림과 비교하기위한 특정 목적을 위해 이제 @{u}
업스트림 추적 분기의 HEAD를 나타내는 바로 가기 인을 사용 합니다. ( https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem 참조 ).
원래 답변 : 나는이 문제를 겪었습니다. 단일 리포지토리에서 여러 리모컨을 사용하는 경우가 많으며 현재 지점에서 추적하는 원격 장치를 잊어 버리기 쉽습니다. 때로는를 통해 로컬 커밋을보고 싶을 때와 같이 쉽게 알 수 git log remotename/branchname..HEAD
있습니다.
이 모든 것은 git config 변수에 저장되지만 git config 출력을 구문 분석 할 필요는 없습니다. git config와 변수 이름을 호출하면 구문 분석이 필요없는 해당 변수의 값만 인쇄합니다. 이를 염두에두고 현재 지점의 추적 설정에 대한 정보를 얻는 명령이 있습니다.
LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`
제 경우에는 현재 리모컨의 이름을 찾는 데 관심이 있기 때문에 다음과 같이하십시오.
git config branch.`git name-rev --name-only HEAD`.remote
git name-rev --name-only HEAD
당신이 실제로 어떤 지점에 있는지 알려주지 않는다는 것을 발견 했습니다. 내가 방금 사용한git branch | grep '^\*' | cut -d' ' -f2
@{u}
별칭 / 바로 가기를 언급하지 않았으며 그것이 바로 내가 찾던 것입니다! 당길 필요가 있는지 여부 만 결정하려는 경우 마스터 브랜치와 비교할 이유가 없습니다.
@{u}
폭탄입니다. 그리고 1.7.0 이후로 사용되었습니다 .2018 년에 누군가가 사용하고있는 자식에서 사용할 수 없다면 아마도 업그레이드가 필요한 것입니다.
현재있는 지점을 보여줍니다.
$ git branch -vv
현재있는 지점 만 표시 됩니다 .
$ git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
예를 들면 다음과 같습니다.
myremote/mybranch
현재 지점에서 사용 하는 리모컨 의 URL을 찾을 수 있습니다 .
$ git remote get-url $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)|cut -d/ -f1)
예를 들면 다음과 같습니다.
https://github.com/someone/somerepo.git
이것이 git config의 출력을 파싱하는 것으로 계산되는지는 모르겠지만 마스터가 추적하는 원격의 URL을 결정합니다.
$ git config remote. $ (git config branch.master.remote) .url
git config branch.$(git symbolic-ref -q HEAD).remote
에서 추적중인 원격 장치의 이름을 원할 경우 . git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
--short
작동하도록 옵션 을 추가 해야했습니다. 따라서 현재 지점의 원격 이름을 얻고 현재 지점 git config branch.$(git symbolic-ref -q --short HEAD).remote
의 원격 URL을 가져 git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
또 다른 간단한 방법은
cat .git/config
자식 저장소에서
현지 지사에 대한 세부 정보가 표시됩니다.
type .git/config
대신 사용하십시오 cat .git/config
.
존재하는지 여부를 알고 싶다면 다른 방법 (osse에게 감사) :
if git rev-parse @{u} > /dev/null 2>&1
then
printf "has an upstream\n"
else
printf "has no upstream\n"
fi
git branch -vv | grep 'BRANCH_NAME'
git branch -vv
:이 부분에는 모든 로컬 지점과 업스트림 지점이 표시됩니다.
grep 'BRANCH_NAME'
: 분기 목록에서 현재 분기를 필터링합니다.
git branch -r -vv
원격을 포함한 모든 지점을 나열합니다.
git-status porcelain (machine-readable) v2 출력은 다음과 같습니다 :
$ git status -b --porcelain=v2
# branch.oid d0de00da833720abb1cefe7356493d773140b460
# branch.head the-branch-name
# branch.upstream gitlab/the-branch-name
# branch.ab +2 -2
그리고 지점을 업스트림으로 가져 오려면 :
$ git status -b --porcelain=v2 | grep -m 1 "^# branch.upstream " | cut -d " " -f 3-
gitlab/the-branch-name
분기에 업스트림이 없으면 위의 명령은 빈 출력을 생성합니다 (또는 실패 set -o pipefail
).
당신은 이것을 시도 할 수 있습니다 :
git remote show origin | grep "branch_name"
branch_name
당신의 지점으로 교체해야합니다
git remote show origin
- merges
또는 configure
?
이 별칭을 사용합니다
git config --global alias.track '!sh -c "
if [ \$# -eq 2 ]
then
echo \"Setting tracking for branch \" \$1 \" -> \" \$2;
git branch --set-upstream \$1 \$2;
else
git for-each-ref --format=\"local: %(refname:short) <--sync--> remote: %(upstream:short)\" refs/heads && echo --URLs && git remote -v;
fi
" -'
그때
git track
스크립트를 사용하여 추적을 설정할 수도 있습니다.
https://github.com/orefalo/bash-profiles 에서 더 훌륭한 별칭
내가 사용하는 EasyGit를 (일명 "예") (또는 측면을 따라) 망할 놈의 상단에 초경량 래퍼. EasyGit에는 현재 분기 원격 추적 분기를 포함하여 모든 종류의 유용한 정보를 제공하는 "info"하위 명령이 있습니다. 다음은 예입니다 (현재 분기 이름은 "foo").
pknotz @ s883422 : (foo) ~ / workspace / bd $ 예를 들어 정보 총 커밋 : 175 로컬 저장소 : .git 명명 된 원격 저장소 : (이름-> 위치) 원산지-> git : //sahp7577/home/pknotz/bd.git 현재 지점 : foo 암호화 체크섬 (sha1sum) : bd248d1de7d759eb48e8b5ff3bfb3bb0eca4c5bf 기본 풀 / 푸시 저장소 : origin 기본 풀 / 푸시 옵션 : branch.foo.remote = 원산지 branch.foo.merge = 심판 / 헤드 / aal_devel_1 기여자 수 : 3 파일 수 : 28 디렉토리 수 : 20 가장 큰 파일 크기 (바이트) : 32473 (pygooglechart-0.2.0 / COPYING) 커밋 : 62
이 답변을 개선 하면서 다음과 같은 .gitconfig
별칭을 찾았습니다.
branch-name = "symbolic-ref --short HEAD"
branch-remote-fetch = !"branch=$(git branch-name) && git config branch.\"$branch\".remote || echo origin #"
branch-remote-push = !"branch=$(git branch-name) && git config branch.\"$branch\".pushRemote || git config remote.pushDefault || git branch-remote-fetch #"
branch-url-fetch = !"remote=$(git branch-remote-fetch) && git remote get-url \"$remote\" #" # cognizant of insteadOf
branch-url-push = !"remote=$(git branch-remote-push ) && git remote get-url --push \"$remote\" #" # cognizant of pushInsteadOf
Gradle을 사용하는 경우
def gitHash = new ByteArrayOutputStream()
project.exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = gitHash
}
def gitBranch = new ByteArrayOutputStream()
project.exec {
def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e '2,\$d' -e 's/\\(.*\\)\\/\\(.*\\)\$/\\2/' || echo 'master'"
commandLine "bash", "-c", "${gitCmd}"
standardOutput = gitBranch
}
다음 명령은 원격 원점 현재 포크를 참조합니다.
자식 원격 -v
원격 경로를 추가하려면
git remote add origin 경로 _ 이름
git remote show origin
. 다른 질문의 주된 대답은 여기에 간단한 대답으로 둘러 싸인 bash 스크립트이며 일부는 유용 할 수 있습니다. 이 질문이 완전히 닫히지 않기를 바랍니다.