관리 메뉴

공부기록용

GIT(개념_01) 본문

💡깨달음💡/GIT

GIT(개념_01)

과부하가즈아 2023. 6. 8. 14:18

GIT

내 로컬 저장소(컴퓨터)의 소스 코드를 형상관리하기 위한 것으로 프로젝트의 버전 관리를 위한 도구

 

GITHUB

로컬이 아닌 원격환경에 소스코드를 저장할 수 있도록 원격 저장소를 제공하는 서비스
ex.구글드라이브

 

GIT에서 관리하는 영역

 Working Directory현재 작업중인 프로젝트가 담긴, 직접 눈으로 확인할 수 있는 저장공간

Staging Areacommit 할 파일의 예비 저장소, 혹은 추적 대상 파일의 공간

로컬 저장소각 유저의 컴퓨터에서 관리되고 있는, Working Directory로 부터 commit한 내용들이 스냅샷으로 저장되는 곳(즉, commit이 된 순간의 파일과 그 내용을 로컬 저장소에서 가지고 있기 때문에 언제든지 commit했던 지점으로 돌아가는 것이 가능)
프로젝트가 형성된 directory에 git으로 버전관리를 하겠다는 초기화작업을 해주면 이것이 Working Directory(모든 소스가 알아서 관리되는 것 X) Working Directory의 파일 중에서 변동사항을 추적하고 로컬(pc)환경 내 git저장소에 반영하기위한 후보를 선정해야함(변동사항을 추적할 후보를 골라내는것) 후보로 선정된 파일은 Staging Area라는 곳에 할당된다 staging Area에 저장된 추적 대상 파일은 commit이라는 action을 통해서 로컬 저장소에 반영되고, commit당 일종의 스냅샷(순간을 저장하는)이 생성되어서 매 commit마다 개별 변동 사항에 대해 이력을 파악하고 이전버전으로 소스를 되돌릴 수도 있다 github는 online//로컬 저장소에 commit한 내용을 다른 디바이스나 환경에서 활용하기 위해서는 웹상의 어딘가에는 저장이 되어있어야하고, 여기서 github는 로컬 저장소의 내용을 push라는 액션으로 전달받아 저장하고 있게됨 이와같이 로컬환경이 아닌 원격지에 위치한 git저장소를 Remote Repository(원격저장소)라고 함

Git

컴퓨터에 있는 프로젝트를 Git 이 관리하는 프로젝트로 만들 수 있음 앞으로 Git 으로 관리할꺼야! 하고 설정해주면 되며, 이 작업을 한다고 표현

 

프로젝트의 버전관리

 

commit이라는 액션단위로 변동사항에 대한 스냅샷을 가지고 있기 때문에 히스토리 관리에 용이하다.

 

작업단위를 세분화할 수 있다.

  • 특정기능을 완성하고 그 반영사항을 commit하게 되면 반영 전후로의 서비스동작에 어떤 영향을 미치는지 쉽게 확인이 가능 (프로그래밍 하다보면 분명 아까는 되었는데 지금 코드 고치니까 프로젝트가 동작하지 않는 경우가 있고, 기능을 완성할 때마다 작업 내역을 저장하면 어떤 부분을 만들 때 에러가 발생했는지 쉽게 파악할 수 있다)

하나의 프로젝트에서 협업할 때 유용

  • 구현하는 기능 단위에 따라 개발하는 개발자가 달라질 수 있는데 이 경우 동일한 파일을 여러명의 개발자가 수정하는 것을 위험하다.
  • git은 branch라는 기능을 도입해 동일한 프로젝트에 대해 개별의 branch에서 개발하고 후에 이를 합칠때, 충돌하는 지점을 탐지해서 개발자에게 알려줌(>충돌지점만 수정하고 합쳐서 완성하게됨)

기본 설정으로는 코드(Python, HTML, JavaScript, Java,...) text 파일, markdown파일(text 파일의 일종), CSV 파일 등 이 가능

 

이미지 파일, Word 파일, PDF 파일, 엑셀 파일은 여러가지 설정을 해주어야 가능, 기본 설정으로 이런 파일들은 파일의 크기의 변동만 알 수 있다.


Github

Github 은 Git 원격 저장소 + Git 으로 할 수 있는 커뮤니티 기능 서비스

  • Github 은 Git 으로 된 프로젝트 저장 공간을 제공하고, Git 편하게 사용하기 위한 여러가지 부가기능을 가지고 있음

원격저장소 서비스는 로컬git 저장소에 소스를 웹상에서 활용할 수 있도록 저장하는 역할을 함(Github외에도 Gitlab, bitbucket등이 있음)

 

외부망과 분리된 폐쇄망(보안이 특히 필요한)같은 경우 셀프 호스팅으로 지원하기도 함

 

인터넷으로 연결되어있는 프로젝트 저장소

  • 컴퓨터에 있는 내 Git 프로젝트를 저장, 개발해야할 기능들을 관리

개발자들의 커뮤니티

  • 다른 사람 공개 프로젝트 구경하고, 내가 관심있는 주제/ 프로젝트 소식 받아볼 수 있음

Sourcetree

sourcetree 는 Git 을 쉽게 사용할 수 있는 도구

 

sourcetree 로 배우는 이유

  • 전 세계에서 가장 많이 사용되는 Git 도구 중에 하나로 스스로 공부할 때도 참고할 만한 자료가 많음
  • 초심자부터 중급자까지 사용할 수 있도록 여러가지 기능을 제공
  • 중요한건 Git 사용 패턴을 이해하고 익숙해지는 것으로(사용법 암기가 아닌) Git 사용 패턴에 집중하기위함

Git 만, Github 만 따로 사용


Git + Github 혹은 Git + 프로젝트 관리 도구 를 조합해서 사용


버전관리

누가, 언제, 현재 프로젝트의 내용이 어떤지 정보를 남긴다는 것

 

프로젝트 상태가 변경되는 정보를 알고 있다는 것, Git 은 가장 널리 쓰이는 버전관리 도구 중에 하나로 commit 을 사용해서 버전이 달라지는 것을 관리


commit

현재 프로젝트의 상태를 저장하는 것 (파일의 어떤 부분이 변경되었는지를 저장하는 것이 X)

 

파일을 저장하는 것과 유사, 변경사항을 반영하는 것
(일반적인 파일저장과의 차이라 함은 파일 저장때마다 변동 이전의 상태가 유지된다는 것

-> 누가, 언제, 어느 파일의 어느 부분을 변경했는지가 저장소에 모두 반영이 되고 이때 이 작업을 하게되었다는 commit 메세지를 반드시 작성해줘야 함)

 

snapshot(스냅샷) 즉, 찰칵 사진을 찍는 것 📸 처럼 현재 프로젝트의 전체 상태를 포착하는 것


commit 을 하는 순간 현재 프로젝트의 파일 내용, 언제, 누가 저장했는지 정보가 남음 이전 commit 의 프로젝트 상태와 현재 프로젝트 상태의 차이를 자동으로 알려줌 (빨간색 이 삭제된 내용, + 초록색이 추가된 내용)

 

commit 들은 언제 했는지 정보도 포함하고 있으니까 순서대로 보면 그 자체가 히스토리(history)가 되며, 이것을 commit history 또는 commit log(로그, 기록)라고 함

 

add (혹은 staging, 스테이징)

  • commit 에 반영할지 안할지는 파일 단위로 선택할 수 있다.(commit 에 반영할 파일을 선택하는 것)

실습

  • 프로젝트 만들기
프로그래밍할 때 파일/폴더명은 

++영어로 특수문자 없이(띄어쓰기도 X) 만들기 단어를 연결할 때는 - 나 _ 둘 중 하나를 사용하기 
(컴퓨터가 다른 문자가 섞이면 잘 못 알아들을 수 있음)

2. 내용(데이터)를 제대로 나타내주는 이름을 짓기
파일/폴더에 담긴 내용은 곧 데이터이다. 데이터를 제대로 관리하는 첫 걸음은 제대로 이름 붙여주는 것
(예. 11111.txt 🙅 / project_list.txt, commit_practice.py 🙆‍♀️ )

ex. 프로젝트 이름을 git-tutorial, taco-recipe, constitution-of-republic-of-korea  

->commit 하기

 

  • add(staging) 를 사용하면, 컴퓨터에서 여러 파일을 수정했어도 '기능 A 수정' 에 관련된 파일만 골라서 commit 할 수 있음. 작업내역을 깔끔하게 관리하기 위해서는 꼭 아래처럼 commit 할 것
내가 기록할 작업 내역이 무엇인지 생각하고,
관련된 파일만 add 해서,
작업내역을 나타내는 commit 메시지 적기

정리

버전관리를 한다는 것은 프로젝트 상태가 변경되는 정보를 알고 있다는 것입니다. Git 은 commit 을 사용해서 버전이 달라지는 것을 관리

컴퓨터에 있는 프로젝트를 Git 이 관리하는 프로젝트로 만들 수 있습니다. 앞으로 Git 으로 관리할꺼야! 하고 설정 이 작업을 git 초기화(git initialize)한다고 표현

현재 프로젝트의 상태를 찰칵 📸 저장하는 것을 commit 이라고 함

commit 에는 아래를 포함
누가(author), 언제 commit 했는지의 정보와 프로젝트 변경 내용
작업내역이 어떤 것인지 알아볼 수 있게 적는 메시지를 'commit 메시지'라고 함

commit 에 반영할지 안할지는 파일 단위로 선택할 수 있음

commit 에 반영할 파일을 선택하는 것을 add (혹은 staging, 스테이징) 이라고 함

commit 한 기록은 history 로 볼 수 있음

지금까지 우리가 한 작업은
-'git 초기화하기(initialize) - add(staging) - commit'

git 초기화는 처음에 단 한번만 해 주면 되고, 작업 내역을 저장하기 위해서는 add - commit(작업내역을 반영하기 위한 단계) 만 하면 됨

repo

'Git으로 관리되는 프로젝트' 를 Git 에서는 repo라고 함(repository 리포지토리의 약자)

 

로컬 repo

:내 컴퓨터에 저장되어있는 repo

 

원격 repo

Github처럼 다른 곳에서 접속할 수 있는 공간에 저장되어 있는 것

 

commit는 스스로 원격저장소에 저장은 되지 않음 로컬 저장소에만 저장됨
->이때 원격저장소로 보내는걸 push라고 하고, 반대로 원격저장소에서 로컬저장소로 가져오는 걸 pull이라고 함

로컬 repo 가 원격 repo 를 연결하는 것을 추적(Tracking, 트랙킹 / branch tracking) 이라고 함




클라우드 서비스와 다르게 작업내역

즉, commit을 자동으로 반영하지 않음

(내가 원하는 대로 어디 commit 까지만 반영할지를 수동으로 설정할 수 있게 해서 프로젝트를 더 잘 관리하기 위해서)




로컬 repo 의 commit 들을 원격 repo 에 반영하는 것을 push(푸쉬)이라고 해요. commit들을 밀어넣기!
원격 repo 의 commit 들을 로컬 repo 에 반영하는 것을 pull(풀) 이라고 해요. commit들을 땡겨오기!



-> github에서 commit



원격 repo 를 내 컴퓨터에서도 사용할 수 있도록 가져올 수도 있음. 일종의 초기 다운로드라고 생각, 이걸 clone(클론, 복제) 라고 함



->repo 만들기


  • 혼자 Git 프로젝트 작업을 할 때는 pull -> 로컬 repo commit -> push 순서로 하면 좋음
  • 원격 repo 와 로컬 repo 에서 같은 파일을 수정하면 Git 이 같은 파일을 수정했는데 내가 어떤 파일을 최종으로 할까? 라고 확인 메시지를 줌 이런 것을 바로 충돌(conflict)이라고 표현
  • 충돌을 피하기 위해서는 아래 순서를 따라주는 게 편하고 같은 파일을 동시에 수정해버리면 충돌이 나니까 두 repo 의 상태를 똑같이 맞춰준 후에 변경작업을 해주것
  1. 원격 repo 와 로컬 repo 의 상태를 똑같이 맞춰주기, 즉 로컬 repo 에 원격 repo 작업내역 가져오기 (pull)
  2. 로컬 repo 의 작업 내용을 저장하고 (commit)
  3. 원격 repo 에 로컬 repo 내용을 반영 (push)
  • 원격 repo 에 변경사항이 생겼다! 하면 먼저 pull 하고 로컬 repo 에서 작업하면 많은 경우 충돌을 피할 수 있다

 

repo 정리

원격 repo 와 로컬 repo 를 연결해서 내용을 반영하고 싶을 때

로컬 repo 가 없고 원격 repo 에 있는 내용을 가져오고 싶을 때는 clone 한다.
원격 repo 와 로컬 repo 둘 다 있고 두 개를 연결하고 싶을 때는 로컬 repo 가 원격 repo를 tracking 하도록 설정한다.

원격 repo 와 로컬 repo 는 왜 따로 있을까?

협업할 때, 혹은 여러 컴퓨터를 사용한다면 하나의 원격 repo 에 여러 로컬 repo 를 연결시킬 수 있다. 하나의 프로젝트를 동시에 작업하는게 가능해진다.

commit 대상 제외

gitignore파일

저장소에 반영을 희망하지 않는 파일의 목록을 담고있는 특수한 파일

git 으로 하여금 특정 파일을 무시하여 commit에서 제외시키는 역할(보통 저장소의 최상위 디렉토리에 위치)

 

*관리하는 파일은 보통 OS상에서 자동으로 생성하는 파일이나, 보안상 공개되어서는 안되는 파일, 공동 작업에 있어서 불필요한 것들로 이루어져 있고, ssh key, IAM pem, 각종 계정 정보가 저장된 환경변수 세팅 파일 등은 절대 commit 되지 않도록 주의해야 함

 

'💡깨달음💡 > GIT' 카테고리의 다른 글

GIT(기본 명령어)  (0) 2023.06.08
GIT(설치, 환경설정)  (0) 2023.06.08
GIT(개념_03)  (0) 2023.06.08
GIT(개념_02)  (0) 2023.06.08
GIT(처음으로 팀 셋업 진행)  (0) 2023.06.03
Comments