git init 기본 브랜치 이름 변경

git init 기본 브랜치 이름 변경

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)

릴리즈 노트:https://lore.kernel.org/git/[이메일 보호됨]/

답변2

2.28 이전 Git 버전 HEAD에서는하드코딩된을 가리킨다 refs/heads/master.

if (create_symref("HEAD", "refs/heads/master", NULL) < 0)

git init따라서 다른 것으로 변경하기 위해 전달할 수 있는 구성 설정이나 옵션이 없습니다 .

무엇~이다하지만 가능한 HEAD것은git initgit 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템플릿을 사용하지도 않습니다 . 이는 명시적으로 문서화되어 있으므로 신뢰할 수 있습니다.HEADHEAD

또한 다음과 같이 말합니다.

$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" 브랜치가 이미 존재하는지 확인합니다. 그렇다면 해당 분기를 확인하고, 그렇지 않으면 분기를 생성하여 해당 분기로 이동합니다.

관련 정보