2012-04-09 2 views
21

일부 원격 원본 분기의 모든 이름을 가져 오는 방법은 무엇입니까?특정 원격의 분기 이름 목록

나는 --remote --list 옵션부터 시작했지만 여분의 origin/HEAD -> origin/master 메시지와 다른 출처의 분기가 있습니다. 특정 출처의

$> git branch --remote --list 
    origin/HEAD -> origin/master 
    origin1/develop 
    origin1/feature/1 
    origin1/feature/2 
    origin1/feature/3 
    origin1/master 
    origin2/develop 
    origin2/feature/1 
    origin2/feature/2 
    origin2/master 

지점은 <pattern> 옵션과 일치 할 수 있지만 중복 메시지가 아직도있다. 실제로 그 패턴은 실제로 올바르지 않습니다. 왜냐하면 어떤 원산지의 이름은 다른 원산지 명이나 심지어 일부 지사의 하위 문자열 일 수 있기 때문입니다. 내가 무엇을 찾고

$> git branch --remote --list origin1* 
    origin1/HEAD -> origin/master 
    origin1/develop 
    origin1/feature/1 
    origin1/feature/2 
    origin1/feature/3 
    origin1/master 

origin1의 지점 이름의 목록입니다, 그 중 하나는 내가 git checkout 명령에 대해 사용할 수 있습니다. 뭐 그런 :

develop 
feature/1 
feature/2 
feature/3 
master 

그것 때문에 unsafeness과 변화, 유일하고 진정한 git 전원, grep, sed, tail 또는 ghc -e 래퍼없이 수행해야하는 것이 중요합니다.

답변

30

그것 때문에 unsafeness과 변화, 유일하고 진정한 자식의 힘으로, grep, sed, tail 또는 ghc -e 래퍼없이 수행해야하는 것이 중요합니다. 자식 도자기 명령 만 사실이다

합니다 ("What does the term porcelain mean in Git?")

사용하여 배관 명령 ls-remote, 다음의 출력을 필터링 할 수 있습니다. 매개 변수없이

LS-원격 여전히 원격 HEAD 나열합니다 :

[email protected]:~/ce/ce6/.git$ git ls-remote origin 
8598d26b4a4bbe416f46087815734d49ba428523 HEAD 
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master 
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap 

을하지만 당신의 머리만을 요구하는 경우가 말했다 원격 :

[email protected]:~/ce/ce6/.git$ git ls-remote --heads origin 
8598d26b4a4bbe416f46087815734d49ba428523 refs/heads/master 
38325f657380ddef07fa32063c44d7d6c601c012 refs/heads/test_trap 

최종 답변 :

[email protected]:~/ce/ce6/.git$ git ls-remote --heads origin | sed 's?.*refs/heads/??' 
master 
test_trap 

(예, sed을 사용하지만 배관 명령의 출력은 안정적인 eno라고 가정합니다. 해석해야 할 것)

+0

좋아요. 철저한 답변 주셔서 감사합니다. –

+3

나는 이것에 대해서도 대답 할 수 있었지만 "sed"규칙은 어떻게 되었습니까? lol, whatever – KurzedMetal

+3

@KurzedMetal 사실,하지만'git branch'와 같은 도자기 명령 대신 배관 명령 만 사용하여'sed'의 사용을 신중하게 정당화했습니다. 예를 들어 http://stackoverflow.com/questions/2978947/how-to-list-all-the-log-for-current-project-in-git/2979124#2979124 또는 http://stackoverflow.com/questions를 참조하십시오./2976665/git-changelog-day/2976776 # 2976776 – VonC

2

기존 답변은 모두 질문 (sed)에서 명시 적으로 원하지 않는 것을 사용하며 원격 명령입니다. 하나 정말 최적 아니지만, 그것을 유지하는 사람은 그것을 개선하는 방법을 알고있는 경우 :

git rev-parse --remotes=origin | git name-rev --name-only --stdin 

업데이트 :

나는 이러한 문제를 모두 피할 것을이 발견, 로컬 자식 명령과 파이프를 사용합니다. 로컬 브랜치가 없으면 접두어 /리모컨/원점을 포함하는 전체 리모컨이 나열되지만 로컬 브랜치가있는 경우에만 해당 리모컨이 나열됩니다. 또한 동일한 SHA1을 가리키는 여러 개의 참조가 있으면 일부 참조를 건너 뛸 수 있습니다.

3

또 다른 방법은, 같은 문제에 대한 몇 가지 조사 후입니다 :

git for-each-ref --format='%(refname:strip=2)' refs/remotes/<remote_name> 

은 당신이 마지막으로 가져온 시점에서 원격라는 이름의 해당 지역 심판의 정렬 된 목록을 제공 할 것입니다.

태그 등으로 조정할 수 있습니다.