2주만에 돌아온 거 실화? 그동안 공부를 안 했기 때문이죠...^^
최악의 방학을 보낸 저..정말 반성합니다...
아무튼 그 사이의 근황을 말하자면..
교내 컴공동아리 와플스튜디오에 합격했다!
합격의 기쁨도 잠시... 첫 오티 과제인 깃허브에 세미나 신청하기부터
혼자 못해서거의 꼴찌로 세미나 신청을 하며 내가 원하던 세미나를 못 듣게 되었다 ㅠㅠ
그래서 이 악물고 깃과 깃허브를 마스터하고자 공부했다.
깃, 깃허브 내가 어려워했던 개념 위주로 좀 정리를 해보겠다.
1. Git이란?
버전관리도구.
깃을 통해서라면...
1) 폴더의 상태나 변경 내역을 쉽게 기록할 수 있다.
2) 변경 이전 상태로 돌아갈 수 있다.
3) branch로 불리는 평행우주를 만들 수도 있다. (다른 브랜치에서 마음껏 수정해도 원래 브랜치는 그대로!)
2. Git 사용법
나는 git bash를 통해 git을 사용하는데, terminal / cmd를 사용할 수도 있나보다.
git 시작하기
1) git bash에 내 정보 등록하기
git config --global user.name "이름" git config --global user.email "이메일" |
꼭 깃허브와 같지 않아도 되는 것 같은데 왠만하면 같게 하자..
2) git init
git이 깔려있다고 모든 폴더가 자동으로 감시 하에 놓이는 게 아님.
"모든 폴더 중에서 이 폴더를 감시해줘!" 라고 말할 명령어가 필요한데, 그게 바로 "git init"
how? 감시가 필요한 폴더 위치로 이동 (cd [폴더위치] 명령어 통해) -> git init 입력 -> ls -al 입력했을 때 .git 이 보이면 성공!
(밑줄은 아래 "그 외의 다른 명령어들"에서 다루겠다)
git에게 변경사항 알리기
1) git add [파일이름] : "이 파일도 감시해줘" 변경사항을 기록할 파일 등록
내가 init을 통해 감시해달라고 한 파일이 명령 이후에 변경(new파일 추가)이 되었다면,
git status해보면 untracked file이라 뜨면서 새로운 거 생성됐다고 알려줌.
git add [새로생성된파일이름] 하면 새로운 파일 등록!
따라서 다시 git status해보면 new file이라고 뜸 (이제 얘도 추적하겠다는 의미)
git add . 와일드카드. 새롭게 생성된 모든 파일 다 한번에 add 가능. 추천합니다 |
2) git commit -m [커밋 메세지] : "지금상태 스크린샷 떠줘" 변경 내역을 기록
* 변경 기록을 알아볼 수 있도록 제목을 달아야한다!
변경사항 되돌리기
Reset은 공통적으로 commit hash 이후의 commit을 없앤다.
반면 Revert는 돌아가고자 하는 commit을 지금까지의 이력에 추가!
1) git reset -- mixed [커밋해시] : (기본 세팅) 돌아가려는 커밋 이후의 이력은 삭제, 파일 수정사항은 그대로! 2) git reset -- hard [커밋해시] : 돌아가려는 커밋 이후의 이력 + 수정사항 전부 삭제(함부로 하지 마세요ㅠㅠㅠ) 3) git revert [커밋해시] : 돌아가려는 커밋을 현재까지의 이력에 추가! + git reset —soft/merged/keep, git revert 등 굉~장히 많은 옵션이 있음. |
커밋해시는 git log 에서 commit 옆에 써있는 매우 긴 덩어리..
+ git log : 변경 내역 조회(그동안의 커밋 내역 보여준다)
(HEAD -> main) : 현재 브랜치의 가장 최근 커밋(head)이 main에서 이뤄졌다(?)
branch(평행우주) 만들기
- branch는 지금까지의 작업 상태 보존하면서 새로운 작업 추가하고 싶을 때, 새로운 브랜치 파서 작업해보고 기존의 브랜치에 합친다.
- 새로운 브랜치에서 작업하면 기존 브랜치는 변화 없음~
- default로 존재하는 하나의 branch의 이름은 master또는 main이다. 운영체제에 따라 다른듯?
git checkout -b [새로운 브랜치 이름] : 새로운 브랜치 생성! 팍 직후에는 두 브랜치 상태가 동일 |
다른 브랜치 명령어
- git branch : 내가 지금 어떤 브랜치에 있는지, 어느 브랜치들이 있는지 알려줌 - git checkout [브랜치 이름] : -b 없이 쓰면 원래 존재하는 해당 브랜치로 이동 |
* vs code등에서 파일 내역 확인할 때는 내가 지금 위치하고 있는 브랜치의 코드가 보인다. 다른 브랜치 코드 보고 싶으면 checkout으로 이동 후 볼 수 있다.
그 외의 다른 명령어들
- cd [폴더위치] : 현재위치를 [폴더위치]로 이동. - 다른 방법 ) cd 쓰고 폴더를 bash에 드래그 / 해당 폴더 우클릭해서 git bash here해도 가능- [폴더위치] 자리에 .. 넣으면 상위폴더로 이동 ( . 현재위치 .. 바로 윗 폴더)
- git : git 에서 쓸 수 있는 명령어들 나옴
- ls(list) : 현재 내 위치에 있는 폴더들 보여줌.
뒤에 추가적으로 붙여서 다르게 명령할 수도 있는데,,
+ ls -al : 숨긴 폴더까지도 보여줘! 이렇게 되면 .git라는 폴더도 나오게 되는데, .git는 git init이 스크린샷 뜨고 감시하는 폴더로, 절대절대절대 삭제해서는 안되는 폴더! (가끔 에러 구글링하다보면 .git지우라는 경우 있는데 절대 안돼요..)
3. Github란?
깃의 원격 저장소로,
내 깃을 백업하거나/ 남의 깃을 내 컴터에 내려받아 작업하거나 / 여러 사람들과 하나의 깃을 가지고 작업하는 게 가능하게 한다.
4. Github와 연동하기
내 깃 백업하기 : 내 로컬 저장소를 원격(remote) 저장소(repository)에 추가
1) 새로운 레포지토리를 깃허브에서 만든다.
2) git remote add [별명] [레포주소] 를 통해 레포지토리를 내 로컬 깃에 등록한다
3) 로컬 깃의 내용을 git push (--set-upstream origin master) 통해 깃허브의 새로운 레포지토리에 업로드한다
깃허브의 git 받아서 작업하기 (원격 저장소를 내 로컬 저장소로)
이미 감시가 되고 있는 파일을 내려받아서 내 파일과 연동시키는 과정 (그럼 git init할 필요가 없는건가?)
1) 로컬(내컴퓨터) 레포지토리를 만들고 싶은 위치로 이동
*주의 : git이 이미 켜져있는 폴더에 새로운 git 클론하면 꼬이기 때문에 안돼!!
2) git clone [레포주소] 통해 깃허브의 레포지토리 다운받기
여러 사람과 하나의 깃으로 작업하기 1
1) 위의 과정 (clone)을 통해 레포지토리 다운받고
2) 다운받은 파일을 수정한 후 commit !
3) git push를 통해 깃허브에 푸시하기(그러면, 수정된 파일이 로컬 레포지토리에서 원격 레포지토리로 이동!)
2-2) 원격 레포의 변경사항을 내 로컬 깃에 반영할 때는 git pull을 이용!
여러 사람과 하나의 깃으로 작업하기 2 - git fork/pull request
*내가 와플 첫 과제를 할 때 했던 방법이다... 절대절대 완벽하게 이해하자....부들부들부들부들
1) git fork : 남의 깃허브 레포를 이용해 작업하고 싶을 때, 내 깃허브 계정에 복사본을 생성하는 방법!
fetch-upstream을 이용해 원본 레포의 수정 사항을 내 레포에 바로 반영할 수 있다
how? fork할 내 원격 레포 만들고, 남의 깃허브 레포 들어가 오른쪽 상단에 있는 fork눌러서 fork하고, 그 후엔 내 레포에서 clone하고,,수정하고,,push하고,,
2) pull request : 남의 깃허브 레포를 이용해 작업한 결과(내 레포에 push는 된 상태)를 그 레포에 보내고 싶을 때, 반영을 요청하는 방법
1번의 push와 달리 pull request후에는 그쪽에서 merge까지 진행해줘야 해당 레포에 결과가 최종적으로 반영된다.
주석 및 용어 추가 정리
- GUI : 그래픽 사용자 인터페이스(graphical user interface) 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것
- CLI : 명령 줄 인터페이스(command-line interface) 또는 명령어 인터페이스. 가상 터미널 또는 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식.
나는 이제 버튼 누르기(gui)보다 컴퓨터에 명령어를 입력(cli)하는 방식을 통해 인터페이스를 더 자주 할 것이다.
- 로컬 local : 내 컴퓨터윈도우 git bash에서 복사 = ctrl + insert, 붙여넣기 = shift + insert
- GIT의 스테이징 : 파일을 staging area로 옮기는 것! git add를 통해 "기록하고 싶은(감시받고 싶은) 변경사항들의 모음"이 존재하는 staging area로 파일을 옮겨 깃이 감시하게끔 할 수 있다.git commit을 통해 이 변경사항들이 기록이 되면 이 기록들은 repository라는 "변경 이력들의 모음"에 저장된다.
여러 레포지토리 파일들
- README.md : 해당 레포에 대한 개괄적 정보 기록하는 파일. 마크다운 문법 사용. 파일명은 반드시 이거로!
- .gitignore : 깃허브에 올라가길 원하지 않거나, 올라가기엔 용량이 너무 큰 파일이 올라가는 것을 막기 위해 작성하는 문서.
gitignore.io에서 자동 생성 가능하고, 주로 운영체제, 이용하는 프레임워크 등을 자동으로 추가 (뭔소리야)
결론: