# GitHub Setup and Push Guide Follow these steps to push your strawberry picker ML project to GitHub. ## Prerequisites 1. **Git installed** on your system ```bash git --version ``` 2. **GitHub account** (create at https://github.com if you don't have one) 3. **Git configured** with your credentials ```bash git config --global user.name "Your Name" git config --global user.email "your.email@example.com" ``` ## Step 1: Create GitHub Repository ### Option A: Using GitHub Website (Recommended) 1. Go to https://github.com/new 2. Repository name: `strawberry-picker-robot` 3. Description: `Machine learning vision system for robotic strawberry picking` 4. Choose: **Public** or **Private** 5. Check: **Add a README file** (we'll overwrite it) 6. Click: **Create repository** ### Option B: Using GitHub CLI (if installed) ```bash gh repo create strawberry-picker-robot --public --source=. --remote=origin --push ``` ## Step 2: Initialize Local Repository Open terminal in your project folder: ```bash cd "G:\My Drive\University Files\5th Semester\Kinematics and Dynamics\strawberryPicker" ``` Initialize git repository: ```bash git init ``` ## Step 3: Add Files to Git Add all files (except those in .gitignore): ```bash git add . ``` Check what will be committed: ```bash git status ``` You should see files like: - `requirements.txt` - `train_yolov8.py` - `train_yolov8_colab.ipynb` - `setup_training.py` - `TRAINING_README.md` - `README.md` - `.gitignore` - `ArduinoCode/` - `assets/` ## Step 4: Create First Commit ```bash git commit -m "Initial commit: YOLOv8 training pipeline for strawberry detection - Add YOLOv8 training scripts (local, Colab, WSL) - Add environment setup and validation - Add comprehensive training documentation - Add .gitignore for ML project - Support multiple training environments" ``` ## Step 5: Connect to GitHub Repository If you created repo on GitHub website, link it: ```bash git remote add origin https://github.com/YOUR_USERNAME/strawberry-picker-robot.git ``` Replace `YOUR_USERNAME` with your actual GitHub username. ## Step 6: Rename Default Branch (if needed) ```bash git branch -M main ``` ## Step 7: Push to GitHub First push (sets up remote tracking): ```bash git push -u origin main ``` Enter your GitHub credentials when prompted. ## Step 8: Verify Push Go to https://github.com/YOUR_USERNAME/strawberry-picker-robot You should see all your files! ## Step 9: Add .gitignore for Large Files If you want to add dataset or large model files later, use Git LFS: ```bash # Install Git LFS git lfs install # Track large file types git lfs track "*.pt" git lfs track "*.onnx" git lfs track "*.tflite" git lfs track "*.h5" # Add .gitattributes git add .gitattributes git commit -m "Add Git LFS tracking for large model files" git push ``` ## Step 10: Create .gitattributes File Create `.gitattributes` file in project root: ``` *.pt filter=lfs diff=lfs merge=lfs -text *.onnx filter=lfs diff=lfs merge=lfs -text *.tflite filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text *.pth filter=lfs diff=lfs merge=lfs -text ``` ## Quick Push Commands (Summary) ```bash # One-time setup git init git add . git commit -m "Initial commit: YOLOv8 training pipeline" git remote add origin https://github.com/YOUR_USERNAME/strawberry-picker-robot.git git branch -M main git push -u origin main # Future updates git add . git commit -m "Your commit message" git push ``` ## Troubleshooting ### Authentication Issues If you get authentication errors: **Option 1: Use Personal Access Token** 1. Go to GitHub Settings → Developer settings → Personal access tokens 2. Generate new token (classic) with `repo` scope 3. Use token as password when prompted **Option 2: Use SSH (Recommended)** ```bash # Check if SSH key exists ls ~/.ssh/id_rsa.pub # If not, create one ssh-keygen -t rsa -b 4096 -C "your.email@example.com" # Add to GitHub cat ~/.ssh/id_rsa.pub # Copy output and add to GitHub → Settings → SSH and GPG keys # Change remote to SSH git remote set-url origin git@github.com:YOUR_USERNAME/strawberry-picker-robot.git ``` ### Large File Issues If files are too large for GitHub (max 100MB): - Use Git LFS (see Step 9) - Or add to `.gitignore` and upload separately to Google Drive/Dropbox ### Proxy Issues (if behind firewall) ```bash git config --global http.proxy http://proxy.company.com:8080 git config --global https.proxy https://proxy.company.com:8080 ``` ## Best Practices ### Commit Messages Write clear, descriptive commit messages: ```bash git commit -m "Add YOLOv8 training script with Colab support - Auto-detects training environment - Supports local, WSL, and Google Colab - Includes dataset validation - Exports to ONNX format" ``` ### Branching Strategy ```bash # Create feature branch git checkout -b feature/add-ripeness-detection # Work on changes git add . git commit -m "Add ripeness classification dataset collection" # Push branch git push -u origin feature/add-ripeness-detection # Create pull request on GitHub ``` ### Regular Pushes Push frequently to avoid losing work: ```bash # Daily push git add . git commit -m "Training progress: epoch 50/100, loss: 0.123" git push ``` ## GitHub Repository Settings ### Protect Main Branch 1. Go to Settings → Branches 2. Add rule for `main` branch: - Require pull request reviews - Require status checks - Include administrators ### Add Description and Topics 1. Go to repository page 2. Click "Edit" next to description 3. Add topics: `machine-learning`, `yolov8`, `raspberry-pi`, `robotics`, `computer-vision` ### Enable Issues and Projects - Use Issues to track bugs and features - Use Projects to organize development phases ## Continuous Integration (Optional) Add `.github/workflows/train.yml` for automated training: ```yaml name: Train Model on: push: branches: [ main ] pull_request: branches: [ main ] jobs: train: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' - name: Install dependencies run: | pip install -r requirements.txt - name: Validate dataset run: | python train_yolov8.py --validate-only ``` ## Next Steps After Push 1. **Share repository** with teammates/collaborators 2. **Create issues** for Phase 2, 3, 4 tasks 3. **Set up project board** to track progress 4. **Add documentation** to wiki if needed 5. **Enable GitHub Pages** for documentation (optional) ## Getting Help - GitHub Docs: https://docs.github.com - Git Cheat Sheet: https://education.github.com/git-cheat-sheet-education.pdf - Git LFS Docs: https://git-lfs.github.com ## Repository URL Your repository will be at: `https://github.com/YOUR_USERNAME/strawberry-picker-robot` ## Clone Command (for others) ```bash git clone https://github.com/YOUR_USERNAME/strawberry-picker-robot.git cd strawberry-picker-robot pip install -r requirements.txt ``` --- **Ready to push?** Run the commands in Step 1-7 above!