CSCI 338: Fall 2024

Software Engineering

CSCI 338: Fall 2024

Topic 2. Version Control & Branch Management

Version control is perhaps one of the most important topics in software engineering. Version control systems allow teams to collaborate on projects, review one another's code, experiment with new features and ideas, and revert to previous versions when needed. In this unit, we will explore different approaches that teams might take to organize their code repositories. We will also do various hands-on activities so that you can familiarize yourself with bash and git commands.

Tuesday, 8/27

Slides & Activities

Readings

Thursday, 8/29

Slides & Activities

Tuesday, 9/3

Slides & Activities

Readings

  • Read the history section (including all subsections: Naming, Characteristics, Data Structures, and References).
  • optional Pro Git book:
    The Pro Git book provides some useful context and conceptual models, particularly 2.1-2.5, 3.1-3.1, and 3.6.

Thursday, 9/5

Slides & Activities

  • Lab 3: A Tour of git Commands

Readings

Study Questions

  1. Why is version control important?
  2. Why is code history important?
  3. What is the difference between centralized and distributed version control?
  4. What is the problem with having long-running dev branches? What is the solution?
  5. What is the one version rule?
  6. What are the tradeoffs of having a "monorepo" versus multiple repos?
  7. What is the difference between git and GitHub?
  8. What is the difference between a merge commit and rebasing? What would you want to do one over the other (i.e., what are the the tradeoffs of each)?
  9. What does the "origin" typically refer to?
  10. What is a public / private key pair?
  11. What do the following git commands do? clone, status, add, log, commit, push, pull, merge, rebase
  12. What do the following bash commands do? ls, cat, mv, pwd, cd, rm