There are significant structural difference between Github Project & User Pages. Deployment and domain configuration can be complication, but I've streamlined the process with middleman-loaded. First a summary of the differences between Github Project & User Pages.

Project Pages

  • The url is something like: http://username.github.io/project-name (Troublesome)
  • You can have as many of these as your want
  • Generated site must be pushed to a 'gh-pages' branch (Awesome!)
  • Deploying is really easy

User Pages

  • the url is simply: http://username.github.io.
  • You can only have one of these per github account
  • Generated site must be pushed to 'master' branch (LAME!).
  • Deploying requires this blog post

Deploy Project Pages

Project Pages are simple so I'll cover that first.

Clone & Build

git clone git@github.com:dnajd/middleman-loaded.git my-project.com
cd my-project.com
bundle install

Git Work

Remove the git folder

rm -rf .git

Init a new git repo and add middleman-loaded as your upstream

git init .
git add .
git commit -m"forked middleman for github user pages"
git remote add upstream git@github.com:dnajd/middleman-loaded.git

Now browse to Github, manually create your repository and name it whatever you want.

Then add a remote & push 'origin master'

git remote add origin git@github.com:username/whatever-your-named-it.git
git push -u origin master

Configure Middleman

In the config.rb uncomment the deployment settings

# github project pages deploy
activate :deploy do |deploy|
    deploy.method = :git
    deploy.build_before = true # default: false
end

And remember to commit your changes

git add .
git commit -m"configured for deployment to github project pages"
git push

Deploy

bundle exec middleman deploy

Configure Custom Domain

Project pages are hosted under a url under your user (ex. http://username.github.io/my-project.com). This means path references and images will likely be broken. Pointing a custom domain at this fixes everything, but requires to DNS settings.

  • create a CNAME Record from: www.my-project.com to username.github.io
  • create an A Record for: my-project.com to ipaddress (dig username.github.io)

Deploy User Pages

User pages have their benefits, but deploying with middleman is a bit more complicated. Here are the steps.

Clone & Build

git clone git@github.com:dnajd/middleman-loaded.git username.github.io
bundle install

Git Work

Remember User Pages require the generated site to be in branch 'master'. To get our code into a branch called 'source', we'll first remove the .git folder

cd username.github.io
rm -rf .git

Init a new git repo with branch 'source'

git init .
git checkout -b source
git add .
git commit -m"forked middleman for github user pages"

Now browse to Github and manually create your repository. It must be named username.github.io.git, where the username is your github username.

Add a remote & push 'origin source'

git remote add origin git@github.com:username/username.github.io.git
git push -u origin source

Create 'origin master', push and the remove it locally (trust me).

git branch master
git push origin master
git branch -d

Configure Middleman

Uncomment the following in your config.rb and set the remote

# github deploy
activate :deploy do |deploy|
    deploy.method = :git
    deploy.build_before = true
    deploy.branch   = "master"
    deploy.remote   = "git@github.com:username/username.github.io.git"
end

Deploy

bundle exec middleman deploy

Browse

The best feature of User Pages are that they have a nice url. Browser to your new site with your username (ex. http://username.github.io)