📚 DEVASC Topics 1.7-1.8

Version Control & Git Operations

1.7 Advantages of Version Control

📚 Overview: Version control systems (VCS) track changes to files over time, enabling collaboration, history tracking, and efficient software development workflows.

Version Control System Architecture

graph TB A[Version Control System] --> B[Centralized VCS] A --> C[Distributed VCS] B --> B1[SVN] B --> B2[Perforce] B --> B3[CVS] C --> C1[Git] C --> C2[Mercurial] C --> C3[Bazaar] B --> B4[Single Central Server] C --> C4[Full Repository Copies] style A fill:#667eea,stroke:#764ba2,stroke-width:3px,color:#fff style B fill:#ff6b6b,stroke:#c92a2a,color:#fff style C fill:#51cf66,stroke:#2f9e44,color:#fff style C1 fill:#f34f29,color:#fff

Git Workflow Overview

graph LR A[Working Directory] -->|git add| B[Staging Area] B -->|git commit| C[Local Repository] C -->|git push| D[Remote Repository] D -->|git pull| C C -->|git checkout| A style A fill:#ffd43b,stroke:#fab005,color:#000 style B fill:#339af0,stroke:#1864ab,color:#fff style C fill:#51cf66,stroke:#2f9e44,color:#fff style D fill:#667eea,stroke:#764ba2,color:#fff

Key Advantages of Version Control

📜 Complete History
🔄 Revert Changes
👥 Collaboration
🌿 Branching
🔍 Track Changes
💾 Backup
🏷️ Tagging Releases
🔀 Parallel Development

1. 📜 History Tracking

  • What: Complete history of all changes
  • Why: See who changed what and when
  • Benefit: Audit trail and accountability
  • Example: Track bug introduction

2. 🔄 Revert Changes

  • What: Undo mistakes easily
  • Why: Safe experimentation
  • Benefit: No fear of breaking code
  • Example: Roll back bad deployment

3. 👥 Collaboration

  • What: Multiple people work together
  • Why: Team development
  • Benefit: No file conflicts
  • Example: Team coding same project

4. 🌿 Branching

  • What: Separate development lines
  • Why: Isolated feature development
  • Benefit: Parallel workflows
  • Example: Feature branch per developer

5. 💾 Backup

  • What: Distributed copies
  • Why: Disaster recovery
  • Benefit: No single point of failure
  • Example: Remote repository backup

6. 🔍 Code Review

  • What: Review before merging
  • Why: Quality assurance
  • Benefit: Better code quality
  • Example: Pull request reviews

Centralized vs Distributed VCS

Feature Centralized (SVN) Distributed (Git)
Repository Single central server Full copy on each machine
Network Required Yes (for most operations) No (only for push/pull)
Speed Slower (network dependent) Faster (local operations)
Branching Difficult and slow Easy and fast
Backup Single point of failure Multiple backups
Offline Work Limited Full capabilities

Version Control Best Practices

✅ Do's:
  • Commit often with meaningful messages
  • Pull before you push
  • Use branches for features
  • Keep commits small and focused
  • Review code before merging
  • Use .gitignore for unnecessary files
  • Tag releases and milestones
❌ Don'ts:
  • Never commit sensitive data (passwords, keys)
  • Don't commit generated files (binaries, logs)
  • Avoid huge commits with many changes
  • Don't force push to shared branches
  • Never rewrite public history
  • Don't commit directly to main/master

Common Use Cases

Software Development

Track code changes, collaborate with team, manage releases

Documentation

Version control for docs, wikis, and technical writing

Configuration Management

Track infrastructure configs, Ansible playbooks, Terraform

DevOps & CI/CD

Automate deployments, track pipeline configs

💡 Why Git is the Standard:
  • Created by Linus Torvalds for Linux kernel development
  • Distributed architecture = better collaboration
  • Fast and efficient even with large repositories
  • Powerful branching and merging
  • Massive ecosystem (GitHub, GitLab, Bitbucket)
  • Industry standard for modern software development

1.8 Common Git Operations

🔧 Overview: Git provides powerful commands for version control. Master these essential operations for effective collaboration and code management.

1.8.a Clone - Copy Repository

graph LR A[Remote Repository
GitHub/GitLab] -->|git clone| B[Local Repository
Your Computer] B --> C[Working Directory] B --> D[.git folder
Complete History] style A fill:#667eea,color:#fff style B fill:#51cf66,color:#fff style C fill:#ffd43b,color:#000 style D fill:#339af0,color:#fff
# Clone a repository
git clone https://github.com/user/repo.git

# Clone to specific directory
git clone https://github.com/user/repo.git my-project

# Clone specific branch
git clone -b develop https://github.com/user/repo.git

What Clone Does:

  • Downloads entire repository history
  • Creates local copy with all branches
  • Sets up remote tracking
  • Initializes working directory

1.8.b Add/Remove - Stage Changes

graph LR A[Working Directory
Modified Files] -->|git add| B[Staging Area
Ready to Commit] B -->|git commit| C[Local Repository
Permanent History] A -->|git rm| D[Remove Files] style A fill:#ffd43b,color:#000 style B fill:#339af0,color:#fff style C fill:#51cf66,color:#fff style D fill:#ff6b6b,color:#fff
# Add specific file
git add filename.py

# Add all changes
git add .

# Add all Python files
git add *.py

# Remove file from staging
git reset filename.py

# Delete file and stage deletion
git rm filename.py

# Remove from Git but keep locally
git rm --cached filename.py

1.8.c Commit - Save Changes

sequenceDiagram participant W as Working Directory participant S as Staging Area participant L as Local Repo W->>W: Edit files W->>S: git add S->>L: git commit Note over L: Creates snapshot
with unique hash
# Commit with message
git commit -m "Add user authentication feature"

# Commit with detailed message
git commit -m "Fix login bug" -m "Detailed description here"

# Add and commit in one step
git commit -am "Update documentation"

# Amend last commit
git commit --amend -m "Updated message"
✍️ Good Commit Message Format:
Short summary (50 chars or less)

More detailed explanation if needed. Wrap at 72 characters.
Explain what and why, not how.

- Bullet points are okay
- Use present tense: "Fix bug" not "Fixed bug"

Fixes #123

1.8.d Push/Pull - Sync with Remote

graph LR A[Local Repository] -->|git push| B[Remote Repository] B -->|git pull| A B -->|git fetch| C[Remote Tracking
Branches] C -->|merge| A style A fill:#51cf66,color:#fff style B fill:#667eea,color:#fff style C fill:#339af0,color:#fff
# Push to remote
git push origin main

# Push all branches
git push --all

# Push with tags
git push --tags

# Pull from remote
git pull origin main

# Fetch without merging
git fetch origin

# Pull with rebase
git pull --rebase origin main

1.8.e Branch - Parallel Development

gitGraph commit id: "Initial commit" commit id: "Add feature A" branch feature-b checkout feature-b commit id: "Start feature B" commit id: "Complete feature B" checkout main commit id: "Hotfix" merge feature-b commit id: "Release v1.0"
# List branches
git branch

# Create new branch
git branch feature-login

# Switch to branch
git checkout feature-login

# Create and switch in one command
git checkout -b feature-api

# Delete branch
git branch -d feature-login

# Delete remote branch
git push origin --delete feature-login

# Rename branch
git branch -m old-name new-name

Common Branch Types

  • main/master: Production code
  • develop: Development integration
  • feature/*: New features
  • bugfix/*: Bug fixes
  • hotfix/*: Emergency fixes
  • release/*: Release preparation

1.8.f Merge - Combine Branches

graph TB A[main branch] --> B[Commit 1] B --> C[Commit 2] C --> D[Merge Commit] E[feature branch] --> F[Feature A] F --> G[Feature B] G --> D D --> H[Commit 3] style A fill:#667eea,color:#fff style E fill:#51cf66,color:#fff style D fill:#ff6b6b,color:#fff
# Merge feature branch into current branch
git merge feature-login

# Merge with message
git merge feature-api -m "Merge API feature"

# Abort merge
git merge --abort

# Fast-forward merge only
git merge --ff-only feature-branch

Handling Merge Conflicts

sequenceDiagram participant D as Developer participant G as Git participant F as File D->>G: git merge feature G->>F: Check for conflicts F-->>G: Conflict detected! G-->>D: CONFLICT in file.py D->>F: Edit file, resolve conflicts D->>G: git add file.py D->>G: git commit G-->>D: Merge complete
⚠️ Conflict Example:
<<<<<<< HEAD
def calculate_price(price):
    return price * 1.1  # 10% tax
=======
def calculate_price(price):
    return price * 1.08  # 8% tax
>>>>>>> feature-branch

# After resolving, keep one version:
def calculate_price(price):
    return price * 1.1  # 10% tax - keep this one
# Steps to resolve conflicts:

1. git status # See conflicted files
2. # Edit files to resolve conflicts
3. git add resolved-file.py
4. git commit -m "Resolve merge conflict"

# Or abort the merge
git merge --abort

1.8.g Diff - Compare Changes

# Show unstaged changes
git diff

# Show staged changes
git diff --staged

# Compare branches
git diff main..feature-branch

# Compare specific file
git diff main feature-branch -- file.py

# Show changes in last commit
git diff HEAD~1 HEAD

# Word-level diff
git diff --word-diff

# Show only file names
git diff --name-only

Understanding Diff Output

diff --git a/file.py b/file.py
index 1234567..abcdefg 100644
--- a/file.py
+++ b/file.py
@@ -10,7 +10,7 @@ def function():
     print("Hello")
-    return False
+    return True
     # Comment
  • - Lines removed (red)
  • + Lines added (green)
  • @@ Location indicators

Essential Git Commands Quick Reference

Command Description Example
git clone Copy remote repository git clone <url>
git add Stage changes git add file.py
git commit Save changes git commit -m "message"
git push Upload to remote git push origin main
git pull Download from remote git pull origin main
git branch Manage branches git branch feature-x
git checkout Switch branches git checkout main
git merge Combine branches git merge feature-x
git diff Show changes git diff
git status Check repository state git status
git log View commit history git log --oneline

Complete Git Workflow Example

# 1. Clone repository
git clone https://github.com/team/project.git
cd project

# 2. Create feature branch
git checkout -b feature-user-auth

# 3. Make changes
# ... edit files ...

# 4. Stage and commit
git add .
git commit -m "Add user authentication"

# 5. Pull latest changes from main
git checkout main
git pull origin main

# 6. Merge your branch
git checkout feature-user-auth
git merge main  # Resolve conflicts if any

# 7. Push your branch
git push origin feature-user-auth

# 8. Create pull request on GitHub/GitLab
# ... web interface ...

# 9. After approval, merge to main
git checkout main
git merge feature-user-auth
git push origin main

# 10. Delete feature branch
git branch -d feature-user-auth
git push origin --delete feature-user-auth
💡 Pro Tips:
  • Use git status frequently to check your state
  • Commit often with meaningful messages
  • Pull before starting new work
  • Use branches for all features
  • Review changes with git diff before committing
  • Learn to use git log --graph to visualize history

🐍 Interactive Python Interpreter

💻 Live Python Environment: Practice Python code related to file operations, text processing, and simulating version control concepts.

Sample Code Templates

✏️ Python Code Editor
📤 Output
⏳ Loading Python interpreter...
✨ Features:
  • Practice Python fundamentals
  • Simulate version control concepts
  • Work with strings and data structures
  • Test algorithms and logic
⚠️ Limitations:
  • Cannot execute actual Git commands
  • No file system access
  • Limited to basic Python features
← Back to Topics

DEVASC 200-901 • Section 1.0: Software Development and Design (15%)

Created by Ratnesh Kumar CCIE x3