Git을 사용하기 위한 기초 정리 1

ybear90·2020년 2월 13일
0

Git_fundamental

목록 보기
1/3

VCS(Version Control System), Git/Github

SW개발을 하다보면 버전관리를 해야 하는데 Git과 같은 VCS이 있기 이전에는 여러명이 동시에 한 시스템을 개발할 때 매 버전별로 새로 백업해 두거나 다른 사람들과 소스코드 및 결과물들을 합치는게 어렵고 번거로운 문제였다. 버전을 rollback 하거나 변경사항을 확인할 때도 버전이 많아지면 일일히 찾아서 유효성 검증하는 것도 까다로운 문제였다. 그래서 나온 것이 VCS(Version Control System)이고 아래와 같은 특징을 갖고 있다.

  • 코드 변경 사항 내역 기록 및 관리
  • 필요 시 이전 사항으로 rollback
  • 팀 단위로 개발할 시 체계적, 효율적인 작업

이 VCS는 처음엔 local에서 관리가 되었다가 회사나 연구실 프로젝트의 경우엔 각 회사 및 연구실에서 중앙서버를 두고 사용 되었다.

하지만 로컬이나 중앙서버를 두는 방식은 어느 한쪽이 문제가 생기면 모든 작업에 영향을 줄 수 있으므로 위와 같은 구조로 각 파일과 Version db를 나눠서 관리를 하게 되었는데 개인이나 기업이 위와 같은 시스템을 완성하기에는 시간과 돈이 많이 소요가 될 수 있어 비효율 적이다. 요즘엔 다행이도 git/github 가 이 방식을 잘 만들어 두었고 개인이나 기업이 널리 사용하고 있다.

Git Repository 생성

git의 설치 환경은 OS에 따라 다르지만 조금만 구글링 해보거나 공식 사이트를 참고하면 금방 해결 할 수 있는 문제이므로 여기선 생략.

git의 repository 는 크게 local repositoryremote repository 가 있다.

  • local repository : 개인 PC에 설정된 git repository
  • remote repository : remote repository를 운용하는 서버에 있는 git repository 대표적으로 github. 여러 사람과 협업 및 작업물 공유가 쉽다(일종의 백업 클라우드 개념)

git init

현재 경로에 대해 git repository로 설정하기 위한 명령어 실제 git을 사용해 보기 위해 아래와 같이 진행하였다.

$ git init
$ ls -la
drwxr-xr-x   3 YB  staff    96  2 12 19:44 .
drwxr-xr-x+ 89 YB  staff  2848  2 12 19:51 ..
drwxr-xr-x   9 YB  staff   288  2 12 19:51 .git

git clone

특정 remote repository로 부터 보통 local에 아무것도 없을 경우 프로젝트를 새로 시작하고자 할 때 아래와 같은 명령어로 git repository가 설정되어 있는 파일을 모두 복제하여 갖고 올 수 있다.

$ git clone <git remote repository>

github 에서 clone repo 주소를 알아내는 방법

github repository에서 위와 같은 버튼을 누르거나 새 repository를 생성하면 URL을 바로 확인 할 수 있는데 (.git으로 끝남) 그것을 복사하면 된다.

  • 정리 : git repository를 생성하는 명령어는 다음과 같이 정리 할 수 있다.

    $ git init # 내부 저장소 생성
    $ git add remote <remote_repo_name> <remote repository url> # 새로운 원격저장소 로컬에 추가
    $ git remote -v # 연결된 원격저장소 확인

git의 staging에 대해서

git을 본격적으로 사용하기 앞서 git에서 실제 파일 버전 관리를 할 때 크게 3가지의 상태가 있는데 Modified(Unmodified), Staged, Committed 상태이다.

  • Modified : 수정한 파일을 아직 local repo db에 commit하지 않은 상태 즉 파일만 변경되고 git process가 아무것도 진행되지 않은 상태를 뜻한다
  • Staged : git add 명령어를 통히 staging area 에 올라와 있는 상태. 일종의 중간 저장 상태로 커밋 직전의 상태 중간 상태가 존재하는 이유는 commit 전에 충분히 수정할 수 있는 여지를 두기 위함이고 개발이나 수정이 제대로 되지 않고 commit이 무분별하게 이뤄질 경우 이력관리(history)도 복잡해지고 commit을 되돌릴 수 있지만 그 과정이 까다롭기 때문에 과정이 안정되게끔 중간 저장 과정을 두게 된 것이다. commit은 특정 개발이 테스트가 끝나고 완전히 완료가 되었을 경우 하는 것이 좋다.

    • 참고 : staged와 unstaged 상태의 변경내용 확인하는 git 명령어
    $ git diff
    $ git diff --cached	# 만약 커밋하려고 Staging Area에 넣은 파일의 변경 부분을 보고 싶으면 해당 옵션 사용
  • Committed : 개발이 끝나고 git repository에 저장된 상태이다 일단은 push가 일어나기 전까지는 local repository에 있는 상태이며 remote는 영향받지 않는다.

이 staging 개념을 활용하여 Git에서의 버전관리 flow를 정리하면

  1. 소스코드 전체를 remote repository에 내려 받거나 새롭게 git local repository를 생성
  2. 소스코드 파일을 수정하거나 더한다(실제 개발 과정)
  3. 만들거나 수정한 파일들을 stage에 올린다
  4. 계속 개발 과정을 진행
  5. 해당 개발 과정이 완료될 때 까지 3과 4의 과정의 반복
  6. 해당 기능 개발이 완료되면 commit을 한다

자주 쓰이는 git 명령어 정리

git add

로컬에서 작업한 파일을 staging area에 올리는 명령어

$ git add test.txt
$ git status
현재 브랜치 master

아직 커밋이 없습니다

커밋할 변경 사항:
  (스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
	새 파일:       test.txt

git commit

staged 된 수정 및 완료된 파일을 git local repository에 commit하는 명령어 주로 -m 옵션하고 같이 사용하여 해당 작업 내용을 상세하면서도 간단하게 기술해 준다

$ git commit -m "test.txt file has made"
[master (최상위-커밋) adf9c1d] test.txt file has made
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

git remote add origin [remoterepository-url]

local repo와 remote repo를 연결시켜주는 명령어 아래와 같이 작성 가능하다.

$ git remote add origin https://github.com/ybear90/git_test.git

git push

local repo에 있던 작성 파일들을 remote repo에 올려주는 명령어

$ git push origin<실제 리모트 저장소> master<master 브랜치>
오브젝트 나열하는 중: 3, 완료.
오브젝트 개수 세는 중: 100% (3/3), 완료.
오브젝트 쓰는 중: 100% (3/3), 215 bytes | 215.00 KiB/s, 완료.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ybear90/git_test.git
 * [new branch]      master -> master

git log

git repo에서 진행했던 commit log를 확인할 수 있다.(commit history) 이 명령어의 개선된 버전으로 tig같은 tool이 많이 사용되는 편이다.

$ git log
commit adf9c1d2972037d391fccef86c89edf4281a0ec2 (HEAD -> master, origin/master)
Author: ybear90 <chunggryu@gmail.com>
Date:   Wed Feb 12 20:58:14 2020 +0900

    test.txt file has made
$ tig

2020-02-12 20:58 +0900 ybear90 I [master] {origin/master} test.txt file has made

... ...

[main] adf9c1d2972037d391fccef86c89edf4281a0ec2 - commit 1 of 1                                                 100%
commit adf9c1d2972037d391fccef86c89edf4281a0ec2
Refs: [master], {origin/master}
Author:     ybear90 <chunggryu@gmail.com>
AuthorDate: Wed Feb 12 20:58:14 2020 +0900
Commit:     ybear90 <chunggryu@gmail.com>
CommitDate: Wed Feb 12 20:58:14 2020 +0900

    test.txt file has made
---
 test.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..e69de29

git diff

프로젝트 파일들에서 어떤 수정 사항들이 적용되었는지 전후를 비교해서 보여주는 명령어. staged된 파일들은 확인할 수 없고 아직 staged에 올라가지 않은 수정된 파일들만 확인 할 수 있다.

이 밖에 여러가지 명령어가 많지만 git을 사용하면서 필요하다고 생각이 될 때 마다 꾸준히 정리하면 될 듯 하다.

Reference

profile
wanna be good developer

0개의 댓글