Linux + Git

개발에도 코드 수정을 위해 이전에 작성한 내용을 보존해 주는 버전 관리 시스템(Version Control System)이 필요. 이 중 가장 강력한 도구 Git을 학습하며, 현업에서의 버전 관리 및 협업 기본을 익혀 오픈소스 생태계 기여를 목표로 함.



버전 관리?

  1. 파일 변경시 변경 이력을 저장함.
  2. 변경 이력을 바탕으로 이전 버전으로 돌아갈 수 있음.
  3. 변경 사항 저장시 코멘트 작성을 통해 어떤 변경 사항이 발생했는지 알기 쉬움.
  4. Git으로 관리하는 파일은 여러 원격 저장소를 이용하여 협업에 좋음.
  5. 같은 맥락으로 백업용으로도 좋음.

git flow


Git ?

코드를 효율적으로 관리하기 위해서 개발된 분산형 버전 관리 시스템.

날짜별로 어떤 파일이 어떤 변경이 있었는지 확인 가능. 특정 시점에 생성된 백업 복사본을 스냅샷이라 하는데 스냅샷을 만드는 작업commit 이라고 함. commit 기능으로 변경 사항에 대한 스냅샷 생성, 이전 기록들의 추적 가능.

→ Git에서 소스 코드 변경 이력을 확인할 수 있고, 특정 시점에 저장된 버전과 비교 혹은 해당 시점으로 되돌아갈 수 있음.


Git / Github

  • Git
    • 소스 코드 기록을 관리하고 추적할 수 있는 버전 관리 시스템
  • Github
    • Git Repository를 관리할 수 있는 클라우드 기반 서비스

⇒ Git으로 버전을 관리하는 폴더로 Github을 통해 여러 사람들이 공유&접근.


Github ?

내 컴퓨터에서 Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트.

오픈 소스(소스 코드가 공개된 소프트웨어)는 누구나 자유롭게 해당 기능을 추가하고 개선할 수 있으며, 작업에 **기여(contribute)**함. 해당 소스코드의 기여자들(contributors)과 수정사항 commit 기록 및 변경된 코드 확인 가능.

Git repository

작업중인 소스 코드 폴더를 버전 관리 하기 위해서 내 폴더를 Git의 관리 하에 두는데, 이러한 폴더를 Git repository 라고 함. Git repository는 두 종류의 저장소 제공.

  • Local Repository
    • 혼자 작업할 때 사용하는 저장소
    • 내 컴퓨터, 내 개인 전용 저장소
  • Remote Repository
    • 내 작업 코드를 공유하기 위해 업로드하여 여러 사람과 공유하는 저장소
    • 원격 온라인 서버 상의 저장소

⇒ 다른 사람이 올린 Remote Repository 소스 코드를 내 Local Repository 로 가져올 수 있음.

Fork / Clone

온라인상에 올라온 오픈 소스 프로젝트에 기여(contribute) 하기 위해서 해당 프로젝트 소스 코드의 원격 저장소를 내 원격 저장소로 가지고 오는 작업Fork.

→ Fork 후, 내 Remote Repository에 해당 프로젝트의 소스 코드를 옮겨온 상태에서 코드를 수정을 하려면 내 컴퓨터로 가져오는 작업이 필요함. 이 과정은 Clone. Remote Repository에 있는 코드를 Clone 해서 내 컴퓨터(Local Repository)로 이동.

→ 로컬(내 컴퓨터)에서 소스코드 변경 작업 후, 변경 내용을 commit을 통해 저장하고 Remote Repository로 올려주는 작업이 필요함. 이 과정은 Push. Local Repository에 기록해 놓은 commit을 Remote Repository로 업로드함.

→ Push 완료 후, Github의 Pull Request 기능으로 내가 변경한 코드를 반영할지 여부에 대해 요청 가능.

→ Local Repository에서 변경 사항을 Remote Repository 로 업로드하기 위해 Push를 사용. 반대의 경우, Remote Repository에서 변경 사항이 있을 때 Local Repository 로 가져오는 Pull 작업도 가능.



Git 설치 [macOS]

1
2
3
4
5
6
7
# 설치
git
## => xcode select 설치 여부 => 설치
# 다시 git 명령

## git 버전 확인
git --version

Git 환경 설정

사용자 정보

: 사용자 이름, 이메일 주소 설정. 기록된 정보를 Git 커밋 내역에 기록.

1
2
3
4
git config --global user.name "나의 사용자 이름"
git config --global user.email "내 이메일 주소"

# --global 옵션으로 설정하면 사용자 홈에 저장되어 git 설정 처음에만 입력, 사용자 이름 및 이메일 변경시 다시 입력해야 함.

에디터 설정

: Git에서 커밋 메시지를 기록할 때, merge commit 확인 메시지가 나올 때 텍스트 에디터로 vi가 열리는데, nano로 변경해도 됨.

1
git config --global core.editor nano

Git 최초 설정

Git - Git 최초 설정



SSH 등록

HTTPS로 git을 사용할 때에는 토큰을 발행하여 접속해야함.

ssh는 Secure shell의 줄임말, 보안이 강화된 shell 접속을 뜻한다. CLI 환경(터미널)에서 다른 PC에 접속하거나 요청할 때 사용, 비대칭키를 이용해 사용자를 인증.

SSH 키 생성

비대칭키로 구성되며, 두 개의 키가 서로 대칭이 되지 않는 형태로 존재함.

1
2
3
4
5
6
7
# ssh 키 페어 생성
ssh-keygen

## 이후 enter 키 반복
# ~/.ssh./ 경로에 두 파일 id_rsa 와 id_rsa.pub 키 페어 생성
## id_rsa.pub = 누구에게나 공개해도 되는 공개키(Public Key)
## id_rsa = 비공개로 나만 보관하는 키, 개인키(Private Key) = 비밀키(Secret Key)

⇒ 생성된 SSH 키 페어 중 공개키를 복사하여 gitub에 등록


공개키(Public Key) 복사

1
2
3
4
# ssh 출력
cat ~/.ssh/id_rsa.pub

## 공개키 복사

Github에 공개키 등록

  • 브라우저로 Github 이동 > 로그인
  • 우측 상단 프로필 클릭 > Settings
  • 좌측 네비게이션 > SSH and GPG keys
  • SSH keys > [버튼] New SSH Key
  • 키 구분을 위해 임의의 타이틀 작성 > Key에 공개키 붙여넣기 > [버튼] Add SSH Key
  • Confirm access에서 Github 로그인 비밀번호 입력 후, SSH key 등록 승인


Github CLI 사용 인증 과정

1
2
3
4
5
# Github CLI 설치
brew install gh

# 로그인 시도
gh auth login
  • 화살표 키로 다음 항목 선택 > Enter

? What accout do you want to log into? GitHub.com
? What is your preferred protocol for Git Operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

one-time code > Enter > Device Activation 에 입력



혼자 workflow

  1. Remote의 다른 Repository에서 Fork를 해서 Remote에 있는 내 Repository에 가지고 옴.
  2. 해당 코드 수정을 위해 내 컴퓨터로 가져오는 작업이 또 필요. 내 컴퓨터에서 작업을 하기 위해 clone.
  3. 내 컴퓨터의 작업 공간(work space) 에서 작업에 들어간 파일들을 git의 관리하에 있는 상태로 올려줌. 이 영역이 staging area. 즉, staging area에 들어오지 않은 파일은 unstaged 혹은 untracked file 이라 하며, staging area에 있는 파일들은 staged 된 파일이라함.
  4. staging area에 들어온 파일들은 commit이 가능. commit을 한 후, 내 remote repository에 push 해서 commit 기록을 remote 에도 남길 수 있음.
  5. push 완료 후, remote의 원래 레파지토리에 pull request를 보내 Remote Repository로 내가 수정한 코드를 업로드 가능.


함께 workflow

  1. 내 컴퓨터에서 생성한 디렉토리를 init 명령어를 통해 Git의 관리하에 들어가게 만듦.
  2. 내 컴퓨터의 Git 디렉토리를 Remote Repository와 연결.
  3. pair의 변경 사항과 나의 변경 사항을 Remote Repository를 통해서 공유.
  • 내 컴퓨터의 디렉토리를 Git Repo로 변환, Git의 관리하에 두기.
    • git init
      • Git Repository로 변환하거나 새로운 Repository를 초기화
    • ⇒ Local Repo 생성
  • Local Repo와 Remote Repo 연결 작업
    • git remote add
    • git remote add origin <내 Repository 주소>
      • 나의 Remote Repo에 연결
    • git remote add <상대 Repo 이름> <상대방 Repository 주소>
      • Pair의 Remote Repo에 연결하여 Github Repo를 함께 공유
  • Local Repo와 연결된 모든 Remote Repo 리스트 확인
    • git remote -v
  • git pull <상대 Repo 이름> <branch 명>
    • 페어가 master branch에 올려둔 Remote Repo의 작업 코드 받아오기
      • git pull pair master
      • ⇒ 받아온 내용은 자동으로 merge(병합)
    • git status
      • 병합 실패한 파일의 충돌 확인
      • Accept Current Change : 수정한 내용으로 파일에 반영
      • Accept Incoming Change : Remote Repo의 내용으로 반영
      • Accept Both Changes : 변경 사항 모두를 반영
      • ⇒ Remote Repo에 업로드를 위해서 staging area에 파일을 추가
        • git add
        • git commit
        • git push