# Gitea 작성 가이드 ## 📋 매일 사용하는 Git 워크플로우 ### 작업 시작 전에 항상! ```bash git pull origin main ``` > 다른 기기에서 작업했거나 웹에서 수정한 내용을 받아옵니다. ### 작업 완료 후에 항상! ```bash git add . git commit -m "적절한 커밋 메시지" git push origin main ``` > 변경사항을 저장하고 Gitea에 업로드합니다. ## 📝 커밋 메시지 작성 규칙 ### Conventional Commits 스타일 (영어) ```bash feat: 새로운 기능 추가 fix: 버그 수정 docs: 문서 변경 style: 코드 포맷팅 (기능 변경 없음) refactor: 코드 리팩토링 test: 테스트 추가/수정 chore: 빌드나 설정 변경 ``` ### 실제 사용 예시 ```bash git commit -m "feat: 계산기 기능 추가 및 오류 처리" git commit -m "fix: 0으로 나누기 오류 해결" git commit -m "docs: README에 설치 가이드 추가" git commit -m "refactor: main.py 코드 구조 개선" git commit -m "test: 수학 연산 단위 테스트 추가" ``` ## 📁 추천 폴더 구조 ### 전체 코드 작업공간 ``` /Users/hyungiahn/Documents/code/ ├── coding-guide/ # 이 가이드 저장소 ├── python-projects/ # Python 프로젝트들 │ ├── calculator/ │ ├── web-scraper/ │ └── data-analysis/ ├── javascript-projects/ # JavaScript 프로젝트들 │ ├── weather-app/ │ ├── todo-list/ │ └── game-collection/ ├── learning/ # 학습 프로젝트들 │ ├── algorithms/ │ ├── tutorials/ │ └── practice/ └── experiments/ # 실험적인 코드들 ├── ai-testing/ └── new-tech/ ``` ### 새 프로젝트 시작시 ```bash # 항상 code 폴더에서 시작 cd /Users/hyungiahn/Documents/code # 새 프로젝트 클론 또는 생성 git clone http://git.hyungi.net/hyungi/new-project.git # 또는 mkdir new-project && cd new-project git init ``` ## 🗂️ 개별 프로젝트 폴더 구조 템플릿 ### 하나의 프로젝트만 있는 경우 ``` 내-프로젝트/ ├── README.md # 프로젝트 설명 ├── requirements.txt # Python 의존성 목록 ├── package.json # JavaScript 의존성 목록 ├── .gitignore # Git에서 제외할 파일들 ├── src/ # 실제 코드 폴더 │ ├── main.py │ └── utils/ ├── tests/ # 테스트 코드 폴더 ├── docs/ # 문서 폴더 └── examples/ # 사용 예시 폴더 ``` ### 여러 프로젝트를 모아둔 경우 ``` 코딩-프로젝트들/ ├── README.md ├── python/ │ ├── 계산기/ │ ├── 웹크롤러/ │ └── 데이터분석/ ├── javascript/ │ ├── 날씨앱/ │ ├── 게임모음/ │ └── 할일관리/ ├── 학습노트/ │ ├── 알고리즘/ │ └── 디자인패턴/ └── 유틸스크립트/ ``` ## 📖 README.md 작성 템플릿 ```markdown # 프로젝트 이름 ## 📖 이 프로젝트는 무엇인가요? 프로젝트에 대한 간단한 설명을 여기에 적어주세요. ## 🚀 어떻게 설치하고 실행하나요? ```bash # 필요한 라이브러리 설치 npm install # 또는 pip install -r requirements.txt # 프로그램 실행 npm start # 또는 python src/main.py ``` ## 💡 주요 기능들 - 기능 1: 어떤 일을 하는지 설명 - 기능 2: 어떤 일을 하는지 설명 - 기능 3: 어떤 일을 하는지 설명 ## 🔧 사용 방법 ```python # 코드 사용 예시를 여기에 from src.main import Calculator calc = Calculator() result = calc.add(5, 3) print(result) # 8 ``` ## 📝 개발하면서 배운 것들 ### 새로 알게 된 것 - 학습 포인트 1 - 학습 포인트 2 - 학습 포인트 3 ### 앞으로 추가하고 싶은 기능 - 개선 계획 1 - 개선 계획 2 - 개선 계획 3 ## 📅 개발 일지 - 2024-07-15: 기본 기능 구현 완료 - 2024-07-16: 오류 처리 기능 추가 - 2024-07-17: 사용자 인터페이스 개선 ``` ## 🚫 .gitignore 파일 설정 (Git에서 제외할 파일들) ### Python 프로젝트용 ``` # Python 캐시 파일들 __pycache__/ *.pyc *.pyo # 가상환경 폴더 venv/ env/ .venv/ # 설정 파일 (비밀번호 등이 들어있는) .env config.ini secrets.json # 로그 파일 *.log # 맥/윈도우 시스템 파일 .DS_Store Thumbs.db ``` ### JavaScript 프로젝트용 ``` # Node.js 모듈들 node_modules/ # 빌드 결과물 dist/ build/ # 환경 설정 파일 .env .env.local .env.production # 로그 파일 npm-debug.log* yarn-debug.log* # 시스템 파일 .DS_Store Thumbs.db ``` ### 모든 프로젝트 공통 ``` # 에디터 설정 폴더 .vscode/ .idea/ # 임시 파일들 *.swp *.tmp *.bak # 압축 파일들 (용량이 큰) *.zip *.tar.gz ``` ## 🔧 Git 처음 설정하기 ### 맨 처음 한 번만 하는 설정 ```bash # 내 이름과 이메일 등록 git config --global user.name "홍길동" git config --global user.email "gildong@example.com" # 코드 작업 폴더로 이동 cd /Users/hyungiahn/Documents/code # Gitea에서 저장소 가져오기 (리버스 프록시 환경) git clone http://git.hyungi.net/사용자명/저장소명.git cd 저장소명 ``` ### SSH 키 설정하기 (비밀번호 없이 사용하려면) ```bash # SSH 키 만들기 ssh-keygen -t ed25519 -C "gildong@example.com" # 공개키 내용 확인하기 cat ~/.ssh/id_ed25519.pub # 위 내용을 복사해서 Gitea 설정에서 SSH 키로 등록 # 등록 후에는 이렇게 주소 변경 git remote set-url origin git@gitssh.hyungi.net:사용자명/저장소명.git ``` ## 🔄 브랜치 사용하기 (고급 기능, 선택사항) ### 새로운 기능을 개발할 때 ```bash # 새 브랜치 만들기 git checkout -b feature/새로운기능 # 개발하고 커밋하기 git add . git commit -m "feat: 새로운 기능 구현" # 메인 브랜치로 돌아가서 합치기 git checkout main git merge feature/새로운기능 git push origin main # 다 쓴 브랜치 삭제하기 git branch -d feature/새로운기능 ``` ## ✅ 새 프로젝트 시작할 때 체크리스트 ### Gitea 웹에서 하는 일 - [ ] 새 저장소 만들기 - [ ] README.md 파일 포함하기 - [ ] .gitignore 템플릿 선택하기 - [ ] 라이선스 선택하기 (MIT 추천) ### 내 컴퓨터에서 하는 일 - [ ] `git clone` 으로 저장소 가져오기 - [ ] README.md 내용 채우기 - [ ] .gitignore 파일 확인하고 수정하기 - [ ] 첫 번째 커밋하고 푸시하기 ## 📅 매일/주간 할 일 체크리스트 ### 매일 코딩할 때 - [ ] `git pull origin main` (작업 시작 전) - [ ] 코드 작성하고 수정하기 - [ ] `git add .` (변경사항 스테이징) - [ ] `git commit -m "메시지"` (커밋하기) - [ ] `git push origin main` (Gitea에 업로드) ### 일주일에 한 번 정리할 때 - [ ] README.md 파일 업데이트하기 - [ ] 안 쓰는 파일들 정리하기 - [ ] 학습 노트 정리해서 추가하기 - [ ] 다음 주 개발 계획 세우기 ## 🎯 자주 사용하는 Git 명령어들 ### 현재 상태 확인하기 ```bash git status # 지금 어떤 파일이 변경되었는지 보기 git log --oneline -10 # 최근 10개 커밋 간단히 보기 git diff # 정확히 어떤 부분이 바뀌었는지 보기 ``` ### 실수했을 때 되돌리기 ```bash git reset HEAD~1 # 마지막 커밋 취소 (파일 변경사항은 그대로) git checkout -- 파일명 # 특정 파일의 변경사항 취소 git clean -fd # 추적되지 않는 새 파일들 삭제 ``` ### 브랜치 관리하기 ```bash git branch # 현재 있는 브랜치들 보기 git branch -d 브랜치명 # 브랜치 삭제하기 git checkout 브랜치명 # 다른 브랜치로 이동하기 ``` ### 원격 저장소 관리하기 ```bash git remote -v # 연결된 원격 저장소 주소 보기 git fetch origin # 원격 저장소 정보만 가져오기 (병합은 안함) git pull origin main # 원격 저장소 내용 가져와서 자동 병합 ``` ## 💡 리버스 프록시 환경 설정 팁 ### 현재 환경 구성 ``` HTTP Git: git.hyungi.net → DS1525+ 10300 포트 (Gitea 웹/HTTP) SSH Git: gitssh.hyungi.net → DS1525+ 10322 포트 (Gitea SSH) ``` ### HTTP 접속 (웹/Git) ```bash # 웹 브라우저에서 http://git.hyungi.net # Git 명령어에서 git clone http://git.hyungi.net/사용자명/저장소명.git ``` ### SSH 접속 (Git) ```bash # SSH Git 클론 (git@ 는 그대로, 뒤에 본인 계정명) git clone git@gitssh.hyungi.net:본인계정명/저장소명.git # 예시: hyungi 계정의 my-project 저장소 git clone git@gitssh.hyungi.net:hyungi/my-project.git # 기존 저장소 SSH로 변경 git remote set-url origin git@gitssh.hyungi.net:hyungi/저장소명.git ``` ### SSH 설정 파일 (선택사항) ```bash # ~/.ssh/config 파일 생성 nano ~/.ssh/config # 아래 내용 추가: Host gitssh.hyungi.net HostName gitssh.hyungi.net User git IdentityFile ~/.ssh/id_ed25519 ``` ## 🆘 자주 발생하는 문제와 해결방법 ### 1. "Your branch is behind" 오류가 날 때 ```bash # 원인: 다른 곳에서 변경한 내용이 있음 # 해결: 먼저 pull 받고 나서 push git pull origin main git push origin main ``` ### 2. "conflict" (충돌) 오류가 날 때 ```bash # 파일을 열어서 충돌 부분을 직접 수정 # <<<<<<< HEAD 와 >>>>>>> 사이의 내용을 정리 # 수정 후 다시 커밋 git add . git commit -m "fix: 충돌 해결" git push origin main ``` ### 3. 잘못 커밋했을 때 ```bash # 커밋 메시지만 바꾸고 싶을 때 git commit --amend -m "올바른 커밋 메시지" # 마지막 커밋을 완전히 취소하고 싶을 때 git reset HEAD~1 ``` --- 📌 **이 가이드를 즐겨찾기해두고 모를 때마다 참고하세요!** 💡 **팁**: 처음에는 복잡해 보이지만, 매일 `pull → add → commit → push` 만 반복하면 금세 익숙해집니다! 📅 **마지막 업데이트**: 2024-07-15