-
Git/Github 입문하기Github/Git 2019. 11. 17. 14:30728x90반응형
나는 git 과 github 가 다르다는 것은 들어본적이 있어서 알고는 있었지만, 정확히 어떤 차이가 있는지는 자세히 알지 못했다. 또한 다른 블로그 글이나 다른분의 자료를 많이 참고할것인데 이해 부탁드립니다 ㅠ
(개인 공부용으로 올리는 것입니다)
오늘 공부를 좀 하다보니 차이가 이렇다는 걸 알게 되었다. 또한 DVCS 가 무엇이지? 하고 검색을 해보았다.
DVCS (Distributed Version Control Systems ) 즉, 분산 버전 관리 입니다.사전적 설명으로는 중앙 서버에 있는 코드를 개발자 각자의 로컬 컴퓨터에 복사한 후, 복사된 프로젝트를 가지고 작업하며 서버에 업로드를 할 수있습니다.
이 글을 읽으니 어느정도 이해가 되는거 같다.
그런데 도대체 분산 버전관리 시스템이 뭐길래 우리는 왜 이것을 써야 하는 걸까? 굳이 어려워 보이는 명령어들과 개념을 공부해서 써야하는 이유가 무엇일까??
개발을 하다 보면
1) 여태까지 개발해 온 이력을 확인해야 할 때가 있을 수 있고,
2) 예전에 작업했던 상태로 다시 되돌려야 할 때도 있다고 한다.
그리고 여러 개발자들이 작업을 나눠서 동시에 개발을 진행하면 개발 완료 후 합치는 과정에서 서로 겹친 부분 때문에 3) 충돌이 일어날 수도 있다고 한다.
이런 글들을 보니 어느정도 쓰는 이유에 대해서 느낌이 조금 씩 오는거 같다.
그렇다면 많은 버전관리도구가 있을텐데 그 중에서도 왜 Git 을 많이 쓰게 된걸까?
SVN( SVN(Subversion) 과 간단히 비교를 해보자. 서브버전의 경우 하나의 중앙 저장소가 있고, Git 의 경우에는 원격 저장소와 로컬 저장소가 있다.
간단히 그래프로 비유를 해보자. SVN 은 왼쪽처럼 중앙 집중형 구조를 가지고, Git 은 오른쪽처럼 그물망 모양을 가진다고 할 수 있다. 그런데 SVN 은 중앙 저장소에 집중되어 있는 구조라 중앙저장소에 문제가 생겼을 경우, 따로 백업을 해두지 않는 이상 복구를 하기가 좀 힘들다. 그리고 저장소를 공유하여 사용하기 때문에, 동시에 여러명이서 개발을 하기에 어려움이 있다.
그러나 Git 은 리모트 저장소를 로컬 저장소로 복사해와서 작업하는 구조로, 로컬과 리모트가 분산되어 있기 때문에 더욱 안전하면서도 여러명이서 효율적으로 개발할 수 있다.
git 과 SVN 차이를 잘 보여주는 그림인거 같아서 가져왔다.
SVN 은 Commit 즉시 공동 Repository 로 올라가지만 Git 는 로컬에도 한번 저장되고 원격 저장소에 한번 더 저장된다. 즉 나눠서 저장된다. 라고 해서 , 분산버전관리시스템 이라고 한단다
http://blessldk.blogspot.com/2013/10/git.html ( 참고 했습니다!! ㅜㅜ)
또한 개념적인 부분이 약한거 같아서 다른 블로그 글 가져와봤습니다 ㅜㅜ
1. 필수 개념
다음은 깃을 사용하기 위해서 반드시 알고 이해하고 넘어가야 하는 용어들입니다.
- 작업공간 (working space)
개인 컴퓨터 환경에서 소스코드를 편집하는 일반적인 프로젝트 폴더를 일컬어 작업공간이라고 합니다.
- 저장소 (저장공간; 레포지토리; repository)
작업공간을 Git이 제공하는 자료구조 안에 압축시켜 넣은 것입니다. 저장소는 로컬 저장소와 원격 저장소로 나뉩니다. 일반적으로 저장소라고 하면 로컬 저장소를 가리킵니다. git init 명령어로 해당 작업공간의 저장소를 생성하면 작업공간 하위에 .git이라는 이름의 폴더가 생깁니다. 작업공간 안의 .git 폴더가 바로 로컬 Git 저장소입니다. 이 저장소 안에 모든 커밋들이 들어있습니다.
- 원격 (원격 저장소; 리모트 저장소; remote repository)
저장소가 내 PC의 프로젝트 폴더 안이 아닌 다른 어딘가의 서버에 위치해 있으면 원격 저장소라고 합니다. 원격 저장소를 사용하면 여러 사람이 서버에 있는 하나의 저장소를 공유해서 공동으로 작업할 수 있기 때문에 편리합니다.
- 커밋 (commit; 변경사항; 이력; snapshot; 스냅샷)
(명사) 어떤 순간 작업공간의 상태를 저장한 것입니다. 작업공간 안에 있는 모든 파일과 파일의 데이터를 사진 찍듯이 복사해서 저장소에 보존합니다. 즉 커밋은 작업공간의 어떤 시점의 스냅샷이라고 할 수 있습니다.
(동사) '커밋한다'는 말은 커밋을 추가한다는 뜻입니다. 즉 현재 작업공간의 상태를 커밋으로 만들어서 저장소에 저장한다는 의미입니다.
https://nanite.tistory.com/39 (참고 했습니다 감사합니다)
git에는 로컬 저장소에 커밋을 하기 전, 스테이지 영역(인덱스) 단계가 있습니다.
작업 공간 -> 스테이지영역 -> 로컬저장소
*스테이지 영역 : 스테이지 영역에 변경 된 파일들 중 커밋 할 파일들을 저장하는 공간,
이 후 로컬 저장소로 커밋하는 영역이기도 하다.
내 컴퓨터 ----------> 스테이지 영역 ----------> 로컬 저장소 ----------> 원격 저장소
git add git commit git push
(참고하니 이해가 잘된다!)
git덕분에 불특정 다수가 동시에 작업하기 용이한 환경을 지니고 있어서 오픈소스 진에서 주로 많이 쓰이고 있다.
그리고 나는 실습을 CLI (Command Line Interface) 환경에서 해볼 것이다.
CLI 환경에서의 git 기본 사용 명령어 틀이다. 앞으로 다루게 될 기본 명령어들은 위와 같은 틀에서 크게 벗어나지 않을 것이다.
예를들면 이런식으로 git 명령어들은 비슷비슷 하다고 한다.
그리고 git bash나 Cmder 등등의 환경에서 git 이라고 한번 쳐보자.
이런 많은 명령어들이 있다는 것을 볼수 있다. (뭐 많은 명령어들중에서 주로 쓰는 몇개만 잘 알아도 된다고 한다.)
영어가 익숙하지 않기 때문에 한글로 번역된걸로 다시 보자 ㅠ
한번 쭉 보면 되지만, 일단 나는 clone, init, add, log, status, branch, checkout, commit, diff, merge, pull, push 이정도만 가볍게 공부를 해보려 한다.
지금의 나는 이 사진을 보면 어느정도 느낌은 알겠는데 자세하게 이해가 되지 않는다.. ㅜㅜ 공부를 하면서 글을 쓰고 있는데 나중에는 이 사진이 이해간다고 믿어야지.
그럼 본격적인 실습을 시작해봐야겠다. 먼저 저장소부터 만들어보도록 하자.
나는 윈도우를 쓰기 때문에 경로를 C:₩git₩ 이렇게 지정 하겠다.
이렇게 C/git/git-project 를 만든다.
git-project 까지 들어간 후에 git init 을 하게 되면 .git 이라는 저장소가 생기는 것을 확인할수 있다.
저장소가 생기긴 했지만, 사실 커밋이 하나도 없는 껍데기에 불과하다. 시작점(기준)이 될 만한 커밋을 하나 만들어야 한다. README.md 파일을 추가해보자.
이와 같이 vim 이나 cat 을 통해서 파일을 만들면 될거 같다.
커밋을 할 파일이 만들어졌으니 이제 첫 번째 커밋을 해볼까 한다. 왼쪽의 명령어 순서대로 진행해보자. status 명령어는 현재 상태를 보여준다.
처음에 add 명령어를 통해서 추가하고 그 다음에 git status 로 현재 상태를 보고, commit 을 해보자.
이번 글은 commit 까지 쓰는걸로 하고 다음 글에는 브런치를 만들고 merge 까지 해서 가능하면 pull request 까지 해보는걸로 해야겠다..
"박희찬" 님의 강의자료를 통해서 글을 작성했다. 감사합니다!
반응형'Github > Git' 카테고리의 다른 글
[Git] 브랜치 병합(Merge) & 충돌(Conflict) & 해결(Resolve)에 대하여 (0) 2020.11.19 [Git] gitignore란 무엇일까? (3) 2020.11.19 [Git] pull과 fetch의 차이는 무엇일까? (1) 2020.11.19 [Git] remote: 로컬 저장소와 원격 저장소를 연결하기 (0) 2020.11.19 [Git] clone 과 Fork 의 차이점 (2) 2019.11.22