코딩두의 포트폴리오

OSS - 04_Git 설치 & 기본 본문

Open Source Software

OSS - 04_Git 설치 & 기본

코딩두 2024. 4. 13. 01:20

Git 다운로드 후 Git Bash 실행 

사용자 이름과 이메일 설정

git bash 기본 설정

 

로컬 저장소 사용을 위한 Git 기본

기본 명령어

로컬 환경에서 Git을 혼자 사용한다는 가정

로컬 저장소에서 사용할 수 있는 Git 핵심 기능

  • 로컬 저장소에서 사용할 수 있는 Git 핵심 기능
  • 로컬에 저장소 생성
  • 저장소에 파일 생성 및 추가
  • 추가된 파일의 수정
  • 기본(master) 브랜치에 영향을 끼치지 않는 브랜치 생성
  • 브랜치 병합
  • 충돌 해결
  • 저장소 기록 보기

 

 

Git으로 관리하는 파일의 4가지 상태

테스크

'Heloo World' 출력 프로그램을 만든 후, 해당 프로그램 수정할 때 기존 코드에 영향이 가지 않게 작업하기

저장소 생성은 최초에 한 번만 수행

이후의 기본 작업 과정

 

 

저장소 사용에 필요한 Git 기본 명령어

안정화된 프로젝트에 기능을 추가하거나 수정해야 할 때 brach 사용

저장소 사용을 위한 branch 명령어

원래 브랜치의 파일이나 작업 흐름에 영향을 주지 않으면서 새로운 작업 흐름 생성 가능

체크아웃(Checkout)

 

현재 작업 공간으로 해당 브랜치를 가져옴

브랜치 이동을 통해 변경된 작업 흐름

브랜치를 이용한 전체 작업 흐름

C0, C1, ...은 각각 한 번의 커밋을 의미

 

커밋(Commit) - 변경 내용을 수시로 저장

  • 변경 내용을 실제로 확정하는 명령
  • 프로젝트에서 의미가 있는 최소한의 단위 - 함수/기능 단위로, 정해진 시간마다, ...

마지막에 master 브랜치에 hotfix 브랜치를 병합했으므로, 최종적으로 master 브랜치는 hotfix에서의 수정내역도 전부 갖음

 

ex) Git에서 브랜치들이 어떻게 이용되는지?

GitHub의 브랜치 그래프 예시

맨 위의 선이 master 브랜치 선 / 그 밑의 선들은 여러 패치를 개발한 브랜치

 

Git의 브랜치 기능을 이용하면 기존 프로젝트를 쉽게 수정하거나 새로운 기능을 추가할 수 있음

 

Git bash 실습

실습 순서 - Command Line이나 IDE 종류는 상관없이 순서는 동일

  1. 저장소 생성
  2. 저장소에 Hello World를 출력하는 프로그램 작성 및 추가
  3. 커밋
  4. hotfix 브랜치 생성 및 이동
  5. 프로그램 수정
  6. 커밋
  7. master 브랜치에 병합
  8. master 브랜치에 변경점 하나 추가
  9. 커밋
  10. hotfix 브랜치에 변경점 하나 추가
  11. 커밋
  12. master와 hotfix 브랜치 사이에 영향이 없음을 확인
  13. 불필요한 프로젝트 파일을 관리 대상에서 제외하기
  14. 충돌 해결하기
  15. 기록보기

[시작] -> [Git] -> [Git bash] 실행

유닉스 쉘(shell)을 실행한 것

필수 UNIX 명령어

Python 프로그램 파일로 실습

https://www.python.org/downloads/ 

 

Download Python

The official home of the Python Programming Language

www.python.org

내 컴퓨터 -> 속성 -> 고급시스템설정 에서 python.exe 파일의 위치를 PATH 환경변수에 설정

 

Git init: 저장소 생성 (tutorial3을 생성하고 작업 진행할 예정)

1. Git Bash의 기본 경로(C:\ 사용자\ 사용자이름) 밑에 git_tutorial 디렉토리 생성

 

2. 새로 만든 디렉토리로 이동한 뒤, Git 저장소 초기화

 

Git add와 Git commit: 첫 번째 커밋

"Hello World"를 출력하는 프로그램을 작성해서 프로젝트 디렉토리(master 브랜치)에 넣어 둠

Vim 텍스트 편집기

  • Linux나 Unix에서 사용
  • Vim에서 사용하는 주요 명령어

편집기 실행

 

편집기에서 Python 코드 입력

  • i를 누르고 입력
  • 저장과 종료를 동시에 하기 위해 [ESC] 키 누르고, :wq 입력

 

명령 프롬프트에서 파일 내용을 확인하고, 실행하기

 

커밋하기 전, 저장소 상태 확인하기

아직 Git에서 추적하지 않는 hello.py 파일이 저장소에 있고,

이 파일을 추적하려면 git add 명령어 사용할 것을 알려줌

 

파일 기록을 추적하도록 추가하기

커밋해야 할 수정 내역이 있다고 알려줌

 

커밋하기

  • 별다른 설정이 없다면 기본 커밋 메시지 편집기로 vim 사용
  • i 키를 누르고, 첫 줄에 'create "hello world" program' 이라는 커밋 메시지 입력                                                                         -> 커밋 설명할 수 있는 다른 메시지도 가능
  • [esc] 키 누르고, :wq 입력하고 [enter] 키 누름

커밋이 완료되었고, 어떤 파일이 어떻게 바뀌었는지 간략하게 알려줌

 

Git branch와 Git checkout

새로운 브랜치 생성과 이동

현재 어떤 브랜치가 있는지 확인하기

 

새로운 브랜치 생성하기

현재 작업중인 브랜치는 *로 표시

 

Hotfix 브랜치에서 작업 시작하기

지금부터의 작업은 오직 hotfix 브랜치에만 영향을 미침

master -> hotfix로 브랜치 이동

<참고> 브랜치를 만들면서 바로 체크아웃하는 명령어 -> git checkout -b 브랜치이름

 

이전 hello.py 파일 수정하기

 

수정 내용 확인 후, 실행하기

 

Git commit -a: 두 번째 커밋

현재 상태 확인

변경된 내역이 커밋될 준비가 되지 않았음

 

두 번째 커밋하기

git add 파일이름 실행 후, git commit 실행 / 또는, git commit -a 실행

 

브랜치별 프로그램 소스코드 확인하기

 

<참고> Vim 사용하지 않고 커밋 메시지 넣기

Git에서 커밋할 때는 꼭 커밋 메시지를 남겨야 함. 남기지 않으면 커밋을 할 수 없음. 그런데 간단한 커밋 메시지를 남기려고 항상 vim을 사용해야 한다면 번거로울 수 있음. 이런 상황일 때는 -m 옵션을 사용할 수 있음

git commit -m "커밋메시지"

 

 

Git merge (병합)

 

 

Git merge: master 브랜치와 병합

Master 브랜치 확인

 

Master 브랜치에 hotfix 브랜치를 가져와 병합한 후, 결과 표시

Hello.py 파일에 1행 추가, 1행 삭제

 

제대로 병합되었는지 확인

 

 

각 브랜치의 독립성 확인

Master 브랜치에 있는 hello.py 수정하고 커밋하기

 

Hotfix 브랜치에 있는 hello.py 수정하고 커밋하기

 

각 브랜치별로 소스코드 확인하기

브랜치별로 hello.py의 내용을 독립적으로 수정할 수 있음

 

충돌 해결

두 개의 브랜치에서 동시에 같은 파일의 같은 곳을 수정하고, 병합하면 생기는 문제

필자는 이미 위에서 충돌을 해결한 상태라서 오류 명령이 발생 X

 

Git은 충돌이 발생한 부분이 어떤 의미를 가지고 있는지 모르므로, 사용자가 수정해야 하는 부분

두 브랜치 중 하나 선택 or 두 내용을 수작업으로 수정하여 병합

-> 문제가 발생한 부분은 추후에 수정

 

 

git log: 기록 보기

커밋 내역을 확인하는 기능

작업이 오래 지속된 경우, 여러 사람이 저장소를 사용하는 경우 등

git log 명령의 옵션

 

git log --graph 명령 실행

커밋한 사용자, 커밋 시각, 커밋 메시지 등 확인

 

git log --stat

각 커밋에서 수정된 파일의 통계 정보

 

 

다른 커밋으로 이동하기

git log

지금까지 만든 커밋 확인

 

git checkout xxxxx

이동하고 싶은 커밋의 앞자리 커밋 아이디 입력

 

git checkout -

최신 커밋으로 이동

 

 

실제 프로젝트에서 발생하는 상황들

추적할 필요없는 파일 무시하기

입출력 데이터, 각종 로그 파일, IDE 프로젝트 자체 관리 파일

.gitignore 파일 이용하여 해결

 

병합 시 발생하는 충돌 해결하기

각 브랜치가 하나의 파일을 동시에 수정하는 경우

 

커밋 내역 살펴보기

어떤 작업이 진행되었고, 어떤 브랜치가 병합되었는지 등

 

.gitignore: 불필요한 파일 및 폴더 무시

.gitignore 파일 생성

 

.gitignore 파일

파일 목록과 파일을 구분할 수 있는 패턴의 모음

라인 하나가 패턴 하나에 해당

추가적인 내용은 https://git-scm.com/docs/gitignore 에서 확인!

 

Git - gitignore Documentation

The optional configuration variable core.excludesFile indicates a path to a file containing patterns of file names to exclude, similar to $GIT_DIR/info/exclude. Patterns in the exclude file are used in addition to those in $GIT_DIR/info/exclude.

git-scm.com

 

Gitignore.io

.gitignore 파일을 운영체제나 IDE에 맞춰 자동 생성해주는 웹 앱

https://www.gitignore.io/ 

현재 사용 중인 운영체제, IDE, 프로그래밍언어 이름 입력하면 조건에 맞는 .gitignore 파일 자동 생성

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

 

자동 생성된 파일을 복사한 후, touch 로 생성한 빈 .gitignore 파일에 붙여 넣기함

1. vim 실행

 

2, i 키를 눌러 insert 모드로 들어감

3. vim에 붙여넣기

 

 

.gitignore 파일을 저장소에 커밋

 

지금 이 시각부터는 파이썬 프로젝트 작업 시 불필요한 파일이 Git 저장소에 추가되지 않음

'Open Source Software' 카테고리의 다른 글

OSS - 07_Git 고급  (0) 2024.04.21
OSS - 05_원격 저장소와 GitHub & Git  (0) 2024.04.14
OSS - 03_버전관리시스템과 Git  (0) 2024.04.07
OSS - 02_OSS 활용  (0) 2024.04.02
OSS - 01_공개SW 라이선스  (0) 2024.03.31