This guide walks you through testing, committing, and pushing your CUBIT Streaming System to GitHub.
Before pushing to Git, run the automated test suite:
cd /Users/say/Desktop/Streaming_System/cubit-streaming-system
./scripts/pre_push_test.shThis will:
- Verify all files are present
- Test that the project builds
- Check documentation is complete
- Ensure no build artifacts are included
- Validate configuration files
Expected Output: "All tests passed! Ready to commit and push to Git"
If not already initialized:
cd /Users/say/Desktop/Streaming_System/cubit-streaming-system
git initThis creates a .git directory in your project.
Check which files will be added:
git statusYou should see:
- Green: All your source files, docs, scripts
- Red (if any): Build artifacts (these should be in .gitignore)
Review the .gitignore:
cat .gitignoreMake sure build/ is listed.
Add all files to staging:
git add .Verify what's staged:
git statusYou should see all files in green (staged for commit).
Commit with a meaningful message:
git commit -m "Initial commit: Low-latency video streaming system v1.0.1
- Multi-threaded video capture and encoding
- Hardware-accelerated encoding (NVENC) with CPU fallback
- UDP streaming with packet fragmentation
- Client registration mechanism
- Adaptive bitrate control
- GPU monitoring via NVML
- Docker support with GPU passthrough
- Configuration file support
Developed during internship at CUBIT (Center for Understanding Biology
using Imaging Technology) at Stony Brook University."Verify commit was created:
git log --oneline- Go to https://github.com
- Click the "+" icon (top right) → "New repository"
- Repository name:
cubit-streaming-system(or your choice) - Description: "Low-latency video streaming system for biomedical microscope cameras"
- Visibility:
- Public (if you want it on your resume/portfolio)
- Private (if for personal use only)
- DO NOT initialize with README, .gitignore, or license (we already have these)
- Click "Create repository"
gh repo create cubit-streaming-system --public --source=. --remote=origin --pushThis automatically creates repo, adds remote, and pushes.
Copy the repository URL from GitHub (should look like):
- HTTPS:
https://github.com/YOUR_USERNAME/cubit-streaming-system.git - SSH:
git@github.com:YOUR_USERNAME/cubit-streaming-system.git
Add as remote:
# Using HTTPS
git remote add origin https://github.com/YOUR_USERNAME/cubit-streaming-system.git
# OR using SSH (if you have SSH keys set up)
git remote add origin git@github.com:YOUR_USERNAME/cubit-streaming-system.gitVerify remote was added:
git remote -vPush your code:
# First time push (sets upstream)
git push -u origin main
# If your default branch is 'master' instead of 'main'
git push -u origin masterIf you get an error about branch names, set main as default:
git branch -M main
git push -u origin mainExpected Output: Progress messages showing upload, then "Branch 'main' set up to track remote branch 'main' from 'origin'."
- Go to your repository URL:
https://github.com/YOUR_USERNAME/cubit-streaming-system - You should see:
- All your files
- README.md rendered on the main page
- Commit history
- File count (~35 files)
On GitHub, click "⚙️ Settings" or "Add topics" on your repo homepage:
Suggested topics:
video-streaminglow-latencynvencffmpegv4l2biomedical-imaginggpu-accelerationcpp17dockerstony-brook-university
After making changes:
# See what changed
git status
git diff
# Stage changes
git add .
# Commit
git commit -m "Brief description of changes"
# Push
git pushSolution: You're using SSH but haven't set up keys. Either:
-
Switch to HTTPS:
git remote set-url origin https://github.com/YOUR_USERNAME/cubit-streaming-system.git
-
Or set up SSH keys: https://docs.github.com/en/authentication/connecting-to-github-with-ssh
Solution: Someone else pushed, or you edited on GitHub. Pull first:
git pull origin main --rebase
git pushSolution: GitHub has a 100MB file limit. Check:
find . -type f -size +50MIf found, add to .gitignore and remove from git:
git rm --cached path/to/large/file
echo "path/to/large/file" >> .gitignoreSolution: Remove from git, add to .gitignore:
git rm -r --cached build/
echo "build/" >> .gitignore
git commit -m "Remove build artifacts"
git pushAdd a status badge to your README:
# CUBIT Video Streaming System



...Tag important versions:
# Create annotated tag
git tag -a v1.0.1 -m "Version 1.0.1: Added client registration and packet fragmentation"
# Push tag to GitHub
git push origin v1.0.1On GitHub, go to "Releases" → "Draft a new release" → Select tag v1.0.1 → Publish
On GitHub, go to Settings:
- Description: "Low-latency video streaming system for biomedical microscope cameras"
- Website: (your portfolio URL if you have one)
- Topics: Add relevant topics as mentioned above
- Include in the home page: Check this to feature on your profile
- Releases: Enable releases
- Issues: Enable if you want bug tracking
Before considering it "done":
- All tests pass (./scripts/pre_push_test.sh)
- Git repository initialized
- All files committed
- Remote repository created on GitHub
- Code pushed successfully
- README renders correctly on GitHub
- Repository has description and topics
- License file included
- .gitignore prevents build artifacts
- Repository is public (if using for portfolio)
- URL added to resume/portfolio
When adding to your resume or portfolio:
GitHub URL: https://github.com/YOUR_USERNAME/cubit-streaming-system
Description Example:
Low-Latency Video Streaming System (C++, FFmpeg, CUDA)
Developed during internship at CUBIT, Stony Brook University. Multi-threaded video streaming system achieving 50-70ms end-to-end latency for biomedical microscope cameras. Features hardware-accelerated encoding (NVENC), adaptive bitrate control, and Docker containerization. Supports 500+ concurrent clients via UDP multicast.
Tech: C++17, FFmpeg, NVENC, V4L2, CUDA, Docker, CMake
Questions? Check GitHub Docs: https://docs.github.com/en/get-started