master
많은 프로젝트(예: GitHub)에서 git의 기본 분기 이름이 크게 변경되면 main
이를 기본값으로 가정한 일부 스크립트와 구성이 손상됩니다. 예를 들어, 일부 git 명령을 입력하는 시간을 절약하기 위해 별칭을 설정하는 경우:
[alias]
com = checkout master
rbm = rebase master
rbmi = rebase -i master
쉘 스크립트에도 동일하게 적용됩니다. 이에 상응하는 것이 있지만 git checkout master
현재 저장소가 무엇이든 master가 기본 분기인 곳이 있습니까?
답변1
Git에는 기본 분기에 대한 개념이 없습니다. 저장소에는 여러 개의 독립적인 개발 라인(예: 유지 관리 및 개발 분기)이 포함될 수 있으며, 그중 어느 것도 다른 것보다 더 특별하지 않습니다. 브랜치의 중요성과 병합 방법은 저장소 소유자에 따라 다릅니다.
GitHub 및 다른 곳의 기본 분기는 HEAD
기본 저장소를 가리키는 분기라고 생각합니다. 다음 명령을 실행하면 마지막으로 업데이트되었을 때 리모컨의 이름이 무엇인지 확인할 수 있습니다.
$ git rev-parse --abbrev-ref origin/HEAD
origin/master
원격 장치의 최신 값을 알고 싶고 이를 위해 네트워크 요청을 하려는 경우 다음을 수행할 수 있습니다.
$ git ls-remote --symref origin | head -n1
ref: refs/heads/master HEAD
git remote set-head -a origin
이 참조는 자동으로 업데이트되지 않습니다. 업데이트하려면 실행해야 합니다 .
그러나 기본 분기로 사용되는 로컬 분기의 이름은 알려주지 않습니다. 예를 들어, 위 명령은 내 Git 복사본에서 가져온 것입니다 master
. 여기서 기본 분기는 입니다. 그러나 내 로컬 컴퓨터에서는 원격 저장소의 기본 분기를 끌어온 분기 dev
(내가 선호하는 기본 분기 이름)라고 합니다. 이것이 당신이 알고 싶은 것이라면 아마도 당신이 원하는 명령일 것입니다( origin
리모컨이라고 가정).
$ git config -l | ruby -e '
remote = ARGV[0]
head = `git rev-parse --abbrev-ref #{remote}/HEAD`.chomp
a = {}
while line = $stdin.gets
if line =~ /^branch\.(.*)\.remote=(.*)$/
a[$1] ||= [nil, nil]
a[$1][0] = $2
elsif line =~ %r[^branch\.(.*)\.merge=refs/heads/(.*)$]
a[$1] ||= [nil, nil]
a[$1][1] = $2
end
end
puts a.map { |k, (a, b)| ["#{a}/#{b}", k]}.to_h[head]' origin
Ruby이므로 한 줄로 만들고 싶다면 개행 문자를 세미콜론으로 바꾸면 됩니다. Perl을 선호한다면 Perl을 사용할 수도 있습니다.
답변2
기본 분기를 가져오는 전용 명령은 없습니다. 그러나 몇 가지 해결 방법을 사용하면 얻을 수 있습니다. 자체 저장소를 사용하는 경우 언제든지 동일한 이름을 선택할 수 있습니다. 다른 사람을 사용하고 있다면 그 사람도 일종의 리모콘을 갖게 될 것입니다.데이비드 월시) 도움이 되는:
LC_ALL=C git remote show origin | sed -n '/HEAD branch:/{s/.*: //;p}'