“마스터”이외의 것을 가리 키도록 Git 리모트의 HEAD 참조를 어떻게 설정합니까?
내 프로젝트에는 “마스터”분기를 사용하지 않는 정책이 있습니다 (모든 분기에는 의미있는 이름이 있어야 함). 또한 표준 마스터 리포지토리는 ssh : //를 통해서만 액세스 할 수 있으며 셸 액세스는 없습니다 (예 : GitHub 또는 Unfuddle).
내 문제는 원격 저장소에 여전히 refs / heads / master에 대한 HEAD 참조가 있지만 다른 분기를 가리켜 야한다는 것입니다. 이로 인해 두 가지 문제가 발생합니다.
-
저장소를 복제 할 때 여기에
경고 : 원격 HEAD는 존재하지 않는 참조를 참조하므로 체크 아웃 할 수 없습니다.
혼란스럽고 불편합니다.
-
웹 기반 코드 브라우저는 트리 탐색을위한 기반으로 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”이 불평 함
HEAD
repo 에서 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 ).
이러한 특정 답변은이 페이지를 읽고 이러한 특정 서비스에 대해 생각하는 사람들에게 유용 할 수 있습니다.
- 이제 http://repo.or.cz 에서 HEAD 분기를 선택할 수있는 드롭 다운 메뉴가 있습니다 (예 : http://repo.or.cz/editproj.cgi?name=for-me-and-for- all_imz.git );
- 및 http://gitorious.org 에서도 (설정에서 어딘가를보십시오).
- 및 http://GitHub.com : admin> Default Branch> (선택) (@srcspider의 답변 덕분에);
- v2.6 부터 웹 인터페이스의 ‘Projects’> ‘List’>> ‘Branches’ 에서 기본 분기를 설정할 수 있습니다 . v2.12에서 Gerrit 는 ssh를 통해 사용할 수 있는 새로운 set-head 명령 을 추가했습니다 .
- 그리고 Girar ( http://git.altlinux.org 에서 실행되어 ALT의 배포판을위한 패키지를 빌드)에서이를위한 ssh 인터페이스를 사용할 수 있습니다.
$ ssh git.alt help | fgrep branch
default-branch <path to git repository> [<branch>]
$
예ssh git.alt default-branch packages/autosshd.git sisyphus
를 들어 원격 저장소의 HEAD를 분기autosshd.git
를 가리 키도록 변경합니다sisyphus
.
답변
쉘에서 원격 저장소에 액세스 할 수있는 경우 .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 은 마스터 와 트렁크 사이에 링크없이 표시 됩니다.
여기서 “마법”은 –amend 가 git commit 이 현재 HEAD와 동일한 부모로 새 커밋을 생성 한 다음 HEAD가이를 가리 키도록한다는 것입니다. 그러나 현재 HEAD에는 저장소의 초기 커밋이므로 부모가 없으므로 새 HEAD도 하나를 얻지 못하여 서로 분리됩니다.
refs / heads / master가 여전히 가리 키기 때문에 이전 HEAD 커밋은 git-gc에 의해 삭제되지 않습니다 .
–allow-빈 우리가 빈 트리를 투입하고 있기 때문에 플래그는 필요하다. 몇 가지가 있다면 자식 추가 애프터의 자식 RM 다음은 필요하지 않을 것입니다.
실제로 저장소에서 초기 커밋을 분기하고, 트리를 삭제하고, 분리 된 트리를 추가 한 다음 git commit –amend 를 수행하여 언제든지 분리 된 분기를 만들 수 있습니다 .
나는 이것이 원격 저장소에서 기본 브랜치를 수정하는 방법에 대한 질문에 대한 대답이 아니라는 것을 알고 있지만 분리 된 브랜치를 만드는 방법에 대한 명확한 답변을 제공합니다.