목차
1. 일반 형상 관리툴과 차이점
2. 시나리오 분석
3. 기본 명령어 확인
4. conflict 예제 생성/해결/정리
5. 히스토리 보는 법
6. git 고급 기능 3가지
7. merge request 기능 확인
8. issue 기능 확인
## 1. 일반 형상 관리툴과 차이점
SVN : 중앙 서버에 소스코드와 히스토리를 저장
Git : 소스코드를 여러 개발 PC와 저장소에 분산해서 저장한다.
Git은 분산형 관리 시스템이다.
중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며,
로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다.
장점
SVN보다 속도가 빠르다.
또한, 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에
작업하는 병렬 개발이 가능하다.
브랜치를 통해 개발한 뒤,
본 프로그램에 합치는 방식(Merge)으로 개발을 진행할 수 있다.
## 2. 시나리오 분석
역할분담
S1 : 사원1
D1 : 나
D2 : 사원2
- 위와 같이 역할 분담하여 시나리오 진행해보았습니다.
- C3 push 시 conflict 오류 발생,
git petch, git merge 후
파일 수정하여 저장 후 다시 전송 -> push 성공
## 3-1 Git 기본 명령어
현재 git 버전 확인
git --version
새로운 저장소 초기화 하기
mkdir /path/newDir
cd /path/newDir
git init
전역 사용자명/이메일 구성하기
git config --global user.name "hoseong-lee"
git config --global user.email "ghtdjd2@naver.com"
전역 설정 정보 조회
git config --global --list
저장소별 설정 정보 조회
git config --list
파일 상태 확인하기 (커밋되지 않은 변경사항 조회)
git status
3-2 Git 기본적인 사용법
새로운 파일을 추가하거나 존재하는 파일 스테이징하고 커밋하기
git add 파일명
git commit-m"<메시지>"
파일의 일부를 스테이징하기
git add-p[<파일> [<파일>[기타 파일들...]]]
add 명령에서 Git 대화 모드를 사용하여 파일 추가하기
git add -i
수정되고 추적되는 파일의 변경사항 스테이징하기
git add-u [<경로>[<경로>]]
수정되고 추적되는 모든 파일의 변경사항 커밋하기
git commit -m"<메시지>"-a
작업트리의 변경사항 돌려놓기
git checkout HEAD <파일> [<파일>]
커밋되지 않고 스테이징된 변경사항 재설정하기
git reset HEAD <파일> [<파일>]
마지막 커밋 고치기
git commig -m "<메시지>" --amend
이전 커밋을 수정하고 커밋 메시지를 재사용하기
git commit -C HEAD --amend
파일 새로 추적하기
git add README
3-3 Git 브랜치
지역 브랜치 목록 보기
git branch
원격 브랜치 목록 보기
git branch -r
지역과 원격을 포함한 모든 브랜치 목록 보기
git branch -a
현재 브랜치에서 새로운 브랜치 생성하기
git branch <새로운 브랜치>
다른 브랜치 체크아웃하기
checkout <브랜치>
현재 브랜치에서 새로운 브랜치 생성하고 체크아웃하기
git checkout -b <새로운 브랜치>
다른 시작 지점에서 브랜치 생성하기
git branch <새로운 브랜치> <브랜치를 생성할 위치>
기존의 브랜치를 새로운 브랜치로 덮어쓰기
git branch -f <기존 브랜치> [<브랜치를 생성할 위치>]
브랜치를 옮기거나 브랜치명 생성하기
<새로운 브랜치>가 존재하지 않을 경우
git checkout -m <기존 브랜치> <새로운 브랜치>
<새로운 브랜치>가 존재하지 않을 경우
git checkout -M <기존 브랜치> <새로운 브랜치>
무조건 덮어쓰기
다른 브랜치를 현재 브랜치로 합치기
git merge <브랜치>
커밋하지 않고 합치기
git merge --no-commit <브랜치>
선택하여 합치기
git cherry-pick <커밋명>
커밋하지 않고 선택하여 합치기
git cherry-pick -n <커밋명>
브랜치의 이력을 다른 브랜치에 합치기
git merget --squash <브랜치>
브랜치 삭제하기
삭제할 브랜치가 현재 브랜치에 합쳐졌을 경우에만
git branch -d <삭제할 브랜치>
삭제할 브랜치가 현재 브랜치에 합쳐지지 않았어도
git branch -D <삭제할 브랜치>
-----------------------
## 4. conflict 예제 생성/해결/정리
- conflict(충돌)란 merge를 할때 나타나는 충돌현상.
- 같은 파일의 같은 부분을 각각의 branch에서 수정하고 merge하게 되면 충돌이 일어난다.
- git status 명령을 통해서 conflict된 파일을 확인하고 파일을 열어 수정한다.
- '<<<<<<< HEAD' 부터
'=======' 사이의 구간이 현재 체크아웃된 파일의 내용이고 - (master 브랜치의 소스코드)*
- '>>>>>>> hoseong1' 사이의 구간이 병합하려는 대상인 hoseong1 브랜치의 소스코드이다.
이 정보를 참고해서 두 개의 코드를 병합한 후 특수기호들을 제거하면 된다.
작업이 끝나면 파일을 저장한다.
------------------------------------------
## 5. 히스토리 보는 법
git log
- 특별한 아규먼트 없이 git log 명령 실행 시
- 커밋 히스토리를 시간순*으로 보여준다.
- 가장 최근의 커밋이 가장 먼저 나온다.
- 그리고 이어서 각 커밋의 SHA-1 체크섬,
- 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메시지*를 보여준다.
## 6. git 고급 기능 3가지
git tag
- 커밋을 참조하기 쉽도록 알기 쉬운 이름을 붙임.
git commit --amend
- 같은 브랜치 상에 있는 최종 커밋을 취소하고 새로운 내용을 추가하거나 설명을 덧붙인 커밋을 할 수 있음.
git revert
- 이전에 작성한 커밋을 지움. 특정 커밋의 내용을 지우는 새로운 커밋을 만들어 지운 내역을 모든 사람이 알 수 있게 함.
-----------------------
## 7. merge request 기능 확인
- develop branch에 개발된 사항을 master 에 merge 하기 위해서는 개발자의
- merge request* 와 관리자의 승인이 필요하다.
- git repository 좌측 메뉴 - merge requests 버튼 클릭
- new merge request 클릭
- source branch 에는 자신이 merge하려는 repository의 branch(develop) 선택
- target branch merge 대상의 repository branch(master) 선택하여
- Compare branches and continue 버튼 클릭
----------------------- ## 8. issue 기능 확인
- Issue 란?
- 프로젝트를 진행하면서 발생하는 모든 이슈*를 뜻한다. (버그 발생, 개발, 풀 리퀘스트 등..)
- Issue 생성하기
이슈는 유저의 이슈 사용이 허용된 깃헙 레포지토리에서 생성할 수 있다. (이슈를 사용 안하도록 설정할 수도 있다.) - 이슈는 현재 존재하는 풀 리퀘스트의 코드로도 생성할 수 있다.
- 풀리퀘스트를 하고있는 파일을 View File을 한 후 코드를 선택해서 이슈를 생성*할 수 있다.
- 또한, 하나의 이슈 또는 풀 리퀘스트의 리뷰에 있는 코멘트로부터도 바로 이슈를 생성할 수 있다.
- 만약 업무의 우선순위와 추적을 위해 프로젝트를 사용하고 있다면,
프로젝트 보드 노트를 이슈로 바꿀 수도 있다.
참고 사이트
누구나 쉽게 이해할 수 있는 Git 입문
https://backlog.com/git-tutorial/kr/stepup/stepup2_2.html
Git 사용법
https://www.zerocho.com/category/Git/post/581042fdcae2d100152ceae6
'Dev > Git' 카테고리의 다른 글
[GitLab] Project visibility 설정 (Private, Public, Internal) (0) | 2022.02.15 |
---|---|
[GitLab] You are not allowed to push code to protected branches on this project (0) | 2022.02.15 |