Work Locally with Git from the Command Line (Activity)

(Difference between revisions)
Jump to: navigation, search
(reformatted directions)
(added background and renamed)
Line 2: Line 2:
 
{| border="1"
 
{| border="1"
 
|-  
 
|-  
|'''Title''' ||  Git Activity 2
+
|'''Title''' ||  Git From The Command Line
 
|-     
 
|-     
|'''Overview''' ||  Students install and use git.
+
|'''Overview''' ||  Students install and use git from the command line while answering questions about what each command does.
 
|-
 
|-
 
|'''Prerequisite Knowledge''' ||   
 
|'''Prerequisite Knowledge''' ||   
Line 29: Line 29:
  
 
=== Background: ===
 
=== Background: ===
 +
Is there background reading material?
 +
* http://git-scm.com/doc
  
 +
Are there other activities the student should have done first?
 +
* Students may want to understand what SCM is, and why its important
 +
* [[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.
  
  
Line 189: Line 197:
 
|'''Level of Difficulty''' || Beginner  
 
|'''Level of Difficulty''' || Beginner  
 
|-
 
|-
|'''Estimated Time to Completion''' || 50 min
+
|'''Estimated Time to Completion''' || 60-90 mins
 
|-
 
|-
 
|'''Materials/Environment''' ||
 
|'''Materials/Environment''' ||

Revision as of 21:17, 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
  • 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:

Git

Download and install git for your operating system:

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
  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?

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
  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?


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:

Assessment:

Comments:

Additional Information:

Knowledge Area/Knowledge Unit
Topic Git
Level of Difficulty Beginner
Estimated Time to Completion 60-90 mins
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

CC license.png

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