Here's a collection of links about Git that I've found useful. I've been pretty involved in teaching people about version control recently and have used these resources to teach myself. If you want to see another link added, leave a comment or issue a merge request. I'll make sure you're credited on this post.
A fantastic first-run introduction to git. Covers just the basics. Completely interactive and all training takes place inside the browser.
I really love Codecademy, they have tons of free courses ranging from programming languages, to frameworks, to APIs, and now onto version control. A highly-interactive tutorial, just like Try GitHub, just a bit more in-depth. Highly recommended.
A great VERY in-depth tutorial for git. Covers lots of subjects, but is quite text-heavy. Relies on local git and having Ruby installed.
If you have a Linux Academy subscription, I highly recommend this git course. It walks you through Git, GitLab, and GitHub. From basic usage to management.
Another VERY in-depth book about git. Always up-to-date, but a bit dry. It isn't written in a tutorial-style, it's more of a tech book. Good for some people, bad for others. I use this site as a reference all the time.
If you learn from reading textbook examples and diagrams, Udemy has a course available for Git training as well. It's a bit wordy, but the content is solid.
A super-light cheat sheet for everyday git operations. If you want a simple
walkthrough of the most basic git commands, or just forget when to use
revert, check this page out.
An absolutely wonderful single-page reference. The information isn't too dense, and will be very helpful to those new to git who just need to remember a few commands or remember the syntax of something. Totally bookmark-toolbar-worthy.
Not a single-page reference by any stretch of the
imagination. This site has everything you could ever need.
Combine your favorite search engine and
site:http://www.git-scm.com/ for some truly stellar search
A lesson on why commit messages are the most important thing to get right when using git. Commit messages are your messages to the universe, important, meaningful, they stand on their own. Commit messages as art.
Who cares about commit messages? Seriously, no one cares. Put anything you want into them, the pull/merge request is what matters! Have the discussion, collect s and s, gather in-line code comments, and hash it out there. Anyway, the view is better from the merge request.
You should probably read both links above and make your decision. Software development and version control especially is not one-size-fits-all. Some shops will focus on the commit itself, others value the pull/merge request and attached discussion. Some shops are literally one guy and his side project that no one will ever look at so who the hell cares anyway? Do the research, try things out, pick the best method for you and your team.
Dubbed "Git Flow", this model is one of the biggest original git management workflows. I've used it for countless projects and it works pretty well. The only real downside is that it can be overbearing for smaller projects or teams.
A very simple Git Flow model, without the baggage. Companies without proper testing or CI integration should not use GitHub Flow. It really is suited for internet-based services and projects.
There's one rule: master is always production-ready and deployable.
The flow works like this:
And from there the process starts over.
GitLab flow is a teeny tiny bit more complex than GitHub flow, but is still quite simple compared to Git Flow. The only difference is that instead of a single master branch, you have different environment branches (with master being deployed to your staging or pre-production environment with every commit), while all development happens on master via pull/merge requests.
Here's how the flow breaks down:
This process ensures that all features are stage-gated through each environment, cutting down on potential problems or downtime.
GitLab Flow also has the concept of release branches, but those are only useful if you're releasing versioned software to the outside world. Check out the link to learn more.
If you have an interest in this kind of work, you'd better check out Semantic Versioning. It's a great way to version software and keep outside developers happy. Many open source projects are now using this system. It's way better than the old odd-numbered-dev-versions system.
I'm leaving GitHub for GitLab. All project references on this site have been changed to reflect their new home. All GitHub-hosted code gists have been replaced with locally-highlighted code snippets.
The reasons for this are three-fold:
I've been working for a while on re-doing my site. I've decided to move from Octopress to Jekyll for a variety of reasons. Octopress v2 had some well documented shortcomings, but it honestly was a fantastic intoduction to Jekyll and flat-file sites. I really love what Octopress is and how it introduced me to generating flat file sites, but I've outgrown it. I've moved fully to Jekyll, and as always you can grab all the source code here.
If you find any errors, bugs, or want to make something better, I do accept merge requests, so have at it.
You can find the talk materials and slides right here.
My latest mini-project involves deauth attacks of a portable nature. I give you, the Wifi Grenade. Just be warned, this talk is juvenile, script-kiddieish, and probably irresponsible. In this post, I'll show you how to build it.
To cover myself, I have to warn you of some things:
First, go shopping, you'll need some things (Amazon referral links below).
[$6] 8GB Micro SD Card
[$40] Anker 16000mah Battery
When you have all of your gear, let's get the OS installed:
I'm using Arch Linux ARM for my Pi, follow the instructions
get the base OS installed, then run your updates with
pacman -S scapy iw wireless_tools git to pull the required
tools and libraries.
git clone https://github.com/DanMcInerney/wifijammer
Next, we have to set an auto-login. Create
/firstname.lastname@example.org/override.conf with the
[Service] ExecStart= ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux
Next, we have to set the jammer to run on boot. The simplest way to do
this is with
.bashrc, modify the contents with the following:
exec /usr/bin/python2 /root/wifijammer/wifijammer.py -a 11:22:33:44:55:66
Now your system will boot directly into the root user and start the wifi
jammer. By default, the jammer is set to only jam 11:22:33:44:55:66.
Modify this script to specify which network you would like to jam.
-a, wifijammer.py will jam any and all networks it comes
across, be careful and only attack networks you are legally allowed to.
I've put up a document archive for all of the EFFs NSA documents. You can download the entire zip file in one click, no BS. I've signed it with my public key so you can verify it's legit. Head over this way for the details and mirroring instructions.