GitQlient: Preparing the first version

In the last post I showed all the major widgets that forms GitQlient, at least in their original design. After a month and a half of intense work, I’ve made some significant changes in the UI but also in the functionality.

For the first version I wanted to improve the UI and make GitQlient as stable as possible. However, I couldn’t resist to add all the features that I was missing for my day to day work. So after this time GitQlient no only had the functionality I showed so far. Here is what it’s new and will be part of the version 1.0.0.

The next post: about the release and something else!

The new and original features of GitQlient

Major features

  • Multi-repository support: One of the biggest features (in implementation) was to add support to have multiple repositories opened at the same time.
  • Submodules: I also added support for opening, adding and updating the submodules in a repository. This was one of the features I wanted for further versions but, why not?
    • As a complement to this, I also added the feature of opening the submodules and interact with them as they where normal repositories. Thanks to the refactor!
  • Blame & History: I didn’t expect I could make it to have this feature in the v1.0.0 version but I pushed a bit for it. So, there is a whole new screen where you can review the history of a file and blame it. I’ll show it later.
  • I added my own QLogger as submodule and I’ve added some logs as well. It is also possible to disable it.

Minor features

  • The branches are shown in a tree structure, more easy to follow.
  • The old backend has been reworked in a 85%. There are some pending changes that will be done on the v2.0.0.
  • Diffs: Between files, between random commits, etc.
  • Patches: One functionality I didn’t think I needed but I considered that people may like it so, I took it back with some improvements: Multi-selection of commits to export them. Possibility of applying patches or import them.
  • Progress dialogs when cloning or opening really big repos. I make some tests and most of the times it won’t show at all for opening repos. Qt is so fast that it only takes ~250 msecs to open repos as Stellarium or Musescore. I want to test it with really big repos but I’ll do it at work.
  • I’ve reworked the UI for the tree view. Now I show graphic representation of merge commits (when one branch is merge into another) and what branch is what.
  • Automatic building process

Blame & History widget

The blame & history widget is a composition of two different but related behaviours. In the top-left part of the screen you have the history of commits for a specific file. In the bottom-left you have the file tree for the files that are part of the repository. There you can select them and view its history and how/when (- blame -) they where modified.

The right part of the screen is about blaming a file. You can find information about the changes, when and who did them. In addition, if you click on the log in this view, it will select the right commit in the history view. There is some visual facilitation for the blame. The shape of the colour close to the number of the line indicates how close or far is in time. Bright for old commits, dark for recent ones.

The History & Blame view
The History & Blame view

Pending improvements

The project just started and for that reason I still have a lot of things to do, but if you find any bug or problem, please report it to me via GitHub Issues. Pending improvements that I wouldn’t consider a bug (but is still nice to have them in the Issues page if you like) are:

  • Doxygen documentation for the header files
  • Improve the stash management in the UI
  • Modernization using C++17

I’d like, however, that in case you are missing Git functionality or options you open an issue in the GitHub as well. I’d like to see what other people use.

Future features

There some big functionalities I want to implement but they will require time:

  • Merges: I would like to provide a custom tool to handle the merges. Its a complicated task that I wish to facilitate as much as possible.
  • Diff: Better browsing for file diffs and full diffs.
  • Squash: Add squash commits functionality

Code and binaries of GitQlient

You can found the code on GitHub as well as the binaries.

Leave a Reply