이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
Git & Github
대부분의 소프트웨어는 수많은 개발자들이 오랜 시간 협업을 통해 만든 결과물입니다.
Git
Git은 버전관리와 동시협업을 가능하게 해주는 프로그램입니다. (코드 버전 관리 프로그램)
- 버전 관리 : 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점에 다시 꺼내올 수 있는 시스템입니다.
- 버전 관리의 장점
- 과제의 진짜 최종 버전을 만들 때까지 지난 과정을 확인할 수 있습니다.
- 어딘가 잘못된 부분이 생기면 이전 버전으로 돌아갈 수 있습니다.
Git을 이용하면 여러 개발자가 동시에 작성한 코드를 한번에 합칠 수 있습니다.
Git의 주요 기능에는 버전 관리, 분산형 저장소, 브랜치 및 병합, 병행 작업 지원, 다양한 워크플로우 지원 등이 있습니다.
Git과 관련된 프로그램
- Git
- Github
- Sublime Text
Git을 사용하는 이유
- 버전 관리 : Git은 파일의 변경 내역을 추적 가능. 이전 버전으로 쉽게 돌아갈 수 있고, 변경 사항을 비교할 수 있습니다.
- 협업 용이 : 여러 개발자가 동시에 같은 프로젝트에서 작업 가능. 각 개발자는 자신의 브랜치에서 독립적으로 작업할 수 있으며, 나중에 변경 사항을 병합할 수 있습니다.
Git의 역사
Git의 창시자 : 리누스 토발즈(리눅스 운영체제 개발자)
리누스 토발즈가 만든 리눅스 → Bitkeeper로 리눅스의 각 버전 관리 → Bitkeeper의 유료화 → 다른 버전 관리 시스템을 찾아보기 시작 → 마음에 드는 버전 관리 툴을 찾지 못해서 본인이 직접 만든 버전 관리 프로그램이 Git 입니다.
Github
깃허브는 원격 저장소를 대신 제공해주는 서비스입니다.
Git으로 자신의 작업물을 다른 컴퓨터에도 전송할 수 있습니다.
장점
- 작업물의 백업본을 만듭니다.
내 컴퓨터에서 작업한 내용이 사라졌을 때, 외부 컴퓨터에서 작업물을 가져와서 사용 가능합니다.
외부 컴퓨터를 직접 준비하려면 너무 번거로워서 이것을 무료로 사용할 수 있게 해주는 서비스가 있는데, 그것이 Github입니다.
외부 컴퓨터를 따로 마련하지 않아도 자신의 작업물을 다른 곳에 백업본으로 보낼 수 있습니다. - 다른 사람과 협업이 용이합니다.
외부 컴퓨터에 올려놓은 작업물을 다른 사람이 받고, 다른 사람이 외부 컴퓨터에 올려 놓은 것을 내가 받을 수 있습니다.
개발자가 여러 명이 있을 때, 각자 작업한 내용을 Github에서 합칠 수 있습니다.
Git과 Github의 차이
Git은 버전관리를 하는 프로그램
Github는 Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트
Git 사용하기
Repository와 commit
레포지토리(Repository ; 저장소) : 커밋이 저장되는 곳
- 어떤 프로그램 개발 → 프로젝트 디렉토리를 먼저 생성 → 관련 파일들을 프로젝트 디렉토리에 보관한다..
- 프로젝트 디렉토리에 생성하는 .git 디렉토리가 레포지토리입니다.
- 레포지토리에는 버전별 프로젝트의 모습과 버전별 변경 사항에 대한 설명이 있습니다.
- git 디렉토리라는 숨겨진 디렉토리가 만들어지는데 이 숨겨진 디렉토리가 레포지토리입니다.
커밋 (commit) : 프로젝트 디렉토리의 특정 모습을 하나의 버전을 남기는 행위와 결과물
- 프로젝트 디렉토리 안에서 여러 작업을 하다 보면 지금의 모습이 딱 하나의 버전으로 남았으면 좋겠다는 생각을 하게 되는데, 이것을 커밋한다라고 표현합니다.
- 커밋하는 당시의 모습이 고정된 결과물로서 사진처럼 저장됩니다.
(Local) 레포지토리(Repository) 만들기
- [mkdir 디렉토리명] 커맨드로 새로운 디렉토리 생성
- [cd 디렉토리명] 커맨드로 1에서 생성한 디렉토리로 이동
- 생성한 디렉토리의 버전 관리를 위해 [git init] 커맨드로 깃 폴더로 초기화 (만들어진 프로젝트 디렉토리 안에 git 레포지토리(.git 디렉토리) 생성)
- [cd ..] 상위 디렉토리로 이동
- 생성한 디렉토리에 [subl 파일명.py] 커맨드를 입력하여 커밋할 파일을 작성하기 위해 서브라임 텍스트 호출
- 서브라임 텍스트로 코드가 작성된 파일 작성 후 파일 작성이 잘 되었는지 확인 (ls -al)
첫 commit
이름 / 이메일 / 메시지(커밋에 대한 정보)
첫 commit 시에는 깃에게 commit한 사람을 알려주기 위해 위 3가지를 입력해야 합니다.
그리고 이름과 이메일 입력하고 커밋하기 전에 먼저 파일들을 staging area로 올려두는 과정이 필요합니다. (git add, 밑에서 설명함)
첫 커밋시 입력 커맨드 : git config, git add, git commit
- git config user.name ‘유저네임’ (config : configure (설정하다))
- git config user.email '본인 이메일’
- git add 파일명 (예) git add calculator.py / git add License)
- git commit -m “커밋에 대한 설명” (예) git commit -m "Create calculator.py and License")
이름과 이메일은 첫 커밋시에만 입력하면 되지만 git commit은 커밋할 때마다 메시지를 작성하여 함께 입력해야 하므로 아주 많이 사용됩니다.
하지만 항상 커밋하기 전에 커밋할 파일들을 미리 지정해줘야 하기 때문에 git add를 하는 것도 잊지 말기를 바랍니다.
첫 커밋을 하게 될 시에 root-commit이란 출력을 볼 수 있는데 이를 첫번째 커밋이라고 알려주는 것입니다.
commit에 관한 주의 사항
- 처음으로 커밋을 하기 전에는 사용자의 이름과 이메일 주소를 설정해야 합니다.
- 커밋을 할 때는 커밋에 대한 정보를 담고 있는 커밋 메시지를 남겨야 하고, -m 옵션을 사용합니다.
- 커밋을 하기 전에는 어떤 파일을 커밋에 반영할 지 미리 지정해야 하는데 git add 로 지정합니다.(수정된 파일의 모습이 커밋에 포함될 것이라 지정하는 것입니다.)
Git의 3가지 작업 영역
Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작합니다.
- Working directory (working Tree) : 작업을 하는 프로젝트 디렉토리
- Staging area (index) : git add를 한 파일들이 존재하는 영역. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영됩니다.
- repositry : working directory의 변경 이력들이 저장되어 있는 영역. Git에서 커밋들이 저장되어 있는 영역
- working directory에서 뭔가 작업을 하고, 작업한 파일들을 git add 해주고, 커밋을 하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면, 스냅샷(snapshot)처럼 repository에 저장되는 일련의 과정을 가집니다.
staging area가 필요한 이유
working directory에서 작업을 하고 git add할 필요없이 바로 커밋해버리는 구조가 더 편할 것 같은데 working directory에서 작업을 하고 단계적으로 staging area로 올리는 이유는 파일들의 모든 최신 모습을 다음 커밋에 반영하고 싶지 않을 수도 있기 때문입니다.
모든 수정 상황을 반영하고 싶지 않은 경우는 실제로 꽤 자주 있습니다.
만약 staging area가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없어 세밀한 버전 관리를 할 수 없게 됩니다.
변경 사항에 대한 git add
working directory의 파일을 수정하거나 추가하게 되면 변경된 내용이 commit에 반영될 수 있도록 commit할 대상으로 지정해주어야 합니다.
그래서 수정하고 추가한 파일을 다시 staging area에 올리기 위해 git add [파일명] 커맨드를 다시 입력합니다.
그러면 성공적으로 모든 변경 사항을 커밋에 반영할 수 있습니다.
만약 변경 사항을 반영하는데 변경된 파일이 너무 많아 하나씩 add하기가 힘들 경우 편리하게 커맨드로 모두 staging area로 올릴 수 있는데, 이 커맨드는 git add . 입니다.
git add . 는 현재 워킹 디렉토리에서 변경 사항이 생긴 모든 파일을 모두 staging area로 올리라는 커맨드입니다.
특정 파일만 올리고 싶다면 git add 파일명으로 따로따로 올려야 하며, 수정된 모두 파일을 올리고 싶다면 git add . 를 사용합니다.
Git이 보는 파일의 상태 4가지 종류와 파일의 상태 확인하기 : git status
Git에서 관리되는 파일은 모두 일종의 상태를 갖고 있습니다.
파일들의 상태 종류(크게 2가지)
- Untracked 상태 : ‘추적되고 있지 않은’ - 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않은 상태
예) 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않은 경우 - tracked 상태 : ‘추적되고 있는’ - 파일이 Git에 의해 그 변동사항이 추적되고 있는 상태 tracked 상태는 아래와 같은 3가지 상태로 또 나눌 수 있습니다.
- staged 상태 : 파일의 내용이 수정되고 나서 staging area에 올라와 있는 상태
예) 새로 생성한 파일에 내용을 쓰고 git add를 해주는 경우 / 한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고 git add를 해주는 경우 - Unmodified 상태 : 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때, 전혀 바뀐게 없는 상태 커밋을 하고 난 직후 working directory 안의 모든 파일들의 상태
- Modified 상태 : 최신 커밋의 모습과 비교했을 때, 조금이라도 바뀐 내용이 있는 상태
- staged 상태 : 파일의 내용이 수정되고 나서 staging area에 올라와 있는 상태
git status (staging area에 수정 파일이 들어가있는지 확인하는 커맨드)
working directory에서 작업한 내용들이 staging area에 수정 파일이 들어가있는지 확인하기 위해서는 git status 커맨드를 사용하면 됩니다.
git status는 깃이 인식하고 있는 프로젝트 디렉토리의 현재 상태를 보여줍니다.
git add 취소하기 : git reset
파일을 수정하고 add하고 나서 파일을 다시 수정해야 할 경우 staging area에서 git reset 커맨드를 이용하여 파일을 제거할 수 있습니다.
staging area에서 파일을 제거하기 위해 git reset 파일명 커맨드를 입력한다면 staging area에서 파일이 잘 제거할 수 있지만, working directory에는 여전히 그 파일 내용이 남아 있기 때문에 내용을 수정하고 파일을 다시 git add를 통해 커밋에 반영할 필요가 있습니다.
즉, git status는 staging area에서 파일을 제거하지만, 변경된 새 모습은 그대로 working directory에 남아있다는 것을 기억하면 됩니다.
특정 git 커맨드의 사용법을 알아보는 방법 : git help
Git를 사용하다가 커맨드를 사용할 때 그 의미나 사용법을 좀더 자세히 알고 싶다면 git help라는 커맨드를 사용하면 됩니다.
추가적으로 예를 들어, git status라는 커맨드의 의미와 사용법을 자세히 알고 싶다면 git help status 라는 커맨드를 사용할 수도 있습니다.
Git에서 사용한 주요 커맨드 리스트
git init | 현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리(=working directory)로 설정하고 그 안에 레포지토리(.git 디렉토리) 생성합니다. |
git config user.name '사용자명' | 현재 사용자의 아이디를 ‘사용자명'으로 설정합니다. |
git config user.email '이메일 주소' | 현재 사용자의 이메일 주소를 '이메일 주소'로 설정합니다. |
git add [파일 이름] | 수정사항이 있는 특정 파일을 staging area에 올립니다. |
git add [디렉토리명] | 해당 디렉토리 내에서 수정사항이 있는 모든 파일들을 staging area에 올리기 |
git add . | 프로젝트 디렉토리 내의 수정사항이 있는 모든 파일들을 staging area에 올립니다. |
git reset [파일 이름] | staging area에 올렸던 파일을 다시 내립니다. |
git status | Git이 현재 인식하고 있는 프로젝트 관련 내용들을 출력합니다. |
git commit -m "커밋 메시지" | 현재 staging area에 있는 것들을 커밋으로 남깁니다. |
git help [커맨드 이름] | 사용법이 궁금한 Git 커맨드의 공식 메뉴얼 내용을 출력합니다. |
이번 글에서는 Git과 Github가 무엇인지 그리고 Git을 사용하는 기초적인 방법들을 다루었습니다.
이번 글에 이어 다음 글에서 Git과 Github에 관련된 다양한 내용들을 다룰 예정입니다.
Git은 프로젝트 등을 진행할 때, 개발자라면 사용할 일이 있고 자주 사용할 수 있는 프로그램으로 내용을 숙지하거나 이번 기회를 통해 알아가면 좋을 것 같습니다.
글 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 'Git' https://www.codeit.kr/topics/git
'프로그래밍 > Git' 카테고리의 다른 글
Git 협업하기 개념 정리 1️⃣ (Git을 통한 협업) (0) | 2024.08.06 |
---|---|
[Git 개념 정리] Git 개념 정리 5️⃣ (Git에서 사용하는 주요 커맨드 리스트) (0) | 2024.07.26 |
[Git 개념 정리] Git 개념 정리 4️⃣ (Git을 자유자재로 활용) (0) | 2024.07.26 |
[Git 개념 정리] Git 개념 정리 3️⃣ (브랜치 사용하기, Git을 통한 협업) (6) | 2024.07.25 |
[Git 개념 정리] Git 개념 정리 2️⃣ (Github 다루기, 커밋 다루기) (2) | 2024.07.21 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!