git 원격 헤드를 바꾸어 마스터 이외의 무언가를 가리키십시오.
-
18-09-2019 - |
문제
"마스터"외에 무언가를 가리키기 위해 Git Remote의 헤드 참조를 어떻게 설정합니까?
내 프로젝트에는 "마스터"지점을 사용하지 않는 정책이 있습니다 (모든 지점에는 의미있는 이름이 있어야합니다). 또한 표준 마스터 저장소는 SSH : //을 통해서만 액세스 할 수 있으며 (Github 또는 Unfdudd와 같은) 쉘 액세스가 없습니다.
내 문제는 원격 저장소에 여전히 Refs/Heads/Mas 이것은 두 가지 문제를 일으킨다 :
저장소를 복제 할 때,이게
경고 : 원격 헤드는 존재하지 않는 심판을 말하며 결제 할 수 없습니다.
혼란스럽고 불편합니다.
웹 기반 코드 브라우저는 트리를 탐색하기위한 기초로 헤드에 의존합니다. 그렇다면 유효한 지점을 가리키기 위해 머리가 필요합니다.
해결책
거의 없었습니다 Github에 대한 같은 질문 1 년 전.
아이디어는 마스터 브랜치의 이름을 바꾸는 것이 었습니다.
git branch -m master development
git branch -m published master
git push -f origin master
마스터를 만들기 위해 사람들이 원하는 것을 가지고 있고, 다른 모든 작업을 지점에서 수행하십시오.
(ㅏ "git-symbolic-ref HEAD refs/head/published
"원격 repo로 전파되지 않을 것입니다)
이것은 "와 유사합니다.git에서 원점/마스터를 어떻게 삭제합니까?".
말했듯이 이 스레드: (강조 광산)
"
git clone
"단일 로컬 브랜치 만 생성합니다.
그렇게하려면, 그것은 봅니다HEAD ref
원격 repo 중에서, 원격 분기와 동일한 이름의 로컬 브랜치를 작성합니다.그래서 그것을 마무리하기 위해, 당신은 repo a를 가지고 복제합니다.
HEAD
참조refs/heads/master
그리고 그것은 존재합니다
-> 원산지/마스터에서 시작하여 마스터라는 현지 지점을 얻습니다.헤드 참조
refs/heads/anotherBranch
그리고 그것은 존재합니다
-> 당신은 전화를 끊는 현지 지점을 얻습니다anotherBranch
, 시작origin/anotherBranch
헤드 참조
refs/heads/master
그리고 그것은 존재하지 않습니다
-> "Git Clone"은 불평합니다직접 수정하는 방법이 있는지 확실하지 않습니다.
HEAD
레포에 심판.
(이것은 당신의 질문의 모든 요점입니다, 나는 알고 있습니다;))))))))))
아마도 유일한 방법은 "가난한 사람들을위한 출판", 너 어디:
$ git-symbolic-ref HEAD refs/head/published
$ git-update-server-info
$ rsync -az .git/* server:/local_path_to/git/myRepo.git/
그러나 여기에는 서버에 대한 쓰기 액세스가 포함되며, 항상 가능하지는 않습니다.
내가 설명하는 것처럼 "GIT : 베어 리포지토리에서 활성 분기를 변경하는 올바른 방법?", 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"에 대한 구체적인 답변이 있습니다 (여러 사용자가 HTTP 및 SSH를 통해 제한된 인터페이스를 통해 GIT 저장소를 관리 할 수있는 곳) : http://github.com, http://gitorious.org, http://repo.or.cz, 지라 (http://git.altlinux.org).
이러한 특정 답변은이 페이지를 읽고 이러한 특정 서비스에 대해 생각하는 사람들에게 유용 할 수 있습니다.
- 이제 헤드 브랜치를 선택하기위한 드롭 다운 메뉴가 있습니다. http://repo.or.cz (예시: http://repo.or.cz/editproj.cgi?name=for-me-and-for-all_imz.git);
- 그리고 at http://gitorious.org, 또한 (설정 어딘가에 보입니다);
- 그리고 at http://github.com: admin> default branch> (선택 선택) ( @srcspider의 답변 덕분);
- 부터 v2.6, 기본 분기는 '프로젝트'> '목록'>> '분기'아래 웹 인터페이스. v2.12에서 Gerrit 새로운 세트 헤드 명령을 추가했습니다 그것은 가능하다 SSH를 통해 사용됩니다.
- 그리고에서 지라 (실행 중 http://git.altlinux.org Alt 's 배포판을위한 패키지를 작성하려면 SSH 인터페이스를 할 수 있습니다.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
예를 들어ssh git.alt default-branch packages/autosshd.git sisyphus
원격 저장소에서 헤드를 변경합니다autosshd.git
지적합니다sisyphus
나뭇가지.
쉘에서 원격 저장소에 액세스 할 수있는 경우 .git (또는 베어 레포 인 경우 메인 디르)로 이동하여 헤드 파일을 변경하여 올바른 헤드를 가리키십시오. 예를 들어, 기본적으로 기본적으로 'refs : refs/heads/mas
분리 된 것을 만들 수 있습니다 주인 도자기 git 명령 만 사용하는 분기 :
git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"
그것은 우리에게 a 주인 무례한 메시지가있는 분기 (더 정중하게 원할 수도 있습니다). 이제 우리는 "실제"지점을 만듭니다 ( 트렁크 SVN을 기리기 위해) 이혼하십시오 주인:
git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"
이봐, 프레스토! gitk -all 표시됩니다 주인 그리고 트렁크 그들 사이의 연결이 없습니다.
여기서 "마법"이 그게 다행입니다 --개정하다 원인 git 커밋 현재 머리와 동일한 부모와 함께 새로운 커밋을 만들려면 헤드 포인트를 만듭니다. 그러나 현재 헤드는 저장소의 초기 커밋이기 때문에 부모가 없으므로 새 헤드는 서로 분리되지 않습니다.
오래된 헤드 커밋은 삭제되지 않습니다 Git-GC 심판/헤드/마스터가 여전히 그것을 가리키기 때문입니다.
그만큼 -XMALTY 깃발은 빈 나무를 저지르기 때문에 필요합니다. 일부가 있었다면 git 추가이후 git rm 그러면 필요하지 않습니다.
사실, 당신은 저장소의 초기 커밋을 분기하고 나무를 삭제하고, 분리 된 나무를 추가 한 다음, git commit -amend.
원격 저장소에서 기본 브랜치를 수정하는 방법에 대한 질문에 대한 답변은 없지만 분리 된 분기를 만드는 방법에 대한 깨끗한 답변을 제공합니다.
먼저 기본값으로 설정하려는 새 지점을 작성하십시오.
$>git branch main
다음으로 해당 가지를 밀어 넣으십시오 기원:
$>git push origin main
이제 GitHub 계정에 로그인하면 저장소로 이동하여 설정> 기본 분기를 선택하고 선택할 수 있습니다.기본."
그런 다음 선택하면 마스터 브랜치를 삭제할 수 있습니다.
$>git push origin :master
Gitolite People의 경우 Gitolite는 (대기)라는 명령을 지원합니다. symbolic-ref
. REPO에 W (쓰기) 권한이있는 경우 해당 명령을 원격으로 실행할 수 있습니다.
이 질문과 관련하여, 나는 다음을 검색 할 때 여기에서 끝났습니다.
Github에서 변경된 기본 지점을 인식하는 지역 리포
완전성을 위해 답변 추가 :
git remote set-head origin -a
단순한 단순히 Github 계정에 로그인하고 탐색 메뉴의 가장 오른쪽에 선택하십시오. 설정,에서 설정 탭 선택하다 기본 지점 그리고 저를 위해 트릭을 한 저장소의 메인 페이지로 돌아갑니다.