Fish Lake the game is not a small project and neither is Spirit Lake. The amount of work done on the game is amazing especially since there were only two developers working on it. Now that there are more people working on the game, collaborating on the project can get complicated. There are many ways to share the project with new developers but they can make it very hard to stay organized and not write over someone else’s work. The tool we use to share the project is Git.
Git is a version control system that allows us to work on a project so that we are able to keep a central copy of the combined work that everyone puts in. If we shared all of our work through email, it would be easy to lose track of which file needs to be changed specially if there are different people submitting their files. This also causes issues because it is possible that two people are working on the same file. If two versions of the same file are turned in, it is very hard to distinguish which file should be used. It’s possible they need to be combined and that means whoever is receiving the files must manually combine the work, which as you can imagine, is not very productive.
Another method is to upload to a shared file which makes it a little easier for people to submit their work. For example, by submitting work directly to a Google drive account or a Dropbox account, it makes it easier for people to upload their work to the project. All though this makes things a bit easier it does have problems. If one person updates a file in the project and then a different person updates the same file, they overwrite all the work that the previous person did. To solve this, the two files would have to be compared for differences and then combined into one file to update the project. If the files were not combined and the previous person’s work was not saved outside of the shared account then that work is lost.
Git solves most of these problems and adds extra functionality specifically for developers working on large projects. Git puts your whole project in a single repository which is like a shared file. People who you share the repository with can then upload their work directly to the project. One of the great things about Git is that it will not just overwrite someone else’s work. If a file is pushed (the Git term for uploaded) Git will take a snapshot of the file (called a commit) and check for conflicts between the two files. If two people push the same file to the repository there are bound to be issues, but Git solves this by finding the differences in the files and reporting them (called a merge conflict). It makes it easier to just check the specific differences and then deciding which pieces should be kept. In case there is a change in the repository that breaks the whole project, Git allows you to go through previous commits and check which one specifically breaks the project; however this is a more advanced topic.
Git is a terrific program and very easy to learn, but can be hard to master as there are a lot of commands for advanced users. Here I covered the basics of how Git makes it easy for us at 7 Generation Games to keep rolling out updates to the project. Git makes it easy for us to develop a Game that makes kids want to do math while having fun at the same time. I’m very happy to be able to contribute to this project and encourage everyone to try out our game, we have a demo which you can download here.
All of this is true and it is funny because when Dennis suggested it I thought it was just one more layer of complexity we didn’t need. We were running up against tight deadlines and how hard could it be to coordinate two people who were in the same building. After the second or third time someone’s code got copied over, I gave in and now I cannot imagine how we ever lived without it. Of course, now that we have more people working on the project, it is essential.