본문 바로가기
Git

Git 프로젝트

by 융디's 2024. 4. 1.
728x90
Git 프로젝트

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

git status

💡
현재 작업 중인 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

💡
코드의 다른 버전을 분리하여 독립적으로 관리할 수 있게 해주는 포인터로, 이를 통해 여러 기능을 동시에 개발하고, 안정성을 유지하며, 다양한 실험을 수행할 수 있다.
  • 브랜치 전략
    1. Feature Branch Workflow : 각 기능 또는 버그 수정 작업을 위해 별도의 브랜치 생성
      • 새 기능을 개발하기 위해 feature 브랜치를 생성하고, 작업이 완료되면 main 또는 develop 브랜치로 병합
    1. Git Flow : 여러 종류의 브랜치를 사용하는 복잡한 전략
      • 개발은 develop 브랜치에서 진행되며, 기능 개발은 feature 브랜치, 릴리스 준비는 release 브랜치, 긴급한 버그 수정은 hotfix 브랜치에서 수행되며 각각의 작업이 완료되면 main 또는 develop 브랜치로 병합
    1. GitHub Flow : main 브랜치 하나와 여러 feature 브랜치를 사용
      • 모든 변경 사항은 feature 브랜치에서 작업하며, 코드 리뷰 및 테스트를 거친 후 main 브랜치와 병합되어 배포
    1. 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

'Git' 카테고리의 다른 글

GitHub  (0) 2024.04.01
Git 명령어  (0) 2024.04.01
Git의 구조  (0) 2024.04.01
Visual Studio 설치  (0) 2024.03.31
Git 설치  (0) 2024.03.31