This is so you can have an idea of what you can expect from a GUI git client. I, personally, prefer the command-line; however, there are times where GUIs can be extremely useful for more complicated stuff. In addition to standalone apps, many IDEs have tools that interact with the repository that your files are in. IDEs will typically have support for other version control systems such as SVN and Mercurial as well. Follow our complete Git series here.

3rd-Party GUIs For Git

gitg

gitg, the simple GNOME program allows you to view commits, branches, remote areas, stashed changes. You can make and edit commits, add and remove files in a repository, and view changes in each commit. This does everything you typically do with a git repo. You can view commits from a single branch, remote repo, stash, whose branches are graphically represented: Committing is as simple as going to the commit button, staging changes (‘git add’), and hit ‘commit’. It will bring up a dialog where you can put your commit message in.

git-cola

Git-cola will help you interact with your repository, and manage changes so you can stage them. As soon as there are any changes in the repo, they will display in git-cola under the “Modified” section in the Status box. Staged changes will be under “Staged” in the Status box. Git-cola has utilities for managing branches, pushing and pulling changes, exporting to archives (tarball or zip), stashing changes, and viewing differences between commits. In the commit section, you simply write a commit title in the text field that says “Commit Summary”. Underneath that is where you write the full description. The interface itself can be a little confusing at first. For example, the action section has buttons for important functions in a git repository, such as push and pull, fetch, stash, staging, and upstaging, and refreshing the repository. I had to enable this under the “View” menu. Also, when exporting a repo to an archive, in the dialog, a button to the left of the file name input field is to open a file dialog. This isn’t really obvious in the screenshot below:

SmartGit

Doing a Google search on GUIs for git will point you to a program called SmartGit. This is a proprietary product; however, it is free for personal, non-commercial use. In addition to Linux, this is also available for Windows and macOS. Tools for file comparison, merge handling and commit history are included. Also, an SSH-client is included as well. You can even customize the user interface, how you merge and rebase, work with systems like BitBucket, GitHub, as well as your own humble setup.​Once you have installed and launched the program, it will bring up how you wish to use this program (30-day trial, purchase the software, or free for personal use). It even details what is classified as commercial use. After that, you can then continue the setup process for SmartGit: registration, where the git executable is, user information, SSH settings, hosts, and privacy.​On the main screen, you will have notices presented at the bottom-right corner of the screen. One notice I got was about garbage collection. It stated that while this was beneficial for command-line git, it could pose problems for GUIs such as SmartGit. This was something I didn’t get out of the other two GUIs. Also in the main interface, you can see the list of commits made under “Journal”, a list of branches and stashes, and files with changes not yet committed. You can also see a list of other repositories you have in the parent directory of the current repository.​Of course, you are able to do push, pull, stage, unstage, like you can with gitg and git-cola. Even though it’s proprietary, it is still worth checking out for the cool features it offers.

IDE Tools

Many IDEs have support for interacting with version control systems, like Git, with tools to push, pull, stage, commit, etc. Android Studio, NetBeans IDE, and several others have Git support built-in. Typically, such IDEs will also support other VCS programs including subversion (svn), and mercurial.

How It Tracks Files

The IDE will know automatically whether a file opened is in a repository. It can tell what has been modified, what files were newly added, which ones are not being tracked, and can access the previous versions of files. In open files tab, the text color changes depending on what it finds out about the file according to git. There is a typical color code. File names that show as a normal color (black or otherwise) indicate that it’s part of the repository and there are no changes. File names in blue indicate that there are changes not yet committed. Green file names show that the file has been newly added to the tracker, but not yet committed. The bright red text indicated a merge conflict that needs a resolution. Maroon/brown text shows that a file is untracked. Grey names show that it’s specified in a .gitignore file either explicitly or through a wildcard. ​You can also make commits and do general repo management using built-in tools as well. You are also able to view previous versions of a file and compare them to the current version (diff) to see how many changes were made since.

Conclusion

​These are just a few examples of the GUIs available and examples of IDE support for projects in a repository. There are numerous others, so please have a look for them. I will dedicate the next guide to demonstrating the many command-line options of git, including rebase.