(1) git의 역사
git은 리눅스 커널을 만들때 코드의 유지보수, 관리를 위해 만든 소프트웨어이다.
리눅스 커널을 만들때, 리누스 토르발즈와 많은 사람들은 몇천만줄에 달하는 어마어마한 코드를 작성하였는데, 이를 관리하기 위해서 리누스 토르발즈가 처음으로 개발하였다.
지금은 수많은 사람들이 git을 다양하게 사용하고 있다.
(2) git이란?
git은 위에서 설명했듯이 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다.
몇몇 사이트들의 예를 인용해서 설명하면..
발표code.cpp
발표code최종.cpp
발표code최종최종.cpp
발표code진짜최종최종.cpp
:
:
와 같은 사례를 막기 위한것이 분산 버전 관리 시스템이라고 생각하면 편할것 같다.
git의 특징중 하나는 데이터를 변경할 때 마다 어떠한 파일의 변경사항을 지속적으로 추적 할 수 있다는것이다.
소스코드에서의 중요한 변화를 git을 통해 기록해둘 수 있다.
이는 어떤 문제가 발생했을 때 문제의 맥락을 파악 할 수 있도록 도와주고, 코드 변경에 실패 했을 때 과거의 상태로 쉽게 돌아갈 수 있게 해준다.
결과적으로, 실패에 대한 부담이 줄어들고, 더 효율적인 코드를 짤 수 있따는 효과가 있다.
뿐만아니라, 백업, 협업과 같은 큰 장점을 제공해준다.
또한, git은 지속적으로 어딘가의 서버와 통신을 하는 시스템이 아니라, 자신의 컴퓨터에서 작업을 하게 때문에, 속도면에서 아주 빠르다.
그리고 git은 기본적으로 무료로 사용할 수 있고, 무려 오픈소스이다!
git 프로그램등에서 오픈소스들이 많기 때문에 개발자들끼리 활발한 소통이 가능하다.
하지만, 이러한 큰 장점이 있음에도 불구하고 큰 문제가 있는데, 그것은 git의 사용이 매우 어렵다는 것이다.
왜냐하면, git의 기본적인 사용법은 바로 명령어를 이용하는 것이기 때문이다.
내가 리눅스를 처음 사용했을때, 평소에 쓰던 윈도우와 너무 많은것이 달라서 헷갈렸었다.
git도 마찬가지일 듯 하다.
그래서 이런 난이도 문제를 보안하기 위해서 많은 사람들이 git의 GUI를 활용한다.
SourceTree, GitHub Desktop등 여러가지 GUI를 사용할 수 있다.
(3) git의 용어
Repository : 저장소를 의미한다. 저장소는 작업 내역, 태그, 가지치기 혹은 브랜치에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 작업 내역을 확인 할 수 있다.
Working Tree : 우리가 흔히 말하는 폴더를 말한다. 그리고 커밋을 실행하기 전 저장소와 작업 공간 사이의 공간을 인덱스 라고 한다. 인덱스에 등록되지 않은 파일은 저장소에 커밋이 되지 않는다고 한다.
Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치이다. == ( 인덱스 )
Commit : 현재 변경된 작업 내용을 한번 더 점검하여 확정하고 저장소에 저장하는 작업이다.
Head : 현재 작업중인 브랜치를 가리킨다.
Branch : 독립적으로 어떤 작업을 진행하기 위한 개념이다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기때문에, 여러 작업을 동시에 진행할 수 있다.
위의 그림은 브랜치를 사용하여 동시의 여러 작업을 진행할 때의 작업 흐름을 보여주는 그림이다.
이렇게 함으로써 다른사람의 작업에 영향을 받지 않고 독립적으로 원하는 작업을 수행하여 그 결과를 하나로 모으게 된다. 이렇게 작업을 이어갈경우 브랜치로 그 작업의 기록을 중간중간 남기게 된다. 따라서, 문제가 발생할 경우 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기가 쉬워진다.
Merge : 다른 브랜치의 내용을 현재 브랜치로 가져와 합치는 작업을 의미한다.
Branch와 Merge를 활용한 예로는..
1. 작업중인 웹사이트가 있다
2. 새로운 이슈를 처리할 새 Branch를 하나를 생성한다.
3. 새로만든 Branch에서 작업중이다. 이때 빠르게 처리해야할 Hotfix가 생긴다. 그러면 다음과 같이 처리할 수 있다.
1. 새로운 이슈를 처리하기 이전의 Master Branch로 이동한다.
2. Hotfix Branch를 새로 하나 생성한다.
3. 처리한 Hotfix가 점검까지 끝나고나면 Master Branch로 Merge를 한다.
4. 다시 작업하던 Branch로 넘어가서 원래 하던 작업을 진행한다.
가 있다.
(4) git 명령어
git --version
현재 git의 버전을 확인한다.
git init
현재 디렉토리에 git 저장소를 생성한다.
git commit -m 커멧메세지
스테이징 영역에 올라가 있는 파일들을 커밋한다. -m은 커밋 메세지를 주는 옵션으로, 여러줄의 커밋 메세지를 쓸 경우 -m을 여러개 사용 할 수 있다.
-a옵션을 사용하면 스테이징에 올리는 작업과 커밋을 동시에 할 수 있다.
-v옵션을 사용하면 커밋하려는 변경사항의 다른점을 보여준다.
특정파일만 커밋하려면 마지막에 파일명을 추가해주면 된다.
git mv 파일명 새파일명
기존에 존재하는 파일을 새파일로 이동한다. 변경 이력은 그대로 유지한다.
git checkout -- 파일명
아직 스테이징이나 커밋을 하지 않은 파일의 변경내용을 취소하고 이전 커밋 상태로 돌린다.
git branch
현재 존재하는 브랜치를 조회한다.
-r옵션을 사용하면 원격저장소의 브랜치를 확인 할 수 있다.
git branch A B
A브랜치에서 새로운 B브랜치를 만든다.
git branch A
A라는 새로운 브랜치를 만든다.
git branch -d A
A라는 브랜치를 삭제한다.
git branch -m 존재하는 브랜치 새로운 브랜치
존재하는 브랜치를 새로운 브랜치로 변경한다.
이미 존재하는 브랜치명이 있을 경우에는 에러가 나지만 -M옵션을 사용하면 이미있는 브랜치도 덮어쓴다.
git tag 태그명 브랜치명
브랜치명의 현재시점에 태그명으로 된 태그를 붙힌다.
git tag만 입력하면 현재 존재하는 태그의 목록을 볼 수 있다.
git checkout 브랜치명or태그명
해당 브랜치나 태그로 작업 트리를 변경한다.
git merge 브랜치명
브랜치명의 브랜치를 현재 브랜치로 합친다.
--squash 옵션을 주면 브랜치 명의 모든 커밋을 하나의 커밋으로 만든다.
git log
커밋 로그들을 볼 수 있다.
-1이나 -2같은 옵션을 줘 출력할 커밋 로그의 갯수를 지정할 수 있다.
git log 커밋명
해당 커밋의 로그를 볼 수 있다.
git clone 저장소주소 폴더명
원격저장소를 복제하여 저장소를 생성한다. 폴더명을 생략 할 수 있다.
git remote add 이름 저장소주소
새로운 원격 저장소를 추가한다.
git remote
추가한 원격저장소의 목록을 확인할 수 있다.
git remote show 이름
해당 원격저장소의 정보를 볼 수 있다.
git remote rm 이름
원격저장소를 제거한다.
(4) git의 활용, github
깃허브는 git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스이다.
github는 영리적인 서비스와 오픈소스를 위한 무상서비스를 모두 제공해 주는것이 특징이다. git사용자 조사에 따르면, git의 가장 인기있는 호스팅 사이트가 github라고 한다.
2011년 가장 인기있는 오픈 소스 코드 저장소로 꼽히기도 했다. 이는 github를 많은 개발자들이 즐겨서 사용한다는것을 의미한다!
<특징>
● git이 직접 명령어로 입력하여 내용을 작성하는 방식인데 비해, 깃허브는 GUI를 제공해준다.
● 각 소스코드 저장소마다 마크다운 기반 위키를 만들 수 있다.
● 각 소스코드 저장소마다 홈페이지를 한개씩 만들 수 있다.
● 2명 이상의 협력자를 등록하여 하나의 프로젝트를 가지고 GitHub를 통해 공동 작업할 수 있다.
한국을 포함한 전 세계 IT 업계에서는 프로그래머 면접에서 github 계정이 일종의 포트폴리오 역할을 할 수 있기 떄문에 관련 업계에서 상당히 각광받는 중이다. 아예 입사지원서에 github 계정을 요구하는 곳도 있다고 한다.
최근 개방적인 스타트업에서는 국적을 가리지 않고 github를 포트폴리오로 사용하고, 기업 활동에 사용하는 일이 늘어나고 있다고 한다.
'Layer 7 > assignment' 카테고리의 다른 글
[Linux] 리눅스 보고서 (0) | 2019.05.26 |
---|---|
[C] 동적할당 보고서 (0) | 2019.04.12 |
[C] 달팽이 배열 (0) | 2019.04.09 |
[C] 포인터 보고서 (0) | 2019.04.03 |
[C] 함수 보고서 (0) | 2019.04.03 |