버전 관리 시스템 Version Control System
버전 관리: 각 버전별로 변경된 이력들을 저장하는 작업
변경 사항 저장 시 어떤 사항들이 변경되었는지 코멘트를 작성한다. > 누가 어떤 파일을 추가, 수정, 삭제했는지 확인 가능하다.
Git으로 관리되는 파일은 Github, GitlLab, Bitbucket 등의 여러가지 원격 저장소를 이용해 백업과 협업이 가능하다.
Git
분산형 버전 관리 시스템
날짜별로 어떤 파일이 어떻게 바뀌었는지 확인할 수 있다.
스냅샷: 특정 시점에 생성된 백업 복사본
commit
- 하나하나 스냅샷을 만들어주는 작업
- 이전 기록들에 대한 추적이 가능하다
- → 협업에 유용하다
소스 코드가 변경된 이력을 쉽게 확인하고 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 돌아갈 수 있다.
Github
Git Repository를 관리할 수 있는 클라우드 기반 서비스
Git으로 버전을 관리하는 폴더에 대해 Github를 통해 여러 사람이 공유하고 접근하는 것이 가능하다.
Git Repository
파일이나 폴더를 저장해두는 저장소
Remote Repository
원격 온라인 서버 상의 저장소 → 여러 사람이 함께 공유 가능하다
작업한 코드를 공유할 때 사용
Local Repository
내 컴퓨터의 저장소로 개인 전용 저장소가 된다.
작업할 때 사용
Git이랑 Github는 어떻게 다른가
Git
*lets you manage and keep track of your source history
버전 관리 시스템
*로컬 시스템에 설치
진행 중인 작업에 대한 self-contatined 기록
클라우드와 분리되어 사용된다 - 인터넷도 필요 없음
git이 좋은 이유: branching model (분기)
- 독립적인 local branch를 만드는 게 가능하다
- 작업에 대해 분기를 따로 설정할 수 있고 delete, merge, recall이 쉽다?
아직 branch에 대해서는 명확하게 이해하지 못했다. 보충학습하기~
Github
*lets you manage Git repository
*클라우드 기반: repository는 권한을 가진 사람이라면 어디에서나 접근 가능
git repository의 호스팅 서비스
*online database: 내 local computer/server 외부에서 version을 추적하고 공유함
git의 기본 기능을 확장할 수 있다
(협업) 코드를 다른 사람들과 공유하면서 git branch들에 대해 수정하거나 편집할 수 있는 권한을 부여할 수 있다
-> 하나의 프로젝트를 전체 팀이 실시간으로 작업하는 것이 가능하다
branch
- 변경이 발생할 때 새 branch를 만들어 팀원들끼리 overwriting 없이 코드를 수정하게 함
- like copy
- branch에 일어난 변경사항은 push/pull 없이는 다른 사용자의 main directory에 반영되지 않음
정리
git은 내 local 환경에서 버전 관리를 지원 / github는 cloud 환경에서 협업을 지원 >> github repository를 개인이 pull해 와서 작업 후 git을 통해 버전 관리, github에 다시 push해 협업이 가능하다?
(reference)
Git - Github
1. 내 github repositorygit으로 가져와 local 환경에서 작업해보기
전체적인 과정
1. 다른 repository 내 repository[Remote]로 fork 해오기: github에서 fork - create fork
2. fork 된 repository 내 컴퓨터[Local]로 가져오기: git clone
- 내 local work space로 온 파일들은 기본적으로 unstaged 상태다
- 작업해서 다시 github에 업로드해주려면 staged 상태로 만들어서 commit하고 내 remote repository(여기서는 github)에 push를 해줘야 함
- 내 remote repository에 push 된 파일을 fork해서 가져온 repository에 반영하려면 pull request를 보내야 한다.
CLI
git clone <repository URL>
1. 내 local로 repository 가져오기 (repository URL: 내 repository의 주소 (fork 해온))
git add <file name>
git add .
2. unstaged 상태에 있는 파일을 staged 상태로 변경한다. add . 은 unstaged 상태에 있는 모든 파일을 statged 상태로 변경한다.
git commit -m 'commit message'
3. 수정 작업이 끝난 변경사항을 commit(저장)한다. commit message에 코멘트를 작성(option)
보충) git commit 옵션 정리해보기
git push <origin> <branch name>
4. 내 repository(origin)의 branch에 local의 변경사항을 업로드한다
2. 내 Repository와 다른 사람의 Repository 연결해서 작업해보기 [Pair]
전체적인 과정
1. 내 remote repository clone 해오기
2. 다른 사람의 repository를 내 local로 연결하기
3. 가져온 repository에서 파일 수정해보고 add, commit, push
보충) echo
4. 연결된 다른 repository 가져와보기 (pull)
CLI
git clone <repository URL>
1. 내 local로 repository 가져오기 (repository URL: 내 repository의 주소 (fork 해온))
git remote add <pair> <pair repository URL>
2. 다른 사람의 repository 연결하기 - pair에는 명칭
git add <file name>
git add .
3. unstaged 상태에 있는 파일을 staged 상태로 변경한다. add . 은 unstaged 상태에 있는 모든 파일을 statged 상태로 변경한다.
git commit -m 'commit message'
4. 수정 작업이 끝난 변경사항을 commit(저장)한다. commit message에 코멘트를 작성(option)
git push <origin> <branch name>
5. 내 repository(origin)의 branch에 local의 변경사항을 업로드한다
git pull <pair> <branch name>
6. 연결된 다른 repository local로 가져오기
git status
- 내 local에 clone 해온 디렉토리들의 상태를 확인한다.
git resotre <file name>
- commit이나 staged 되지 않은 변경사항을 폐기한다 > 처음 clone 받은 상태로 되돌림
git reset HEAD^
- 방금 commit한 기록을 취소한다.
^의 개수로 commit한 기록 선택
보충) git reset 옵션 정리하기
git log
- 현재까지 commit한 내역들을 확인한다.
git remote -v
- 연결된 remote repository 확인
막간 셀프 Q&A
Q. 근데 왜 fork 하고 clone을 했을까 그냥 git clone하면 안 되나요 fork가 먼데요 fork를 해야 되는가 안 해도 되는가 fork는 왜 하는가........... fork가 뭔가요...........
A. (reference)
fork
github에서
original(upstream) repository의 copy를 만드는 것. repository는 github에 그대로 있다.
fork된 repo에 생긴 변경사항을 original repo에 merge하려면 pull request가 필요함
no command involved: 그냥 repo의 separeate copy를 포함하는 것
clone
git에서
repository가 내 local 환경에 copy되는 거임
clone해서 내 local repo에서 일어난 변경사항은 바로 original repo에 push된다 (access 권한 필요)
done with the command git clone & local에 모든 코드 파일을 받아온다
*forking is a concept while cloning is a process
fork하고 git clone해서 가져온 이유: clone해서 받아온 걸 변경했는데 write access 권한이 없으면 forked request를 통해야 함.
> clone repo에 생긴 변경사항은 forked repo에 push 된 다음에 pull request 해야 함
> clone하려는 유저가 contributor가 아니면(not declared as a contributor and it is a third-party repository (not of the organization)) clone 하기 전에 fork 하는 게 better option이다.
github에서 fork하는 경우 유저는 코드를 수정할 수 없음. 그래서 git clone으로 작업을 위해 repository를 복사해온다. fork는 유저랑 original repo의 중간 역할 정도
ㅇㅎㅇㅎㅇㅋㅇㅋ
🐑 Daily 회고
1. 아니 그래서 뭐가 다른 건데
- 구글에 what is the difference between 으로 시작하는 문장만 백개 검색했다 ^^
- git이랑 github랑 먼 차이.....?
- git clone이랑 git init이랑은 또 머가 다른데요.......?
- git clone이랑 git fork랑은 뭐가 달라서 저는 fork를 하고 clone을 한 건가요
- 다 읽어보니까 그냥 내가 멍청했다 머리야 일 좀 잘하자 한번에 이해 좀 잘 하고..... 제발 부탁
2. 오늘 git 공부하면서 한국어 능력을 3% 정도 잃었다
- 그렇다고 딱히 영어가 는 건 아님
3. CLI가 조금 익숙해졌다
- 어제 별로라고 해서 미안하다 리눅스야 화해하자
- git아 너도 앞으로 잘 부탁해
4. 버전 관리의 중요성을 몸소 깨달음
- 미루고 미루다가 당장 오늘 제출해야 하는 과제 마무리만 하고 내려는데 무슨 같은 이름이 이렇게.....? 파일 열어보고 진짜 깜짝 놀랐다 아무것도 없어서. 다행히 onedrive에 가만히 잘 계셨고 그냥 내가 혼자 엄한 파일 열어보고 자퇴할 뻔했고요?
- 부트캠프 들으면서는 이럴 일이 없게 꼭꼭꼭꼭 버전 관리를 잘하기로 다짐한다.
5. TIL은 노션으로
- 학습하면서 노션에 간단하게 메모를 하는데 거기 써놓은 내용은 그냥 그대로 가져오자. 어차피 정리는 다시 찬찬히 보면서 Study 카테고리에 하기로 했으니까 선택과 집중을 해보기로 해요 ✏️✏️✏️
- 근데 오늘 노션에서 갖고 온 것보다 쓰면서 궁금해져서 추가한 게 더 많다. 이게 맞아?
총평 ⭐⭐⭐⭐
오늘 페어도 보람차게 잘해냈다. 점심 먹기 전까지 git이랑 원수져가지고 아 어떡하지 이번 페어 개망했다(내가 아는 게 없어서) 하는 기분으로 시작했는데 다행히 점심 먹고 페어 활동 시작 전까지 어케어케 내 github에 push까지 성공해서 정말 다행히도 페어를 망치지 않을 수 있었다. 계속 push에서 오류가 나서 걍 다 밀고 처음부터 다시하니까 되던데 아마 처음에 clone 할때 내 github url을 안 가져왔지 싶다..... ^^ 바본가 진짜?
근데 페어 하다가도 아니 뭐가 문젠지 둘 다 push까지는 문제 없었는데 pull 하면서 뭐가 계속 안 돼서 페어분이랑 머리 싸매고 고민하다가 결국 리셋하고 다시 처음부터 하니까 됐다. 디코에서 단일 branch 얘기가 나와서 아! 그거였나봐!(페어분이 단일 branch가 아니었음) 했는데 정리하면서 다시 생각해보니까 우린 push까지는 잘했었는디? pull이 안 됐었는디요?ㅠ 머였지 하면서 검색했던 거 다시 보려니까 내가 또 크롬 기록 설정을 꺼놔가지고......... ^^ 한치 앞도 모르는 내 머리 ㅋㅋㅋㅋㅋㅋㅋ 어휴 아무튼 다시 push pull push 문제 없었으니까 그냥 어련히 뭐가 꼬였으려니 하고 넘어가본다. 그래도 추후를 위해서 디코에서 주워들은 merge랑 rebase는 정리할 때 같이 찾아보기.
아무튼 하루 종일 우당탕탕탕탕타타타타타탕 했지만 어쨌든 잘 해냈다. 앞으로 git이랑 더 친하게 지낼 수 있을 것 같다. 그치 git아......?
✔️ To Do List (~5/5)
1. Git 보충학습
- git 명령어, 옵션 관련 보충
- branch 개념 보충
2. sourcetree 사용해보기
'diary > codestates (be39)' 카테고리의 다른 글
05/04/22 [2/2] [pair: java: 변수, 타입, 문자열] 갑분 메서드요? (0) | 2022.05.05 |
---|---|
05/04/22 [1/2] [Java] 자바 자바 자바 기초 떼기 (0) | 2022.05.04 |
05/02/22 [Linux] CLI는 별로지만 펭귄이 귀여우니까 봐준다 (0) | 2022.05.03 |
[CSS] 레이아웃 만들기 (0) | 2022.05.02 |
[CSS] 박스 모델 (0) | 2022.05.01 |