에서 프로 망할 놈의 책 , 그것은 말한다
“원산지”는 특별하지 않습니다
브랜치 이름 “master”가 Git에서 특별한 의미가없는 것처럼 “origin”도 마찬가지입니다. “master”는 널리 사용되는 유일한 이유 인 git init를 실행할 때 시작 브랜치의 기본 이름 인 반면 , “origin”은 git clone을 실행할 때 원격의 기본 이름입니다. 대신 git clone -o booyah를 실행하면 booyah / master가 기본 원격 분기로 사용됩니다.
즉, 기본 브랜치 이름을 main 또는 main-branch 또는 이와 유사한 이름으로 사용할 수 있습니다 . 다른 기본 브랜치 이름으로 man git-init
초기화 하는 옵션이 표시되지 않았습니다 repo
.
GitHub는 설정 페이지에서 기본 브랜치 이름을 설정하는 방법을 보여줍니다 . 그러나 특정 Git 호스팅 사이트 에서 설정하는 방법에 대해 말하는 것이 아닙니다 . 나는 특정 Git 호스팅 사이트 에 관한 것이 아니라 Git에 대해서만 엄격하게 요구하고 있습니다 .
그렇게하는 방법이 있습니까?
답변
새로운 Git, 새로운 Repo
git 버전 2.28.0부터 git init
명령은 이제 --initial-branch
(또는 -b
짧게) 매개 변수를 사용합니다. 이 두 명령은 “trunk”라는 브랜치가있는 새 Git 저장소를 생성하며, 항상 “master”(무엇의 마스터?)보다 나에게 더 의미가 있습니다.
git init --initial-branch=trunk
git init -b trunk
이것은 init.defaultBranch
설정 으로 구성 할 수 있습니다. 모든 새 저장소가 기본 분기로 “트렁크”를 갖도록하려면 다음을 수행하십시오.
git config --global init.defaultBranch trunk
이전 Git, 새 저장소
일부 시스템에는 여전히 오래된 Git 설치가 있습니다. 내 Debian 10 서버 ( 2020 년 10 월 현재 안정 버전 인 Busster)에는 -b
옵션을 지원하지 않는 Git 2.20이 포함되어 있습니다. 한 가지 옵션은 저장소를 생성 한 다음 브랜치 이름을 변경하는 것입니다. 이 기술은 일반 (베어가 아닌) 저장소에서 작동합니다.
git init
git checkout -b trunk
trunk
대신 현재 분기로 새 저장소를 만듭니다 master
. 브랜치 master
는 실제로 존재하지 않습니다 . 브랜치 는 적어도 하나의 커밋을 가질 때까지 생성되지 않습니다. 브랜치가 생성 될 때까지 브랜치는에만 존재 .git/HEAD
하므로으로 master
전환 할 때 브랜치가 사라지는 이유를 설명합니다 trunk
.
베어 레포
베어 리포지토리의 경우 실행할 수 없습니다 git checkout
(바로 베어라는 의미입니다). 대신 HEAD를 다른 분기를 가리 키도록 변경할 수 있습니다.
git init --bare
git symbolic-ref HEAD refs/heads/trunk
오래된 저장소
이미 커밋 한 경우 git branch -m
대신 실행할 수 있습니다 .
git init
touch file.txt
git add file.txt
git commit -m 'commit 1'
git branch -m trunk
이렇게하면 브랜치 가 생성되면 에서 master
로 이름이 바뀝니다 trunk
.
저장소가 비어 있는지 여부에 따라 메커니즘이 다르기 때문에 약간 어색해 보이지만 작동합니다. “새 브랜치 생성 및 삭제 master
” 로 접근 할 수도 있습니다 .
답변
간접적으로 git init
다른 기본 브랜치를 사용 하도록 구성 할 수 있습니다 . 현재 브랜치는에 의해 정의되며 HEAD
, 이는 Git에게 현재 참조가 무엇인지 알려주는 텍스트 파일입니다.
사용 init.templateDir
물어, 수 git init
다른 하나를 사용 :
# ~/.config/git/config or ~/.gitconfig
[init]
templateDir = ~/.config/git/template/
그리고에서 ~/.config/git/template/HEAD
한 줄 (+ 줄 바꿈) : ref: refs/heads/main
(기본값은 branch main
).
저장소를 만들 때 의 전체 내용이 디렉토리에 templateDir
복사됩니다 .git
. 기본값 (여기 /usr/share/git-core/templates
)에는 일부 샘플 후크 및 기타 파일이 포함되어 있지만, 예를 들어 새 템플릿 디렉토리를 사용하여 기본 후크를 설정할 수 있습니다.
$ tree /usr/share/git-core/templates
/usr/share/git-core/templates
├── branches
├── description
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ └── update.sample
└── info
└── exclude
3 directories, 13 files
답변
”
master
” 이외의 기본 브랜치 이름으로 Git 저장소를 생성하려면 어떻게 해야합니까?
Git 2.28 (2020 년 3 분기)을 사용합니다. 기존 리포지토리의 기본 브랜치 이름과 새로 생성 된 리포지토리의 첫 번째 브랜치에 사용되는 기본 이름이 구성 가능해 지므로 결국 하드 코딩 된 ‘에서 벗어날 수 있습니다. master
‘.
그리고 2020 년 8 월 GitHub의 알림 :
당신은 사용자, 조직 또는 기업을위한 새로운 저장소에 대한 기본 분기를 변경하지 않은 경우 2020년 10월 1일에서 자동으로 변경됩니다
master
에main
.
이 변경 사항은 언제든지 선택 해제 할 수 있습니다.
- 사용자의 경우 https://github.com/settings/repositories 페이지에서
- 조직 소유자의 경우
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
페이지에서- 엔터프라이즈 관리자의 경우
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges
페이지에서이 변경 사항은 GitHub가 기본 브랜치의 이름을 변경하려는 프로젝트 및 관리자를 지원하기 위해 수행하는 많은 변경 사항 중 하나입니다.
변경 사항에 대한 자세한 내용은 github / renaming을 참조하십시오 .
그러나 다시 힘내 자체 (2.28, Q3 2020) 참조가 508fd8e 커밋 에 의해 (2020년 6월 29일)를 Đoàn 트란 콩 DANH ( sgn
) .
참조 0068f21 커밋 , a471214 커밋 , 0cc1b47 커밋 , 32ba12d 커밋 , 6069ecc 커밋 , f0a96e8 커밋 , 4d04658 커밋 (2020 6월 24일), 및 489947c을 투입 하여 (2020년 6월 23일) 요하네스 Schindelin ( dscho
) . Don Goodman-Wilson ( )의 commit 8747ebb (2020 년 6 월 24 일)를
참조하십시오 . (의해 병합 Junio C 하마노 – – 에DEGoodmanWilson
gitster
commit 11cbda2 , 2020 년 7 월 6 일)
init
: 새 저장소에 대한 초기 분기 이름을 지정할 수 있습니다.서명자 : Johannes Schindelin
리포지토리의 메인 브랜치 이름을 변경하고자하는 프로젝트와 회사가 점점 늘어나고 있습니다 (예를 들어 이에 대한 배경은 Mislav Marohnić의 트윗 참조 ).
새 리포지토리의 브랜치 이름을 변경하려면 현재 자동으로 수행하는 유일한 방법은 Git의 모든 템플릿 디렉토리를 복사 한 다음 원하는 기본 브랜치 이름을
.git/HEAD
파일에 하드 코딩 한 다음init.templateDir
복사 된 템플릿 파일을 가리 키도록 구성 하는 것입니다.이 프로세스를 훨씬 덜 복잡하게 만들기 위해 새로운 옵션을 소개합니다
--initial-branch=<branch-name>
..
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
과:
init
: 구성을 통해 초기 분기 이름에 대한 기본값 설정 허용
지원자 : Johannes Schindelin 지원자 : Derrick Stolee
서명자 : Don Goodman-Wilson
방금
--initial-branch=<branch-name>
하드 코딩 된 분기와 다른 초기 분기로 새 저장소를 초기화 할 수 있는 명령 줄 옵션 을 도입했습니다 .사용자가 초기 브랜치 이름을 더 영구적으로 재정의 할 수 있도록 (즉, 각
git init
호출 마다 이름을 수동으로 지정할 필요없이 )init.defaultBranch
구성 설정을 소개하겠습니다 .
참고 : merge commit 메시지에 대한 commit 489947c 는 이후 Git 2.29에서 되돌 렸습니다. ” how can I customize git ‘s merge commit message? “를 참조하십시오. 설정은 남아있다.init.defaultBranch
이는 하위 모듈에 영향을줍니다.
submodule
: remote..branch 누락에 대한 원격의 HEAD로 폴백지원자 : Philippe Blain
서명자 : Johannes Schindelin
때
remote.<name>.branch
구성되지 않은,git submodule update
현재 분기의 이름을 사용하여 다시 폭포master
.
그러나 훨씬 더 좋은 아이디어는 remote를 사용하는 것입니다HEAD
. 합리적으로 최신 Git 버전을 실행하는 모든 Git 서버에서 symrefHEAD
는 메인 브랜치를 가리 킵니다.참고 : t7419 는 원격 이 다른 분기를 가리 키 더라도 원격 분기 에 대한 하위 모듈을 업데이트 할 것으로 예상 되는 사용 사례 가 있을 수 있음을 보여줍니다 .
틀림없이이 패치는 동작을보다 직관적으로 만들지 만 모호한 설정에서 회귀를 일으킬 가능성이 약간 있습니다.git submodule update --remote
master
HEAD
그렇더라도 더 긴 전환 기간없이이 동작을 수정하는 것이 좋습니다.
- 이
git submodule update --remote
명령은 실제로 일반적이지 않습니다.- 이 명령을 실행할 때 현재 Git의 동작은 원격 저장소의 현재 분기 가
master
(이 경우 제안 된 동작이 이전 동작과 일치 하지 않는 경우) 완전히 혼란 스럽습니다 .- 사용자 인해 변경된 동작에 회귀가 발생하면 수정 실제로 간단하다 : 설정
submodule.<name>.branch
하려면master
이전 동작을 복원합니다.
Git 2.29 (2020 년 4 분기)에서는의 테스트 contrib/
가 fmt-merge-msg
.
Emily Shaffer ( )의 commit b87528c (2020 년 8 월 3 일)를 참조하십시오 . (Merged by Junio C Hamano — in commit 83b8250 , 10 Aug 2020)nasamuffin
gitster
Revert "contrib
:subtree
:fmt-merge-msg
” 에서 변경하도록 테스트 조정서명자 : Emily Shaffer
커밋 508fd8e8baf3e18ee40b2cf0b8899188a8506d07을 되돌 립니다 .
에서 6e6029a8는 (
fmt-merge-msg
우리가 ‘에 대한 병합 동작 돌아가 병합 대상이 다시 생략 할 수 있도록)master
기본적으로하지 않습니다가,’ “를 포함into 'master'
병합 메시지의 끝을”. 이 테스트 수정은 더 이상 필요하지 않습니다.
또한:
Git 2.29 (2020 년 4 분기)에서는 테스트에서 ‘ master
‘ 단어를 삭제하도록 업데이트 합니다.
참조 f33f2d3 커밋 , b6211b8을 커밋 (2020년 9월 26일), 및 432f5e6 커밋 , 5a0c32b 커밋 , 659288c을 투입 하여 (2020년 9월 21일) 요하네스 Schindelin ( dscho
) .
(Merged by Junio C gitster
Hamano — in commit 58138d3 , 05 Oct 2020)
tests
:master
브랜치 이름의 변형 방지서명자 : Johannes Schindelin
이 용어
master
는 인종적 불의를 지속적으로 상기시키는 역할을하는로드 된 역사를 가지고 있습니다. Git 프로젝트는 이것을 영속시키고 싶지 않고 이미 그것을 피하기 시작했습니다.테스트 스위트는 기본 이름 이외의 분기에 대해이 이름의 변형을 사용합니다. 이전 커밋에서이 문제를 방금 해결 한 t3200을 제외하고 이러한 인스턴스는 테스트 스크립트 외부에서 변경이 필요하지 않기 때문에 자동화 된 방식으로 이름을 바꿀 수 있습니다.
터치 된 브랜치가 기본 브랜치와 거의 관련
topic_<number>
이topic-<number>
없기 때문에 우리는 완전히 별개의 이름 지정 체계를 사용하기로 선택했습니다. ( t5515가test_oid
기계를 용어와 함께 사용하고 기계가 내부적으로 쉘 변수를 사용 하기 때문입니다 . 이름에 대시를 포함 할 수 없음).이 트릭은이 (GNU) sed 호출에 의해 수행되었습니다.
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
그리고 여전히 Git 2.29를 사용합니다.
Johannes Schindelin ( )의 commit 538228e , commit a15ad5d (2020 년 10 월 8 일)를 참조하십시오 . (Merged by Junio C Hamano — in commit 62564ba , 08 Oct 2020)dscho
gitster
t1415
:main
참조 이름으로 사용하지 마십시오서명자 : Johannes Schindelin
의 가을 – 다시 변경하는 패치 시리즈에 대비
init.defaultBranch
에를main
,의는 사용하지 말자main
,이 테스트 스크립트에서 심판의 이름으로.그렇지 않으면 해당 참조를 잡으려 는 ( man ) 도 예기치 않게 .
git for-each-ref ... | grep main
refs/heads/main
문제의 ref는 worktree-local의 것이므로 (즉, 각 워크 트리는 고유 한,처럼
HEAD
) 테스트 케이스에서 이미 ”second
” 라는 보조 워크 트리를 사용하므로first
대신 해당 ref에 ” ” 라는 이름을 사용하겠습니다 .그 동안 “작업 트리”를 의미하는 “리포지토리”에 대해 말하는 테스트 제목을 조정하십시오.
답변
Git 2.28 (2020 년 7 월 27 일 출시) 이후 init.defaultBranch
하드 코딩 된 용어를 대체하기 위해 새로운 구성 옵션 이 도입되었습니다 master
.
기본값은 master
!
사용자는 다음을 사용하여 구성 변수의 기본값을 재정의 할 수 있습니다.
$ git config --global init.defaultBranch main
자세한 내용은 git doc 장을 읽어보십시오. Init.defaultBranch 소개