git init
첫 번째 커밋이 아닌 다른 기본 브랜치 이름을 사용 하는 방법을 찾으려고 노력 중이지만 master
이에 대한 git 구성이나 이 작업을 수행할 수 있는 항목을 찾을 수 없습니다(예: 별칭은 지점 이름이 아닌 명령).
git init
설정하는 기본 첫 번째 지점 이름을 변경할 수 있는 방법이 있습니까 ?
답변1
Git 2.28(2020년 7월 27일 출시)부터이제 새 리포지토리를 초기화할 때 생성된 브랜치의 이름을 구성할 수 있습니다.:
$ git config --global init.defaultBranch main
이 변수를 설정한 후 실행하면 git init
초기 분기가 다음과 같은 저장소가 생성됩니다 main
.
$ git init
Initialised empty Git repository in /home/thomas/test-git-repo/.git/
$ git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
답변2
2.28 이전 Git 버전 HEAD
에서는하드코딩된을 가리킨다 refs/heads/master
.
if (create_symref("HEAD", "refs/heads/master", NULL) < 0)
git init
따라서 다른 것으로 변경하기 위해 전달할 수 있는 구성 설정이나 옵션이 없습니다 .
무엇~이다하지만 가능한 HEAD
것은git init
git symbolic-ref
:
$ git init
$ git symbolic-ref HEAD refs/heads/test
HEAD
이는 이라는 (아직 존재하지 않는) 분기를 가리키도록 변경됩니다 test
. 그런 다음 첫 번째 커밋을 생성하면 브랜치 test
대신 브랜치가 호출됩니다 master
.
답변3
기본 HEAD를 변경하는 간단한 방법은 git 템플릿 디렉토리에 HEAD를 만드는 것입니다. 먼저 템플릿 디렉토리를 다음과 같이 구성하십시오 ~/Templates/git.git
(또는 원하는 대로).
$ git config --global init.templateDir '~/Templates/git.git'
$ cp -r /usr/share/git-core/templates ~/Templates/git.git
HEAD
그런 다음 템플릿 디렉터리에 파일을 만듭니다 .
$ echo 'ref: refs/heads/default' > ~/Templates/git.git/HEAD
이제 가셔도 좋습니다! 를 실행할 때마다 git init
이제 다음 메시지를 받게 됩니다.
$ git init
Reinitialized existing Git repository in [...]
어떤 이유로 git은 생성 여부 에 의존하지 않고 HEAD
에 파일이 있는지에 따라 이 메시지를 사용할지 여부를 결정합니다. 그러나 실제로 어떤 메시지가 표시되는지는 중요하지 않습니다. git-init 매뉴얼 페이지에서:.git
.git
git init
기존 저장소에서 실행하는 것은 안전합니다. 이미 있는 항목은 덮어쓰지 않습니다. 재실행하는 주된 이유는git init
새로 추가된 템플릿을 선택하기 위한 것입니다(또는--separate-git-dir
지정된 경우 저장소를 다른 위치로 이동하기 위한 것입니다).
즉, 템플릿에 넣은 git init
것을 덮어쓰지 않는다는 것이 보장되며 기존 템플릿을 덮어쓰는 데 HEAD
템플릿을 사용하지도 않습니다 . 이는 명시적으로 문서화되어 있으므로 신뢰할 수 있습니다.HEAD
HEAD
또한 다음과 같이 말합니다.
$GIT_DIR
이름이 점으로 시작하지 않는 템플릿 디렉터리의 파일 및 디렉터리는 생성된 후 에 복사됩니다 .
.git
즉, 나중에 복사하는 것이 아니라 생성 직후에 템플릿을 복사할 수도 있습니다 .
(물론 이것은 매뉴얼에 대한 개인적인 해석입니다. git 개발자들이 동의하지 않을 수도 있습니다.)
답변4
언급한 대로 HEAD는 마스터를 가리키도록 하드코딩되어 있습니다. 그러나 git init
원하는 작업을 수행하기 위해 셸 별칭을 만들 수 있습니다. bash를 셸로 사용하는 경우 .bashrc에 다음과 같은 내용을 입력하세요.
function git_init_fnc () {
default_branch="main"
if [[ $1 == "init" ]] && [[ $# -eq 1 ]];then
git init
if [[ ! -z $(git branch -a | grep $default_branch) ]]; then
git checkout "$default_branch"
else
git checkout -b "$default_branch"
fi
else
/usr/bin/git "$@"
fi
}
alias "git"=git_init_fnc
그러면 명령이 git
함수로 대체됩니다. 이 함수는 다른 인수 없이 호출하지 않는 한 명령이 git
정확히 동일하게 실행 되도록 합니다. git init
호출하면 git init
저장소가 초기화됩니다. 다음으로 "daddy" 브랜치가 이미 존재하는지 확인합니다. 그렇다면 해당 분기를 확인하고, 그렇지 않으면 분기를 생성하여 해당 분기로 이동합니다.