[Git] Refspec

jjuya·2020년 2월 26일
0

git

목록 보기
3/3
$ git push -u origin refs/heads/candidate/${_NODE_ENV}/*

위 명령은 origin이라는 저장소의 refs/heads/candidates/${_NODE_ENV}/*의 브랜치에 push를 한다. 이 명령어를 보고 시작한 Refspec 개념 정리입니다.

형식

+ <src>:<dst>
  • + : fast-forward가 아닌 업데이트를 허용한다는 의미, 생략 가능
  • <src> : source 패턴, 원본
    - 리모트 저장소의 Refs 패턴(??)
    • 기본적으로 refs/heads/* 로 설정
  • <dst> : destination 패턴, 합쳐야 할 대상
    - 리모트 저장소에 매칭되는 로컬 저장소의 Refs 패턴(??)
    - 리모트 저장소는 로컬 저장소의 refs를 매핑해 refs/remotes/리모트 저장소명/*으로 Refs를 저장해 둔다.(로컬 저장소의 refs와 동일한 해시값을 가진다.)

기본적으로 git은 git remote add 명령으로 생성한 설정을 참고하여 리모트 서버에서 refs/heads/에 있는 Refs를 가져다 로컬의 refs/remotes/origin/에 기록

예시

git log

로컬의 히스토리 접근

$ git log master
$ git log heads/master
$ git log refs/heads/master

리모트의 히스토리 접근

$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master

git fetch

# .git/config
fetch = +refs/heads/*:refs/remotes/origin/*

이는 해당 리모트 저장소에서 git fetch 명령을 실행할 때 자동으로 사용되는 Refspec이다.

$ git fetch origin master:refs/remotes/origin/mymaster

리모트 브랜치 master(원본)를 로컬 브랜치 origin/mymaster(합쳐야 할 대상)로 가져온다.

git push

$ git push origin master

위에서 masterrefs/heads/master:refs/heads/master를 의미한다. <src>는 푸쉬하기를 원하는 브랜치의 refs(원본), <dst>는 리모트에 푸시가 될 때 업데이트 될 브랜치의 refs(합쳐야 할 대상)이다.

$ git push origin master:refs/heads/qa/master

로컬의 master 브랜치를 리모트의 qa/master로 push한다.

끝맺음

정리하면서도 계속 헷갈리는 개념이다. 앞으로 cli로 삽질 하면서 익히는 수 밖에 없을 것 같다.


참고
10.5 Git의 내부 - Refspec

profile
내가 공부하기 위해 시작한 velog

0개의 댓글