Github 기초 사용법

구명규·2023년 2월 11일
5

etc.

목록 보기
1/4
post-thumbnail

Git이란, source code를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'으로, source code가 수정 또는 추가될 때 육하원칙에 따라 그 이력을 자동으로 저장해준다. 이러한 git의 기능을 활용하기 위해선 git 저장소(git repository)가 필요한데, 가장 대표적인 무료 git 저장소가 바로 Github이다. 전 세계의 개발자들은 Github를 통해 서로 open source를 공유하고 협업 프로젝트의 생산성을 높이고 있다.

본 글에서는, Github 시스템의 기초용어와 주요 명령어들을 알아보고자 한다.

Github 기초용어

Git repository에는 파일이 변경이력에 따라 구분되어 저장되며, 위치에 따라 Github 서버와 같은 원격 저장소(remote repository)와 개인 pc의 로컬 저장소(local repository)로 구분된다. (내 pc에서 수정된 파일이 곧바로 저장되는 workspace와 git 파일이 저장되는 local repository를 서로 구분할 수 있도록 하자.)

이에, 사용자는 1) workspace에서 작성된 파일을 원격 저장소에 올리고, 2) 반대로 다른 사용자에 의해 수정된 파일을 원격 저장소에서 workspace로 받아올 수 있다. 파일이 옮겨지는 방향을 기준으로 Github의 용어를 정리해보자.

1. Workspace \rarr Remote Repository

  • git 'add' (workspace \rarr 스테이지 영역)
    : Workspace file의 생성/변경/삭제 이력을 스테이지 영역에 추가
    *스테이지 영역: 커밋할 변경이력이 임시로 저장되는 위치
  • git 'commit' (스테이지 영역 \rarr 로컬 저장소)
    : Index에 기록된 변경이력을 로컬 저장소에 저장
  • git 'push' (로컬 저장소 \rarr 원격 저장소)
    : 로컬 저장소에 저장된 변경이력을 원격 저장소에 업로드

이 때, 작은 작업 단위로 commit을 하고, 어느 정도의 작업이 일단락되었을 때 push를 하는 것이 일반적이다.

2. Remote Repository \rarr Workspace

  • git 'clone' (원격 저장소 \rarr workspace)
    : Workspace의 내용을 원격 저장소와 일치화하는 것으로, 보통 프로젝트에 처음 투입될 때 사용되는 명령이다.
    (만약 원격 저장소의 내용과 다른 파일이 workspace에 저장돼있을 경우, 해당 파일은 삭제된다.)
  • git 'pull' (원격 저장소 \rarr workspace)
    : 다른 사용자에 의한 원격 저장소의 변경이력을 workspace에 반영한다. ('clone'과는 달리, workspace에서 기존에 작업했던 내용은 유지된다.)
  • git 'fetch' (원격 저장소 \rarr 로컬 저장소)
    : 원격 저장소의 최신 변경이력을 로컬 저장소에만 가져와 확인한다.
    (해당 내용을 확인만 하고 workspace의 데이터와 merge하지 않으려 할 때 사용된다.)

이 때, 만약 원격 저장소의 최신 변경이력을 pull하지 않은 채 workspace에서 수정된 파일을 push하면 해당 요청은 거부된다.

이제 이에 대한 git 명령어를 살펴보도록 하자.

Github 기본 명령어

	git status
	# 로컬 저장소의 상태를 확인 / 현재 branch명과 추가, 변경된 파일 및 디렉토리 목록 표시
  • git 'remote'
	git remote
    # 로컬 저장소에 연결된 원격 저장소를 확인
    
    git remote add [별칭] [원격 저장소 URL 주소]
    # 로컬 저장소에 새로운 원격 저장소를 등록 / [별칭]은 주로 origin을 사용
    
    git remote show [원격 저장소명]
    # 원격 저장소의 세부 정보를 확인
    
    git remote rm [원격 저장소명]
    # 원격 저장소를 제거
  • git 'add'
	git add [파일명 혹은 디렉토리명]
    # Workspace의 파일을 스테이지 영역에 add / "*.txt"와 같이 여러 대상 지정 가능
    
    git reset HEAD [파일명 혹은 디렉토리명]
    # 해당 파일의 git add를 취소 / 파일명이 없으면 add된 파일 전체를 취소(unstaged 상태로 변경)
  • git 'commit'
	git commit -m "[커밋 메세지]"
    # 커밋할 내용을 설명하는 메세지와 함께 add된 파일들을 commit
    
    git commit --amend -m "[새로운 커밋 메세지]"
    # 기존 커밋 메세지를 수정
    
    git commit -a
    # add + commit / ex. git commit -am "The first commit"
    
    git log
    # git commit한 목록 확인
    
   	git reset HEAD^
    # git commit 취소 후 해당 파일들을 unstaged 상태로 변경
  • git 'push'
	git push [원격 저장소명] [브랜치명]
    # 로컬 저장소의 파일을 원격 저장소에 push / ex. git push origin master
    
    git push -u  [원격 저장소명] [브랜치명]
    git push --set-upstream  [원격 저장소명] [브랜치명]
    # 원격 저장소와 브랜치를 기억하여 이후 'git push' 명령어로 단축하여 사용가능
    
    git push --delete [브랜치명]
    # 원격 저장소의 브랜치를 삭제
  • git 'clone'
	git clone [원격 저장소의 URL 주소]
    # 원격 저장소의 파일을 workspace에 clone
    
    git clone -b [브랜치명] [원격 저장소의 URL 주소]
    # 특정 브랜치를 clone
  • git 'pull'
	git pull [원격 저장소명] [브랜치명]
    # 원격 저장소의 변경이력을 workspace로 pull
  • git 'fetch'
	git fetch
    # 원격 저장소의 변경이력을 workspace에 적용하지 않고 확인

Branch

한편, git이 지원하는 branch라는 기능을 활용하면 원격 저장소의 파일을 여러 버전에 대해 병렬적으로 수정할 수 있게 된다. Branch를 만들어 개인 workspace에서 독립적으로 개발을 진행한 뒤, 원격 저장소의 파일에 merge하는 방법으로 여러 사용자가 하나의 파일을 동시다발적으로 수정할 수 있다. 명령어를 중심으로 branch 기능을 하나씩 살펴보자.

git branch
# 전체 branch 목록 탐색 및 내가 위치한 branch 확인
# 'master': 최초 repository 생성 후 commit하면 자동으로 생기는 branch

git branch -r
# 원격 저장소의 branch 확인

git branch -v
# Branch의 마지막 commit message 확인

git branch [새 branch명]
# 새 branch 생성

git checkout [branch명]
# 해당 branch로 이동

git checkout -b [새 branch명]
# 새 branch 생성 후 해당 branch로 이동

git push origin [branch명]
# 해당 branch의 변경이력만 푸쉬

git merge [branch명]
# 해당 branch를 현재 위치하고 있는 branch로 병합

git branch -d [branch명]
# 해당 branch를 삭제

etc.

  • Fork : 다른 사용자의 원격 저장소에 있는 파일들을 내 저장소로 가져와 임의로 수정할 수 있는 기능으로, 이후 수정한 코드가 원작 코드보다 좋다고 생각해 원작자에게 요청을 보내어 원작자가 수락할 경우, 원작 코드는 수정되고 자신이 contributor에 추가된다.

Summary

  Github에 새로운 repository 생성 후 commit하기까지의 과정.

  1. Github Repositories \rarr New \rarr Repository name 등 작성 후 Create Repository
  2. 생성된 repository의 Git 주소 복사
  3. 작업 중인 서버의 프로젝트 디렉토리로 이동하여 $git init
    (현재 디렉토리를 기준으로 Git 저장소 생성, .git 디렉토리 생성됨)
  4. $git remote add origin [Git 주소]
  5. $git branch -M main (브랜치를 master에서 main으로 변경)
  6. $git branch (현재 branch 확인)
  7. $git add -A (수정된 파일 전부를 스테이징 영역에 추가, $git add . 으로 현 디렉토리만으로 제한 가능)
  8. $git status (현재 add 내역 확인)
  9. $git commit -m "Initial commit" (스테이지 영역 \rarr 로컬 repository)
  10. $git log (commit 이력 확인)
  11. $git push origin main (로컬 repository \rarr 원격 repository)
    11-1. ! [rejected] main -> main (non-fast-forward) 에러 발생할 경우 $git push origin +main 시도

References

profile
K'AI'ST 학부생까지의 기록

0개의 댓글