The Basics of Git & GitHub
Git & GitHub 버전관리(형상관리)
두 명의 개발자가 함께 개발하는 상황을 가정하자.
- 각자 이름의 폴더를 만들고 각자 개발하다가 매주 일요일에 메일로 보내서 합친다.
- 혹시 에러날 수 있으니 백업본을 만들어둔다.(source_200101.zip / source_200102.zip)
- 상대방이 작업중인 파일을 고치고 싶으면 메일에 따로 적어준다.
- 코드를 합칠 때 이를 확인해서 내 코드에도 반영
-- > 따로 조금씩 작업하다 내가 원할 때 코드를 합칠 수 있는 방법 = Git
- 만일, 다수의 사람이 버전 관리를 해야 한다면?
- 개발자 A : 페이지1~3 작성해 버전 'A1' 저장
- 개발자 B : 버전 'A1' 다운받아서 페이지 4~6 작성후 버전 'B1' 저장
- 개발자 A : 페이지 2 수정 후 버전 'A2' 저장
- 개발자 B : 버전 'A2'와 내 'B1' 비교해(diff) 최근에 페이지 2가 바뀌어 있는걸 확인 -> 내 버전에 반영 후 -> 버전 'B2' 저장
-> 개발자 A의 최종 버전에 있는 페이지 : 1, 2(수정본)
-> 개발자 B의 최종 버전에 있는 페이지 : 1, 2(수정본), 3, 4
- Git Summary
- 원하는 시점마다 깃발을 꽂고(버전을 만들고) 이들 간에 자유롭게 돌아다닐 수 있다.
- 내가 만든 버전 뿐 아니라 동료가 만든 버전으로 이동할 수 있고, 동료와 내 버전을 비교해서 최신본으로 코드를 업데이트 할 수 있다.
- 개인 컴퓨터 , USB, 회사 서버, 클라우드와 같은 저장할 공간만 있다면 어디서나 사용 가능.
- Command Line Interface / Graphic User Interface 두 가지 방법으로 깃 사용 가능
- GitHub에 코드를 올리는 과정
- 내 컴퓨터 프로젝트 폴더에 '여기에서 Git을 쓰겠다!' 라고 명령
git init
- 코딩(Coding)
- 내가 변경한 파일 중 올리길 원하는 것만 선택
git add
- 선택한 파일들을 하나의 덩어리로 만들고 설명 적어주기
git commit -m "메시지"
- GitHub 사이트에서 프로젝트 저장소 만들기(블로그랑 유사)
- 내 컴퓨터 프로젝트 폴더에 GitHub 저장소 주소 알려주기
git remote add 저장소 주소
- 내 컴퓨터에 만들었던 덩어리 GitHub에 올리기
git push
The Details of Git & GitHub
- 로컬 폴더에서 Git 으로 버전관리를 하는 법
- 원하는 폴더에서 Git 초기화를 하면 그때부터 가능( git init )
- Git 초기화를 하면 .git 이라는 숨겨진 폴더가 생성된다. 이게 로컬 저장소
- 로컬 저장소에 내가 만든 버전 정보, 원격 저장소 주소 등이 저장된다.
- 원격 저장소에서 내 컴퓨터로 코드를 받아오면 로컬 저장소가 자동으로 생긴다.
- 한 폴더에 하나의 로컬 저장소만 유지해야 한다.
- 로컬 저장소에
git init
해보기
- git bash 실행
- 'Boxiting-cat'이라는 이름의 폴더 생성
- git bash 터미널 창에서 cd /{Boxiting-cat의 위치} 로 디렉토리 변경
- git init 명령어를 통해 선언
- ls -al 리눅스 명령어를 통해 숨겨진 .git 폴더 확인 가능
git config --global user.name "{사용자명}"
git config --global user.email {이메일 주소}
- Commit (커밋) : 하나의 버전, 커밋은 기차처럼 쌓인다.
- 커밋은 '의미 있는 변동사항'을 묶어서 만든다.
- 예를 들어, 버튼 클릭 버그를 고치는데 5가지 파일을 수정했다면 그 5가지를 묶어서 하나의 커밋으로 만든다.
- 동료 개발자가 '버튼 클릭 버그'를 고치는데 어떤 파일을 수정했는지 손쉽게 파악 가능
- 커밋 메세지 적는게 귀찮아도 정확히 적어주는 것이 중요하다. (알아보기가 편해지기 때문)
- Add(애드) : 커밋으로 만들길 원하는 파일만 선택
- 버전 생성 실습
- VS Code를 통해 해당 폴더에 README.md, index.html 파일 생성
- 원하는 파일만 선택 ( 예. README.md 파일만 커밋 )
git add README.md
- 메세지를 달아 커밋으로 만들기
git commit -m "프로젝트 설명 파일 추가"
- 생성한 커밋 보기
git log
- 만든 버전 GitHub에 코드 올리기
- 깃헙에서 Boxiting 레파지토리를 생성
- 내 컴퓨터 boxiting-cat 폴더에 GitHub 저장소 주소 알려주기
git remote add origin https://github.com/{사용자 명}/{레파지토리 이름}.git
- 만든 커밋 Push 하기
git push origin master
- 다른 사람이 만든 저장소 받아오기
- Clone(클론)
- 원격 저장소에 A가 커밋을 올린 것을 B가 본인 컴퓨터에 받아오고 싶을 때 사용하는 방법
- Clone을 하면 원격 저장소의 코드를 받아오며, 로컬 저장소도(.git) 자동으로 생긴다.
- Pull(풀)
- 개발자 A가 원격 저장소(Github)에 코드를 Update 했다면, 개발자 B는 Clone을 통해 생성했던 로컬 저장소에서 Pull 명령어를 통해 업데이트 된 코드를 가져올 수 있다.
- 개발자 B의 Push
- 개발자 B 또한 개발자 A의 원격저장소에 Push 할 수 있다. 하지만 푸시 권한이 있을 때만 가능하다. (너무도 당연한 얘기- A의 저장소에 B가 수정한 파일을 업로드한다? -> A가 권한을 부여해야만 가능할 것 같다는 추측을 할 수 있다.)
- Clone 실습
- 내 컴퓨터에 새로운 폴더 Boxiting-oct 생성
- 터미널(git bash) 에서 Boxiting-oct로 이동 -> ls -al 명령어 입력 -> 빈 폴더
- git clone https://github.com/Supreme-YS/Boxiting.git . (공백 .(점)) 을 입력해준다. 띄어쓰기 + . 의 의미는 현재 폴더에 풀어라
※만일 .(공백 + 점)을 하지 않으면 폴더 안에 폴더가 생기는 형태로 생성된다.
- Boxiting-oct 폴더에서 app.js 파일을 생성
git add app.js
git commit -m "oct의 commit"
git push origin master
- Pull 실습
- 현재 Boxiting-cat은 A개발자, Boxiting-oct는 B개발자라고 해보자.
- A가 만든 깃헙에서 아래와 같이 B가 올린 app.js가 확인된다.
- A는 B가 올린 파일을 가져오기 위해 Pull 명령어를 사용한다
- git pull origin master 명령어를 통해 성공적으로 app.js 파일을 가져온 것을 확인할 수 있으며, 실제 로컬 폴더에도 저장되어 있음을 알 수 있다.
- 협업 시나리오 가정
- 해커톤에 참가한 개발자 A는 개발자 B와 짝이 된다.
- 개발자 A가 git init으로 로컬 저장소를 생성한다.
- A는 메인 페이지 제작을 맡아 진행했고,
git add
한 다음git commit -m "메인 페이지 생성"
이라는 커밋을 생성했다. - GitHub에 원격 저장소를 만들어 그 주소를 로컬 저장소에 알려준 후 (
git remote add origin {저장소 주소}
) 원격 저장소에 푸시 (git push origin master
) - B도 개발을 시작하기 위해 A가 올려준 원격 저장소를 본인 컴퓨터에 가져온다. (
git clone {저장소 주소}
) - B는 디테일 페이지 제작을 맡았다. A는 GitHub 저장소에 B 계정을 Collaborator로 추가(Push 권한을 받기 위해)한 후 새 커밋을 푸시한다.
- GitHub -> 해당 레파지토리 -> Settings 탭 -> Manage Access 탭 -> 개발자 B의 깃헙 계정 아이디 입력 -> B에게 자동으로 메일 전송 후 -> 승인추가 완료
- collaborator로 권한이 생긴 B는 디테일 페이지를 원격 저장소에 Push 한다.
- A는 B가 Push 한 내용(B가 제작한 디테일 페이지)을 가져오기 위해 Pull 명령어를 사용한다 (
git pull origin master
)
'Version Management' 카테고리의 다른 글
[형상관리] Git & Github 심화, 중급 지식 (0) | 2021.04.02 |
---|