[TeamLog] Git/Github 수업
Git / Github class for TeamLog 12th
수업 목차
[!example] 목차
- Git, Github란 무엇인가?
- 용어 알아보기
- 명령어 알아보기
- 실습해보기
- 마무리
1. Git, Github란 무엇인가?
Git
Git이란 2005년 탄생한 버전 관리 시스템으로,
리눅스 커널을 최초로 개발한 리누스 토르발스가 만들었다.참고자료 : 공식 문서에서 말한 Git의 탄생 비하인드
버전 관리란 무엇인가?
파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.
버전 관리는 왜 필요한가?
발표 준비를 하면서, PPT를 계속 수정하는 상황을 가정 해 보자.
다 알아볼 수 있다고 생각하며 파일명을 아무렇게나 정해 놨다.
하지만 이것 제출 마감일이 되어서야 발목을 잡는다. 뭘 제출해야 하는지 감이 잡히지 않는다.
‘대체 뭐지?’ 하고 결국 파일의 내용을 하나하나 확인해본다.
버전 관리 시스템을 사용하면 이런 불상사를 없앨 수 있다.
한 눈에 무엇이 최종 제출본이고, 언제 어떤 버전으로 수정했는지를 볼 수 있다.
굳이 PPT 내용을 하나하나 다 확인하는 번거로움과 시간을 줄일 수 있는 것이다.
Github란?
Github는 로컬의 내용을 업로드하는 저장소라고 생각할 수 있다.
주로 협업과 오픈소스 프로젝트 기여, 코드 백업 등에 사용된다.
이것은 앞서 로컬에서 작업한 것들을 Github에 업로드한 것이다.
모든 파일이 업로드되면서도, 변경 기록도 보여준다.
여기에 커밋 메세지, 즉 업로드 시에 설명 글도 ‘2차 수정’, ‘5차 수정’ 과 같이 적어주면 더 좋을 것이다.
2. 용어 알아보기
Git과 Github를 사용해서 협업할 때 주로 사용되는 말들.
무엇인지 모른다면 알아들을 수도 없고, 알아들을 수도 없다면 협업 자체가 매우 어려워지기에… 간단한 개념들은 알고 가자!
필수 용어들
- 로컬 저장소 (Local Repository) : 내 PC에서 관리하는 git 저장소
- 원격 저장소 (Remote Repository) : Github 등에서 관리하고, 로컬 저장소의 내용을 업로드
- 스테이징 (Staging) : 커밋 하기 전, 커밋하기 위한 파일들을 모으는 것
- 커밋 (Commit) : 스테이징 된 파일들을 커밋 히스토리에 기록하는 것
- 푸쉬 (Push) : 로컬 저장소의 커밋들을 원격 저장소에 업로드하는 것
- 풀 (Pull) : 원격 저장소의 변경 사항들을 로컬 저장소에 가져오는 것
- 브랜치 (Branch) : 독립적으로 어떤 작업을 진행하기 위한 분기
- 클론 (Clone) : 다른 저장소로부터 프로젝트를 복제하는 것
- 병합 (Merge) : 두 브랜치의 변경 사항은 하나로 합치는 것
- 풀 리퀘스트 (Pull Request) : 커밋을 병합하는 것을 허락해달라고 요청하는 것
3. 명령어 알아보기
기본 설정 및 초기화
1
2
3
4
5
6
7
8
git config
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
git config --global user.password "your_token"
git config --global init.defaultBranch main
git config --global core.autocrlf true
git config --global credential.helper store
git config
명령어는 Git의 설정 값을 조회하거나 설정할 때 사용한다.
1
git init
현재 디렉토리를 Git 저장소로 만들어 준다.
로컬 저장소 작업
1
2
3
4
git add
git add testfile
git add .
변경된 파일을 스테이징 영역에 추가하는데 사용한다.
이 명령어를 통해 선택된 파일들이 커밋된다.
1
2
3
git commit
git commit -m "testmessage"
스테이징 영역에 추가된 변경사항들을 로컬 저장소의 히스토리에 기록한다.
1
git status
현재 작업 디렉토리와 스테이징 영역의 상태를 확인할 때 사용한다.
어떤 파일이 변경되었는지, 스테이징 되었는지 등을 보여준다.
1
git log
커밋 히스토리를 조회할 때 사용한다. 커밋 이력들을 확인할 수 있다.
원격 저장소 작업
1
2
3
git clone
git clone <원격 레포지토리 주소>
원격 저장소의 내용을 로컬에 복제할 때 사용한다.
1
2
3
4
git push
git push origin main
git push -f origin main
로컬 저장소의 커밋들을 원격 저장소에 업로드할 때 사용한다.
1
2
3
git pull
git pull origin main
원격 저장소의 최신 변경사항을 로컬 저장소에 반영할 때 사용한다.
git fetch
와 git merge
의 기능을 합친 명령어이다.
브랜치 및 병합 작업
1
2
3
4
git branch
git branch testbranch
git branch -d testbranch
브랜치를 생성, 삭제 또는 리스트업할 때 사용한다.
1
2
3
git checkout
git checkout testbranch
다른 브랜치로 전환할 때 사용한다.
1
2
3
git merge
git merge testbranch
두 브랜치의 변경사항을 하나로 합칠 때 사용한다. 현재 브랜치에 다른 브랜치의 변경사항을 병합하는 명령어이다.
4. 실습
위에서 읽어 본 기본 명령어들 중 일부를 사용해서, 로컬 깃 레포지토리에서 커밋하고 원격 레포지토리에 업로드 해 볼 것이다.
깃허브에서 레포지토리 생성하기
Github 메인에서 우측 상단 +
버튼을 누르고 New Repository
를 선택한다.
레포지토리 이름, 설명, 공개 여부를 설정한 후 우측 하단 ‘Create Repository’로 레포지토리를 생성한다.
깃 로컬 레포지토리 만들기
이제 로컬 Git으로 파일을 생성하고 커밋한 이후 원격 레포지토리에 푸쉬하기까지의 과정이다. (윈도우 기준으로 설명할 예정인데, 명령어는 다 똑같다!)
작업 폴더로 사용할 폴더를 아무 경로에 만들고, 터미널에서 해당 폴더를 연다.
나의 경우에는 C:\Users\KWJ\Desktop\ugly-woojin
에 만들었다.
1
git init
위 명령어로 일반 폴더를 깃이 관리하게끔 할 수 있다.
이제 해당 폴더는 로컬 레포지토리로써 사용하는 것이다.
파일 추가하고 커밋하기
이제 깃으로 초기화 된 폴더에 파일을 만들어 준다. 나는 이렇게 파일을 만들었다.
이제 이 파일을 추가하고, 커밋해야 하는데 명령어는 다음과 같다.
1
2
3
git add . #현재 폴더의 모든 파일들의 변경 사항을 add
git commit -m "TeamLog 2024" #코멘트를 달아서 변경사항들을 커밋
원격 저장소 추가하기
지금 로컬 레포지토리는 아까 만든 Github 레포지토리와 연동되어 있지 않다. 커밋들을 Github에 업로드하기 위해서는 원격 레포지토리와의 연결이 필요하다.
1
git remote add origin https://github.com/h0pler/ugly-woojin.git
위 명령어로 원격 레포지토리와 연결해줄 수 있다.
브랜치 이름 바꾸기
일반적으로 Git 시스템은 기본 브랜치로 master
를 사용하지만, Github에서는 기본 브랜치로 main
브랜치를 사용한다. 그래서 로컬 저장소의 브랜치 이름과 원격 저장소의 브랜치 이름이 다를 경우 업로드가 제대로 될 수 없다.
1
git branch -M main
위 명령어를 통해서 브랜치의 이름을 main
으로 변경 해 줄 수 있다.
Github에 업로드하기
이제 마지막으로 변경 사항을 Github에 업로드하면 된다.
1
git push origin main
위는 origin
즉 원격 저장소의 main
브랜치에 업로드하라는 명령어이다. 위 명령어가 오류 없이 제대로 실행된다면 이러한 메시지가 출력된다.
이제 Github에 다시 접속해서 아까 만들어 두었던 레포지토리를 들어가 보면 내가 만든 파일이 정상적으로 업로드된 것을 볼 수 있다.
5. 마무리
김우진의 한마디..ㅜ
수업시간에 그렇게까지 많은 변수에 대비를 하지 못했어서 실습이 원활하게 이루어지지 않았던거같아요..ㅜㅜ 심심한 사과의 말씀 드립니다 여러분.
처음 써보는거고 처음 접하는 개념들이니까 생소하고 어려울 수 있으니 제대로 따라오지 못했다고 해서 너무 상심하지 말았으면 좋겠습니다.
나중에 개발을 본격적으로 배우고 프로젝트를 시작하면 반드시 사용해야 할 것이므로 보내드린 자료들 참고하시고 꼭 복습해주시길 바라겠습니다.
수업 때도 여러번 말했지만 모르는거 있으면 언제든지 편하게 질문해주세요..!!
+ 어제 집가서 올린다고 해두고 이것도 오늘 올리네요.. 미안합니다정말ㅜ
그래도 다들 열심히 해줘서 고마워요…!!!!!