When developing multiple SaaS applications that share a common codebase, managing updates and maintaining consistency across projects can be challenging. This article explores a powerful Git strategy using upstream remotes to handle this scenario effectively.
Imagine you're building several SaaS applications that share common functionality:
Authentication system
Payment processing
User management
Core UI components
Basic analytics
You want to maintain these features in a base repository while allowing each project to:
Stay synchronized with base updates
Add custom features
Override specific functionalities
Maintain its own development pace
The upstream strategy involves maintaining a base repository and connecting individual project repositories to it through Git remotes. This approach offers a structured way to manage code sharing and updates.
# Initialize base repository
git init saas-base
cd saas-base
# Add your base code
git add .
git commit -m "Initial base commit"
git remote add origin https://github.com/username/saas-base.git
git push -u origin main
# Create and initialize project repository
git init project-a
cd project-a
# Add remote for your project repository
git remote add origin https://github.com/username/project-a.git
# Add base repository as upstream
git remote add upstream https://github.com/username/saas-base.git
# Get base code
git fetch upstream
git merge upstream/main
git push origin main
To sync with base repository updates:
# Fetch updates from base
git fetch upstream
# Merge updates into main branch
git checkout main
git merge upstream/main
# Update project-specific branch
git checkout project
git merge main
Copy
/src
/core # Base functionality
/features # Project-specific features
/overrides # Base feature customizations
/config # Project configuration
Copy
main # Synced with upstream
├── develop # Development branch
└── feature/* # Feature branches
Regular scheduled updates
Emergency security patches
Feature-driven updates
Clear update logs
Breaking change notifications
Migration guides
This approach is ideal when:
Multiple projects share significant common functionality
Base features need regular updates
Projects require significant customization
Team structure supports maintained base code
Consider alternatives when:
Projects have minimal shared code
Updates are infrequent
Projects diverge significantly
Team resources are limited
The upstream strategy provides a robust solution for managing multiple SaaS projects with shared code. While it requires initial setup and careful management, the benefits of maintainable, updateable code across projects make it a valuable approach for growing SaaS ecosystems.
Remember that successful implementation relies on:
Clear communication about updates
Well-defined processes
Good documentation
Regular maintenance
Team buy-in
When properly implemented, this strategy can significantly reduce development overhead and maintain consistency across your SaaS portfolio while allowing for necessary customization and independent project evolution.