GIT 매뉴얼

김영광·2023년 4월 10일
0

GIT

목록 보기
1/1
post-thumbnail

깃(Git) 이란?

Git은 여러 사람들이 프로젝트에서 협업할 수 있도록 도와준다
Git은 프로젝트의 시간과 차원을 자유롭게 넘나들수 있도록 해준다.

  • 시간 - 프로젝트의 버전을 과거로 되돌리거나 특정 내역을 취소할 수 있습니다.
  • 차원 - 프로젝트의 여러 모드를 쉽게 전환하고 관리할 수 있습니다.

이클립스에서도 터미널 창 열기

window >> show window >> other... >> Terminal >> Terminal 선택 >> Open

창이 열린 후 Terminal 창의 Open a Terminal 아이콘 클릭

다양한 터미널 사용 가능, 여기서 우리는 Git Bash를 사용할 예정!

Choose terminal: 에서 Git Bash를 선택 >> OK 클릭

현재 작업위치와 작업위치 이동하기

터미널 창이 열리면 C:\Users\각자 컴퓨터에 설정한 이름들 위치에 있을 것이다.

혹시 모르니까 현재 작업위치를 확인한다.

$ pwd

경로를 확인한 후 작업위치로 이동을 한다.

$ cd # c드라이브로 이동 C:\Users\각자 컴퓨터에 설정한 이름들
$ cd [폴더 이름] # 해당 디렉토리로 이동
$ cd bigdata # 현재폴더의 하위폴더인 bigdata 폴더로 이동
$ cd "C:\bigdata\02.backend\1.java\BookRental" # "작업위치 경로"
$ cd .. # 상위 폴더로 이동

$ mkdir [현재 경로에 생성할 디렉토리명] # 디렉토리 생성
$ mkdir test1 # 현재 위치에 test1 디렉토리 생성

$ ls # 현재 디렉토리 폴더, 파일을 보여줌

$ touch index.txt # 현재 위치에 index.txt 파일 생성

Git 설정 & 프로젝트 관리 시작하기

1. Git 최초 설정

Git 전역으로 사용자 이름과 이메일 주소 설정 - 나중에 협업할 때 누가 했는 지 알기 위해서 하는 것이라 생각하면 된다. Github 계정과는 별개이다.

$ git config --global [user.name](http://user.name/) "(본인 이름)"
$ git config --global user.email "(본인 이메일)"

$ git config --global user.name # 이름 설정 확인
$ git config --global user.email # 이메일 설정 확인

2. 기본 브랜치명 변경
아마도 master로 되어 있는 경우가 있을 것이다.
master가 노예제를 연상시킨다는 이유로 main으로 변경하는 것을 권유하고 있다.

$ git config --global init.defaultBranch main

3. 프로젝트 생성 및 관리 시작

적당한 위치에 원하는 이름으로 폴더 생성

$ git init # .git 폴더 생성 (숨긴 파일 보기를 하면 .git 폴더를 볼 수 있음)

모든 작업(파일 생성, 수정)마다 파일을 저장하기!

$ git status # 파일 상태 확인하기

Git의 관리에서 특정 파일/폴더를 배제해야 할 경우

포함할 필요가 없을 때 → 자동으로 생성 또는 다운로드 되는 파일들

포함하지 말아야 할 때 → 보안상 민감한 정보를 담은 파일

이럴 때는 어떻게 해야될까? **.gitignore파일을 사용하여 배제할 요소를 지정**할 수 있다.

.gitignore파일 생성 → 파일에 배제할 파일을 적는다.

$ git status 
# 파일 상태 확인, .gitignore파일에 index.txt를 적었으면 index.txt는 배제되어 있다.

gitignore 형식은 여기서 자세히 볼 수 있다. https://git-scm.com/docs/gitignore

.gitignore 파일 생성**

  1. 원하는 repository 폴더로 이동(.gitignore는 ****프로젝트의 상위 디렉터리에 저장해야한다.)

  2. 해당 위치에 파일을 생성 & 편집

    $ vim .gitignore

    위의 명령어를 입력을 하면 파일 편집기가 나온다.

    a를 눌러서 작성을 시작한다.

    gitignore.io

gitignore을 만들어주는 사이트에서 개발하려는 프로젝트에 맞는 '운영체제, 개발환경(IDE), 프로그래밍 언어' 를 입력 후 생성 한다.

생성된 코드를 복사하여 붙여넣는다.
esc key를 눌러서, 명령입력 모드로 전환한 후 :wp를 통해 입력한 내용을 저장한다.

Git의 공간

Working directory

  • untracked : Add된 적 없는 파일, ignore 된 파일
  • tracked : Add된 적 있고 변경내역이 있는 파일, Git의 관리대상에 정식으로 등록됨을 의미한다.
  • git add 명령어로 Staging area로 이동

Staging area

  • 커밋을 위한 준비 단계
    • 예시 : 작업을 위해 선택된 파일들
  • git commit 명령어로 repository로 이동

Repository

  • .git directory라고도 불림
  • 커밋된 상태

프로젝트의 변경사항들을 commit하기

$ git add 파일명.확장자 # 원하는 파일을 Staging area로 담기.
$ git add . # 모든 파일을 Staging area로 담기.
$ git commit # 위의 과정들을 하면서 중간에 git status로 상태를 확인한다.

git commit을 하면 Vi 입력 모드로 진입을 한다.

커밋 메시지를 작성을 하면 된다.

좀 더 간단하게 커밋 메시지를 작성할 수 있는 방법이 있다.

$ git commit -m "COMMIT” # 커밋 메시지까지 함께 작성하면 된다.
$ git log # 위치한 브랜치에서 커밋한 내용들을 확인할 수 있다. 종료는 :q하면 된다.
$ git diff #파일의 추가, 변경, 삭제의 자세한 내역을 살펴볼 수 있다.

add와 commit 한번에 하기

$ git commit -am "(메시지)# untracked 파일이 없을 때 가능

Git에서 과거로 돌아가는 두 방식

  • reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지운다. origin에 올리지 않고 로컬에 커밋이 머물렀다면, 올라갔어도 나만 해당 브랜치를 사용한다면 reset를 쓰셔도 좋습니다.
  • revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다. 커밋의 내용을 되돌리는 커밋을 새로 만듭니다

$ git reset --hard (돌아갈 커밋 해시) 
# git log를 통해 커밋 해시 복사, 뒤에 커밋 해시가 없으면 마지막 커밋 가리킨다.

reset의 세 가지 옵션

  • -soft: repository에서 staging area로 이동
  • -mixed (default): repository에서 working directory로 이동
  • -hard: 수정사항 완전히 삭제
    $ git revert (되돌릴 커밋 해시) # :wq로 커밋 메시지 저장
    $ git revert --continue # 충돌이 생겼을 때 충돌이 일어난 부분 수정하고 하면 된다.
    $ git revert --no-commit (되돌릴  커밋 해시) 
    # 커밋을 하지않고 revert하기, 
    # 원하는 다른 작업을 추가한 다음 함께 커밋, 
    # 취소하려면 git reset --hard

Branch 생성 / 이동 / 삭제하기/이름 바꾸기

$ git branch develop # develop이라는 브랜치 생성
$ git branch # 브랜치 목록 확인
$ git switch develop # checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리되었다.
$ git switch -c save # 브랜치 생성과 동시에 이동하기, 기존의 git checkout -b (새 브랜치명)
$ git branch -d (삭제할 브랜치명)
# 지워질 브랜치에만 있는 내용의 커밋이 있을 경우
# (다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때)
# -d 대신 -D(대문자)로 강제 삭제해야 한다.
$ git branch -m (기존 브랜치명) (새 브랜치명) # 브랜치 이름 바꾸기

여러 Branch의 내역 편리하게 보기

$ git log --all --decorate --oneline --graph

Branch 합치는 두가지 방식

  • merge : 두 브랜치를 한 커밋에 이어붙인다.
    • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식이다.
  • rebase : 브랜치를 다른 브랜치에 이어붙인다.
    - 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다.
    - 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다.

노란색을 main브랜치, 분홍색을 develop브랜치로 가정

develop 브랜치를 main 브랜치로 merge하기위해서는 main브랜치로 이동한다.

$ git merge develop # :wq로 자동입력된 커밋 메시지 저장하여 마무리
$ git branch -d develop # 병합된 브랜치는 삭제

merge도 하나의 커밋이기때문에 merge하기 전 해당 브랜치의 마지막 시점으로 reset하면 되돌리기 가능하다.

develop 브랜치를 main 브랜치로 rebase하기위해서는 develop 브랜치로 이동한다.

$ git rebase main

main 브랜치로 이동후 아래 명령어로 develop의 시점으로 fast-forward

$ git merge new-teams
$ git branch -d develop # 병합된 브랜치는 삭제

브랜치 간 충돌

파일의 같은 위치에 다른 내용이 입력된 상황

  1. merge 충돌 해결
  • 오류 메시지와 git status 확인
  • 자바에서 해당 부분 확인
  • 해결 가능 시 충돌 부분을 수정한 뒤 git add .git commit으로 병합 완료
git merge --abort # 당장 충돌 해결이 어려울 경우 아래 명령어로 merge중단
  1. rebase 충돌 해결
  • 오류 메시지와 git status 확인
  • 자바에서 해당 부분 확인
  • 충돌 부분을 수정한 뒤 git add . 아래 명령어로 계속
$ git rebase --continue # 충돌이 모두 해결될 때까지 반복
$ git rebase --abort # 당장 충돌 해결이 어려울 경우 아래 명령어로 rebase중단

이클립스에서 충돌 해결 절차

https://confluence.curvc.com/pages/releaseview.action?pageId=6162682 참고

Personal access token 만들기

이것을 하는 이유는?

Git Hub에서 ID/PW기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식의 Token Authentication 인증을 요구하고 있다.

  • 우측 상단의 프로필 - Settings
  • Developer Settings
  • Personal access tokens - Generate new token
  • repo 및 원하는 기능에 체크, 기간 설정 뒤 Generate token
  • 토큰 안전한 곳에 보관해 둘 것

토큰 컴퓨터에 저장하기 - 윈도우일 경우

  • Windows 자격 증명 관리자
  • Windows 자격 증명 선택
  • git:https://github.com 자격 정보 생성
  • 사용자명과 토큰 붙여넣기

레포지토리에서 협업할 팀원 추가하기

Settings - Collaborators - Add people

로컬에 원격 저장소 추가 후 푸시

$ git remote add origin (원격 저장소 주소) # 로컬의 Git 저장소에 원격 저장소로의 연결 추가
$ git branch -M main
$ git push -u origin main 
# 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
# -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결
$ git remote # 원격 목록 보기
$ git remote remove (origin 등 원격 이름) # 원격 지우기(로컬 프로젝트와의 연결만 없애는 것)

GitHub에서 프로젝트 다운받기

터미널이나 Git Bash에서 대상 폴더 이동후

$ git clone (원격 저장소 주소) # Git 관리내역 포함 다운로드

push, pull

$ git push
$ git push <저장소명> <브랜치명>
$ git pull
$ git pull <저장소명> <브랜치명>

pull 할 것이 있을 때 push를 한다면?

원격에 먼저 적용된 새 버전이 있으므로 적용이 안된다.

pull해서 원격의 버전을 받아온 다음 push가 가능하다.

  • git pull --no-rebase - merge 방식 충돌 부분을 수정한 뒤 git add .git commit으로 병합 완료
  • git pull --rebase - rebase 방식 → pull 상의 rebase는 다름 (협업시 사용 OK) 충돌 부분을 수정하고 git add . 를 한다. git rebase --continue 를 한다.

로컬의 내역 강제 push하기

  1. 로컬의 내역 충돌 전으로 reset

  2. 아래 명령어로 원격에 강제 적용

$ git push --force

로컬에서 브랜치 만들어 원격에 push 해보기

브랜치를 만든 후 원격에 push를 하면 대상을 명시하라는 메시지가 나타난다.

$ git push -u origin save # 원격의 브랜치 명시 및 기본 설정
$ git branch --all # 로컬과 원격의 브랜치 확인
$ git config --global push.default current 
# 항상 현재 브랜치를 기준으로 git push 명령어가 작동

원격의 브랜치 로컬에 받아오기

$ git fetch # 원격의 변경사항 확인
$ git switch -t origin/save # 로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch
$ git push (원격 이름) 0.--delete (원격의 브랜치명)

리모트 저장소 확인하기, 추가하기, push하기

git remote -v # 리모트 저장소 확인
git remote add [단축 이름] [URL] # 리모트 저장소 추가
git push [remote-name] [branch-name] # 리모트에 push
profile
힘들더라도 꾸준히!

0개의 댓글