Software Tools

Git

Overview

Git is a distributed version control system. It can be used to save snapshots of a directory and all its contents, which is very useful when writing code. The distributed property means other computers can also keep their own snapshots of the same directory, enabling collaboration through merging code with other people’s and backups on remote servers. A great way to start is with a 15 minute interactive online tutorial called Try Git from GitHub and Code School. For further information on the concepts behind Git refer to Kai’s tutorial: Git Concepts.

Installation

Git is available for all common platforms through the official site. The official installer contains both the command line interface (great) and a graphical user interface (not so great). If you’re planning to use more command line tools then there are alternatives for the main OSs – see the section on Command Line Tools.

.gitignore

A common practice is adding all files to the staging area, but logs, databases and temporary files should be excluded. Placing the appropriate .gitignore file in the repository allows one to completely ignore certain files and file types from version control as necessary. GitHub provides a curated repository of these.

Services

All services that we use have limited storage capabilities. If you have large files you need to share, please use either Imperial College FileExchange or another file sharing service e.g. Dropbox, Google Drive, Box etc.

Bitbucket

Bitbucket is a remote git hosting service. As an academic team we are allowed to have unlimited members on our team and unlimited private repositories. Work undertaken as part of BICV should be held in a BICV-owned repository to allow collaboration and further work to be done after individuals/groups finish their own work. To be added to the team please sign up for a Bitbucket account and let Kai know your username.

HipChat

HipChat is a chat service provided by the same company behind Bitbucket, and can be accessed here. We are allowed to make unlimited public and private chat rooms, which makes it easier to collaborate on projects. Please be aware that the message logs of private chat rooms (but not 1-on-1 chats) are accessible by group admins. Additionally only the chat room creator and admins are allowed to change options in a room (via the three dots button). The basic plan does not allow video calls or screen sharing, and has a limited amount of file storage. One major advantage is integration with Bitbucket repos, which has notifications on pull requests, commits and issues (BICV repos must be added by an admin on Bitbucket, but personal repos can be added by their owner). Ask Kai for the link which will let you sign up and join the team.

Asana

Asana is a project management service, which allows us to create projects, create tasks, assign tasks, and much more. To be added to the team please sign up for an Asana account and let Kai know your email. There is a 15 person limit, so members will be removed as necessary.

Command Line Tools

NB: There may be some abuse of terminology for the sake of simplicity, but the practicalities should hold.

Windows

Windows comes with Command Prompt and PowerShell (these are command line interpreters), but the majority of people working on the command line use the Bash Unix shell or similar. Because the underlying environment and tools are quite different in Windows as opposed to OS X/Linux this can be problematic. The most popular way to get the Bash shell and various useful Unix tools is via Cygwin. Pre-built tools usually work well, but attempting to compile code from source may require significantly more substantial command line prowess.

OS X

OS X comes with Terminal, a terminal emulator that lets you utilise the Bash shell. However most of the useful tools are unavailable unless you install the Xcode Command Line Tools. The unofficial alternative (probably better if you don’t need Xcode) is the Homebrew package manager. Xcode and Homebrew generally co-exist fine if you need both.

Linux

Use your default (or not) package manager to install tools as necessary.