본문 바로가기
IT일반/아키텍처

(1) Git?? Github?? 개념과 명령어 사용법 정리

by 우공80 2022. 4. 8.
728x90

1. Git이란? Github란??

 

IT 언저리에 있다보면 직접 개발을 하지 않아도 이런저런 용어들을 많이 주워듣게 됩니다.

Git과 Github도 그 중 하나인데요. 어제까지는 두 가지가 다른 것인지도 몰랐습니다.

Git

git

 

위키백과의 정의에 따르면 다음과 같습니다.

 

깃(Git /ɡɪt/)은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 또는 이러한 명령어를 가리킨다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 기하학적 불변 이론을 바탕으로 설계됐고, 분산 버전 관리 시스템으로서 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로를 지원한다.

깃은 2005년에 리눅스 커널 개발을 위해 초기 개발에 기여한 다른 커널 개발자들과 함께 2005년에 리누스 토르발스가 처음 개발한 것이다. 2005년부터 지금까지 주니오 하마노(Junio Hamano)가 소프트웨어의 유지보수를 맡고 있다.

다른 대부분의 분산 버전 관리 시스템처럼, 또 대부분의 클라이언트-서버 시스템과 달리, 모든 노드의 모든 깃 디렉터리는 네트워크 접속이나 중앙 서버와는 독립적으로 동작하는 완전한 이력 및 완전한 버전 추적 기능을 갖춘 성숙한 저장소이다.

즉, 버전 관리/형상 관리 시스템 중 하나입니다. 제가 다니는 회사도 SVN을 쓰다가 대부분 Git으로 넘어갔고, 몇몇 대형 Legacy 시스템만 SVN을 쓰고 있다고 합니다만, 차세대 프로젝트를 하면서는 Git으로 변경할 예정입니다.

 

※ 변경관리/버전관리/형상관리의 차이점

변경관리는 말그대로 프로그램의 변경을 관리하는 것입니다. 변경이력과 복원등의 기능을 의미합니다.

버전관리는 프로그램의 변경을 버전으로 관리하는 것이며, 프로그램의 빌드/배포 까지 모두 관리하는 개념입니다.

형상관리는 프로그램의 전체 lifecycle을 모두 포함하여 관리하는 개념이며, 버전관리는 형상관리의 일부입니다.

엄밀하게는 위와같이 구분되나, 실무적으로는 크게 구분없이 사용하는 것으로 보입니다. 

 

Github

github

 

위키백과의 정의를 보면 다음과 같습니다.

 

깃허브(GitHub, /'ɡɪtˌhʌb/, 원래 이름: Logical Awesome LLC)는 분산 버전 관리 툴인 깃 저장소 호스팅을 지원하는 웹 서비스이다. 루비 온 레일스로 작성되었다. GitHub는 영리적인 서비스와 오픈소스를 위한 무상 서비스를 모두 제공한다. 2009년의 Git 사용자 조사에 따르면 GitHub는 가장 인기있는 Git 저장소 호스팅 서비스이다. 또한 2011년의 조사에서는 가장 인기있는 오픈 소스 코드 저장소 호스팅 서비스로 꼽혔다.

깃이 텍스트 명령어 입력 방식인데 반해, 깃허브는 그래픽 유저 인터페이스(GUI)를 제공한다. 깃허브는 페이스트빈(pastebin)과 유사한 서비스인 Gist와 위키를 각 저장소마다 운영하고 있으며, 깃 저장소를 통해 고칠 수 있다.

깃허브 회사는 2008년 톰 프레스턴워너(Tom Preston-Werner), 크리스 완스트래스(Chris Wanstrath), 피제이 하이엣(PJ Hyett)이 공동 설립했다. 앤드리슨 호로위츠(Andreessen Horowitz) 등에서 투자를 받았다. 2010년 1월부터 깃허브는 GitHub, Inc. 라는 이름으로 운영되고 있다. 깃허브의 마스코트는 고양이 머리에 문어 다리가 달린 옥토캣(Octocat)이다. 본사는 미국 캘리포니아주 샌프란시스코에 있다.

2018년 6월 4일, 마이크로소프트는 75억 달러에 깃허브를 인수하였다

 

GiHub는 Git의 remote repository를 제공하는 서비스입니다. remote repository에 대해서는 아래에서 다룹니다.

2. Git의 중요한 개념과 용어들

Git에서 중요한 개념과 용어는 다음과 같습니다. 

 

working directory

우리가 사용하고 있는 컴퓨터의 작업 디렉토리를 의미합니다. 

 

staging area

working directory에서 개발 해서 빌드의 대상을 임시로 모아놓는 영역입니다. 최종적으로 commit을 하고 빌드를 하기전에 한번 더 검토할 수 있는 중간 단계라고 보시면 됩니다.

 

repository(repo.)

staging area에 있는 대상을 commit하면 repository로 이동하게 됩니다. commit을 하게 되면 소스파일의 추가/수정/삭제를 추적하게 됩니다. local repository와 remote repository가 있는데, 전자는 사용자 pc나 server에 존재하는 것이고,

remote repository는 GitHub,Gitlab등의 원격지에 repository가 있는 것입니다. 

 

3. Git 명령어(Linux)

git 명령어 구조
https://articles09.tistory.com/47

 

제가 어떤 IT회사의 개발자라고 칩니다.

팀장이 수납 관리 프로그램 소스를 수정하라고 지시를 합니다.

이때, 위의 그림과 같은 순서대로 개발(빌드)를 처리하게 됩니다.

 

(1) Remote Repo.에서 소스코드를 가져옵니다. (git fetch)

(2) 내가 가진 소스에 합칩니다. (git merge)     

(3) 소스를 수정합니다.

(4) git add, git commit, git push 명령을 이용해서 Remote Repo.에 수정한 소스파일을 반영합니다.

 

개념을 이해했으니, 실제로 명령어를 연습해보겠습니다.

Git설치

apt-update && apt-get install git

버전확인

git --version

버전확인 결과

Github에서 소스 가져오기(clone)

github에서 repository에서 소스 경로를 확인하고, code > https 의 url을 복사합니다. 

소스 경로 복사

  git clone 명령어로 소스를 가져올수 있습니다. (url부분에 repository url을 넣습니다.)

git clone https://github.com/ehmanori/edu1.git

git clone 결과

 

git pull 명령으로도 동일한 작업을 할수 있습니다. clone과 pull의 차이는 전자는 remote repository 설정을 자동으로 해주고, 후자는 따로 설정을 해야 한다는 것입니다.

 

이부분에 대해서는 아래 링크를 참조하세요.

 

https://meaownworld.tistory.com/157

 

git에서 clone과 pull의 차이점

git을 처음 공부할 떄 clone을 많이 사용합니다. 조금 더 공부를 하다보면 git pull을 배울텐데 그럼 자연스레 "git clnoe과 pull의 차이는 뭐지?" 라는 의문을 갖게 될겁니다 결론부터 말하자면 둘의 차

meaownworld.tistory.com

 

git fetch도 있는데, git pull = git fetch +git merge 입니다.

즉, pull의 경우 remote repository에서 가져온 소스가 현재 local repository에 있는 소스보다 상위 버전이라면 해당 소스에맞춰 버전을 올리지만, fetch는 가져오기만 하고 버전을 올리지는 않습니다.

Github에 수정한 소스 올리기(push)

github에서 가져온 소스를 수정해서 다시 github에 push해보겠습니다.

 

vi 에디터로 수정해주겠습니다.

vi app.py

i를 누르고 편집할수 있습니다.
esc 누르고 :wq라고 치면 나옵니다.

"Hello World!"를 "Git push test"로 변경해주겠습니다.

 

원격저장소 확인

git remote -v 로 원격저장소를 확인합니다.

원격저장소 확인

아래와 같은 명령어를 이용해서 원격저장소에 소스코드를 push할수 있습니다.

 

git add {{파일명}}      //.은 모든 파일을 add한다는 뜻입니다.
git commit -m {{"해당 버전에 대한 description"}}
git push -u origin master {{원격저장소경로}} {{branch}}

git add .
git commit -m "Git push test"
git push -u origin master

 

git add, git commit, git push

git add는 작업 디렉토리(working directory) 상의 변경 내용을 스테이징 영역(staging area)에 추가하기 위해서 사용하는 명령어입니다.

git commit은 스테이징 영역의 파일을 확정지어 local repository에 옮기게 되고,

git push는 remote repository에 소스파일을 업로드하는 것입니다.

 

git push할때는 Username과 Password를 넣으라고 하는데, 이때 Password는 Github 로그인 비밀번호가 아니라

Github에서 별도로 발급받은 Personal access token을 입력해야 합니다.

(Github 계정 > Settings  > Developer settings > Personal access token 에서 발급 받을 수 있습니다.)

Github에 가서 확인해보겠습니다. 

우리가 입력한 git push test라는 이름으로 변경이 발생한 것이 보입니다.

github push 확인

변경이 발생한 부분에 대해서 빨간색과 녹색으로 표시가 되어있습니다.

제가 "Hello World!" --> "git push test" --> "Git push test"로 변경했기에 아래와 같이 표시되고 있습니다.

git push history

 

 

5. 추가 사항

특정 branch만 clone을 하는 방법 

git clone -b {branch_name} --single-branch {저장소 URL}

git clone -b S_coding --single-branch http://git.appdu.kt.co.kr/appdu-matchmaker/backend-php.git

 

Push가 Reject될때

로컬저장소와 원격저장소의 내용이 충돌하는 경우에 발생할 수 있습니다.

이때는 아래와 같이 --force 옵션을 주거나

git push origin master --force

pull/merge로 충돌된 내용을 확인하고 push를 하면 정상적으로 처리가 됩니다.

git pull
git merge --continue

※ 참고자료: 

생활코딩(https://opentutorials.org/course/1)

사바라다는 차곡차곡(https://sabarada.tistory.com/75)

https://github.com/shclub/edu

 

728x90

'IT일반 > 아키텍처' 카테고리의 다른 글

(0) 초급 아키텍처 교육  (0) 2022.04.05

댓글