반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

 

깃(Git)이란?

 

깃(git)은 프로그램의 개발 시, 소스 코드의 버전을 체계적으로 관리하기 위해 만들어진 분산 버전 관리 시스템입니다.

저는 제조 회사를 다니고 있는데, 관리는 이력 관리가 기본이라는 것을 많이 느꼈습니다. 인간의 기억력은 한계가 있으니까요!

그런 관점에서 코드의 수정이 더욱 빈번하게 일어나는 프로그램 개발자 사이에서 Git은 매우 유용하고 필수적인 도구가 아닌가 싶습니다.

 

깃은 네트워크를 통한 중앙 서버에 소스 코드를 저장하는 것이 아니라, 자신의 컴퓨터에 로컬 저장소를 만들어 저장하는 것이 특징입니다.

로컬 저장소에 저장하는 것의 장점은 인터넷이 없는 환경에서도 마음껏 코딩하고, 깃을 이용해 이력 관리를 한 후, 인터넷이 연결된 환경에서 깃허브(GitHUb)와 같은 웹 호스팅 서비스에 등록하여 사람들과 협업할 수 있습니다.

 

깃 만큼 많이 쓰이는 버전 관리 시스템에는 SVN(Subversion)이라는 것이 있습니다. SVN은 중앙 집중식 소스코드 관리이지만, 깃은 분산 소스코드 관리 방식을 사용합니다. 그렇기 때문에 중앙의 저장소에 문제가 생기면 SVN은 큰 문제가 되겠지만 깃은 분산된 로컬 저장소를 활용한 중앙 저장소 복구가 가능하다는 장점이 있습니다.

 

앞서 언급한 인터넷 환경에 구애받지 않는 점, 유사시 중앙 저장소 복구가 가능하다는 점으로 인해 최근에는 SVN을 사용하던 많은 기업들도 깃(Git)으로 많이 전환하고 있는 추세입니다. 

 

 

 

깃허브(GitHub)란?

 

앞서 설명드린 깃(Git)으로 관리하는 프로젝트를 호스팅해주는 웹 서비스이며,  깃 저장소 서버를 대신 유지 및 관리해주는 서비스입니다. 

다른 유저들과 함께 온라인으로 하나의 프로그램을 제작하는 것도 가능하여, 많은 오픈소스 프로그램들이 github을 통해서 전세계 유저들에 의해 제작되고 있습니다. 참고로 오픈소스 프로젝트는 무료이며, private 프로젝트는 유료입니다.

 

깃허브에 저장하는 것은 매번, 매버전을 모두 저장하고 업로드하는 방식이 아닌 각 버전들의 차이 혹은 변경이력을 저장하는 것입니다.

이를 통해서 훨씬 적은 용량으로 많은 버전 이력들을 저장할 수 있는 것입니다.

 

GitHub 사용을 위한 기본지식

 

깃허브 개념도

저장소(repository)


저장소(repository)는 파일이나 디렉토리를 저장하는 장소입니다. 기본적으로 PC에 존재하는 로컬 저장소에서 작업을 진행하고 그 결과를 GitHub의 원격 저장소에 저장할 수 있습니다.

 

1. 메인 저장소(Main repository)

 

메인 저장소는 오픈소스 프로젝트의 github상의 메인 repository를 의미하며 upstream이라고도 부릅니다. 이 저장소는 세계적인 프로그래머가 만든 큰 프로젝트의 저장소이므로 나에게는 쓰기 권한이 없습니다. 실력이 된다면 메인 저장소의 주인에게 나의 변경사항을 반영해달라고 요청할 수 있습니다. 만약 채택된다면 거대한 프로젝트의 컨트리뷰터(Contributor)가 되는 명예를 얻게 된다고 하네요.

 

2. 원격 저장소(remote repository)

 

내 로컬 저장소의 버전을 업로드하거나 메인 저장소의 

github상에서 나의 계정상에 존재하는 전용 repository로 메인 저장소로 부터 fork(코드를 가져오는 것)한 저장소입니다. 일반적으로 이를 origin이라고 부릅니다.

 

3. 로컬 저장소(Local git repository)

 

검퓨터에 생성한 로컬 저장소를 말합니다. 깃 저장소를 만들게 되면 해당 디렉토리에 .git/ 폴더가 생성됩니다.

흔히 개발자들이 말하는 '1일 1 커밋'의 커밋은 작업 공간에서 로컬 저장소로 업로드하며, 기록을 남기는 것을 말합니다.

 

4. 작업 공간(workspace)

 

내 컴퓨터 상에서 실제 내가 소스를 개발하고 수정하는 workspace를 의미합니다. 쉽게 말해서 우리가 코딩을 위해 만든 폴더라고 생각하시면 됩니다.

 

 

브랜치(branch)

소프트웨어는 출시된 이후에도 지속적인 유지 보수를 통해 기능을 추가하거나 버그를 수정하게 됩니다. 브랜치란 독립적으로 개발이나 유지/보수 작업을 진행하기 위한 개념입니다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있으며, 추후에 병합(merge)하여 새로운 하나의 브랜치로 모을 수 있습니다.

 

자세한 내용은 아래 링크를 참고하시면 좋겠습니다. 글 쓰는 마지막에 발견한 곳인데 깃과 깃허브에 대해서 너무 잘 정리되어있네요!

 

https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

커밋(commit)

파일을 추가하거나 변경사항을 저장소에 기록하기 위해 커밋 메시지를 남기는 작업을 말합니다.변경한 사람, 시간, 변경 내용 등을 기록해 과거 변경 이력과 내용을 손쉽게 파악할 수 있습니다. 좋은 커밋 메시지를 작성하는 Tip을 정리한 글을 아래에 링크해놓았으니 참고해주세요.

 

https://meetup.toast.com/posts/106

 

좋은 git 커밋 메시지를 작성하기 위한 7가지 약속 : NHN Cloud Meetup

git커밋

meetup.toast.com

 

클론(Clone)

클론을 사용하면 원격 저장소의 코드를 내 컴퓨터에 받아올 수 있고 로컬 저장소(.git)도 자동으로 생기게 됩니다. 이어서 설명할 Pull과 Clone은 비슷하지만 다른 점이 있습니다. Clone은 로컬에 아무것도 없는 상태에서 원격저장소의 데이터를 가져오는 것을 의미하지만, Pull은 로컬에 이미 코드가 있고, 원격저장소의 수정 상태를 반영하기 위해 하는 것 입니다.

 

풀(Pull)

원격 저장소 변경 사항을 받아오는 것을 말합니다. 공동작업의 경우, 다른 사람이 원격 저장소에 업데이트한 파일이 있을 때 원격저장소와 내 로컬저장소의 상태를 동일하게 만들기 위해 pull을 이용합니다. Clone과 Pull 모두 원격저장소에서 로컬저장소로 가져오는 것이므로 헷갈리기 쉬우니 차이를 잘 이해하시고 넘어가시면 좋겠습니다.

 

푸쉬(push)

로컬 저장소에 저장되어 있던 커밋을 원격 저장소(GitHub)로 업로드하는 것을 말합니다.

 


참고자료

반응형

+ Recent posts