Learning Git and Github
This is a setup to practice git and Github. At the end there is a Git crash course.
It requires the following:
- Two Github accounts.
- Two computers in the same network or a computer and a remote server.
- A static website.
Static Website Platform
For this Git/Github learning lab I am using a static website platform. Here is a tutorial to install a static website with Python.
The static website uses Github pages. The goal is to have an interaction with two github accounts. Use a development environment to write the blog posts and create pull requests. Then a server environment to approve requests and update the website.
Two Github Accounts
For this setup I have two computers in the same network.
Server
- I use it as a server to approve requests and update the website.
- Setup with my Main Github account.
- It has the static website platform installed.
Development
- I use it as development to write the blog posts and create pull requests.
- Setup with my 2nd Github account.
- Forked repo from Main Github account.
Writing blog posts in Development
I created a new branch called newposts
.
- Write/update the blog posts
- Push to forked repo on the 2nd Github account.
First, check status:
$ git status
If new changes were made on the server, then sync the forked repo. As seen on installing a static website with Python. Follow the section “Fork and sync a local with a remote repo.”
$ git fetch upstream
$ git checkout master
$ git merge upstream/master
As seen here. To merge master
with newposts
:
$ git checkout newposts
$ git merge master
Resolve conflicts then commit:
$ git commit -m "merged master"
Then add and push the commits
$ git add .
$ git commit -m "new blog post draft"
$ git push -u origin newposts
Error on Git push
You might get this error if there are conflicts
! [rejected] newposts -> newposts (fetch first)
error: failed to push some refs to 'https://github.com/...
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Create a pull request (2nd Github account)
Login to the 2nd Github account:
- Navigate to the original repo on Main Github account.
- Create a pull request.
Using this format with no comments added:
[newpost] name of the blog post
Merge pull request (Main Github account)
Login to the Main Github account:
- Go to the repo.
- Review if a pull request was sent.
- If there are no conflicts, merge the commit into master.
SSH to from Development to Server
This is how I remote access Linux.
From my Local computer, I SSH into my LAN server using the server’s IP address.
$ ssh server-IP
I attach to my Server tmux environment:
(server)$ tmuxinator tom
Using already a Local tmux, inside Server tmux I have to use the prefix twice Ctrl+a Ctrl+a
before any binding.
Then I pull the changes and publish the blog.
(server)$ git pull
(server)$ make html && make publish
Publishing the blog in Server
Once I generate the static pages, I just follow my usual process. Push the HTML output.
(server)$ cd output
(server)$ git add .
(server)$ git commit -m "new post"
(server)$ git push -u origin master
Then push the source.
(server)$ cd ..
(server)$ git add .
(server)$ git commit -m "new post"
(server)$ git push -u origin master
Exit server
When the website is published into Github pages. Detach from tmux Ctrl+a Ctrl+a + D
.
Then exit:
(server)$ exit
$