KDT 코딩온 개발 14기 수강일기

KDT 포스코X코딩온 웹 과정 14기 14일 - git

worldstroy 2024. 10. 25. 23:34

Git이란?

소스코드를 효율적으로 관리하기 위해 만들어진 "분산형 버전 관리 시스템"
소스 코드의 변경 이력을 쉽게 확인할 수 있고 프로젝트 개발 중 오류가 발생하였을 경우, 특정 시점으로 롤백하는 것이 가능해지는 장점이 있다.

 

Github 원격 저장소의 생성

 

1. New 버튼을 눌러 Github 저장소를 생성한다.
2. 저장소의 영문명과  저장방식을 선택하고 레포지토리를 생성한다.
3.  git bash를 실행하고 프로젝트의 루트폴터로 이동한다.
4. git init 명령어를 사용하여 루트 위치에 .git 파일을 생성한다.
5. .git 파일이 원격저장소를 알 수 있도록 git remote 명령어를 사용하여 주소를 등록한다.
- git remote add origin https://github.com/ 이름/저장소명.git
6. 루트 폴터에서 code . 을 눌러 VS code에 진입한다.
7. git add . 명령어를 이용하여 커밋할 파일을 커밋 스토리지에 저장한다.
8. git commit 명령어를 사용하여 커밋된 파일에 붙일 메세지(커밋 메세지)를 작성한다.
9. git push 명령어를 이용하여 원격 저장소에 파일을 추가한다.

 

Github에 파일을 올릴 때 주의할 점?

1. 기존 파일에서 코드를 수정한다면 파일이 통쨰로 업로드되지 않고, 코드만 수정된다.
2. 아무 파일도 폴더에 존재하지 않으면 원격저장소에 업로드되지 않는다.

 

branch란?

 

1. 저장소에 만들어진 하나의 독립적인 작업 공간.
2. 작업을 하면서 여러 가지 브랜치를 생성할 수 있다.
3. 브랜치에서 작업 후 메인에 합치는 방식으로 merge를 통해 개발을 진행한다.
4. 브랜치를 사용하면 서로의 작업에 영향을 주지 않고 코드를 수정할 수 있다.
5. 개발, 테스트, 수정 등을 기준으로 기존 코드와 완전히 분리하여 작업을 할 수 있다.
6.  git으로 이미 배포된 메인 코드에 오류가 발생하지 않도록 보호할 수 있다.
7. 동시에 여러 명의 개발자가 서로 다른 브랜치에서 개발이 가능하다.
8. 작업 이력을 관리할 수 있어 누가 작업했는지 쉽게 추적이 가능하다.

 

 

Branch를 설정하는 명령어

 

git branch : 현재 어떤 branch가 있느지 확인할 수 있다.
git branch "브랜치 명" :  해당 이름을 가진 브랜치를 생성한다.
git switch "브랜치 명" : 해당 이름을 가진 브랜치로 이동한다.
git switch -c "브랜치명" : 해당 이름을 가진 브랜치를 생성하고, 곧바로 이동한다.
git switch -d 브랜치 명 : 해당 이름의 브랜치를 삭제한다.(여기서 -D를 하면 강제로 삭제함.)

 

브랜치 간의 이동이 가능한 이유

1. 브랜치를 생성하고 푸쉬를 하면 로컬저장소의 HEAD는 최신 커밋을 가르킨다.
2. 새로운 브랜치를 푸쉬했다고 해서 자동으로 최신 커밋을 가리키지 않는다.
3. 새로운 브랜치는 원격저장소에 단지 추가되었을 뿐 기본 브랜치에는 영향을 주지 않는 걸 알 수 있다.

 

브랜치의 merge를 통한 개발의 이점

 

1. 작업의 통합 : 여러 분기된 브랜치들을 메인 브랜치에 통합하여 최종 결과물을 도출한다.
2. 기능의 배포 : 새로 개발한 기능이나 수정사항을 프로젝트에 반영한다.
3. 코드의 일관성 : 모든 개발자의 작업을 하나로 합쳐 코드를 일관성있게 유지한다.
4. 충돌의 해결 : 다른 브랜치에서 발생한 코드 충돌을 해결하고 통합한다.
5. 버전의 업데이트 : 팀원들이 작업한 부분을 모아 최종 결과물을 얻고 프로젝트의 버전을 최신상태로 업데이트하여 배포할 수 있다.
# 기준이 되는 메인 브랜치로 이동하여, git merge 합쳐질 브랜치 명을 한다.

 

브랜치 병합의 세가지 

fast-forward : 만들어 개발했던 브랜치가 메인 브랜치에 큰 영향을 주지 않을 때.
s-way merge : 두개의 브랜치가 하나로 합쳐질 때 공통조상이 동일할 경우, 공통조상, 브랜치1, 브랜치2의 정보를 담은 커밋5가 생성된다.
브랜치의 충돌 : 둘 이상의 개발자가 같은 파일을 수정하였을 경우, Git에서 자동 병합을 하지 못해, 어떤 코드를 선택할지를 수동으로 정해야함.

 

프로젝트를 개발할 떄 현업에서 사용하는 branch 명

Branch-main(master)

- 현재 제품으로 출시되고 있는 브렌치
- 배포 이력을 관리하기 위해 사용함.
- 현재 배포 가능한 상태만을 관리하는 브랜치

Branch - develop

- 다음 출시 버전을 개발하는 브랜치
- 기능 개발을 위한 브랜치들을 병합하기 위해 사용함.
- 평소 개발이 진행되는 브랜치로 현업에선  develop 브랜치를 기준으로 branch를 생성한 후, develop에 merge 한 후, 완성되면 main에 merge를 진행하는 것 같다.

 

Branch -feature

- 기능 개발을 진행하는 브랜치
- 새로운 기능 개발 및 버그 수정을 할 때마다 develop에서 분기
- 공유할 필요가 없어 로컬에서 진행 후 develop에 merge에 공유한다.

 

Branch -release

- 출시 버전을 준비하는 배포를 위한 전용 브랜치

Branch -hotfix

- 출시 버전에서 발생한 버그 수정 브랜치
- 배포한 버전에 긴급하게 수정해야 할 필요가 있는 경우 사용
- main(master)에서 분기함.

 

.gitignore란?

Git 버전 관리에서 제외할 파일 목록을 지정하는 파일
Github에 보안상 올리지 않아야 할 파일이 있을 경우, 작성하여 실수로 파일이 커밋되는 상황을 방지한다.
*.txt : 확장자로 끝나는 파일 모두 무시
!text.txt : 해당 파일은 무시 조건을 무시하고 커밋함.
 text/ : 해당 디렉토리 전체를 무시함.
/text : 현재 폴터 내에 존재하는 폴더 내부의 모든 파일 무시