The main purpose of this post is to introduce a basic workflow to collaborate on Gist.
First of all gists are nothing more than git repositories hosted at https://gist.github.com. They are typically used to share snippets of code, but can they can also be used to write live code examples, posts, and text-adventures.
In this post I will focus on how to manage forks and remotes to easily collaborate on a gist with your coworkers.
You need a basic knowledge of Git and to have it installed on your PC.
Follow this guide to set up Git: https://help.github.com/articles/set-up-git/.
Follow this guide to learn Git basics: http://git-scm.com/book/en/v2/Getting-Started-Git-Basics.
Gists are git repositories
A gist can be cloned as any other git repository using its clone URL.
Try cloning the example gist at https://gist.github.com/potomak/49832b4426a5f093037d by running
1 giovanni$ git clone firstname.lastname@example.org:/49832b4426a5f093037d.git hello-world
Now you can work on the gist as you would usually do with any other git
repository. For instance you can update the
hello-world.txt file, add it to
the staging area, and commit your changes.
1 2 3 4 giovanni$ cd hello-world giovanni$ echo "Foo" >> hello-world.txt giovanni$ git add hello-world.txt giovanni$ git commit -m "Update file"
If you run
git log you should see two commits:
- the initial commit I made to create the gist
- the second commit where I updated
1 2 3 giovanni$ git log --pretty=format:"%h - %an, %ar: %s" b24c6d3 - Giovanni Cappellotto, 5 minutes ago: Update file 0927aec - Giovanni Cappellotto, 41 minutes ago:
To write your changes into the hosted repository push your local
branch to the default
1 giovanni$ git push origin master
Note: after the push you can view the full list of commits also online at https://gist.github.com/potomak/49832b4426a5f093037d/revisions.
Forks and remotes
To collaborate on gists repositories your team mates can fork them.
As a different GitHub user you can fork the example gist, for instance https://gist.github.com/gmarenda/57c23d008b770b4904ba, clone it, and update it, following the steps:
1 2 3 4 5 giorgia$ git clone email@example.com:/57c23d008b770b4904ba.git hello-world giorgia$ cd hello-world giorgia$ echo " Bar" >> hello-world.txt giorgia$ git add hello-world.txt giorgia$ git commit -m "Update file from fork"
Doing so Giorgia updated
hello-world.txt and committed her changes on her
local repository, associated with the remote fork.
After her changes, the log on Giorgia’s local repository will look like this:
1 2 3 4 giorgia$ git log --pretty=format:"%h - %an, %ar: %s" e5a386d - Giorgia, 47 seconds ago: Update file from fork b24c6d3 - Giovanni Cappellotto, 48 minutes ago: Update file 0927aec - Giovanni Cappellotto, 84 minutes ago:
Now if she pushes her changes to the
1 giorgia$ git push origin master
I’ll be able to add her
origin remote as a new
gmarenda remote on my
repository to merge her
master branch with mine.
1 2 3 giovanni$ git remote add gmarenda firstname.lastname@example.org:/57c23d008b770b4904ba.git giovanni$ git fetch gmarenda giovanni$ git merge gmarenda/master
In the local repo now there are
- my changes from some time ago
- Giorgia’s new commit
has been merged from her
master branch, that has been taken from the
gmarenda remote based on her fork of the original gist.
Now I can push my updated
master branch to
origin to persist changes on the
1 giovanni$ git push origin master
The process is a little more manual than the one people are used to with pull requests from GitHub’s web interface, but I find it interesting and useful to use such a simple collaboration flow on Gist.