모스카토

Git 본문

엘리스 ai트랙

Git

라리라밤 2022. 1. 15. 11:20

1. git 이란?

git은 여러 사람이 각자 컴퓨터로 작업한 내용을 작업한 내용을 커밋으로 만들어 저장하고 협업 할수 있게 한다. 오픈소스이다.

1. git 을 사용하는 이유

효율적인 협업이 가능하다 : 여러사람이 같은 파일을 수정할 경우, 버전이 달라지고 이를 통합하기가 힘들다. 

버전관리가 쉽다 : 여러 버전을 동시에 관리할 수 있고, git 은 버전들을 스냅샷형태로 저장하여 여러 버전으로 이동하기 쉽다.

2. git의 특징

1. 가지치기와 병합

여러 작업을 동시에 할 때 섞이지 않게 독립적으로 개발가능

개발, 테스트 진행 후 뻗어나온 가지를 병합가능

2. 가볍고 빠르다

코드를 공유할 때만 중앙서버에 접속하면 되고 코드는 각 사용자의 로컬에 존재한다.

3. 분산작업에 효율적이다.

프로젝트를 복사하여 각자 작업할 수 있다.

소스코드를 관리할 통합관리자를 둘 수 있다.

4. 데이터 보장

체크성 : 16진수 문자열로 이루어진 commit id를 검사함

체크성이 같으면 파일구성이 완벽히 같다는 것이다.

누가 어느파일을 관리했는지 기록이 남는다.

5. 준비영역 staging area

git add로 수정한 내용을 저장소에 반영하기전 검토단계를 거칠 수 있다.

6. git은 오픈소스다.

소스코드를 공개하고 있어서 계속해서 발전하고 있다.

3. git 설치, 초기설정

* 리눅스, 맥os 환경에서는 대부분 git이 이미 설치되어 있다.

1. 터미널에서

$ git

을 쳐보면 명령어들이 출력되면 이미 설치된것.

2. git 설치 확인

$ git --version

3. git 초기 설정

(1) 저장소에 코드를 반영할 때 통용적으로 등록될 사용자 정보

$ git config --global user.name "{{사용자 아이디}}"

$ git config --global user.email "{{사용자 이메일}}"

(2) 프로젝트마다 사용자 정보를 다르게 사용할 경우

$ git config user.name "{{사용자 아이디}}"

$ git config user.email "{{사용자 이메일}}"

git 저장소가 시작되지 않은 상태에서는 유저 설정 시에 반드시 --global을 입력해야합니다.

(3) git 설정파일에 저장된 내용 확인

$ git config --list

 

4. git 저장소 생성

1. git 시작하기

$ git init   ## 현재 디렉토리를 git repository로 설정하기

$ git init 프로젝트이름   ## 프로젝트이름으로 폴더가 생기고 그 폴더가 git repository로 설정됨.

$ ls -a   ## 숨겨진 파일까지 목록 확인하기

$ git init 디렉토리 경로 .   ## 저장소를 만들 경로로 이동하지 않고 git repository로 설정하는법

 

Initialized empty Git repository 라고 뜨면서 .git 디렉토리가 생성됨.

 

2. git 시작하기 - git 명령어, 저장소만들기

 

1. git 파일 영역의 라이프사이클

파일 상태의 라이프사이클

 

$ git add 파일명 혹은 .   ##

Untracked (working directory) -> Staged (staging 영역)   // 새로 만든 파일

Modified (working directory) -> Staged (staging 영역)   // commit후 변경한 파일

$ git checkout -- 파일   ## working directory에서 파일의 수정된 부분을 취소함.

$ git commit -m ''   ## Staged (staging 영역) -> repository

준비영역에 있는 파일들을 저장소에 반영하고, 로컬은 Unmodified 상태가 된다.

이미 커밋한 파일을 수정하고 다시 커밋했을 경우 git repository에는 새로운 버전으로 스냅샷형태로 등록된다.

-> commit history를 스냅샷형태로 등록하여 이전 버전으로 돌아가기 쉽다.

$ git commit -m "메세지"   ## 커밋 메세지까지 한번에 쓸 수 있다. 메세지에 나중에 알기 쉽게 간단하게 설명을 쓴다.

$ git commit --amend   ## 메세지 오타나 누락된 파일 등 커밋 수정 => 에디터로 수정

$ git commit --amend -m '수정할 메세지 작성'   ## 에디터없이 바로 수정 가능

$ git reset HEAD 파일명   ## Staged (staging 영역) -> Untracked (working directory)

 

파일을 unstage. commit 취소하기 git add 의 반대상태로 만드는 명령어

 

2. 상태 확인

$ git status

Staging 영역에 있는 파일들의 상태를 확인할 수 있다.

$ git log

commit id, commit 한 날짜, 파일을 누가 작성했는지, 누가 커밋했는지, commit message등 commit 기록을 볼 수 있다.

$ git log -p -n

상위 n개의 commit내용 중 -diff처럼 변한 부분만 보여준다.

$ git log --stat

어떤 파일이 commit 에서 수정되고 변경되었는지 파일 내 라인이 추가되거나 삭제되었는지 확인.

$ git log --pretty=oneline

각 commit 을 한 줄로 표시하는 옵션

$ git log --graph

commit 간 연결된 관계를 아스키 그래프로 출력한다. branch가 있을 때 유용하게 사용.

$ git log --graph --all

$ git log --graph --pretty=oneline --all

commit 간 연결관계 기록을 그래프로 보여준다.

$ git log -S 검색할 텍스트

수정된 코드 중 검색할 텍스트가 포함됐는지 검사

$ git diff

commit한 파일 중 변경된 내용 확인

 

3. git 가지치기 - branch 만들기

* branch 란? : 변경 사항의 스냅샷에 대한 포인터로 독립적으로 작업을 진행하기 위한 개념.

git 은 변경사항을 스냅샷형태로 저장하는데 이 스냅샷에 대한 정보들을 포인터라고 한다.

왜냐하면 정보들을 알아야 원하는 commit을 가리키고 선택할 수 있기 때문이다.

* master branch : 처음 repository를 만들면 자동으로 생기는 branch.

* HEAD -> master

와 같이 HEAD 포인터가 가리키고 있는 것이 현재 branch.

 

1. git branch 명령어

$ git branch

로컬 브랜치 정보

$ git branch -v

로컬 리모트의 정보와 마지막 커밋 내역

$ git branch -a

로컬에 저장된 모든 브랜치 정보

$ git branch -r

리모트에 저장된 브랜치 정보

$ git branch 브랜치명

새로운 브랜치 생성

$ git branch -d 브랜치명

브랜치 삭제

$ git checkout 브랜치명

브랜치명으로 브랜치를 전환하고 해당 파일을 워킹 디렉토리로 복사.

-> HEAD pointer가 가리키는 branch가 변한다.

$ git checkout [commit id / snapshot hash]

snapshot을 전환할 때도 사용 가능하다. 즉, 이전 commit으로 전환할 때.

$ git branch --hard <커밋 해시>

현재 브랜치를 과거의 특정 커밋으로 이동

$ git merge master

현재 checkout된 브랜치를 master브랜치에 병합

 

2. fast forward 방식 merge

$ git log 를 해서 나오는  commit 중 HEAD -> 여러개를 가리키고 있으면 병합된것.

merge 했을 때 master 브랜치에 다른 변경사항 없이 새로운 내용만 추가될 때.

 

3. 그 외의 merge

topic branch등 서로 다른 작업을 하고 merge 할 때.

$ git branch --merged

* test브랜치를 master브랜치에 merge한 후 삭제

$ git checkout test   ## test 브랜치로 이동

$ git merge master   ## master를 merge하여 최신버전을 가져옴

$ merge conflict해결   

$ git checkout master   ## master 브랜치로 이동

$ git merge test   ## master 브랜치에 test 브랜치를 병합

$ git branch -d test   ## test 브랜치를 삭제

4. conflict 해결

merge한 두 branch에서 같은 파일을 변경했을 때 conflict 발생한다.

[ 해결방법 ]

1. $ git status

로 어느 파일에서 충돌이 발생했는지 확인할 수 있다.

2. 충돌이 발생한 파일을 열면 git에서 <<<<<<<, =======, >>>>>>> 등의 기호를 포함시켜 어느부분이 어느 branch의 코드인지 표시해두었다.

여기서 어떤 코드를 사용할 것인지 사용자가 직접 수정한 후, git에서 임의로 포함시킨 기호들을 삭제한다.

3. git add, commit 을 한다.

4. 다시 merge 한다.

 

[3 개의 branch가 충돌났을 때]

git status로 충돌이 난 파일을 확인한다

1번 branch에서 파일을 수정하고 저장, git add, git commit 한다.

2번 branch를 1번 branch에 merge한다.    

2번 branch로 checkout해서 1번 branch를 merge한다.    ## 즉, 충돌이 난 두 branch가 같은 파일을 공유하도록 한다.

master branch로 checkout해서 아무branch를 merge한다.   ## master에 merge.

 

[ 방지방법 ]

1. master branch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거

2. master branch를 자주 변경하지 않는다.

 

4. git 원격 저장소 - 원격 저장소를 연결해 이용하는 방법

1. 원격 저장소 받아오기

1. 원격저장소 : 인터넷이나 네트워크에 있는 저장소 git hosting 서비스

2. 원격 저장소 받아오기

gitlab 이나 github 의 원하는 repository 로 가서 clone버튼을 누른다.

https 나 ssh등 원하는 주소를 복사한다.

$ git clone {{ 위에서 복사해온 주소 }}

원격저장소를 로컬에 복사해옴.

** 명령어를 실행한 폴더 안에 새로운 폴더를 생성함.

-> $ git clone {{ 위에서 복사해온 주소 }} .   ## 현재폴더를 repository로 사용하려면 

$ git remote add origin {{ 위에서 복사해온 주소 }}    ## git remote(git에 있는 원격 저장소)를 origin이란 이름으로 add하겠다.

$ git remote   ## 연결된 원격 저장소 확인하는법

$ git remote -v    ## 지정한 저장소의 이름과 주소 확인하는 법

$ git remote show origin   ## 어떤 원격저장소가 있는지 확인하는법

$ git remote rename origin 변경할이름   ## 원격 저장소 단축이름을 origin에서 변경할이름으로 변경.

$ git remote rm git_test   ## 주소가 변경되었거나 필요없어진 저장소 삭제하기

 

2. 원격 저장소 동기화

1. Pull : 원격저장소에서 데이터 가져오기 + 자동으로 Merge

$ git pull origin master    ## 원격 저장소에서 데이터 가져오기 + 병합

$ git log --all    ## 병합됐는지 확인

** pull 이 되지 않는 경우는 보통 다른 사람의 commit과 내 컴퓨터의 코드가 충돌할 때이다. (주로 하나의 branch에서 작업할 때 ) -> 대신 fetch 를 해야함.

 

2. Fetch : 원격저장소에서 데이터 가져오기, merge는 따로 해줘야 함.

$ git fetch

$ git log origin/master   ## 변경된 파일 확인

$ git merge origin/master   ## master와 origin/master가 서로 병합됨.

3. push : 로컬저장소에서 원격저장소에 데이터 전달하기

$ git push origin master

** 주의 : 다른사람이 먼저 push한 상태라면 먼저 다른사람의 작업을 merge한 후 push 해야한다.

** push 가 되지 않으면 먼저 pull을 해와서 수정된 파일을 확인하여 충돌을 해결하고 add, commit 을 한 후 push를 한다.

 

3. Origin 이란?

 

로컬저장소-원격저장소 연결

원격저장소에서 작업내용 받아오기

원격저장소에 작업내용 반영하기

 

'엘리스 ai트랙' 카테고리의 다른 글

자바스크립트 훑기  (0) 2022.01.19
자바스크립트 기초  (0) 2022.01.18
반응형 웹  (0) 2022.01.13
[css] Transform Transition Animation  (0) 2022.01.13
[mac] SSH로 git 계정 여러개 등록하기  (0) 2022.01.13
Comments