베어 git 저장소가 있지만 ssh (사용자 경험과 같은 파일 관리자에서)를 통해 컨텐츠에 액세스하고 찾아 볼 필요가 있습니다.
나는 그것을 복제 할 수 있다고 가정합니다.
git clone -l <path_to_bare_repo> <new_normal_repo>
그러나 내 저장소의 크기는 약 20GB이며 복제 할 공간이 없습니다. 베어 저장소를 제자리에서 변환하여 작업 복사본을 만드는 방법이 있습니까?
답변
참고 : 나는 이것을 매우 간단한 1- 커밋 저장소 에서 테스트했습니다 . 이것을 다시 확인하고 man 페이지를 읽고 StackOverflow에서 찾은 조언을 따르기 전에 항상 백업 해 두십시오. (백업하지?)
--bare
저장소를 베어가 아닌 것으로 변환하려면 다음을 수행하십시오.
.git
저장소의 최상위 수준에 폴더를 만듭니다 .- 방금 만든 저장소 관리 항목 (
HEAD branches config description hooks info objects refs
등)을 이동합니다.git
. git config --local --bool core.bare false
로컬 git-repository를 non-bare로 변환하려면 실행하십시오 .- ( Tamas Pap의 의견을 통해 ) # 3 단계 후에는 브랜치
master
(또는 메인 브랜치)에 있고 모든 파일이 삭제되고 삭제가 준비 되었음을 알 수 있습니다 . 그것은 정상입니다. 그냥 수동으로 체크 아웃master
, 또는을git reset --hard
, 그리고 당신이 완료됩니다. - ( Royi 가보고 한 문제를 해결하기 위해 ) 섹션 에서
.git/config
줄fetch = +refs/heads/*:refs/remotes/origin/*
을 추가하여 파일을
편집 합니다 . 그렇지 않으면 다른 원산지의 분기를 볼 수 없습니다 .url = <...>
[remote "origin"]
git fetch
origin/master
이 단계의 반대 방향에있는 이 질문에 , “보통 자식 – 변환이 저장소 베어하기”- 특정 주에서 이 대답 (어느 방향으로, 나는 가정에서) 위의 단계가한다고, 다른 을하고부터 git-clone
. 그것이 당신과 관련이 있는지 확실하지 않지만 git clone
질문에서 언급 했습니다.
답변
약간 다른 시나리오가 있습니다.
- non-repo ( github에서 tarball을 통해 얻으십시오 )
- 해당 콘텐츠에서 전체 저장소를 복원해야합니다.
해결책:
- 해당 컨텐츠의 베어 저장소를
.git
디렉토리 에 복제하십시오 .
git clone --bare https://github.com/user/project .git
- 비 베어 리포지토리로 표시 :
git config --local --bool core.bare false
- 인덱스를 (A 이후, 그렇지 않으면, 모든 삭제 된 믿고 다시
.git
베어 의 repo 파일 ‘을 포함하지 않는index
‘.)
git reset HEAD -- .
복원합니다 그.git/index
.
이전에 얻은 콘텐츠를 보존하면서 베어 저장소를 베어가 아닌 저장소로 효과적으로 변환했습니다. 전체 스크립트 내가 년 동안 사용하고는 단계를 포함한다 :
cd /path/to/current/worktree
# That creates a .git directly at the right place
git clone --bare /url/of/repo .git
# restore the link between the local repo and its upstream remote repo
git config --local --bool core.bare false
git config --local remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch origin
git branch -u origin/master master
# reset the index (not the working tree)
git reset HEAD -- .
하지만 난 정찰 할 허용 솔루션 합니다 (에 도움이 git reset
추가 단계 로 ADTC는 ) 간단합니다.
답변
답변의 정보를 단순화하고 결합하려면 :
베어 리포지토리를 일반 .git 폴더와 다른 세 가지 차이점이 있습니다.
- core.bare는 구성 파일에서 true로 설정됩니다.
- 인덱스 파일과 작업 트리가 존재하지 않습니다.
- “원본”원격지에 대한 기본 참조 사양이 생성되지 않습니다.
따라서 베어 리포지토리를 새 폴더의 .git 하위 폴더로 간단히 이동할 수 있습니다.
mkdir clone
mv bare.git clone/.git
core.bare 변경 :
cd clone
git config --local --bool core.bare false
확인하기 위해 기본 원점 refspec을 추가 git fetch
하고 git push
평소와 같은 기본값을 선택합니다 :
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
그리고 인덱스 파일과 작업 트리를 생성합니다.
git checkout master
실수로 잘못된 위치에 입력 된 경우 파일을 생성하는 git checkout
것보다 권장 git reset
합니다.
답변
원래 포스터의 질문은 간단한 방식으로 작업을 수행 할 공간이 부족하다는 것입니다. 충분한 공간이있는 경우 답은 훨씬 간단합니다.
git clone foo.git foo
답변
디스크 공간이 부족한 경우 일반 저장소로 변환하여 작업 트리를 확장하는 것이 문제가 될 수 있지만 베어 저장소의 내용을 변환하지 않고 찾아 볼 수 있습니다. git cat-file -p <commit-sha>
커밋에 사용 하여 참조하는 트리를 확인하십시오. git cat-file -p <blob-sha>
Blob에서 참조하는 파일의 내용을 보려면 사용 합니다. 사용 git show <sha>:path
샤 중 하나 인 커밋 또는 나무 경로에서 블롭의 내용을 볼 수 있습니다.
답변
cd
베어 레포로
- 어느 한 쪽:
git config core.bare false
git reset --hard
- 또는
git clone X.git X
(X라는 이름의 일반 git repo를 제공합니다)
답변
다른 작업 트리에서 작업해도 괜찮다면
git worktree add ../repo2
cd ..
git status # now works fine
이것은 클론이 아닙니다.
