DPS909 & OSD600 Winter 2017 - Git Walkthrough
Contents
Git Walkthrough
Step 1: get some source
For this walkthrough, we'll need some source code. Normally you'll write code, but for this walkthrough, we'll borrow some pre-existing code to make things easier. Let's download the Bootstrap source:
https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.6.zip
Expand the zip file, and open a terminal to your bootstrap-4.0.0-alpha.6/
directory.
Step 2: start a git repo
$ cd bootstrap-4.0.0-alpha.6 $ git init
Note the presence of a new bootstrap-4.0.0-alpha.6/.git/
directory:
$ ls .git HEAD config hooks objects branches description info refs
NOTE: normally we git clone
to clone (also known as fork) a repository. We'll do that in a bit.
Step 3: adding files
Let's inspect the current status of our repo:
$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) .editorconfig .eslintignore .gitattributes .gitignore .hound.yml .houndignore .travis.yml CHANGELOG.md CNAME CONTRIBUTING.md Gemfile Gemfile.lock Gruntfile.js ISSUE_TEMPLATE.md LICENSE README.md _config.yml bower.json composer.json dist/ docs/ grunt/ js/ nuget/ package.js package.json sache.json scss/ nothing added to commit but untracked files present (use "git add" to track)
Our Working Directory (i.e., bootstrap-4.0.0-alpha.6/
) has a lot of files and folders that are untracked (i.e., git has no record of them in its history).
We include a file in git's history by adding it to the index (also known as the staging area). Let's add the README.md
file:
$ git add README.md $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.md Untracked files: (use "git add <file>..." to include in what will be committed) .editorconfig .eslintignore .gitattributes .gitignore .hound.yml .houndignore .travis.yml CHANGELOG.md CNAME CONTRIBUTING.md Gemfile Gemfile.lock Gruntfile.js ISSUE_TEMPLATE.md LICENSE _config.yml bower.json composer.json dist/ docs/ grunt/ js/ nuget/ package.js package.json sache.json scss/
This time git status
continues to report our Untracked files, but also includes a new section: Changes to be committed. The README.md
file has been added to the staging area, and is ready to be commited to git's history.
We record a snapshot of our files by committing the staging area's contents:
$ git commit -m "Added README file" [master (root-commit) 03c9551] Added README file 1 file changed, 135 insertions(+) create mode 100755 README.md
Let's look at our status again:
git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) .editorconfig .eslintignore .gitattributes .gitignore .hound.yml .houndignore .travis.yml CHANGELOG.md CNAME CONTRIBUTING.md Gemfile Gemfile.lock Gruntfile.js ISSUE_TEMPLATE.md LICENSE _config.yml bower.json composer.json dist/ docs/ grunt/ js/ nuget/ package.js package.json sache.json scss/ nothing added to commit but untracked files present (use "git add" to track)
Here's how things stand now:
- Our working copy continues to have lots of untracked files and folders. However,
README.md
is not among them - Our staging area is empty
- Our git repo has 1 commit that added 1 file, which we can see if we use
git log
$ git log commit 03c95518ce08f59e850409a2d82bacad110151a1 Author: David Humphrey (:humph) david.humphrey@senecacollege.ca <david.humphrey@senecacollege.ca> Date: Wed Jan 11 11:07:09 2017 -0500 Added README file
Every record in our history is called a commit, and it's a snapshot of our repo's filesystem along with metadata:
- a unique commit identifier (SHA-1), in this case
03c95518ce08f59e850409a2d82bacad110151a1
, which is often shortened to the first 7 characters:03c9551
. - an author, every commit is done by somebody, and we want to keep track of this
- a date and time
- a commit message, describing what this commit changed, added, deleted, etc.
- Client Server (SVN) and Distributed (Git)
- Snapshots vs. versioned files.
- Walkthrough -
- Checksums, SHA-1 (try online)
- Starting a Git Repo:
- git init
- git clone
- File States:
- Untracked (not known to git)
- Tracked: modified, staged, committed
- The staging area
- Basic Git Commands and Concepts
- git help <command>
- git add
- git commit, git commit -m, git commit -a
- git rm
- git mv
- git status
- git log
- git diff, git diff --staged
- .gitignore
- Branches
- HEAD, master
- git checkout, git checkout -b
- git branch, git branch -a, git branch -d, git branch --merged, git branch --contains
- git merge
- git rebase
- Remotes
- origin, origin/branch
- git remote
- git remote add
- git fetch
- git pull
- git push
- Github, Pull Requests