update module4.ipynb
This commit is contained in:
parent
b4fef3632c
commit
0c804dadea
456
module4.ipynb
456
module4.ipynb
@ -818,21 +818,471 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Additional Tools"
|
||||
"# Additional Tools\n",
|
||||
"\n",
|
||||
"Check out the following links for more information:\n",
|
||||
"\n",
|
||||
"- [Open source DIY ethics](https://arp242.net/diy.html)\n",
|
||||
"- [Linking a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)\n",
|
||||
"- [Setting guidelines for repository contributors](https://help.github.com/en/articles/setting-guidelines-for-repository-contributors)\n",
|
||||
"- [What is CI/CD? Continuous integration and continuous delivery explained ](https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html)\n",
|
||||
"- [What Is CICD? What’s Important and How to Get It Right](https://stackify.com/what-is-cicd-whats-important-and-how-to-get-it-right/)\n",
|
||||
"- [Travis CI Tutorial](https://docs.travis-ci.com/user/tutorial/)\n",
|
||||
"- [Build Stages](https://docs.travis-ci.com/user/build-stages/)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Glossary terms from module 4"
|
||||
"# Glossary terms from module 4\n",
|
||||
"\n",
|
||||
"## **Terms and definitions from Module 4**\n",
|
||||
"\n",
|
||||
"**CI/CD:** The name for the entire continuous integration and continuous deployment system\n",
|
||||
"\n",
|
||||
"**Code reviews:** The deliberate and methodical gathering of other programmers to examine each other's code for errors to increase the code quality and reduces the amount of bugs\n",
|
||||
"\n",
|
||||
"**Continuous deployment (CD):** New code is deployed often after it has been automatically built and tested\n",
|
||||
"\n",
|
||||
"**Continuous integration (CI):** A system that will automatically build and test our code every time there's a change\n",
|
||||
"\n",
|
||||
"**Fix up:** The decision to discard commit messages for that commit \n",
|
||||
"\n",
|
||||
"**Forking:** A way of creating a copy of the given repository so that it belongs to our user\n",
|
||||
"\n",
|
||||
"**Indirect merges:** GitHub can merge a pull request automatically if the head branch is directly or indirectly merged into the base branch externally\n",
|
||||
"\n",
|
||||
"**Issue tracker (bug tracker):** A tracker that shows tasks that need to be done, the state they're in and who's working on them\n",
|
||||
"\n",
|
||||
"**Merge commits:** All commits from the feature branch are added to the base branch\n",
|
||||
"\n",
|
||||
"**Pipelines:** The specific steps that need to run to obtain the desired result\n",
|
||||
"\n",
|
||||
"**Pull request:** A procedure where new code is examined before it is merged to create a branch or master branch \n",
|
||||
"\n",
|
||||
"**Squash commits:** The decision add commit messages together and an editor opens to make any necessary changes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Exemplar: Push local commits to GitHub"
|
||||
"# Exemplar: Push local commits to GitHub\n",
|
||||
"\n",
|
||||
"## Introduction\n",
|
||||
"\n",
|
||||
"For the previous lab, you needed to fork an existing repository, fix a bug in a script, push your commit to GitHub, and create a pull request with your commit.\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",
|
||||
"## Forking and detect function behavior\n",
|
||||
"\n",
|
||||
"For this exercise, you need to fork an existing repository: google/it-cert-automation-practice.\n",
|
||||
"\n",
|
||||
"- Open [Github](https://github.com/join). If you don't already have a Github account, create one by entering a username, email, and password. If you already have a Github account proceed to the next step.\n",
|
||||
"- Log in to your account from the [Github](https://github.com/) login page.\n",
|
||||
"\n",
|
||||
"A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.\n",
|
||||
"\n",
|
||||
"Forking a repository is a simple two-step process. We've created a repository for you to practice with!\n",
|
||||
"\n",
|
||||
"- On GitHub, navigate to the [google/it-cert-automation-practice](https://github.com/google/it-cert-automation-practice) repository.\n",
|
||||
"- In the **top-right corner** of the page, click **Fork**.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"This will open the **Create a new fork** window. Next, click on **Create fork**. It should look like this:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"That's it! Now, you have a fork of the original google/it-cert-automation-practice repository.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"First, **clone the repository** using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git clone https://github.com/\\[git\\-username\\]/it\\-cert-automation-practice.git\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"Cloning into 'it-cert-automation-practice'...\n",
|
||||
"\n",
|
||||
"remote: Enumerating objects: 55, done.\n",
|
||||
"\n",
|
||||
"remote: Total 55 (delta 0), reused 0 (delta 0), pack\\-reused 55\n",
|
||||
"\n",
|
||||
"Unpacking objects: 100% (55/55), done.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Go to the it-cert-automation-practice directory using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"cd ~/it\\-cert-automation-practice\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"First, verify that you have already setup a remote for the **upstream** repository, and an **origin**.Type the following command and press **Enter**. You'll see the current configured remote repository for your fork.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git remote \\-v\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"origin https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (fetch)\n",
|
||||
"\n",
|
||||
"origin https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (push)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"In terms of source control, you're **downstream** when you copy (clone, checkout, etc) from a repository. Information is flowed **downstream** to you.\n",
|
||||
"\n",
|
||||
"When you make changes, you usually want to send them back **upstream** so they make it into that repository so that everyone pulling from the same source is working with all the same changes. This is mostly a social issue of how everyone can coordinate their work rather than a technical requirement of source control. You want to get your changes into the **main** project so you're not tracking divergent lines of development.\n",
|
||||
"\n",
|
||||
"Setting the **upstream** for a fork you have created using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git remote add upstream https://github.com/\\[git\\-username\\]/it\\-cert-automation-practice.git\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"To verify the new **upstream** repository you've specified for your fork, type git remote -v again. You should see the **URL** for your fork as **origin**, and the **URL** for the original repository as **upstream**.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git remote \\-v\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"origin https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (fetch)\n",
|
||||
"\n",
|
||||
"origin https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (push)\n",
|
||||
"\n",
|
||||
"upstream https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (fetch)\n",
|
||||
"\n",
|
||||
"upstream https://github.com/XXXXXXXX/it\\-cert-automation-practice.git (push)\n",
|
||||
"```\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. Set the Git **username** with 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 even use **git config** to 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 them 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 also use **git config** to change the user email associated with your Git commits.\n",
|
||||
"\n",
|
||||
"## Fix the script\n",
|
||||
"\n",
|
||||
"In this section we are going to fix an issue that has been filed. Navigate to the [issue](https://github.com/google/it-cert-automation-practice/issues/1), and have a look at it.\n",
|
||||
"\n",
|
||||
"Branches allow you to add new features or test out ideas without putting your main project at risk. In order to add new changes into the repo directory it-cert-automation-practice/Course3/Lab4/, create a new **branch** named improve-username-behavior in your forked repository using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git branch improve\\-username-behavior\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Go to the improve-username-behavior branch from the master branch.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git checkout improve\\-username-behavior\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now, navigate to the working directory Lab4/.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"cd ~/it\\-cert-automation-practice/Course3/Lab4\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"List the files in directory Lab4.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"ls\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"cat validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"#!/usr/bin/env python3\n",
|
||||
"\n",
|
||||
"import re\n",
|
||||
"\n",
|
||||
"def validate\\_user(username, minlen):\n",
|
||||
"\n",
|
||||
" \"\"\"Checks if the received username matches the required conditions.\"\"\"\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",
|
||||
" # Usernames can't be shorter than minlen\n",
|
||||
"\n",
|
||||
" if len(username) < minlen:\n",
|
||||
"\n",
|
||||
" return False\n",
|
||||
"\n",
|
||||
" # Usernames can only use letters, numbers, dots and underscores\n",
|
||||
"\n",
|
||||
" if not re.match('^\\[a-z0-9.\\_\\]\\*$', username):\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\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"This script should validate usernames if they start with an letter only.\n",
|
||||
"\n",
|
||||
"Here, you can check the validate\\_user function's behavior by calling the function. To edit the **validations.py** Python script, open it in a **nano editor** using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"nano validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now, add the following lines of code at the end of the script:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"print(validate\\_user(\"blue.kale\", 3)) # True\n",
|
||||
"\n",
|
||||
"print(validate\\_user(\".blue.kale\", 3)) # Currently True, should be False\n",
|
||||
"\n",
|
||||
"print(validate\\_user(\"red\\_quinoa\", 4)) # True\n",
|
||||
"\n",
|
||||
"print(validate\\_user(\"\\_red\\_quinoa\", 4)) # Currently True, should be False\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Once you've finished writing this script, save the file by pressing **Ctrl-o**, the **Enter** key, and **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"Now, run the **validations.py** on the **python3** interpreter.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"python3 validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"True\n",
|
||||
"\n",
|
||||
"True\n",
|
||||
"\n",
|
||||
"True\n",
|
||||
"\n",
|
||||
"True\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Here, as we see the output, it function returns true even if the username doesnot start with an letter. Here we need to change the check of the first character as only letters are allowed in the first character of the username.\n",
|
||||
"\n",
|
||||
"Continue by opening **validations.py** in the **nano editor** using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"nano validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"There are lots of ways to fix the code; ultimately, you'll want to add additional conditional checks to validate the first character doesn't start with either of the forbidden characters. You can choose whichever way you'd like to implement this.\n",
|
||||
"\n",
|
||||
"Once you've finished writing this script, save the file by pressing **Ctrl-o**, the **Enter** key, and **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"Now, run the **validations.py**.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"python3 validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"True\n",
|
||||
"\n",
|
||||
"False\n",
|
||||
"\n",
|
||||
"True\n",
|
||||
"\n",
|
||||
"False\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now, you've fixed the function behavior!\n",
|
||||
"\n",
|
||||
"## Commit the changes\n",
|
||||
"\n",
|
||||
"Once the issue is fixed and verified, create a new commit by adding the file to the staging area. You can check the status using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git status\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"The **git status** command shows the different states of the files in your working directory and staging area, like files that are modified but unstaged and files that are staged but not yet committed.\n",
|
||||
"\n",
|
||||
"You can now see that the **validations.py** has been modified.\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"On branch improve\\-username-behavior\n",
|
||||
"\n",
|
||||
"Changes not staged for commit:\n",
|
||||
"\n",
|
||||
" (use \"git add <file>...\" to update what will be committed)\n",
|
||||
"\n",
|
||||
" (use \"git checkout -- <file>...\" to discard changes in working directory)\n",
|
||||
"\n",
|
||||
" modified: validations.py\n",
|
||||
"\n",
|
||||
"no changes added to commit (use \"git add\" and/or \"git commit -a\")\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now, let's **add** the file to the staging area using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git add validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Use the **git add** command to **add** content from the working directory into the staging area for the next commit.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git status\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"On branch improve\\-username-behavior\n",
|
||||
"\n",
|
||||
"Changes to be committed:\n",
|
||||
"\n",
|
||||
" (use \"git reset HEAD <file>...\" to unstage)\n",
|
||||
"\n",
|
||||
" modified: validations.py\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Let's now commit the changes. A **git commit** is like saving your work.\n",
|
||||
"\n",
|
||||
"Commit the changes using the following command:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git commit\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"This now opens up an editor that asks you to type a commit message. Every commit has an associated commit message, which is a log message from the user describing the changes.\n",
|
||||
"\n",
|
||||
"Enter a commit message of your choice and append a line: \"Closes: #1\" at the beginning to indicate that you're closing the issue. Adding this keyword has an additional effect when using Github to manage your repos, which will automatically close the issue for you (for more information, please see the [documentation here](https://help.github.com/en/github/managing-your-work-on-github/closing-issues-using-keywords#closing-an-issue-in-the-same-repository)).\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"Closes: #1\n",
|
||||
"\n",
|
||||
"Updated validations.py python script.\n",
|
||||
"\n",
|
||||
"Fixed the behavior of validate\\_user function in validations.py.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Once you've entered the commit message, save it by pressing **Ctrl-o** and the **Enter** key. To exit, click **Ctrl-x**.\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"\\[improve\\-username-behavior d947d11\\] Closes: #1 Updated validations.py python script. Fixed the behavior of validate\\_user function in validations.py.\n",
|
||||
"\n",
|
||||
" 1 file changed, 5 insertions(+), 2 deletions(-)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## Push changes\n",
|
||||
"\n",
|
||||
"You forked a repository and made changes to the fork. Now you can ask that the **upstream** repository accept your changes by creating a **pull request**. Now, let's **push** the changes.\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"git push origin improve\\-username-behavior\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\n",
|
||||
"\n",
|
||||
"***Note:*** *While pushing the changes to the branch, you will be prompted to enter your Github* ***username*** *and* ***personal access token*** *to push the changes on repo via HTTPS method as password authentication method is currently not supported by Github. It requires the use of personal access tokens rather than traditional passwords so it is necessary for you to create a personal access token to complete the lab (in case you don’t have one).*\n",
|
||||
"\n",
|
||||
"***Generating a Personal Access Token***\n",
|
||||
"\n",
|
||||
"***Personal Access Token*** *can be created by moving the application settings of your Github account. Proceed to the* ***Settings*** *menu and choose* ***Developer settings****, where you will locate the option for* ***Personal Access Token****. By utilizing this token, you will be enabled to clone and push to your remote repository using HTTPS. For more help to generate a personal access token, click* [*here*](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line#creating-a-token)*.*\n",
|
||||
"\n",
|
||||
"\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\n",
|
||||
"\n",
|
||||
"**Output:**\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"Username for 'https://github.com': XXXXXXXX\n",
|
||||
"\n",
|
||||
"Password for 'https://XXXXXXXX@github.com': \n",
|
||||
"\n",
|
||||
"Enumerating objects: 9, done.\n",
|
||||
"\n",
|
||||
"Counting objects: 100% (9/9), done.\n",
|
||||
"\n",
|
||||
"Compressing objects: 100% (3/3), done.\n",
|
||||
"\n",
|
||||
"Writing objects: 100% (5/5), 553 bytes | 138.00 KiB/s, done.\n",
|
||||
"\n",
|
||||
"Total 5 (delta 2), reused 0 (delta 0)\n",
|
||||
"\n",
|
||||
"remote: Resolving deltas: 100% (2/2), completed with 2 local objects.\n",
|
||||
"\n",
|
||||
"remote: \n",
|
||||
"\n",
|
||||
"remote: Create a pull request for 'improve-username-behavior' on GitHub by visiting:\n",
|
||||
"\n",
|
||||
"remote: https://github.com/XXXXXXXX/it\\-cert-automation-practice/pull/new/improve\\-username-behavior\n",
|
||||
"\n",
|
||||
"remote: \n",
|
||||
"\n",
|
||||
"To https://github.com/XXXXXXXX/it\\-cert-automation-practice.git\n",
|
||||
"\n",
|
||||
" \\* \\[new branch\\] improve\\-username-behavior -> improve\\-username-behavior\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Then, from GitHub, create a pull request from your forked repository \\[git-username\\]/it-cert-automation-practice that includes a description of your change. Your branch improve-username-behavior is now able to merge into the master branch. It should look like the image below:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"After initializing a **pull request**, you'll see a review page that shows a high-level overview of the changes between your branch (the compare branch) and the repository's base branch. You can add a summary of the proposed changes, review the changes made by commits, add labels, milestones, and assignees, and **@mention** individual contributors or teams.\n",
|
||||
"\n",
|
||||
"Once you've created a **pull request**, you can **push** commits from your topic branch to add them to your existing **pull request**. These commits will appear in chronological order within your **pull request** and the changes will be visible in the **Files changed** tab.\n",
|
||||
"\n",
|
||||
"Other contributors can review your proposed changes, add review comments, contribute to the pull request discussion, and even add commits to the pull request.\n",
|
||||
"\n",
|
||||
"You can see information about the branch's current deployment status and past deployment activity on the **Conversation** tab.\n",
|
||||
"\n",
|
||||
"**Note:** PR won't be merged on the master branch so that other users can also make a similar change to fix the issue.\n",
|
||||
"\n",
|
||||
"## Congratulations!\n",
|
||||
"\n",
|
||||
"In this lab, you successfully forked a repository, committed changes to your own fork, and created a **pull request** to the upstream. Well done!"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user