스파르타 Git 활용 기초
종합 파일 :
kimminsoo -> sparta -> programming_basis -> sparta_git
____________________________________________________________________________________________________________
1주차
이번주 목표 :
1. 나 혼자 사용할 수 있는 Git 프로젝트를 만들어 본다 - commit, pull, push
2. 프로그래밍을 배울 때 마음가짐을 탑재한다.
__________________________________________
1-1 /1-2 필수 프로그램 설치
Git 학습 환경을 위한 필수 프로그램 설치
- Github 가입하기
- Homebrew, git 설치하기
- Sourcetree 설치하기
- Sourectree 설정하기
GitHub 에서 token(접근 권한 비밀번호) 생성. 키체인. 이걸로 소스코드 깃허브를 사용하기 위한 일종의 비밀번호로 활용하는 거야.
=> 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
*****************
나는
https://www.youtube.com/watch?v=sdBTXnvfFmY
[모두의 깃&깃허브] macOS에서 소스트리-깃허브 연동하기. SSH연결. 컴퓨터와 github 가 안전하게 통신할 수 있도록 해주는.
여기 방법으로 계정을 연결했어. 원격 저장소 연결해줄 때에도 SSH로 해줬어.
=> 해당 매모는 ‘메모’ => 미니프로젝트 / 깃 메모
=> 참고로 계졍 연결할 때는 인증 방식: OAuth,
프로토콜 : SSH, 키 : id_rsa.pub 로 설정.
__________________________________________
1-3 Git은 뭐고, Github는 무엇인가요.
git이 무엇인지 살펴 보고, 핵심 원리를 이해해 보자.
폴더 : sparta -> programming_basis -> sparta_git -> git_test
Sourcetree 를 사용해서 git init 과 같은 효과를 ui 적으로 구성할 수 있어.
사실 이렇게 시각적으로 관리하는 게 더 직관적인 것 같기는 해.
깃은 ‘뭐가 변했네?’ ‘어, 이번엔 뭐가 변했네?’ 하면서 ‘버전’을 관리해주는 프로그램이라고 보면 돼.
또한, 코드를 수정하는 과정에서 ‘어? 아까는 됬는데, 새로운 기능을 추가하고 나니까 안 되네?’ 싶을 때 이전 버전으로 돌아갈 수도 있어.
__________________________________________
1-4 버전관리와 commit - 개념탑재
하나 하나 사용방법을 외우는게 아니라 어떻게 사용하는지 흐름에 집중하자.
앞으로 개념탑재 - 실습 - 정리하기 순으로 배워나갈 거야.
git은 어떻게 버전 관리를 할까?
=> 즉, 버전 1과 버전 2가 어떻게 다른 것인지 어떻게 구분하는가.
기존에는 “minsoo_ver1.txt // minsoo_ver2.txt” 이런 식으로 파일로 구분했어. 마치 최종,최최종,찐최종 이런 식으로.
허나 git 에서는 프로젝트의 매 버전 상태별로 저장할 수가 있어. 이를 commit 이라고 해.
Commit
=> Git 은 commit(커밋) 을 통해 '현재 프로젝트의 상태'을 저장하고 조회해.
마치 파일을 저장 하듯 현재 프로젝트의 상태를 저장할 수 있는데, 이를 마치 사진으로 찍는 것 처럼 이라 하여 ‘스냅샷’ 이라고 부르기도.
또한 commit 은 행하는 순간 현재 프로젝트의 파일 내용, 언제, 누가 저장했는지 정보를 남겨.
즉 이전 commit 과 비교하며 무엇이 새롭게 달라졌는지, 그리고 현재 작업중인 프로젝트와는 어떻게 달랐는지를 확인할 수 있는거지.
이러한 commit 들의 기록을 히스토리, 혹은 커밋 로그 라고 부르기도.
<용어, 개념 정리>
- 버전 관리 : 누가, 언제, 현재 프로젝트의 내용이 어떤지 정보를 남긴다는 것
- commit : 현재 프로젝트의 상태를 저장한다. Git 이 이전 commit(이전에 저장한 프로젝트의 상태)를 알고 있으므로 자동으로 어떤 부분이 바뀌었는지 알려준다. 누가, 언제, 어떤 부분을 바꾸었는지 확인해볼 수 있다.
** commit 은 현재 프로젝트의 상태를 저장하는 것
단순히 ‘파일의 어떤 부분들이 바뀌었다’ 라고만 저장하는 것이 아냐. Commit 이전과 이후의 변화들을 한 눈에 보면서 비교할 수도 있고.
** 해당 원격 저장소의 commit 이력을 보고 싶을 경우, command + F 로 commit 찾아보면 commits 라고 커밋한 횟수가 적혀 있는 ui 가 있어.
그거 클릭해서 들어가 보면 돼.
__________________________________________
1-5 버전관리와 commit - 실습 01
김치 요리법 🍲 을 모으는 프로젝트를 Git 을 사용해 관리해보자.
파일 : sparta -> programming_basis -> sparta_git -> kimchi-recipe -> jeon.txt
kimchi-recipe 폴더를 실습 프로젝트로 취급할 거야.
그리고 해당 폴더를 Git 이 관리하는 폴더롤 만들어 볼거야. Sorcetree 를 사용해서.
- sourcetree 를 켜고 새로 만들기 - 로컬 저장소 추가하기 클릭
- 목적지 경로로 ‘kimchi-recipe 폴더’ 선택하기.
- 로컬 저장소 이름은 폴더명과 똑같이 ‘kimchi-recipe’ 로 설정. 기본값. 유형도 Git 그대로.
- Sourcetree 로컬탭에 ‘kimchi-recipe’ 가 생성되었음을 확인할 수 있어.
=> 이렇게 프로젝트를 git 프로젝트로 설정하는 것을 git 초기화(initialze, init) 이라고 함.
이러면 숨김 폴더인 < .git > 이라는 게 생기는 데, git 관련 작업 내역의 내용들이 저장되는 곳. Git 이 관리하는 파일이기 때문에 내가 수동으로 조작할 필욘 없어.
** git 프로젝트를 삭제하는 방법은 교재 노션 참조.
— Sourcetree 에서 커밋하기 —
Sourcetree UI 창에서 해당 git 프로젝트를 더블 클릭해서 프로젝트 상세창을 띄워.
만약 처음 git 프로젝트를 등록했거나, 내부에서 변경사항이 발생했을 경우 좌측 카테고리 ‘워크스페이스 - 파일 상태’ 에 새롭게 변경된 사항들이 뜰거야.
“대기 중인 파일” 란에는 변경사항이 발생한 파일이 올라가 있어. commit에 반영하고 싶은 파일을 체크하면 돼.
** 이게 ‘add’ 행위. 체크를 함으로써 status 에 넣은 거랑 같은 효과인 거지.
아랫 쪽 ui는 commit 메세지라고, commit 에 관한 상세 메세지를 입력하는 곳. 나중에 내가 이 commit 을 봤을 때 대충 어떤 version 인지 알 수 있도록.
이제 우측 하단의 ‘커밋’ 을 클릭하고 커밋 실행.
이 상태에서 좌측 카테고리 중 ‘히스토리’ 를 들어가 보면, 내가 커밋한 내용의 역사가 저장되어 있어.
여기서, jeon.txt에 수정사항을 발생시켜 볼거야. 텍스트 내용을 추가한 거지.
다시 소스트리의 상세창으로 가보면, ‘워크스페이스 - 파일 상태’ 에 ‘git 프로젝트의 어떤 파일에서 어떠한 변경사항이 발생했다’ 라고 바로 보여줘.
** 정확하게 어떤 내용이 사라지고 어떤 내용이 추가되었는지 바로 알 수 있어.
이 상태에서, 아까처럼 똑같이 commit 메세지 입력하고 커밋 실행.
똑같이 히스토리 가보면 새로운 커밋 내역이 생성되어 있어.
__________________________________________
1-6 버전관리와 commit - 실습 02
이번에는 여러 파일을 동시에 수정해보거나 여러 파일 중 하나만을 수정해서 커밋을 해볼거야.
추가로, 여러 파일에서 수정이 발생했을 경우에 일부만 commit 하는 방법도 해볼거고.
폴더 : sparta -> programming_basis -> sparta_git -> kimchi-recipe ->
— 여러 파일을 동시에 수정해보자.
- Jeon.txt 내용 수정 및 추가
- 김치볶음밥 요리법을 저장할 텍스트 파일인 < fried-rice.txt > 을 kimchi-recipe 폴더 안에 만들어보자.
- 김치찌개 요리법을 저장할 텍스트 파일인 < jjigae.txt > 을 kimchi-recipe 폴더 안에 만들어보자.
위 동작을 수행 후 소스트리 kimchi-recipe 상세창에 가보면, 파일 상태에 수정과 파일 추가 생성이 이루어졌다고 현황이 나와.
총 3개. 3개 전부 체크박스에 체크를 해줘. 모두 git status 에 add (혹은 스테이징 이라고 표현) 를 해주겠다는 뜻.
이 상태에서 커밋 메세지를 입력하고 커밋 버튼 클릭.
— Commit 한 번 더 해보자.
대상 : fried-rice.txt 수정.
이번엔 하나만 해보는 거야. git이 참 똑똑한게, jeon.txt 와 jjigae.txt 는 변경 사항이 없으니 ‘파일 상태’ 카테고리에 새로 갱신되지 않고,
변경 사항이 있는 fried-rice.txt 만 갱신이 돼.
즉 어떤 파일에서 어떤 부분이 변경 되었는지 딱 그 사항만 캐치한다는 거야.
— 다음 commit은?
=> 수정된 파일 중에 내가 작업내역으로 저장하고 싶은 것만 선택해서 commit.
즉, git status 에 git add 를 선별해서 넣는다는 거지.
대상 :
1. Fried-rice.txt - 5번 내용 추가
2. jjigae.txt 레시피 1, 2단계 내용 추가
문제는, 아직 jjigae.txt 의 내용이 완성되지 않았어. 즉, 유의미한 commit 을 하기에는 내용이 부실해.
따라서 이번 커밋에서는 김치 볶음밥 요리법, 즉 fried-rice.txt 만 반영할 거야.
즉 commit 마다 작업 범위를 단순화 시키는 거지. 이러면 작업 내역이 깔끔해져.
— 지금까지 한 commit 내역 보기 - commit history, commit id —
=> 즉, commit 을 해 온 역사를 살펴본다는 것.
소스트리의 kimchi-recipe 항목의 상세창(앞으로는 kimchi-recipe 프로젝트의 워크스페이스 라고 표현) 에서 왼쪽 카테고리 중 ‘히스토리’ 탭을 선택.
Commit 의 역사, 연대기를 확인할 수 있어. “그래프” 필드를 보면 커밋들이 이어져 있음을 시각적으로 알 수 있지.
그 외에도 ‘설명’, ‘커밋id’, ‘작성자’, ‘날짜’ 등도 확인할 수 있어.
또한, 각 commit 항목들을 클릭해 보면 해당 commit 시점에서 어떠한 변동 사항이 있었는지도 알 수 있어.
** 맨 위에 Uncommited changes(커밋되지 않은 변경사항) 는 아직 커밋되지 않는 변경사항이 있다고 알려주는 것.
commit 할게 남아있어~ 하고 알려주는 거야.
** commit id 는 나중에 커밋을 관리하고 되돌릴 때 사용하는 중요한 정보
Commit 은 다음과 같은 정보를 포함해.
——
- commit id : commit 을 구분하기 위한 유일한 값.
- 작업 일자 (날짜와 시간)
- 작업한 사람(작성자 author)
- 작업 내역 (commit 메시지)
- 작업 내역의 순서 : 해당 commit 의 직전 commit 이 무엇인지 정보
——
__________________________________________
1-7 버전관리와 commit - 정리
——
- 정리하기
- 버전관리를 한다는 건 어떤 의미일까?
- 작업내역 단위인 commit 에는 어떤 정보가 포함되어 있어야 잘 버전관리를 할 수 있을까?
- 지금까지 우리가 실습은 어떤 순서로 했었지?
——
++++
Commit 하기
=> jjigae.txt 혼자서 commit 해보기.
__________________________________________
1-8 원격 repo 사용하기 - 개념탑재
원격 repo(저장소)와 로컬 repo 의 개념을 구분하고, 이를 같이 사용한다는 것의 의미를 명확히 이해해 보자.
——
< 원격 repo와 로컬 repo 의 차이 >
'Git으로 관리되는 프로젝트' 를 Git 에서는 repo(리포, repository 리포지토리의 약자) 라고 부릅니다.
내 컴퓨터에 저장되어있는 리포지토리를 로컬 repo(local repository) 라고 합니다. Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격 repo(remote repository) 라고 합니다.
Github은 원격 repo 가 저장되어있고 + 개발자 커뮤니티 기능을 하는 서비스입니다. 우리는 Github 을 사용해서 원격 repo 를 만들고 관리해볼게요!
——
<원격 repo 와 로컬 repo 를 같이 사용한다는 것은?>
마치 one drive 나 구글 클라우드 드라이브를 내 컴퓨터의 특정 폴더와 연동시켜서 동기화하여 사용하는 것 처럼,
Git 또한 클라우드 서비스로 원격의 저장소와 로컬의 저장소를 연결시켜서 동일한 내용을 동시에 반영 시키거나 서로의 ‘버전’ 을 주고 받을 수 있어.
=> 로컬 repo 가 원격 repo 를 연결하는 것을 추적(Tracking, 트랙킹 / branch tracking) 이라고 함.
=> 로컬 repo 만이 내가 어떤 원격 repo 와 연결되어있는지를 알고 있어.
원격 repo 는 내가 어떤 로컬 repo 와 연결되어있는지 정보를 가지고 있지 않아. 따라서 언제나 로컬 repo 를 기준으로 동작을 이해해야 해.
=> 또한 클라우드 서비스의 ‘동기화’ 와 다르게, commit 을 자동으로 반영하지 않아.
정확히 내가 어떤 commit 만을 로컬에서 원격으로 반영하고 싶은지, 수동으로 설정해줘야 해. 이는 프로젝트를 더 섬세히, 잘 관리하기 위해서야.
***
- 로컬 repo 의 commit 들을 원격 repo 에 반영하는 것을 **push(푸쉬)**라고. commit들을 밀어넣기!
- 원격 repo 의 commit 들을 로컬 repo 에 반영하는 것을 pull(풀) 라고. commit들을 땡겨오기!
- 원격 repo 를 내 컴퓨터에서도 사용할 수 있도록 가져올 수도 있음. 일종의 초기 다운로드라. 이걸 clone(클론, 복제) 이라 부름.
__________________________________________
1-9 원격 repo 사용하기 - 실습
원격 저장소와 로컬 저장소를 연결하고, push, pull 등을 연습.
경우에 따라서 github에서 저장소를 없애는 방법도 숙지해 두고, 마지막으로 clone 도 한 번 해보자.
우선, 깃허브에서 새 ‘원격 저장소’ 생성하기.
=> 이름은 < kimchi-recipe >
* https 주소 : https://github.com/msdou46/kimchi-recipe.git
* SSH 주소. : git@github.com:msdou46/kimchi-recipe.git
다음으로, 만든 원격 저장소의 주소를 소스트리의 kimchi-recipe 워크 스페이스에 입력해서 연결 시키기.
=> 로컬 저장소가 원격 저장소를 추적(tracking) 한다는 개념.
- kimchi-recipe 워크 스페이스 우측 상단에 “설정” 클릭
- “설정” 클릭 시 떠오른 모달창의 우측 상단의 “원격” 클릭
- 원격 -> 추가 클릭
- 원격 이름 : origin
URL/경로 : https://github.com/msdou46/kimchi-recipe.git (kimchi-recipe 원격 저장소의 주소)
- 입력 했으면 확인, 확인.
이제 로컬 저장소인 < kimchi-recipe > 와 원격 저장소인 < msdou46/kimchi-recipe > 가 연결된 거야.
하나, 로컬 저장소의 설정을 바꿔주고 갈 거야. 바로 브렌치의 이름.
- 워크스페이스 좌측 카테고리 중 브랜치 항목 옆에 살짝 커서를 가져다 대면 > 표기가 나타나. > 를 클릭하면 master 가 등장.
- master 우클릭 -> 이름 변경 -> < main > 으로 재입력.
=> 왜 로컬 저장소의 초기 브렌치인 master 의 이름을 main 으로 바꾸는가?
원격 저장소에서는 초기 브렌치 이름이 main 이거든. 그래서 깃허브랑 브렌치 이름 맞춰줄려고.
—— 여기까지가 로컬 저장소와 원격 저장소를 트랙킹 해준다는 개념.
— push - 로컬 repo 의 commit 들을 원격 repo commit들에 합치기 —
- 소스트리 워크 스페이스 상단 중앙 쯔음에 ‘푸시’ 아이콘 클릭. 그럼 모달창이 뜰거야.
- 로컬 브랜치에서 main 선택하고 확인 클릭.
push 를 하는 순간 원격 repo 에 반영되어 있지 않은 commit들(즉, 이전 push 이후 ~ 현재까지의 commit 들)이 모두 반영됨.
— pull - 원격 repo 의 commit 들을 로컬 repo commit들에 합치기 —
- 우선 테스트를 위해서, 깃허브의 원격 저장소에서 commit 을 발생시켜 보자.
- Github 페이지에서 kimchi-recipe 저장소에 들어가서, jjigae.txt 를 클릭하고 해당 텍스트의 내용이 나와있는 란의 우측 상단에 연필 아이콘 클릭.
- 내용 추가.
- 아래 쪽의 ‘commit change’ 란에서 커밋 메세지 적어주고 커밋하기.
- 다시 https://github.com/msdou46/kimchi-recipe 저장소 대문으로 돌아오면, 새로운 커밋이 잘 반영됐음을 확인.
이제 소스트리 워크스페이스에서 pull 로 원격 저장소의 commit 을 당겨와 보자.
- 워크스페이스 상단 중앙의 ‘풀’ 아이콘 클릭.
- “ 저장소에서 가져와 병합하기 “ => origin “ 가져오기 위한 원격 브렌치 “ => main 옵션은 디폴트.
- Pull “확인” 버튼 클릭 시, 워크 스페이스의 히스토리에 새롭게 commit 이 추가된 것을 확인할 수 있어.
!! 깃허브에서 원격 저장소 삭제법
저장소 페이지 -> settings -> 맨 하단 danger zone -> delete this repository
— 초심자를 위한 꿀 패턴! pull - commit - push —
기본적으로는 원격 저장소의 커밋을 pull 로 당겨와서 커밋 후, push 해서 반영하는 과정을 반복하는게 좋아.
만약 내가 로컬 환경에서 작업중 일 때 협업자가 새로운 커밋을 원격 저장소에 push 해서 나랑 버전이 달라질 수가 있어.
이럴 때 만약 협업자와 내가 같은 파일을 다르게 수정했다면, 충돌이 발생.
그래서 기본적으로는 ‘원격 저장소에 변경이 생겼다’ 싶으면 새롭게 pull 을 해서 작업 후 push 해주는 게 좋아.
— clone - 원격 repo 를 내 컴퓨터에 가져오기 —
우선, clone 으로 받아올 프로젝트를 넣어줄 폴더 하나 생성.
폴더 : sparta -> programming_basis -> sparta_git -> kimchi-recipe-together
- Clone 으로 받아오고 싶은 원격 저장소 접속.
- 해당 저장소의 <>Code 초록색 네모 버튼 클릭, 원하는 방식으로 링크 복사.
- 소스트리의 ‘저장소 브라우저’ 보기. 그,,, 깃 프로젝트 선택하는, 소스트리 실행하면 가장 먼저 뜨는 창.
- 새로 만들기 -> URL 에서 복제
원본 URL : 복사한 링크
목적지 경로 : 내가 만들어 둔 폴더인 kimchi-recipe-together
이름 : kimchi-recipe-together (통상적으로 가져온 원격 저장소의 이름을 그대로 사용하긴 함)
고급 옵션 : 디폴트
- 그 후 “클론” 버튼 클릭하면 git 프로젝트가 저장소 브라우저에 뜨고, 워크스페이스도 함께 바로 실행.
클론은 해당 프로젝트에 들어가 있는 commit 작업까지 모두 다 가져오는 거야.
__________________________________________
1-10 원격 repo 사용하기 - 정리
1-9에서 실습을 해 봤으니, 이번에는 배운 것들을 정리해 보자.
——
- 원격 repo 와 로컬 repo 를 연결해서 내용을 반영하고 싶을 땐 어떤 방법을 써야할까?
- 원격 repo 와 로컬 repo 는 왜 따로 있을까?
만약 pull 과 push 가 잘 안 된다면, 원격 repo 와 로컬 repo 에서 같은 파일을 수정해서 충돌(conflict)이 발생했을 수 있어.
충돌(conflict) 은 나쁜 게 아니라 원격 repo와 로컬 repo 의 파일 변경사항이 겹친다는 것을 알려주는 것.
충돌을 수정하는 방법은 앞으로 차차 배워나갈 거야.
——
__________________________________________
1-11 1주차 배운 개념 지도 그리기
1주차 마무리.
개념 지도란? 매주차 배웠던 내용들을 혼자 적어보는 것.
——
<개념 정리>
버전 관리: 프로젝트 상태가 변경되는 정보를 알고 있다는 것입니다.
Git 은 가장 널리 쓰이는 버전관리 도구 중에 하나로 commit 을 사용해서 버전이 달라지는 것을 관리합니다.
git 초기화(git initialize) : 컴퓨터에 있는 프로젝트를 Git 이 관리하는 프로젝트로 만들 수 있습니다.
앞으로 Git 으로 관리할꺼야! 하고 설정해주면 됩니다. 이 작업을 한다고 표현합니다.
add (혹은 staging, 스테이징) : commit 에 반영할지 안할지는 파일 단위로 선택할 수 있습니다. commit 에 반영할 파일을 선택하는 것
commit : 현재 프로젝트의 상태를 찰칵 📸 저장하는 것을 이라고 합니다.
commit history : commit 한 순서대로 리스트. 역사!
repo : 'Git으로 관리되는 프로젝트' 를 Git 에서는 repo(리포, repository 리포지토리의 약자) 라고 부릅니다.
내 컴퓨터에 저장되어있는 리포지토리를 로컬 repo(local repository) 라고 합니다.
Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격 repo(remote repository) 라고 합니다.
Tracking(추적) : 로컬 repo 와 원격 repo 를 연결한다!
push : 로컬 repo 의 commit 들을 원격 repo 에 반영하기(push)! 밀어넣기.
원격 repo 에 없는 즉,새로운 commit 내역을 모두 원격 repo 에 한 번에 반영합니다.
pull : 원격 repo 의 commit 들을 로컬 repo 로 반영하기(pull)! 땡겨오기.
로컬 repo 에 없는 즉,새로운 commit 내역을 모두 로컬 repo 에 한 번에 반영합니다.
clone : 원격 repo 를 내 컴퓨터에 가져와서 초기 repo 세팅하는 것을 clone(복제하기)!
——
——
< 내가 쓴 til 들을 원격 저장소에 저장한다 가정하고, 그 과정>
- TIL 프로젝트를 만들고 Git 프로젝트로 바꾼 다음 로컬 repo 의 내용을 원격 repo에 push 해주세요.
- 내 컴퓨터에 프로젝트를 하나 만들겠습니다. 프로젝트명은 til 로 해주세요.
- til 폴더에서 텍스트 파일을 만들어서 아래 항목을 적고 여러분들이 배운 실제 내용을 채워주세요! 항목만 쓰기 없기에요~ 😉
1. 앞으로 git 프로젝트로 만들고 싶은 것 2. 1주차 주요 개념 키워드 적어보기
- sourcetree 에서 til 프로젝트를 Git 초기화(git initialize)해서 로컬 repository 로 변신시켜주세요!
- Github TIL repository 를 만들어주세요. (프로젝트명은 til 로 해주세요)
- 로컬 repo 와 원격 repo를 연결해주세요.
- push 전 로컬 repo 의 이름을 main 으로 바꿔주세요~
- 원격 repo 에 push 해주세요.
- 만든 github repo 의 url 제출하면 됩니다.
——
'내일배움캠프_개발일지 > 프로그래밍 기초_Git_Github' 카테고리의 다른 글
프로그래밍 기초_Git_Github_4 (1) | 2022.12.11 |
---|---|
프로그래밍 기초_Git_Github_3 (0) | 2022.12.02 |
프로그래밍 기초_Git_Github_2 (0) | 2022.12.01 |