🏀

실습 코드 - 1

# 팀 생성 후 해야 할일 필수가 아닌 것도 있습니다. Notion 등을 사용하셔도 좋습니다. 0. 팀편성 1. 자기소개 및 친해지기, 팀장 뽑기 2. 커뮤니케이션 도구 선택(디스코드, 슬랙, 지라, 노션, 피그마, 피그잼 등) 및 룰 만들기 3. 오거나이제이션 만들기 * (권장) organization > New organization > free * (권장) 오거나이제이션 동료 초대: People > invite member * 레포 만들기: create a new repo * 레포에서 동료 초대: settings > collaborators and teams > add people 4. (일부 선택) 이슈, 프로젝트, 위키, 액션스 세팅, 깃 브랜치 전략, 코드 컨벤션(Black Formatter 등) * GitHub Project * 레포가 삭제되도 살아있습니다. * 다른 레포에 이슈도 등록할 수 있어요. 한 레포에 종속된 것이 아닙니다. 일반적으로는 한 레포에만 사용합니다. * Table, Board, Roadmap 하나 선택해도 view에서 여러개를 만들 수 있습니다. * TODO에 여러 task 반영 * Table에서 역활 분담 * (팀에서 논의 후 반영) Table에서 시작일(날짜), 종료일(날짜), 우선순위(숫자) 반영 * roadmap에서 Date fields > start date과 target date 설정 * 프로젝트 진행하면서 우선순위대로 정렬해보고 아직 진행하지 못한 것이 있으면 다같이 진행합니다. * (선택) Set limit을 통해 todo에 너무 많은 항목이 올라가지 않도록 조절합니다. * (선택) chart로 통계치도 확인할 수 있습니다. * (선택) item을 클릭하여 아카이브 할 수 있습니다. 프로젝트에 아카이브 아이템스를 클릭하면 아카이브된 목록들을 볼 수 있습니다. * 아카이브를 사용하는 경우 1: 예를 들어 Done이 수백개 쌓였을 경우 * 만약 하나의 project에 아카이브가 너무 많을 경우 버전을 올리고 새로운 project를 만든 후 project 자체를 아카이브(close) 합니다. * GitHub issues * 어떠한 이슈가 생겼을 때에만 사용하는 것은 아닙니다! * 과업을 설정하거나 * Code 단위에 해결 마일 스톤을 만들 수 있습니다. * Code를 연결할 수 있습니다. * 이슈 생성 후 프로젝트에 할당해서 프로젝트 보드에서 보는 것도 가능합니다. * 프로젝트에 할당해서 연결된 것도 확인해보세요. * GitHub Wiki * 나와야 하는 산출물에 대해 미리 논의해보세요. (https://github.com/weniv/project_sample_repo) * 처음 페이지 설계를 잘 하셔야 합니다. * sidebar는 작성하지 않으셔도 됩니다. * wiki만 따로 clone도 가능합니다. * GitHub Actions * CI/CD를 위한 툴입니다. * 자동 크롤링 / 자동 배포 등을 할 수 있습니다. # GitHub 고급 명령어 ## 기본 명령어 * 아래 명령어는 알고 있다는 가정 하 수업을 진행합니다. * git init 또는 git clone * git pull: 소스 코드 받아오는 것 * 소스코드 수정 * git add: 내 소스코드 추가 * git commit: 버전 생성 * git push: GitHub에 추가 ## 1. GUI SW * 소스트리 (권고) * 깃크라켄 * 깃허브 데스크탑 * (VSC Extension) gitlens - 무료판, 기능이 적음. * (VSC Extension) git graph - 시각화가 잘 되어 있습니다. - gitlens + git graph 2개 같이 사용하는 분도 많으십니다. * (VSC Extension) gitmoji - git commit 메시지를 쓸 때 맨 앞에 붙여서 어떤 작업인지 한 눈에 볼 수 있도록 합니다. - https://gitmoji.dev/에서 복사해서 사용하기도 합니다. (실무에서 많이 사용하고 commit에서 메시지로만 주셔도 됩니다. -m ':bug: 버그 고침'의 형태로 사용하거나 $ npm i -g gitmogi-cli로 인스톨하여 cli에서 사용할 수도 있습니다.) * (VSC Extension) live share - git과 직접적인 연관은 없으나 팀 프로젝트 할 때 유용하게 사용하실 수 있습니다. ## 2. branch 만들기 및 merge test * 고급 명령어 실습 ```shell (main) mkdir test (main) cd test (main) git init (main) touch readme.md (main) git add . (main) git branch // 1번째 commit은 있어야 branch가 생성됩니다. (main) git branch a (main) git branch // a 생성된 것 확인 (main) git checkout a (a) echo '# hello world a' >> 'hello_a.txt' (a) git status // 추적 확인 (a) git add . (a) git commit -m 'a1' (a) git branch b // 브랜치 b 생성 (a) git branch (a) git checkout main (main) // hello_a.txt가 없음을 확인 (main) git checkout b (b) echo '# hello world b' >> 'hello_b.txt' (b) git status // 추적 확인 (b) git add . (b) git commit -m 'b1' (b) git checkout main (main) git merge a (main) git merge b // 완료! ``` * GitHub push 실습 ```shell (main) mkdir test (main) cd test (main) git clone https://github.com/paullabkorea/branch_test.git . (main) git branch // main은 있습니다. (main) git branch a (main) git branch // a 생성된 것 확인 (main) git checkout a (a) echo '# hello world a' >> 'hello_a.txt' (a) git status // 추적 확인 (a) git add . (a) git commit -m 'a1' (a) git push // error (a) git push --set-upstream origin a (a) git branch b // 브랜치 b 생성 (a) git branch (a) git checkout main (main) // hello_a.txt가 없음을 확인 (main) git checkout b (b) echo '# hello world b' >> 'hello_b.txt' (b) git status // 추적 확인 (b) git add . (b) git commit -m 'b1' (b) git push --set-upstream origin b (b) git checkout main (main) git merge a (main) git merge b // 완료! ``` * 충돌 실습 ```shell (main) mkdir conflict (main) cd conflict (main) git init (main) touch readme.md /// readme에 입력 hello world /// (main) git add . (main) git commit -m 'first' (main) git log // 1번째 commit은 있어야 branch가 생성됩니다. (main) git branch a (main) git branch b (main) git branch // a 생성된 것 확인 (main) git checkout a /// readme에 입력 hello world a /// (a) git add . (a) git commit -m 'a1' (a) git checkout b /// readme에 입력 hello world b /// (b) git add . (b) git commit -m 'b1' (b) git checkout main (main) git merge a (main) git merge b // 충돌! ``` * 충돌이 나면 아래와 같이 나옵니다. VSC 보시면 아래와 같이 하이라이팅 되고, 선택할 수 있습니다. <<<<<<< HEAD hello world a ======= hello world b >>>>>>> b * 충돌 해결한 후 아래와 같이 add와 commit을 해주셔야 합니다. 그냥 머지가 안됩니다! ``` git add . git commit -m '충돌해결' ``` * 기타 명령어 ``` $ git branch -D <삭제할 브랜치명> // 브랜치 삭제 $ git reflog // 브랜치 복구 ``` ## 3. Fork 1. (담당자) 오거나이제이션에서 레포하나를 readme파일이 있는 상태로 퍼블릭 만들어주세요. 2. (여러분) 오른쪽 상단에 Fork 버튼을 클릭하여 내 repo로 해당 repo를 가져옵니다. 3. (여러분) 파일을 수정합니다. 4. (여러분) contribute라는 버튼이 코드위에 활성화 되어 있습니다. 이걸 클릭해주세요. 그러면 Open a pull request버튼이 나오고 이걸 클릭하면 title과 content를 입력할 수 있는 form이 나옵니다. 입력 후 하단에 create pull request를 클릭해주세요. 5. (담당자) 풀리퀘스트를 오거나이제이션에서 확인하고 리뷰나 머지를 할 수 있습니다. filechage와 같은 곳에서 코드 단위로 리뷰가 가능합니다. ## 4. 그 외 실무에서 간혹 쓰이는 명령어(amend, stash, reset, revert, cherry-pick) ```shell (main) $ git init (main) $ touch test.txt (main) $ git add . (main) $ git commit -m 'first' (main) $ touch test.txt (main) $ git add . (main) $ git commit -m 'second' (main) $ git log (main) $ touch amend.txt (main) $ git add amend.txt (main) $ git commit --amend ////////// $ touch stash.txt $ git add . $ git stash $ git status $ git stash pop ////////// $ git log $ git reset --hard 025cd1d98da39af2a819c43e17b3d5f2d553649d $ git push -f origin main ////////// $ git revert <직전커밋 id> ////////// $ git branch cherry $ git checkout cherry $ 파일 수정 -> commit $ 파일 생성 -> commit $ git push $ git log $ git switch main $ git cherry-pick logid ```