[CI/CD] Git

GitHub

Git 이란?

git은 프로그램을 버전관리(소스관리)를 해주는 프로그램이다.

git과 github는 사실 재단이 다르다. git은 리누스(리눅스 만든 천재 개발자)가 만들었고 github는 마이크로소프트의 것이다.

깃랩은 여러 이름있는 단체들(나사, 골드만삭스, IBM, 스페이스X …)가 사용하는 이슈 추적 기능까지 있는 데브옵스 플랫폼이다.

이번 포스트에는 github에 대하여 정리 하려고 한다.

알고 있어야 할 개념 및 용어

git은 remote repository (원격 저장소) 와 local repository(로컬 저장소)의 개념이 기본이다

원격 저장소는 git서버에 있는 코드이며 로컬 저장소는 내 pc에 저장소 이다.

그렇기 때문에 rough하게 말하면 github는 원격 → 로컬(pull) 받아 작업 후 로컬 → 원격 (push) 하는게 전부다.

Git 시작

git을 사용하여 프로젝트를 진행 하게 되면 우선 깃 유틸리티를 설치한다

  1. git을 사용할 디렉토리를 정한 후 해당 디렉토리에서 git init 명령어를 통해 깃 초기화를 한다
  2. git remote add origin 를 통해 이 디렉토리를 내가 원격 리포지토리를 추가한다
  3. git clone 으로 코드를 가져온다
  4. 작업한다
  5. git add . (. 는 모든 경로를 의미하며 특정 파일만 기입 가능)를 통해 로컬에 있는 코드를 스태시(stash)영역으로 업로드한다. (stash인지는 확실하지 않음..)
  6. git commit -m “메시지” 를 통해 add 한 작업 파일들을 로컬 저장소에 업로드한다
  7. git push origin master를 통해 마스터브랜치에 푸쉬를 하여 최종 업로드를 한다.

내가 주로 작업한 내용

2개의 서로 다른 리포지토리를 병합해야 한다.

작업 전 알아둬야 할 개념

git fetch 개념을 알아야 한다 (fork, upstream, downstream 도 알면 좋다)

GitHub

git pull 작업은 fetch + merge 작업을 한번에 하는 명령어라고 이해 하면된다. 즉, fetch는 원격저장소의 코드만 FETCH_HEAD라는 로컬브랜치에 내려받으며 작업 중이던 로컬브랜치의 코드와 merge되지 않는다

방법:

합침을 당하고싶은 내 브랜치 A와 합치고 싶은 남의 브랜치 B가 있다고 가정

  1. 브랜치 A를 clone 받아온다
  2. git remote add <브랜치B별명> <브랜치B url=""> 별칭 및 로컬 브랜치 설정
  3. git fetch 브랜치 B의 코드만 가져온다
  4. git checkout -b <합칠브랜치명> <원격target origin="">/<원격 브랜치="" 이름="">
  5. git merge <합칠 원격="" 저장소의="" 별칭="">/<브랜치명>
  6. 서로 다른 저장소의 커밋 히스토리를 합치려하므로 에러 발생 git merge <타겟 원격="" origin="">/<타겟 브랜치="" 이름=""> --allow-unrelated-histories로 에러 해결 (여기서도 conflict 발생 할것이다 충돌은 수작업을 통해 해결 해야 한다)
  7. git push

*추가로 push 할때 password 입력란에 계정 비밀번호가 아닌 token값을 넣어주는 것으로 변경되었다 (git cache를 통한 비밀번호 해킹 취약점 발견되었기 때문) 매번 토큰값을 넣어주기 귀찮다면 ssh 토큰값을 넣어주거나, store cache 를 통해 비밀번호 저장을 하면된다. 비밀번호 저장시 기간을 설정 할 수 있고, 기간이 지나면 다시 비밀번호를 입력해야한다.