개발하는 무민

[코드프레소] Java 웹개발 트랙 체험단 - 02강 Git 기본 플로우 이해 본문

Project/[코드프레소] JAVA웹개발트랙

[코드프레소] Java 웹개발 트랙 체험단 - 02강 Git 기본 플로우 이해

무민_ 2022. 1. 13. 14:48

 

1. Git 기본 플로우 이해를 위한 실습 Part-1 (작업 디렉토리, 스테이징 영역)

내가 작업한 부분을 원격 저장소에 올릴때에는 연결되어있는 다른 개발자들의 코드를 pull로 땡겨오고 push를 통해 나의 코드를 커밋한다.

 

- 저장소를 생성하는 방법

  • 방법1. clone 하기
  • 방법2. 로컬저장소 생성 → git init 초기화 → 원격 저장소 연결 git remote add

 

- 상태정보를 위한 기본 명령어

$ git status : 현재 폴더 내 파일의 상태 확인하기

$ git log : 커밋의 히스토리 확인하기

근데 이대로 명령어를 치면 커밋을 생성하지 않아 없다고 나온다.

 

- 파일 생성 및 수정

$ vi TestService.java

vim 에디터로 파일을 생성해서 열고, 테스트로 내용을 입력한다.

생성했던 파일에 대한 정보를 확인할 수있다.

 

- 작업디렉토리의 파일 상태

  • untracked : 변경점은 발생했으나, git에 의해 관리되지 않은 파일, 단 한번도 스테이징 영역어 포함되지 않은 파일
  • tracked : git에 의해 관리되는 파일, 스테이징 영역에 한 번 이상 포함된 파일

- 스테이징 영역에 변경점 추가

$ git add TestService.java

$ git status

add를 통해 변경점을 추가하자 git이 해당 파일을 관리하고, new file로 인식한다.

 

명령어를 실행하면 warning 로그가 출력될텐데,

이게 거슬린다면 $ git config —global core.safecrlf false 명령어를 통해 경고 메시지 설정을 off 시킬 수 있다.

$ git config —global core.safecrlf false

 


 

2. Git 기본 플로우 이해를 위한 실습 Part-2(코드 변경점과 커밋)

  • 커밋

커밋의 단위는 회사마다, 작업마다 다르다.

커밋의 단위가 너무 크면 다른 개발자들이 변경점을 파악하는게 쉽지 않다.

개발을 하기에 앞서 조직의 특성에 맞추어서 커밋의 단위를 정하는 것이 중요하다.

 

  • 커밋 생성
$ git commit

명령어를 입력하면 commit에 대한 메시지들을 입력하는 에디터 창이 나온다.

인서트 모드로 변경한뒤 내용을 입력해준뒤 저장 나가기

완료시 나오는 문구

파일 1개가 변경이 되었고, 2개의 라인이 추가됨을 설명하고 있다.

 

  • 에디터 실행 없이 인라인으로만 커밋을 만들고 싶다면
$ git commit -m “커밋 메시지 입력”

파일의 상태를 다시 보면 더 이상 변경된 파일이 없음을 알 수 있다.

 

  • 커밋 히스토리 확인
$ git log

첫번째 줄 : 커밋의 아이디

두번째 : 커밋한 개발자의 정보

세번째 : 커밋한 시간

마지막은 커밋 메시지가 나타난다.

 

  • SHA-1

http://www.sha1-online.com/

 

SHA1 online

sha-1 md5 md2 md4 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 ha

www.sha1-online.com

해당 페이지에서는 데이터에 따라 해시값이 어떻게 생성되는지 알 수 있다.

텍스트를 입력하면 해쉬값이 나온다. 해당 해쉬값이 커밋의 id가 된다.

 

  • 파일 수정하기
$ vi TestService.java

를 통해서 파일을 다시 열어서 수정한다.

 

  • 변경된 코드 확인
$ git diff

간단한 변경점을 확인할때 사용하면 좋다.

변경점이 많은 경우 파악하기가 어렵다.

초록색의 플러스가 표시된 부분이 변경된 부분이다.

현업에서는 많이 사용하지 않는다.

간단하게 확인 할때만 사용!

 

  • 상태 확인
$git status

수정을 했으므로 현재 스테이징 영역에 있는 상태는 아니지만,

깃은 한번 이상 추적을 시작하면 계속해서 관리한다.

 

 


 

 

3. Git 기본 플로우 이해를 위한 실습 Part-3 (커밋 생성과 복구)

 

  • 커밋 생성
  1. 스테이징 영역에 추가 git add
  2. 의미있는 변경이면 커밋 생성 git commit (인라인으로 커밋 생성 - git commit -m “커밋 관련 문구”)

git log 명령어를 통해 커밋이 완료 되었는지 확인할 수 있다.

 

  • Git 명령어 옵션 정보 확인
$ git log —help

명령어 뒤에 —help 옵션을 입력하면 해당 명령어의 메뉴얼 페이지가 실행된다.

 

 

  • 커밋 히스토리 관련 옵션

$ git log -u : 해당 커밋의 내용과 함께 변경된 diff의 내용을 볼 수 있다.

$ git log -u ‘commit ID’ : 커밋 아이디를 추가로 입력하면 특정 커밋에 대한 정보만 확인 가능

$ git log -1 : 숫자가 옵션으로 오는 경우 최대 몇개까지의 커밋을 출력할지 지정 가능

$ git log -2

$ git log —name-only : 변경된 파일 목록(파일의 이름들)까지 확인 가능

$ git log —oneline : 커밋을 간결하게 1줄로만 출력해준다.

$ git show ‘commit ID’ : 커밋 아이디를 지정해서 해당 커밋에 대한 내용과 diff의 결과를 얻을 수 있다. 2번째 명령어와 동일함.

 

  • 커밋 되돌리기1

1. 메시지를 변경하고 싶거나,

2. 커밋에 추가할 변경점이 있을 때 커밋 되돌리기 기능을 사용한다.

 

 

1. 커밋 메시지를 변경하고 싶은 경우

$ git commit —amend

마지막 반영한 최신의 커밋 메시지를 변경하고 싶은 경우 에디터를 실행

해당 파일의 내용을 수정 한 뒤 저장하고 나가면,

커밋 메시지가 수정된다.

  • 주의사항 : 되돌린 커밋 메시지는 복구할 수 없다!

 

2. 커밋에 추가할 변경점이 있는 경우

git commit —amend

커밋에 추가할 변경점이 있을 때

  • 파일을 수정 후, 스테이징 영역에 추가
  • git commit —amend 명령어로 커밋 생성
$ vi AmendSercive.java (수정할 내용을 담은 임의의 파일 생성)

$ git add AmendService.java (스테이징 영역에 파일 추가)

$ git commit —amend (커밋을 수정하기 위한 옵션의 명령어 입력)

변경할 메시지 내용을 입력하고 저장 후 나가준다.

git log를 통해 커밋 히스토리를 다시 확인해보면, 수정한 내용이 포함되어 커밋 메시지가 변경되어 있음을 알 수 있다.

 

- 내용을 수정한 java 파일도 커밋에 정상적으로 들어가 있을까?

$ git show

$ git show를 사용하여 확인.

기존에는 testservice에 대한 변경점만 있었으나, 위의 명령어들로 인해 amendservice에 대한 커밋 또한 추가되었음을 알 수 있다.

여기까지의 되돌리기 방법은 덮어씌우는 방식이기 때문에 한번 변경하면 되돌릴 수 없다는 단점이 있다.

 

- 덮어쓰는 방법 말고 다른 방법은 무엇이 있을까?

→ 롤백이 반영된 새로운 커밋을 생성하는 방식을 사용하자.

 

즉, 이미 커밋을 만들었는데

  1. 커밋 히스토리를 유지하면서 내용만 롤백하는 경우
  2. 히스토리의 관리가 매우 중요한 실무에서 주로 사용되는 방식이다.

 

  • 커밋 되돌리기 2!
$ git revert

git에서는 코드를 원복한다 라고 한다.

반영한 코드를 제거, 변경을 취소 등... git에서는 원복의 단위가 커밋이다.

 

$ git revert ‘마지막에 반영한 커밋 ID’

위의 명령어를 통해서 커밋을 원복할 수 있다.

명령어를 치면 새로운 커밋을 반영할 수 있는 에디터 창이 나타난다.

이 새로운 커밋은 우리가 리버트한 최신 커밋에 대한 원복 커밋이다.

내용을 보면 최신에 추가했던 amendservice는 삭제된다고 나와있고, testservice에 대한 커밋이 수정 될 것이라고 나온다.

 

revert 커밋의 메시지는 자동으로 생성된다.

이대로 저장하고 종료해도 무방함!

 

변경된 커밋이 잘 적용 되었는지 히스토리를 확인해본다.

$ git log

로그를 보면 3개의 커밋을 확인할 수 있다.

 

우리는 2번째 커밋을 revert했다.

맨 위에 최신으로 떠있는 것이 가장 최신에 반영한 커밋이고, 원복된 커밋이다.

이렇듯, 커밋의 히스토리는 그대로 유지하면서 원래의 내용을 원복시키는 구조이다.

마지막 커밋에 의해 amendservice는 현재 디렉토리상에 없어야 한다.

 

현재 디렉토리를 확인하기 위해 $ ls- la를 해보자.

amendservice.java가 현재 디렉토리 내에 없음을 알 수 있다.

이유는 위에서 두번째 커밋이 원복되었기 때문이다.

 

(노션이 오류가 나서 캡쳐했던 이미지가 모두 날아가서 여기까지의 내용은 글로만 적어본다 ㅜㅜ)

 


 

4. Git 기본 플로우 이해를 위한 실습 Part-4 (원격저장소에 커밋 반영하기)

  • 원격저장소에 커밋 반영하기
$ git push [저장소별칭][현재브랜치]

저장소별칭 - git remote add에서 등록했던 별칭, 별칭의 이름은 $ git remote -v로 확인할 수 있다.

명령어로 확인해보면 지정한 저장소의 별칭이 origin이라는 것을 확인할 수 있다.

별칭과 함께 저장소의 주소를 확인할 수 있다.

현재 브랜치는 민트색 글자 (master)를 의미한다.

 

명령어를 입력하면 암호를 입력할 수 있는 창이 생성된다.

Git 초기설정시 지정했던 아이디와 비밀번호를 입력한다.

 

*이거 진행하다가 에러 발생함

remote: HTTP Basic: Access denied

권한오류인 경우에 뜨는 에러같은데 .. GitLab 비밀번호를 다시 설정해서 해결했다.

그리고 git 버전이 너무 예전 것 같아서 업데이트도 했음

명령어가 정상적으로 작동하면 위와 같이 완료되었다고 내용이 나온다.

 

왜인지 모르겠는데 나는 홈페이지에서 merge를 직접 눌러줘야 커밋이 올라온걸 확인할 수 있었다.

 

  • git을 통한 협업

Git을 사용하다보면 내가 개발한 코드를 push하는 경우 보다 원격저장소의 코드를 나의 PC로 클론하는 작업이 많이 이루어진다.

 

  • 원격저장소와 로컬 저장소 생성 방법은 앞서 말한 것처럼 2가지가 있다.

방법1.

  1. 로컬저장소에서 폴더 생성
  2. 로컬저장소 초기화 init
  3. 원격 저장소와 연결 git remote add

방법2.

  1. 로컬저장소에서 폴더 생성
  2. 원격저장소 복사 git clone
  3.  
  • git clone 실습하기

git의 오픈소스 프로젝트를 clone해보자.

git 프로젝트의 주소 : https://github.com/git/git.git

 

GitHub - git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the

Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via GitGitGadget (https://gitgitgadget.github.io/). Please follow Documen...

github.com

 

$ git clone 명령어를 통해 pull해올 수 있다.

 

 

$ git log —reverse

가장 오래된 커밋의 순서대로 확인 할 수 있다.

 

 


 

5. Git 을 통한 협업 실습 Part-1

  • GitLab 멤버 등록하기

members 메뉴에서 추가할 유저의 이메일을 등록하고 권한을 주어서 프로젝트 멤버로 등록한다.

추가적으로 브랜치에 대한 권한을 주기 위한 설정을 진행한다.

 

프로젝트 멤버가 원격 저장소에 push, merge등을 할 수 있는 권한을 주기 위해 설정해주는 부분.

 

 

 

6. Git 을 통한 협업 실습 Part-2

(A개발자는 bash에서 파일을 생성하고, B개발자는 페이지 내에서 파일을 생성한다고 가정하고 실습한다.)

 

$ git push origin master

명령어를 통해 원격 저장소에 커밋을 반영한다.

 

실행하면, 반영이 실패되었다고 메시지가 뜨는데

이는 B개발자가 원격 저장소에 A의 로컬저장소에는 없는 파일을 생성했기 때문이다.

즉, B 개발자의 커밋에 대한 내용이 없기 때문이다.

 

따라서 git push를 하기 전에는 원격저장소에 있는 다른 개발자들의 커밋을 pull로 내 로컬저장소에 가져 온뒤 push를 진행해야 한다.

 

$ git pull origin mater

원격저장소의 상태와 내 로컬 저장소의 상태를 수시로 맞춰주는 작업을 진행해야 불필요한 충돌을 피할 수 있다.

위의 명령을 통해 원격저장소의 커밋을 가져오는 작업을 한다.

 

명령어를 입력하면 에디터 창이 뜨는데, git pull을 하는 순간 A개발자의 로컬저장소에 자동으로 merge를 진행하고 merge 커밋을 자동으로 생성하기 때문에 뜨는 창이다.

 

merge commit에 대한 메시지를 입력하고 싶으면 위의 에디터에 내용을 입력해주면 된다.

 

- git pull이 완료되었는지 나의 로컬저장소를 확인해보자.

$ git log

B 개발자가 만들었던 README.md 파일에 대한 커밋이 들어와있음을 확인할 수 있다.

 

다른 개발자의 커밋을 불러들여왔으니 진행하고자 했던 push 명령어를 다시 실행한다.

$ git push origin master

성공적으로 실행하면 위와 같은 내용이 뜬다.

gitlab페이지에 들어가면 정상적으로 커밋이 진행되었음을 확인할 수 있다.

 


https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr

 

블로그가 계속 날아가서 작성하기가 힘들다..^_^

이번주도 화이팅