I am in no way a github expert, but I can now navigate my way through it. How I use it depends on what it is I am wishing to do, which breaks down to 3 different ways. Note I mostly use windows so I use the github for windows app... At times I have used the github for MAC as well. As for Linux...
But in case this helps someone ... Otherwise sorry for going off topic
1) Just want to check out a library - I go up to github and use the download as zip file. You can then often use either unzip it your self or can use the Arduino Sketch->Include Library->Add zip file command to add it to Arduino...
2) I am interested in using a library and want to keep it up to date and/or know what has changed. I use the Clone or download button, choose download to desktop, which then hopefully brings up the Github for Windows and choose the location to put the library. If Arduino library I will often put it in the <arduino sketch>/libraries folder. If a Sketch, you can put anywhere. I often put it in <Arduino Sketch>/Github So I remember it is a github sketch...
From time to time, I then go to Arduino for windows and choose the project and do a Sync command, to get the latest stuff...
3) I am interested in making changes (Assumes you have an account on github). Note: If this is your own library, you do 2) Else ... Suppose I wish to make changes To Paul's version of Radiohead.
I navigate to it:
https://github.com/PaulStoffregen/RadioHead
Up toward the upper right of window is a button called fork, which you push. It will replicate the library into your account. So in my case:
https://github.com/KurtE/RadioHead
Then do like 2) and download with desktop (your version). You can now start making changes to the code. However if you are planing to have others pick up changes it is often best to create a new "branch" for the changes. In github for windows, you can click on the branch button (toward the upper left), near where the current branch is listed (probably master). You click on this, it gives you an option to create a new branch based on current branch. Enter new name. In my example "SPI-Transaction-support"
You can then make all of the changes you like (preferable one fix or feature), and you can push up your changes by viewing the changes and do a Commit, which saves your changes locally into current branch. You can push these changes up to your github project by using the Sync command... Repeat as many times until you are happy.
You can then issue a Pull request back to the Original library, by using the Pull Request button toward the upper right of the window. It should say make the request against: PaulStoffregen/RadioHead master. You can update the text associated with the request... Once happy issue the request.
Hopefully it will say congratulations... and then show a Pull Request number up toward the upper right. In my case #10. You can click on this button to see the request up on github. If Paul (or whoever the library owner is) takes your PR, you will typically receive an email. Also the library owner may put up comments or the like on the PR, which again you will get email. You can also update the comments up on github... Once the changes are incorporated into the master project, you can delete your working branch and sync up to the master...
How to sync master?
a) Github for windows now has a button like: Update from PaulStroffegen/master which you can use. It will bring in all of the changes from his Master branch (fork) and apply them to your Master branch. Which you commit and sync... Will show up with some delta like "update... " Don't remember the name as I don't typically do this...
b) I use a batch script file that can be dangerous, but gets my master branch back in sync with the Pauls master. Example below for cores. Note this relies on having "upstream" setup. How to do this?
https://help.github.com/articles/configuring-a-remote-for-a-fork/
My one to update the project "Cores" looks like:
Code:
cd \Users\Kurt\Documents\GitHub\Cores
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
cd %home%
Again this works for me, as I never make changes to the "master" branch, so I use the update --hard type options, which blasts away any changes in my Master branch to make mine identical in this case to Pauls master branch.
Again hope that helps.