📦 Lecture 17 · SCM & Git

Version Control & Git

يا هندسة، أسئلة من Q1.11 لـ Q1.14 بتيجي في كل امتحان عن الـ SCM والـ Git. حوارات الـ version numbering والـ baseline وأوامر الـ Git دي كلها متكررة وثابتة.

8
Chapters
15+
Key Terms
10+
Git Commands
8
Exam Qs
01

SCMSoftware Configuration Management

Practice of identifying artifacts & handling changes systematically.

📖 SCM Definition

الـ SCM هو إنك تعرف تحدد الـ artifacts بتاعة المشروع وتتعامل مع التغييرات اللي بتحصل بنظام عشان النظام يحافظ على سلامته (maintain its integrity) على المدى الطويل.

بيشمل تقنيات عشان:

  • تقيّم التغييرات المقترحة.
  • تتتبع التغييرات (Tracking).
  • تحتفظ بنسخ من النظام زي ما كان في أوقات مختلفة.

من الآخر الـ SCM = تخصص وتقنيات لبدء وتقييم والتحكم في التغييرات اللي بتحصل في السوفتوير أثناء وبعد المشروع.

🛠️ SCM Has 2 Main Activities
  • Change Management (إدارة التغييرات).
  • Configuration Management (إدارة التكوين).
  • وأحياناً بيدخل معاهم الـ Release Planning.
Typical SCM Questions
  • "إيه هي النسخة الصح من الـ module اللي المفروض أكمل كود عليها؟"
  • "إيه نسخة الـ design document اللي ماشية مع نسخة السوفتوير اللي شغالين عليها؟"
  • "إيه النسخة اللي متسطبة عند شركة ABC دلوقتي؟"
  • "إيه التغييرات اللي نزلت في النسخة دي؟"
02

Key SCM Terms

كل مصطلح ممكن ييجي في الـ exam. الـ Baseline ده بييجي في كل امتحان تقريباً يا ريس.

📚 Critical Definitions
Term Definition
Configuration Item (CI) أي حاجة HW/SW بنعاملها ككيان واحد عشان نديرها (زي source code، test suites، docs).
Version نسخة معينة ومحددة من الـ CI.
Baseline specification أو product اتراجع بشكل رسمي واتفقنا عليه، وبيبقى الأساس اللي هنكمل تطوير عليه، ومينفعش يتغير إلا بـ formal change control process.
Version Control إنك تحتفظ بنسخ مختلفة، بس من غير تحكم رسمي أوي في التغييرات اللي بينهم.
Workspace مكان معزول بتاخد فيه نسخة عشان تشتغل براحتك.
Check-in إنك تحفظ الـ CI في الـ controlled area (الريبو الأساسي).
Check-out تاخد نسخة من الـ CI من الريبو وتشتغل عليها.
Branch خط تطوير منفصل (مثلاً فرع عشان نصلح فيه bug بعيد عن الـ main).
Merging إنك تدمج الـ branches دي تاني مع بعض.
Build نسخة شغالة فيها مجموعة قدرات معينة جاهزة.
Building إنك تجمّع النظام من مكوناته اللي تحت الـ config mgmt.
Release الإعلان الرسمي وتوزيع النسخة المعتمدة.
Change Request (CR) طلب رسمي للتغيير، لازم يوافق عليه الـ CCB بناءً على حدث متسجل.
CCB مجموعة الأشخاص (Board) اللي عندهم الصلاحية ياخدوا قرارات في تغييرات الـ configuration.
Impact Analysis بندرس تأثير التغيير المطلوب على كل طبقات الـ docs والـ components قبل ما نعمله.
📌 Baseline متكررة في كل examFall 2021-22 / Winter 2021 / Winter 2023 / Winter 2025Q1.13 دايماً عن تعريف "specification formally reviewed... can only change through formal process" = Baseline.
03

Version Control Systems

Repository of files + tracking every change with who/when/what/why.

📦 What is VCS?
  • الـ VCS عبارة عن مخزن ملفات (repository).
  • كل تغيير بيتحفظ وبنعرف مين اللي عمله.
  • بيتتبع النسخ والتغييرات من خلال إجابة الأسئلة دي:
    • إمتى؟ التغيير حصل إمتى؟
    • مين؟ مين اللي عمل التغيير ده؟
    • إيه؟ إيه اللي اتغير بالظبط؟
    • ليه؟ (وده بنكتبه في الـ commit messages)
Why Use VCS?
  • Reversion: تقدر ترجع لنسخة كانت شغالة وكويسة لو التغيير اللي عملته بوّظ الدنيا.
  • Change / Bug Tracking: بتتتبع التغييرات ومين صلح الـ bug.
  • Branches: تقدر تعمل features جديدة من غير ما تبوظ الكود الشغال.
  • Merging branches: بتدمج الكود الجديد مع القديم في أمان.
  • Parallel work: كذا developer يقدروا يشتغلوا على نفس الفايل مع بعض.
📌 Fall 2021-22 / Winter 2021 Q1.11"Which is true about VCS?" — VCS allows tracking changes (a), retrieving older versions (d), working in parallel (c). It does NOT help discover bugs (b is FALSE).
Answer: (f) (a), (c), (d).
🏛️ Centralized vs Distributed

Centralized (SVN, CVS)

سيرفر واحد فيه كل النسخ، وكل client بياخد نسخة يشتغل عليها. لو السيرفر وقع كله بيقف.

Distributed (Git, Mercurial)

كل developer بيبقى عنده نسخة كاملة (full copy) من الريبو. وتقدر تشتغل offline عادي.

04

Version Numbering ⭐ (Critical Exam Topic)

Q1.12 / Q1.09 في كل امتحان بتلاقي أسئلة عن إزاي تفك وتفهم الـ version numbers دي.

🔢 The Format

الشكل القياسي للـ version number هو: major.minor.milestone.revision-build

2.3.2.5-33
major
minor
milestone
revision
build
🎯 Milestone Numbering
0
Pre-alpha
مرحلة بدري جداً في التطوير
1
Alpha
بنجرب داخلياً في الشركة
2
Beta
بنجرب مع ناس من بره (يوزرز)
3
Release Candidate (RC)
خلاص بنفنش وبنجهزها للنزول
4
Final Release
النسخة النهائية اللي هتنزل للسوق
🧮 Parsing Practice

المعطى: 3.2.3.2 = ؟

  • الـ major = 3، يعني الإصدار الأساسي التالت.
  • الـ minor = 2، يعني تاني تحديث فرعي في v3.
  • الـ milestone = 3، يعني Release Candidate (RC).
  • الـ revision = 2، يعني تاني تصليح للـ bugs (second bug-fix).
📌 Fall 2021-22 Q1.12 سؤال "Version 3.2.3.2 is what?" إجابته: Second bug-fix release for the release candidate of version 3.2. الاختيار (a) هو الصح.

المعطى: 3.2.4.2 = ؟

  • الـ milestone = 4، يعني Final Release.
  • الـ revision = 2، يعني تاني تصليح للـ bugs (second bug-fix).
📌 Winter 2021 Q1.12 سؤال "Version 3.2.4.2 is what?" إجابته: Second bug-fix release for the final release of version 3.2.

المعطى: Fifth bug-fix للـ beta من v2.3 = ؟

  • عشان هي beta، يبقى الـ milestone = 2.
  • عشان هو fifth bug-fix، يبقى الـ revision = 5.
  • الشكل النهائي هيبقى: 2.3.2.5 (وممكن يتحط build اختياري في الآخر زي -33)
📌 Winter 2025 Q1.09الإجابة: (c) 2.3.2.5-33 دي الإجابة الصح يا باشا.
05

Change Control

How changes are formally proposed, evaluated, and approved.

📝 Change Request (CR)

الـ CR ده بيبقى طلب عشان:

  • نكبّر أو نصغّر الـ scope بتاع المشروع.
  • نعدل سياسات، خطوات، خطط، أو إجراءات (policies/processes).
  • نغير في التكلفة أو الميزانية.
  • نراجع أو نعدل الجدول الزمني (schedules).

الـ CR ممكن أي حد يعمله في أي وقت خلال الـ SW life cycle.

🔄 Types of Changes
  • تصليح Bugs (إجراء تصحيحي).
  • إضافة Features (حاجات جديدة).
  • تبسيط الكود (اللي هو الـ refactoring).
  • تغيير الجدول الزمني.
⚙️ Change Control Process
  1. حد بيقدم (submits) طلب تغيير CR.
  2. الـ CR بيتسجل في الـ bug tracking system.
  3. بيتعمل Impact analysis عشان نشوف تأثيره (تكلفة، وقت، وتأثير فني).
  4. الـ CCB (مجلس إدارة التغييرات) بيراجع ويقرر.
  5. لو توافق عليه: بيتوزع على حد، يتنفذ، يتجرب (tested)، وينزل (deployed).
  6. لو اترفض: بيتسجل الرفض مع الأسباب.
06

Git Basics

Created by Linus Torvalds, 2005. For Linux Kernel development.

📜 Git History
  • اللي عمله هو Linus Torvalds.
  • ابتدى سنة 2005.
  • كان معمول عشان يديروا بيه تطوير الـ Linux Kernel.
  • هو Distributed VCS، سريع جداً، وفيه check عشان الفايلات متبوظش.
🎯 Git Properties
  • نظام Distributed للـ version control.
  • بيتتبع التغييرات في الفايلات على مر الوقت (over time).
  • بيسمح للناس تشتغل وتتعاون مع بعض في المشاريع (collaboration).
  • سريع وكفاءته عالية.
  • بيدعم التطوير اللي مش خطي (non-linear) يعني تقدر تعمل branches.
  • مفتوح المصدر (Open-source) ومجاني.
07

Git Workflow

أسئلة منورة في كل امتحان عن التلاتة دول مع بعض: addcommitpush.

🔄 The 4 Stages
1. Working Directory

المكان اللي بتكتب فيه الكود

2. Staging Area

مرحلة التجهيز للـ commit

git add
3. Local Repo

الريبو اللي على جهازك

git commit
4. Remote Repo

مرفوع على GitHub/GitLab

git push
⌨️ Common Git Commands
Command Purpose
git status Check status
git init Creates new local Git repo
git add <file> Stage file for commit
git add . Stage all changes
git commit -m "msg" Create commit with message
git commit -a -m "msg" Commit all tracked files
git clone <url> Clone existing repo
git push Push commits to remote
git pull Fetch + merge from remote
git log Show commit history
The Trio: Add File to Shared Repo

Standard sequence to add a new untracked file to a shared Git repo:

  1. git add <file>stage the file
  2. git commit -m "message"create commit locally
  3. git pushpush to remote (shared) repo
📌 Q1.14 Fall 2021-22 / Q1.14 Winter 2021 / Q1.08 Winter 2025The sequence is addcommitpush. NOT init/commit/add (init creates a NEW repo, not for adding files to existing one).
💻 Local Repo Workflow Example
# 1. Initialize a new repo
mkdir my-project
cd my-project
git init

# 2. Add a file
echo "# My Project" > README.md
git add README.md
git status   # File now staged

# 3. Commit it
git commit -m "first commit"

# 4. First-time identity setup
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

# 5. Check log
git log
git log --pretty=full
08

Git Branching

Separate development lines. Feature, Release, Hotfix branches.

🌿 What is a Branch?

الـ Branch = مسار تطوير منفصل جوه الريبو بتاعك. بيسمحلك تشتغل على features أو تجارب أو تصليح bugs من غير ما تأثر على الكود الأساسي (الـ main).

Creating & Switching

git branch <name>        # Create branch
git checkout <name>      # Switch to it

# Or combined:
git checkout -b <name>   # Create + switch

# List branches
git branch -l
🔀 Branching Strategies
  • Feature Branches: عشان نطور features جديدة.
  • Release Branches: عشان نجهز نسخة هتنزل للسوق.
  • Hotfix Branches: عشان نصلح bugs عاجلة جداً في الكود الشغال.
🔗 Merging Branches
# Switch to target branch (e.g. master/main)
git checkout master

# Merge source branch into target
git merge first-branch

# Verify with log
git log

# Delete merged branch
git branch -d first-branch
🎯

Exam BankLecture 17

8 أسئلة من امتحانات حقيقية. ركز على الـ Versioning والـ Git workflow والـ Baseline.

Question 1 Fall 2021–22 / Winter 2021 · Q1.11
Which of the following is true about VCS?
(a) They allow tracking changes in the code
(b) They helps discover bugs in the code
(c) They allow developers to work in parallel, even on the same file
(d) They allow retrieving an older version of the code
A (a) only
B (b) only
C (c) only
D (d) only
E (a), (b), and (d)
F (a), (c), and (d)
✅ الإجابة الصح: F — (a), (c), (d)
  • (a) ✓ — الـ VCS بيتتبع كل تغيير ومين عمله وإمتى.
  • (b) ❌ — الـ VCS ملوش دعوة باكتشاف الـ bugs بنفسه.
  • (c) ✓ — أكتر من developer بيقدروا يشتغلوا مع بعض في نفس الوقت بالـ branches.
  • (d) ✓ — تقدر ترجع لأي نسخة قديمة في أي وقت بكل سهولة.
Question 2 Fall 2021–22 · Q1.12
Version 3.2.3.2 is: (milestone: 0=pre-alpha, 1=alpha, 2=beta, 3=RC, 4=final)
A Second bug-fix release for the release candidate of version 3.2
B Fourth bug-fix of the beta release of version 3.2
C The beta version of release 3.2.3
D The third release of version 2.3, build number 2
✅ الإجابة الصح: A تفكيكها: major=3, minor=2, milestone=3 (يعني RC), revision=2 (يعني تاني bug-fix). فكده تبقى: "تاني bug-fix للـ release candidate بتاع نسخة 3.2".
Question 3 Winter 2021 · Q1.12
Version 3.2.4.2 is:
A Second bug-fix release for the final release of version 3.2
B Fourth bug-fix of the beta release of version 3.2
C The beta version of release 3.2.4
D The third release of version 2.4, build number 2
✅ الإجابة الصح: A الـ milestone=4 → دي الـ final release. والـ revision=2 → ده تاني bug-fix.
Question 4 Fall 2021–22 / Winter 2021 · Q1.13
A specification or software product that has been formally reviewed or agreed upon, that thereafter serves as the basis for further development and that can be changed only through a formal change control process is called:
A Workspace
B Baseline
C Configuration Item
D Branch
E Build
✅ الإجابة الصح: B — Baseline التعريف متطابق بالظبط. الـ Workspace = مكان الشغل. الـ CI = الحاجة اللي بتديرها. الـ Branch = مسار التطوير. الـ Build = النسخة الشغالة.
Question 5 Fall 2021–22 / Winter 2021 · Q1.14
The sequence of commands to add a new untracked file to the shared repo on the Git server is:
A git init, git commit, git add filename
B git commit, git add filename, git push
C git pull, git change filename, git push filename
D git add filename, git commit, git push
✅ الإجابة الصح: D — add → commit → push ده الـ workflow الطبيعي بتاع Git عشان ترفع على remote repo:
  1. git add filename — بيحطه في الـ stage
  2. git commit — بيحفظه local عندك
  3. git push — بيرفعه للـ remote
Agit init بيكريت repo جديد (مش لواحد موجود). · B — مينفعش تعمل commit قبل الـ add. · C — مفيش أمر اسمه git change أصلاً.
Question 6 Winter 2025 · Q1.08
The correct sequence of commands to add a file in to a Git repository?
A git add → git push → git commit
B git commit → git add → git push
C git push → git commit → git add
D git add → git commit → git push
✅ الإجابة الصح: D — add → commit → push نفس إجابة Q5 بالظبط. احفظ الترتيب ده زي اسمك.
Question 7 Winter 2025 · Q1.09
Version numbering uses the format: major.minor.milestone.revision-build. Milestone values are: 0=pre-alpha, 1=alpha, 2=beta, 3=RC, 4=final. Which option represents the fifth bug-fix of the beta version of v2.3?
A 2.3.5.2-121
B 2.3.beta.5-132
C 2.3.2.5-33
D 2.3.2-5
✅ الإجابة الصح: C — 2.3.2.5-33
  • v2.3 يعني major=2 و minor=3.
  • beta يعني milestone=2.
  • خامس bug-fix يعني revision=5.
  • رقم الـ build اختياري؛ هنا 33 مجرد build ID.
Question 8 Winter 2025 · Q1.10
Which of these questions, a version control system CANNOT answer?
A Who changed this source code file?
B Why was this file changed?
C What changed in this source code file?
D When was this file changed?
✅ الإجابة الصح: B — Why الـ VCS بيسجل مين، وإيه، وإمتى. أما "ليه" فدي بتعتمد على جودة الـ commit messages — الـ VCS نفسه ملوش دعوة بيها. (نصيحة في السريع: اكتب commit messages واضحة ومفيدة!)
📋

Cheat Sheet

📚 SCM Definitions

CI
Configuration Item — managed entity
Baseline ⭐
Formally reviewed, change only via formal process
Workspace
Isolated work area
Check-in / out
Save to / copy from controlled area
Branch
Separate dev line
CCB
Change Control Board

🔢 Version Numbering

Format
major.minor.milestone.revision-build
0 = Pre-alpha
Very early dev
1 = Alpha
Internal testing
2 = Beta
External testing
3 = RC
Release Candidate
4 = Final
Production release

⌨️ Git Commands

git init
Create NEW repo (one-time)
git status
Check working state
git add ⭐
Stage file
git commit ⭐
Save locally
git push ⭐
Upload to remote
git pull
Fetch + merge from remote
git clone
Copy remote repo
git log
View history

🌿 Branching

git branch
Create branch
git checkout
Switch branch
git checkout -b
Create + switch
git merge
Merge into current
git branch -d
Delete branch
Strategies
Feature, Release, Hotfix branches

🎯 The Trio (CRITICAL)

Step 1
git add — stage
Step 2
git commit -m "msg" — local save
Step 3
git push — to remote
Memorize
add → commit → push

📊 VCS Capabilities

✓ Who
Track who made changes
✓ What
Track what changed
✓ When
Track when changed
✗ Why
VCS can't enforce — depends on commit messages
Git creator
Linus Torvalds, 2005