romworld

[Github] 깃허브(Github)란 무엇인가 ! 사용법을 알아보자 ! 본문

etc

[Github] 깃허브(Github)란 무엇인가 ! 사용법을 알아보자 !

inderrom 2023. 1. 24. 03:37

깃허브란?

  • VCS(Version Control System)
  • 분산 버전 관리 툴인 깃(git)을 사용하는 프로젝트를 지원하는 웹호스팅 서비스

깃(Git)이란?

  • 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템
  • 스프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다.

 

 

 

 

- git 최초 설정 

git config --global user.name "(본인 이름)"
git config --global user.email "(본인 이메일)"

- 기존 브랜치명 변경 (master - slave 보단 main으로 대체하자)

git config --global init.defaultBranch main

 

 

CLI로 해보기 (프로젝트 생성 & Git 관리)

 

- vs코드에서 폴더를 추가하고 vs터미널을 킨다음 아래 명령어 입력

- .git 폴더 생성

git init

 

- git 상태

git status

 


소스트리로 해보기

 

- 저장소 추가

  • 소스트리에 폴더 드래그, 로컬 저장소 추가

- git이 관리하는 저장소 새로 만들기

  • .git 폴더 삭제 후 진행
  • 소스트리에 폴더를 드래그하거나, 로컬 저장소 생성

 


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

a. 포함할 필요가 없을 

  • 자동으로 생성 또는 다운로드되는 파일들 (빌드 결과물, 라이브러리) 
  • ex) java파일 class 파일

b. 포함하지 말아야 할 

  • 보안상 민감한 정보를 담은 파일
  • ex) 아이디, 비밀번호나 개인정보

gitignore 파일을 사용해서 배제할 요소들을 지정

 

- .gitignore

  • .gitignore 파일을 생성해서 안에 사용을 배제할 파일명을 적어주면 관리대상에서 제거 된다.

 

gitignore 형식

# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

# 최상위 폴더의 file.c
/file.c

# 모든 .c 확장자 파일
*.c

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

# logs란 이름의 파일 또는 폴더와 그 내용들
logs

# logs란 이름의 폴더와 그 내용들
logs/

# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log

 

 


git 버전 (타임캡슐) 담기 

 

- git 변경상태 확인

git status

 

- 파일 하나 담기 (예제파일 : tigers.yaml)

git add tigers.yaml
  • git status로 확인

 

- 모든 파일 담기 (vs 코드 기능)

git add .
  • git status로 확인

 

타임캡슐 저장

git commit
  • Vi 입력 모드로 진입

작업Vi 명령어상세

입력 시작 i 명령어 입력 모드에서 텍스트 입력 모드로 전환
입력 종료 ESC 텍스트 입력 모드에서 명령어 입력 모드로 전환
저장 없이 종료 :q  
저장 없이 강제 종료 :q! 입력한 것이 있을 때 사용
저장하고 종료 :wq 입력한 것이 있을 때 사용
위로 스크롤 k git log등에서 내역이 길 때 사용
아래로 스크롤 j git log등에서 내역이 길 때 사용
  • FIRST COMMIT 입력한 뒤 저장하고 종료

 

- 커밋 메시지까지 함께 작성하기

 

git commit -m "FIRST COMMIT"

 

- 아래 명령어와 소스트리로 확인

git log


- 파일의 추가,변경,삭제 확인

git diff

 

작업Vi 명령어상세

위로 스크롤 k git log등에서 내역이 길 때 사용
아래로 스크롤 j git log등에서 내역이 길 때 사용
끄기 :q :가 입력되어 있으므로 q만 눌러도 됨

 

add와 commit 한꺼번에

git commit -am "(메시지)"
  • 새로 추가된 파일이 없을 경우에만 가능 (untracked)

 


Git 프로젝트를 이전으로 되돌리는 방법

  • reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지운다 
  • revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행 (필요한 것만 변경할 수 있고 그 기록도 다 남길 수 있다)
한번 공유공간에 올라간 내역을 reset해버리면 협업 시 문제 발생, 충돌이 생길 수 있으므로
revert를 이용해서 되돌려야 한다.

 

 

*CLI 방법

 

- reset을 사용해서 돌아가기

git log
  • 먼저 git log를 통해 커밋 내역 확인 후
  • vs터미널에서 보이는 commit 옆의 로그를 복사해준다. (되돌리기 원하는 시점의 로그 복사) - 앞의 7-8글자만 복사해도 된다.

co

  • :q 로 빠져나오기
git reset --hard (돌아갈 커밋 해시)

 

- reset 하기 전 시점으로 돌아가기

git reset --hard
  • 뒤에 커밋 해시가 없으면 마지막 커밋 시점으로 돌아감

 

- revert를 사용해서 과거의 커밋 되돌리기

git revert (되돌릴 커밋 해시)
  • :wq로 커밋 메시지 저장
  • 만약 :wq가 먹질 않는다면 :w! 입력 (강제로 저장) 후 :wq

 

만약 전에 커밋한 곳으로 되돌리려는데 충돌이 나는 경우

  1. git rm (파일명)    으로 Git에서 해당 파일 삭제
  2. git revert --continu
  3. :wq

 

커밋 하지 않고 revert로 돌아가기

  • git revert --no-commit (되돌릴 해시)
  • 원하는 작업을 추가한 다음 함께 커밋
  • 취소하려면 git reset --hard

 

 

*소스트리 방법

 

- reset

  • 대기 중인 파일의 체크박스를 선택하면 add가 된다
  • 해당 커밋에서 마우스 우클릭 ..이 커밋으로 초기화
  • 선택지에서 hard 선택

- revert

  • 마우스 우클릭 커밋 되돌리기

- revert 사용시 충돌났을 경우 (window)

1. 커밋 되돌리기

2. 충돌 해결 - 저장소 인것을 사용하여 해결

3. 메세지 입력 후 커밋


- 맥(Mac)인 경우

 

맥의 소스트리는 해당 상황에 대한 기능이 미비하여
위와 같은 오류 팝업이 나타난다.

 

때문에 팝업에 나와 있듯, CLI에서 git rm (파일명) 명령어로 해당 파일을 지운 뒤
git commit을 입력하여 수동으로 해결해주어야 한다.

 


브랜치 생성/이동/삭제하기

 

- branch 생성

git branch add-coach

- branch 목록 확인

git branch

- add-coach 브랜치로 이동

git switch add-coach
  • checkout 명령어가 Git2.23버전부터 switch, restore로 변경됨

- 브랜치 생성과 동시에 이동하기

git switch -c (새 브랜치명)
  • 기존 checkout -b (새 브랜치명)

- 브랜치 삭제하기

git branch -d (삭제할 브랜치명)
  • git branch -D  
  • 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때 (강제삭제)

 

- 브랜치 이름 바꾸기

git branch -m (기존 브랜치명) (새 브랜치명)

 

결과보기

- 위치한 브랜치에서의 내역만 볼 수 있음

git log

- 여러 브랜치 내역 보기

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

 

- 소스트리에서 확인(제일 편함)

가지가 브랜치별로 뻗어있는 걸 볼 수 있음

 


서로 다른 브랜치 합치기

 

marge : 두 브랜치를 한 커밋에 이어 붙힌다.
  • 브랜치의 사용 내역을 남길 때
rebase : 브랜치를 다른 브랜치로 이어 붙힌다.
  • 한 줄로 깔끔하게 정리된 내역을 유지하기 원할 때
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 게 좋다.

 


- ex) add-coach 브랜치를 main 브랜치로 merge

  • main 브랜치로 이동
  • 아래의 명령어로 병합
git merge add-coach
  • mac에서는 git marge (브런치명)을 작성하고 :wq를 입력해서 마무리한다.

 

- marge는 reset으로 되돌리기 가능하다

  • marge도 하나의 커밋이므로
  • marge하기 전 마지막 시점으로 이동

 

- 병합된 브랜치 삭제하기

git branch -d add-coach

 

 

- ex) new-teams 브랜치를 main 브랜치로 rebase

  • new-teams 브랜치로 이동
  • 아래 명령어 입력
  • marge와는 반대
git rebase main
  • 소스트리 확인
  • main 브랜치로 이동 후 아래 명령어로 new-teams의 시점으로 fast-forward
git merge new-teams

 


충돌 해결하기

 

*CLI 방법

  • 파일의 같은 위치에 다른 내용이 입력된 상황
  • conflict-1, conflict-2 브랜치 생성해서 일부로 충돌해보기

1. merge 충돌 해결하기

git merge conflict-1로 병합을 시도하면 충돌 발생

  • 오류 메시지와 git status 확인
  • VS Code에서 해당 부분 확인
  • 직접 수정하기

- 당장 수정이 어려운 경우 중단하기

git merge --abort
  • 충돌 부분을 수정한 뒤 git add . 
  • git commit 으로 병합

2. rebase 충돌 해결하기

conflict-2에서 git rebase main로 리베이스 시도하면 충돌 발생

  • 오류 메시지와 git status 확인
  • VS Code에서 해당 부분 확인

- 당장 수정이 어려운 경우 중단하기

git rebase --abort

 

해결 가능 시

  • 충돌 부분을 수정한 뒤 git add .
  • 아래 명령어로 계속
git rebase --continue
  • 충돌을 모두 해결할 때 까지 반복

main에서 git merge conflict-2로 마무리

conflict-1, conflict-2 삭제

  • git branch -d conflict-1
  • git branch -d conflict-2

*소스트리 방법

1. 브랜치 만들고 merge, rebase 하기

  1. to-merge, to-rebase 브랜치 생성
    • 상단의 브랜치 버튼 클릭
    • 왼쪽의 브랜치 탭에서 클릭하여 이동

 

브랜치를 이동하며 파일 살펴보기

  1. to-merge 브랜치 main으로 merge
    • main에 위치한 뒤 to-merge 브랜치를 우클릭하여 Merge ... 클릭 
    • merge는 병합이다.

 

  1. to-rebase 브랜치 main으로 rebase
    • to-rebase에 위치한 뒤 main 브랜치를 우클릭하여 ... 재배치 클릭
    • main에 위치한 뒤 to-rebase 브랜치를 우클릭하여 Merge ... 클릭

 

  1. main으로 이동 후 to-merge와 to-rebase 우클릭하여 삭제
    • merge되지 않은 브랜치의 경우 강제 삭제 체크박스 선택

 

2. merge 충돌 해결해보기

💡 rebase는 충돌 가능시 CLI로 진행 권장

 

충돌이 나는 경우 알림창이 뜨고 똑같이 충돌나는 부분을 수정해주고

merge해주면 된다. 그후 삭제할 브랜치를 삭제해주면 된다.

 

 


2. Git 가입하고 토큰 만들기

  1. Sign Up으로 가입 후 로그인

 

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

 

  1. 토큰 컴퓨터에 저장하기
    • 윈도우 가이드
      • Windows 자격 증명 관리자
      • Windows 자격 증명 선택
      • git:https://github.com 자격 정보 생성
      • 사용자명과 토큰 붙여넣기
    • 맥 가이드
      • Keychain Access 앱 실행
      • github의 인터넷 암호 항목 선택
      • 사용자명(계정 칸)과 토큰(암호 보기 누른 뒤 오른쪽 칸) 붙여넣기
        •  키체인 관련 팝업이 먼저 뜨면 맥 로그인 암호를 입력해주세요.

 

 

 

소스트리에도 추가
 맥에서 소스트리에 계정 설정하기

  • 설정 > 계정 탭 > 추가 버튼
  • 인증방식은 베이직, 프로토콜은 HTTPS로 설정
  • 사용자명(GitHub 아이디)와 암호(토큰) 설정

 

************

 

  1. GitHub에 새 Repository 생성
    • Public: 모두에게 보일 수 있는 프로젝트
    • Private: 허용된 인원만 볼 수 있는 프로젝트
  2. 협업할 팀원 추가
    • 레포지토리의 Settings - Collaborators
      •  Manage Access 
    • Add people

원격 저장소 사용하기

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

⭐️ 이번 강에서는 HTTPS 프로토콜 사용

 

GitHub 레포지토리 생성 후 복붙 명령어

git remote add origin (원격 저장소 주소)
  • 로컬의 Git 저장소에 원격 저장소로의 연결 추가
    • 원격 저장소 이름에 흔히 origin 사용. 다른 것으로 수정 가능
git branch -M main
  • GitHub 권장 - 기본 브랜치명을 main으로
git push -u origin main
  • 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
    • -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결

 

- 원격 목록보기

git remote
  • 자세히 보기: git remote -v

 

- 원격 지우기(로컬 프로젝트와의 연결만 없애는 것. GitHub의 레포지토리는 지워지지 않음)

git remote remove (origin 등 원격 이름)

 

2. GitHub에서 프로젝트 다운받기

  • Download ZIP: 파일들만 다운받음, Git 관리내역 제외
  • Git clone: Git 관리내역 포함 다운로드

 

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

(터미널에서 cd는 경로 이동 )

git clone (원격 저장소 주소)

 

 


push와 pull

1. 원격으로 커밋 밀어올리기(push)

  1. Leopards의 members에 Evie 추가
    • 커밋 메시지: Add Evie to Leopards

 

  1. 아래 명령어로 push
git push
  • 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능

 

2. 원격의 커밋 당겨오기(pull)

  1. GitHub에서 Leopards의 members에 Dongho 추가
    • 커밋 메시지: Add Dongho to Leopards

 

  1. 아래 명령어로 pull
git pull

 

 

3. pull 할 것이 있을 때 push를 하면?

 - 로컬에서 Leopards의 manager를 Dooli로 수정

  • 커밋 메시지: Edit Leopards manager

 

 - GitHub에서 Leopards의 coach를 Lupi로 수정

  • 커밋 메시지: Edit Leopards coach

 

- push 해보기

  • 원격에 먼저 적용된 새 버전이 있으므로 적용 불가
  • pull 해서 원격의 버전을 받아온 다음 push 가능

 

- push 할 것이 있을 시 pull 하는 두 가지 방법

  • git pull --no-rebase - merge 방식
    • 소스트리에서 확인해보기
    • reset으로 되돌린 다음 아래 방식도 해보기
  • git pull --rebase - rebase 방식
    • pull 상의 rebase는 다름 (협업시 사용 OK)

- push하기

 


4. 협업상 충돌 발생 해결하기

- 로컬에서 Panthers에 Maruchi 추가

  • 커밋 메시지: Add Maruchi to Panthers

 

원격에서 Panthers에 Arachi 추가

  • 커밋 메시지: Add Arachi to Panthers

 

pull 하여 충돌상황 마주하기

  • --no-rebase와 --rebase 모두 해 볼 것

 

 

5. 로컬의 내역 강제 push해보기

- 로컬의 내역 충돌 전으로 reset

 

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

git push --force

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

  1. from-local 브랜치 만들기

 

아래 명령어로 원격에 push

아래와 같이 하면 대상을 명시하라는 메시지 나타남

git push

아래 명령어로 원격의 브랜치 명시 및 기본설정

git push -u origin from-local

 

브랜치 목록 살펴보기

  • GitHub에서 목록 보기
  • 아래 명령어로 로컬과 원격의 브랜치들 확인
git branch --all
  • git branch --a

 

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

  1. GitHub에서 from-remote 브랜치 만들기
    • git branch -a에서 현재는 보이지 않음

 

아래 명령어로 원격의 변경사항 확인

git fetch
  • git branch -a로 확인

아래 명령어로 로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch

git switch -t origin/from-remote

 

3. 원격의 브랜치 삭제

git push (원격 이름) --delete (원격의 브랜치명)

 

Comments