[Git] Git 으로 개인 프로젝트 관리하기

2022. 2. 21. 18:00·Git & GitHub/Git

 

사실 토이 프로젝트를 만들 때는 대체로 배포하기 위한 목적이 아니기 때문에 main 브랜치 하나로 관리가 가능하다.

그러나 개인 프로젝트를 오픈소스에 배포하거나 서비스로 출시한다면?

개발하는 과정을 모두 서비스 사용자에게 보여줄 필요는 없다. 이럴 땐 브랜치를 잘 활용하여 배포본을 main으로 관리하고 업데이트를 위해 dev 브랜치나 feat 브랜치를 사용하면 된다. 개인 프로젝트 관리방법을 차례대로 알아보자.

 

 

 

1. 레포지토리 만들고 로컬로 가져오기


README파일을 만들지 않으면 레포지토리에 따로 브랜치가 생기지 않는다. 아예 비어있는 상태이다.

반면, 시작할 때 README 파일을 만들면 main이라는 default 브랜치가 생긴다. 아래과정을 한 번에 처리한 것이다.

(Repo에  1 commit 이라는 표시가 있다., 확인해보면 "initial commit" 이라는 커밋메시지가 자동으로 들어가있다.)

$ git init
$ touch README.md
$ git add .
$ commit -m "initial commit"

 

이제 git clone 명령을 통해 로컬저장소로 정보를 가져온 다음, git log를 통해 확인해보자

$ git clone 원격저장소_주소

$ git log
commit 91eca875d10cad5919acc00c4c004fdd2383c2bb (HEAD -> main, origin/main, origin/HEAD)
Author: BigBell <90585081+pythonstrup@users.noreply.github.com>
Date:   Sun Feb 13 16:05:43 2022 +0900

    Initial commit

 

 

 

 

2. 개인 프로젝트 관리를 위해 필요한 브랜치


브랜치의 종류는 총 5가지가 있다.

① Main

② Develop

③ Feature (또는 Topic)

④ Release

⑤ Hotfix

여기서 사용할 것은 ①, ②, ③ 이다.

 

main branch는 기존 브랜치로 배포 가능한 상태만 담을 것이다.


develop branch은 다음 버전 출시를 위해 사용하는 브랜치로 배포 가능한 상태가 되면 main과 합병(merge)한다.


feature branch 또는 topic branch는 새로운 기능을 개발하거나 버그를 수정해야할 때마다 develop branch에서 분기해 나오는 브랜치이다. 대체로 로컬저장소에서만 관리하는 브랜치이다. 개발이 완료되면 develop branch와 병합한다. 상황에 따라 1개가 될 수도 있고, 여러 개의  feat 브랜치를 가질 수도 있다.

 

이제 브랜치를 만들어보자. feat 브랜치를 통해 개발을 진행할 것이기 때문에

feat 브랜치 생성과 동시에 체크아웃을 진행하도록 하겠다.

$ git branch dev
$ git checkout -b initial_feat

 

git branch를 통해 확인해보면 아래와 같이 

$ git branch
  dev
* initial_feat
  main

 

 

 

 

3. feat 브랜치와 dev 브랜치의 합병(merge)


현재 feat 브랜치에서 초기 환경설정을 위해 작업을 진행했고, 세팅이 완료됐다고 해보자.

$ git log
commit f9937bc6f74b8fd952cf689afd7510e8ec1ab652 (HEAD -> initial_feat)
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 16:44:38 2022 +0900

    세팅완료

commit 91eca875d10cad5919acc00c4c004fdd2383c2bb (origin/main, origin/HEAD, main, dev)
Author: BigBell <90585081+pythonstrup@users.noreply.github.com>
Date:   Sun Feb 13 16:05:43 2022 +0900

    Initial commit

 

그냥 dev branch를 단순히 세팅완료로 옮기는 fast-forward merge를 할 수도 있지만,

만약 합병 로그를 남기고 싶다면 아래와 같은 명령어를 사용해야한다.

# dev쪽으로 병합하기 위해 HEAD를 옮김
$ git checkout dev

# 병합실행
$ git merge --no-ff initial_feat

vi 에디터로 들어가 질텐데 그냥 나오자.

만약 fast-foward 방식으로 하고 싶다면 --no-ff 부분을 빼면 된다.

 

로그를 확인하면 합병 로그가 남은 것을 확인할 수 있다.

$ git log
commit 1d2d40b72c2ce73244639108d83d75c0ead4fb17 (HEAD -> dev)
Merge: 91eca87 f9937bc
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 16:57:14 2022 +0900

    Merge branch 'initial_feat' into dev

commit f9937bc6f74b8fd952cf689afd7510e8ec1ab652 (initial_feat)
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 16:44:38 2022 +0900

    세팅완료

commit 91eca875d10cad5919acc00c4c004fdd2383c2bb (origin/main, origin/HEAD, main)
Author: BigBell <90585081+pythonstrup@users.noreply.github.com>
Date:   Sun Feb 13 16:05:43 2022 +0900

    Initial commit

feat 브랜치는 바로 삭제해도 상관없지만, 혹시 모를 상황을 대비 남겨놨다가 브랜치가 너무 많아지면 정리하는 것을 추천하고 싶다.

 

 

 

 

 

4.  main branch(배포본)으로 병합하기


dev 브랜치에서의 개발이 끝나 main과 합칠 때가 됐다. main으로 체크아웃해주자.

처음 main으로 체크아웃하면 그동안 남겨놓은 파일이 없기때문에 .git 디렉토리와 README밖에 없지만

당황하지 말자. merge를 실행하면 모든 파일이 정상적으로 생성될 것이다.

$ git checkout main

 

 

로그를 확인해보면 main과 dev가 병합된 것을 확인할 수 있다.

$ git merge --no-ff dev

$ git log
commit 1a45aec564309e98b13ccbb470f95b4d36c92da8 (HEAD -> main)
Merge: 91eca87 454c580
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 17:15:53 2022 +0900

    Merge branch 'dev'

commit 454c580cd31e9269ba5d0f7eb58cdf3d43809223 (dev)
Merge: a1d7bd1 4aadca2
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 17:13:14 2022 +0900

    Merge branch 'board_feat' into dev

commit 4aadca23804f9d05a3d61c64368352e50d4ce447 (board_feat)
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 17:10:40 2022 +0900

    3.게시판 완료

 

여기서 프로젝트에 버전번호와 함께 태그를 달아주자.

깃로그를 확인하면 태그가 달려있는 것을 확인할 수 있다. git tag -n을 통해서 확인해도 된다.

$ git tag project1.0.0


$ git log
commit 1a45aec564309e98b13ccbb470f95b4d36c92da8 (HEAD -> main, tag: project1.0.0)
Merge: 91eca87 454c580
Author: BigBell <pythonstrup@gmail.com>
Date:   Sun Feb 13 17:15:53 2022 +0900

    Merge branch 'dev'
...
...


$ git tag -n
project1.0.0    Merge branch 'dev'

 

이제 main과 dev를 푸시를 해주면 끝이 난다. --tags를 붙여주지 않으면 태그가 생성되지 않으니 주의하자.

위에서 얘기했다시피 main과 dev는 실제 사용이 가능한 상태이기 때문에 push를 해주지만,

feature branch는 비공식적인 성격을 가지고 있기 때문에 로컬저장소에 가지고 있는 것을 추천한다.

$ git push --tags origin main

$ git checkout dev
$ git push origin dev

 

태그를 생성하면 원격 레포지토리에서도 확인할 수 있다.

태그를 이용하면 버전관리를 할 수 있기 때문에 main 브랜치(배포본)을 push할 때는  tag 를 달아주는 것이 좋다.

'Git & GitHub/Git' 카테고리의 다른 글
  • [Git] git으로 팀 프로젝트 관리 - 협업하기
  • [Git] git으로 팀 프로젝트 관리 - 초기 설정하기
  • [Git] git으로 원격저장소 다루기 (push, pull, clone)
  • [Git] git rebase 사용하기
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    자바스크립트
    java
    스프링부트
    파이썬
    운영체제
    MySQL
    부스트캠프
    오류해결
    부스트캠프 멤버십
    알고리즘
    Spring
    스프링
    os
    자바
    부스트캠프 7기
    웹개발
    GitHub
    Python
    jsp
    Git
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[Git] Git 으로 개인 프로젝트 관리하기
상단으로

티스토리툴바