git & git hub

jayden·2020년 4월 24일
0

Git

목록 보기
1/1

1. git & git hub 기본구조

git은 문서의 버전을 관리할 수 있는 VCS(Version Control System) 버전 관리 시스템이다. 버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 즉, 파일의 생성, 수정 및 삭제 내역 등 문서의 역사를 추적할 수 있는 시스템이다.

git을 사용하는 이유

  • 효과적인 협업
  • 손쉬운 개발 및 테스트 환경 구축
  • 효율적인 배포관리

git의 기본구조

2. 사용자 정보 등록

Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자이름과 이메일 주소를 설정하는 것이다. Git은 커밋할 때마다 이 정보를 사용한다. 한 번 커밋한 후에는 정보를 변경할 수 없다.

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

다시 말하자면 --global 옵션으로 설정하는 것은 딱 한 번만 하면 된다. 해당 시스템에서 해당 사용자가 사용할 때는 이 정보를 사용한다. 만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶으면 --global 옵션을 빼고 명령을 실행한다.

GUI 도구들은 처음 실행할 때 이 설정을 묻는다.

3. 명령어

git init: 현재 로컬의 디렉토리를 git 이 관리할 수 있게 인식 및 초기화 시켜주는 기능(git clone을 실행할 경우 실행할 필요가 없다.)

git clone [git repository]: 온라인 리파짓토리의 파일을 처음 가져올 때 사용하며 해당 폴더의 파일을 그대로 로컬 폴더에 복사한다.

git add file name: 수정된 파일을 스테이지드 상태로 옮기고자 할 때 사용하는 명령어, 커밋을 하기 직전에 수행하는 명령

git commit -m "메시지": 스테이징 상태의 파일의 내용을 기록하고 커밋한다.

git remote add origin https://github.com/[리파짓토리이름]: 온라인 리파짓토리를 git의 로컬저장소와 연결한다.

git status: 현재 깃레파짓토리의 상태를 보여주는 명령어이다.

git log: 커밋 히스토리를 보여준다.

git rm: 깃에 등록된 파일을 삭제

git mv: 깃의 파일 이동 혹은 이름을 바꿀 때 사용한다.

git diff: modified 상태에서만 실행 가능한 명령어로 수정사항들을 보여준다.

git branch branch_name: 브랜치 생성, 삭제 등을 수행하는 명령어, 브랜치이름은 'feature/이름'으로 규칙성 있게 만들면 추후 관리하기에 용이하다.

git checkout branch_name: 깃의 로컬 저장소의 현재 위치를 바꿀 수 있다.

git push remote_name branch_name': 깃을 해당하는 온라인 리파짓토리의 브랜치에 업로드 한다.

git pull origin branch_name : 온라인 리파짓토리에 있는 수정된 파일을 가져온다. Conflict가 발생했을 경우 파일을 열면 컨플릭트 내용을 파일 내에서 볼 수 있다.

4. branch, merge & conflict

(1) 필요성
협업 중 코드를 수정했을 때는 master에 바로 하는 것이 아니라 branch에 먼저 수정 후 merge를 하는 것이 좋다.

  • 기존에 있는 소스가 영향을 받지 않고 안전하게 작업을 하기 위해서
  • 여러 사람이 동시에 작업을 하게 되면 변동사항에 대해 즉각적으로 영향을 받게 되어 문제가 발생할 소지가 높다.

(2) merge

  • 기존의 코드와 수정사항의 코드를 합치는 작업

(3) conflict(충돌)

  • 충돌(conflict)는 에러가 아니라 코드를 합치면서 발생하는 필연적인 과정이므로 충돌이 발생하면 깃의 안내를 보고 알맞게 코드를 수정해 주면 된다.

5. git 명령어 사용 예시

(1) mkdir project: project 폴더 생성
(2) cd project: 폴더 이동
(3) git init: git의 로컬 저장소 초기화
(4) touch a.txt: 임의의 파일 생성
(5) git add a.txt: a.txt를 스테이징 상태로 만들기
(6) git commit -m "first commit": "first commit"이라는 메시지와 함께 스테이징 된 모든 파일을 커밋하기
(7) git branch feature/jayden: jayden이라는 로컬 브랜치 만들기
(8) git branch: 현재 만든 모든 브랜치가 표시된다. *표시가 현재 위치한 브랜치이다.
(9) git checkout feature/jayden: 원하는 브랜치로 이동
(10) git remote add origin 'github의 온라인 레파짓토리 주소': 깃의 로컬 저장소와 온라인 리파짓토리를 연결한다.
(11) git push origin feature/jayden: 로컬 브랜치와 소속된 파일을 온라인 저장소 리파짓토리에 푸시하여 만든다.
(12) git hub에서 pull requst 작성 및 요청
(13) conflict 발생 경고
(14) git pull origin master: 파일을 가져와서 vim과 같은 에디터로 파일을 보면 conflict나는 부분이 표시가 되어 있다. 이를 수정해서 다시 push 한다.
(15) 그 후 관리자가 코드 검토 후 승인하면 master branch의 파일과 merge가 된다.

6. Error

(1) fatal: not a git repository (or any of the parent directories): .git

현재 폴더에 git에 대한 정보를 담은 파일이 없기 때문에 발생하는 에러이다. git init을 수행하고 다시 git remote add 명령어를 실행하면 된다. 간단하게 추가로 이야기 하자면 git remote add는 이미 개발하고 있는 어떤 소스코드를 git에서 관리하고 싶어서 생성되어 있는 어떤 git repository에 현재 폴더를 연결하고자 할 때 사용할 수 있다.

7. wecode git 세션 후기

(1) 재미있었던 점
wecode에 오기 전에 git에 대하여 사전 학습을 시도했었다. 그 때는 시간을 투자해도 git 명령어들의 개념과 각 프로세스들을 이해하기 어려웠다. 하지만, 이번 세션 2시간 동안에 많은 개념들이 이해가 되었다. 구조화된 세션이나 수업의 힘을 크게 느낄 수 있었고 며칠 동안 혼자서 공부한 것 보다 이번 2시간의 학습 효과가 훨씬 좋았다. 이제서야 git의 개념이 머릿속에 잡힌 것 같다.

(2) 아직 이해가 되지 않는 부분

  • 브랜치와 컨플릭트의 개념은 실제 적용이 좀 더 필요하다.
profile
DevOps 너로 정했다!

0개의 댓글