정말이지 뭉치면 죽고 흩어지면 사는 팀과제였다.
이유는 git이 아닐까. 머지공포증에 걸릴 것 같다.
Git이라는게 이런 거구나를 여실히 느끼며 계속 열받을 바에 언젠간 마스터해야할 git 이기에 기초를 다시 복습해보기로 한다.
우선 가장 헷갈리게 만드는 요소를 정리해봤다.
1. 기본 상호작용 : add, push, pull, commit, origin, remote, clone, diff
2. 브랜치 이용 : branch, merge, rebase, checkout
+계정 연동 설정 : git remote ~~
1. git의 기본 (add, commit, push, pull, etc....)
add랑 commit이 너무 헷갈리던 찰나 위 사진을 발견하고 혈이 뚫렸다.
add를 하는 이유는 변경사항이 두 파일이 있다고 생각해볼 때,
ex1.java ex2.java
ex1.java만 커밋하고 싶을 수 있다. 즉 내가 작업하는 working files들이야 그때 그때 수정되니까 어쩔 수 없다 쳐도,
내 컴퓨터 안에 있는 작업폴더 안 git init이 된 Local repository에 저장해두겠다는 거다.
내 컴퓨터에 있는 파일과 Local repository를 구분하지 못 해서 이 또한 매우 헷갈렸다.
그렇게 add를 통해 stage에 올려두다가 commit하는 것. 그리고 그 commit한 local repository를 remote repository에 업로드하는 것이 'PUSH'
중간에 add한 파일을 다시 restore할 수도 있고, add와 동시에 commit -a 할 수도 있다.
그렇게 업로드된 remote repository에서 파일을 가져와 작업하고 싶을 때, 바로 PULL할 수도, 우선 내 Local repositoy에 정보를 받아둘 수도 있다. 그러고 원하는 repository에 checkout을 해서 working files에 접근할 수도 있다.
방금 위에 내용 그냥 의식의 흐름대로 이미지 해석하면서 쓴 건데, 쓰면서 확실히 이해됐다는 걸 느꼈다.
2. 브랜치
브랜치가 갈리며 내 머리 속도 갈려 나갔다.
복잡하지만 모두가 쓴다라는 것은 배우고 이겨내면 유용해질 것이라는 뜻.
브랜치가 가장 큰 특징이자 git을 쓰는 이유가 아닐까. 사실 브랜치를 나누는 것을 어렵지 않다.
중요한건 merge/rebase 다시 갈라둔 브랜치를 합칠 때 컴퓨터는 같은 부분에서 서로 다른 두 코드 중 하나를 절대로 임의 선택할 수 없다.
그래서 conflict를 발생시키고 우리에게 묻는다. 그때 마다 git을 다루는 써드파티 프로그램이나, 각 IDE에서 제공하는 version control의 방법이 능숙치 않아서, 다시 말해 낯설어서 어렵다. 엄밀하게 낯선 것은 어렵다는 것과 다른 말이다. 친해지면 된다.
그래서 이번 제목이 'Git과 친해지기..'이다.
머지와 친해져보기..
각각의 브랜치 <마스터 - str2수정 - str3수정> 을 만들고, 실험해볼거다.
우선 마스터에 str2를 머지하기.
그냥 아무말 없이 머지가 됐다. str2 수정사항 외에 master브랜치가 가만히 있어서 그런듯 하다.
이번엔 가만히 있지 말아보자.
마스터브랜치의 str1을 저렇게 수정했다. str3_수정 브랜치는 아무것도 모르고 있다.
이제 마스터브랜치에 str3을 머지해보자.
예상대로 conflict발생. 오른쪽 MERGE버튼을 눌러보면.
이렇게 창이 뜬다. 이 창이 너무 낯설고 분노를 유발한다.
우선 이 버튼은 그냥 양자택일을 하는 거 같다. 하지만 내가 원하는 결과는 아래처럼 두개가 골고루 섞인 거다.
String str1 = "마스터 브랜치라고 무조건 가만히 있지 않지.";
String str2 = "2에서 수정했습니다!!!";
String str3 = "3에서 수정완료!!!!!!!";
뭔가 저렇게 생긴 resolve simple conflicts 기능을 쓰니 알아서 섞였다. 직접 수정해도 되고 하긴한데, 복잡한 conflicts는 직접해야할 것 같다. 해당 IDE에서 제공하는 conflicts 해결 툴을 좀 더 알아볼 필요가 있는 것 같다.
엄청 친해지진 않은 것 같다.
더 친해질 필요가 있을것 같고, 그래도 remote-local 을 같게 만들어 주는 것이 push, pull(fetch) 라는 것, commit은 local repository에 저장하는 느낌이라는 점을 새롭게 알게됐으니 나름 소득이 있다.
+ 계정연동
어쩌다보니 초반에 과제에서 계정이 2개가 엉켰다. A계정에 조인되어있는 repository에 B계정으로 pull 요청을 한다거나, 그 외 엉키는 일이 많아서 분노가 많이 쌓였다.
꼭 필요한 명령어들 정리하며 마무리한다.
git remote -v // 현재 연결된 remote 주소
git remote set-url <원격저장소 이름 ex. origin> [새로운 주소]
git config user.name // 연결된 계정의 이름
git config user.email // 연결된 계정의 이메일
git config --global user.name // 새로운 이름
git config --global user.email // 새롭게 로그인할 이메일
//staged된 파일, 즉 tracked 파일들을 untracked하는 명령어. 파일삭제가 아닌 git추적만 제외.
git rm --cached 파일명 //파일 untracked
gir rm -r --cached 폴더명/ //폴더 untracked
추가
지난 시간에 git공부한 거 토대로 싹 브랜치 정리하고, 나아가 untracked되어야 할 파일이랑 폴더도 추가함.
이것때문에 IDE 모듈상의 오류 때문에 상당한 분노가 생김.
'TIL : Today I learned (or Week)' 카테고리의 다른 글
WIL 230618 : Spring..? (0) | 2023.06.19 |
---|---|
WIL 230611 : 대부분이 힘들어한다는 것은 극복했을 때 성취감이 크다는 것. (0) | 2023.06.12 |
WIL 230604 : 튜토리얼 끝. (0) | 2023.06.04 |
WIL 230529 : JAVA입문 첫 걸음. (0) | 2023.05.30 |
TIL 230526 : 구현은 끝이 아닌 새로운 시작. (1) | 2023.05.26 |