Work Locally with Git from the Command Line (Activity)

(Difference between revisions)
Jump to: navigation, search
(added background and renamed)
(sentanceized background, added deliverables)
Line 30: Line 30:
 
=== Background: ===
 
=== Background: ===
 
Is there background reading material?
 
Is there background reading material?
* http://git-scm.com/doc
+
* Students can reference http://git-scm.com/doc , though the answers can be found all around the web
  
 
Are there other activities the student should have done first?
 
Are there other activities the student should have done first?
* Students may want to understand what SCM is, and why its important
+
* Students may want to understand what SCM is, and why its important via the activity at [[Git_Activity]]
* [[Git_Activity]]
+
  
 
What is the rational for this activity?
 
What is the rational for this activity?
Line 41: Line 40:
  
 
=== Directions: ===
 
=== Directions: ===
==== Git ====
 
  
 +
==== Install Git ====
 
Download and install git for your operating system:
 
Download and install git for your operating system:
  
Line 48: Line 47:
 
* Mac OSX or Linux: http://git-scm.com/
 
* 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
+
==== Setup SSH ====
a lot. See https://help.github.com/articles/generating-ssh-keys
+
You might want to setup an SSH key if you plan to work with remote repositories a lot.  
  
==== Help ====
+
See https://help.github.com/articles/generating-ssh-keys
  
 +
 +
==== Help Yourself ====
 
Open a terminal (git-bash on Windows) and run the following commands.
 
Open a terminal (git-bash on Windows) and run the following commands.
  
Line 68: Line 68:
 
activity.
 
activity.
  
==== Identify yourself ====
 
  
 +
==== Identify yourself ====
 
Run the following commands, replacing BOGUS NAME and BOGUS@EMAIL with your name
 
Run the following commands, replacing BOGUS NAME and BOGUS@EMAIL with your name
 
and email.
 
and email.
Line 79: Line 79:
 
# What is the purpose of `--global`?
 
# What is the purpose of `--global`?
  
==== Create repository ====
 
  
 +
==== Create repository ====
 
   mkdir project
 
   mkdir project
 
   cd project
 
   cd project
Line 90: Line 90:
 
# 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?
 
# 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 ====
 
  
 +
==== 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.
 
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.
  
Line 121: Line 121:
 
# If you want to write a more detailed commit message (which is good practice) what command would you use?
 
# If you want to write a more detailed commit message (which is good practice) what command would you use?
  
==== Stage/Cache/Index ====
 
  
 +
==== Learn Staging / Tracking ====
 
Do the following:
 
Do the following:
  
Line 158: Line 158:
  
  
==== Undo ====
+
==== How to Undo ====
 
+
 
   git log
 
   git log
 
   git status
 
   git status
Line 183: Line 182:
  
 
=== Deliverables: ===
 
=== Deliverables: ===
 +
Please hand in your answers to all questions in the Directions.
 +
 +
Bonus points for those who type their answers up and link to them on a public git repository!
  
 
=== Assessment: ===
 
=== Assessment: ===
 +
  
 
=== Comments: ===
 
=== Comments: ===
 +
  
 
=== Additional Information: ===
 
=== Additional Information: ===
 
{| border="1"
 
{| border="1"
 
|-  
 
|-  
|'''Knowledge Area/Knowledge Unit''' ||
+
|'''Knowledge Area/Knowledge Unit''' || SE - Software Engineering from [[ACM_Body_of_Knowledge]]
 
|-
 
|-
|'''Topic''' || Git
+
|'''Topic''' || SE Software Processes, SE Software Project Management, SE Tools and Environments
 
|-
 
|-
|'''Level of Difficulty''' || Beginner
+
|'''Level of Difficulty''' || Easy
 
|-
 
|-
 
|'''Estimated Time to Completion''' || 60-90 mins
 
|'''Estimated Time to Completion''' || 60-90 mins
 
|-
 
|-
|'''Materials/Environment''' ||
+
|'''Materials/Environment''' ||  
 +
* Access to Internet/Web and web browser
 +
* Access to posix / unix shell command
 +
* Write access to local file system
 
|-
 
|-
|'''Author''' ||  Stoney Jackson
+
|'''Author''' ||  Stoney Jackson, Nick Yeates
 
|-
 
|-
 
|'''Source''' ||
 
|'''Source''' ||

Revision as of 21:29, 16 July 2015

Title Git From The Command Line
Overview Students install and use git from the command line while answering questions about what each command does.
Prerequisite Knowledge
  • Bash skills: manipulate and navigate a filesystem.
  • Vim skills: edit and exit (with or without changes).
Learning Objectives Able to ...
  • Download git.
  • Install git.
  • Configure git.
  • Configure SSH.
  • Make and commit changes to repository.
  • Add new files to repository.
  • Remove file from repository.
  • Modify a file and commit the change.
  • Stage changes for commit.
  • Un-stage changes for commit.
  • Explain the purpose of the stage/cache/index.
  • Inspect the state of a repository.
  • Undo a commit.

Background:

Is there background reading material?

Are there other activities the student should have done first?

  • Students may want to understand what SCM is, and why its important via the activity at Git_Activity

What is the rational for this activity?

  • All CS students should be familiar with Git and distributed SCM tools because they allow teams of developers to work together on a single project, at the same time, without stepping on eachother toes. It also forms the basis of most open source projects, which have distributed teams of developers that work on various forks of projects. Other SCM solutions (subversion / SVN) cannot handle these scenarios as well. Finally, the social and public aspects of coding evidenced by Github are important for students looking to prove their abilities and experience.


Directions:

Install Git

Download and install git for your operating system:


Setup 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 Yourself

Open a terminal (git-bash on Windows) and run the following commands.

 git help
 git help -ag
 git help init
  1. What does `git help` do?
  2. What does `-ag` cause `git help` to do?
  3. 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'
  1. What are these commands doing?
  2. What is the purpose of `--global`?


Create repository

 mkdir project
 cd project
 git init
  1. What was created by `git init`?
  2. Any file that starts with `.` is hidden in Linux. How do you display a hidden file in Linux?
  3. What would happen if you delete `.git`?
  4. 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
  1. What kind of information does `git status` report?
  2. What does `git add names.txt` do?
  3. What does `git commit -m'Add our names.'` do?
  4. 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
  1. What does `git add .` do? What do you think `.` means?
  2. What does `git commit` (without -m) do?
  3. If you want to write a more detailed commit message (which is good practice) what command would you use?


Learn Staging / Tracking

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
  1. Below write each file name under the state that its changes are currently in. Compose a definition for each state.
    • Staged
    • Unstaged
    • Untracked
  2. If you run `git commit` what changes will be committed (___don't do it___)?
  3. What command do you run to stage changes?
  4. What command do you run to unstage changes?

Run the following commands:

 git diff
 git diff --cached
  1. What does `git diff` display?
  2. What does `git diff --cached` display?
  3. 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.
  4. 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.
  5. Delete `names.txt`. Then run `git status`. What do you observe? Explain what you think is going on.
  6. Rename `movies.txt` to `last-movies`. Run `git status`. Observe and explain.
  7. Formulate a sequence of commands to stage all changes including the untracked file and commit (with any reasonable message you like). Execute them.
  8. In git vernacular, `index`, `cache`, and `stage` all refer to the same thing. What does it hold?
  9. Why have a `stage`? Why not just commit all changes since the last commit?


How to Undo

 git log
 git status
 git reset --soft HEAD^
 git log
 git status
  1. What does `git reset --soft HEAD^` do?
 git commit -m'Redo'
 git log
 git status
 git reset --hard HEAD^
 git log
 git status
  1. What does `git reset --hard HEAD^` do?
  2. What is the difference between `--hard` and `--soft`?
  3. What do you think `HEAD^` means?
  4. What do you think `HEAD` means?


Deliverables:

Please hand in your answers to all questions in the Directions.

Bonus points for those who type their answers up and link to them on a public git repository!

Assessment:

Comments:

Additional Information:

Knowledge Area/Knowledge Unit SE - Software Engineering from ACM_Body_of_Knowledge
Topic SE Software Processes, SE Software Project Management, SE Tools and Environments
Level of Difficulty Easy
Estimated Time to Completion 60-90 mins
Materials/Environment
  • Access to Internet/Web and web browser
  • Access to posix / unix shell command
  • Write access to local file system
Author Stoney Jackson, Nick Yeates
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

CC license.png

Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox