TIL_171018 git, fork한 repo에서 특정 폴더만 갱신 'sparse checkout'

fork를 떠온 repo(원본)중, 내가 컨트리뷰트한 폴더 외, 특정 폴더도 pull할때마다 갱신되게 하기

sparce checkout
기본적으로 내가 포크를 뜬 레포 (포크레포)에는 remote가 origin master 하나만 설정되어 있고,
포크 떠온 레포(원본레포)에는 내가 컨트리뷰트한 폴더(내가 포크 레포에 생성한 폴더)외, 다른 폴더들이 많이 있다고 할 시,
포크 레포를 pull할때마다 원본레포의 특정 폴더만 포크레포의 폴더들과 함께 계속해서 내 로컬에 갱신되게 하는 방법이다.

  1. ‘sparse checkout’기능은 깃의 기본 기능이지만 비활성화 되어 있어 활성화 시켜주어야 함

    1
    2
    //포크 레포의 로컬에서 진행
    $ git config core.sparseCheckout true
  2. 원본 레포의 리모트 설정

    1
    2
    3
    4
    //origin 외, 주소가 있는지 확인
    $ git remote -v
    //없다면, 원본 레포 리모트 'upstream'이라는 별칭으로 추가
    $ git remote upstream http://원본레포-경로주소
  3. ‘sparse checkout’은 포컬 레포의 로컬에서 .git/info/ 에 위치해야함.

    1
    2
    3
    4
    5
    6
    7
    8
    //.git은 숨김파일 -> echo명령어로
    $ echo "컨트리뷰트-폴더명" >> .git/info/sparse-checkout
    $ echo "원본레포-특정폴더명" >> .git/info/sparse-checkout
    // 해당 파일에 폴더명이 들어가있는지 들어가서 확인해보기
    //sparce-checkout에는 내가 입력한 폴더명이 입력되어 있어야함
    $ code .
  4. pull - 원본 레포의 폴더들이 내 로컬에 당겨짐
    주의
    원본레포에 있는 사항이 로컬에 저장되므로, 내가 컨트리뷰트한 폴더의 최신본이
    아직 원본레포에 반영이 되어 있지 않는 경우를 조심해야함.

    1
    $ git pull upstream master
[참고] echo
  • 쉘 명령어 ‘echo’는 “*“ 따옴표 안의 문자열을 터미널에 찍어줌.
  • ‘>>’를 통해 이후에 들어오는 경로주소의 파일에 문자열을 입력할 수 있음.
  • 경로주소에 해당 파일이 없을 시, 파일을 샏성 후 문자열을 입력