update module1.ipynb
This commit is contained in:
parent
3a26f9e7fb
commit
e3a6dae00c
365
module1.ipynb
365
module1.ipynb
@ -1134,32 +1134,361 @@
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
"source": [
|
||||
"# Git\n",
|
||||
"\n",
|
||||
"In any Git project, there are three sections: the Git directory, the working tree, and the staging area. This study guide provides some basic concepts and commands that can help you get started with Git as well as guidelines to help you write an effective commit message.\n",
|
||||
"\n",
|
||||
"## Git config command\n",
|
||||
"\n",
|
||||
"The Git config command is used to set the values to identify who made changes to Git repositories. To set the values of user.email and user.name to your email and name, type: \n",
|
||||
"\n",
|
||||
": ~$ git config - -global user.email “[me@example.com<svg aria-labelledby=\"cds-react-aria6078214324-:rld:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria6078214324-:rld:\"><title id=\"cds-react-aria6078214324-:rld:-title\">Opens in a new tab</title></svg>](https://www.coursera.org/learn/introduction-git-github/supplement/WaYsJ/)”\n",
|
||||
"\n",
|
||||
": ~$ git config - -global user.name “My name”\n",
|
||||
"\n",
|
||||
"## Git init command\n",
|
||||
"\n",
|
||||
": ~/checks$ git init\n",
|
||||
"\n",
|
||||
"The Git init command can create a new empty repository in a current directory or re-initialize an existing one. \n",
|
||||
"\n",
|
||||
"## Git ls -la command\n",
|
||||
"\n",
|
||||
": ~/checks$ ls -la\n",
|
||||
"\n",
|
||||
"The Git ls - la command checks that an identified directory exists.\n",
|
||||
"\n",
|
||||
": ~/checks$ ls -l .git/\n",
|
||||
"\n",
|
||||
"The ls-l.git command checks inside the directory to see the different things that it contains. This is called the Git directory. The Git directory is a database for your Git project that stores the changes and the change history.\n",
|
||||
"\n",
|
||||
"## Git add command\n",
|
||||
"\n",
|
||||
":~/checks$ git add disk\\_usage.py\n",
|
||||
"\n",
|
||||
"Using the Git add command allows Git to track your file and uses the selected file as a parameter when adding it to the staging area. The staging area is a file maintained by Git that contains all the information about what files and changes are going to go into your next commit.\n",
|
||||
"\n",
|
||||
"## Git status command\n",
|
||||
"\n",
|
||||
":~/checks$ git status\n",
|
||||
"\n",
|
||||
"The Git status command is used to get some information about the current working tree and pending changes.\n",
|
||||
"\n",
|
||||
"## Git commit command\n",
|
||||
"\n",
|
||||
":~/checks$ git commit\n",
|
||||
"\n",
|
||||
"The .git commit command is run to remove changes made from the staging area to the .git directory. When this command is run, it tells Git to save changes. A text editor is opened that allows a commit message to be entered.\n",
|
||||
"\n",
|
||||
"## Guidelines for writing commit messages\n",
|
||||
"\n",
|
||||
"A commit message is generally broken into two sections: a short summary and a description of the changes. When the git commit command is run, Git will open a text editor to write your commit message. A good commit message includes the following:\n",
|
||||
"\n",
|
||||
"**Summary:** The first line contains the summary, formatted as a header, containing 50 characters or less. \n",
|
||||
"\n",
|
||||
"**Description:** The description is usually kept under 72 characters and provides detailed information about the change. It can include references to bugs or issues that will be fixed with the change. It also can include links to more information when relevant. \n",
|
||||
"\n",
|
||||
"Click the link to review an example of a commit message: [https://commit.style/<svg aria-labelledby=\"cds-react-aria6078214324-:rlf:-title\" fill=\"none\" focusable=\"false\" height=\"16\" role=\"img\" viewBox=\"0 0 20 20\" width=\"16\" class=\"css-8blerm\" id=\"cds-react-aria6078214324-:rlf:\"><title id=\"cds-react-aria6078214324-:rlf:-title\">Opens in a new tab</title></svg>](https://commit.style/) \n",
|
||||
"\n",
|
||||
"## Key takeaways\n",
|
||||
"\n",
|
||||
"Knowing basic Git commands and guidelines for writing better messages can help you get started with Git as well as better communicate with others."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
"source": [
|
||||
"# Glossary terms from module 1\n",
|
||||
"\n",
|
||||
"## **Terms and definitions from Course 3, Module 1**\n",
|
||||
"\n",
|
||||
"**Commit:** A command to make edits to multiple files and treat that collection of edits as a single change\n",
|
||||
"\n",
|
||||
"**Commit files:** A stage where the changes made to files are safely stored in a snapshot in the Git directory\n",
|
||||
"\n",
|
||||
"**Commit message:** A summary and description with contextual information on the parts of the code or configuration of the commit change\n",
|
||||
"\n",
|
||||
"**Diff:** A command to find the differences between two files\n",
|
||||
"\n",
|
||||
"**DNS zone file:** A configuration file that specifies the mappings between IP addresses and host names in your network\n",
|
||||
"\n",
|
||||
"**Git:** A free open source version control system available for installation on Unix based platforms, Windows and macOS\n",
|
||||
"\n",
|
||||
"**Git directory:** A database for a Git project that stores the changes and the change history\n",
|
||||
"\n",
|
||||
"**Git log:** A log that displays commit messages \n",
|
||||
"\n",
|
||||
"**Git staging area:** A file maintained by Git that contains all the information about what files and changes are going to go into the next commit\n",
|
||||
"\n",
|
||||
"**Modified files:** A stage where changes have been made to a file, but the have not been stored or committed \n",
|
||||
"\n",
|
||||
"**Patch:** A command that can detect that there were changes made to the file and will do its best to apply the changes\n",
|
||||
"\n",
|
||||
"**Repository:** An organization system of files that contain separate software projects \n",
|
||||
"\n",
|
||||
"**Source Control Management (SCM):** A tool similar to VCS to store source code\n",
|
||||
"\n",
|
||||
"**Stage files:** A stage where the changes to files are ready to be committed \n",
|
||||
"\n",
|
||||
"**Tracked:** A file’s changes are recorded\n",
|
||||
"\n",
|
||||
"**Untracked:** A file’s changes are not recorded\n",
|
||||
"\n",
|
||||
"**Version control systems (VCS):** A tool to safely test code before releasing it, allow multiple people collaborate on the same coding projects together, and stores the history of that code and configuration"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
"source": [
|
||||
"# Exemplar: Introduction to Git\n",
|
||||
"\n",
|
||||
"## Introduction\n",
|
||||
"\n",
|
||||
"In the previous lab, you were a project lead in an IT company. You and your team were working on a huge project, which consisted of multiple functionalities and modules. This project is evolving over time and so your team is expecting a lot of code revisions. In this lab, you learned how to use a distributed version control system called Git. You'll also discovered how to connect to a VM instance, install Git, and configure your Git user information. Then, you created a local Git repository, added a file to the repository, and did some basic operations like adding a file, editing files, and making commits.\n",
|
||||
"\n",
|
||||
"This exemplar is a walkthrough of the previous Qwiklab activity, including detailed instructions and solutions. You may use this exemplar if you were unable to complete the lab and/or you need extra guidance in competing lab tasks. You may also refer to this exemplar to prepare for the graded quiz in this module.\n",
|
||||
"\n",
|
||||
"## Install Git\n",
|
||||
"\n",
|
||||
"Before you install **Git** on your Linux VM, you need to first make sure that you have a fresh index of the packages available to you. To do that, run:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"sudo apt update\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now, you can install **Git** on your Linux host using **apt** by running the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"sudo apt install git\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"For any prompts, continue by clicking **Y**.\n",
|
||||
"\n",
|
||||
"Check the installed version of **git** by using the command below:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git \\--version\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## **Initialize a new repository**\n",
|
||||
"\n",
|
||||
"Create a **directory** to store your project in. To do this, use the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"mkdir my\\-git-repo\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now navigate to the **directory** you created.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"cd my\\-git-repo\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Next, initialize a new repository by using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git init\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"The **git init** command creates a new Git repository. In our case, it transformed the current directory into a Git repository. It can also be used to convert an existing, unversioned project to a Git repository or to initialize a new, empty repository.\n",
|
||||
"\n",
|
||||
"Executing **git init** creates a **.git** subdirectory in the current working directory, which contains all of the necessary Git metadata for the new repository. This metadata includes subdirectories for objects, refs, and template files. A HEAD file is also created which points to the currently checked out commit.\n",
|
||||
"\n",
|
||||
"If you've already run **git init** on a project directory containing a **.git** subdirectory, you can safely run **git init** again on the same project directory. The operation is what we call *idempotent*; running it again doesn't override an existing **.git** configuration.\n",
|
||||
"\n",
|
||||
"## **Configure Git**\n",
|
||||
"\n",
|
||||
"Git uses a username to associate commits with an identity. It does this by using the **git config** command. To set **Git username** use the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git config \\--global user.name \"Name\"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Replace **Name** with your name. Any future commits you push to GitHub from the command line will now be represented by this name. You can use **git config** to even change the name associated with your Git commits. This will only affect future commits and won't change the name used for past commits.\n",
|
||||
"\n",
|
||||
"Let's set your **email address** to associate it with your **Git commits**.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git config \\--global user.email \"user@example.com\"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Replace **user@example.com** with your **email-id**. Any future commits you now push to GitHub will be associated with this email address. You can even use **git config** to change the **user email** associated with your **Git commits**.\n",
|
||||
"\n",
|
||||
"## **Git Operations**\n",
|
||||
"\n",
|
||||
"Let's now create a text file named **README**. We will be using the nano editor for this.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"nano README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Type any text within the file, or you can use the following text:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"This is my first repository.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Save the file by pressing **Ctrl-o**, **Enter** key, and **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"Git is now aware of the files in the project. We can check the **status** using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git status\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"This command displays the **status** of the working tree. It also shows changes that have been staged, changes that haven't been staged, and files that aren't tracked by Git.\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"On branch master\n",
|
||||
"\n",
|
||||
"No commits yet\n",
|
||||
"\n",
|
||||
"Untracked files:\n",
|
||||
"\n",
|
||||
" (use \"git add <file>...\" to include in what will be committed)\n",
|
||||
"\n",
|
||||
" README\n",
|
||||
"\n",
|
||||
"nothing added to commit but untracked files present (use \"git add\" to track)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"You can now see the file you created, **README**, under the section **Untracked files**. Git isn't tracking the files yet. To track the files, we have to commit these files by adding them to the staging area.\n",
|
||||
"\n",
|
||||
"Now let's **add** the file to the staging area using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git add README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"This command adds changes from the working tree to the staging area i.e., it gathers and prepares files for Git before committing them. In other words, it updates the index with the current content found in the working tree to prepare the content that's staged for the next commit.\n",
|
||||
"\n",
|
||||
"You can now view the status of the working tree using the command: **git status**. This now shows the file **README** in **green** i.e., the file is now in the staging area and yet to be committed.\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\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: README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"However, **git add** doesn't affect the repository in any serious way because changes are not actually recorded until you commit them.\n",
|
||||
"\n",
|
||||
"Let's now commit the changes. A **Git commit** is equivalent to the term **Save**.\n",
|
||||
"\n",
|
||||
"Commit the changes using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git commit\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"This now opens an editor, asking you to type a commit message. Every commit has an associated commit message. A commit message is a log message from the user describing the changes.\n",
|
||||
"\n",
|
||||
"Enter the **commit** message of your choice or you can use the following text:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"This is my first commit!\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Once you have entered the commit message, save it by pressing **Ctrl-o** and **Enter** key. To exit click **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"The **git commit** command captures a snapshot of the project's currently staged changes i.e., it stores the current contents of the index in a new commit along with the commit message.\n",
|
||||
"\n",
|
||||
"You have successfully committed your file!\n",
|
||||
"\n",
|
||||
"Let's now re-edit the file again to understand the process better. Open the file **README** using nano editor.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"nano README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now add another line of description for your repository below the earlier entered line. Add the description of your choice or you can use the following text:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"A repository is a location where all the files of a particular project are stored.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Save and exit the editor by pressing **Ctrl-o**, **Enter** key, and **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"Now, let's repeat the previous process. As mentioned earlier, you can always check the status of your repository by using:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git status\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"To understand the difference, compare with the earlier scenario where you added the new file to the repository.\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"On branch master\n",
|
||||
"\n",
|
||||
"Changes not staged for commit:\n",
|
||||
"\n",
|
||||
" (use \"git add <file>...\" to update what will be committed)\n",
|
||||
"\n",
|
||||
" (use \"git restore <file>...\" to discard changes in working directory)\n",
|
||||
"\n",
|
||||
" modified: README\n",
|
||||
"\n",
|
||||
"no changes added to commit (use \"git add\" and/or \"git commit -a\")\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Git tracks the changes and displays that the file has been modified. You can view the changes made to file using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git diff README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"You can see the differences between the older file and the new file. New additions are denoted by **green-colored** text and a **+** sign at the start of the line. Any replacements/removal are denoted by text in **red-colored** text and a **\\-** sign at the start of the line.\n",
|
||||
"\n",
|
||||
"Now, we will add these changes to the staging area.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git add README\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"View the **status** of the repository using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git status\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Git now shows the same file in **green-colored** text. This means the changes are staged and ready to be committed.\n",
|
||||
"\n",
|
||||
"Let's commit the file now by entering the commit message with the command itself, unlike the previous commit.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git commit \\-m \"This is my second commit.\"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"The command **git commit** with **\\-m** flag takes the commit message, too. This is different to the command without flag, where you had to type the commit message within the editor. If multiple **\\-m** flags are given to the command, it concatenates the values as separate paragraphs.\n",
|
||||
"\n",
|
||||
"To view all the commits use the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git log\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Git log** command shows the commit history of the repository. It shows all the commits on the repository represented by a unique **commit ID** at the top of each commit. It also shows the author, date, and time and the commit message associated with the commits.\n",
|
||||
"\n",
|
||||
"You also have various options to limit the output of this command. The output can be filtered based on the last number of commits, author, commit message, etc.\n",
|
||||
"\n",
|
||||
"## **Congratulations!**\n",
|
||||
"\n",
|
||||
"Congrats! You've successfully installed the Git, initialized a repository, and performed basic Git operations. Now that you know how to do this, it will be easier for you and your team to work on a huge project with multiple functionalities and modules."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
Loading…
Reference in New Issue
Block a user