From 021bdecf2b4c34fe46eec039888697767bace35e Mon Sep 17 00:00:00 2001 From: Ko Nak-yean <59277499+nakyeonko3@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:48:14 +0900 Subject: [PATCH] Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update README.md doc: ai-pr-reviewer 모델 수정 - issue 작성시 자동으로 깃허브 프로젝트에 들어가게 세팅함 docs: 리드미 수정중정 chore: 코드리뷰 ai 모델 수정중 docs: ai-pr-reviewer.yml 파일 수정 - ai-pr-reviewer.yml 파일에 system_message를 수정하여 react, typescript, nodejs에 적합한 리뷰를 달도록함. docs: ai-pr-reviewer.yml 파일 수정 - ai-pr-reviewer.yml 파일에 system_message를 수정하여 react, typescript, nodejs에 적합한 리뷰를 달도록함. Update ai-pr-reviewer.yml docs: ai-pr-reviewer의 system message 프롬프트 메시지 수정 --- .github/.gitmessage.txt | 36 +++ .github/ISSUE_TEMPLATE/bug.yml | 46 ++++ .github/ISSUE_TEMPLATE/documentation.yml | 24 ++ .../ISSUE_TEMPLATE/enhancementFeatures.yml | 32 +++ .github/ISSUE_TEMPLATE/helpWanted.yml | 40 ++++ .github/ISSUE_TEMPLATE/refactor.yml | 32 +++ .github/PULL_REQUEST_TEMPLATE.md | 25 ++ .github/workflows/ai-pr-reviewer.yml | 33 +++ .gitignore | 151 ++++++++++++ .prettierignore | 16 ++ README.md | 56 +++++ document/OhShitGit.md | 220 ++++++++++++++++++ ...54\354\232\251\353\260\251\353\262\225.md" | 150 ++++++++++++ 13 files changed, 861 insertions(+) create mode 100644 .github/.gitmessage.txt create mode 100644 .github/ISSUE_TEMPLATE/bug.yml create mode 100644 .github/ISSUE_TEMPLATE/documentation.yml create mode 100644 .github/ISSUE_TEMPLATE/enhancementFeatures.yml create mode 100644 .github/ISSUE_TEMPLATE/helpWanted.yml create mode 100644 .github/ISSUE_TEMPLATE/refactor.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/ai-pr-reviewer.yml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 README.md create mode 100644 document/OhShitGit.md create mode 100644 "document/\354\202\254\354\232\251\353\260\251\353\262\225.md" diff --git a/.github/.gitmessage.txt b/.github/.gitmessage.txt new file mode 100644 index 0000000..4da87bc --- /dev/null +++ b/.github/.gitmessage.txt @@ -0,0 +1,36 @@ +# 제목은 최대 50글자까지 아래에 작성: ex) Feat: Add Key mapping + +# 본문은 아래에 작성 + +# 꼬릿말은 아래에 작성: ex) Github issue #23 +# Github issue + + +# --- COMMIT END --- +# <타입> 리스트 +# feat : 기능 (새로운 기능) +# fix : 버그 (버그 수정) +# refactor : 리팩토링 +# design : CSS 등 사용자 UI 디자인 변경 +# style : 코드 스타일 (코드 형식, 줄바꿈, 주석, 세미콜론 추가: 비즈니스 로직에 변경 없음) +# docs : 문서 수정 (문서 추가, 수정, 삭제, README) +# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음) +# chore : 기타 변경사항 (빌드 스크립트 수정, assets, package.json 변경 등) +# init : 초기 생성 +# rename : 파일 혹은 폴더명을 수정하거나 옮기는 작업만 한 경우 +# remove : 파일을 삭제하는 작업만 수행한 경우 +# ------------------ +# 제목 첫 글자를 대문자로 +# 제목은 명령문으로 +# 제목 끝에 마침표(.) 금지 +# 제목과 본문을 한 줄 띄워 분리하기 +# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다. +# 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분 +# ------------------ +# <꼬리말> +# 필수가 아닌 optioanl +# Fixes :이슈 수정중 (아직 해결되지 않은 경우) +# Resolves : 이슈 해결했을 때 사용 +# Ref : 참고할 이슈가 있을 때 사용 +# Related to : 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우) +# ex) Fixes: #47 Related to: #32, #21 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..849c5df --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,46 @@ +name: Bug +description: 버그가 발생했나요? +title: "[bug] " +labels: ["bug"] +projects: ["Dev-FE-1/26"] +body: + - type: markdown + attributes: + value: "**주의: 이슈 생성 후 Assignee로 지정해 주세요.**" + - type: textarea + id: bug-description + attributes: + label: 🐞 설명 + description: 버그에 대한 설명을 작성해 주세요. + validations: + required: true + - type: textarea + id: bug-simulation + attributes: + label: 💻 버그 시뮬레이션 + description: 버그를 발견한 상황을 단계별로 작성해 주세요. + validations: + required: true + - type: textarea + id: bug-solution + attributes: + label: 💡 해결 방법 + description: 해결 방법을 알고 있다면 작성해 주세요. + validations: + required: false + - type: textarea + id: bug-os + attributes: + label: 🌏 환경 + description: 버그가 발생한 환경에 대해 작성해 주세요. + placeholder: | + OS: macOS 14.5 + validations: + required: false + - type: textarea + id: bug-more + attributes: + label: 📝 메모 + description: 더 하고 싶은 말이 있다면 작성해 주세요. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 0000000..5aacc45 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,24 @@ +name: Documentation +description: 문서 추가/수정/삭제가 필요한가요? +title: "[documentation] " +labels: ["documentation"] +projects: ["Dev-FE-1/26"] +body: + - type: markdown + attributes: + value: "**주의: 이슈 생성 후 Assignee로 지정해 주세요.**" + - type: textarea + id: docs-description + attributes: + label: 📄 설명 + description: 추가/수정/삭제할 내용을 작성해 주세요. + placeholder: ex) README.md에 팀원 소개 추가 + validations: + required: true + - type: textarea + id: docs-memo + attributes: + label: 📝 메모 + description: 더 하고 싶은 말이 있다면 작성해 주세요. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/enhancementFeatures.yml b/.github/ISSUE_TEMPLATE/enhancementFeatures.yml new file mode 100644 index 0000000..a2f7ce6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancementFeatures.yml @@ -0,0 +1,32 @@ +name: Enhancement Features +description: 새로운 기능이나 명세가 있나요? +title: "[enhancement] " +labels: ["enhancement"] +projects: ["Dev-FE-1/26"] +body: + - type: markdown + attributes: + value: "**주의: 이슈 생성 후 Assignee로 지정해 주세요.**" + - type: textarea + id: feature-description + attributes: + label: 📄 설명 + description: 새로운 기능에 대한 설명을 작성해 주세요. + placeholder: 자세하게 작성하기! + validations: + required: true + - type: textarea + id: feature-todo + attributes: + label: ✅ 해야 할 일 + description: 해야 할 일에 대한 Tasks를 작성해 주세요. + placeholder: 최대한 세분화해서 작성! (체크박스 활용하기) + validations: + required: true + - type: textarea + id: feature-memo + attributes: + label: 📝 메모 + description: 더 하고 싶은 말이 있다면 작성해 주세요. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/helpWanted.yml b/.github/ISSUE_TEMPLATE/helpWanted.yml new file mode 100644 index 0000000..c54701e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/helpWanted.yml @@ -0,0 +1,40 @@ +name: Help Wanted +description: 도움이 필요하신가요? +title: '[help wanted] ' +labels: ['help wanted'] +projects: ["Dev-FE-1/26"] +body: + - type: markdown + attributes: + value: "**주의: 이슈 생성 후 Assignee로 지정해 주세요.**" + - type: textarea + id: help-description + attributes: + label: 😢 문제 설명 + description: 도움이 필요한 문제에 대한 설명을 작성해 주세요. + placeholder: 자세하게 작성해 주세요. + validations: + required: true + - type: textarea + id: help-context + attributes: + label: 🌐 문제 발생 상황 + description: 문제가 발생한 상황을 설명해 주세요. + placeholder: 가능한 구체적으로 작성해 주세요. + validations: + required: false + - type: textarea + id: help-attempts + attributes: + label: 💡 시도한 해결책 + description: 문제를 해결하기 위해 시도한 방법이 있다면 작성해 주세요. + placeholder: 시도한 모든 방법을 나열해 주세요. + validations: + required: false + - type: textarea + id: help-more + attributes: + label: 📝 추가 메모 + description: 추가로 하고 싶은 말이 있다면 작성해 주세요. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/refactor.yml b/.github/ISSUE_TEMPLATE/refactor.yml new file mode 100644 index 0000000..d987288 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/refactor.yml @@ -0,0 +1,32 @@ +name: Refactor +description: 리팩토링이 필요한가요? +title: "[refactor] " +labels: ["refactor"] +projects: ["Dev-FE-1/26"] +body: + - type: markdown + attributes: + value: "**주의: 이슈 생성 후 Assignee로 지정해 주세요.**" + - type: textarea + id: refactor-description + attributes: + label: 📄 설명 + description: 리팩토링이 필요한 부분의 설명을 작성해 주세요. + placeholder: 자세하게 작성하기! + validations: + required: true + - type: textarea + id: refactor-todo + attributes: + label: ✅ 해야 할 일 + description: 해야 할 일에 대한 Tasks를 작성해 주세요. + placeholder: 최대한 세분화해서 작성! (체크박스 활용하기) + validations: + required: true + - type: textarea + id: refactor-memo + attributes: + label: 📝 메모 + description: 더 하고 싶은 말이 있다면 작성해 주세요. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..8442b41 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ +# 🚀 풀 리퀘스트 제안 + + +@coderabbitai: i🤷‍♀️gnore + +## 📋 작업 내용 + +수정한 내용이나 추가한 기능에 대해 자세히 설명해 주세요. + +## 🔧 변경 사항 + +- [ ] 📃 README.md +- [ ] 📦 package.json +- [ ] 🔥 파일 삭제 +- [ ] 🧹 그 외 ex) .gitignore 등 + +주요 변경 사항을 요약해 주세요. + +## 📸 스크린샷 (선택 사항) + +수정된 화면 또는 기능을 시연할 수 있는 스크린샷을 첨부해 주세요. + +## 📄 기타 + +추가적으로 전달하고 싶은 내용이나 특별한 요구 사항이 있으면 작성해 주세요. diff --git a/.github/workflows/ai-pr-reviewer.yml b/.github/workflows/ai-pr-reviewer.yml new file mode 100644 index 0000000..67e730f --- /dev/null +++ b/.github/workflows/ai-pr-reviewer.yml @@ -0,0 +1,33 @@ +name: Code Review + +permissions: + contents: read + pull-requests: write + +on: + pull_request: + pull_request_review_comment: + types: [created] + +concurrency: + group: + ${{ github.repository }}-${{ github.event.number || github.head_ref || + github.sha }}-${{ github.workflow }}-${{ github.event_name == + 'pull_request_review_comment' && 'pr_comment' || 'pr' }} + cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }} + +jobs: + review: + runs-on: ubuntu-latest + steps: + - uses: coderabbitai/ai-pr-reviewer@latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + with: + debug: false + review_simple_changes: false + review_comment_lgtm: false + openai_light_model: gpt-3.5-turbo + openai_heavy_model: gpt-4o-2024-05-13 + language: ko-KR diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56958c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,151 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# APi Keys +.env +premissions.json + +# rollup-plugin-visualizer +stats.html + +# Github에 올리고 싶지 않은 임시 파일 +.tmp + + +# Editor directories and files +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..9e1411d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,16 @@ +# Ignore artifacts: +build +coverage + + +# node module +node_modules +scripts/workshop-setup.js + +# document, config 폴더 +document/ +.config/ + +# .github +.github/ +.firebaserc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3f81dc5 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Toy_Project_3_team4 + +> 영상 공유 SNS 플랫폼 개발 프로젝트
+ +## 목차 + +- [Toy_Project_3_team4](#toy_project_3_team4) + - [목차](#목차) + - [개발 일정](#개발-일정) + - [폴더 구조도](#폴더-구조도) + - [설치 및 실행 방법](#설치-및-실행-방법) + - [사용한 기술](#사용한-기술) + - [핵심 기능](#핵심-기능) + - [아키텍처](#아키텍처) + - [주요 이슈](#주요-이슈) + - [기여자](#기여자) + +## 개발 일정 + +- 총 제작 기간: 8월 19일(월) ~ 9월 9일(월) 3주간 진행 + - 중간 점검: 8/30 (금) 18:00 ~ 20:00 + - **마감일: 2024-09-09 (월) 14:00** + - 발표회 : 9/9 (월) 17:00 ~ 20:00 + - 리팩토링 기간 : 9/10 (화) ~ 9/12 (목) + +## 폴더 구조도 + +## 설치 및 실행 방법 + + + +## 사용한 기술 + + + +## 핵심 기능 + + + +## 아키텍처 + + + +## 주요 이슈 + + + + +## 기여자 + +| 이름 & 깃허브 | 담당 | +| -------------------------------------------------- | ---------- | +| [김다은 devdeun](https://github.com/devdeun) | 프론트엔드 | +| [고낙연 nakyeonko3](https://github.com/nakyeonko3) | 프론트엔드 | +| [양해석 HSjjs98](https://github.com/HSjjs98) | 프론트엔드 | +| [최원지 wonjichoe](https://github.com/wonjichoe) | 프론트엔드 | diff --git a/document/OhShitGit.md b/document/OhShitGit.md new file mode 100644 index 0000000..22d4634 --- /dev/null +++ b/document/OhShitGit.md @@ -0,0 +1,220 @@ +# Oh Shit Git!? 깃 실수 해결 백서 + +[Oh Shit, Git!?!](https://ohshitgit.com/) + +![](https://i.imgur.com/3R9iaYo.jpeg) + +Git은 어렵습니다. 망치는 것은 쉽지만 실수를 고치는 방법을 알아내는 것은 빌어먹을 불가능합니다. Git 문서에는 문제를 해결하기 위해 *알아야 할 항목의 이름을 이미 알고 있지 않는 한* 혼란에서 벗어나는 방법을 검색할 수 없는 닭고기와 달걀 문제가 있습니다 . + +그래서 여기에 내가 겪었던 몇 가지 나쁜 상황과 결국 어떻게 그 상황에서 벗어날 수 있었는지 *간단한 영어로 설명합니다* . + +## [아 젠장, 내가 뭔가 크게 잘못했는데, git에게 마법의 타임머신이 있다고 말해주세요!?!](https://ohshitgit.com/#magic-time-machine) + +```git +git reflog +# you will see a list of every thing you've +# done in git, across all branches! +# each one has an index HEAD@{index} +# find the one before you broke everything +git reset HEAD@{index} +# magic time machine +``` + +이를 사용하여 실수로 삭제한 항목을 다시 가져오거나, 저장소를 손상시킨 일부 항목을 제거하거나, 잘못된 병합 후 복구하거나, 실제로 작동했던 시점으로 돌아갈 수 있습니다. 나는 `reflog`많이 사용합니다. 메가 모자 추가를 제안해주신 많은 분들이 주신 메가 모자 팁! + +## [아 젠장, 약속을 하고 나서 작은 변화 하나가 필요하다는 걸 즉시 깨달았어요!](https://ohshitgit.com/#change-last-commit) + +```git +# make your change +git add . # or add individual files +git commit --amend --no-edit +# now your last commit contains that change! +# WARNING: never amend public commits +``` + +커밋한 다음 테스트/린터를 실행하고 FML을 실행하면 일반적으로 이런 일이 발생합니다. 등호 뒤에 공백을 넣지 않았습니다. `rebase -i`새로운 커밋으로 변경을 수행한 다음 두 커밋을 함께 압축할 수도 있지만 이는 약 백만 배 더 빠릅니다. + +_경고: 공개/공유 브랜치로 푸시된 커밋을 수정해서는 안 됩니다! 로컬 복사본에만 존재하는 커밋만 수정하세요. 그렇지 않으면 시간이 많이 걸릴 것입니다._ + +## [아 젠장, 마지막 커밋의 메시지를 변경해야 해요!](https://ohshitgit.com/#change-last-commit-message) + +```git +git commit --amend +# follow prompts to change the commit message +``` + +어리석은 커밋 메시지 형식 요구 사항. + +## [아 젠장, 새 브랜치에 있어야 할 것을 실수로 마스터에 커밋했습니다!](https://ohshitgit.com/#accidental-commit-master) + +```git +# create a new branch from the current state of master +git branch some-new-branch-name +# remove the last commit from the master branch +git reset HEAD~ --hard +git checkout some-new-branch-name +# your commit lives in this branch now :) +``` + +`git reset HEAD@{number-of-commits-back}`참고: 커밋을 이미 공개/공유 브랜치에 푸시한 경우에는 작동하지 않으며 다른 작업을 먼저 시도한 경우 `HEAD~`. 무한한 슬픔. 또한 많은 분들이 저 자신도 몰랐던 이 내용을 더 짧게 만드는 멋진 방법을 제안해 주셨습니다. 다들 감사 해요! + +## [아 젠장, 실수로 잘못된 브랜치를 커밋했습니다!](https://ohshitgit.com/#accidental-commit-wrong-branch) + +```git +# undo the last commit, but leave the changes available +git reset HEAD~ --soft +git stash +# move to the correct branch +git checkout name-of-the-correct-branch +git stash pop +git add . # or add individual files +git commit -m "your message here"; +# now your changes are on the correct branch +``` + +많은 사람들이 `cherry-pick`이 상황에도 사용을 제안했으므로 가장 적합한 것을 선택하세요! + +```git +git checkout name-of-the-correct-branch +# grab the last commit to master +git cherry-pick master +# delete it from master +git checkout master +git reset HEAD~ --hard +``` + +## [아 젠장, diff를 실행하려고 했는데 아무 일도 일어나지 않았나요?!](https://ohshitgit.com/#dude-wheres-my-diff) + +파일을 변경했지만 `diff`비어 있다는 것을 알고 있다면 `add`파일을 스테이징으로 설정했을 가능성이 높으며 특수 플래그를 사용해야 합니다. + +```git +git diff --staged +``` + +̅\_(ツ)\_/̅ 아래에 파일을 저장하세요. (예, 이것이 버그가 아닌 기능이라는 것은 알지만, 이런 일이 처음 발생하면 존나 당황스럽고 명확하지 않습니다!) + +## [아 젠장, 5개 정도 전의 커밋을 실행 취소해야 해요!](https://ohshitgit.com/#undo-a-commit) + +```git +# find the commit you need to undo +git log +# use the arrow keys to scroll up and down in history +# once you've found your commit, save the hash +git revert [saved hash] +# git will create a new commit that undoes that commit +# follow prompts to edit the commit message +# or just save and commit +``` + +변경 사항을 실행 취소하기 위해 기존 파일 내용을 추적하고 기존 파일에 복사하여 붙여넣을 필요가 없다는 것이 밝혀졌습니다! 버그를 범한 경우 를 사용하여 한 번에 커밋을 모두 취소할 수 있습니다 `revert`. + +전체 커밋 대신 단일 파일을 되돌릴 수도 있습니다! 하지만 물론, 진정한 자식 방식에서는 완전히 다른 빌어먹을 명령 세트입니다... + +## [아 젠장, 파일 변경 사항을 취소해야 해요!](https://ohshitgit.com/#undo-a-file) + +```git +# find a hash for a commit before the file was changed +git log +# use the arrow keys to scroll up and down in history +# once you've found your commit, save the hash +git checkout [saved hash] -- path/to/file +# the old version of the file will be in your index +git commit -m "Wow, you don't have to copy-paste to undo" +``` + +마침내 이것을 알아냈을 때 그것은 엄청났습니다. 거대한. 거대한. 하지만 진지하게, 도대체 어떤 행성에서 `checkout --`파일을 실행 취소하는 가장 좋은 방법이 의미가 있습니까? :리누스-토르발즈에서 주먹을 흔들다: + +## [이 소음은 젠장, 포기하겠습니다.](https://ohshitgit.com/#fuck-this-noise) + +```git +cd .. +sudo rm -r fucking-git-repo-dir +git clone https://some.github.url/fucking-git-repo-dir.git +cd fucking-git-repo-dir +``` + +이에 대해 Eric V.에게 감사드립니다. 이 농담 의 사용에 대한 모든 불만 사항은 `sudo`그에게 전달될 수 있습니다. + +하지만 실제로 브랜치가 너무 지루해서 "git 승인" 방식으로 원격 저장소와 동일하게 저장소의 상태를 재설정해야 한다면 이것을 시도해 보세요. 하지만 이는 파괴적이고 복구할 수 없는 작업이라는 점에 주의하세요! + +```git +# get the lastest state of origin +git fetch origin +git checkout master +git reset --hard origin/master +# delete untracked files and directories +git clean -d --force +# repeat checkout/reset/clean for each borked branch +``` + +## 마지막 커밋 이후의 모든 변경 사항 취소하기 + +``` +git clean -fd +git restore . +``` + +## 특정 원격 브랜치 가져오기 + +``` +git switch -c origin/ +``` + +## main브랜치를 default branch로 바꾸기 + +- 기본 브랜치 를 main으로 변경 + +```bash +git config --global init.defaultBranch main +``` + +## git pull --force 강제 pull 하는 방법 + +```bash +git add . +git stash +git stash drop +git pull +``` + +## 커밋 내역 합치는 방법, 커밋 메시지 수정 방법 + +``` +git rebase -i --root +``` + +이 명령어를 실행하면 전체 커밋 로그가 열립니다. + +2. **커밋 목록에서 합치고자 하는 커밋들 찾기** + +텍스트 에디터에서 합치고자 하는 커밋들을 찾습니다. 가장 오래된 커밋부터 시작해서 `pick`을 `squash`(또는 `s`)로 변경합니다. 가장 최신 커밋의 `pick`은 그대로 둡니다. + +3. **커밋 메시지 수정하기** + +파일을 저장하고 텍스트 에디터를 종료하면 다른 텍스트 에디터가 열립니다. 여기에서 새로운 커밋 메시지를 작성할 수 있습니다. + +4. **rebase 완료하기** + +새로운 커밋 메시지를 작성하고 텍스트 에디터를 종료하면 rebase가 완료됩니다. 이제 `git log`를 실행하면 선택한 이전 커밋들이 하나의 커밋으로 합쳐진 것을 확인할 수 있습니다. + + +## 코드 리뷰용 브랜치 만들고 PR하는 방법 +전체 커밋이력이 다 나오는 PR 내역 만드는 방법 + +### 조건 +터미널 환경이 git bash, linux, mac 을 사용해야함. + +1. 첫번째 커밋 해시 찾기 + +git switch main +git log --reverse --oneline | head -1 + +2. 커밋해시로 브랜치 생성 + +git switch -c <브랜치명> <첫번째커밋해시> + +3. 생성된 브랜치를 깃헙(원격)에 푸시 + +git push -u origin <브랜치명> + +4. <브랜치명>에 main브랜치를 merge하는 PR을 하기 diff --git "a/document/\354\202\254\354\232\251\353\260\251\353\262\225.md" "b/document/\354\202\254\354\232\251\353\260\251\353\262\225.md" new file mode 100644 index 0000000..4903ed5 --- /dev/null +++ "b/document/\354\202\254\354\232\251\353\260\251\353\262\225.md" @@ -0,0 +1,150 @@ +# Toy_Project_III_template + +토이프로젝트 템플릿 + +## 목차 + +- [Toy\_Project\_III\_template](#toy_project_iii_template) + - [목차](#목차) + - [기능과 문서 목록](#기능과-문서-목록) + - [사용 방법](#사용-방법) + - [템플릿으로 리포지토리 생성하기](#템플릿으로-리포지토리-생성하기) + - [AI PR 리뷰어 사용 방법](#ai-pr-리뷰어-사용-방법) + - [commit message 컨벤션 세팅 및 사용 방법](#commit-message-컨벤션-세팅-및-사용-방법) + - [issue, pr 컨벤션 세팅 및 사용 방법](#issue-pr-컨벤션-세팅-및-사용-방법) + - [이슈 컨벤션 종류](#이슈-컨벤션-종류) + +## 기능과 문서 목록 + +- issue 컨벤션 +- commit message 컨벤션 +- pr 컨벤션 +- .gitignore +- .prettierignore +- ai 코드 리뷰 +- [리드미 템플릿 READM.md](./document/README.md) +- [Git 실수 해결 백서 OhShitGit](./document/OhShitGit.md) + +## 사용 방법 + +### 템플릿으로 리포지토리 생성하기 +--- + +리포지토리를 생성할 때 Repository template을 누르고, +Dev-FE-1/Toy_Project_III_template를 선택해서 템플릿으로 리포지토리를 생성하면 됨. +![Image](https://i.imgur.com/pdmPrHM.png) +![Image](https://i.imgur.com/fu8eIT5.png) + +아래의 설정들을 한 다음에 각종 컨벤션과 ai 리뷰를 설정할 수 있음. + +### AI PR 리뷰어 사용 방법 +--- + +참고 : [GitHub - coderabbitai/ai-pr-reviewer: AI-based Pull Request Summarizer and Reviewer with Chat Capabilities.](https://github.com/coderabbitai/ai-pr-reviewer?tab=readme-ov-file#faqs) + +AI 코드 리뷰를 사용하려면 open ai의 api key 가 필요함. + +0. 먼저 위에서 설명한 템플릿으로 리포지토리를 만들어야됨. +**템플릿 없이 ai-pr 리뷰만 적용하고 싶다면** 리포지토리를 생성하고 나서 프로젝트의 `.github/workflows/ai-pr-reviewer.yml` 위치에 yml 파일을 만들어주면됨. + +yml 파일은 아래 링크에 들어가서 내용을 그대로 복사해서 만들면됨. +[ai-pr-reviewer.yml 링크](/.github/workflows/ai-pr-reviewer.yml) + +1. 아래 링크 들어가서 gpt api key 발급받기
+[open ai platform 링크](https://platform.openai.com/api-keys)
+ +api key 발급 받는 방법은 아래 링크를 참고해서 발급을 받으면됨.
+[Chat GPT API 키 발급 및 정산 카드 등록하기 초간단 방법](https://wise-office-worker.tistory.com/71) + +2. 리포지토리에 Setting -> Secrets and variables -> Actions 차례로 이동하기 + +![Image](https://i.imgur.com/0pLR52G.png) + +3. New repository secret 버튼 누르고, OPENAI_API_KEY 라는 이름으로 방금 발급 받은 API KEY를 넣어서 Scret 변수 만들기 + ![Image](https://imgur.com/yEVn0hN.png) + +4. 이제부터 PR을 할 때마다 아래와 같이 코드 리뷰가 자동으로 생성됨. + +![Image](https://i.imgur.com/eoqy32j.png) + +### commit message 컨벤션 세팅 및 사용 방법 +--- +1. pull requests 익스텐션 설치 + [github pull requests 익스텐션 링크](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github) + +2. 해당 명령어를 프로젝트 루트 위치의 터미널창에서 입력 + +아래 명령어를 입력하면 커밋 템플릿 설정은 완료됨. + +```bash +cd <프로젝트 위치> +git config commit.template ./.github/.gitmessage.txt +``` + +커밋 메시지를 적을 때 vim이 불편하다면 아래의 명령어를 입력 + +```bash +git config --global core.editor "code --wait" +``` + +3. commit message 컨벤션으로 커밋 해보기 + +vscode에서 커밋 버튼을 누르거나, `git commit` 명령어를 터미널에 입력 + +```bash +git commit +``` + +4. 커밋 컨벤션 템플릿 사용법 예시 + +``` +fix: cors에 배포 도메인 koyeb.com을 추가함. +- cors 이슈로 인해 GET api/v1/employees 가 작동 안하는 문제 해결 +- server/index.js 코드에 cors를 추가함. +Gihub issue: #1 +``` + +- [커밋 컨벤션 템플릿 링크](./.github/.gitmessage.txt) + +### issue, pr 컨벤션 세팅 및 사용 방법 +--- +1. 이슈 라벨 세팅에 들어가서 아래처럼 이슈 라벨을 다 바꾸기 + +![Image](https://i.imgur.com/AkAGZmn.png) + +이렇게 다 바꿔주면 된다. +![Image](https://i.imgur.com/vMb3TaC.png) + +2. 이제 PR이나 이슈를 작성 할 때 자동으로 미리 만들어둔 컨벤션이 사용된다. + +![Image](https://i.imgur.com/PO9Yjn2.png) + +#### 이슈 컨벤션 종류 + +**Enhancement Features** + +- 새로운 기능이나 명세 + ![Image](https://i.imgur.com/TnQ3XJ0.png) + +**Documentation** + +- 각종 문서 생성/삭제/수정 + +![Image](https://i.imgur.com/xCnuE1f.png) + +**Help Wanted** + +- 도움이 필요할 때 작성하는 이슈 + ![Image](https://i.imgur.com/bDNai2I.png) + +**Refactor** + +- 리펙토링 제안 + ![Image](https://i.imgur.com/C82ykoq.png) + +**blank issue** + +- 이슈 컨벤션 중에 없는 카테고리로 이슈를 생성하고 싶을 때 이용 +- Open a blank issue 버튼을 누르면 빈 커밋이 생성됨. + ![Image](https://i.imgur.com/ZbFTDEB.png) + ![Image](https://i.imgur.com/UYZyxQA.png)