Git

hee_hee_·2022년 12월 1일
0

딩..딩..

목록 보기
5/15
post-thumbnail

Git을 사용한 버전 관리

git 이란?

1) git 을 사용하는 이유

효율적인 협업과 버전관리가 쉽기 때문.


2) git 의 특징

가지치기가 가능하고 그것을 병합할 수 있음
메인 가지 하나 있고 그 옆으로 다른 기능을 만드는 가지들을 생성하고 병합해 하나의 프로젝트로 만들 수 있음.
각각의 기능을 각각 다른 사람이 개발 가능.

가볍고 빠름

분산 작업 가능

데이터가 보장됨

준비영역 있음.

오픈소스임


3) git 초기 설정

  • 사용자 정보 설정 : 저장소에 코드를 반영할 때 등록될 사용자 정보 설정
git config --global user.name "elice"
git config --global user.email fifi@elice.io
  • 설정 정보 확인 : 설정한 내용 확인
git config --list

=>

user.name=elice
user.email=fifi@elice.io

4) git 저장소 생성

  • git init
    기존의 디렉토리를 git repository로 설정함. 사용할 프로젝트로 이동 후 실행할것.
    ls 를 통해 프로젝트 디렉토리에 .git 디렉토리가 생성되며 저장소 생성 완료된 것을 확인해볼 수 있음.




git 시작하기

1) git 파일 생성

git init을 통해 저장소를 만든 후 파일 수정을 하게 되면 git add 를 통해 staging area 로 이동시킴.

한가지면 git add파일이름 여러가지라면 git add .를 통해 전부 staging area로 이동시킬 수 있음.

이후 git status 명령어로 어떤 파일이 변경되었는지 파일 상태 확인 가능


2) git 저장소 반영

수정한 파일을 staging 했으면 저장소에 메세지와 함께 저장하면 됨.

저장할 땐 git commit 명령어를 사용.

staging에 있는 모든 파일을 저장소에 저장하는 것.

git commit -m '변경사항에 대한 내용 등 정보 메세지 입력하셈'

이때 적은 메세지에 오타가 있거나 누락된 파일이 있는 경우 git commit --amend 명령어로 수정할 수 있음.
실행하면 텍스트 편집기 실행되고 수정부분 수정 후 저장하면 반영된다.

반영된 내용이 궁금하면 git log를 통해 확인 가능하고 모든 commit 을 확인해 볼 수 있음.


3) git 관리 상태 확인

  • git status : staging file 들의 상태 확인

    git diff 로 commit 된 파일 중 변경된 사항을 비교할 수 있음

  • git log : git repository 에 존재하는 history 확인 (commit history)

대표적인 log 옵션

  1. git log -p -n
    => -p , --patch : 각 commit의 수정 결과를 보여주는 diff 와 같은 역할 수행
    => -n : 상위 n 개의 commit 보여줌
  2. git log --stat
    => 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
  3. git log --pretty=oneline
    => 각 commit을 한 줄로 출력
  4. git log --graph
    => commit 간의 연결된 관계를 아스키그래프로 출력
  5. git log -S text
    => -S : 코드에서 추가되거나 제거된 내용 중 특정 텍스트가 포함되었는지 검사.



Git 가지 치기

1) git branch

branch 는 독립적으로 어떤 작업을 진행하기 위한 개념
각각의 branch 는 다른 branch 의 영향을 받지 않는다.

  • 메인 브랜치 : 배보할 수 있는 수준의 안정적인 브랜치
  • 토픽 브랜치 : 기능 추가나 버그 수정과 같은 단위 작업을 위한 브랜치
  • 브랜치 생성

    	```
    	git branch 브랜치 이름
    	```
    
    	을 입력하면 브랜치를 생성할 수 있음
  • 브랜치 전환

    git branch
       elice
     * master

    명령어를 통해 현재 브랜치를 확인할 수 있음
    현재 master 브랜치에서 elice로 전환하고 싶으면

    git checkout elice

    를 통해 전환 가능

    checkout은 브랜치 전환하는데 사용할 수 있고 git log로 확인 가능한 snapshot을 넘나들때도 사용 가능

    git checkout <snapshot hash>

    를 이용하면 과거의 파일 내용 확인 가능


2) Merge

elice 브랜치에서 작업을 끝마치고 master 브랜치로 통합
우선 git checkout을 통해 master로 이동해서
git merge elice 로 병합을 해준다.
이때 elice브랜치 내용이 master 브랜치에서 업데이트 된 내용이기 때문에 곧바로 merge가 되는데 이것을 fast-forward라고 함,

  • 갈라지는 브랜치
    각각의 브랜치의 working directory에서 같은 파일의 내용을 다르게 수정할 수 있다.
    브랜치는 다른 브랜치의 영향을 받지 않아서, 작업 동시 진행이 가능하다.
    갈라진 브랜치는
git log --graph --all

을 통해 확인이 가능하다.
이렇게 갈라진 브랜치는 git checkout을 통해 브랜치 이동해 git merge로 병합 가능하다.
또한 git branch --merge 를 통해 merge된 브랜치를 확인 가능하다.

사용을 마친 브랜치는

git branch -d <브랜치 이름>

을 통해 삭제할 수 있다.


4) conflict 해결

conflict는 merge한 두 브랜치에서 같은 파일을 변경했을 때 발생한다.

이때 git status를 통해 어느 파일이 충돌났는지 확인할 수 있다.

충돌이 일어난 파일을 열어 수정해준 후 >>>>>>> ======== <<<<<<<가 포함된 행을 삭제해준다.

수정 후 git add git commit 과정을 거쳐 다시 merge 해준다.

충돌을 방지하려면 master 브랜치의 변화를 지속적으로 가져와서 충돌 발생 부분을 제거하는 것이다.




Git 원격 저장소

1) 원격 저장소 받아오기

  • 원격 저장소 : 인터넷이나 네트워크 어딘가에 있는 저장소 (github)

git clone 을 이용하면 기존의 git repository를 복사해올 수 있다.
Gitlab 또는 github에서 원하는 프로젝트의 clone 버튼을 누른 후 Clone with HTTPS 옵션으로 복사를 한다.
터미널에서 git clone 복사한 저장소 주소 를 입력한다.
git remote add origin 복사한 저장소 주소 를 입력한다.
연결된 원격 저장소는 git remote를 통해 확인할 수 있다.
저장소의 이름을 변경하려면 git remote rename origin 변경할 이름 하면 변경 가능하다.
주소가 변경되거나 필요 없어진 저장소는 git remote rm git_test를 통해 삭제 가능하다.


2) 원격 저장소 동기화

  • pull : 원격 저장소에서 데이터 가져오기 + 병합(merge)

    원격 저장소에서 데이터를 가져와 로컬 데이터와 병합한다.

    git pull
  • fetch : 원격 저장소에서 데이터 가져오기

    원격 저장소에서 데이터를 가져오지만 병합하지는 않는다.
    진행중인 작업을 마무리하고 병합해줘야 한다.

    git fetch

    이후 git log 를 통해 변경된 파일을 확인하고 merge 해준다.

  • 저장소 발행 : 로컬 저장소에서 작업한 내용 원격 저장소에 반영.
    다른사람이 먼저 push 한 상태에서는 push 할 수 없으니 다른사람이 작업한 것을 Merge 한 후 push 해야 됨.

요약 )

  1. git remote add origin (또는 다른 원격 저장소 이름)으로 로컬 저장소와 연결
  2. git fetch 또는 git pull 을 이용해 원격 저장소 내용 동기화
  3. fetch 실행한 경우 git merge origin/master 로 병합을 완료해준다.
  4. git push origin master를 이용해 변경 사항 원격 저장소에 전달.

3)origin

  • origin

    내 컴퓨터 (로컬) 에 저장되어 있는 저장소와 원격 저장소를 연결하기 위해

    git remote add origin 원격저장소 주소 명령 사용.

    이 때 원격저장소 단축이름을 origin으로 지정한다는 의미.
    단축이름을 꼭 origin 이 아닌 다른 이름으로 지정 가능.

    기본적으로 만들어진 원격저장소의 이름은 origin이 default값이라 clone으로 복사해온 저장소는 origin으로 통일된다.

    git remote 에 -v 옵션을 사용한 git remote -v 를 이용하면 지정한 저장소의 이름과 주소를 함께 볼 수 있다.




Git HEAD pointer

파일을 staging 시키고 commit 하고 git repository에 저장 후 git이 commit 된 버전을 효율적으로 관리하기 위한 방법

파일 영역의 라이프 사이클을 보면
working directory에 있는 파일을 git add 하면 staging area 이동하고 이것을 commit 하면 repository로 간다.

git의 영역은 HEAD, index, working directory로 이루어져있다.
wofrking directory 의 파일이 git add로 stage 되면 git에서 index가 되었다가 commit이 되면 HEAD가 되는 것.

  • snapshot
    staging 되어진 데이터들 (index)을 commit 명령으로 영구 저장한 것을 말한다.
    HEAD 역시 snapshot이며 현재 우리가 위치한 브랜치를 가리키는 포인터 역할도 같이 하게 된다.

    git reset --<option> HEAD~

    를 이용하면 HEAD 를 전의 snapshot으로 이동시킬 수 있다.

    git reset --soft HEAD~

    를 이용하면 예전버전으로 돌아가 commit을 수정할 수 있다.

    git reset --hard HEAD~

    를 이용하면 working directory에 존재하는 파일도 사라진다.

profile
딩코딩코딩

0개의 댓글