diff --git a/git-quick-reference.md b/git-quick-reference.md new file mode 100644 index 0000000..a365f8d --- /dev/null +++ b/git-quick-reference.md @@ -0,0 +1,120 @@ +# Git Commands Quick Reference Card + +## Essential Daily Commands + +### Starting Your Work Session +```bash +git status # Check current repository state +git pull origin main # Get latest changes from remote +git checkout -b feature/name # Create and switch to new branch +``` + +### During Development +```bash +git status # Check what files have changed +git diff # See what changes you've made +git add filename # Stage specific file +git add . # Stage all changes +git commit -m "message" # Save changes with description +git push origin branch-name # Backup your work to remote +``` + +### Completing a Feature +```bash +git checkout main # Switch back to main branch +git pull origin main # Get latest changes +git merge feature/name # Merge your feature +git push origin main # Push completed feature +git branch -d feature/name # Delete local feature branch +``` + +### Emergency Commands +```bash +git stash # Temporarily save uncommitted work +git stash pop # Restore stashed work +git reset --soft HEAD~1 # Undo last commit, keep changes +git checkout -- filename # Discard changes to specific file +``` + +### Information Commands +```bash +git log --oneline # View commit history +git branch -a # See all branches +git remote -v # See remote repositories +git diff HEAD~1 # Compare with previous commit +``` + +## Commit Message Best Practices + +### Good Examples: +- `Add user authentication system` +- `Fix login validation bug` +- `Update README with installation steps` +- `Refactor database connection logic` + +### Bad Examples: +- `fixed stuff` +- `updates` +- `asdf` +- `commit` + +### Conventional Commit Format: +- `feat: add user registration` +- `fix: resolve login timeout issue` +- `docs: update API documentation` +- `style: format code with prettier` + +## File Naming Conventions + +### Repository Names: +- Use lowercase letters +- Use hyphens instead of spaces +- Be descriptive but concise +- Examples: `user-management-system`, `blog-website`, `data-analysis-tools` + +### Branch Names: +- `feature/add-user-auth` +- `bugfix/fix-login-error` +- `docs/update-readme` +- `hotfix/critical-security-patch` + +### File Names: +- Use meaningful names +- Follow language conventions +- Examples: `user_controller.py`, `LoginForm.js`, `database-schema.sql` + +## Common Git Patterns + +### Feature Development Workflow: +``` +main branch + ↓ +feature branch (work here) + ↓ +merge back to main + ↓ +delete feature branch +``` + +### Daily Routine: +``` +Morning: git pull origin main +Work: edit → add → commit → push (repeat) +Evening: merge completed features to main +``` + +### Project Structure: +``` +my-project/ +├── README.md +├── .gitignore +├── LICENSE +├── CHANGELOG.md +├── src/ +│ ├── main.py +│ └── utils.py +├── docs/ +│ └── setup.md +└── tests/ + └── test_main.py +``` \ No newline at end of file diff --git a/gitea_setup.md b/gitea_setup.md new file mode 100644 index 0000000..e475934 --- /dev/null +++ b/gitea_setup.md @@ -0,0 +1,542 @@ +# Complete Gitea Setup Guide for Beginners + +## A) Initial Setup of Gitea on Computer + +### 1. Install Git on Your Computer + +**Windows:** +- Download Git from https://git-scm.com/download/win +- Run installer with default settings +- Open Git Bash or Command Prompt + +**macOS:** +- Install via Homebrew: `brew install git` +- Or download from https://git-scm.com/download/mac + +**Linux (Ubuntu/Debian):** +- Install via package manager: `sudo apt-get install git` + +### 2. Verify Git Installation +```bash +git --version +``` + +### 3. Connect Computer to Your Existing Codebase/Folder + +**Option 1: Connect Existing Local Folder to Gitea** +```bash +cd /path/to/your/existing/project +git init +git remote add origin git@your-gitea-server:username/repository-name.git +git add . +git commit -m "Initial commit" +git push -u origin main +``` + +**Option 2: Clone Existing Repository from Gitea** +```bash +git clone git@your-gitea-server:username/repository-name.git +cd repository-name +``` + +## B) Initial Configuration on New Computer + +### 1. Configure Git Identity +```bash +git config --global user.name "Your Full Name" +git config --global user.email "your.email@example.com" +git config --global core.editor "nano" # or "code" for VS Code +git config --global color.ui true +``` + +### 2. Generate SSH Key for Secure Authentication +```bash +# Generate new SSH key +ssh-keygen -t ed25519 -C "your.email@example.com" + +# Start SSH agent +eval "$(ssh-agent -s)" + +# Add key to agent +ssh-add ~/.ssh/id_ed25519 + +# Display public key to copy to Gitea +cat ~/.ssh/id_ed25519.pub +``` + +### 3. Add SSH Key to Gitea Account +1. Copy the public key output from above +2. Log into Gitea web interface +3. Go to Settings > SSH/GPG Keys +4. Click "Add Key" +5. Paste public key in Content field +6. Click "Add Key" + +### 4. Test SSH Connection +```bash +ssh -T git@your-gitea-server.com +``` +You should see a success message. + +### 5. Set Up Git Aliases (Optional but Helpful) +```bash +git config --global alias.st status +git config --global alias.co checkout +git config --global alias.br branch +git config --global alias.ci commit +git config --global alias.lg "log --oneline --graph --decorate" +``` + +## C) Steps to Form a New Project Each Time + +### 1. Create Repository in Gitea Web Interface +1. Log into Gitea +2. Click "+" menu in top-right corner +3. Select "New Repository" +4. Fill out repository details: + - **Repository Name:** use-lowercase-with-hyphens + - **Description:** Brief project description + - **Visibility:** Public or Private + - **Initialize Repository:** Check if starting fresh + - **Add .gitignore:** Select template for your language + - **Add License:** Choose appropriate license +5. Click "Create Repository" + +### 2. Clone and Set Up Locally +```bash +# Clone the new repository +git clone git@your-gitea-server:username/repository-name.git + +# Navigate to project directory +cd repository-name + +# Create basic project structure +mkdir src docs tests +touch src/main.py # or main.js, main.cpp, etc. + +# Add initial files +git add . +git commit -m "Initial project structure" +git push origin main +``` + +### 3. Create Development Branch +```bash +# Create and switch to development branch +git checkout -b develop + +# Push development branch to remote +git push -u origin develop +``` + +## D) Templates and Documents for New Setup + +### 1. Essential Files Every Repository Should Have + +#### README.md Template +```markdown +# Project Name + +Brief description of what this project does. + +## Features +- Feature 1 +- Feature 2 +- Feature 3 + +## Installation +```bash +git clone git@your-gitea-server:username/project-name.git +cd project-name +# Add installation steps +``` + +## Usage +```bash +# Add usage examples +``` + +## Configuration +Describe any configuration needed. + +## Contributing +Guidelines for contributing to the project. + +## License +This project is licensed under the [License Name](LICENSE) - see the LICENSE file for details. +``` + +#### .gitignore Template (General) +``` +# Operating System Files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Editor Files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Log Files +*.log +logs/ + +# Environment Files +.env +.env.local +.env.production +*.secret + +# Temporary Files +*.tmp +*.temp +temp/ +tmp/ + +# Build Files +dist/ +build/ +*.o +*.exe +``` + +#### LICENSE Template (MIT) +``` +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +#### CHANGELOG.md Template +```markdown +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added +- New features + +### Changed +- Changes in existing functionality + +### Deprecated +- Soon-to-be removed features + +### Removed +- Removed features + +### Fixed +- Bug fixes + +### Security +- Security improvements + +## [1.0.0] - 2024-01-01 +### Added +- Initial release +``` + +### 2. Gitea-Specific Templates + +#### Issue Template (.gitea/ISSUE_TEMPLATE.md) +```markdown +## Bug Description +A clear and concise description of what the bug is. + +## Steps to Reproduce +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +## Expected Behavior +A clear and concise description of what you expected to happen. + +## Screenshots +If applicable, add screenshots to help explain your problem. + +## Environment +- OS: [e.g. Windows 10, macOS 12, Ubuntu 20.04] +- Version: [e.g. 1.2.3] +- Browser: [e.g. Chrome 96, Firefox 95] + +## Additional Context +Add any other context about the problem here. +``` + +#### Pull Request Template (.gitea/PULL_REQUEST_TEMPLATE.md) +```markdown +## Description +Brief description of changes made. + +## Type of Change +- [ ] Bug fix +- [ ] New feature +- [ ] Documentation update +- [ ] Performance improvement +- [ ] Code refactoring + +## Testing +- [ ] I have tested this change locally +- [ ] I have added/updated tests as needed +- [ ] All existing tests pass + +## Checklist +- [ ] My code follows the project's style guidelines +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +``` + +## E) Very Detailed Daily Coding Workflow + +### 1. Start of Each Work Session +```bash +# Check current status +git status + +# Get latest changes from remote +git pull origin main + +# Create new feature branch (use descriptive names) +git checkout -b feature/add-user-authentication +# or +git checkout -b bugfix/fix-login-error +# or +git checkout -b docs/update-readme +``` + +### 2. During Development + +#### Making Changes +```bash +# Check what files have changed +git status + +# See specific changes in files +git diff + +# See changes for specific file +git diff filename.py +``` + +#### Staging and Committing Changes +```bash +# Stage specific files +git add src/auth.py src/login.py + +# Or stage all changes +git add . + +# Or stage all changes in current directory +git add -A + +# Check what's staged +git status + +# Commit with descriptive message +git commit -m "Add user authentication with email verification" + +# Or commit with detailed message +git commit -m "Add user authentication system + +- Implement email-based user registration +- Add password hashing with bcrypt +- Create login/logout functionality +- Add session management +- Include email verification workflow + +Fixes #123" +``` + +#### Best Practices for Commit Messages +- Use present tense imperative mood ("Add feature" not "Added feature") +- Keep first line under 50 characters +- Add blank line before detailed description +- Reference issue numbers when applicable +- Use conventional commit format: + - `feat:` for new features + - `fix:` for bug fixes + - `docs:` for documentation + - `style:` for formatting changes + - `refactor:` for code refactoring + - `test:` for adding tests + +#### Pushing Changes +```bash +# Push current branch to remote +git push origin feature/add-user-authentication + +# If first time pushing this branch +git push -u origin feature/add-user-authentication +``` + +### 3. Checking Progress and History +```bash +# View commit history +git log --oneline + +# View detailed history +git log --graph --decorate --oneline + +# View changes between commits +git log -p + +# View specific file history +git log --follow filename.py + +# View who changed what in a file +git blame filename.py +``` + +### 4. Handling Merge Conflicts +```bash +# If pull/merge results in conflicts +git status # Shows conflicted files + +# Edit conflicted files manually, looking for: +# <<<<<<< HEAD +# Your changes +# ======= +# Their changes +# >>>>>>> branch-name + +# After resolving conflicts +git add conflicted-file.py +git commit -m "Resolve merge conflict in user authentication" +``` + +### 5. End of Feature Development +```bash +# Switch back to main branch +git checkout main + +# Get latest changes +git pull origin main + +# Merge feature branch +git merge feature/add-user-authentication + +# Push merged changes +git push origin main + +# Delete feature branch locally +git branch -d feature/add-user-authentication + +# Delete feature branch on remote +git push origin --delete feature/add-user-authentication +``` + +### 6. Daily Maintenance Commands +```bash +# See all branches (local and remote) +git branch -a + +# See remote repositories +git remote -v + +# Clean up remote tracking branches +git remote prune origin + +# See repository status +git status + +# See what's different from last commit +git diff HEAD~1 + +# Undo last commit (but keep changes) +git reset --soft HEAD~1 + +# Undo changes to a file +git checkout -- filename.py + +# Create and apply patches +git format-patch -1 HEAD +git apply patch-file.patch +``` + +### 7. Working with Multiple Remotes +```bash +# Add additional remote (e.g., for backup) +git remote add backup git@backup-server:username/repository.git + +# Push to specific remote +git push backup main + +# Pull from specific remote +git pull backup main +``` + +### 8. Stashing Work in Progress +```bash +# Save current work without committing +git stash push -m "Work in progress on authentication" + +# List stashes +git stash list + +# Apply most recent stash +git stash pop + +# Apply specific stash +git stash apply stash@{1} + +# Drop a stash +git stash drop stash@{1} +``` + +### 9. Emergency Procedures + +#### Undo Last Commit +```bash +# Undo last commit but keep changes +git reset --soft HEAD~1 + +# Undo last commit and lose changes +git reset --hard HEAD~1 +``` + +#### Recovery +```bash +# Find lost commits +git reflog + +# Recover specific commit +git checkout commit-hash + +# Create branch from recovered commit +git checkout -b recovery-branch +``` + +This comprehensive guide provides everything needed to effectively use Git with Gitea for personal coding projects. \ No newline at end of file diff --git a/gitignore-templates.md b/gitignore-templates.md new file mode 100644 index 0000000..b7c45a9 --- /dev/null +++ b/gitignore-templates.md @@ -0,0 +1,574 @@ +# .gitignore Templates for Common Programming Languages + +## Universal .gitignore (Good for any project) +```gitignore +# Operating System Files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Editor Files +.vscode/ +.idea/ +*.swp +*.swo +*~ +.project +.classpath +.settings/ + +# Log Files +*.log +logs/ +log/ + +# Environment Files +.env +.env.local +.env.development +.env.test +.env.production +.env.staging +*.secret +config.local.js + +# Temporary Files +*.tmp +*.temp +temp/ +tmp/ +*.bak +*.backup + +# Archive Files +*.zip +*.tar.gz +*.rar +*.7z + +# System Files +desktop.ini +``` + +## Python Projects +```gitignore +# Universal files first (copy from above) + +# Python-specific +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# Virtual environments +venv/ +env/ +ENV/ +env.bak/ +venv.bak/ +.virtualenv + +# Conda +.conda/ + +# Django +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask +instance/ +.webassets-cache + +# Scrapy +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Celery +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject +``` + +## JavaScript/Node.js Projects +```gitignore +# Universal files first (copy from above) + +# Dependencies +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage +.grunt + +# Bower dependency directory +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons +build/Release + +# Dependency directories +jspm_packages/ + +# Snowpack dependency directory +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 + +# parcel-bundler cache +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +public + +# Storybook build outputs +.out +.storybook-out + +# Temporary folders +.tmp + +# React +build/ + +# Vue.js +dist/ + +# Webpack +.webpack/ + +# Babel +.babel_cache/ +``` + +## Java Projects +```gitignore +# Universal files first (copy from above) + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs +hs_err_pid* + +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +# Gradle +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +# IntelliJ IDEA +.idea/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +# Eclipse +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +# NetBeans +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +# VS Code +.vscode/ + +# Spring Boot +spring-boot-*.log +``` + +## C/C++ Projects +```gitignore +# Universal files first (copy from above) + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +# CMake +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +# Build directories +build/ +debug/ +release/ +``` + +## Go Projects +```gitignore +# Universal files first (copy from above) + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool +*.out + +# Dependency directories +vendor/ + +# Go workspace file +go.work +go.work.sum + +# Build output +bin/ +pkg/ +dist/ + +# Air (live reload) +tmp/ + +# GoLand +.idea/ + +# VS Code Go extension +.vscode/ +``` + +## Web Development (HTML/CSS/JS) +```gitignore +# Universal files first (copy from above) + +# Sass +.sass-cache/ +*.css.map +*.sass.map +*.scss.map + +# Less +*.css.map + +# Bundle files +bundle.js +bundle.css + +# Compiled CSS from preprocessors +*.compiled.css + +# npm/yarn +node_modules/ +package-lock.json +yarn.lock + +# Webpack +dist/ +.webpack/ + +# Parcel +.cache/ +.parcel-cache/ + +# Build tools +.grunt/ +.gulp/ + +# Static site generators +_site/ +.jekyll-cache/ +.jekyll-metadata + +# PWA +sw.js +workbox-*.js +``` + +## Docker Projects +```gitignore +# Universal files first (copy from above) + +# Docker +.dockerignore +docker-compose.override.yml +.docker/ + +# Container runtime files +*.pid +*.log + +# Docker volumes +data/ +volumes/ +``` + +## Recommended Usage Instructions + +1. **Start with Universal**: Always begin with the universal .gitignore section +2. **Add Language-Specific**: Append the appropriate language-specific section +3. **Customize for Your Project**: Add any project-specific files or directories +4. **Keep It Updated**: Review and update your .gitignore as your project evolves + +## Creating .gitignore Files + +### Method 1: Manual Creation +```bash +# Navigate to your project root +cd your-project + +# Create .gitignore file +touch .gitignore + +# Edit with your preferred editor +nano .gitignore # or code .gitignore for VS Code +``` + +### Method 2: Use gitignore.io +Visit https://gitignore.io and generate custom .gitignore files for your stack. + +### Method 3: GitHub Templates +When creating a repository in Gitea, you can initialize with a .gitignore template for common languages. + +## Tips for .gitignore Management + +1. **Add .gitignore early**: Create it before your first commit +2. **Test your patterns**: Use `git status` to verify files are being ignored +3. **Use comments**: Document why certain patterns are included +4. **Be specific**: Avoid overly broad patterns that might exclude needed files +5. **Global gitignore**: Consider setting up a global .gitignore for OS-specific files + +### Setting up Global .gitignore +```bash +# Create global gitignore file +git config --global core.excludesfile ~/.gitignore_global + +# Add common files to global ignore +echo ".DS_Store" >> ~/.gitignore_global +echo "Thumbs.db" >> ~/.gitignore_global +echo "*.log" >> ~/.gitignore_global +``` \ No newline at end of file