[Section 1]
Git : VCS란 종류의 프로그램들 중 하나.
VCS : Version Control System의 약자. 프로그램의 버전관리를 위한 툴.
프로젝트의 시간과 차원을 관리하는 것.
< 시간 >
프로그래밍을 해서 소프트웨어를 만드는 건 대부분 그 첫 결과물에서 끝나지 않는다.
새 기능을 넣고, 오류를 수정하고 성능을 개선하면서 계속해서 새 버전들이 나온다.
근데 이런것들을 진행하다보면 했던 작업을 취소해야할 일이 생긴다. 버전 5에 결함이 생겨서 버전 4로 되돌아가야하는 경우.
< 차원 >
회사에서 어떤 앱을 만드는데 나한테 어떤 아이디어가 떠올라서 만들고 있는 앱에 시도해보고 싶다. 하지만 회사 코드에 내 멋대로 논의되지 않는 코드를 추가하고 할 수는 없다.
마치 시간여행 하는것처럼 프로젝트의 버전들을 언제든 되돌릴 수 있고 여러 차원을 넘나드는것처럼 프로젝트의 내용들을 마치 다른 폴더인것처럼 여러모드로 자유롭게 전환하고 변경 사항들을 이동할 수 있다.
맥인 경우, 기본적으로 git이 설치되어있다.
맥에서는 homebrew를 이용해서 git을 깔 수 있다.
Homebrew : 맥에서 여러 프로그래밍에서 사용되는 패키지나 라이브러리 같은것을 설치할때 쓰는 프로그램. 맥에서 프로그래밍을 할거라면 반드시 설치해야한다.
iTerms2에 연두색 : 어느 차원에 있는지를 보여준다.
[Lesson4] : GUI vs CLI
git을 사용하는 두가지 방법.
- CLI : Command Line Interface. 즉, 명령줄을 입력해서 사용하는 것.
- GUI : 일반인 사용자들이 쓰기 편하도록 그래픽 요소를 사용한 인터페이스.
[Lesson5] : Git설정 & 프로젝트 관리 시작하기
git 전역으로 사용자 이름과 이메일 주소 설정 : github계정과는 다르다.
git : 다른사람들과 협업할때도 같이 쓰게된다.
어떤 작업들을 누가했는지..
컴퓨터에 기본 설정으로 사용된다는 것. 프로젝트마다 다르게 설정할 수도 있다.
저장한다고 해서 git에 저장되는건 아니다.
git status 치면,
"주인님, 새로운 애들이 보이는데 제가 관리할까요?"
git status : 현재 git의 관점에서 폴더의 상황을 보여주는 것.
(.git 파일을 삭제하면 repository가 없다고 뜬다. git이 관리하지 않는다는 뜻.)
소스트리로 git에게 맡기려면 로컬 저장소 생성을 해서 폴더를 선택하면 된다.
[Lesson 6] : Git에게 맡기지 않을 것들
git에게 맡기지 않을 파일을 설정하는 방법.
1/ 굳이 포함할 필요가 없을 때
코드 입력하고 나서 실행할때 자동으로 파일에 맞춰서 생성되는 것. java-> class 빌드.
node.js 인터넷으로 다운받아도 되는것.
2/ 포함하지 말아야 하는 것들 : 서버 비밀번호 같은 것..노출될 수도 있다.
.gitignore
gitignore에 git으로부터 배제시킬 파일의 이름 작성.
gitignore에 넣지 않았을때 git status를 치면 아래와 같이 3개의 파일 모두 뜬다.
아래와 같이 .gitignore파일 작성 -> 숨길 파일의 이름을 적고 저장하면
아래와 같이 secrets.yaml은 안나오고 .gitignore
사용할 프로젝트의 라이브러리마다 무시해줘야할 파일이나 목록들이 있다.
ex: spring or node
.gitignore의 형식이 따로있다.
ex: 특정 파일이름을 적을 수도 있고, 위치를 특정할 수도있다.
[Section 2]
[Lesson 1]
변화를 타임캡슐에 담아두기
파일을 무조건 저장해야 git이 인지할 수 있다.
1. 프로젝트의 변경사항들을 타임캡슐(버전)에 담기
No commits yet에서 commit이 버전이라고 생각하면 된다.
Untracked files : Git의 관리에 들어간 적 없는 파일
아직 타임캡슐에 넣은 적이 없는 것.
1/ 먼저, 캡슐에 담아야 한다. --> add를 사용.
git add tigers.yaml
그러면 tigers.yaml 옆에 A라고 뜬다.
git status를 치면,
Changes to be commited라고 뜨고, tigers.yaml이 뜬다.
이건 묻을 준비가 되었다는 뜻.
캡슐 안에 들어가있다.
모든 파일을 캡슐 안에 넣으려면 git add .
Q: 그럼 처음부터 전부 묻으면 되지, 왜 하나하나 묻는 기능이 있지? --> 버전에 따라 파일을 다르게 묻고싶을수도 있으니까.
하지만 보통은 파일 한꺼번에 넣는다.
2. 타임캡슐 묻기
commit한다 === 새로운 버전으로 만든다.
1/ git commit
git commit을 치면, 아래와 같은 화면이 뜬다.
keyboard에 뭘 쳐도 입력이 잘 안될거다.
입력하려면 i클릭.
커밋 메시지 입력하고 종료하면 :wq -> enter
2/ git commit -m "" 이렇게 바로 커밋메시지를 같이 작성하기.
파일 색깔이 변경됐다.
git status를 다시 치면,
git log를 치면, commit과 긴 문자열이 나온다. 각 commit마다 고유한 문자열이 있다.
& 커밋 메시지가 적혀있다.
lions.yaml 파일 삭제
tigers.yaml 파일 변경 --> 파일 컬러 변경(yellow)되고, M(maybe Modified)로 변경.
leopards.yaml 파일 추가 --> 파일컬러 변경(green)
lions.yaml 삭제
tigers.yaml 변경
leopards.yaml 추가 & git이 아직 버전으로 관리한적 없다.
git diff를 누르면 더 자세하게 볼 수 있다.
j누르면 스크롤 아래로,
k누르면 스크롤 위로
:q 닫기
leopards는 아직 없다.
leopards.yaml이 새로 생긴 사실,
lions.yaml파일이 삭제된 사실,
tigers.yaml이 수정된 사실이 모두 캡슐에 담겼다.
git log를 쳐보면, 아래와 같이 두개의 버전이 만들어짐.
tip : 새로 추가된(untracked)파일이 없을 때,
git commit -am "메시지" 이렇게 add와 commit -m을 한꺼번에 할 수도 있다.
""든 ''든 둘다 된다. 하지만 시작과 끝을 동일하게 해야한다.
[Section 2]
과거로 돌아가는 두가지 방법
커밋 하나하나가 묻어놓은 타임캡슐, 버전이라고 보면 된다.
캡슐마다 작업한거 적어서 꼬리표 달아놓은 것 --> 옆 문자열.
시간순으로 묻힌 타임캡슐을 파내서 프로젝트를 원하는 과거 시점으로 돌릴 수 있다.
git에서 프로젝트를 과거로 되돌리는 방법은 크게 2가지.
하나는 reset, 하나는 revert
- reset : 말그대로 시간을 과거로 되돌리는것.
한 단계 전인 시점으로 과거를 되돌리려면 해당 과거로 되돌아간 다음, 이후 행적은 히스토리에서 지워버린다.
- Revert : 내역을 삭제하는게 아니라, 이때의 변화를 거꾸로 수행하는 캡슐을 하나 넣음으로써 결국에는 Add team Cheetas와 같은 상태로 되는 것.
하는 이유 : 이런것 하나 하나 기록으로 남길 필요가 있을 때 revert 방식을 사용하면 좋다.
reset방식은 이후 시점의 기록들을 그냥 지워버리니깐.
결정적인 이유는,
위 내역들은 그대로 유지하되 딱 Replace Lions with Leopards에서 한것만 취소해야 하는 경우.
이 경우, revert를 사용하면 유지하면서 취소하고 싶은 커밋만 취소.
+ 한번 공유공간에 올라간 내역을 reset해버리면 협업시 문제가 발생한다.
그걸 기반으로 코드를 작성한 협업자와 심각한 충돌을 일으키게 된다.
때문에 한번 공유가 된 커밋들은 revert를 이용해서 되돌려야한다.
reset을 하려면, 우리가 돌아가려는 시점의 해쉬가 필요하다.
아래에서 commit뒤의 문자열 전부 or 6-7글자만 가져오면 된다.
panthers.yaml파일이 삭제되어있고, leopards.yaml은 Nora -> Luke로 다시 변경되어있다.
마지막에 지웠던 cheetas.yaml이 다시 생겨났다.
이제는 FIRST COMMIT으로 돌아가보자.
백업해두었던 .git 파일을 다시 가져와보자.
git status를 치면,
commit을 다 한 상태인데, 저런 변화를 준거라고 생각한다.
git revert (되돌릴 커밋 해시) 작성하면 아래와 같이 커밋 메시지가 자동으로 생성된다.
:wq로 저장하면 된다.
Add George to Tigers를 반대로 실행하는 커밋이 생성.
중간에 Replace manager in leopards, Replace Cheetas with Panthers가 전부 그대로 살아있고, Add George to Tigers만 취소되어있다.
공유가 된 커밋은 협업할때 revert를 사용해야.
Replace Lions with Leopards를 다시 revert하고 싶은데,
-leopards.yaml, +lions.yaml, tigers.yaml 수정
하지만 중간 commit에서 Replace manage in leopards 커밋에서 leopards.yaml파일을 수정하는 부분이 있다.
git revert 어쩌고 , 이렇게 치면 아래와 같이 충돌이 일어난다.
git add or git rm을 통해 문제를 해결한 후, 다시 git commit 하고, :wq
커밋해버리지 않고 revert하기
git revert --no-commit ... 작성하면, commit은 하지않고 add만 되어있는 상태.
--> revert뿐만 아니라, 다른 변화들도 준 다음에 commit하고싶을때
*모든 출처는 얄팍한 코딩사전입니다.
'GitHub' 카테고리의 다른 글
[Github] 잔디반영 에러(잔디 안심어지는 현상) (0) | 2023.10.21 |
---|---|
얄코 깃 끝장내기 section 3 (0) | 2022.07.10 |