Git - commit, 원격 repo, .gitignore

SCPKYG·2023년 3월 24일
0

git / github 개념

git은 내 로컬 저장소의 소스 코드를 형상관리하기 위한 것이고 github 는 로컬이 아닌 원격환경에 소스코드를 저장할 수 있도록 원격 저장소를 제공하는 서비스 입니다.
git에서 관리하는 영역은 크게 3가지가 있습니다.

  • 현재 작업중인 Working Directory
  • commit 할 파일의 예비 저장소, 혹은 추적 대상 파일의 공간인 Staging Area
  • 각 유저의 컴퓨터에서 관리되고 있는 로컬 저장소
    여기서 우리가 직접 눈으로 확인할 수 있는 저장 공간은 Working Directory이며, 현재 프로젝트가 담긴 디렉토리라고 생각해도 무방합니다.

많은 사람이 혼란스러워 하는 부분은 바로 로컬 저장소 이죠. 내 컴퓨터에 분명이 있는 저장 공간이지만 실제로는 눈에 보이지 않기 때문입니다. 이 로컬 저장소는 우리가 Working Directory로 부터 commit 한 내용들이 스냅샷으로 저장되는 곳입니다. 즉, commit이 된 순간의 파일과 그 내용을 로컬 저장소에서 가지고 있기 때문에 언제든지 commit 했던 지점으로 돌아가는 것이 가능합니다.

필수 프로그램 설치

git 계정
git 다운로드 : https://git-scm.com/
Sourcetree 설치하기 : https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourceTreeSetup-3.4.3.exe

Git 은 뭐고, Github 은 무엇인가요?

- Git 으로 무엇을 할 수 있을까요?

- Git 은 프로젝트의 버전 관리를 위한 도구입니다. 
  1. 버전 관리를 할 수 있어요!

  2. 작업 단위 나누기

    • 프로그래밍 하다보면 분명 아까는 되었는데 지금 코드 고치니까 프로젝트가 동작하지 않는 경우가 있어요. 기능을 완성할 때마다 작업 내역을 저장하면 어떤 부분을 만들 때 에러가 발생했는지 쉽게 파악할 수 있어요.
  3. 하나의 프로젝트에서 협업할 때 유용해요.

    • 프로젝트를 나누어서 작업하고 하나로 합치는 것이 편합니다. 누가, 언제, 어떤 부분을 수정했는지를 한 눈에 파악할 수 있어요.
    • 만약 Git 을 사용하지 않고 프로젝트 파일을 덮어쓰는 형태로 관리한다면 아래 같은 경우가 발생할 수 있겠죠! 다른 사람이 작업한 내용을 내 파일로 덮어써버리는 비극이 발생할 수 있어요

Git 을 사용하면 같은 파일명의 내용이 어떤 부분이 다른지를 자동으로 비교하고, 어떤 것을 반영할지 선택할 수 있어요.

Git 으로 모든 파일의 내용이 자동 비교가 되나요?
기본 설정으로는 코드(Python, HTML, JavaScript, Java,...) text 파일, markdown파일(text 파일의 일종), CSV 파일 등 이 가능합니다!

이미지 파일, Word 파일, PDF 파일, 엑셀 파일은 여러가지 설정을 해주어야 가능하답니다. 기본 설정으로 이런 파일들은 파일의 크기가 변했구나! 만 알 수 있어요~

- Github 으로 무엇을 할 수 있을까요?

- Git 과 Github 은 다릅니다!  Github 은 Git 원격 저장소 + Git 으로 할 수 있는 커뮤니티 기능 서비스입니다.
- 즉, Github 은 Git 으로 된 프로젝트 저장 공간을 제공하고, Git 편하게 사용하기 위한 여러가지 부가기능을 가지고 있어요. Git 이 협업할 때 필수! 라고 했었죠? Github 에는 협업하기 위한 기능들을 가지고 있어요. 마치 개발자들의 SNS 같답니다.
- Github 외에도 Git 프로젝트 저장소 +  프로젝트 관리하는 기능을 제공하는 곳으로는 대표적으로 Gitlab, bitbucket 등의 서비스가 있어요.
1. 인터넷으로 연결되어있는 프로젝트 저장소
- 컴퓨터에 있는 내 Git 프로젝트를 저장하기
2. 개발자들의 커뮤니티
- 다른 사람 공개 프로젝트 구경하고, 내가 관심있는 주제/ 프로젝트 소식 받아볼 수 있어요.

프로젝트 함께 만드는데 참여하는 것 즉 '프로젝트에 기여하기(contribution)' 하기 위한 여러 기능도 제공합니다. 이 부분 버그(프로그램 오류,오작동)가 있어요! 알리고 프로젝트를 개선시키려면 어떤게 필요할까? 토의할 수도 있어요.

sourcetree 는 뭐죠?

  • sourcetree 는 Git 을 쉽게 사용할 수 있는 도구입니다. 워드 파일을 편집할 때 MS office 를 사용하는 것처럼요!
  • 🔥 우리가 sourcetree 로 배우는 이유!
    1. 전 세계에서 가장 많이 사용되는 Git 도구 중에 하나입니다. 스스로 공부할 때도 참고할 만한 자료가 많습니다.
    2. 초심자부터 중급자까지 사용할 수 있도록 여러가지 기능을 제공합니다. 한 번 배워두면 편하겠죠?
    3. Git 사용 패턴에 집중하기 위해서!
      • 우리의 목표는 Git 사용 패턴을 이해하고 익숙해지는 것! 사용법 암기가 아니랍니다. 명령어 사용하는 것까지 한 번에 둘 다 배우면 우리가 진짜로 배우고 싶은 Git 사용에 집중하지 못할 수 있어요!

Git 은 여러가지 방법으로 사용할 수 있어요. 아래처럼 터미널에 명령어를 직접 입력할 수도 있죠(이런 방법을 CLI 라고 불러요)

👉 Git 만, Github 만 따로 사용 🙅! Git + Github 혹은 Git + 프로젝트 관리 도구 를 조합해서 사용하는 경우가 대부분이에요!
  • 대부분의 회사에서 Git 과 같은 버전관리 툴을 필수적으로 사용합니다.
  • 프로젝트 작업내역 관리하기
  • 여러 개발자들이 하나의 제품을 만들 때 각자 작업한 코드를 합치기
  • 버그 리포트 받고 해결하기
    • 작업내역을 확인해서 어제까지는 분명 잘 되었는데 오늘 작업하니까 에러가 나네? 아하, 그럼 오늘 작업한 내용 중에 버그를 만드는 코드가 있겠구나. 어떤 게 어제 작업 내용이고 어떤 것이 오늘 작업 내용이지 확인하자. 필요하다면 어제 만든 버전으로 되돌리자.
  • Github 에 있는 저장소를 웹 사이트로 만들기

예제 및 구경
https://github.com/ohahohah/constitution-of-republic-of-korea
https://github.com/javascript-tutorial/ko.javascript.info
https://github.com/jojoldu/junior-recruit-scheduler
https://github.com/innovationacademy-kr/tech-hr
https://github.com/pythonkr/pyconkr-script
https://github.com/sinker/tacofancy

버전관리와 commit

버전관리와 commit - 개념탑재

  • Git 은 어떻게 버전관리를 할까?
    • Git은 버전관리 도구라고 했습니다. 그렇다면 버전을 어떻게 관리한다는 것일까요?
    • 버전1과 버전2가 다른지 어떻게 알 수 있을까요? 누가, 언제, 해당 버전의 프로젝트의 파일이 무엇인지 정보가 있으면 되지 않나요?
    • Git 에서는 놀랍게도 버전별로 만들어줄 필요없이 중간중간 Git 을 사용해 현재 프로젝트의 상태만 저장해주면 됩니다. 여러분들이 파일 저장 버튼을 누르는 것처럼요!
    • Git 에서는 '누가, 언제, 현재 프로젝트의 상태가 어떤지(현재 파일 내용들)' 세 가지 정보를 포함해 작업내역을 관리합니다. 이렇게 현재 프로젝트 상태를 저장한 것을 commit(커밋) 이라고 표현해요

commit(커밋) 은 무엇일까?

  • Git은 버전관리 도구라고 했습니다. 그렇다면 버전을 어떻게 관리한다는 것일까요?
  • 버전1과 버전2가 다른지 어떻게 알 수 있을까요? 누가, 언제, 해당 버전의 프로젝트의 파일이 무엇인지 정보가 있으면 되지 않나요?
  • 그럼 이렇게 버전을 만들어주려면 아래 그림처럼 버전1, 버전2, 버전3 처럼 해당 버전의 파일들을 하나하나 다 따로 만들어주어야 할까요?
  • 아니요! Git 에서는 놀랍게도 버전별로 만들어줄 필요없이 중간중간 Git 을 사용해 현재 프로젝트의 상태만 저장해주면 됩니다. 여러분들이 파일 저장 버튼을 누르는 것처럼요!
  • Git 에서는 '누가, 언제, 현재 프로젝트의 상태가 어떤지(현재 파일 내용들)' 세 가지 정보를 포함해 작업내역을 관리합니다. 이렇게 현재 프로젝트 상태를 저장한 것을 commit(커밋) 이라고 표현해요

예시 : https://github.com/ohahohah/constitution-of-republic-of-korea/commit/4fece742d1e851840c600ff316adfa335f986841

  • commit 을 하는 순간 현재 프로젝트의 파일 내용, 언제, 누가 저장했는지 정보가 남습니다. 이전 commit 의 프로젝트 상태와 현재 프로젝트 상태의 차이를 자동으로 알려줍니다. 빨간색 이 삭제된 내용, + 초록색이 추가된 내용이에요.
  • commit 들은 언제 했는지 정보도 포함하고 있으니까 순서대로 보면 그 자체가 히스토리(history)가 되겠지요? 이것을 commit history 또는 commit log(로그, 기록) 라고 합니다!

예시 : https://github.com/ohahohah/constitution-of-republic-of-korea/commits/main

  • 개념 중간 정리 - 버전관리, Commit
    • 버전 관리 : 누가, 언제, 현재 프로젝트의 내용이 어떤지 정보를 남긴다는 것

    • commit : 현재 프로젝트의 상태를 저장한다. Git 이 이전 commit(이전에 저장한 프로젝트의 상태)를 알고 있으므로 자동으로 어떤 부분이 바뀌었는지 알려준다. 누가, 언제, 어떤 부분을 바꾸었는지 확인해볼 수 있다.

      👉 commit 은 **현재 프로젝트의 상태를 저장**하는 것이라는 것을 기억하세요! 파일의 어떤 부분이 변경되었는지를 저장하는 것이 아니랍니다
profile
뉴비입니다.

0개의 댓글