본문 바로가기

기타

Git과 GitHub

Git 

내 로컬 저장소에 소스코드를 형상 관리하기 위한 Tool

GitHub

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

 

git에서 관리하는 영역 (Off line)

1. Working Directory : 현재 작업중인 공간

2. Staging Area : commit 할 파일의 예비 저장소

3. Local Repository : 각 유저의 컴퓨터에서 관리되는 저장소

 

 

 

Git 역할

1. 버전 관리 편리

  -. Git으로 다양한 형식의 파일들의 내용이 자동 비교 됨

  -. 누가, 언제, 수정사항을 포함해 작업 내역을 관리함

2. 작업 단위 나누기

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

 

GitHub 역할

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

2. 개발자들의 커뮤니티

 

SourceTree

Git을 좀더 편하게 사용하기 위한 프로그램, Git GUI (Graphic User Interface) 대표적인 툴!

 

 

SourceTree를 이용한 Git 사용법

현업에서 협업 시, Git+Github 혹은 Git + 프로젝트 관리 도구를 조합해서 업무를 진행함

  1. Github 회원가입 및 Sourcetree 설치
  2. Sourcetree 설정하기
    • Github에서 사용자 식별을 위한 토큰 (비밀번호) 발급
    • Sourcetree에서 사용자 Github id와 토큰을 사용하여 Github 계정 연동
  3.  코드가 담긴 파일 (업로드할) 을 Sourcetree 스테이지에  (1) 올리고, (2) 작업 내역 작성, (3) 커밋 클릭
  4. Github에 접속하여 원격 repo 만들기 / 원격 repo 주소 복사하기
    • Github Repository의 이름을 로컬 repo와 동일한 하게 만들기
  5. tracking 하기 (로컬 repo와 원격 repo) : 원격 repo 주소 붙여넣기
  6. 로컬 repo 의 설정 바꿔주기 - 브랜치 이름 바꾸기
  7. Sourcetree에서 push 하기 : 로컬 repo 의 commit 들을 원격 repo commit들에 합치기
  8. Sourcetree에서 pull 하기 : 원격 repo의 commit 들을 로컬 repo commit들에 합치기

왼쪽 그림 : 3번 설명에 대한 그림 / 오른쪽 그림 : 5번 설명 그림

  • 소스트리 그 이외의 기능들
    • 그대로 복사하기 : Sourcetree 를 이용하여 원격 repo clone 가능
    • commit 대상 제외 : .gitignore 파일을 통한 commit 대상 제외 가능
      • .gitignore 에서 관리하는 파일은 보통 OS상에서 자동으로 생성하는 파일이나, 보안상 공개되어서는 안되는 파일, 공동 작업에 있어서 불필요한 것들로 이루어져 있습니다. ssh key, IAM pem, 각종 계정 정보가 저장된 환경변수 세팅 파일 등은 절대 commit 되지 않도록 주의해야 합니다.

 

협업하기 위한 Git 기본 개념

  1. Issue 할당 : 누가 이 작업을 진행할 것인지 정하기
  2. Branch : 각자 맡은 것에 대해 작업하기
  3. Merge : 각자 작업을 프로젝트에 합치기

왼쪽 그림 처럼 이슈를 생성하여 할당 하고 / 오른쪽 그림 처럼 이슈 번호를 볼 수 있고 해결되면 clos Issue 처리 가능

정리

  1. 버전관리를 한다는 건 어떤 의미일까?
    • 프로젝트 상태가 변경되는 정보를 알고 있다는 것입니다. Git 은 누가, 언제, 해당 시점의 프로젝트 상태를 기록해두기 때문에 버전 관리가 가능합니다.
  2. 작업내역 단위인 commit 에는 어떤 정보가 포함되어 있어야 잘 버전관리를 할 수 있을까?
    • commit에 포함되는 정보 : 누가(author), 언제 commit 했는지의 정보와 프로젝트 변경 내용
    • 그리고 commit 을 편하게 관리하기 위한 commit 아이디! commit 아이디는 사용자 아이디처럼 commit 에 부여된 유일한 값!
  3. 지금까지 우리가 실습은 어떤 순서로 했었지?
    • git 초기화하기(initialize) - add(staging) - commit
    • git 초기화는 처음에 단 한번만 해 주면 됩니다. 작업 내역을 저장하기 위해서는 add - commit 만 하면 됩니다
  1. 원격 repo 와 로컬 repo 를 연결해서 내용을 반영하고 싶을 땐 어떤 방법을 써야할까?
    • 로컬 repo 가 없고 원격 repo 에 있는 내용을 가져오고 싶을 때는 clone 한다.
    • 원격 repo 와 로컬 repo 둘 다 있고 두 개를 연결하고 싶을 때는 로컬 repo 가 원격 repo를 tracking 하도록 설정한다.
  2. 원격 repo 와 로컬 repo 는 왜 따로 있을까?
    • 협업할 때, 혹은 여러 컴퓨터를 사용한다면 하나의 원격 repo 에 여러 로컬 repo 를 연결시킬 수 있다. 하나의 프로젝트를 동시에 작업하는게 가능해진다.
  • issue 는 내가 할 작업, 기능 추가, 버그 리포트 등 여러 방식으로 사용할 수 있습니다.
  • 협업을 하기 위해 issue 를 만들어 누가 작업할지 정하고, 브랜치를 만들어 작업할 공간을 나눕니다.
  • 브랜치(branch)는 특정 commit 에서 갈라져나와 작업할 수 있습니다. 우리는 기능별로 이름을 만들어주어 브랜치에 작업해줍니다.
  • 작업할 브랜치로 바꾸는 것을 체크아웃(checkout)이라고 합니다. 체크아웃된 브랜치에만 commit 이 반영됩니다.

 

 

 

 

 

 

참고

1. SourceTree란? Git을 쉽게 사용할 수 있는 도구. 워드 파일 편집할 때 MS Office를 사용하는 것처럼

2. Commit이란? 누가, 언제, 수정사항 이 세가지 정보를 포함하여 저장하고 조회하는 작업

3. repo (리포, repository) : Git으로 관리되는 프로젝트

  -. 내 컴퓨터에 저장되어 있는 리포지토리를 로컬 repo라고 부름 @local

  -. Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격 repo 라고 함 @GitHub

4. 충돌 : 원격 repo와 로컬 repo에서 같은 파일을 수정하면 Git이 어떤 파일을 최종으로 할지 결정을 못하는 상황
(User가 소스트리에서 결정해줘야함)

5. Git vs SVN(Subversion)
git과 svn은 버전 별로 소스를 관리해주는 형상관리 시스템(Software Configuration Management)입니다. 두 시스템은 유사하면서도 확연히 다른 점이 있습니다. svn은 중앙저장소 방식으로 운용됩니다. 여러 개발자가 작성한 소스코드를 쉽게 한 곳에 모을 수 있기 때문에 편리하고 아직도 사용하는 곳이 많습니다. 하지만 commit한 소스가 중앙저장소에 즉시 반영되어 다른 개발자의 작업에 영향을 미칠 수 있다는 치명적인 단점이 있습니다. Conflict를 방지하기 어려운 것이죠. 게다가 중앙서버에서 모든 소스를 관리하기 때문에 서버에 이상이 생기면 소스 코드 관리에도 중대한 이슈가 발생하게 됩니다. svn과 같은 중앙집중형 형상관리 시스템으로는 소스 관리가 어렵다고 느낀 리눅스 창시자 리누스 토발즈(Linus Torvalds)는 git 이라는 분산형 형상관리 시스템을 고안하게 됩니다. 개발자 각자가 독립된 저장소에서 commit을 하다가 반영이 필요한 때에 이를 서버에 전송할 수 있으며, 소스 관리자가 개발자의 작업 내용을 직접 가져올 수도 있습니다. 작성한 변경사항을 commit 한다고 해서 서버에 바로 반영되는 것이 아니기 때문에 서버의 소스와 개발자의 소스가 서로 달라 발생하는 이슈를 방지할 수 있습니다.

 

6. 이슈 관리 프로젝트 : Github 외에도 이슈 관리 도구는 Jira, Trello, YouTrack 등이 있음

7. 체크아웃 (Checkout) : 현재 작업하는 브랜치를 선택하는 것을 체크아웃(checkout) 이라고 합니다

 

 

https://teamsparta.notion.site/GIT-Assignment-a4d1c046fef84dff8ff672a25a43060a