The readings for Friday, January 20 are:

  1. The Linux Command Line:

    • Chapter 1 - What is the Shell?
    • Chapter 2 - Navigation
    • Chapter 3 - Exploring the System
    • Chapter 4 - Manipulating Files and Directories
    • Chapter 5 - Working With Commands
  2. Pro Git

    • Chapter 1 - Getting Started
    • Chapter 2 - Git Basics

The focus of reading is to review the basics of using the Unix Shell, which most of you used in Fundamentals of Computing I last semester, and to introduce you to Git, which we will be using throughout the semester.

In addition to reading the above chapters, it is recommended that you work through the following tutorials:

  1. Command Line Crash Course

    This is a tutorial on using the command line interface on various operating systems (you should focus on the Unix shell).

  2. Git Tutorial - Try Git

    This is a tutorial on the basics of using Git.

The Hands-on Imperative

To get the most out of your reading, you should be typing commands into a terminal and playing around with the things you reading.

Passively reading will not be as fruitful as actively reading and trying out things you are exploring.

Additional Resources

The following are additional resources that you may find useful:

Unix Shell



Normally, you would have a few of questions to answer for each reading. For this first assignment, however, you are to create your own private assignments repository by following the instructions below:

Assignments Repository

The assignments repository will be used for your individual weekly reading and homework assignments. It must be kept private and only shared with the instructional staff.

The course projects will be collaborative, so we will create different repositories for those assignments.

Task 0: Create GitLab Account

The first step is to create a GitLab account if you don't have one already. GitLab is a code hosting repository similar to Bitbucket and GitHub. We will be using GitLab this semester since it provides for unlimited private repositories and no restrictions on the number of collaborators. Likewise, GitLab has built-in for continuous integration which will be using later in this course.

To create an account, go to and follow the prompts there.

Task 1: Fork Assignments Repository

Once you are signed up and have logged in, go to the class assignments repository located at: and click on the Fork button. GitLab may ask which user or group you wish to assign the new fork. If so, choose your personal GitLab account.

Task 2: Make Assignments Repository Private

Next, you will configure the assignments repository so that it is private. That is, only you and the instructional staff should have access to it. To do this, click on the gear on the upper-right hand side of the project page and select Edit Project.

You will then be taken to the Project settings page for the repository. Here, add your name and netid to the Project description. Likewise, make sure you select Private for the Visibility Level. Once you have made these changes, make sure you scroll down and click on the Save changes button.

Task 3: Configure Access to Assignments Repository

Next, you will ensure that the instructional staff has access to your repository by clicking on the gear on the upper-right hand side of the project page and select Members.

This will take you to the page to add new users to the project. You will need to add all of the instructional staff as part of your project (both instructors and all the teaching assistants):

Each instructional staff member should be given Developer access and an expiration date of 2017-05-31.

Task 4: Clone Assignments Repository

Once you have a private fork of the assignments repository and have configured it properly, you should clone it to your local workspace. This workspace can either be on the student machines, a virtual machine, or your personal machine. To do this, copy the URL from the Project summary page and perform the clone command using Git on your desired platform. You will now have a local clone of the repository you can work with:

# Example on a student machine

$ git clone # Clone the remote repository to the student machine
Cloning into 'cse-20289-sp17-assignments'...

(gnome-ssh-askpass:31733): Gtk-WARNING **: cannot open display:
error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
Password for '':

remote: Counting objects: 47, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 47 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (47/47), done.
Checking connectivity... done


If you try to do a git clone and see a 401 unauthorized error, be sure to include your GitLab username in the URL:

$ git clone https://$$USERNAME/cse-20289-sp17-assignments.git

SSH_ASKPASS workaround

If you try to do a git clone on the student machines and it starts but fails to ask you for a password, try running this command first:

unsetenv SSH_ASKPASS

This will force git to use the terminal to ask you for your password rather than popup a window.

Task 5: Commit First Change

Your final task is to practice using Git by editting the file in the assignments repository such that the Name and NetID fields are completed (i.e. replace "Dommer McDomerson" and "dmcdomers"). You should commit your change and then push them to GitLab.

# Example on a student machine

$ cd cse-20289-sp17-assignments   # Go into the assignments directory

$ nano                  # Edit the file

$ git add               # Mark the file for recording

$ git commit -m "Update README"   # Record the change
[master c550fa1] Update README
 1 file changed, 2 insertions(+), 2 deletions(-)

$ git push                        # Send your local changes to GitLab
(gnome-ssh-askpass:1030): Gtk-WARNING **: cannot open display:
error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
Password for '':

Counting objects: 5, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 325 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
  2d0303d..c550fa1  master -> master


The files are annotated using Markdown. This is a simple plain text formatting style that can be translated into HTML.

For a more complete example of what you can do with Markdown, check out the reference provided by GitLab. To view the result of the translation, you can use the provided script.