-
[TIL #7] GitCodeStates_Backend/TIL (Today I Learned) 2022. 5. 3. 14:27
코드스테이츠 백엔드 부트캠프 39기 9일차
📌 경로 , 명령어or코드 , 파일
Git - 버전 관리 시스템 끝판왕
분산형 버전 관리 시스템 git. 개발자에게 git은 필수다!
git 을 배우면 오픈 소스 생태계에 기여할 수도 있을 것이다.
변경 사항을 저장할 때는 항상 comment 를 상세히 적어둬야 한다.
commit 을 할 때 마다 해당 시간에 Snapshot 이 하나씩 생성된다.
commit 과 변경 사항 comment 소스코드가 아닌 부분도 변경 사항이 생기면 하이라이트로 확인할 수 있다. 매우 좋은 듯..
코드가 아니어도 변경 사항이 하이라이트로 표시된다!
Git , Github
git은 로컬에서 폴더를 지정해 해당 폴더 내부 파일들의 버전을 관리하는 시스템이고,
github는 여러 사람들이 공동의 클라우드에서 git 을 함께 할 수 있게 하는 시스템이다
아래 그림처럼 각자 개인의 로컬 git으로 작업하고 이를 공동의 github로 push 하는 방식으로 협업을 한다.
각자 로컬 작업 후, github 로 git 작업 수행 공동의 github 원격 저장소에 개입하는 것과 반대로, 공동 원격 저장소에 있던 프로젝트를 내 원격 저장소와 로컬에 가져올 수도 있다.
fork 와 clone 이다.
fork : 남의 원격 저장소를 내 "원격 저장소"로 가져오는 것.
clone : 어떤 원격 저장소를 내 "로컬 저장소"로 가져오는 것.
fork 와 clone 로컬에서 변경된 내용을 commit 한 후, 원격 저장소로 push 하여 업로드를 할 수 있다.
github 에는 Pull Request 라는 기능이 있어서, 내가 제안한 코드 변경사항을 Pull Request로 반영을 요청할 수 있다.
Push 공동 원격 저장소에서 다른 사람의 변경 사항이 적용되었다면 이를 새롭게 가져올 필요도 있다.
이 때 Pull 명령을 사용한다.
Pull [참고] pull 은 fetch + merge 로써 automerge 를 수행한다.
git 설치 방법
Mac OS 에서 터미널에 그냥 git 이라고 명령하면 된다.
git 환경 설정
1. 사용자 이름, 이메일 주소 설정
git config --global user.name "Nbo-KimHyeongSeob" git config --global user.email "seobseoby7@gmail.com"
2. 기본 에디터 변경 (vi -> nano)
git config --global core.editor nano
3. 설정 확인
git config --list
github 연결
SSH(Secure SHell) 등록
ssh 는 '보안 shell 접속'을 뜻하며, CLI 환경에서 다른 PC에 접속하거나 요청할 때 사용한다. 비대칭키를 이용해 사용자를 인증한다.
github에 'ssh 공개키(비대칭키 중 하나)'를 등록하고 ssh를 이용해 git clone 을 실습해본다.
1. ssh 키 생성
ssh 키는 비대칭키로 구성되며 이름에서 유추할 수 있듯이 두 개의 키가 서로 대칭이 되지 않는 형태로 존재한다.
다음 명령어로 ssh 키 페어(쌍)을 생성하라.
ssh-keygen
ssh-keygen 결과 경로 ~/.ssh./ 에 두 파일(ssh 키 페어) id_rsa 와 id_rsa.pub 를 생성한다. 이 중 id_rsa.pub 는 공개해도 되는 공개키(Public Key)이고, id_rsa 는 공개하면 안되는 개인키(Private Key) 또는 비밀키(Secret Key) 라고 한다.
2. 공개키(Public Key) 복사
다음 명령어를 입력한다.
cat ~/.ssh/id_rsa.pub
3. github에 공개키 등록
git clone
clone 이 정상적으로 되면 ssh 키도 정상적으로 등록된 것이다.
git, github 의 workflow 학습
git, github 의 기능과 명령어
- Fork
- clone
- status
- restore
- add
- commit
- reset
- log
- pull
- push
- init
- remote
- remote -v
혼자 작업 workflow
1️⃣ 기여하길 원하는 원격저장소를 fork 를 통해 내 원격저장소로 가져온다.
fork 1 fork 2 2️⃣ clone 으로 fork 한 내 원격저장소의 프로젝트를 로컬저장소로 가져온다.
ssh 키로 등록을 해두었으므로 ssh 주소로 clone 을 진행한다.
git clone git@github.com:Nbo-KimHyeongSeob/be-simple-git-workflow.git
clone 결과 3️⃣ git status 로 내 로컬저장소로 가져온 프로젝트의 상태를 확인한다.
git status 는 commit 되기 전까지의 'staging area', 'unstaging area' 목록을 보여준다.
git status 결과 아무 변경사항이 없으므로, 아무 목록도 출력되지 않는다.
[참고] : unstaging area와 달리, 아예 새롭게 생긴 파일을 untracked files 라고 표현한다.
4️⃣ 변경 사항을 임의로 만들고 git status 를 해보자.
기존에 존재하던 README.md 를 수정하였다.
변경사항 생긴 후 git status 결과 빨간색으로 modified: README.md 가 출력된다.
빨간색으로 출력된다면 아직 add 가 되지 않은 'untracked file' 이다. add 를 하면 'staging area' 로 넘어가 commit 이 가능한 상태 가 된다.
5️⃣ add 로 변경된 파일을 'staging area'로 넘겨보자.
git add 를 한 후 git status 를 한 결과 git add <파일명> 또는 git add . (->모든 파일 다 add) 를 하면 add 수행된다. git add 후 git status 를 한 결과 초록색으로 수정된 파일 목록이 출력되는데, 초록색으로 출력되는 파일은 'staging area'에 있는 파일이다.
❓ [질문] add 가 완료된 후 다시 수정되면 어떻게 되는가?
-> add 된 파일은 그대로 'staging area' 에 있으며, 새롭게 수정된 파일은 'untracked file'에 올라간다.
새로 수정한 버전의 commit 을 위해서는 다시 add 를 실행해줘야 한다.
같은 README.md 파일이지만 'staging area' , 'unstaging area' 에 둘 다 있다. 여기서 git add 를 할 경우 최신 버전의 README.md(=새로 수정한 버전) 만 'staging area'에 남게 된다.
6️⃣ restore 는 아직 commit 되지 않은 로컬저장소의 변경사항을 취소해준다.
'unstaging area' 의 경우 git restore <파일명> 또는 git restore . (->모든 파일 다 restore) 로 변경사항을 제거해주고,
'staging area'에 있는 파일의 경우 git restore --staged <파일명> ( . 도 동일하게 가능!)을 하면 'unstaging area'로 변경해준다.
'unstaging area' 만 제거한 결과 'staging area' 에서 제거 후 다시 'unstaging area' 까지 제거한 결과 7️⃣ 이제 commit 을 해보자.
commit 결과 -m 옵션은 커밋에 대한 comment 를 적어둘 수 있다.
8️⃣ commit 결과 확인
git log 결과 git 관련 로그들이 출력된다.
9️⃣ reset 으로 commit 완료한 내용 취소하기.
원격 저장소에 push 되지 않고 아직 로컬 저장소에만 commit 해 둔 기록이라면 reset 명령어로 commit 취소가 가능하다.
git reset HEAD^ 결과 HEAD3 , HEAD^^^ , HEAD~3 등의 사용법도 있고, hard 또는 soft 옵션도 있음 (추가 조사 필요)
🔟 push 로 원격저장소에 업로드하기.
push 결과 연결된 내 원격저장소의 'origin' 의 'master' 브랜치로 업로드되었다.
내 원격저장소에 잘 push 되었음이 확인된다. 1️⃣1️⃣ Pull Request(PR) : push 해놓은 변경 사항을 함께 작업하는 다른 사람들에게 알리는 것. github 에서 PR 을 할 수 있다.
github 관리자는 PR 을 수락하여 merge 할 수도 있다.
함께 작업 workflow
1️⃣ git init 으로 원하는 디렉토리에 git 을 적용한다(로컬저장소가 되는 것). 만약 clone 으로 원격저장소를 가져왔다면 해당 디렉토리는 자동으로 git 이 적용된다고 보면 된다.
2️⃣ git remote add origin <원격저장소 주소> : git 이 적용된 디렉토리(로컬저장소)와 나의 github의 원격저장소를 연결한다.
3️⃣ git remote add <상대방 닉네임> <상대방 repository 주소> : 어떠한 상대방의 원격저장소와도 추가로 연결이 가능하다.
4️⃣ git remote -v : 현재 로컬저장소와 연결된 모든 원격저장소 목록을 출력한다.
5️⃣ git pull <상대방 닉네임> <브랜치명> : 연결되어 있는 '상대방 닉네임'의 한 '브랜치'를 로컬저장소를 가져오고 자동으로 병합(automerge) 까지 수행한다. 단, 병합 중 충돌(conflict)가 발생할 수 있다. 충돌은 상대방과 내가 동일한 라인을 수정한 것으로 git 에서 충돌을 알려주는 메시지를 띄어준다. 충돌 부분을 해결한 후 진행하여야 한다.
[참고] 연결된 상대방 원격저장소로 push 도 가능하다. 권한 관련한 문제는 있을 수 있다.
'CodeStates_Backend > TIL (Today I Learned)' 카테고리의 다른 글
[TIL #8-2][JAVA] 데이터타입 (0) 2022.05.08 [TIL #8-1][Java] 자바 기초, JVM, JDK, 접근 제어자 etc.. (0) 2022.05.04 [TIL #6] Linux 기초 (0) 2022.05.02 [TIL #5] HTML, CSS 이용한 웹페이지 구현 / 페어 프로그래밍 (2) 2022.05.02 [TIL #4] HTML/CSS Page Layout, 와이어 프레임 (0) 2022.05.01