[git] 마스터 이외의 것을 가리 키도록 Git 원격 HEAD 변경

“마스터”이외의 것을 가리 키도록 Git 리모트의 HEAD 참조를 어떻게 설정합니까?

내 프로젝트에는 “마스터”분기를 사용하지 않는 정책이 있습니다 (모든 분기에는 의미있는 이름이 있어야 함). 또한 표준 마스터 리포지토리는 ssh : //를 통해서만 액세스 할 수 있으며 셸 액세스는 없습니다 (예 : GitHub 또는 Unfuddle).

내 문제는 원격 저장소에 여전히 refs / heads / master에 대한 HEAD 참조가 있지만 다른 분기를 가리켜 야한다는 것입니다. 이로 인해 두 가지 문제가 발생합니다.

  1. 저장소를 복제 할 때 여기에

    경고 : 원격 HEAD는 존재하지 않는 참조를 참조하므로 체크 아웃 할 수 없습니다.

    혼란스럽고 불편합니다.

  2. 웹 기반 코드 브라우저는 트리 탐색을위한 기반으로 HEAD에 의존합니다. 유효한 분기를 가리 키려면 HEAD가 필요합니다.



답변

1 년 전에 GitHub 에서 거의 같은 질문 이있었습니다 .

아이디어는 마스터 브랜치의 이름을 바꾸는 것이 었습니다.

git branch -m master development
git branch -m published master
git push -f origin master

마스터 만들기는 사람들이 사용하기를 원하는 것을 가지고 있으며 다른 모든 작업을 지점에서 수행합니다.

( ” git-symbolic-ref HEAD refs/head/published“은 원격 저장소로 전파되지 않습니다.)

이것은 ” Git에서 origin / master를 어떻게 삭제합니까? “와 유사합니다 .


이 스레드 에서 말했듯 : (강조 내)

git clone“는 단일 로컬 분기 만 만듭니다.
이를 위해 HEAD ref원격 저장소의를보고 참조하는 원격 분기와 동일한 이름의 로컬 분기를 만듭니다.

이를 마무리하기 위해 repo A가 있고 복제합니다.

  • HEAD참조 refs/heads/master및 존재
    -> 원점 / 마스터에서 시작하여 master라는 로컬 분기를 얻습니다.

  • HEAD 참조 refs/heads/anotherBranch그 존재는
    -> 당신은라는 로컬 브랜치를 얻을 anotherBranch부터,origin/anotherBranch

  • HEAD 참조 refs/heads/master및 존재하지 않음
    -> “git clone”이 불평 함

HEADrepo 에서 ref 를 직접 수정하는 방법이 있는지 확실하지 않습니다 .

(당신의 질문의 모든 요점입니다, 나는 압니다;))


아마도 유일한 방법은 “빈민을위한 출판물” 일 것입니다.

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

그러나 그것은 서버에 대한 쓰기 액세스를 포함하며 항상 가능한 것은 아닙니다.


Git : Bare 저장소에서 Active Branch를 변경하는 올바른 방법?에서 설명했듯이 git remote set-head원격 저장소에서 아무것도 변경하지 않습니다.

로컬 저장소에 로컬로 저장된 원격 추적 분기 만 remotes/<name>/HEAD.


답변

업데이트 : 이것은 저장소 ( “클라이언트”)의 로컬 복사본에 대해서만 작동합니다. 아래 다른 사람들의 의견을 참조하십시오.

최신 버전의 git (2014 년 2 월)에서 올바른 절차는 다음과 같습니다.

git remote set-head $REMOTE_NAME $BRANCH

예를 들어 원격의 헤드 origin를 분기로 전환하면 develop다음과 같습니다.

git remote set-head origin develop


답변

GitHub에 대해 언급 했으므로 사이트에서 수행하려면 프로젝트로 이동하십시오.

admin > Default Branch > (choose something)

끝난.


답변

보다: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

이것은 git 저장소의 기본 브랜치를 설정합니다. 베어 또는 미러링 된 저장소에서 실행할 수 있습니다.

용법:

$ git symbolic-ref HEAD refs/heads/<branch name>


답변

(기본적으로 ” 원격 저장소에 git symbolic ref 생성 “이라는 질문이 이미 있었지만 보편적 인 답변을받지 못했습니다.)

그러나 다양한 git “farms”에 대한 구체적인 답변이 있습니다 (여러 사용자가 제한된 인터페이스를 통해 git repos를 관리 할 수 ​​있음 : http 및 ssh를 통해) : http://Github.com , http://Gitorious.org , http : / /repo.or.cz , Girar ( http://git.altlinux.org ).

이러한 특정 답변은이 페이지를 읽고 이러한 특정 서비스에 대해 생각하는 사람들에게 유용 할 수 있습니다.


답변

쉘에서 원격 저장소에 액세스 할 수있는 경우 .git (또는 베어 저장소 인 경우 기본 디렉토리)로 이동하여 올바른 헤드를 가리 키도록 HEAD 파일을 변경하십시오. 예를 들어, 기본적으로 항상 ‘refs : refs / heads / master’를 포함하지만, 대신 foo가 HEAD 여야하는 경우 HEAD 파일을 편집하고 내용을 ‘refs : refs / heads / foo’로 변경하십시오.


답변

porcelain Git 명령 만 사용하여 분리 된 마스터 브랜치를 생성 할 수 있습니다 .

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

그것은 우리에게 무례한 메시지를 가진 마스터 브랜치를 제공 합니다 (더 예의 바르기를 원할 수 있습니다). 이제 우리는 “실제”브랜치를 만들고 ( SVN을 기리기 위해 트렁크 라고합시다 ) master 와 이혼합니다 .

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

이봐, 프레스토! gitk –all마스터트렁크 사이에 링크없이 표시 됩니다.

여기서 “마법”은 –amendgit commit 이 현재 HEAD와 동일한 부모로 새 커밋을 생성 한 다음 HEAD가이를 가리 키도록한다는 것입니다. 그러나 현재 HEAD에는 저장소의 초기 커밋이므로 부모가 없으므로 새 HEAD도 하나를 얻지 못하여 서로 분리됩니다.

refs / heads / master가 여전히 가리 키기 때문에 이전 HEAD 커밋은 git-gc에 의해 삭제되지 않습니다 .

–allow-빈 우리가 빈 트리를 투입하고 있기 때문에 플래그는 필요하다. 몇 가지가 있다면 자식 추가 애프터의 자식 RM 다음은 필요하지 않을 것입니다.

실제로 저장소에서 초기 커밋을 분기하고, 트리를 삭제하고, 분리 된 트리를 추가 한 다음 git commit –amend 를 수행하여 언제든지 분리 된 분기를 만들 수 있습니다 .

나는 이것이 원격 저장소에서 기본 브랜치를 수정하는 방법에 대한 질문에 대한 대답이 아니라는 것을 알고 있지만 분리 된 브랜치를 만드는 방법에 대한 명확한 답변을 제공합니다.