There are common tools and concepts used in open source. Because this site is aimed at getting folks in to open source, it's occurred to me that a post to at least introduce you to related tools and give you a primer.
Of course, if you search individual for these tools, there'll be a lot better tool-specific write ups then I could ever do. But, this should act as a basic primer and launching pad to get started with these tools. At the end of each description, you'll find a source for more information.
git (version control)
git is a principle tool very commonly used in open source. There are other tools used, depending on the site used and the preference of the author but it's fair to say that
git is far and away the most popular right now.
There are several ways to install git but following are probably the most common.
- SourceTree (Windows & Mac OS X)
- GitKraken (Windows, Mac OS X & Linux)
- git cli (Windows[1:1], Mac OS X & Linux)
I'll cover basic usage in a fourth coming article but meanwhile, know that it exists and you'll likely need it to work with open source. (Although, do know that you can download and view open source without using git at all)
Github is a separate and distinct service from git although, the two almost always go hand in hand. There are alternative to github such as bitbucket.org and gitlab but I expect that most open source we explore on this site will be on github.
So, what is github? The service bills itself as social coding platform and I'd say they achieve that objective.
At its core, github is a place to publish your source code and then collaborate with others on it. They provide a few tools to facilitate this such as in-browser source code viewing, the wiki, the issues list and the concept of "pull requests". At it's core, all tools are designed to provide friendly, productive collaboration.
Unit testing is not a product but a software engineering concept. In open source, different users are making various changes to a given code base. One developer doesn't necessarily know the purpose, expected or possible input or the output of a given component (unit) of software and therefore could accidentally change it in a manor that introduces bugs elsewhere. These bugs may ever surface in manual testing because you'd need to know to look for them.
Unit tests help prevent this; they allow you to implement an automatic test to verify that a component works and more importantly, keeps working as intended.
Any time you are changing open source source code, you're going to be running these tests dozens and dozens of time. When I cover OSS for an article, I'll discuss running the associated tests.
Continuous Integration (CI)
Continuous Integration, like unit testing, is not a product but a software engineering concept. The high level purpose is to automate the process of taking the source code, compiling/building it[1:2], running the unit tests as well as others and providing a report to the author and team.
This occurs when a contributor (you) makes a change to the codebase and request the the author includes the contributed change in the main code base (pull request)
Similar to git, there is a dominate product in the github world called travis-ci. This product is "10000% free" for open source project with awesome integration with github. Therefore, it's quite ubiquitous.