Introduction_to_Git_and_GitHub/module1.ipynb
2025-03-02 19:47:37 +03:00

950 lines
29 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"jp-MarkdownHeadingCollapsed": true,
"jupyter": {
"source_hidden": true
}
},
"source": [
"# Diffing Files\n",
"\n",
"This reading contains the code used in the instructional videos from [**Diffing Files**<svg aria-labelledby=\"cds-react-aria402160580-:rim:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria402160580-:rim:\"><title id=\"cds-react-aria402160580-:rim:-title\">Opens in a new tab</title></svg>](https://www.coursera.org/learn/introduction-git-github/lecture/tnlzg/diffing-files) \n",
"\n",
"## Introduction\n",
"\n",
"This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n",
"\n",
"You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n",
"\n",
"```bash\n",
"\n",
"cat rearrange1.py \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"#!/usr/bin/env python3\n",
"\n",
"import re\n",
"\n",
"def rearrange\\_name(name):\n",
"\n",
"    result = re.search(r\"^(\\[\\\\w .\\]\\*), (\\[\\\\w .\\]\\*)$\", name)\n",
"\n",
"    if result == None:\n",
"\n",
"        return name\n",
"\n",
"    return \"{} {}\".format(result\\[2\\], result\\[1\\])\n",
"\n",
"user@ubuntu:~$ cat rearrange2.py \n",
"\n",
"#!/usr/bin/env python3\n",
"\n",
"import re\n",
"\n",
"def rearrange\\_name(name):\n",
"\n",
"    result = re.search(r\"^(\\[\\\\w .-\\]\\*), (\\[\\\\w .-\\]\\*)$\", name)\n",
"\n",
"    if result == None:\n",
"\n",
"        return name\n",
"\n",
"    return \"{} {}\".format(result\\[2\\], result\\[1\\])\n",
"\n",
"1\n",
"\n",
"```bash\n",
"cat rearrange2.py \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"#!/usr/bin/env python3\n",
"\n",
"import re\n",
"\n",
"def rearrange\\_name(name):\n",
"\n",
"    result = re.search(r\"^(\\[\\\\w .-\\]\\*), (\\[\\\\w .-\\]\\*)$\", name)\n",
"\n",
"    if result == None:\n",
"\n",
"        return name\n",
"\n",
"    return \"{} {}\".format(result\\[2\\], result\\[1\\])\n",
"\n",
"\n",
"```bash\n",
"diff rearrange1.py rearrange2.py \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"6c6\n",
"\n",
"<     result = re.search(r\"^(\\[\\\\w .\\]\\*), (\\[\\\\w .\\]\\*)$\", name)\n",
"\n",
"\\---\n",
"\n",
"\\>     result = re.search(r\"^(\\[\\\\w .-\\]\\*), (\\[\\\\w .-\\]\\*)$\", name)\n",
"\n",
"\n",
"```bash\n",
"diff validations1.py validations2.py \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"5c5,6\n",
"\n",
"< assert (type(username) == str), \"username must be a string\"\n",
"\n",
"\\--\n",
"\n",
"\\> if type(username != str: \n",
"\n",
"\\>     raise TypeError(\"username must be a string\"\n",
"\n",
"11a13,15\n",
"\n",
"\\>     return False\n",
"\n",
"\\> # Usernames can't begin with a number\n",
"\n",
"\\> if username\\[0\\].isnumeric():\n",
"\n",
"\n",
"```bash\n",
"diff \\-u validations1.py validations2.py \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"\\--- validations1.py 2019-06-06 14:28:49.639209499 +0200\n",
"\n",
"+++ validations2.py 2019-06-06 14:30:48.019360890 +0200\n",
"\n",
"@@ -2,7 +2,8 @@\n",
"\n",
" def validate\\_user(username, minlen):\n",
"\n",
"\\-    assert type(username) == str, \"username must be a string\"\n",
"\n",
"+    if type(username) != str:\n",
"\n",
"+        raise TypeError(\"username must be a string\")\n",
"\n",
"     if minlen < 1:\n",
"\n",
"         raise ValueError(\"minlen must be at least 1\")\n",
"\n",
"@@ -10,5 +11,8 @@\n",
"\n",
"         return False\n",
"\n",
"     if not username.isalnum():\n",
"\n",
"         return False\n",
"\n",
"+    # Usernames can't begin with a number\n",
"\n",
"+    if username\\[0\\].isnumeric():\n",
"\n",
"+        return False\n",
"\n",
"     return True"
]
},
{
"cell_type": "markdown",
"metadata": {
"jupyter": {
"source_hidden": true
}
},
"source": [
"# Applying Changes\n",
"\n",
"This reading contains the code used in the instructional videos from [**Applying Changes** <svg aria-labelledby=\"cds-react-aria2448342354-:r9g:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria2448342354-:r9g:\"><title id=\"cds-react-aria2448342354-:r9g:-title\">Opens in a new tab</title></svg>](https://www.coursera.org/learn/introduction-git-github/lecture/qIzdp/applying-changes).\n",
"\n",
"## Introduction\n",
"\n",
"This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n",
"\n",
"You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n",
"\n",
"\n",
"```\n",
"cat cpu\\_usage.py \n",
"```\n",
"\n",
"\n",
"cat cpu\\_usage.py \n",
"\n",
"**Code output:**\n",
"\n",
"#!/usr/bin/env python3\n",
"\n",
"import psutil\n",
"\n",
"def check\\_cpu\\_usage(percent):\n",
"\n",
"    usage = psutil.cpu\\_percent()\n",
"\n",
"    return usage < percent\n",
"\n",
"if not check\\_cpu\\_usage(75):\n",
"\n",
"    print(\"ERROR! CPU is overloaded\")\n",
"\n",
"else:\n",
"\n",
"    print(\"Everything ok\")\n",
"\n",
"\n",
"```\n",
"cat cpu\\_usage.diff \n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"\\--- cpu\\_usage.py 2019-06-23 08:16:04.666457429 -0700\n",
"\n",
"+++ cpu\\_usage\\_fixed.py 2019-06-23 08:15:37.534370071 -0700\n",
"\n",
"@@ -2,7 +2,8 @@\n",
"\n",
" import psutil\n",
"\n",
" def check\\_cpu\\_usage(percent):\n",
"\n",
"\\-    usage = psutil.cpu\\_percent()\n",
"\n",
"+    usage = psutil.cpu\\_percent(1)\n",
"\n",
"+    print(\"DEBUG: usage: {}\".format(usage))\n",
"\n",
"     return usage < percent\n",
"\n",
" if not check\\_cpu\\_usage(75):\n",
"\n",
"\n",
"```\n",
"patch cpu\\_usage.py < cpu\\_usage.diff \n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"patching file cpu\\_usage.py\n",
"\n",
"\n",
"```\n",
"cat cpu\\_usage.py \n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"#!/usr/bin/env python3\n",
"\n",
"import psutil\n",
"\n",
"def check\\_cpu\\_usage(percent):\n",
"\n",
"    usage = psutil.cpu\\_percent(1)\n",
"\n",
"    print(\"DEBUG: usage: {}\".format(usage))\n",
"\n",
"    return usage < percent\n",
"\n",
"if not check\\_cpu\\_usage(75):\n",
"\n",
"    print(\"ERROR! CPU is overloaded\")\n",
"\n",
"else:\n",
"\n",
"    print(\"Everything ok\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Practical Application of diff and patch\n",
"\n",
"This reading contains the code used in the instructional videos from [**Practical application of diff and patch**<svg aria-labelledby=\"cds-react-aria8760104591-:r2f:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8760104591-:r2f:\"><title id=\"cds-react-aria8760104591-:r2f:-title\">Opens in a new tab</title></svg>](https://www.coursera.org/learn/introduction-git-github/lecture/IkuqC/practical-application-of-diff-and-patch). \n",
"\n",
"## Introduction\n",
"\n",
"This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n",
"\n",
"You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n",
"\n",
"\n",
"```bash\n",
"cp disk\\_usage.py disk\\_usage\\_original.py \n",
"\n",
"cp disk\\_usage.py disk\\_usage\\_fixed.py \n",
"```\n",
"\n",
"\n",
"## **File with code**\n",
"\n",
"```bash\n",
"#!/usr/bin/env python3\n",
"\n",
"import shutil\n",
"\n",
"def check\\_disk\\_usage(disk, min\\_absolute, min\\_percent):\n",
"\n",
"    \"\"\"Returns True if there is enough free disk space, false otherwise.\"\"\"\n",
"\n",
"    du = shutil.disk\\_usage(disk)\n",
"\n",
"    # Calculate the percentage of free space\n",
"\n",
"    percent\\_free = 100 \\* du.free / du.total\n",
"\n",
"    # Calculate how many free gigabytes\n",
"\n",
"    gigabytes\\_free = du.free / 2\\*\\*30\n",
"\n",
"    if percent\\_free < min\\_percent or gigabytes\\_free < min\\_absolute:\n",
"\n",
"        return False\n",
"\n",
"    return True\n",
"\n",
"# Check for at least 2 GB and 10% free\n",
"\n",
"if not check\\_disk\\_usage(\"/\", 2\\*2\\*\\*30, 10):\n",
"\n",
"    print(\"ERROR: Not enough disk space\")\n",
"\n",
"    return 1\n",
"\n",
"print(\"Everything ok\")\n",
"\n",
"return 0\n",
"\n",
"./disk\\_usage\\_fixed.py \n",
"\n",
"#this throws an error\n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"File \"./disk\\_usage\\_fixed.py\", line 19\n",
"\n",
"    return 1\n",
"\n",
"    ^\n",
"\n",
"SyntaxError: 'return' outside function\n",
"\n",
"## File with code\n",
"\n",
"The instructor adds import sys at the beginning, then change return 1 to sys.exit(1) and return 0 to sys.exit(0).\n",
"```bash\n",
"#!/usr/bin/env python3\n",
"\n",
"import shutil\n",
"\n",
"import sys\n",
"\n",
"def check\\_disk\\_usage(disk, min\\_absolute, min\\_percent):\n",
"\n",
"    \"\"\"Returns True if there is enough free disk space, false otherwise.\"\"\"\n",
"\n",
"    du = shutil.disk\\_usage(disk)\n",
"\n",
"    # Calculate the percentage of free space\n",
"\n",
"    percent\\_free = 100 \\* du.free / du.total\n",
"\n",
"    # Calculate how many free gigabytes\n",
"\n",
"    gigabytes\\_free = du.free / 2\\*\\*30\n",
"\n",
"    if percent\\_free < min\\_percent or gigabytes\\_free < min\\_absolute:\n",
"\n",
"        return False\n",
"\n",
"    return True\n",
"\n",
"# Check for at least 2 GB and 10% free\n",
"\n",
"if not check\\_disk\\_usage(\"/\", 2\\*2\\*\\*30, 10):\n",
"\n",
"    print(\"ERROR: Not enough disk space\")\n",
"\n",
"    sys.exit(1)\n",
"\n",
"print(\"Everything ok\")\n",
"\n",
"sys.exit(0)\n",
"\n",
"./disk\\_usage\\_fixed.py\n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"ERROR: Not enough disk space\n",
"\n",
"## File with code\n",
"\n",
"Instructor changed change check\\_disk\\_usage(\"/\", 2\\*2\\*\\*30, 10) in previous file to check\\_disk\\_usage(\"/\", 2, 10).\n",
"```bash\n",
"#!/usr/bin/env python3\n",
"\n",
"import shutil\n",
"\n",
"import sys\n",
"\n",
"def check\\_disk\\_usage(disk, min\\_absolute, min\\_percent):\n",
"\n",
"    \"\"\"Returns True if there is enough free disk space, false otherwise.\"\"\"\n",
"\n",
"    du = shutil.disk\\_usage(disk)\n",
"\n",
"    # Calculate the percentage of free space\n",
"\n",
"    percent\\_free = 100 \\* du.free / du.total\n",
"\n",
"    # Calculate how many free gigabytes\n",
"\n",
"    gigabytes\\_free = du.free / 2\\*\\*30\n",
"\n",
"    if percent\\_free < min\\_percent or gigabytes\\_free < min\\_absolute:\n",
"\n",
"        return False\n",
"\n",
"    return True\n",
"\n",
"# Check for at least 2 GB and 10% free\n",
"\n",
"if not check\\_disk\\_usage(\"/\", 2, 10):\n",
"\n",
"    print(\"ERROR: Not enough disk space\")\n",
"\n",
"    sys.exit(1)\n",
"\n",
"print(\"Everything ok\")\n",
"\n",
"sys.exit(0)\n",
"\n",
"./disk\\_usage\\_fixed.py \n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"Everything ok\n",
"\n",
"```bash\n",
"diff \\-u disk\\_usage\\_original.py disk\\_usage\\_fixed.py > disk\\_usage.diff\n",
"\n",
"cat disk\\_usage.diff \n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"\\--- disk\\_usage\\_original.py 2019-06-22 15:13:38.591579963 -0700\n",
"\n",
"+++ disk\\_usage\\_fixed.py 2019-06-22 15:41:35.013023839 -0700\n",
"\n",
"@@ -1,6 +1,7 @@\n",
"\n",
" #!/usr/bin/env python3\n",
"\n",
" import shutil\n",
"\n",
"+import sys\n",
"\n",
" def check\\_disk\\_usage(disk, min\\_absolute, min\\_percent):\n",
"\n",
"     \"\"\"Returns True if there is enough free disk space, false otherwise.\"\"\"\n",
"\n",
"@@ -14,9 +15,9 @@\n",
"\n",
"     return True\n",
"\n",
" # Check for at least 2 GB and 10% free\n",
"\n",
"\\-if not check\\_disk\\_usage(\"/\", 2\\*2\\*\\*30, 10):\n",
"\n",
"+if not check\\_disk\\_usage(\"/\", 2, 10):\n",
"\n",
"     print(\"ERROR: Not enough disk space\")\n",
"\n",
"\\-    return 1\n",
"\n",
"+    sys.exit(1)\n",
"\n",
" print(\"Everything ok\")\n",
"\n",
"\\-return 0\n",
"\n",
"+sys.exit(0)\n",
"\n",
"```bash\n",
"patch disk\\_usage.py < disk\\_usage.diff \n",
"\n",
"patching file disk\\_usage.py\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"patching file disk\\_usage.py\n",
"```bash\n",
"./disk\\_usage.py \n",
"```\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"Everything ok"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Study guide: diff and patch\n",
"\n",
"## The diff command\n",
"\n",
"You use the diff command to find the differences between two files. On its own, its a bit hard to use; instead, use diff -u to find lines that differ in two files:\n",
"\n",
"## Using diff -u\n",
"\n",
"You use the diff -u command to compare two files, line by line, and have the differing lines compared side-by-side in the same output. For an example of what this looks like, see below:\n",
"\n",
"```bash\n",
"~$ cat menu1.txt \n",
"\n",
"Menu1:\n",
"\n",
"Apples\n",
"\n",
"Bananas\n",
"\n",
"Oranges\n",
"\n",
"Pears\n",
"\n",
"~$ cat menu2.txt \n",
"\n",
"Menu:\n",
"\n",
"Apples\n",
"\n",
"Bananas\n",
"\n",
"Grapes\n",
"\n",
"Strawberries\n",
"\n",
"~$ diff \\-u menu1.txt menu2.txt \n",
"\n",
"\\--- menu1.txt   2019\\-12-16 18:46:13.794879924 +0900\n",
"\n",
"+++ menu2.txt   2019\\-12-16 18:46:42.090995670 +0900\n",
"\n",
"@@ \\-1,6 +1,6 @@\n",
"\n",
"\\-Menu1:\n",
"\n",
"+Menu:\n",
"\n",
" Apples\n",
"\n",
" Bananas\n",
"\n",
"\\-Oranges\n",
"\n",
"\\-Pears\n",
"\n",
"+Grapes\n",
"\n",
"+Strawberries\n",
"```\n",
"\n",
"## The patch command\n",
"\n",
"The patch command is useful for applying file differences. See the example below, which compares two files. The comparison is saved as a .diff file, which is then patched to the original file!\n",
"\n",
"```bash\n",
"~$ cat hello\\_world.txt \n",
"\n",
"Hello World\n",
"\n",
"~$ cat hello\\_world\\_long.txt \n",
"\n",
"Hello World\n",
"\n",
"It's a wonderful day!\n",
"\n",
"~$ diff -u hello\\_world.txt hello\\_world\\_long.txt \n",
"\n",
"\\--- hello\\_world.txt     2019-12-16 19:24:12.556102821 +0900\n",
"\n",
"+++ hello\\_world\\_long.txt        2019-12-16 19:24:38.944207773 +0900\n",
"\n",
"@@ -1 +1,3 @@\n",
"\n",
" Hello World\n",
"\n",
"+\n",
"\n",
"+It's a wonderful day!\n",
"\n",
"~$ diff \\-u hello\\_world.txt hello\\_world\\_long.txt > hello\\_world.diff\n",
"\n",
"~$ patch hello\\_world.txt < hello\\_world.diff \n",
"\n",
"patching file hello\\_world.txt\n",
"\n",
"~$ cat hello\\_world.txt \n",
"\n",
"Hello World\n",
"\n",
"It's a wonderful day!\n",
"```\n",
"\n",
"## Resources for more information\n",
"\n",
"There are other interesting patch and diff commands such as patch -p1 and diff -r . For more information on these commands, check out the following resources:\n",
"\n",
"- [http://man7.org/linux/man-pages/man1/diff.1.html<svg aria-labelledby=\"cds-react-aria8760104591-:rgs:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8760104591-:rgs:\"><title id=\"cds-react-aria8760104591-:rgs:-title\">Opens in a new tab</title></svg>](http://man7.org/linux/man-pages/man1/diff.1.html)\n",
"- [http://man7.org/linux/man-pages/man1/patch.1.html<svg aria-labelledby=\"cds-react-aria8760104591-:rgu:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8760104591-:rgu:\"><title id=\"cds-react-aria8760104591-:rgu:-title\">Opens in a new tab</title></svg>](http://man7.org/linux/man-pages/man1/patch.1.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# More Information About Git\n",
"\n",
"Check out the following links for more information:\n",
"\n",
"- [https://git-scm.com/doc<svg aria-labelledby=\"cds-react-aria8737541281-:rq0:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:rq0:\"><title id=\"cds-react-aria8737541281-:rq0:-title\">Opens in a new tab</title></svg>](https://git-scm.com/doc)\n",
"- [https://www.mercurial-scm.org/<svg aria-labelledby=\"cds-react-aria8737541281-:rq2:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:rq2:\"><title id=\"cds-react-aria8737541281-:rq2:-title\">Opens in a new tab</title></svg>](https://www.mercurial-scm.org/)\n",
"- [https://subversion.apache.org/<svg aria-labelledby=\"cds-react-aria8737541281-:rq4:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:rq4:\"><title id=\"cds-react-aria8737541281-:rq4:-title\">Opens in a new tab</title></svg>](https://subversion.apache.org/)\n",
"- [https://en.wikipedia.org/wiki/Version\\_control<svg aria-labelledby=\"cds-react-aria8737541281-:rq6:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:rq6:\"><title id=\"cds-react-aria8737541281-:rq6:-title\">Opens in a new tab</title></svg>](https://en.wikipedia.org/wiki/Version_control)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# First steps with Git\n",
"\n",
"This reading contains the code used in the instructional videos from [**First steps with Git**<svg aria-labelledby=\"cds-react-aria8737541281-:r1jh:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:r1jh:\"><title id=\"cds-react-aria8737541281-:r1jh:-title\">Opens in a new tab</title><path d=\"M4.5 17c-.412 0-.766-.147-1.06-.44A1.445 1.445 0 013 15.5v-11c0-.412.147-.766.44-1.06.294-.293.648-.44 1.06-.44h4.75c.213 0 .39.071.534.214a.72.72 0 01.216.532c0 .21-.072.39-.216.535a.72.72 0 01-.534.219H4.5v11h11v-4.75c0-.213.072-.39.214-.534a.72.72 0 01.532-.216c.21 0 .39.072.535.216a.72.72 0 01.219.534v4.75c0 .412-.147.766-.44 1.06-.294.293-.647.44-1.06.44h-11zm11-11.438L8.583 12.48a.681.681 0 01-.52.219.758.758 0 01-.521-.24.729.729 0 010-1.062L14.438 4.5H12.75a.728.728 0 01-.534-.214.72.72 0 01-.216-.532c0-.21.072-.39.216-.535A.72.72 0 0112.75 3h3.5c.212 0 .39.072.534.216A.726.726 0 0117 3.75v3.5c0 .213-.072.39-.214.534a.72.72 0 01-.532.216.734.734 0 01-.535-.216.72.72 0 01-.219-.534V5.562z\" fill=\"currentColor\" data-darkreader-inline-fill=\"\" style=\"--darkreader-inline-fill: currentColor;\"></path></svg>](https://www.coursera.org/learn/introduction-git-github/lecture/2xrXl/first-steps-with-git)**.** \n",
"\n",
"## Introduction\n",
"\n",
"This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n",
"\n",
"You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n",
"\n",
"```bash\n",
"git config \\--global user.email \"me@example.com\"\n",
"\n",
"git config \\--global user.name \"My name\"\n",
"```\n",
"\n",
"```bash\n",
"mkdir checks\n",
"\n",
"cd checks\n",
"\n",
"git init\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"Initialized empty Git repository in /home/user/checks/.git/\n",
"\n",
"```bash\n",
"ls \\-la\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"total 12\n",
"\n",
"drwxrwxr-x  3 user user 4096 Jul  9 18:16 .\n",
"\n",
"drwxr-xr-x 18 user user 4096 Jul  9 18:16 ..\n",
"\n",
"drwxrwxr-x  7 user user 4096 Jul  9 18:16 .git\n",
"\n",
"user@ubuntu:~/checks$ ls -l .git/\n",
"\n",
"total 32\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 branches\n",
"\n",
"\\-rw-rw-r-- 1 user user   92 Jul  9 18:16 config\n",
"\n",
"\\-rw-rw-r-- 1 user user   73 Jul  9 18:16 description\n",
"\n",
"\\-rw-rw-r-- 1 user user   23 Jul  9 18:16 HEAD\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 hooks\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 info\n",
"\n",
"drwxrwxr-x 4 user user 4096 Jul  9 18:16 objects\n",
"\n",
"drwxrwxr-x 4 user user 4096 Jul  9 18:16 refs\n",
"\n",
"```bash\n",
"ls \\-l\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"total 4\n",
"\n",
"\\-rw-rw-r-- 1 user user 657 Jul  9 18:26 disk\\_usage.py\n",
"\n",
"1\n",
"\n",
"ls \\-l .git/\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"total 32\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 branches\n",
"\n",
"\\-rw-rw-r-- 1 user user   92 Jul  9 18:16 config\n",
"\n",
"\\-rw-rw-r-- 1 user user   73 Jul  9 18:16 description\n",
"\n",
"\\-rw-rw-r-- 1 user user   23 Jul  9 18:16 HEAD\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 hooks\n",
"\n",
"drwxrwxr-x 2 user user 4096 Jul  9 18:16 info\n",
"\n",
"drwxrwxr-x 4 user user 4096 Jul  9 18:16 objects\n",
"\n",
"drwxrwxr-x 4 user user 4096 Jul  9 18:16 refs\n",
"\n",
"```bash\n",
"cp ../disk\\_usage.py .\n",
"\n",
"ls \\-l\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"total 4\n",
"\n",
"\\-rw-rw-r-- 1 user user 657 Jul  9 18:26 disk\\_usage.py\n",
"\n",
"```bash\n",
"git add disk\\_usage.py \n",
"\n",
"git status\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
"On branch master\n",
"\n",
"No commits yet\n",
"\n",
"Changes to be committed:\n",
"\n",
"  (use \"git rm --cached <file>...\" to unstage)\n",
"\n",
"new file:   disk\\_usage.py\n",
"\n",
"```bash\n",
"git commit\n",
"```\n",
"\n",
"**Code output:**\n",
"\n",
" GNU nano 3.2         /home/user/checks/.git/COMMIT\\_EDITMSG                    \n",
"\n",
"\\# Please enter the commit message for your changes. Lines starting\n",
"\n",
"\\# with '#' will be ignored, and an empty message aborts the commit.\n",
"\n",
"\\# On branch master\n",
"\n",
"\\# Initial commit\n",
"\n",
"\\# Changes to be committed:\n",
"\n",
"\\#       new file:   disk\\_usage.py\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tracking Files\n",
"\n",
"This reading contains the code used in the instructional videos from [**Tracking Files**<svg aria-labelledby=\"cds-react-aria8737541281-:r1t1:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria8737541281-:r1t1:\"><title id=\"cds-react-aria8737541281-:r1t1:-title\">Opens in a new tab</title></svg>](https://www.coursera.org/learn/introduction-git-github/lecture/CO6OR/tracking-files)**.**\n",
"\n",
"## Introduction\n",
"\n",
"This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n",
"\n",
"You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n",
"\n",
"```bash\n",
"cd checks\n",
"\n",
"ls \\-l\n",
"```\n",
"\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"total 4\n",
"\n",
"\\-rw-r--r-- 1 user user 657 Jul  9 12:52 disk\\_usage.py\n",
"\n",
"user@ubuntu:~/checks$ git status\n",
"\n",
"On branch master\n",
"\n",
"nothing to commit, working tree clean\n",
"\n",
"```bash\n",
"git status\n",
"```\n",
"\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"On branch master\n",
"\n",
"nothing to commit, working on clean tree\n",
"\n",
"```bash\n",
"atom disk\\_usage.py \n",
"\n",
"git status\n",
"```\n",
"\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"On branch master\n",
"\n",
"Changes to be committed:\n",
"\n",
"  (use \"git restore --staged <file>...\" to unstage)\n",
"\n",
"modified:   disk\\_usage.py\n",
"\n",
"```bash\n",
"git commit \\-m 'Add periods to the end of sentences.'\n",
"```\n",
"\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"\\[master ae8d19c\\] Add periods to the end of sentences.\n",
"\n",
" 1 file changed, 2 insertions(+), 2 deletions(-)\n",
"\n",
"```bash\n",
"git status\n",
"```\n",
"\n",
"\n",
"\n",
"**Code output:**\n",
"\n",
"On branch master\n",
"\n",
"nothing to commit, working tree clean"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}