- 부스트캠프가 끝나고, 부스트캠프 때의 내용들을 백업 해두기로 했다.
- 그리고 아무 생각없이 clone을 받았는데...
- 해당 Repository에는 161개의 branch가 존재하는데 clone은
master
branch 1개만 받아왔다. - 따라서 모든 branch를 local에 받아오는 방법을 찾게 되었다.
- git clone으로 받아오게 되면 origin/master branch를 tracking 하고 있는 master branch만 존재하게 된다.
- 이 때, clone의 결과로 origin이란 이름으로 remote repository가 등록 되게 되므로 remote-tracking branch1) 들이 등록된다.
- 또한, Remote-tracking branch와 연결된 tracking branch2)를 생성 할 수 있게 된다.
- master branch는 이미 이렇게 연결되어 있어서 우리가 git pull, git push 등의 명령에 대해 뒤의 인자를 직접 명시하지 않아도 처리 되는 이유다.
- 원격 저장소에서 추적하는 branch들을 말한다.
- 예를들면
origin
이란 원격 저장소가 있고, 해당 저장소에master
branch가 있다면origin/master
형태로 표시되는 branch이다. - 이 branch는 원격 저장소의 master branch와 연결된 branch라고 보면된다.
- Remote-tracking branch를 tracking하는 branch들을 말한다.
- 우리가 기존의 fetch명령어들이 우리 작업물에 바로 적용되지 않고 비교할 수 있었던 이유가 각각이 branch로 존재하기 때문이다.
- fetch는 tracking branch에 연결된 remote-tracking branch를 update하게 된다. 따라서 remote-tracking branch와 tracking branch를 비교 할 수 있다.
- git clone 시에 master branch는 자동으로 tracking branch로 origin/master인 remote-tracking branch와 연결된다.
- 위의 설명을 참조하여 원격저장소에서 Remote-tracking branch들과 연결된 tracking branch들을 만들어주고 받아오는 방법을 취하면 된다.
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
- git branch -r 명령어
- remote 저장소의 Remote-tracking branch의 리스트를 받아올 수 있다.
- grep -v '->'
- 받아온 리스트의 첫번째는
origin/HEAD -> origin/master
로 되어있어서 이를 제거하기 위함이다.
- 받아온 리스트의 첫번째는
- git branch --track trackingBranch remoteTrackingBranch
- remoteTrackingBranch를 추적하는 trackingBranch를 만든다.
- ${remote#origin/}
- Bash스크립트 문법으로 $는 내부의 값을 변수로 인식해서 remote는 변수가 된다.
- 이 때, 매개 변수 확장 문법에 의해 ${변수#단어}는 변수의 앞부분 부터 짧게 일치한 단어 삭제3)를 가리킨다.
- 따라서 origin/을 지운 값이 된다.
- git clone의 다양한 옵션중에
--mirror
옵션이 있다. - 이 옵션을 사용하면 원격 저장소의 모든 파일을 형상 관리 하는
.git
폴더를 받아올 수 있다.
mkdir repo_folder && cd repo_folder
git clone --mirror repo_URL .git
git config --bool core.bare false
git reset --hard
- 첫번째 파일들이 저장될 폴더를 만들고 폴더 내부로 들어간다.
- 두번째
--mirror
옵션을 이용하여 내부의.git
폴더로 파일들을 받는다. - 세번째 git 구성의
bare
값을 false로 바꿔서 빈 저장소에서 일반 저장소로 변경한다. - 네번째
reset --hard
를 이용해서 .git 폴더의 내용들을 기준으로 정상적인 저장소로 변경합니다.
push
의--mirror
옵션을 이용하면 현재의 모든 commit 기록을 그대로push
할 수 있다.- 이를 이용해서 원격 저장소를 옮기거나 처음 등록 할 때, repository를 remote에 등록하고
--mirror
옵션을 이용해push
함으로서 기록을 살려서 저장할 수 있다.
git clone [repository] -b [branch_name] --single-branch