Lumpy Space Princess - Adventure Time
공부/Git, Github

[Git] Git 기초

yaebb_82 2022. 10. 3.

 

 

 

1. Git

Git

: 여러 명이 효율적으로 협업하기 위한 툴

: 오픈 소스로 누구나 사용 가능

: 여러 버전 동시에 관리 가능 (데이터 안전성 보장)

: 다른 백업 파일 필요 없이, 하나의 파일로 관리 가능

 

 

Git 특징

1. 가지치기와 병합

: 여러가지 작업 동시 진행

: 가지치기로 독립적으로 작업 가능

: 각자 개발 및 테스트 진행 후 → 병합으로 main코드에 반영 → main코드에서 배포

 

2. 가볍고 빠르다

: 서버와의 통신 없이 local에서 진행

 

cf.) SVN   vs   Git 차이

- SVN : 중앙 시스템에 여러 개발자가 접속하여 코드 공유

- Git : 다른 사람과 코드 공유할 때만 중앙 서비스에 접속하면 되기 때문에 네트워크 속도와 관련 없이 빠르게 작업 가능

 

3. 분산 작업 효율적

: 사용자들 → 복사된 프로젝트에서 동시 작업 가능 / 모든 코드를 갖고 있음

: 사용자끼리 연결이 단절되어도 작업의 문제 X

: 개발자는 개발에만 집중 / 통합관리자는 코드 병합에만 집중

 

4. 데이터 보장 (무결성 보장)

: 모든 과정 → '체크성' 검사과정을 거친다

: 체크성 = 16진수 문자열 (commit id)

: commit id가 같다는 것 = 파일, 구성이 완벽히 같다

: 기록이 남기 떄문에 버전 관리 편리

 

5. 준비 영역(Staging area) 가짐

: 수정한 내용을 repository에 반영하기 전에 검토

: git add로 올리고 → git commit으로 repository에 저장

 

cf.) Git에서 관리하는 세 영역

출처 : git-scm.com

 

6. 오픈 소스

: 소스코드를 공개한 상태에서 인터넷에서 누구나 프로젝트 발전에 기여할 수 있음

 

 

Git 호스팅 서비스

- Github

- Gitbucket

- GitLab

 

 

Git 설치와 초기 설정

- Git 설치 (mac 기준)

1) Git 설치 여부 확인
: mac은 이미 Git이 설치되어 있음

 

2) Git 설치

: Git 다운로드 홈페이지 - https://git-scm.com/downloads

 

3) Git 실행

: mac은 terminal에서 실행

 

4) Git 설치 확인

$git --version

 

- Git 초기 설정

1) 사용자 정보 설정

$git config --global user.name "사용자이름"
$git config --global user.email "이메일주소"

: 프로젝트마다 다른 사용자 정보를 지정하고 싶으면, 저장소 생성 후 --global 옵션 빼고 실행 (git 저장소가 시작되지 않은 상태에서 유저 설정 시 반드시 --global 입력)

 

2) 설정 정보 확인

$git config --list

 

 

Git 저장소 생성

$git init

: 기존 디렉토리를 git repository로 설정

: 이후 $ls -al 입력하면 모든 파일들을 볼 수 있음 (.git 파일이 생성되었는지 확인)

 

** 정리 **
- $git version : Git 버전 확인
- $git init (만들고 싶은 저장소 이름) : Git 저장소 생성
- $git config --global user.name "사용자이름" : git 관련 작업 기록에 남는 이름 수정
- $git config --global user.email "사용자이메일" : git 관련 작업 기록에 남는 이메일 수정
- $git config --list : git 설정 확인

 

 

 

 

2. Git 시작하기

파일 영역의 라이프 사이클

출처 : git-scm.com

 

- 새로운 파일 생성

: 파일을 '준비영역'으로 보내야 한다

: 한 번에 추가할 파일이 많으면, 현재 폴더를 대상으로 지정할 수 있음

$git add 파일이름.확장자
$git add.

: . 은 현재 working 디렉토리를 의미 (git 명령어 뒤에 . 붙으면 경로 내의 모든 파일을 의미하기도 함)

 

cf.) add시 2개 파일 같이 올릴 때 (띄어쓰기로 구분하여 같이 써준다)

$git add 파일1.확장자 파일2.확장자

 

- Staging 상태 확인

: 파일 상태 확인

$git status

 

 

Git 저장소 반영

- 저장소 반영

: 준비 영역에 있는 파일들을 저장소에 반영 + 메시지

$git commit -m "메시지"

 

- 저장소 반영 내용 변경

: 적은 메시지에 오타가 있거나, 누락된 파일이 있을 경우

$git commit --amend

: amend를 작성하면 텍스트 편집기가 실행 → 수정하고 싶은 부분 수정 후 저장 → 반영

: $git commit --amend -m "수정할 커밋 메시지" 로 바로 입력 가능

 

- 저장소 반영 내역

: 저장소 반영 내역이 궁금할 경우

$git log

: 모든 commit 확인 가능

: 각각의 commit이 갖고 있는 commit id, commit 메시지도 확인 가능

 

- Git history

: commit 된 내용 (commit size, tree, parent, author, commiter, initial commit(메시지)) 확인 가능

 

 

Git 관리 상태 확인

$git status
$git log
  • $git status : Staging file 들의 상태 확인 (준비상태 파일 확인)
  • $git log : .git repository에 존재하는 history 확인 (commit history 확인)

 

- Status

: commit된 파일 중 변경된 사항 비교할 때

$git diff

 

- log

: 저장소 반영 내역을 확인할 때

$git log -p -2

$git log --stat

$git log --pretty=online

$git log --graph

$git log -s "특정텍스트"
  • $git log -p -n : -p = diff와 같은 역할 수행 / -n : 상위 n개의 commit만 보여줌
  • $git log --stat : 어떤 파일이 commit에서 수정되고 변경되었는지 확인
  • $git log --pretty=online : 각 commit을 한 줄로 출력
  • $git log --graph : commit 간의 연결된 관계를 아스키 그래프로 출력
  • $git log -s "특정텍스트" : 특정 텍스트가 코드에서 추가되거나 제거된 내용 중 특정 테스트가 포함되어 있는지 검사

 

cf.) staging된 파일 취소

$git reset (브랜치)파일이름.확장자

 

 

 

3. Git 가지치기 (Branch)

Git Branch

: 독립적으로 어떤 작업을 진행하기 위한 개념

: 각각 branch 다른 branch 영향을 받지 않는다.

출처 : git-scm.com

[기본] master branch (배포, 최초로 갖는 기본값 branch) = 배포할 수 있는 안정적인 branch

[개발] develop branch (배포할 때가 올 때마다 master branch에 병합)

[기능별로 개발] topic branch (기능 완성될 때마다 develop branch 병합) = 기능 추가 및 버그 수정같은 단위 작업을 위한 branch

 

$git branch 브랜치이름
$git branch
$git checkout 전환할브랜치이름
  • $git branch 브랜치이름 : 브랜치 생성
  • $git branch : 현재 브랜치 확인
  • $git checkout 전환할브랜치 이름 : 브랜치 전환

(checkout 하게 되면 HEAD 포인터가 이동하게 된다 / HEAD 가리키는 것이 현재 브랜치)

 

cf.) $git checkout 16진수로 이루어진 snapshot의 hash : snapshot의 hash값을 이용하여 과거의 파일 내용을 확인할 수 있다.

 

 

Git Merge

branch가 master와 bugfix 이렇게 2개 존재 / bugfix 브랜치로 작업을 한 상태일 때, 작업한 내용을 master 브랜치에 병합을 하고 싶은 상태 라면,

$git checkout master
$git merge bugfix

 

cf.) merge된 branch 확인하는 방법

$git branch --merged

 

 

fast-forward

출처: https://backlog.com/git-tutorial/kr/stepup/stepup1_4.html

 

 

 

Git Branch 삭제

: 일반적으로 topic 브랜치는 기능 개발이 완료되면 삭제되는 것이 대부분

$git brahcn -d 브랜치이름

 

 

Merge Conflict

: merge한 두 branch에서 같은 파일을 변경했을 때 충돌 발생

 

-충돌 확인하는 방법

$git status

: 위의 명령어로 확인했을 때, both modified: 파일이름 과 같이 결과가 나타나고, conflict가 어디서 발생했는지 확인할 수 있음

 

- 충돌 해결 방법

: 수정 완료 후 <<<<, ====, >>>> 와 같은 기호들은 제거

: 수정 완료 git add, git commit 과정을 통해 다시 merge

 

- 충돌 방지하는 방법

: master 브랜치의 변화를 지속적으로 가져와서 충돌 발생 부분을 제거

: 가장 좋은 방법은 master 브랜치가 빈번하게 변경되는 일이 없도록 하는

 

cf.) 여러 개의 브랜치를 나누고 각자 브랜치에서 작업한 후 → 웹호스팅 서비스에 존재하는 merge request로 하나씩 합쳐가는 방식

: 충돌이 일어나는 것을 막을 수 있고, 매번 새롭게 merge해야하는 수고 줄어든다

 

 

 

4. Git 원격 저장소

원격 저장소 받아오기

: github이나 gitlab에 가면 clone 버튼이 있음 (Clone with SSH / Clone with HTTPS)

: Clone with HTTPS를 선택하여 주소 복사 → clone진행 → 원격 저장소 사본 생성 완료

$git clone 복사한주소

cf.) 원격 저장소 : 인터넷이나 네트워크에 있는 저장소 ex) github, gitlab … 호스팅 서비스

 

 

원격 저장소 추가하기

$git remote add 원격저장소단축이름 복사한주소

$git remote
$git remote show origin
$git remote rename origin git_test
$git remote rm git_test

: 저장소 주소 구조 = https://웹호스트서비스(github, gitlab...)/그룹명/프로젝트

 

  • $git remote add 원격저장소단축이름 복사한주소 : git remote를 원격저장소단축이름으로 add해주겠다는 의미
  • $git remote : 연결된 원격 저장소 확인 (쳤는데 아무것도 나오지 않으면 연결되지 않은 상태)
  • $git remote show origin : 원격저장소 한눈에 보기
  • $git remote rename origin git_test : 원격저장소 단축이름 변경
  • $git remote rm git_test : 필요없어진 저장소 삭제

 

 

원격 저장소 동기화 (갱신)

: 원격 저장소 → 로컬 저장소

$git fetch 원격저장소이름
$git pull

: fetch → 원격 저장소에서 데이터 가져오기 / 병합X

: 원격 저장소에 있는 변경사항을 로컬 저장소에 가져오기 전에, 변경내용 확인하고 싶을 때 사용

 

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

: 원격 저장소에 있는 변경사항을 로컬 저장소에 가져와 합칠 때 사용

 

 

저장소 발행

: 로컬 저장소 → 원격 저장소

$git push origin master

: 원격 저장소로 데이터 이동시킬 수 있음

: 다른 사람이 먼저 push를 하게 되면, push를 할 수 없음

: 때문에 먼저 merge를 하고 push를 해야 한다.

 

 

origin/master

$git remote add origin https://github.com/group/project

: origin = 원격저장소의 단축 이름 (기본값)

: origin이 아닌 다른 이름으로 지정할 수 있음

 

$git remote -v

: 지정한 저장소 이름과 주소를 같이 확인할 수 있음

 

 

 

반응형

댓글