Git: 기본 저장소에서 Active Branch를 변경하는 올바른 방법은 무엇입니까?
저는 제 프로젝트의 중앙 저장소로 사용되는 빈 저장소를 가지고 있습니다.개발자들이 하는 모든 것git clone <repo>
그것과 공유하기 위해.복제를 수행할 때 마스터 브랜치를 체크아웃합니다(단, 그렇지 않은 경우).git clone -n
) 때문에repo.git/HEAD
포함하다ref: refs/heads/master
활성화된 분기로 만듭니다.
문제는 활성화된 분기를 올바르게 변경하는 방법입니다.간단히 해킹할 수 있습니다.repo.git/HEAD
직접 파일을 작성하지만, 그것은 끔찍하고, 음, 해킹처럼 보입니다.
하려고 했습니다.git checkout <otherbranch>
레포에.git
디렉터리입니다. 하지만 작업 트리에 없었기 때문에 실패했습니다.
나는 노력했다.git update-ref HEAD refs/heads/otherbranch
하지만 방금 업데이트된 refs/heads/master는 refs/heads/other branch와 동일합니다(좋아요, 저는 그것을 제 프로덕션 저장소가 아니라 더미 저장소에서 했습니다!)
나는 노력했다.git update-ref --no-deref HEAD refs/heads/otherbranch
거의 효과가 있었습니다.업데이트했습니다.HEAD
파일, 하지만 그것은 그것을 SHA1이 가리키는 커밋으로 설정했습니다.refs/heads/otherbranch
.
Git 버전으로 테스트 중입니다.1.7.0.2.msysgit.0
.
이 일을 끝낼 방법은 없는 것 같습니다.git push
모든 것과 혼합물이 당신의 기본 브랜치를 변경하는 것을 허용하는 것은 약간 안전하지 않은 것처럼 보이지만(!), 확실히 레포에서 그것을 하는 더 나은 방법이 있습니다..git
직접 해킹하는 것보다 디렉터리.HEAD
파일.
원격 베어 레포에 액세스할 수 있는 경우 이 문서에서는 다음을 제안합니다.
git symbolic-ref HEAD refs/heads/mybranch
그러면 저장소의 HEAD 파일이 다음을 포함하도록 업데이트됩니다.
ref: refs/heads/mybranch
에서 문서화된 바와 같이
원격 레포에 액세스할 수 없는 경우 이전 답변을 참조하십시오.
다음과 같은 명령을 기억하십시오.
원격 repo의 기본 분기는 변경되지 않습니다.
로컬 저장소에 저장된 원격 추적 분기만 변경합니다.refs/remotes/<name>/HEAD
변하지 않음
HEAD
그 자체(다시 말하지만, 오직.refs/remotes/<name>/HEAD
), 따라서 의 필요성이 있습니다.
그렇게git remote set-head
여기서는 답이 아닙니다.
git symbolic-ref HEAD
즉, 원격 저장소에 직접 액세스할 수 있는 경우입니다.
분기를 변경하려면 HEAD 참조를 사용할 분기로 변경해야 합니다.
먼저 다음을 수행하여 맨 저장소에 있는 모든 참조를 나열합니다.
$find ref
그런 다음 분기에 대한 참조를 찾으십시오. 형식은 다음과 같습니다.refs/heads/<my_branch>
다음 단계에서는 현재 참조를 확인하고 다음을 입력합니다.
$git symbolic-ref HEAD
따라서 어떤 분기가 현재 분기인지 알고 필요에 따라 업데이트합니다.
$git symbolic-ref HEAD refs/heads/<my_branch>
바로 그겁니다.즐거운 시간 되세요.
활성 분기를 올바르게 변경하는 방법
status: repo.git 디렉토리의 git checkout은 치명적인 것을 반환합니다.이 작업은 작업 트리에서 실행되어야 합니다.
팁: --work-tree 인수를 추가합니다.
상세 예제: 가정: 원격 서버의 bare git:
~/syslog_git_storage.git 분리된 작업 트리: /var/www/myappremote
로컬 서버: 지점 버전.1.7(다른 지점) 생성
git 분기 버전 1.7
git 푸시 오리진 버전 1.7
git bare repo를 사용하는 원격 서버:
cd ~/cd_git_storage.git
깃 가지
- 노릇을 취득했습니다
버전 1.7
설명한 바와 같이, 다음 명령을 따릅니다.
git checkout 버전 1.7
돌아가다
치명적: 이 작업은 워크 트리에서 실행되어야 합니다.
다음 명령 사용
git --work-tree=/var/wwww/myapp 원격 체크아웃 버전.1.7
활성화된 분기를 올바르게 변경합니다.
깃 가지
마스터.
- 버전 1.7
다음을 사용하여 결과를 확인합니다.
ll /var/wwww/myappremote
도움이 되기를 바랍니다
적도 v.2.35.3에서,git symbolic-ref HEAD refs/heads/otherbranch
더 이상 파일 참조/헤드/기타 분기가 발생하지 않습니다.대신 .packed-refs에 자동으로 추가되고 커밋이 없으면 HEAD에 추가됩니다.git symbolic-ref HEAD
모두로부터 조용히 보고할 것입니다.
git 도움말 팩 참조
또한 기본 저장소에 액세스할 수 없는 경우 다음을 수행합니다.git remote set-head
그리고 당신은 끝났습니다.
이전 응답 보기
또한 서버에 대한 평판이 거의 없으며 다음을 사용하여 파일을 성공적으로 검색할 수 있었습니다.
git clone //server/repo/directory -b branch_name
새 로컬 리포지토리에 추가할 수 있습니다. 이 경우에는 관리자 권한이 없는 리포지토리에만 적용됩니다.
신청 전과 후에 두 개의 디렉토리를 비교했습니다.
git symbolic-ref HEAD refs/heads/mybranch
그리고 repo.git/HEAD 파일만 변경된 것으로 보이므로 파일을 "해킹"하는 것만으로도 상당히 안전할 것입니다.
언급URL : https://stackoverflow.com/questions/3301956/git-correct-way-to-change-active-branch-in-a-bare-repository
'sourcecode' 카테고리의 다른 글
메서드 이름 끝에 있는 물음표는 루비에서 무엇을 의미합니까? (0) | 2023.06.23 |
---|---|
Express + MongoDB를 위한 최고의 세션 스토리지 미들웨어 (0) | 2023.06.23 |
응용 프로그램이 .css 파일(Flask/python)을 선택하지 않음 (0) | 2023.06.23 |
MongoDB에서 인덱스로 정렬하는 방법은 무엇입니까? (0) | 2023.06.23 |
git 얕은 클론(clone --depth)으로 원격 분기 누락 (0) | 2023.06.23 |