[Git] Git 설치, Git Hub , Local Repository, Remote Repository

쩡이·2023년 8월 30일
0

Git

목록 보기
1/2

Git이란 ? 버전 관리 시스템의 한 종류

버전관리 시스템(형상관리)

  • configuration management systems
  • version control systems

버전관리 시스템, 형상관리, vcs 통용해서 사용중 -> git, svn 등,, 버전 관리 시스템을 말하는 것

버전관리를 하는 이유?
코드를 짜면 파일이 나오는데, 그 파일이 계속해서 수정 과정을 거친다. 이러한 히스토리?를 기록

  • source data + history
  • 협업, 작업추적, 복구 등이 가능

git 등장 배경
버전관리 시스템이 없을때, 파일명으로 최신파일을 구분하기 위해 관리를 했다.
또는 컴퓨터가 고장나거나 다운되면 코드가 날아가버리는 경우가 많았다.

버전관리 시스템의 종류

  • CVCS - CVS, SVN, etc.,
  • DVCS - Mercurial, Git, etc.,

CVS : commit 중 오류 발생시 rollback이 되지 않는 등의 문제로 SVN으로 대체됨

SVN : 2000년대에 만들어져서 현재까지 두루 사용

Git : SVN보다 빠른 속도와 많은 기능 지원, 현재 많은 기업들이 사용

Github

  • Git은 아니지만, Git을 호스팅 해주는 웹 서비스
  • 협업을 위한 기능 제공 (단, 소스코드 보안이 중요한 경우 사용을 기피함)

Gitlab

  • 설치형 버전관리 시스템(소스코드 보안이 중요한 기업에서 주로 사용)
  • 클라우드 버전 관리 시스템(10명 이하 무료, Github와 유사)
  • Issue tracker, Git Remote Repository, API, Team, Group 기능 제공

우리는 Github를 사용할 것이다.

Git Global Configuration

#global name & email 설정을 하면 자동으로 업로드 된다
git config --global user.name (github 가입할 때 입력한 이름)
git config --global user.email (github 가입할 때 사용한 이메일)

#window 설정, 가져올때는 LF를 CRLF로 변경 보낼때는 CRLF를 LF로 변경
git config --global core.autocrlf true

#mac 설정
git config --global core.autocrlf input

#editor
git config --global core.editor (설정할 에디터이름)

#전체 설정한 목록 확인
git config --list

#항목별 설치 확인
git config <key> (ex. user.name, user.email ,...)

#git 버전 확인
git --version

Git 기본 용어

Repository

  • 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
  • Local Repository와 Remote Repository

Checkout

  • 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
  • Checkout 대상 - Branch, Commit, Tag
  • Checkout을 통해 과거 여러 시점의 코드로 이동 가능

Stage

  • 작업할 내용이 올라가는 임시저장영역
  • 이 영역을 이용하여 작업한 내용중 commit 에 반영할 파일만 선별하여 commit을 수행할 수 있음

Commit

  • 작업할 내용을 local Repository에 저장하는 과정
  • 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
  • commit은 아끼지 말것, 의미 있는 단위로 표시할 수 있을 때마다 하는 것이 좋음
  • commit 단위나 commit log format을 정해놓은 회사나 팀도 있음(빌드 서버를 사용하는 경우)

Tag

  • 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
  • Tag가 붙은 commit은 commit id(version) 대신 tag name으로 쉽게 checkout 가능

Push

  • Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
  • Push하는 순간 다른 개발자들도 영향을 받음, 검증되지 않은 코드는 Push하지 않도록 함

Pull

  • Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
  • 다른 팀원이 변경하고 push한 내용을 Local Repository에 가져올 수 있음
  • push 과정에서 conflict(충돌)이 일어나서 push가 거절된 경우,
    pull을 통해 remote repository의 변경 내용을 local repository에 반영하여 conflict를 해결한 뒤, 다시 push를 시도해야 함.

Branch

  • 특정 시점 (commit 단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
  • 개발의 주축이 되는 branch를 master branch (혹은 main branch)라고 함
  • 모든 branch는 최종적으로 다시 master branch에 merge(병합)되는 형식으로 진행 됨

Merge

  • Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
  • Merge되는 두 Branch는 주종관계가 성립(ex. dev branch를 main branch에 merge)
  • Merge되는 과정에서 Conflict(충돌)이 발생하는 경우 Diff를 수정하여 Conflict를 해결한 뒤 Merge를 진행할 수 있음

Local Repository

구성

  • working directory(작업공간) : 실제 소스 파일, 생성한 파일들이 존재
  • index (stage) : staging area(준비영역)의 역할, working directory를 add한 파일들이 존재
  • head : 최종 확정본, index를 commit한 파일들이 존재

local repository 생성

workspace 생성

mkdir git_ws

workspace로 이동한 뒤 working directory 생성

cd git_ws
git_ws mkdir test_project

생성한 폴더로 이동하여 Git init을 실행하면 Repository 생성
여기까지 진행하면 (master)라고 생기면서 working directory가 생성됨

git_ws cd test_project
git init

.git 확인 => ls -all 입력해서 .git 폴더를 확인, 폴더 안에 git 관련 파일들이 있음

ls -all  

파일 생성
touch 파일이름
working directory에 파일 생성

touch test.txt
ls #확인

Git status
git에 존재하는 파일 확인, 파일 상태까지 체크

Git add
git add 파일이름
working directory에서 변경된 파일을 index(stage)에 추가

Git commit
git commit -m "commit에 대한 설명" 파일이름

Remote repository

Remote repository생성

git hub에서 create repository 버튼 클릭하여
비어있는 remote repository 생성

github token 생성
보안상의 이유로 비밀번호 대신 token을 사용함

git hub의 사용자 메뉴 - settings - developer settings

  • personal access tockens - 우측 generate new token 선택

토근이름, 사용기한, scope를 설정하면 생성됨
token값은 페이지를 벗어나면 다시 안보이기 때문에 다른 곳에 기록해두기

remote repository 등록
git hub home(고양이 클릭) - 생성해둔 remote repository 선택 -
https 선택 확인, 주소 복사 - local repository에 remote repository 등록
주소에서 //와 github사이에 username:token을 입력하고 github앞에 @를 추가

window git bash는 ctrl+v가 안되므로
shift + insert 로 복붙하기

git remote add origin http://<username>:<token>@github.com/~~

remote repository 정보확인
git remote -v

Remote repository에 변경내용 push 하기

git push origin master
보통 branchname은 master (안되면 main)
local repository(head)에 반영된 변경내용을 remote repository에 반영하기 위해서 git push를 사용

remote repository 확인
git hub 홈페이지의 remote repository 페이지를 새로고침하면 push된 파일이 나온다

Remote repository에 pull 하기

remote repository에서 작업한 것을 local repository로 가져오는 과정

remote repository에 README.md 파일 생성
git hub의 remote repository 페이지에서 add a readme 클릭 - 모두 default옵션으로 저장 - commit changes(remote repository에서 파일을 생성해서 add, commit까지 하는 옵션)
<참고> .md 파일은 markdown 문법을 사용하는 파일

git pull
git pull origin master

local repository에도 readme.md 파일이 생성됨

cat 파일명 파일 내용 읽어오기

<정리>
내컴퓨터에서 작업하는 것 => local repository
git_ws > test_project 폴더를 만들어서 git init을 해주어 working directory로 만들었다(test_project 폴더는 git에서 관리)
text.txt 파일을 -> add, commit하여 head로 -> 이후 문제가 없다면 push하여 local repository에 있는 파일이 remote repository에도 올라감
pull: push의 반대, remote repository에서 작업한 것을 local repository로 가져오는 과정
항상 git status을 확인하는 습관!!
git add
git commit
git push
git pull

Remote Repository 복제하기

local repository를 생성하지 않은 상태에서
git clone 명령을 사용하여 remote repository를 local에 복제할 수 있다.
실무에서도 많이 사용하는 방법으로 이를 실습해보자.

파일이 들어있는 remote repository 생성

README file

  • 프로젝트에 대한 설명, 사용방법, 라이센스, 설치방법 등에 대한 내용을 기술하는 파일
  • 본인, 직작동료, 프로그램 사용자를 위해 존재

gitignore

  • git 버전 관리에서 제외할 파일목록을 지정하는 파일
  • 사용자가 원하지 않는 파일들을 자동으로 commit 대상에서 제외시켜 줌

Default Branch
repository를 생성하면 기본으로 생성되는 branch : master or main
git hub는 main이 디폴트 값이고, resopitory별로 수정도 되고, 디폴트 값도 수정가능하다.

default branch의 디폴트값 수정
git hub의 사용자 메뉴 - settings - Repositories에서 변경 가능

Git Clone
git clone 주소
여기서도 주소안에 username,token를 같이 등록

앞서 local에 폴더를 만들고, git init으로 폴더를 초기화하고, push, pull 하는 모든 과정이 git clone으로 가능

Branch

branch 조회
git branch : local branch

git branch -r : remote branch

git branch -a : local + remote 조회

branch 생성 git branch branchname
branch 이동 git checkout branchname
branch 생성+이동 git checkout -b branchname
: branch가 없다면 생성후에 이동해줌, 이미 있는 상태는 x

branch 생성(repository로) git push origin branchname

branch 삭제(local repository) git branch -d branchname
: 삭제하려는 branch에 있으면 삭제 불가

branch 삭제(remote repository) git push origin --delete branchname

0개의 댓글