Giter Site home page Giter Site logo

francescmm / gitqlient Goto Github PK

View Code? Open in Web Editor NEW
831.0 26.0 84.0 10.71 MB

GitQlient: Multi-platform Git client written with Qt.

Home Page: https://www.francescmm.com

License: GNU Lesser General Public License v2.1

C++ 90.43% QMake 1.24% CSS 7.17% C 0.43% CMake 0.73%
qt5 git cpp git-client

gitqlient's Introduction

GitQlient logo

GitQlient: Multi-platform Git client written with Qt

Linux MacOS Windows

GitQlient, pronounced as git+client (/gɪtˈklaɪənt/) is a multi-platform Git client originally forked from QGit. Nowadays it goes beyond of just a fork and adds a lot of new functionality.

GitQlient main screen

Main features

Some of the major feature you can find are:

  1. Easy access to remote actions like: push, pull, submodules management and branches
  2. Branches management
  3. Tags and stashes management
  4. Submodules handling
  5. Allow to open several repositories in the same window
  6. Better visualization of the commits and the work in progress
  7. Better visualization of the repository view
  8. GitHub/GitLab integration
  9. Embedded text editor with syntax highlight for C++

For all the features take a look to the Release Notes in the Wiki.

User Manual

Please, if you have any doubts about how to use it or you just want to know all you can do with GitQlient, take a look to the user manual in here.

It is planned to release for Linux, MacOs and Windows. However, take into account that the development environment is based on Linux and it will be the first platform released.

Interactive UI guide (with code links)

I've set up a small (and ugly) webpage for those developers that want to get some help understanding the different parts of the UI of GitQlient and how they are connected with the C++ code.

The web shows the current UI design with links to the code of the widgets when you click on the areas of the image. The code is shown in a frame near to the image, so a 1920px screen might be needed. Since I'm not a web developer and I don't intend to dedicate too much time to that, I'll update the guide only with major releases. If anybody wants to make it pritier and knows how to do it, please contact me to see if we can collaborate.

Check the Interactive UI guide of GitQlient.

How to install GitQlient

Packaging status

Linux

AppImage

GitQlient is offered in the form of AppImage. Although a big binary, it includes all the libraries needed to run. It is a portable multi-OS version so just download the version you want from the releases page and execute it (make sure it has execution rights).

RPM package for Fedora

Package available in official Fedora repos. To install, type the following command in the terminal:

sudo dnf install gitqlient

DEB package for Ubuntu

For now there is no GitQlient in the official repos of Ubuntu or Debian (Ubuntu bug). However, to install it via .deb package, go to the releases page and download the package from the version you want. Once you download it, you can install it using apt-get command as root.

Windows

For Windows 10 there is a package provided on every release. It installs all the dependencies and creates an shortcut in the Desktop. From the releases page, download the GitQlientInstaller-.exe binary from the release you want to use.

MacOS

For MacOS there is also a DMG package you can install as usual. Take into account that because of lack of resources this version is not tested.

If the app appears damaged and can't be opened, run the following (see #234):

sudo xattr -rd com.apple.quarantine /Applications/gitqlient.app

MacPorts package

GitQlient is available in MacPorts. To install, type the following command in the terminal:

sudo port install gitqlient

Translating GitQlient

GitQlient is using the translation system of Qt. That means that for every new language two files are needed: .ts and .qm. The first one is the text translation and the second one is a compiled file that GitQlient will load.

To add a new translation, please generate those files and add them to the resources.qrc.

For more information on Qt translation system.

Building GitQlient

In the User Manual you can find a whole section about building GitQlient and what dependencies you need.

Licenses

Most of the icons on GitQlient are from Font Awesome. The license states is GPL friendly. Those icons that are not from Font Awesome are custom made icons.

The font used bt GitQlient is DejaVu Sans and DejaVu Sans Mono. It is a free font used by most of the Linux distros and its license can be found on GitHub.

gitqlient's People

Contributors

515hikaru avatar alexdewar avatar arabine avatar band-a-prend avatar coldnew avatar francescmm avatar harens avatar hartwork avatar hegjon avatar kakueeen avatar luzpaz avatar martindelille avatar mfurkanuslu avatar mslusarz avatar msumulong avatar mykhailo-maidan avatar orgads avatar pa-sowa avatar shuihuo avatar tim77 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gitqlient's Issues

Create UI for merge solving

Create a UI that allows the user to manage merges:

  • Show the conflicts of a merge and/or cherry-pick styled in the unstaged files list
  • Show the results of the merge in GitQlient in a different window
  • Create a new UI to allow the user to solve the issues

Allow navigation in blames

File blaming should be opened in a tab. It should show the starting commit where the files is being blamed. This is a pre-requirement for #34.

Qoverload

Hello,
I tried to compile it to OS/2 with Qtv5.13.1
But i get error when running make...

../app/AGitProcess.cpp: In constructor 'AGitProcess::AGitProcess(const QString&)':
../app/AGitProcess.cpp:102:18: error: 'qOverload' was not declared in this scope
connect(this, qOverload<int, QProcess::ExitStatus>(&AGitProcess::finished), this, &AGitProcess::onFinished,
^
../app/AGitProcess.cpp:102:28: error: expected primary-expression before 'int'
connect(this, qOverload<int, QProcess::ExitStatus>(&AGitProcess::finished), this, &AGitProcess::onFinished,
^
../app/AGitProcess.cpp:102:53: error: expected primary-expression before '>' token
connect(this, qOverload<int, QProcess::ExitStatus>(&AGitProcess::finished), this, &AGitProcess::onFinished,
^
make[1]: *** [debug/AGitProcess.obj] Error 1
make[1]: *** Waiting for unfinished jobs....
../app/ConfigWidget.cpp: In member function 'QWidget* ConfigWidget::createConfigWidget()':
../app/ConfigWidget.cpp:173:23: error: 'qOverload' was not declared in this scope
connect(mBtnGroup, qOverload(&QButtonGroup::buttonClicked), this, [this, stackedWidget](int index) {
^
../app/ConfigWidget.cpp:173:33: error: expected primary-expression before 'int'
connect(mBtnGroup, qOverload(&QButtonGroup::buttonClicked), this, [this, stackedWidget](int index) {
^
make[1]: *** [debug/ConfigWidget.obj] Error 1
make[1]: Leaving directory `E:/qt5-src/gitqlient/os2-debug'
make: *** [debug] Error 2

Any thoughts ???

Can this run on Win 10?

Hey there, huge fan of this repo. My prayers for a good linux git client have been answered! (plus qt to boot ;) )
One of my co-workers is currently using Win10. Is it possible to build this on Windows 10?

Thanks!

Amending a commit doesn't work

There is a problem parsing the title and the description when amending a commit. For that reason the amend action doesn't happen.

Errors on compiling

I have the last version of qlogger but on compile I get that:

QLogger/QLogger.cpp:73:113: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘const QVector<QVariant>&’
   73 |           { message, static_cast<int>(level), QDateTime::currentDateTime().toString("dd-MM-yyyy hh:mm:ss.zzz") });
      |                                                                                                                 ^
In file included from QLogger/QLogger.cpp:1:
QLogger/QLogger.h:241:69: note:   initializing argument 2 of ‘void QLogger::QLoggerManager::queueMessage(QString, const QVector<QVariant>&)’
  241 |    void queueMessage(const QString module, const QVector<QVariant> &logData);
      |                                            ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
QLogger/QLogger.cpp: In member function ‘void QLogger::QLoggerManager::writeAndDequeueMessages(const QString&)’:
QLogger/QLogger.cpp:175:44: error: invalid use of incomplete type ‘class QVector<QVariant>’
  175 |          const auto message = element.value().at(0).toString();
      |                               ~~~~~~~~~~~~~^~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1204,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qiterator.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: note: declaration of ‘class QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
QLogger/QLogger.cpp:176:64: error: invalid use of incomplete type ‘class QVector<QVariant>’
  176 |          const auto level = static_cast<LogLevel>(element.value().at(1).toInt());
      |                                                   ~~~~~~~~~~~~~^~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1204,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qiterator.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: note: declaration of ‘class QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
QLogger/QLogger.cpp:177:39: error: invalid use of incomplete type ‘class QVector<QVariant>’
  177 |          const auto dt = element.value().at(2).toString();
      |                          ~~~~~~~~~~~~~^~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1204,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qiterator.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: note: declaration of ‘class QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h: In instantiation of ‘struct QMapNode<QString, QVector<QVariant> >’:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:422:51:   required from ‘const Key& QMap<K, V>::iterator::key() const [with Key = QString; T = QVector<QVariant>]’
QLogger/QLogger.cpp:171:39:   required from here
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:113:7: error: ‘QMapNode<Key, T>::value’ has incomplete type
  113 |     T value;
      |       ^~~~~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1204,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qiterator.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: note: declaration of ‘class QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h: In instantiation of ‘class QTypeInfo<QVector<QVariant> >’:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:129:79:   required from ‘void QMapNode<Key, T>::destroySubTree() [with Key = QString; T = QVector<QVariant>]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:248:13:   required from ‘void QMapData<Key, T>::destroy() [with Key = QString; T = QVector<QVariant>]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:339:43:   required from ‘QMap<K, V>::~QMap() [with Key = QString; T = QVector<QVariant>]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:1187:7:   required from here
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: error: invalid application of ‘sizeof’ to incomplete type ‘QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: error: invalid application of ‘sizeof’ to incomplete type ‘QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h: In instantiation of ‘QMapData<Key, T>::Node* QMapData<Key, T>::createNode(const Key&, const T&, QMapData<Key, T>::Node*, bool) [with Key = QString; T = QVector<QVariant>; QMapData<Key, T>::Node = QMapNode<QString, QVector<QVariant> >]’:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:811:11:   required from ‘QMap<K, V>::iterator QMap<K, V>::insertMulti(const Key&, const T&) [with Key = QString; T = QVector<QVariant>]’
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:1207:39:   required from ‘typename QMap<K, V>::iterator QMultiMap<K, V>::insert(const Key&, const T&) [with Key = QString; T = QVector<QVariant>; typename QMap<K, V>::iterator = QMap<QString, QVector<QVariant> >::iterator]’
QLogger/QLogger.cpp:160:45:   required from here
/usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:230:17: error: invalid use of incomplete type ‘class QVector<QVariant>’
  230 |                 new (&n->value) T(v);
      |                 ^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1204,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qiterator.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qmap.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QMap:1,
                 from QLogger/QLogger.h:36,
                 from QLogger/QLogger.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qtypeinfo.h:193:1: note: declaration of ‘class QVector<QVariant>’
  193 | Q_DECLARE_MOVABLE_CONTAINER(QVector);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:1442: QLogger.o] Error 1

Ability to select mulitple files from a commit to queue for diff

I noticed you have this awesome feature where each file selected to diff will appear on the diff page so that one can select back and forth between them. But in order to put a bunch of files on there, you need to go back and forth between repoview and diff view. Should be able to use shift or control to select multiple files to diff.

If need more clarity on the issue, see https://youtu.be/4hLlQzepAlg?t=413 (6 min 53 seconds, if that link does not deliver you to the right place)

Create User Manual

Right now there is a lot of undocumented features and functionality that should be known.

Provide a project-base Git config UI

Right now, GitQlient asks for Git config only if global Git config is not present.

The configuration should be editable at any moment for each repository.

Unify RevisionsCache

Merge the path cache management into the RevisionsCache and unify the way of accessing it

Modify UI for stage files

Right now a click over the item in the unstaged files list adds the file to the staged files list. There is no behaviour implemented for the double click.

This is counter-intuitive since the double click opens the diff in the tree view of the repository.

Change to implement

  • To remove the click behaviour and keep it only to select a file.
  • Implement double click to open the file diff.
  • Add context menu option to add the file into the staged list.
  • Add an add button in the unstaged and untracked lists to add the files to the staged list.
  • Add a remove button in the staged list to return the files to its original list.

Problem with loading plugin with QtCreator 4.11 on macOS

I've downloaded plugin for QtCreator 4.11 (libGitQlientPlugin_1.0.0-qtc4.11.x.dylib), but it actually needs some components of version 4.10:

Could not resolve dependency 'Core(4.10.0)'
Could not resolve dependency 'ProjectExplorer(4.10.0)'

Split Git class in different scopes

The Git class right now holds all the Git methods from all scopes. For readability and extensibility purposes it should be divided in different scopes.

Browse the file diff

Add functionality so the user can browse through the full diff between two commits:

  • Jump between modified lines
  • Search in the diff

Add context menu in the blame history log

Add the following options into the blame history log:

  • Copy SHA
  • View file diff (only between the selected commit and the previous one in history)

The "view file diff" action should be triggered when double click on the row as well.

Support for folder as parameter

I created a desktop file but seems that qgitclient doesn't accept as first parameter the folder to open with this tool.

[Desktop Entry]
Type=Service
Encoding=UTF-8
Actions=OpenWithQGitClient
ServiceTypes=KonqPopupMenu/Plugin,inode/directory
ExcludeServiceTypes=kdedevice/*

[Desktop Action OpenWithQGitClient]
Name=Open with QGitCLient
Exec=/path/GitQlient/GitQlient %d

Build errors

Building GitQlient on a Windows machine with Qt 5.12.2 with MinGW (GCC 7.3) cuases the following build error:

g++ -c -fno-keep-inline-dllexport -Werror -O2 -std=gnu++1z -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I. -IQLogger -I..\Qt\5.12.2\mingw73_32\include -I..\Qt\5.12.2\mingw73_32\include\QtWidgets -I..\Qt\5.12.2\mingw73_32\include\QtGui -I..\Qt\5.12.2\mingw73_32\include\QtANGLE -I..\Qt\5.12.2\mingw73_32\include\QtCore -Irelease -I. -I..\Qt\5.12.2\mingw73_32\mkspecs\win32-g++ -o release\namespace_def.o namespace_def.cpp namespace_def.cpp: In function 'bool QGit::writeToFile(const QString&, const QString&, bool)': namespace_def.cpp:113:75: error: unused parameter 'setExecutable' [-Werror=unused-parameter] bool QGit::writeToFile(const QString &fileName, const QString &data, bool setExecutable) ^~~~~~~~~~~~~ namespace_def.cpp: In function 'bool QGit::writeToFile(const QString&, const QByteArray&, bool)': namespace_def.cpp:137:78: error: unused parameter 'setExecutable' [-Werror=unused-parameter] bool QGit::writeToFile(const QString &fileName, const QByteArray &data, bool setExecutable) ^~~~~~~~~~~~~

Handle Differently named remote repos

If remote repo is not named origin, top right box shows "fatal:ambiguous".

Only two examples right now, but I have one repo where I have named the remote "github" that one shows fatal:ambiguous. I have another repo where it's named origin and I can correctly see the great data you're surfacing of how many commits ahead a particular branch is.

Browse the full commit diff

Add functionality so the user can browse through the full diff between two commits:

  • Jump between modified files
  • Search in the diff

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.