카테고리 없음

Git & Github 기본기

코복이 2023. 8. 8. 10:18
728x90

 

 

<LOCAL> 로컬 영역

1. Working Directory

-내 컴퓨터에서 현재 작업중인 프로젝트가 위치한 디렉토리

-모든 작업은 Working Directory 로부터 시작이 된다.

 

 

2. Staging 

-commit 할 파일의 예비 저장소

-소스코드의 업데이트 사항을 스냅샷처럼 로컬저장소에 저장

-각 commit을 버전이라고 함

 

 

3. Local Repository

-각 컴퓨터의 git이 관리하는 로컬 저장소

-commit 한 스냅샷들을 로컬저장소에서 가지고 있음 (일종의 백업, 덕분에 복원이 가능)

 

 

 

<REMOTE> 원격 영역

1. Github 

-외부에 위치한 원격 저장소

 

 

 

<Working Directory>

STEP1. 초기화 

1) git init 명령어 *내 프로젝트의 폴더에서 초기화 해야 함.

2) 초기화 하면 모든 스냅샷이 숨김 폴더에 저장 (ls -al 숨김폴더까지 볼 수 있는 명령어) => .git 폴더 존재를 확인

 

 

 

STEP2. .gitignore 생성 (민감정보 제외)

1) .env, config, 시크릿, id, 등 공유되어선 안되는 정보들은 이그노어에 추가

* 언어별 무시파일들 참고

https://github.com/github/gitignore

 

GitHub - github/gitignore: A collection of useful .gitignore templates

A collection of useful .gitignore templates. Contribute to github/gitignore development by creating an account on GitHub.

github.com

 

 

 

STEP3. 상태 확인

git status

 

 

 

STEP4. 버전관리에 반영할 파일을 지정

현재 위치에 모든 파일 add 명령어 => git add .

특정 파일 add 명령어 => git add <파일명>

 

* add 취소 명령어 => git rm --cached <파일명>

 

 

(버전 관리에 반영된 파일들의 영역이 Staging Area)

 

<Staging>

STEP5. commit 

명령어 => git commit -m "<message>"

*어떤 작업인지 메시지를 작성해야 한다.

*메시지는 반드시 작성해야 한다.

 

 

 

📌 커밋 로그 보기

명령어 => git log

누가 언제했는지 알 수 있다.

 

 

 

(버전 생성 => 로컬 저장소에 저장)

 

 

<Local Repository>

STEP6. branch에 저장 (optional)

브랜치 이름 변경 명령어 => git branch -M main

* 기본 브랜치가 main

 

 

 

📌 branch 종류 (보통 3가지)

branch의 역할

- 기존 소스코드에 대해 서로 영향을 받지않는 독립적인 공간

- 서로 다른 개발자들이 각자의 소스가 덮어쓰이거나 임의로 수정될 염려 없이 작업할 수 있음

 

main / master branch

- 즉시 운영 배포할 수 있는 버전

- 사용자가 지금 이용 중인 코드

* main은 모든 작업이 합쳐지는 공간이기 때문에 바로 main에서 작업하는 것은 위험.

* 예전엔 master 였는데 주종관계, 인종차별 타파의 움직임으로 명칭 변경.

 

staging branch

- 상용에 반영하기 전 테스트 버전

 

feature branch

- 새로운 기능 추가 개발 (병렬 작업)

* a,b,c 각 다른 기능을 위한 브랜치를 만들어서 작업 후에 병합 (a,b,c 가 서로 영향받지 않고 독립적으로 작업 가능)

 

 

 

(로컬 작업을 끝냈으니 협업을 위해 원격저장소에 저장해볼까?)

 

 

<Github에 반영>

로컬 프로젝트를 원격저장소에 반영하기

 

 

STEP1. 원격저장소 추가

명령어 => git remote add origin <원격저장소 주소>

 

* 이후 origin 은 해당 주소를 대변함

 

 

 

STEP2. 로컬 프로젝트를 깃헙에 추가하기 (푸시) 

명령어 => git push -u origin main

 

*origin 뒤에 main 은 브랜치 이름

*-u 옵션은 최초 푸시할때 입력해주면 앞으로 해당 브랜치에 맵핑되어 고정적으로 푸시할 수 있게 됨

git push 만 입력해도 origin main 으로 푸시됨

 

 

 

 

<Github에서 프로젝트를 내 로컬로 가져오기>

STEP1. 복제

명령어 => git clone <원격저장소 주소>

📌주소가 .git 이 아니면 클론으로 가져올 수 없다.

 

📌클론으로 받는 것과 zip파일로 다운로드하는 것의 차이

- 클론은 .git (숨김폴더)를 함께 가져올 수 있다.

- zip 파일은 .git 폴더가 없다.

  1. 깃 레포지토리 클론(Clone): 클론은 깃(Git)의 버전 관리 기능을 활용하여 전체 레포지토리를 로컬 컴퓨터로 가져오는 과정입니다. 클론을 통해 레포지토리의 모든 파일, 폴더, 커밋 기록, 브랜치 등을 복제할 수 있습니다. 클론을 통해 얻는 주요 이점은 다음과 같습니다:
    • 버전 관리: 클론된 레포지토리는 깃의 버전 관리를 통해 변경 이력을 추적하고 관리할 수 있습니다.
    • 협업: 여러 사용자가 동시에 작업할 수 있고, 변경 사항을 공유하고 통합하는 것이 용이합니다.
    • 브랜치 관리: 다양한 작업을 별도의 브랜치에서 수행하여 개발과 테스트를 분리하여 진행할 수 있습니다.
    • 커밋, 푸시: 변경 사항을 커밋하고 원격 레포지토리로 푸시하여 변경 사항을 공유할 수 있습니다.
  2. ZIP 파일로 다운로드: ZIP 파일로 다운로드는 단순히 레포지토리의 파일 및 폴더를 압축하여 다운로드하는 것입니다. ZIP 파일은 레포지토리의 특정 버전이나 커밋 기록을 포함하며, 버전 관리의 이점이 없이 파일들을 받아올 수 있습니다. ZIP 파일로 다운로드하는 경우에는 다음과 같은 특징이 있습니다:
    • 버전 관리 제한: ZIP 파일은 특정 시점의 스냅샷만을 포함하므로 변경 이력을 추적하거나 관리할 수 없습니다.
    • 협업 제한: ZIP 파일은 개별 파일만 가져오는 것이기 때문에 여러 사용자 간의 협업이 어려울 수 있습니다.
    • 브랜치 정보 부족: ZIP 파일에는 현재 체크아웃된 브랜치나 다른 브랜치의 정보가 포함되지 않습니다.

요약하면, 클론은 깃의 전체 기능을 활용하여 레포지토리를 로컬로 가져올 수 있어 협업과 버전 관리에 효과적이며, ZIP 파일로 다운로드는 단순히 파일을 받아오는 방식으로서 버전 관리나 협업에는 제한이 있습니다. 선택은 프로젝트의 목적과 요구에 따라 이루어져야 합니다.

 

 

 

STEP2. 내가 작업할 브랜치로 이동하기 (생성하기)

명령어 =>

git checkout -b <브랜치명>

git checkout <브랜치명>

 

*-b 옵션은 브랜치 생성하고 바로 그 브랜치로 이동하는 명령어

 

일반적인 협업과정은 브랜치에서 작업, 테스트까지 끝내고 메인에 합침

 

 

 

STEP3. 작업 병합하기

명령어 => git merge <합칠 브랜치명>

 

*머지를 위해 브랜치 변경할 때는 branch -M 이 아닌 git checkout 명령어로 한다.

 

 

 

🛠 <error report>

새로 만든 브랜치에 푸시하려하니 이 브랜치엔 원격 작업을 위한 업스트림 브랜치가 설정되어 있지 않다는 경고

user@keemkeeman MINGW64 ~/Desktop/keem/keemgit (feature-chat)
$ git push
fatal: The current branch feature-chat has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature-chat

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

 

제시해준 명령어를 입력하여 원격 레포지토리 브랜치 설정하여 해결

 

 

 

🛠 <conflict> : 너도 그거 수정했어? 나도 했는데?

- 서로 다른 브랜치에서 동일한 위치의 서로 다른 업데이트 사항이 발생!

- 아래와 같이 경고가 나타나며 HEAD는 가장 최근의 커밋을 뜻함. 

- 수정방법

다 지우고 넣고싶은 값을 넣고 git add 부터 다시 진행한다.

 

 

 

 

728x90