728x90
Git 프로젝트
@2024.03.15
프로젝트
프로젝트 생성
- 로컬 컴퓨터에서 원하는 위치에 프로젝트를 위한 폴더를 생성한다.💡# cd /c/backend_java
$
mkdir devel
$
cd devel
$
mkdir my_project
$
cd my_project
$
pwd
프로젝트 초기화
- git 저장소 초기화함으로써 프로젝트의 모든 변경 이력을 추적이 가능하게 된다.
- 초기 브랜치 이름을 전역적으로 설정 → #
config --global init.defaultBanch 이름
- 방금 생성된 브랜치의 이름을 변경 → #
git branch -m
- 초기 브랜치 이름을 전역적으로 설정 → #
💡
$ git init
- 실행 결과 사용자 프로젝트 폴더에 .git 디렉터리가 생성됨


src/resources 디렉터리 추가
- 소스 코드 파일을 저장하는 곳인 src추가
- 프로젝트에 필요한 리소스(이미지, 스키마 등)를 저장하는 resources추가
application.properties
: 애플리케이션의 환경별 설정을 저장하는 파일 (중앙 집중화 관리)
💡
경로 : /c/backend_java/my_project/
$
mkdir resources
$
mkdir src
$
cd resources
$
echo name:Yonng-D >> application.properties
$
cd ..
$
cd src/
$
echo public class Hi{} >> Hi.java
$
mkdir resources
$
mkdir src
$
cd resources
$
echo name:Yonng-D >> application.properties
$
cd ..
$
cd src/
$
echo public class Hi{} >> Hi.java

git status
💡
현재 작업 중인 Git 저장소의 상태를 보여준다.
추적하지 않는 파일은 git 저장소에 새로 추가되었거나, 아직 커밋 되지 않은 파일들이다.
추적하지 않는 파일은 git 저장소에 새로 추가되었거나, 아직 커밋 되지 않은 파일들이다.
- 현재 스테이징 영역에 있는 변경사항과 작업 디렉터리의 변경사항을 비교하여 볼 수 있다.
Add
💡
$
$
git add.
//현재 디렉터리 안에 있는 모든 파일을 추가$
git add 파일명
// 파일 명에 해당되는 파일만 추가 Commit
💡
스테이징 영역에 있는 변경사항을 저장소의 히스토리에 기록한다. 이때 커밋 메시지를 함께 지정하여, 변경사항에 대한 설명을 추가한다.
$
$
git commit -m “메시지 내용”
- 로컬 저장소에 변동 기록(=버전)을 남기기는 작업
- 메시지를 남기는 이유? 커밋에 대한 정보를 기록하는 용도
- $
git log
: git 저장소의 커밋 기록을 보여주는 명령어- 저장소에 이루어진 커밋들의 리스트를 시간순으로 보여준다.
- 해시, 저자, 커밋 날짜 및 시간, 커밋 메시지 등 정보 포함
- $
git log -n 숫자
: 최근 N 개의 커밋만 표시
- $
git log --oneline
: 각 커밋을 한 줄로 요약
- $
git cat-file -p 커밋해시값
: 특정 커밋의 내용을 확인하기 위한 명령어
Objects폴더
💡
git 저장소의 핵심적인 부분으로 git의 객체 데이터 베이스를 저장하며, 커밋, 트리, 블록 그리고 태그 객체가 포함된다.
객체
: git에서 버전 관리되는 모든 데이터와 메타데이터를 저장
객체 폴더와 파일이름
- objects 디렉터리 내의 서브디렉터리와 파일 이름은 객체의 SHA-1 해시를 기반
- SHA-1 해시 : 객체의 내용을 기반으로 SHA-1해시를 생성하여, 각 객체를 고유하게 식별
- 디렉터리 이름 : 해시의 처음 2자리는 서브디렉터리의 이름으로 사용
- ex) 35e…. 해시를 가진 객체는 35디렉터리에 저장
- 파일 이름 : 해시의 나머지 38자리는 객체 파일의 이름으로 사용
- 예시 : Hello.java 파일을 스테이징 할 때 git 프로세스
- 파일의 유형(블록), 파일의 크기, 파일의 실제 내용을 포함한 문자열 생성
- 이 문자열에 대해 SHA-1 해시 계산
- 해시 값을 기반으로 파일을 .git/objects 디렉터리에 저장
- 파일의 해시 값 → $
sha1sum 파일명
- 스테이징 영역에 있는 파일들의 해시값 → $
git ls-files -s
.git/index
💡
git 저장소의 스테이징 영역의 상태를 추적하는 이진 파일
$
$
git ls-files --stage
- 스테이징 된 파일들의 메타데이터가 저장되어 있으며, 이 데이터 안에는 파일의 이름, 모드(실행or 일반 파일), 수정 시간, 크기, 해시값 등이 포함
- 파일의 변경을 추적하고, 커밋을 준비하는 과정에서 어떤 파일이 추가/수정/삭제되었는지 정보를 제공
Branch
💡
코드의 다른 버전을 분리하여 독립적으로 관리할 수 있게 해주는 포인터로, 이를 통해 여러 기능을 동시에 개발하고, 안정성을 유지하며, 다양한 실험을 수행할 수 있다.
- 브랜치 전략
Feature Branch Workflow
: 각 기능 또는 버그 수정 작업을 위해 별도의 브랜치 생성- 새 기능을 개발하기 위해 feature 브랜치를 생성하고, 작업이 완료되면 main 또는 develop 브랜치로 병합
Git Flow
: 여러 종류의 브랜치를 사용하는 복잡한 전략- 개발은 develop 브랜치에서 진행되며, 기능 개발은 feature 브랜치, 릴리스 준비는 release 브랜치, 긴급한 버그 수정은 hotfix 브랜치에서 수행되며 각각의 작업이 완료되면 main 또는 develop 브랜치로 병합
GitHub Flow
: main 브랜치 하나와 여러 feature 브랜치를 사용- 모든 변경 사항은 feature 브랜치에서 작업하며, 코드 리뷰 및 테스트를 거친 후 main 브랜치와 병합되어 배포
GitLab Flow
: GitHub Flow를 기반으로 하되, 환경별 브랜치를 추가하여 배포 관리를 강화- main 브랜치에서 변경 사항은 먼저 staging과 같은 사전 프로덕션 환경에서 테스트되고, 이후 production 브랜치로 이동하여 실제 배포
브랜치 관련 명령어
$ git switch -c 브랜치 명
: 브랜치 생성 및 만든 브랜치로 이동$git switch -c 브랜치 명 시작점
: 지정된 시작점에서 새로운 브랜치 생성
$ git branch
: 브랜치 목록 나열, 현재 체크아웃된 브랜치는 *로 표시$git branch -a
: 로컬 및 원격 브랜치 모두 나열
$git branch -r
: 원격 브랜치만 나열
$ git swtich 브랜치명
: 브랜치 이동
$ git branch -d 브랜치 명
: 지정된 브랜치 삭제하며, 브랜치가 이미 다른 브랜치에 병합된 경우에만 삭제를 허용
$ git branch -D 브랜치명
: 지정된 브랜치를 강제 삭제
$ git branch -m 기존브랜치명 새브랜치명
: 브랜치 이름 변경
$ git branch --show-current
: 현재 체크아웃된 브랜치 이름 출력
$ git branch --list 패턴
: 지정된 패턴과 일치하는 브랜치 목록 나열git branch —list ‘feature*’
⇒ feature로 시작하는 모든 브랜치 나열
728x90