19.12 Refspec
원격 저장소를 등록할 때 로컬 저장소의 refs 와 원격저장소의 refs 를 매핑합니다.
19.12.1 매핑
로컬 저장소에 원격저장소를 remote add 하게되면 매핑정보를 기록합니다. 패핑정보는 .git/config 파일에 기록됩니다.
infoh@DESKTOP-VAKLOFQ MINGW64 /e/jinygit/gitstudy19 (master)
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/jinygit/gitstudy19.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
깃은 원격 저장소의 refs/heads 의 정보를 읽어와서 이를 로컬 저장소의 refs/remotes/origin에 복사하게 됩니다.
Refspec 매핑 형식은 <src>:<dst>
형태의 한쌍으로 저장을 합니다. <src>
는 원격 저장소를 말하며, <dst>
는 로컬 저장소를 말합니다. 예제에서 +refs/heads/* : refs/remotes/origin/* 처럼 기록된 정보를 확인 할 수 있습니다.
+
기호
매핑 주소 앞에 있는 + 기호가 있는 경우가 있습니다. 기본적으로 fast-forward 방식의 업로드만 허용합니다. 그 외에는 거절이 됩니다.
하지만 +기호를 추가하시면 거절을 하지 않고, 강제 덥어쓰기 형태로 다른 방식의 업데이트를 허용하는 것입니다.
*
기호
매핑 주소뒤에는 아스테리크() 기호를 확인할 수 있습니다. 아스테리크()기호는 모든 단어들 대체하는 의미를 가지고 있습니다. 이를 통하여 여러 브랜치의 데이터를 읽어 올 수 있습니다.
19.12.2 패치 설정
원격 저장소의 Refspec 패치 설정은 원격 저장소에서 브랜치의 데이터를 읽어오는 방법을 지정하는 것입니다. 단일/다중/네임스페이스등을 추가하여 설정을 변경할 수 있습니다.
단일패치
특정한 브랜치만을 지정할 수도 있습니다. 예를 들어 마스터(master) 브랜치만 허용할 때는 아스테리크 기호 대신에 브랜치명을 지정하시면 됩니다.
fetch = +refs/heads/master : refs/remotes/origin/master
다중패치
아스테리크(*)기호 대신에 직접 브랜치명을 지정하는 경우에는 한 개만 패치할 수 있습니다.
패치 정보는 여러 개를 동시에 설정을 할 수 있습니다. 그러면 한꺼번에 여러 개여 브랜치 정보를 패치하여 가지고 오게 됩니다.
[remote "origin"]
url = https://github.com/jinygit/gitstudy19.git
fetch = +refs/heads/master : refs/remotes/origin/master
fetch = +refs/heads/develop : refs/remotes/origin/develop
Glob 표현
브랜치를 refspec에 입력을 할 때에는 정확한 브랜치의 이름을 적어 주셔야 합니다. 다음과 같이
fetch = +refs/heads/fix* : refs/remotes/origin/fix*
fix*와 같이 Glob 패턴의 형식은 사용을 할 수 없습니다.
네임스페이스
fix/* 와 같이 네임스페이스를 이용하여 작성을 하는 것은 가능합니다.
fetch = +refs/heads/네임스페이스/* : refs/remotes/origin/네임스페이스/*
19.12.2 푸시
매핑 정보를 활용하여 원격저장소에서 브랜치를 가지고 오는 다양한 방법에 대해서 알아 보았습니다. 이번에는 반대로 매핑 정보를 이용하여 푸시(push)를 할 수 있습니다.
$ git push origin master:refs/hads/네임스페이스/master
위의 푸시(push)명령은 로컬의 master를 원격저장소의 네임스페이스/master 로 전송을 합니다.
매핑정보를 이용하여 명령을 간단하게 변경할 수 있습니다.
[remote "origin"]
url = https://github.com/jinygit/gitstudy19.git
fetch = +refs/heads/master : refs/remotes/origin/master
fetch = +refs/heads/develop : refs/remotes/origin/develop
push = refs/heads/master:refs/heads/fix/master
push 매핑정보를 추가하면 별도의 refspec 정보를 입력하지 않아도 자동으로 푸시(push)를 할 수 있습니다.
로컬브랜치의 master를 원격 저장소의 fix/master로 자동 푸시(push)하도록 하는 설정입니다.
19.12.3 refs 삭제
Respect을 이용하여 서버에 있는 refs 정보를 삭제할 수 있습니다. : Refspec 형식에서 부분을 비우고 명령을 실행하면 됩니다.
등록한 Refspec을 삭제합니다.
깃교과서
버전 관리 시스템의 이해와 설치부터 커밋, 브랜치, 임시 처리, 병합, 복귀, 서브모듈, 태그까지
깃, 소스트리, 깃허브로 실습하며 기본기를 탄탄하게 다진다!