Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Version Control with Git

Similar presentations


Presentation on theme: "Introduction to Version Control with Git"— Presentation transcript:

1 Introduction to Version Control with Git
Acknowledgment: Original slides created in NC University by Titus Barik, Gaurav Tungatkar, Govind Menon, and Krunal Jhaveri 1

2 Book Ch1 and Ch2

3 Course On my webpage

4 History: Local version control
check out File Version 3 Version 2 Keep many copies of files Error prone Hard to manage Version 1 4

5 History: Centralized Version Control
If you need to work with other programmers … Computer A File check out Version 3 Computer B Version 2 File check out Version 1 5

6 File Server vs. Version-Control Server
At first glance, the client-server architecture of a version-control system looks much like a typical file server. So why do we need version control? Mininum needs: check code in/out, see history Why do we need version control? Permissions: You don’t have very good control over who can modify a file Responsibility: If there’s a bug, how do you know who cause it? VCSs have “blame” command (who last wrote a line) You may want to revert to an earlier version. Overlapping edits 6 6

7 File-Sharing Issues The problem is that users are stepping on each other’s feet! Image: Version Control with Subversion 7

8 Approach 1: Lock, Modify, Unlock
Locking may cause administrative problems. Locking may cause unnecessary serialization. Locking may create a false sense of security. If someone locks a file & leaves for the weekend, forgetting to unlock it. Admin needs to unlock it, but would rather not. Developers can’t work on different parts of the same file. Locks may have dependencies. A change to file B may also require a change to file A. Can cause deadlock. Image: Version Control with Subversion 8

9 Approach 2: Copy-Modify-Merge
Sounds chaotic, but in practice, runs extremely smoothly. Where wouldn’t copy-merge-modify work well, & you would still need locking? Consider editing a binary file, like audio. Ditto for images. Image: Version Control with Subversion 9

10 Traditional Repository Format
A Subversion repository layout—typical of older version-control systems. The folder names are just a convention, and have no special meaning to the repository. Image: Version Control with Subversion 10

11 Creating a Branch—by Copying
In Subversion, the underlying mechanism of a branch is implemented by performing a simple directory copy. Image: Version Control with Subversion 11

12 Distributed Version Control
Clients don’t check out individual files; they mirror the repository. What’s the advantage? Computer A Computer B File File Version 3 Version 2 Version 1 Version 3 Version 2 Version 1 12

13 Git Came out of the Linux project, in 2005. Simple design
Strong support for non-linear development (thousands of parallel branches) Fully distributed Able to handle large projects like the Linux kernel efficiently (speed and data size) 13

14 Integrity & Checksums Everything checksummed with an SHA-1 hash
40-character string composed of hex characters calculated based on the contents of a file or directory structure in Git Example 24b9da aa493b52f8696cd6d3b00373 But, you don’t have to type the whole SHA … Git knows everything by hash, not filename 14

15 Snapshots, not Diffs See http://git-scm.com/book/ch1-3.html
Every time you commit, Git takes a snapshot of your files. Files that have not changed are not copied.  Almost all ops are local browse history commit 15

16 git directory (repository)
3 States of a File in Git Modified • Staged • Committed working directory staging area git directory (repository) check out the project stage files commit 16

17 File Status Lifecycle edit the file add the file stage the file
untracked unmodified modified staged edit the file add the file stage the file remove the file 17

18 Checking Status To check the status of your files:
$ git status # On branch master nothing to commit (working directory clean) Creating new files $ vim README $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track) Have them do an example with “git add”. 18

19 Checking status, cont. Begin to track the file:
$ git add README The file is now tracked: $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # For more info: 19

20 Guidelines for Commits
What happens if you download a repo in a zip file, do your project, then save it with a single commit? (Think of someone else trying to merge your changes with another programmer’s changes.) This can be fleshed out … 20

21 Your code Repository code Is the difference because— … a = a + b …
a = c Is the difference because— you changed a = c to a = a + b, or because someone else changed a = a + b to a = c while you were working on your project? 21

22 Guidelines for Commits
Which is worse, Downloading the repo as a zip file, and being scrupulously careful to make multiple commits with reasonable commit comments, or Downloading the repo with its commit history, but committing your whole project in one commit? Why? Of course, you shouldn’t do either! + pulling in commits from other branches + mergetools + handling conflicts 22

23 Guidelines for Commits
In your work, save the commit history. Each commit should be on one topic. A commit comment should be 1 line, certainly no more than one sentence. 23

24 Exercise in the lab. Clone a repository using the HTTPS clone url $ git branch // List branches modify $ git commit .. etc. 24


Download ppt "Introduction to Version Control with Git"

Similar presentations


Ads by Google