Work Locally with Git from the Command Line (Activity)
Title | Git Activity 2 |
Overview | Students install and use git. |
Prerequisite Knowledge |
|
Learning Objectives | Able to ...
|
Background:
Directions:
Setup
Git
Download and install git for your operating system:
- Windows: http://msysgit.github.io/
- Mac OSX or Linux: http://git-scm.com/
SSH
You might want to setup an SSH key if you plan to work with remote repositories a lot. See https://help.github.com/articles/generating-ssh-keys
Help
Open a terminal (git-bash on Windows) and run the following commands.
git help git help -ag git help init
- What does `git help` do?
- What does `-ag` cause `git help` to do?
- What does `git help command` do?
You may use `git help` at any time to help you answer the questions in this activity.
Identify yourself
Run the following commands, replacing BOGUS NAME and BOGUS@EMAIL with your name and email.
git config --global user.name 'BOGUS NAME' git config --global user.email 'BOGUS@EMAIL'
- What are these commands doing?
- What is the purpose of `--global`?
Create repository
mkdir project cd project git init
- What was created by `git init`?
- Any file that starts with `.` is hidden in Linux. How do you display a hidden file in Linux?
- What would happen if you delete `.git`?
- You find an old project on your hard drive. You do not remember if it is a under version control by git. How can you find out?
Basic commands
Use a plain text editor to create `names.txt` inside the `project` folder. Put the names of your team in the file. Save and exit.
Run `git status` before and after each of these commands.
git add names.txt git commit -m'Add our names.' git log
- What kind of information does `git status` report?
- What does `git add names.txt` do?
- What does `git commit -m'Add our names.'` do?
- What does `git log do`?
Use a plain text editor to create the following files:
- `birthdays.txt` - Put your birthdays in this file.
- `movies.txt` - Put the last movie each of you watched.
Run `git status` before and after each of these commands.
git add . git commit # You are in vim; write a multi-line commit message, save and quit. git log
- What does `git add .` do? What do you think `.` means?
- What does `git commit` (without -m) do?
- If you want to write a more detailed commit message (which is good practice) what command would you use?
Stage/Cache/Index
Do the following:
- Modify `names.txt` so that names are listed in _Last, First_ format, one per line.
- Modify `movies.txt` so they are in reverse alphabetical order by title.
- Create a new file `foods.txt` that contains your favorite foods (one for each team member).
Run the following commands:
git add names.txt git status
- Below write each file name under the state that its changes are currently in. Compose a definition for each state.
- Staged
- Unstaged
- Untracked
- If you run `git commit` what changes will be committed (___don't do it___)?
- What command do you run to stage changes?
- What command do you run to unstage changes?
Run the following commands:
git diff git diff --cached
- What does `git diff` display?
- What does `git diff --cached` display?
- Formulate a sequence of commands to unstage changes to `names.txt`, and stage the changes to `movies.txt`. Execute your commands and confirm they worked.
- Edit `movies.txt`, change any one of the movies, and save it. Then run `git status`. What do you observe? Explain what you think is going on.
- Delete `names.txt`. Then run `git status`. What do you observe? Explain what you think is going on.
- Rename `movies.txt` to `last-movies`. Run `git status`. Observe and explain.
- Formulate a sequence of commands to stage all changes including the untracked file and commit (with any reasonable message you like). Execute them.
- In git vernacular, `index`, `cache`, and `stage` all refer to the same thing. What does it hold?
- Why have a `stage`? Why not just commit all changes since the last commit?
Undo
<nowrap> git log git status git reset --soft HEAD^ git log git status
</nowrap>
- What does `git reset --soft HEAD^` do?
<nowrap> git commit -m'Redo' git log git status git reset --hard HEAD^ git log git status
</nowrap>
- What does `git reset --hard HEAD^` do?
- What is the difference between `--hard` and `--soft`?
- What do you think `HEAD^` means?
- What do you think `HEAD` means?
Deliverables:
Assessment:
Comments:
Additional Information:
Knowledge Area/Knowledge Unit | |
Topic | Git |
Level of Difficulty | Beginner |
Estimated Time to Completion | 50 min |
Materials/Environment | |
Author | Stoney Jackson |
Source | |
License | CC BY-SA 4.0 |
Suggestions for the Open Source Project:
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License