Git 설치 및 세팅
Git을 이용하려면 두가지 방법이 있다.
- SourceTree라는 Git GUI 툴을 이용한 Git
- Git Bash를 이용한 Git
1. Window는 git을 따로 설치해줘야한다 (mac은 기본적으로 깔려있음)
https://git-scm.com/download/win
따로 설정할 것 없이 계속 다음 누르다가 마지막에 Git Bash 에 체크해주기
* README : git repository에 대한 기본적인 설명 - 프로젝트 설명, install, 라이센스 정보, 만든이, 수정하고싶으면 어디로 연락하세요 이런 설명이 들어가있음
* Clones with https : 아이디랑 비번 입력해서 접근을 하는 방식
2. 설치 완료 후 자신의 이름 / 이메일 (나중에 못바꾸니깐 신중하게) 세팅
Rim@rims MINGW64 ~
$ git config --global user.name "Kim Arum"
Rim@rims MINGW64 ~
$ git config --global user.email "a5612@gmail.com"
3. C:\Users\Rim - 자신이 원하는 경로에 앞으로 작업할 폴더를 생성 - hanium_test
Rim@rims MINGW64 ~
$ mkdir hanium_test
Rim@rims MINGW64 ~
$ cd hanium_test/
4. 복사해둔 URL 클론해오기
위에서 cd 명령어를 줬기 때문에 경로가 rims\hanium_test로 맞춰짐
Rim@rims MINGW64 ~/hanium_test
$ git clone https://lab.hanium.or.kr/a5612/test.git
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
기본 실습
가장 많이쓰는 git 명령어
# git status
# git add
# git commit
# git push
# git touch -- 해당 경로에 빈 파일 생성 ( .txt)
# git show
# git log -- 각 커밋별로 커밋 ID와 함께 상세 정보가 뜸
# git shortlog -- 각 커밋메세지와 함께 짧은 로그만 뜸
# git diff -- 로컬저장소에 있는 파일을 수정만 해도 git diff 명령어를 쳐주면 차이점이 잡힘
이런식으로 이전 파일과의 차이점이 + 혹은 - 표시로 보임.
상황별 명령어 정리
(1) Github 에있는 commit을 수정할 길은 Local 에서 수정 후 -f 옵션으로 push 하는방법 뿐이다.
(원격에 push까지 마친 상황)
가장 최근 커밋을 지운다.
# git reset HEAD~1
강제로 Github에 있는 tree도 밀어넣어서 수정한다.
# git push origin master --force
1. GitLab에 파일 올리기
hanium_test 폴더 아래 test란 폴더를 만들어서 소스파일 2개 생성 (world.txt, hello.txt만 새로 만들었다고 가정)
요청대로 git add 명령어를 줌
(참고) $ git add . = 모든 파일을 staging area에 올려라
git status를 확인해보면 hello.txt만 stage에 올라가고 world.txt는 안올라간 상태란 걸 알려줌
world.txt까지 git add해주고
두 파일 다 staging area에 올린 상태
hello.txt를 다시 staging area에서 내려보기
다시 내려간 걸 확인 가능
다시 전체 올려준 다음에
commit msg와 함께 commit 해주기
commit msg를 따로 주지 않으면 없는채로 GitLab에 올라감
그 상태에서 git status를 확인해보면,
내 branch가 origin보다 1 commit 앞서 있다는 메세지가 뜸
( 내 로컬 commits를 use "git push" 하라고 알려줌 = GitLab에도 동기화를 하라는 의미)
$ git push 명령어를 내리면 gitLab에도 commit한 두 파일이 올라가 있는 걸 볼 수 있음
2. 파일 삭제하기
해당 디렉토리로 가서 world.txt를 삭제 완료 후
git status로 확인 - git add 명령어를 내리라고 알려줌
위에 소스파일을 올리던 작업과 동일하게
add -> commit -> push 해줌
GitLab에서도 삭제까지 완료된 것을 확인 가능
3. Branch 병합하기 (master가 다른 사람이 소스파일 올리기를 요청한 걸 merge를 해주는 상황)
A. 내가 하위 엔지니어인 상황, 내가 만든 개발 파일을 올리려 함
새 branch 만들기
$ git checkout -> branch끼리 이동할 때 쓰는 명령어
* feat : 새로운 기능을 만들겠다, 버그 고치기 (만들면 새로운 브랜치로 자동으로 경로 옮겨짐)
branch가 (master)에서 (feat/add_landing)으로 옮겨간 상태인 걸 볼 수 있음
새로운 소스를 개발한 상황 (landing.txt)
$ git status 명령어를 줘보면 staging area에 올리라고 되어있는 상태
staging area에 올린다
commit 후 push까지 해줌
git push --set-upstream origin feat/add_landing 을 하라고 권유함
*upstream : gitLab을 의미함 (origin에 feat/add_landing branch가 없었지만 그걸 생성함과 동시에 내가 올린 소스파일까지 같이 올리가는 것)
해주면 완료됨
GitLab의 Graph 코너로 가보면, add landing feature라는 새 branch가 생김
화살표 < 있는곳이 master 가 현재까지 있는 영역임
add landing feature 라는 새로운 branch까지 같이 올라와 있는걸 볼 수 있음 ( 이 영역에서 master로 가거나 다른 branch로 접속하거나 변경 가능)
B. Merge Request(MR) 보내는 방법 (github에서는 pull request(PR) 이라함)
master입장에서 하위엔지니어가 올린 파일을 병합요청 할 것임
master로 branch 다시 옮기기
master가 button.txt란 새 파일을 만들고 push까지 마친 상황
이 상태에서 GitLab의 병합요청 코너에서 master와 feat/add_landing 두 branch를 병합진행
Source branch : 병합할 branch
Target branch : 어느 branch에다가 병합을 할 것인지
병합요청 진행 중에 master가 코드리뷰를 달 수도 있음 ( 이 부분에는 script가 아니라 ajax를 썼으면 좋았겠네요 이런식으로 )
?change > click > discussion 하고
resolve를 만들지 않으면 못함 ?
전체 Merge가 완료가 되면 내 local에서도 그 변경된 사항 (추가된 파일)을 업데이트 시켜줘야함
* git pull 은 아침에 습관적으로 하면 됨 (다른사람이 그동안 뭐했나 한꺼번에 받아볼 때)
4. conflict 발생
(같은 파일을 다른 사람들이 동시에 접근해서 고치려 할 때)
* 다른 파일들을 고치려고 할 때는 충돌은 안남
a. 같은 파일 고쳐도 충돌이 안나는 경우
b. 같은 파일 고쳐도 충돌이 나는 경우 = 같은 라인 고쳤을 때
마스터 : login.txt 라는 파일을 올린 상황
하위 엔지니어: fix/login이라는 branch를 새로 파서 login.txt 를 수정하고 commit, push까지 완료한 상태
마스터: login.txt를 수정하고 push까지 완료함
이제 fix/login branch에서 master를 merge 하려 하는데, 충돌이 났다고 뜸
Resolve conflicts 클릭
상태를 보니 login.txt가 양쪽에서 수정된 상태
login.txt 파일에 직접 가서 일일이 엔지니어가 수정한 것, 내가 수정한 것을 비교한 다음 저장
*Incoming Change : 남이 고친거
Current Change : 내가 고친거 (master)
수정 완료 후
똑같이 add, commit, push
-> 알아서 merge됨
* $git log 여태까지 로그 보는 명령어
'Git' 카테고리의 다른 글
[Git] 이클립스에서 target 폴더 ignored 하기 (커밋시 제외시키기) (0) | 2020.05.19 |
---|---|
[Git] Fork한 github소스 최신 버전으로 유지하기 (0) | 2020.01.28 |
Git : Authentication failed 에러 처리 (0) | 2020.01.15 |
Git 원격저장소 폴더 삭제 (0) | 2020.01.02 |
Github 사용법, 주요 개념, 소스트리 사용법 (0) | 2019.11.03 |