DATA ENGINEERING - git, github의 활용과 사용 방법

David's Data Science·2021년 9월 14일
0

GIT과 GITHUB

git & github

git은 버전관리(형상관리로 볼 수 있다) 도구의 일종으로 프로젝트 진행 시 다양한 변화에 대한 대처를 도와주고, github을 통해 repository를 이용해 다양한 프로젝트에 대한 공유를 통해 협업을 용이하도록 만든 도구이다.

옛날에는 버전관리 도구로 CVS/SVN을 많이 사용했다면, 최근에는 전 세계적으로 git을 많이 사용하는 추세이다.

git의 활용

버전관리(타임캡슐)

어느 유튜버의 영상을 봤을 때 정말 잘 표현한 것이 '타임캡슐'이었다.
고객 요구에 맞는 서비스를 제공하기 위해 진행하는 프로젝트나 엔지니어링 작업 등 개발 환경에서 버전관리는 매우 중요한 역할을 한다.

예시: 드라마 촬영을 위한 등장인물 중 조연배우의 (사람이름: 나이)를 설정한다고 하자.

NAMEAGE
DAVID30
CHLOE27

이렇게 DAVID, CHLOE 둘을 기재한 상태에서 추가적으로 JACK의 정보를 추가해본다.

NAMEAGE
DAVID30
CHLOE27
JACK36

이렇게 추가가 되었을 때, 지금의 상태는 이전 DAVID, CHLOE만 있을 때와는 다른 버전이 되었다고 볼 수 있다. 그리고 이와는 약간 다르게 다른 버전을 또하나 만들어본다.

NAMEAGE
DAVID30
CHLOE24
MARGARET36

JACK 역할의 조연 이름을 MARGARET으로 바꾸고 극중 스토리를 위해 CHLOE의 나이를 24으로 변경했다. 그러던 중 팀장의 승인을 받은 것은 조연 이름을 JACK으로 진행하기로 한 경우, 우린 이전에 만든 버전으로 작업을 진행해야 한다.

이렇게 여러 버전을 만들어놓고 상황에 따라 예전 버전을 이용해 업데이트를 해나가고 싶으면 해당 버전으로 다시 돌아갈 수 있는 것이 git의 버전관리라고 볼 수 있다.

명령어 사용 예시 in VISUAL STUDIO CODE

git bash가 설치되어 있고, visual studio code과 연동된 환경에서 진행하도록 한다.

1. 사용자 설정(git config --global)

git의 버전관리를 사용하기 위한 name과 contact을 설정해야 한다. 이는 어떤 협업진행 시에 어떤 사용자가 어떤 버전을 어떻게 수정했는지 확인하기 위함이다.

$ git config --global user.name "david"
$ git config --global user.email "david@gmail.com"

위는 가상의 이름 david으로 사용자 설정을 하기 위한 code이다. VS 터미널에서 위와 같이 user.name과 user.email을 각각 설정하면 아래와 같이 설정된 것을 확인할 수 있다.

$ git config user.name

[output]
david

$ git config user.email

[output]
david@gmail.com

2. git의 관리하에 포함 시키기 (git init)

$ git init

[output]
Initialized empty Git repository in C:/Users/git_study/.git/

git이 해당 폴더를 관리하도록 하기 위해선 git init을 통해 .git 파일이 생성되어야 한다.

위 코드와 같이 빈폴더(git_study)를 생성해서 해당 폴더로 이동한 뒤, git init을 하면 .git이 생성되고 이후로 해당 폴더에 생성되는 파일들은 git의 버전관리를 이용할 수 있게 된다.

$ ls -al

[output]
total 28
drwxr-xr-x 1 david 197121 0  919 12:03 ./
drwxr-xr-x 1 david 197121 0  919 11:49 ../
drwxr-xr-x 1 david 197121 0  919 12:04 .git/

ls -la : 숨김 폴더, 파일 보기
ls -la 명령어를 통해 보면 맨 아래 .git이 생성된 시작과 날짜가 기재되어 있다.
git init으로 인해 생성된 .git 파일이 생성된 것을 알 수 있다.

3-1. 첫 번째 버전 만들기 - 타임캡슐 만들기(git add/ git commit)

1) git add 파일명
2) git commit -m "업데이트내용"
위의 순서대로 파일을 add하면 해당 업데이트 내용이 STAGE AREA로 이동하게 되고, commit을 하게 되면 staging된 파일들이 LOCAL REPOSITORY로 업데이트 되면 첫번째 버전의 타임캡슐을 묻는다고 볼 수 있다.

실습을 통해 이를 이해보도록 한다.

상황: VS CODE에서 위와같이 david.txt, chloe.txt파일을 생성해 내용을 기재하고 저장했다.

  • git status: 현재 git 폴더 내에 수정된 파일이 있는지의 여부 파악
$ git status

원하는 내용을 작성 후 저장한 뒤, git status를 입력하면 위 이미지와 같이 현재 add가 필요한 파일이 Untracked files에 빨간 글씨로 확인이 된다.

  • git add 파일명: 원하는 파일 1개만 STAGE AREA로 넣는다.
    git add -A: 현재 Untracked files로 나타나는 file 전체를 STAGE AREA로 보낸다.
$ git add -A
$ git status


git add -A를 한 뒤 다시 git status를 상태를 살펴보면 맨 아래 초록색 글씨로 commit할 준비가 된 것을 볼 수 있다. 이는 현재 파일들이 STAGE AREA에 있음을 나타낸다.

  • git commit -m "업데이트 내용"*
$ git commit -m "첫번째 작업"

commit까지 완료하면 버전 하나가 완성되었다고 볼 수 있고, 타입캡슐 하나를 묻었다고 생각할 수 도 있다. 위와 같이 commit을 진행할 때, 현재 업데이트 사항이 어떤 내용인지 잘 기재해야 추후에 다른 버전을 찾을 때에도 찾기 수월해진다.

3-2. 두 번째 버전 만들기 (jack 생성)

$ git status


VS CODE에서 jack.txt를 생성한 뒤 git status를 해본 결과 jack이 업데이트 된 것을 알 수 있고, 이를 git add + git commit을 해보도록 한다.

$ git add -A
$ git commit -m "Jack, 나이 36을 추가"

3-3 세 번째 버전 만들기 (jack -> margaret 수정)

$ git status


jack의 파일 명을 margaret으로 변경했으므로, git status에서 jack은 삭제되고 margaret이 Untracked files로 되어있는 것을 볼 수 있다.

4. log를 통해 이전 버전으로 돌아가기 (git log / git reset / git revert)

1) git log: 이전 commit 내역을 순서대로 log 일련번호로 확인 가능
2) git revert : 이전 commit을 취소할 시점을 입력하면 취소가 된 새로운 commit이 생선된다. log가 남기에 다시 복구 가능
3) git reset : 돌아갈 시점으로 이동 -> 이후 commit내역 log가 모두 삭제되어 복구 불가.

  • git log
    git log를 실행하면 지금까지 세번의 commit 내역이 log 일련번호와 함께 확인이 된다.
$ git add -A
$ git commit -m "jack을 margaret으로 변경"
$ git log


commit을 할 때에 commit massage를 잘 기재하면 어느 버전으로 돌아갈 지 명확하게 확인이 가능하다. 위 이미지에서 노란색으로 표시된 것이 commit 일련번호이고, 그 오른쪽에 (HEAD)표시가 있는 것이 현재의 커밋 상태가 위치한 지점이다.

  • git revert 일련번호 6자이상
    git revert "해당 commit massage
$ git revert "첫번째 작업"

git revert로 맨 처음 david와 chloe를 작성 및 commit했던 시점의 log 일련번호를 입력 후 실행하면 위 이미지와 같은 edit 창이 뜬다.

위 노란표시가 나오는 곳에는 이렇게 revert 함을 log에 표시하기 위한 새로운 commit massage를 기입한 뒤, 저장 후 파일을 종료하면 commit이 진행된다.

왼쪽 파일리스트에서 david과 chloe가 삭제되어 margaret만 남은 것을 볼 수 있다.


이후 git log로 commit 상태를 확인해보면 해당 사용자 Author가 revert를 해서 david, chloe를 삭제한 것이 가장 최근 log로 뜨는 것을 알 수 있다.
git revert는 이렇게 log가 그대로 남아있기 때문에 언제든 다시 되돌릴 수 있다.

  • git reset

git reset은 아주 과감히 어느 commit 시점으로 돌아가 이후 행적을 모두 삭제하는 방법이다. 뒤에 --soft, --mixed, --hard로 그 강도를 조절할 수 있지만, 이번에는 --hard로 시점 이동을 하도록 한다.

$ git reset 1c9ef9eff --hard

git reset을 JACK을 만들었던 시점으로 설정하고 실행한 결과, 아무것도 묻지도 따지지도 않고 margaret이 사라지고 다시 david, chloe, jack이 있던 시점으로 돌아갔다.
실행 메시지로는 해당 log의 commit massage가 있는 시점으로 HEAD가 옮겨졌다고 나온다.

$ git log

효과가 좋아보이지만, 위와 같이 해당 시점 이후의 log가 모두 삭제되어 복구가 되지 않는다. 협업 상황 시에는 상당히 위험한 방법이기 때문에 주로 revert를 이용한다.

git 명령어 정리

  • git config --global user.name "사용자 이름" : 사용자 이름 설정
  • git config --global user.email "사용자 e-mail" : 사용자 메일주소 설정
  • git init: 해당 폴더 git 관리하에 두기
  • git status: 현재 staging(add) 가능한 file, commit 가능 file 리스트 확인
  • git restore "파일명": 삭제된 파일 중 add하기 전에 다시 파일 복구하기
  • git add "파일명": 해당 파일 STAGE AREA로 넘기기
  • git commit -m "업데이트 내용": STAGE AREA에 있는 내용 최종 UPDATE하기
  • git log: commit 된 내역들을 log 일련번호와 함께 확인하기
  • git revert "일련번호": 해당 commit 내역을 취소하는 시점을 log 상 새로 만든다.
  • git reset "일련번호" --hard: 해당 commit 시점으로 이동하며 이후 commit log를 모두 삭제한다.
profile
데이터 사이언티스트가 되고싶은 David입니다.

0개의 댓글