sourcecode

Git: 기본 저장소에서 Active Branch를 변경하는 올바른 방법은 무엇입니까?

copyscript 2023. 6. 23. 22:22
반응형

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

반응형