728x90
📍 10.30.토. 5일차(온라인 강의)
오늘은 Git
사용법에 대해서 배웠다. 평소에 CLI
환경 대신 Github-desktop
을 사용했는데, CLI
명령어를 하나부터 열까지 배울 수 있어서 좋았다. 기록해놨다가 나중에 현업에서 써먹었으면 좋겠다.
❏ Git의 특징
master
는 독립성을 유지한 채 진행하고 나중에master
에서 주로 배포하게 끔 설정한다.- 다른작업을 독립적으로 진행하고 원하는 시점에
branch
끼리 병합 할 수 있다. - 가볍고 빠르다. (서버와의 통신 없이 로컬에서 진행, 원격 저장소 사용 제외)
- 네트워크:
SVN(SubVersion)
은 항상 네트워크가 필요한 반면,Git
은 다른사람과 코드를 공유할 때만 네트워크가 필요하다. - 분산작업의 효율성: 개발자들은 개발만 하고 통합 관리자는 개발된 코드를 병합하는데 집중한다.
- 데이터 보장: 모든 파일은
checkSum
과정을 거친다. (16진수 문자열로 구성,commit ID
라고도 불린다.)commit ID
가 동일하다는 것은 파일 구성이 완벽히 동일하다. 누가 어떤 파일을 작업했는지 기록 또는hash
값으로 알 수 있다. - 준비 영역(Staging area): 수정한 내용을 실제
repository
에 반영하기 전 검토하는 단계 - 오픈 소스(Open source): 소스코드를 공개한 상태에서 인터넷에서 누구나 프로젝트 발전에 기여할 수 있다.
Git
호스팅 서비스:Github
,Bitbucket
,Gitlab
Git
에서 관리하는 세 영역:작업 영역(Working Directory)
,준비 영역(Staging Area)
,저장소(Repository)
728x90
❏ Git 주요 명령어
git add
: 파일을 준비영역(staging area)로 보내야 한다. 이때git add
명령어를 이용하자. 파일의 현재 상태를 확인하려면git status
명령어를 이용하자.git commit
:comment.js
파일을staging
으로 이동하였으므로 무엇을 수정하고 추가했는지 메시지를 남겨 저장소에 저장하는 작업을 진행한다. 이때commit message
도 추가하고 싶다면 다음의 명령어를 사용하자.git commit -m "message"
git commit --amend
: 앞서 커밋한 메시지에 오타가 있거나 누락된 파일이 있는 경우 저장소 반영 내용 변경git log --pretty=oneline
: 각commit
을 한 줄로 출력git log --graph
:commit
간의 관계를 아스키 그래프로 출력한다. (보통branch
과정에서 많이 사용한다.)git log -S function_name
:-S
코드에서 추가되거나 제거된 내용 중 특정 텍스트(예시는function_name
) 가 포함되어 있는지 검사한다.git status
:git
명령소의 현재 상태를 알 수 있다.untracked
: 코드의 변경 내용을 추적하는 단계가 아니다.staging area
로 보내야 코드의 수정 내용을 추적 가능함.git reset filename
: untracked 상태로 변경
# untracked인 파일 crawling.py와 README.txt 파일 중 crawling.py 파일 만 commit 하고 싶을 때
$ git add crawling.py
$ git commit -m "commit crawling.py"
$ git log --graph
❏ Git branch
- branch: 독립적으로 어떤 작업을 진행하기 위한 개념, 각각의
branch
는 다른branch
에 영향을 받지 않는다. 독립적 기능 단위, 작업 단위로 나눌 수 있다. main branch
: 배포할 수 있는 수준의 안정적인branch
topic branch
: 기능을 추가하거나 버그 수정과 같은 단위 작업을 위한branch
(수시로 내용이 변경될 수 있음)git branch <name>
: branch 생성 명령어git branch
: 현재branch
의 정보를 보여주는 명령어git checkout <name>
:branch
전환 (HEAD
는 현재 가리키고 있는 레포지토리를 말함)checkout
은branch
의 전환 뿐만 아니라git log
로 확인한snapshot
을 넘나들 때도 사용이 가능하다. (git checkout snapshot hash
)
# checkout 전 snapshot hash
$ git log --pretty=oneline
e4abb6f... (HEAD -> master) this is master
d917274... another snapshot
$ git checkout d917274
...
HEAD is now at d917274 another snapshot
# checkout 후 snapshot hash
$ git log --pretty=oneline
e4abb6f... (master) this is master
d917274... (HEAD) another snapshot
- 새로운
branch
를 만들고 해당branch
로 이동하기
# 현재 branch 확인
$ git branch
# "alice" branch 생성
$ git branch alice
# "alice" branch로 이동
$ git checkout alice
fast-forward
방식:foo
branch
의 내용이master
branch
에서 업데이트된 내용이기 때문에 곧바로merge
가 된다. 즉 기존의master
branch
의 내용은 변한 것 없이foo
브랜치의 내용만 합쳐졌기 때문에fast-forward
방식이라고 할 수 있다.- 갈라지는
branch
의merge
는git log --graph -all
을 사용하면commit graph
로 편하게 확인 할 수 있다. git branch -d <branch name>
: branch 삭제 명령어conflict
: 병합하는 두Branch
에서 같은 파일을 변경했을 때 충돌이 발생한다. 이때git status
명령어로 어느 파일에서 충돌이 발생했는지 확인할 수 있다. 수정 완료 후기호(<<<<< =====, >>>>>)
들을 삭제 해준다. 수정 완료 후git add
,git commit
과정을 거쳐서 다시merge
한다. master 브랜치의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거한다. 더 좋은 것은 master 브랜치가 자주 변경되는 일이 없도록 하는 것
❏ 원격 저장소
- 원격 저장소: 인터넷이나 네트워크 어딘가에 있는 저장소
Git
원격 저장소 받아오기:Git clone url
(기존 repository를 복사),clone
버튼을 누르고CLI
창에$ git clone url
을 입력한다.- 원격 저장소와 로컬저장소 연결하기:
$ git remote add origin https://gitlab.com/group/project
(웹 호스트 서비스: gitlab.com, 그룹 명 group, 프로젝트 명 project) 이후 git remote로 연결된 저장소가 무엇인지 볼 수 있음git remote show origin
을 통해 어떤 원격 저장소가 있는지도 확인 가능 - 원격 저장소 동기화
$ git pull: 원격 저장소에서 데이터 가져오기 + 나의 로컬 레포지터리와 병합(Merge)한다. (따로 merge하지 않아도 적용됨.)
$ git Fetch: 원격 저장소에서 데이터 가져오기 (별개로 merge 단계를 거쳐야 한다.)
- origin/master: 내 컴퓨터에 저장되어 있는 저장소와 원격 저장소를 연결하기 위해서 다음의 명령어를 사용한다. git remote add origin https://~ 여기서 origin은 원격 저장소의 단축 이름을 origin으로 지정한다는 의미다. origin이 아닌 다른 이름으로도 원격 저장소의 이름을 지정해 줄 수도 있다. (git remote add foo https://~) 원격 저장소의 이름의 default 값은 origin 이다. 따라서 clone 으로 복사해온 저장소의 이름은 origin 으로 통일하게 된다. git remote -v 명령어를 사용하면 지정한 저장소의 이름과 주소를 함께 볼 수 있다.
반응형
'Frontend > 엘리스 SW 엔지니어 트랙' 카테고리의 다른 글
[ 엘리스 SW 엔지니어 트랙 ] 7일차 (0) | 2021.11.03 |
---|---|
[ 엘리스 SW 엔지니어 트랙 ] 6일차 (2주차: 자바스크립트 I - 연산자, 기초 개념) (0) | 2021.11.02 |
[ 엘리스 SW 엔지니어 트랙 ] 4일차 (0) | 2021.10.29 |
[ 엘리스 SW 엔지니어 트랙 ] 3일차 (0) | 2021.10.28 |
[ 엘리스 SW 엔지니어 트랙 ] 2일차 (0) | 2021.10.27 |
댓글