1장. Git 이란?
- git = 효율적인 협업을 위해 사용
- git은 각각의 파일을 스냅샷 형태로 저장함.
* Git의 특징
- 가지치기와 병합 - 여러가지의 작업을 섞이지 않게 독립적으로 진행할 수 있음
- 가볍고 빠르다 - git은 모든 작업이 로컬에서 진행된다. subversion(SVN)과의 차이점 (SVN = 항상 네트워크가 필요(코드가 서버에 올라가있고, 사용자들이 접속해서 열람함) / git = 코드를 공유할 때만 네트워크에 접속(사용자들이 각자 모든 코드를 가지고 있음))
- 분산작업에 매우 효율적
- 데이터 보장 - 모든 파일은 체크섬이라는 검사를 거침(체크섬 = 16진수 문자열(=commit id)로 이루어짐 -> commit id가 같다? = 파일 or 구성이 완벽히 같다는 것 => 누가 어떤 파일을 작업했는지 기록이 남아서 버전관리에 편리)
- 오픈소스
- 준비영역을 가지고 있다(staging area)

* git 호스팅 서비스 (원격저장소) 3가지
- Github
- Bitbucket
- Gitlab
** Git 설치
1. Git 설치 여부 확인
- Linux 또는 macOS 환경에서는 대부분 이미 Git이 설치되어 있습니다.
- 다음 이미지를 참고하여 Terminal 실행 후 git 명령어를 실행해 보세요(설치확인)
- windows 환경에서는 다음 단계로 넘어가주세요
- terminal 실행, git 입력 후 엔터

이미지와 같이 실행되지 않는다면(오류 메시지가 뜬다면) git을 설치해 주세요
2. Git 설치
- 아래의 사이트 접속 후 본인에게 맞는 설치파일 다운로드
- https://git-scm.com/downloads
- 다운로드 된 설치파일 실행
3. Git 실행
- Linux 또는 macOS = Terminal 실행
- windows = 시작메뉴 -> Git -> Git Bash 실행
4. Git 설치 확인
- 명령어를 입력하여 Git 버전을 확인해보기
- $ git --version
** Git 초기 설정(설치 후 초기설정하는 단계도 필요하다)
1. 사용자 정보 설정
- 저장소에 코드를 반영할 때 등록될 사용자 정보를 설정합니다
- $ git config --global user.name "elice"
- $ git config --global user.email gitaccount@elice.com
- 프로젝트 마다 다른 사용자 정보를 저장하고 싶으면 저장소 생성 후 --global 옵션을 빼고 실행해 주세요!
- $ git config user.name "elice"
- $ git config user.email gitaccount@elice.com
2. 설정 정보 확인
- 아래의 명령을 실행하여 앞에서 설정한 내용을 확인해보세요
- $ git config --list
- ☆ git 저장소가 시작되지 않은 상태에서는 유저 설정시에 반드시 --global을 입력해야 합니다 => 하지 않고 바로 " git config user.name " 으로 명령하면 " fatal: not in a git directory " 으로 에러 메시지가 뜸
** Git 저장소 생성
- git init = 기존의 디렉토리를 git repository로 설정
- 기존 디렉터리 사용 - git을 사용할 프로젝트 폴더로 이동 후 아래의 명령어를 실행해주세요 => $ git init => 그럼 레파지토리가 초기화 되었다는 메시지가 뜸(Initialized empty Git repository ~ ) => 프로젝트 디렉토리에 .git 디렉토리가 생성되며 저장소 생성 완료.
** ls -al
- 안에 들어있는 모든 파일 출력해서 git 파일(git init을 하면 자동으로 생긴다)이 들어있는지 확인하기
- ls -a => ' . ' 으로 시작하는 파일이나 디렉토리는 숨김처리되어서 일반적으로는 볼 수 없지만, ls -a 라는 명령어를 사용해서 숨겨진 내용까지 모두 확인 가능(git init 하면 .git 이라는 디렉토리(폴더)가 새로 생성됨)
- ls -al 과 ls -a 의 차이점 : https://dasima.xyz/%EB%A6%AC%EB%88%85%EC%8A%A4-ls-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%98%88%EC%8B%9C/
* 여러개의 git 저장소 생성하기
- 현재 어떤 파일이 있나 확인 " ls " - 참고 : ls 와 ls -a 의 차이 및 리눅스 명령어들 https://coding-factory.tistory.com/748
- " git init project1 " - project1 이라는 이름의 저장소 생성
- " cd mydir " - mydir 라는 저장소로 이동
- " git init hello " - 이동한 곳에 hello 라는 저장소를 만듦
- " cd world " - mydir 의 world 라는 저장소로 이동해서
- " git init world " - world 라는 이름의 저장소 생성
2장. Git 시작하기
1. Git 파일 생성
*** Git의 파일 영역의 라이프 사이클

- working directory = 우리가 알고있는 일반적인 directory
- staging area = 준비영역
- repository = 최종적으로 등록
** 파일의 상태 라이프 사이클

- untracked = 파일이 working directory 에 있을 때
- modified = 뭔가 수정이 되었을 때
- staged = untracked, unmodified, modified 에서 파일을 git add로 추가했을 때
- unmodified = staged 에서 파일을 commit 하면 unmodified 로 이동
- unmodified 에서 파일을 지우면 untracked 됨
- unmodified 에서 파일을 수정하면 modified 됨
* 새로운 파일 생성
- 먼저, 새로 생성된 파일인 comment.js 파일을 준비영역(staging area)으로 보내야 합니다. -> git add 명령어를 사용합니다.
- git add comment.js
- 한번에 추가할 파일이 너무 많다면 현재 폴더를 대상으로 지정할 수도 있습니다
- git add .
* staging 상태 확인
- git status 명령어로 staging area의 어떤 파일이 변경되었는지 등 파일의 상태를 확인 할 수 있습니다
- git status
2. Git 저장소 반영
- comment.js 파일 작업을 staging 하였으므로 이제 무엇을 수정하고 추가했는지 메시지를 남겨 저장소에 저장하는 작업을 진행합니다
- git commit = .git 저장소 내에 staging 파일 저장
- 저장소 반영 - 준비 영역에 있는 파일들을 저장소에 반영하겠습니다. 생략 가능하지만 반영한 내용을 추후에 쉽게 알 수 있도록 적절한 메시지를 넣어주세요
- git commit -m "initial commit"
- 위처럼 git commit에 옵션 m을 이용하여 즉시 메시지를 작성할 수 있습니다.(협업에 도움)
** 저장소 반영 내용 변경
- 앞에서 적은 메시지에 오타가 있거나 누락된 파일이 있을 경우
- git commit --amend
- amend 옵션을 활용하여 commit을 수정할 수 있음
- git commit --amend를 사용하면 텍스트편집기가 실행되고, 수정하고 싶은 부분을 수정 후 저장하면 그대로 반영됩니다
** 저장소 반영 내역
- 저장소 반영 내역이 궁금하다면 = git log 로 확인 가능
- git log 를 사용하여 모든 commit 을 확인할 수 있습니다
- commit sadhjhsdu89281093eoisdjl(뭐라뭐라 적혀있음) - 커밋 아이디(각자의 커밋이 고유하게 갖고있는 하나의 값)
- log 공백 사이에 적혀있는 메시지 = 커밋 메시지(어떤 내용을 커밋했는지 알 수 있다)
* Git history
* Git 관리 상태 확인
- 파일 상태 확인 => git status / git log = 파일들의 상태와 history를 볼 수 있다
- git status = staging file(준비영역에 있는 파일들)들의 상태 확인
- git log = (commit history 확인) git repository에 존재하는 history 확인
- git diff = commit 된 파일 중 변경된 사항을 비교할 때
- Git history(이건 명령어 아님) = 스냅샷의 형태로 파일들을 갖고있고, 백업본이 있거나 다른 버전으로 돌아가고 싶으면 git history를 이용해 해당 파일을 불러올 수 있다
- ** log 명령어 = 저장소 반영 내역을 확인하기 위해 우리는 log 명령어를 사용해 왔다(사용하면 이때까지 commit 했던 모든 내용들이 나오므로)
- 대표적인 log 옵션들
- git log -p / git log --patch = 각 commit의 수정 결과를 보여주는 diff와 같은 역할을 수행한다
- git log -n = 상위 n개의 commit만 보여준다
- git log --stat = 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
- git log --pretty=oneline = 각 commit을 한 줄로 출력
- git log --graph = commit 간의 연결된 관계를 아스키그래프로 출력한다(branch가 나오면 유용히 사용가능)
- git log -S function_name = 코드에서 추가되거나 제거된 내용 중 특정 텍스트(여기서는 function_name)가 포함되어 있는지 검사
* 커밋 메시지 수정하기
- 순서 = git log - git commit --amend -m " ~ " - git log
- 명령어(amend) 뒤에 -m "수정한 커밋 메시지" 라고 작성하면 에디터를 켜지 않고 바로 수정이 가능함
- git에서 사용 가능한 editor는 vim, nano, emacs 등등 여러가지가 있다. 엘리스 실습에선 nano를 이용하여 commit 메시지를 수정하는 에디터로써 사용하고 있다.(+ nano의 내용 저장방법 = Ctrl + X + Y + Enter)
3장. Git 가지치기
** Git Branch
- 독립적으로 어떤 작업을 진행하기 위한 개념
- 각각의 Branch는 다른 Branch의 영향을 받지 않음(독립적)
** Git Branch 종류
- 메인 Branch = 배포할 수 있는 수준의 안정적인 Branch
- 토픽 Branch = 기능추가나 버그수정과 같은 단위작업을 위한 Branch (수시로 생기고 없어짐)
** Git Branch 생성
- git branch <브랜치 이름>
- master branch = 최초로 갖고있는 기본값 브랜치
** Git Branch 전환 (1)
- 현재의 Branch는 아래의 명령어를 통해 확인 가능
- git branch
** Git Branch 전환 (2)
- Branch 전환은 아래의 명령어를 통해 할 수 있다
- git checkout like_feature
- checkout을 하게 되면 master에서 like_feature로 HEAD 포인트가 이동하게 됨 (HEAD가 가리키고 있는 곳이 현재 branch이다.)
** Git Navigation
- checkout은 branch를 전환하는데 사용할 수도 있고 아래와 같이 git log로 확인한 snapahot을 넘나들때도 사용이 가능하다
- git checkout <snapshot hash> - 16진수로 이루어진 hash를 적어주면 이동할 수 있다 (ex> git checkout d97d38)
- 이렇게 snapshot의 hash값을 이용하여 과거의 파일 내용을 확인할 수 있다
** fast-forward 방식의 병합
* Git merge
- 먼저 master branch로 이동하여 (git checkout master) like_feature branch를 병합함 (git merge like_feature)
- 그러면 like_feature branch의 내용이 master branch에서 업데이트 된 내용이기 때문에 곧바로 merge가 되는 것을 확인할 수 있다. 이렇게 merge가 이루어지는 것을 fast-forward 라고 부른다.
- (요약 - master branch에서 다른 변경된 내용 없이 새로운 사항만 추가된다면 fast-forward)
** 갈라지는 branch
- 각각의 branch는 다른 branch의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있다
- git log --graph --all 을 사용하면 commit graph를 확인할 수 있다
○ | | / ○ |
○\ | ○ ○ | | / ○ |
merge 하기 전(열림) | merge 하고 난 후(닫힘) |
** Git branch 삭제
- 보통 토픽 Branch는 사용을 마치면 삭제해주는 것이 일반적
- 사용을 마친 branch는 git branch -d <branch name> 을 이용하여 삭제할 수 있다
** conflict 해결
- Git Merge conflict
- 충돌이 발생하는 이유 = merge한 두 branch에서 같은 파일을 변경했을 때 충돌이 발생
- 예시 : like_feature와 HEAD->master가 같은 파일을 동시에 건드리면 git에서는 master의 파일을 쓸지 like_feature의 파일을 쓸지 고민이 되고있는 것 => 이에 conflict 알림을 통해 사용자에게 어떤 내용으로 확정할지 정해달라 요청하는 것이다.
- git status 명령어로 어느 파일에서 충돌이 발생했는지 확인이 가능하다( both modified : comment.js <- 이런 형식으로 뜬다)
** Git merge 충돌 해결
- conflict 수정 완료 후 git add, git commit 과정을 거쳐 다시 merge 해줘야 함
** Git merge 충돌 방지
- master branch의 변화를 지속적으로 가져와서 충돌이 발생할 부분을 제거
4장. Git 원격저장소
* 원격저장소 = 인터넷이나 네트워크 어딘가에 있는 저장소
* Git 원격저장소 받아오기(url)
+ git clone = 기존의 git repository(원격으로 존재)를 복사
- gitlab or github 의 원하는 프로젝트에서 clone 버튼을 누릅니다
- SSH / HTTPS 두 가지 옵션 중에 clone with HTTPS 옵셥으로 클론을 합니다
- git clone 뒤에 clone 버튼으로 확인한 원격저장소의 주소를 넣어줍니다 git clone <주소>
** 원격저장소 추가
- git remote add origin <주소>
- 명령어로 원격 저장소를 연결할 수 있다
- git remote add origin https://github.com/group/project
- 저장소 주소의 구성 : github.com = 웹 호스트 서비스 / group = 그룹명 / project = 프로젝트명
- git remote = 연결된 원격 저장소를 확인 가능
- git remote show origin = 원격 저장소를 한눈에 볼 수 있다
** 원격저장소 이름 변경
- git remote rm git_test
** 복사한 주소를 터미널에 붙여넣기 할 때 단축키
- Shift + Ctrl + V
** 원격저장소 동기화
* 저장소 갱신
- pull = 원격저장소에서 데이터 가져오기 + 병합(merge)
- fetch = 원격저장소에서 데이터 가져오기
- 저장소 갱신 - pull = 원격저장소에서 데이터를 가져와 로컬 데이터와 병합합니다 (과정 : git pull -> git log --all -> commit f7b775d (HEAD -> master(로컬저장소의 master 브랜치) , origin/master(원격저장소의 origin master 브랜치) - 쉼표로 동시에 가리킴(병합)))
- 저장소 갱신 - fetch = git log 명령어로 변경된 파일을 확인하고 따로 merge 해주기
** 저장소 발행
- 로컬저장소에서 작업한 내용을 원격 저장소에 반영합니다. 다른 사람이 먼저 push 한 상태에서는 push 할 수 없음!! 다른 사람이 작업한 것을 merge 부터 해주기!
* 요약
- git remote add origin(또는 다른 원격저장소 이름) <원격저장소의 주소> 으로 로컬 저장소와 연결합니다.
- git fetch 또는 git pull을 이용하여 원격저장소의 내용을 동기화합니다.
- fetch를 실행한 경우 git merge origin/master로 병합을 완료해줍니다
- git push origin master를 이용하여 변경된 사항을 원격 저장소에 전달해줍니다.
** Origin 이란?
* origin/master
- git remote add origin <원격저장소의 주소> = git remote를 origin이라는 이름으로 add 해주겠다는 의미 = 원격저장소의 단축이름을 origin 으로 지정한다는 의미!
- origin이 아닌 다른 이름으로 원격저장소의 이름을 지정해줄 수 있다 ( ex> git remote add myproject <원격저장소의 주소> => git remote를 myproject라는 이름으로 add 해주겠다는 의미 )
- 기본적으로 만들어진 원격저장소의 이름은 origin이 default값이다. 때문에 clone으로 복사해온 저장소의 이름은 origin으로 통일되게 된다.
- -v 옵션을 사용하면 지정한 저장소의 이름 / 주소를 함께 볼 수 있습니다 => git remote -v
'TIL > 엘리스 SW 엔지니어 트랙 2기' 카테고리의 다른 글
[2주차] 20220413 엘리스 TIL (JavaScript) (0) | 2022.06.30 |
---|---|
[2주차] 20220411 엘리스 TIL (JavaScript) (0) | 2022.04.15 |
[1주차] 20220407 엘리스 TIL (CSS 애니메이션, 반응형 웹) (0) | 2022.04.08 |
[1주차] 20220406 엘리스 TIL (HTML, CSS) (0) | 2022.04.07 |
[1주차] 20220405 엘리스 TIL (HTML, CSS) (0) | 2022.04.06 |
댓글