Skip to content

Assignment 4: GitHub Flow

Goals

The goal of this assignment is to give you practical experience with GitHub Flow, a lightweight, branch-based workflow that supports teams and projects where deployments are made regularly. You will create a simple project, make changes using Git, collaborate using GitHub, and automate deployment using GitHub Actions.

Q1: Hello, Git and GitHub

Follow the instructions here:

Configure Git

Configure your name and email address. You may need to use a proxy.

Fork a Repo

Fork https://github.com/THUASTA/git-practice-temp to your own account.

Clone the Repo

Clone the forked repo to your local machine.

Commit I

Add a file called hello.txt to the repo with the following content. You should just copy and paste the content into the file.

Hello, Git!
Hello, Github!
Hello, GitHub Actions!

Commit the file to the repo. Every commit you make should follow Conventional Commits. Then push the commit to GitHub.

Tagging I

Create a tag called v0.1 for main branch you just made.

Branching I

Create a branch called develop from main. Then switch to the develop branch.

Commit II

Add a file called hello2.txt to the repo with the following content.

Hello2, Git!
Hello2, GitHub!
Hello2, GitHub Actions!

Modify hello.txt to the following content.

Hello1, Git!
Hello1, Github!
Hello1, GitHub Actions!

Commit the changes to the repo.

Branching II

Create a branch called feature/gitignore from develop. Then switch to the feature/gitignore branch.

Commit III

Add a file called .gitignore to the repo with the following content and

*.tmp

Create some files with .tmp extension.

Commit the changes to the repo.

Branching III

Create a branch called hotfix/case from main. Then switch to the hotfix/case branch.

Commit IV

Modify hello.txt to the following content and commit the changes to the repo.

Hello, Git!
Hello, GitHub!
Hello, GitHub Actions!

Merging I

Merge hotfix/case into main. Then merge hotfix/case into develop. You may need to resolve conflicts. Every merge should disable fast-forward (git merge --no-ff).

Tagging II

Create a tag called v0.2 for main branch you just made.

Merging II

Merge feature/gitignore into develop.

Branching IV

Create a branch called release/v1.0 from develop. Then switch to the release/v1.0 branch.

Commit V

Create a file called LICENSE with the following content and commit the changes to the repo.

MIT License

Merging III

Merge release/v1.0 into main. Then merge release/v1.0 into develop.

Tagging III

Create a tag called v1.0 for main branch you just made.

Don't forget to push all the commits and tags to GitHub.

Commit VI

Checkout develop branch. Add hello3.txt to the repo with the following content and commit the changes to the repo.

Hello3, Git!
Hello3, GitHub!
Hello3, GitHub Actions!

Commit VII

Remove hello2.txt from the repo and commit the changes to the repo.

Reverting I

Revert the commit Commit VI and commit the changes to the repo.

Commit VIII

Add name.txt to the repo with your name and commit the changes to the repo.

Push all branches and tags

You can use git push --set-upstream origin <branch> to push a new branch to GitHub. You can use git push --tags to push all tags to GitHub.

Check the Git Graph

Now you have finished the first part of the assignment. Run git log --all --decorate --oneline --graph and you may see something like this.

* a9db3ad (HEAD -> develop, origin/develop) Revert "chore: add hello3.txt"
* 41c8545 chore: remove hello2.txt
* 164f912 chore: add hello3.txt
*   affa463 Merge branch 'release/v1.0' into develop
|\
| | *   136a3f8 (origin/main, origin/HEAD, main) Merge branch 'release/v1.0'
| | |\
| | |/
| |/|
| * | 6981d7d (origin/release/v1.0, release/v1.0) chore: add license
|/ /
* |   6388700 Merge branch 'feature/gitignore' into develop
|\ \
| * | 3a6ed0a (origin/feature/gitignore, feature/gitignore) chore: add .gitignore file
* | |   4b3dbc8 Merge branch 'hotfix/case' into develop
|\ \ \
| |/ /
|/| |
* | | 920aa3a chore: add hello2.txt
| | * a621f2b (tag: v0.2) Merge branch 'hotfix/case'
| |/|
|/|/
| * 8a4de86 (origin/hotfix/case, hotfix/case) fix: fix case
|/
* 2b32704 (tag: v0.1) chore: add hello.txt
* 8ac995a chore: initial commit

The Git graph is shown below.

%%{init: {'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
    commit
    commit tag: "v0.1"
    branch develop
    checkout develop
    commit
    branch "feature/gitignore"
    checkout "feature/gitignore"
    commit
    checkout main
    branch "hotfix/case"
    checkout "hotfix/case"
    commit
    checkout main
    merge "hotfix/case" tag: "v0.2"
    checkout develop
    merge "hotfix/case"
    merge "feature/gitignore"
    branch "release/v1.0"
    checkout "release/v1.0"
    commit
    checkout main
    merge "release/v1.0" tag: "v1.0"
    checkout develop
    merge "release/v1.0"
    commit
    commit
    commit type: REVERSE
    commit

Open a Pull Request

Open a pull request from main of your forked repo to main of the upstream repo.

Q2: Automation

Complete these instructions under the main branch of your forked repo from Q1.

Write MkDocs Configurations

Create a file called mkdocs.yml with the following content.

site_name: My Git Graph

nav:
  - index.md

Try MkDocs Locally

Install MkDocs:

pip install mkdocs==1.5.2

Run the commands to write the git graph to docs/index.md:

echo -e "\`\`\`\n" >> docs/index.md
git log --all --decorate --oneline --graph >> docs/index.md
echo -e "\n\`\`\`" >> docs/index.md

Run MkDocs:

mkdocs build

Now you can see a site folder is created. Open site/index.html with your browser and you can see a simple page.

Configure GitHub Actions

Set up GitHub Actions workflow to generate the site and deploy to GitHub Pages automatically. Before deploying with Actions, you should adjust the settings of your repository. Go to Settings -> Pages.

Submitting Your Work

You should finish your work by September 6th. Since you have already opened a pull request, it is no longer necessary to submit anything.