본문 바로가기
ETC/Git

[Git] Git의 기본

by 컴돈AI 2024. 4. 30.

목차

    Git이란?

    • Git이란 간단히 말하면 코드 버전 관리 시스템입니다. 

    Git의 작업영역

    • Working Directory / Staging Area / Local repository / Remote repository
      • Working Directory
        • 현재 로컬환경에서 작업 중인 프로젝트 폴더
      • Staging Area
        • commit 하기 전 commit 할 파일들을 모아두는 공간
        • commit 시 Staging Area안의 내용이 한 번에 Local Repository에 반영
      • Local Repository
        • commit된 파일들이 위치하는 영역 (이를 통해 버전 관리를 진행합니다.)
      • Remote Repository
        • 협업이나 백업을 위해 존재하는 원격 저장소

    git 시작

    • "git init"을 통해 Local Repository를 생성할 수 있습니다. (즉, .git 폴더가 생성됩니다.)
    • "git add"를 통해 현재 프로젝트 폴더에서 작업된 내용을 Staging Area에 올릴 수 있습니다.
      • 파일 스테이징 하기 : "git add 파일"
      • 여러 파일 스테이징 하기 : "git add 파일1 파일2 파일3 ..."
      • 변경된 모든 파일 스테이징 하기 : "git add ."
      • (참고)스테이징한 파일을 다시 취소하고 싶은 경우 : "git restore --staged 파일명"
    • "git commit"을 통해 Staging Area에 있는 파일들을 커밋할 수 있습니다. (즉, 버전이 생성되는 것입니다.)
      • 스테이징된 파일들 커밋하기 : "git commit -m 커밋메시지"

    Git이 관리하는 파일 상태

    • Untracked
      • 파일이 처음 생성 시에 해당 파일은 Git이 추적하지 못하므로 Untracked 상태입니다.
    • Tracked
      • 처음 파일이 생성되고 Untracked 파일이 add나 commit을 통해 Git이 관리하도록 해주면 Tracked 상태가 됩니다.
      • git add 만 해주더라도 Tracked file이 됩니다.
    • Ignored
      • .gitignore에 작성된 파일이나 폴더
      • 해당 파일은 Git이 추적하지 않습니다.

    git status를 통한 파일 상태 확인

    • "git status" 명령어를 사용하면 해당 브랜치의 변경되거나 추가된 파일들의 상태를 표시해 줍니다. 
      • 제일 처음 줄에 On branch 브랜치명을 통해 현재 브랜치명이 표시되어 있습니다.
      • 다양한 상태
        • nothing to commit, working tree clean
          • 현재 브랜치에 변경사항이 존재하지 않습니다.
        • Untracked files
          • 새로 생성된 파일, 즉 Git에서 추적되고 있지 않은 파일들입니다. (= 새로 생긴 파일)
        • Changes to be committed
          • Staging Area에 올라간 파일들입니다. (= add된 상태) (초록색)
          • new file : 새로운 파일
          • modified : 변경된 파일
          • deleted : 삭제된 파일
        • Changes not staged for commit
          • 현재 브랜치기준 변경되었지만, Staging Area에 올라가지 않은 파일들입니다. (= 변경되었지만, add 되지 않은 상태) (빨간색)
          • modified : 변경된 파일
          • deleted : 삭제된 파일
          • (참고 : new file은 add 되기 전에 Untracked File이기 때문에 여기에 표시되지 않고, Untracked files에 표시가 됩니다.)
    • "git status -s" 의 경우 두 개의 글자로 현재 상태를 표시합니다. 
      • nothing to commit, working tree clean일 경우 아무런 내용이 출력되지 않습니다.
      • Untracked files 의 경우 "?? 파일명"으로 표시됩니다.
      • Changes to be committed(X)(초록색)Changes not staged for commit(Y)(빨간색)는 각각 해당 파일 상태를 2개의 문자(XY)로 표시합니다.
        • 해당 내용이 없을 경우 공백으로 표시됩니다.
        • Changes to be committed(왼쪽문자)
          • Staging Area에 올라간 파일들입니다. (= add된 상태) (초록색)
          • new file : A로 표기
          • modified : M으로 표기
          • deleted : D로 표기
        • Changes not staged for commit(오른쪽문자)
          • 현재 브랜치기준 변경되었지만, Staging Area에 올라가지 않은 파일들입니다. (= 변경되었지만, add 되지 않은 상태) (빨간색)
          • modified : M으로 표기
          • deleted : D로 표기
          • (참고 : new file은 add 되기 전에 Untracked File이기 때문에 여기에 표시되지 않고, Untracked files로 ??표시가 됩니다.)
      • 예시

          • a파일은 수정되고 stage에 올라간 상태입니다.
          • b파일은 수정되고 stage에 올라간 상태이지만, stage에 올라간 이후에 추가로 수정된 상태입니다.(이 뒤에 작업은 아직 stage에 올라가지 않은 상태입니다.)
          • c파일은 삭제되고 stage에 해당 삭제내용을 add한 상태입니다.
          • d파일과 f파일은 생성된 뒤, stage에 올라간 상태입니다.
          • e파일의 경우 생성된 뒤, 아직 add가 되지않아 Untracked 상태입니다.

    Git 설정(config)

    • git에는 사용자이름, 사용자이메일, 기준이 되는 브랜치명 등 여러 설정항목들이 있습니다. 해당 설정항목들은 config 파일에 존재합니다. config 파일은 로컬 - 글로벌 - 시스템 우선순위로 적용됩니다.
      • 로컬 : 해당프로젝트폴더\.git\config
        • 프로젝트 별로 적용되는 설정사항입니다.
      • 글로벌 : C:\Users\[사용자 아이디]\.gitconfig
      • 시스템 : C:\Program Files\Git\etc\gitconfig
    • git config  
      • "git config --list"를 통해 해당 프로젝트에 적용되는 모든 설정사항을 확인할 수 있습니다.
      • --global
        • 이 옵션을 적용하면 글로벌 config에 적용이 됩니다. 보통 컴퓨터를 사용하는 사용자 이름, 이메일 계정 등을 글로벌 config에 적용시킵니다.
          • 이 옵션을 적용하지 않으면 로컬 config에 적용됩니다. (즉, 다른 프로젝트에서는 해당 config 정보가 저장되어 있지 않습니다.)
        • "git config --global 설정명 설정값"
        • 예시
          • "git config --global user.name 사용자이름"
          • "git config --global user.email 이메일계정"
          • "git config --global init.defaultbranch main"
            • 이 옵션은 기준이 되는 브랜치 명이 master로 생성되는 경우가 많은데, 이를 main으로 변경시켜 주는 것입니다.
      • --unset
        • 이 명령어는 해당 config 정보를 삭제시킵니다.
        • "git config --unset 설정명"
        • 예시
          • "git config --global --unset user.name"
          • "git config --global --unset user.email"