1. 시작하기 앞서, Git 이란 무엇인가 찾아보자!
- Git은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다. (위키백과 발췌)
! 한 마디로 말하면 코드 변경점을 기록해주고, '버전을 관리해주는 도구'라고 이해하면 된다.
2. 리눅스 명령어
1) pwd ( print working directory )
- 현재 내가 작업하는 폴더를 보여달라는 뜻이다.
- ~ 는 home(홈)이라는 경로이며, 우리가 보는 데스크탑보다 더 상위의 폴더를 말한다. ( 바탕화면보다 상위의 폴더라니. 처음 알게 된 존재라 충격적이다.)
2) ls (list)
- 내 폴더 안에 있는 폴더와 파일 내역을 보여준다.
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test
$ ls
index.html
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test
$ pwd
/c/Users/User/Desktop/Git-Test
-> Git Bash 를 설치해 VSCode와 연결하고 명령어를 실행해봤다. 강사님의 화면과는 다르게 user name이 User@DESKTOP ... 으로 나와서 뭔가 잘못되고 있나 했는데 팀원들에게 물어보니 그건 따로 설정해야 나오는거라고 정상이라고 해줘서 안심이 되었다. 작은거 하나라도 놓치면 에러가 나는 코딩.. 항상 노심초사 하며 연습을 하고 있다.
3) ls -a
- 전체 파일을 보여준다. (보통 . 으로 시작되는 숨겨진 파일도 모두 보여줌)
- 숨겨진 파일은 보안, 직관성 등 여러 이유로 숨겨져 있음!
4) cd 폴더명 (change directory)
- ls 명령어에서 확인된 폴더로 이동 가능 ( 마치 해당 폴더를 더블 클릭해서 들어간 것과 같은 효과이다 )
- 확인된 폴더로 이동 후엔 계속 그 안의 폴더로 이동이 가능하다.
- .. : 한 단계 위의 폴더라는 뜻이다. ex) cd desktop -> cd .. -> 상위 폴더로 이동!
- / 를 이용해 한 번에 깊숙하게 이동이 가능하다.
5) mkdir ( make directory )
- 현재 경로에서 폴더를 생성하는 명령어
- directory는 정확히 폴더라는 뜻은 아니지만 비슷한 개념으로 이해가 된다.
6) touch 파일명
- 현재 경로에서 파일을 생성하는 명령어 (없는 파일일 때)
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ touch text.txt
-> touch text.txt 명령어를 실행했더니 없던 파일이 git-test 폴더에 생성이 되었다! 다른 프로그램도 이런 명령어가 있다면 좋을텐데...
이미 있지만 내가 모르는 걸 수도?! 정말 편리한 기능이라고 생각되는 명령어였다.
- 정확히는 파일의 생성과 파일의 날짜, 시간을 변경하는 명령어이다.
3. Git & Git Hub
- Git을 쉽게 알아보자
회사나 학교에서 팀 프로젝트를 한 번이라도 진행한 사람이라면 이해할 이야기이다.
팀플은 기본적으로 각자 맡은 부분을 작업해와서 한 번에 합쳐 최종 수정이 이루어진 후 작업물을 제출하게 된다.
최종 수정은 보통 한 번에 이루어지지 못한다. 나의 경우 팀플을 했을 때 파일이름이 최종, 진짜최종, 정말진짜최종, 찐막최종진짜최종 등등 최종이라는 이름으로 파일을 계속 수정하다가 정말 마지막에 학과명_조이름_프로젝트이름 으로 변경되어 제출되곤 했다.
이러한 예시처럼 파일을 여러 개로 두고 수정하다보면 나중엔 어떤 것이 최종으로 수정되었는지 파일의 속성에 들어가 확인해야하는 번거로움이 있었다.
Git은 그때 그때 새로운 것이 나타나면 바로 저장되어서 나중에 하나의 폴더 내에서 코드의 변경점을 기록하기 위해 사용한다.
가령, 자신이 디자이너라고 생각해보자. 초안을 보낸다고 고객사에서 단 번에 OK하는 일은 잘 없다. 보통 수정의 수정을 거치다가
결국 초안으로 돌아가는 경우도 다반사이다. Git의 경우 과거의 코드 기록이 모두 남아있기 때문에 쉽게 되돌아갈 수 있다!
즉, Git은 코드 변경점을 기록하고 버전 (형상) 을 관리해준다.
- Git Hub를 쉽게 알아보자
새로운 노트북을 사게 되었는데 전에 노트북에 있던 자료들을 아직 백업하지 못한 상태가 지속되던 날이 있었다. 내가 새로운 노트북을 샀다는 소식에 동생은 바로 내 노트북을 포맷해버렸다. 어디에든 미리 백업해둘걸! 하는 후회가 있었지만 되돌릴 수는 없었다.
이와 비슷한 상황에서 Git Hub 가 있다면 온라인 공간에 백업을 해둘 수 있다. 또한 이렇게 업로드된 파일은 내가 원하는 사람에게 쉽게 공유가 가능하다. 즉, Git Hub는 백업과 공유가 가능한 온라인 코드 저장소이다. 이러한 특성 덕분에 공동 작업이 편리하다.
4. Git 필수 명령어 1
1) git init : 코드 관리를 시작하는 명령어 (initialize 의 준말)
- 프로젝트 시작 전 한 번만 입력하면 된다. 여러 번 입력해도 문제가 되진 않지만.. 굳이?
- 정확한 프로젝트 폴더(경로)에서 입력해야 한다. -> 잘못하면 데스크탑 전체 파일, 폴더에 다 기록이 된다. 그러면 용량이 커지고 느려진다..
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ git init
Reinitialized existing Git repository in C:/Users/User/Desktop/Git-Test/.git/
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ ls -a
./ ../ .git/ index.html
- 강의 듣기 전 이것 저것 만져보느라 이미 깃허브에 레퍼지토리가 생성되어 있어서, git init을 실행하니 Reinitialized 라고 떴다. 그 후 ls -a 를 통해 숨겨진 폴더인 .git 이 나타나는 것을 확인하면 된다.
- .git이라는 폴더가 생기면 이때부터 코드 변경을 git에서 추적하게된다.
- 주의할 점은, pwd 명령어로 현재 경로 확인 후 경로가 다르면 cd 명령어로 이동 후 git init 명령어를 실행해야 한다.
2) git add 파일명 : 저장할 파일을 지정
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ git add index.html
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ git commit -m "index.html 파일에 첫 번째 코드 라고 입력"
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'User@DESKTOP-SQMNB33.(none)')
- git commit 후 Please tell me who you are 이라는 에러가 뜨면서 저장이 안되는 경우, 계정 설정을 하지 않았기 때문이다.
그럴 땐 git config global --user.name 유저이름 을 통해 계정 등록을 하면된다.
- 너무 많은 파일을 저장해야할 때는 git add . 명령어를 통해 한 번에 모두 저장할 수도 있다.
3) git commit -m "메세지입력" : 실제로 저장하는 명령어
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ git add hello.html
User@DESKTOP-SQMNB33 MINGW64 ~/Desktop/Git-Test (main)
$ git commit -m "hello 파일 생성"
[main e718f4f] hello 파일 생성
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.html
- git add hello.html 명령어를 이용해 파일을 지정하고, git commit을 이용해 파일을 저장해줬다. 기존에 있던 index.html은 저장이 안되어 새로운 코드를 입력해도 초록 색으로 알림창이 뜨고, hello.html은 저장하기 전엔 파일명이 초록색이었다가 명령어로 저장을 해주니 검은색으로 바뀌었다.
4) git status : 변경 상태 확인
- 어떤 파일이 변경되었는지, 어떤 파일이 add(지정) 되었는지 등등 확인
- git add 와 git commit 을 사용하고 나서 git status를 사용하면 수정되었지만 저장되지 않은 파일을 알 수 있다.
5) git log : 저장 내역을 확인하는 명령어
- 저장되었던 내역이 commit id 와 함께 나오고, 이러한 요소를 통해 변경된 내용을 비교한다든지, 변경점을 추적한다든지 하는 다양한 일을 할 수 있다.
- END에서 빠져나오기 위해서는 q 버튼을 누르면 된다.
- 해당 명령어가 정말 유용하다고 생각한 게, 작성자가 누구였는지 author 도 확인 할 수 있었다. 누군가 코드를 잘못 수정했다면 변경점을 추적해 범인을 잡을 수 있겠다고 생각했다.. 그게 내가 되어선 안된다고도!
6) git push : 수정된 코드를 git hub에 반영
- git hub에서 새로운 레퍼지토리를 생성하고 git과 연결해줬다.
- 이후 수정하고 저장된 내역은 git push origin 브랜치명 을 입력해주면 된다. ( 아직 브랜치를 배우지 않아서 main이라고 입력한다.)
7) git clone
- 팀원들과 협업을 한다고 했을 때, git clone 레퍼지토리주소 . 을 입력하면 올라가있는 코드를 가져올 수 있다.
- git clone을 통해 깃허브에 올라간 코드를 가져오려고 했는데, not found 에러가 나서 파일이 가져와지지 않는 문제가 발생했다.
구글에 검색도 해봤지만 모두 안된다.. 아무래도 연동 과정에서 무언가 잘못된 듯 하다. 질문 시간에 물어보고 진행을 해야겠다!
- 어쨋든, confirm을 받은 팀원들이 내 레퍼지토리에 올린 코드를 가져와 각자 수정하고 다시 업로드 하고, 그것을 내가 또 받아볼 수 있고 하는 편리한 시스템을 이용하기 위한 명령어인듯 하다.
8) git pull
- 변경점을 가져와서 다시 합치는 것
- git pull 명령 시 remote ~~~ 에러가 뜬다면? git config pull.rebase false 를 입력해주고 다시 git pull을 하면 된다.
- 터미널에 아무것도 입력이 안되는 vim 에디터가 뜬다면? esc / : / wq / enter 을 차례대로 누르면 된다.
- conflict (충돌) 에러가 난다면? 충돌한 파일을 확인해보면 같은 파일의 같은 위치에 코드가 변경되었기 때문에 에러가 난 것을 볼 수 있다.
그럴 땐 충돌이 난 코드 중 하나의 위치를 바꿔주거나, 삭제하는 등 수정을 해주면 된다.
Opinion
오늘은 본캠프가 시작한 날이다. 매일 늦게 자고 늦게 일어나다가 하루아침에 8시에 일어나는 패턴으로 바뀌니 몰려오는 피곤함이 엄청났다.
하지만 다가오는 미니 프로젝트도 기대되고, 새로 배운 Git과 Git hub의 내용을 복습하다보니 잠이 또 깨버렸다.
Git hub는 잔디를 심는 곳인줄로만 알았는데 정말 다양한 기능을 할 수 있었다. 마치 개발자들 사이의 구글 공유 문서같았달까... 물론
개발자들을 위한 것이니 아직 모르고 못쓰는 기능도 많을테지만.. 열심히 배워서 알차게 써먹어야겠다.
새로운 것을 배우는 것은 늘 어렵고, 암담하고, 그러면서도 기대가 되는 일인 것같다. 내가 개발이 적성에 맞을까? 안맞는 것같은데 하는
의심이 여전히 든다. 하지만 의심은 된다/ 안된다 두 가지 확신으로 끝난다. 아직 나는 그걸 판단할 수 없는 수준이라 한계까지 더 해보고싶다.
내일도 화이팅!!!
'내일배움캠프 > TIL' 카테고리의 다른 글
[Spring_4기 본캠프] 1주차 - 팀프로젝트의 마지막으로 | Day 15 (0) | 2024.11.07 |
---|---|
[Spring_4기 본캠프] 1주차 - 팀프로젝트와 Git | Day 14 (0) | 2024.11.05 |
JAVA 입문 _ 김영한의 자바 입문 강의 - Day 12[Scanner 훈련 2] (1) | 2024.11.01 |
JAVA 입문 _ 김영한의 자바 입문 강의 - Day 12[Scanner 훈련] (2) | 2024.10.31 |
JAVA 입문 _ 김영한의 자바 입문 강의 - Day 11[스코프, 형변환] (0) | 2024.10.30 |