Coder Social home page Coder Social logo

qgit's Introduction

qgit, a git GUI viewer

With qgit you will be able to browse revisions history, view patch content and changed files, graphically following different development branches.

Bugs or feature requests should be sent to the [email protected] mailing list.

Main features

  • View revisions, diffs, files history, files annotation, archive tree.

  • Commit changes visually cherry picking modified files.

  • Apply or save patch series from selected commits, drag and drop commits between two instances of qgit.

  • Associate commands sequences, scripts and anything else executable to a custom action. Actions can be run from menu and corresponding output is grabbed by a terminal window.

  • qgit implements a GUI for the most common StGIT commands like push/pop and apply/save patches. You can also create new patches or refresh current top one using the same semantics of git commit, i.e. cherry picking single modified files.

Installation

You need Qt developer libraries, version 5.11.0 or later, already installed. Be sure compiler, qmake (Qt5 version) and Qt5 bin tools are in path.

Note
Correct qmake for Qt5 (/usr/lib/qt5/bin/qmake) must be called, in case also Qt4 version is in path the former must be explicitly invoked.

To compile, install and start qgit:

  • unpack the released tar file or clone from a git public archive

  • (Windows only) open src/src.pro and set the proper GIT_EXEC_DIR value

  • generate Makefiles (only the first time) Unix/Linux and Windows: qmake qgit.pro Mac Os X: qmake -spec macx-clang qgit.pro

  • (Windows only with VC2008 IDE) open qgit.sln solution file

  • make

  • make install

  • (Windows only) run start_qgit.bat to start the application. You can also create a a desktop icon linked to start_qgit.bat and double click on it.

Installation directory is ~/bin under MacOS, QT_INSTALL_BINS (location of Qt binaries) under Linux and the directory of git exe files under Windows.

You need to run qmake qgit.pro only the first time to generate Makefile files, then you simply call make and make install. You may need to run qmake qgit.pro again only after patches that modify qgit.pro or src/src.pro files or in case of strange compile errors.

Remember to manually delete all Makefile* files in src/ directory before to start qmake qgit.pro.

Performance tweaks

A git log command is used to load the repository at startup or when refreshing. This is an highly performance critical task. Default method is based on a temporary file as data exchange facility. This is the fastest on Linux with a tmpfs filesystem mounted under /tmp, as is common with most distributions. In case of portability issues it is possible to fallback on a standard QProcess based interface. To do this uncomment USE_QPROCESS define in src/dataloader.h before to compile.

Command line arguments

Run qgit from a git working directory, command line arguments are filtered by git log. Some examples:

qgit --no-merges
qgit v2.6.18.. include/scsi drivers/scsi
qgit --since="2 weeks ago" -- kernel/
qgit -r --name-status release..test

If qgit is launched without arguments or if you change archive with open menu, a dialog for range select is shown. You can select top and bottom rev tags from the list or paste a specific revision. Values are passed to git log to narrow data loading to chosen revisions.

As a special command-line argument, --view-file foo or --view-file=foo is not passed to git log, but opens the file foo in the QGit file viewer, showing the history and the annotated (blame) view for the file.

Main view

You can navigate through logs, file names, file history, archive tree. All the views will be updated accordingly.

Copy/paste is supported on all fields. Copy (CTRL+C) is supported on all views.

All the references found recursively under .git/refs/ directory are highlighted according to their type: current branch(HEAD), branch, tag, other. Reference names and any associated messages can be viewed in status bar when a tagged revision is selected.

When you right click on main view a context sensitive pop-up menu is shows available commands and a quick jump tag list.

Key bindings

r

Go to revisions list page

p

Go to patch page

f

Go to file page

<Alt+wheel>

Go to next/previous page

t

Toggle tree view

s

Toggle view of secondary panes

h

Toggle view of revision header

<Home>

Move to first revision

<End>

Move to last revision

i

Move up one revision in main view (global scope)

n, k

Move down one revision in main view (global scope)

<Shift-Up>

Move to previous highlighted line

<Shift-Down>

Move to next highlighted line

<Left>

Go back in history list

<Right>

Go forward in history list

<CTRL-plus>

Increase font size

<CTRL-minus>

Decrease font size

<Delete>, b

Scroll content up one page

<Backspace>

Scroll content up one page

<Space>

Scroll content down one page

u

Scroll content up 18 lines

d

Scroll content down 18 lines

Directory tree

From menu or toolbar button it is possible to show a side panel with tree view of repository files and directories.

Double clicking on a file opens file annotation window. With filter by tree button it is possible to compress revision list to show only selected files/directories in tree view.

Tree view supports multi-selection. When you right click on a file on tree view a context sensitive pop-up menu is shows with available commands.

Working directory changes

When Check working dir flag is set, as example from main view context pop-up menu, a pseudo-revision is shown and highlighted at the top of the list. Highlight and revision name reflect current working directory status: Nothing to commit or Working directory changes respectively.

To check for working directory modified files set corresponding preference in Edit→Settings→'Working dir'. QGit checks for possible new files added in working directory using ignoring rules according to git ls-files specifications, see menu Edit→Settings→'Working dir'.

Tip
If you don’t need to see modified files in working dir, disable corresponding setting and start-up time will be shorter.
Lane info

Selecting a lane with mouse right button will display a pop-up with the list of children and parent. Select one and you jump to it.

Filter / Highlight

Use the combo box to select where you want to filter or highlight on. Currently supported fields are: log header, log message, revision author, revision SHA1, file name and patch content.

Write a filter string, press filter button and the view will update showing only commits that contain the filter string, case insensitive. Toggle filter button to release the filter.

Alternatively press the magnifying glass button, in this case matched lines will be highlighted, you can use <Shift-Up> and <Shift-Down> keys to browse them. Toggle the button to remove the highlighting.

Note
In case of patch content regexp filtering, the given string is interpreted as a POSIX regular expression, not as a simple substring.
Tip
Very useful to quick retrieve a sha writing only first 3-4 digits and filtering / highlighting on revision sha. The sha value can then be copied from SHA field.
Tip
It is possible to insert an abbreviated sha directly in the SHA line edit at the top right of the window. After pressing enter this will trigger an higlighting of the matched revisions. It is a kind of shortcut of the previous tip.
Save patch series

After mouse selecting the chosen revisions (use standard CTRL+left click) for single select or SHIFT+left click for range select), press Save Patch button or use file menu and a dialog will let you choose patches destination directory. Then git format-patch-script will be called and patches created. It is possible to specify additional options with Edit→Settings menu.

Apply patch

This menu entry is complementary to save patch and it’s an interface to git am.

Drag and drop

It is possible to drag some selected revs from one instance of qgit to another open on a different archive. In this case git format-patch is used in the dragging archive to create temporary patches imported in the dropping archive by git am.

Make branch

Select a revision and open Edit→'Make Branch' or use right click context pop-up menu. A dialog will be shown asking for a branch name.

Make tag

Select a revision and open Edit→'Make Tag' or use right click context pop-up menu. Two dialogs will be shown, the first asking for a tag name, the second for a tag message (not mandatory). If a non empty message is written, this will be saved together with the tag. Tags and tag messages can be viewed in status bar when a tagged revision is selected.

Delete tag

Select a tagged revision and open Edit→'Delete Tag' or use right click context pop-up menu. After confirmation the selected revision will be untagged.

Save file

Select a file from tree or file list and open File→'Save file as' or use the tree view context sensitive pop-up menu (right click), a dialog will be shown asking for a file name (default to current) and destination directory. Input a valid name, press OK and the file will be saved.

Commit changes

When enabled with Edit→Settings→'Working dir'→'Diff against working dir' and there is something committable, a special highlighted first revision is shown, with the status of the archive and the possible pending stuff. From Edit→Commit it is then possible to invoke the commit dialog.

In commit dialog select the files to commit or, simply, to sync with index (call git update-index on them). A proper commit message may be entered and, after confirmation, changes are committed and a new revision is created.

It is also possible to amend last commit. The Edit→Amend commit opens the same dialog, but changes are added to the head commit instead of creating new commit.

The core commit function is performed by git commit.

Tip
It is possible to use a template for commit message, use Edit→Settings→Commit to define template file path.

Patch viewer

To open patch tab use context menu, double click on a revision or file in main view or select View→'View patch' menu (CTRL+P). The patch shown is the diff of current selected commit against:

  • Parent (default)

  • HEAD

  • Selected SHA or reference name

In the last case SHA is chosen by writing or pasting a tree-ish or a reference names in the corresponding field and pressing return. You get the same result also with a CTRL+right click on a revision in main list. Selected target will be highlighted. CTRL+right click again on the highlighted revision to release the filter.

With the filter button at the right of the tool bar it is possible to toggle the display of removed code lines. This can be useful to easy reading of the patch.

External diff tool

From View→External diff it is possible to invoke an external diff tool, as example to view the diffs in a two vertical tiled windows.

External diff tool shows the diffs between two files. First file is the current selected file of current revision. Second file is the same file of the parent revision or of a specific revision if diff to sha feature is enabled (diff target is highlighted, see above).

Default external viewer is kompare, but it is possible to set a preferred one from Edit→Settings→External Diff Tool.

File viewer

It is possible to view file contents of any file at any revision time in history.

File list panel

In the bottom right of main view a list of files modified by current revision is shown. Selecting a file name will update the patch view to center on the file. File names colors use the following convention

  • black for modified files

  • green for new files

  • red for removed files

  • dark blue for renamed/copied files

Merge files

In case of merges the groups of files corresponding to each merge parent are separated by two empty lines.

In case of merges you can chose between to see all the merge files or only the interesting ones (default), i.e. the files modified by more then one merge parent.

File content

To view file content double click on a file name in tree view, or use context menu in file list or select View→'View file' menu (CTRL+A).

In file view page will be shown current revision’s file content and file history.

It is possible to copy to the clipboard the selected content with CTRL+C or with the corresponding button.

File annotations

On opening or updating file viewer, file history will be retrieved from archive together with file content. Annotations are then calculated in background and the view is updated when ready.

Double clicking on an annotation index number will update history list to point to corresponding revision.

Hovering the mouse over an annotation index will show a tool tip with the corresponding revision description.

File content will change too, to show new selected revision file. To keep the same view content after double clicking, probably what you want, just pin it with Pin view check button. Next to the check button there is a spinbox to show/select the current revision number.

Double click on history list entry to update main, patch and tree views to corresponding revision.

Code region filter

When annotation info is available the filter button is enabled and it is possible to mouse select a region of file content. Then, when pressing the filter button, only revisions that modify the selected region will be visible. Selected code region is highlighted and a shrunken history is shown. Filter button is a toggle button, so just press it again to release the filter.

Syntax highlighter

If GNU Source-highlight (http://www.gnu.org/software/src-highlite/) is installed and in PATH then it is possible to toggle source code highlight pressing the Color text tool button. Please refer to Source-highlight site for the list of supported languages and additional documentation.

Actions

Actions can be added/removed using a dedicated dialog invoked from Actions→Setup actions…​ menu. Actions can be activated clicking on their name from the Actions menu.

Each action can be associated to a list of any type of git or shell commands or to an external script.

While an action is running a terminal window is shown to display the corresponding output.

An action can also ask for command line arguments before to run so to allow for maximum flexibility.

Note
command line arguments are always appended to the first command only. This lets you define an action like:
git fetch
git merge

And if you type origin when prompted, the action executed will be:

git fetch origin
git merge

If you need a more complex arguments passing with a shell like notation define a script and associate your action to it.

Integration with StGIT

When a StGIT stack is found on top of a git archive, qgit transparently handles the added information.

Integration with StGIT is implemented both by new and modified functions.

New functions are automatically activated:
  • Visualization of applied and unapplied patches in main view.

  • Interface to push/pop patches by a mouse right click on selected items. Push supports also multi-selection.

Existing functions change behavior:
  • Amend commit dialog refreshes top stack patch with modified files instead of amending the commit. It is appropriately renamed in the menu.

  • Commit dialog creates a new patch on the top of the stack filled with modified working directory content instead of commit a new revision to git repository.

  • Apply patch changes to interface StGIT import and fold commands instead of applying patch directly on the git repository.

qgit's People

Contributors

a17r avatar andyparkins avatar brentr avatar cyp avatar filiperinaldi avatar giddie avatar hartwork avatar hkarel avatar jmckaskill avatar kkofler avatar kumbayo avatar marcows avatar mcostalba avatar muffato avatar mvf avatar mwoehlke avatar placasse avatar rhaschke avatar scalm avatar shalokshalom avatar speachy avatar tibirna avatar timblechmann avatar tosky avatar vvch avatar wickedsmoke avatar yaph avatar yaslama avatar yuyichao avatar zaneb 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

qgit's Issues

Add "Navigate" menu

There are hidden actions "Previous", "Next", "Previous Marked" and "Next Marked" that are not shown anywhere in the main app. menus, although they are quite useful.

TODO: Add a "Navigate" menu and add in it explicit items for "Previous", "Next", "Previous Marked" and "Next Marked". Also, move the "Back" and "Forward" actions from "View" menu to the new "Navigate" menu, where they will make more sense.

How to use with custom diff commands?

Sorry if this sounds like a question and not an issue, but maybe it could results in an updated documentation or some new feature.

I have a couple of custom diff commands (e.g. using word-diff and special diff-commands for .tex files) defined in ~/.gitconfig. How can I use them in qgit?

[alias]
    wdiff = diff --color-words --word-diff --patience

Git hook output shown as errors irrespectively of the exit code

Submitted by Andrey Rahmatullin on 2016-03-27.
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=791484

“"”
I have a local pre-commit hook set up to run some stuff right before the actual commit. This works just
fine when committing on the command-line. However, when I commit in QGit, it pops up a message saying
that there was an error committing and showing the output of the pre-commit hook. There was no error,
the exit code of everything is 0 when I run this on the CLI. QGit should thus not say anything about
errors, and it should re-load the commit log to show the new commit.
“"”

The "Diff" tab is focused every time that I refresh the view

Whenever I refresh the current view, the application focuses the Diff tab instead of the Log tab, which is the one that I had focused before the refresh.

It doesn't matter whether I refresh the view using the File -> Refresh option or if I hit the F5 button. The result is the same.

If the behaviour described here is intentional, I think that it's inconsistent. Because when I choose a commit, the application focuses the Log tab instead of the Diff one, which is the opposite behaviour.

Anyway, if it were intentional, I also believe that Log should be the default tab. Because it show us important information from the current status of the repository (when positioned in the working directory) and the description of the commit (when positioned on a commit). What do you opine?

Thank you ;) .

Compress display of too large tags or branches

Size of labels for branches and tags should be limited to a maximum and expandable on request.

When many branches+tags exist on the same revision, offer an optional compressed view (only an indicator of the number of labels) and an optional full view (expanding the QTableRowItem to the necessary height).

Rename README to README.adoc(?) to enable rendering on GitHub?

Hi!

Thanks a bunch for QGit! Since gitg keeps crashing on me to the point of not starting up at all for some repositories, QGit is a great thing to have, and its unique approach to visualization has turned out helpful a few times already — thanks!

I noticed that README uses special syntax but it's not rendered by GitHub due to lack of a file extension. It looks like reStructuredText to me. Are there reasons to not rename it to README.rst to keep rendering disabled?

Best, Sebastian

Use libgit2 library

Hi, i've used qgit for years and want to make it better.

Currently qgit calling git as external process and parsing it's output.
It works, but this way is slow and potentially very buggy: we depends from OS process execution mechanics and git version at least.

The most powerful git GUI GitKraken use special library: libgit2.
It is a low-level and lightweight library written in pure C, with minimum dependencies.
Can libgit2 be useful to qgit?
or maybe calling git process was intentional and "by design", and no other way is needed?

However, i will play with libgit2 for my own purposes.
And i can try to integrate to qgit if it will make sense.

P.S. external libraries be used thru e.g. Conan or just bundling it sources as git submodule.

No way to view patches in the per file history

When viewing the patches for a given file (after double clicking on the file in the "Git tree") one would expect that double clicking on a commit would show the commit/patch. Instead it brings up the full list of commits. This may have been useful at some point - and may still be - if the commit was selected there. Unfortunately it is not but the list is on whatever was selected previously.

I suggest to not go to the full list at all but just open the commit directly in the "Patch" tab - the same way as when double clicking on the full commit list. The patch could also be selected in the full commit list to be able to access the surrounding patches (assuming the patch is visible in there and not filtered out)

RFE: Allow opening a file from the command line

Currently, any and all command line options are passed verbatim to git log. It would be nice to have a command-line option that, instead, tells QGit to open a specific file, as if "Show file (Alt+A)" had been triggered on the file from the GUI. In particular, this would show the history and the blame view for that file.

Having such an option would allow using QGit instead of git gui blame (ancient Tk UI) or plain git blame (no UI), e.g., as the blame viewer in Git Cola. And the blame viewer is actually already written, all that's missing is a way to trigger it from the command line, instead of having to look up the file in the GUI.

Create an optional alternative commit view with combined log and diff

The split "Log" and "Diff" commit view in the "Split view" mode can be cumbersome on small screens. Neither the log nor the diff can be shown in comfortable viewports.

Same applies in the "Patch" tab (to a lesser extent since that tab takes the whole window space).

TODO: propose an optional alternative commit view with combined log and diff. Investigate on a focus group (easier said...) if it is preferable and, if yes, make it default.

Qgit crashes on some malformed git repos

I'm using qgit 2.8 from Debian and found that qgit will crash on some certain git repositories.

Downstream Debian report: https://bugs.debian.org/926327

Compressed git repo: https://drive.google.com/open?id=1yMVLNQ3t6JP4n3Nv_Cnsp7mPrLhT3rQ1

Methods to reproduce:

  1. extract the broken git repo from .tar.xz tarball
  2. run "qgit" within the working directory
  3. select "whole history" in range selection
  4. the program will crash.
-> % qgit
ASSERT in Cache::load, corrupted SHA after �yyy�
ERROR: unable to load file names cache
[1]    17309 segmentation fault  qgit

Chaotic display of branch names in the context menu

In repositories with many branches and/or many remotes the display of a branch names in the context menu becomes very chaotic:

many_branches

Sorting the branches into hierarchic submenus (splitting by the "/") would largely improve the user experience:

branches_submenu

Horizontal layout for wide screens

Submitted by Josef Kufner on 2015-05-28.

Hello,
with 1920px wide screen I would prefer all panes side by side – see attached screenshot.

Simply changing orientation of the QSplitter and moving tabs to upper side is enough. However, there should be some configuration option to switch layout between traditional and wide-screen friendly version.

Have a nice day!
screenshot

Allow history navigation in Patch view

A commit can be viewed in a separate "Patch" tab using the "View patch" (Ctrl+P) action in main "View" menu or context menus. Triggering the action successively on different commits opens them in the same tab (it is still possible to open each commit in its own tab, but let's set this aside for now).

Then in the "Patch" tab, it is possible to navigate to previous or next patches in viewing history using the "Back" and "Forward" commands (Alt+Left and Alt+Right shortcuts).

TODO: add ability to also navigate in commit history using (to-be-added) "Previous" and "Next" actions (shortcuts "Up" and "Down"). This will be uniform with behaviour in the commits "Rev List" view.
TODO: add ability to also navigate in stack of marked commits (resulted from "Filter" operation) using "Previous Marked" and "Next Marked" actions (shortcuts "Shift+Up" and Shift+Down").

Resize log view columns on startup, to fit the optimal size of contents

Today’s behavior, that makes the description column not wide enough and the author or date column way too large, is harmful for usability.

Compute the minimum/optimal size of contents and resize automatically. If this optimal sizing is changed by the user manually, record it and restaure it at restart.

Q: save by repository?

Add option to configure the width or size of the "tab" character

Hi:

I think that it would be useful to be able to configure the width or size of the tab character (U+0009). I'm referring to that parts of the application that show source code, such as the diff bottom pane, the Patch tab, the tab that shows the content of each file, etc.

Thank you.

custom actions - created actions not triggerable

When i create actions without giving them mnemonic key (ie &pull), then clicking the menu action trigger an issue telling the action name was not found.
I had to press Alt key while menu is popped to see the mnemonic in the actions text and rename all my custom actions to place the mnemonic so that everything match and works.

Linux, KDE, Breeze

Mark HEAD explicitely

Currently, the head is marked by the lighter green color of the current branch. Unfortunately, this doesn’t work for detached heads.

Directive: mark HEAD explicitely (with a “branch” label).

Bonus: perhaps mark the other symbols too: ORIG_HEAD, FETCH_HEAD, etc.

QGit fails doesnt work if log.showSignature = true in git config

QGit started to behave in a weird manner lately yielding strange and incorrect output, and often crash when retrieving the repository log information. This seems to be caused by my ~/.gitconfig which instructs git log to show GPG signatures by default. I think QGit needs to pass --no-show-signatures or similar to git log, or properly parse the signature information contained in the log.

Here's the relevant part of my ~/.gitconfig:

[log]
    showSignature = true

Clicking on individual commit in file view does not open the commit

On Fedora 25 with qgit 2.7 clicking on individual commit in the file view (in the list of changes on that file) does not open the commit. The window with Rev list is opened but the revision opened is still the original one that was displayed in the Rev list before and not the desired revision.

Also rightclick on the commit in the file view does not open the contextual menu. This seems to be related to the problem above as both these problems started to appear in the same time. It seems to be some kind of race condition as on 2.6 the commit usually opened but sometimes not. In 2.7 the commit is never opened.

PACKAGE_VERSION is still 2.7

In the new 2.8 release, src/config.h still defines the version to 2.7 (twice, once as PACKAGE_VERSION, once as VERSION)

Git log

Hello,
I ported this Qgit to OS/2 using cmake
Compiling went well, but when i load a git repo to it i see "ERROR: unable to start 'git log'

we have git 2.11.0

i have uncomment USE_QPROCESS in dataloader.h and now is the error about git log gone,
only now i see other error:
See https://i.imgur.com/J0CKL7z.png

Any idea how this get fixed?

Add a field to filter the file list of a commit

Although I try to make my commits as much granular as possible, sometimes I can't avoid to include many files into a single commit. For example, in Java, renaming a single class may affect hundreds of classes.

In this situation, it would be fantastic to have a text field with which I can filter the files shown in the list, by their path, using one or more regular expressions.

Other situation in which it may be useful is when you view the differences between 2 distant commits (using the Diff to: SHA option). Here the amount of files may be overwhelming. But relying on this field, one could spot a file (or group of files) faster.

Thank you for this great application!

"External Diff" and "External Editor" not always evidently related to context

"External Diff" allows opening an external app with the modifications applied to current selected file in a commit. "External Editor" allows opening an external app with the currently selected file (either in the file tree view or in a commit file list).

These actions are always active when a file is selected, either in the file tree view or in a commit file list view. If the file tree view is collapsed and there is no selection in the current commit's file list view, both these actions remain active and it is not clear from the context why. Furthermore, the "External Diff", when invoked, will open with an empty diff (because the hidden selected file in the file tree view has no diff context attached to it).

TODO: deactivate "External Diff" and "External Editor" actions when the file tree view is not visible. Deactivate the "External Diff" action when the selected file has no diff context (is not selected as part of a commit).

External Diff: pass over existing filenames when possible

It seems, QGit generates random cryptic filenames to be viewed by External Diff tool.
Instead It should pass over real(existing) filenames for a working dir files.

This way any changed in working dir files can be reviewed and corrected using External Diff right before commit.

Thanks for consideration

Use system icons under linux

Is possibile to use system icons under linux?
Tipically adwaita under gnome and breeze under KDE Plasma.

Thanks you

QGit should support git worktree

Submitted by Daniel Levin on 2016-01-06.

Since Git 2.5 release Git supports multiple working directories. QGit should be able to open such working copy as usual one.

This change does not require much effort as far as I see:

  • Normally .git is a bare repository, in separate working tree it is a file with path to bare repository
  • HEAD and ORIG_HEAD can be located not in .git/ but in original barerepository/worktrees/barerepository/worktrees/tree_name

In addition QGit should also support opening bare repository to show history without HEAD.
This can be addressed in separate issue I believe.

Salvaged from old home: Key bindings on diff page don't work anymore

Submitted by Urs Joss on 2016-05-20.

In version 2.6 (on arch linux (qgit-2.6-1)), I cannot use shortcuts to navigate the diff pane

space, u, d, delete, backspace
More shortcuts that don’t seem to know (but I haven’t been using frequently or at all in <2.6):

Home/End to go to first/last revision
CTRL-+/- for adjusting the font size
While scrolling by mouse works, qgit is still usable. However, fast convenient navigation with keyboard only is quite impaired.

Thanks for taking care of that.

What works:

n/k, i to navigate in the revision list
t to toggle the tree view
s to split the secondary panes
h to toggle the view of the split header

The project information at OpenHub is outdated.

I found this repository when I was looking for the bug track system for this project. I did it for Google, once links in https://www.openhub.net/p/qgit are either outdated or absent at all. Once there is a new site for the project, It would not be a bad idea update the project there. More contributors could find the project by means of that tool.

UTF-8 characters in `git status` output are not displayed correctly

While showing working dir, qgit shows git status output in Log. However, in case git is confugured to use non-ASCII locale (Russian in screenshots below)
screenshot_20190219_101041
qgit fails to display this output correctly:
screenshot_20190219_100959

This doesn't happen when displaying actual commits log, UTF-8 is displayed correctly there.

Open folder in file manager with QGit

Submitted by Mario Blättermann on 2014-02-21:

currently QGit seems to don’t have any command line options. It is impossible to submit a folder name (which contains a Git repo). QGit will always opened with an empty view. It should be possible to type the following:

[mariobl@localhost Debian-Git]$ qgit ./manpages-de

All it needs is the appropriate command line option to open folders and the associated *.desktop file which is for the file manager’s context menu.

I’m using Fedora 20 x86_64 with QGit v2.5.

Filenames sporting utf-8 characters are not displayed correctly

Submitted by Michael Gerdau on 2017-04-18.

Description: Filenames sporting utf-8 characters are not displayed correctly. E.g. a file named (without the '“') “Abendstille-überall.ly” is displayed as “Abendstille-\303\274berall.ly”. UTF-8 is the selected character set whereever it can be configured in qgit, i.e. Settings, “General” tab field “Text codec” as well as in “Git config” tab Parameter “i18n > commitencoding” are all set to UTF-8.

Additional info:
package version(s): at least since 2.5; it definitely is in the current 2.7
Steps to reproduce:
the default encoding of the filesystem is UTF-8
in a git repository viewed with qgit create a file with utf-8 characters in the name
add this file to the git repo
look at the filename in the Git tree pane of qgit → utf-8 characters are escaped like in the example above.

"Amend Commit" incorrectly adds some garbage to the commit message

Submitted by ralfj ralfj on 2017-07-05.

“Amend Commit” incorrectly adds some garbage to the commit message. This can be reproduced as follows:

  1. Go to some git repo with a local change
  2. Choose “Edit” - “Amend Commit”
  3. Don’t touch the commit message, just hit “Ammend”

Now check the new commit message. It is not the same as the old one, instead “on branch ” and
some file information has been added.
The reason seems to be that qgit does not correctly process the suggested message it gets from git,
removing too many “#”. When I use git on the CLI, the lines that qgit adds start with a “#” and
are hence ignored by git.

This is a regression, in earlier versions of git + qgit (like, a couple years ago or so), things worked
all right.

In case the locale is relevant here:
$ env | grep -e LANG -e LC_
LANG=de_DE.utf8
LC_MESSAGES=en_US.utf8
LANGUAGE=en_US:en

Blocked everytime we select "Working directory changes" for a big repo.

Steps to reproduce:
1- I opened qt-creator repo. (> 55K commits):
2- After it loaded completely memory usage is: 3,009,720 KB
3- Select a commit.
4- Memory usage changes to: 2,165,040 KB
5- Again, select Working directory changes
6- After ~5s it start to do something and memory usage changed to: 3,005,344

So it seems it re-computes working directory changes everytime we select Working directory changes.

no way to push or pull?

Im trialing qgit as im looking for something simple. QGit looks great, except there is no way by default to push or pull changes?
Am I missing something?

custom actions - custom parameters issue

When using more than one custom parameter (ie, echo --%lineedit:family=my family% --%lineedit:name=my name%) the final command is broken, looking at the code (https://github.com/tibirna/qgit/blob/master/src/inputdialog.cpp#L192), the replace logic seems wrong.
It assume the start/end pos are fixed an not moved, but everything is out of sync as soon as you replaced something before the currently replaced variable.
To continue to use your current code logic, you need to ensure to replace variables in the reverse order they appears in the command, from far right to far left, ie the variable having the highest start pos is to replace first and so on.

"Loading working directory changed files..." takes too long.

I'm using qgit to look at my commits, compare different branches from different remotes to decide which commit I should merge to my master.
I frequently change from one working directory to another (a different git repos).
I'd like my log to be immediately visible, but it is waiting for "Loading working directory changed files...", which is usually not my interest when I'm in qgit (I use git st and vim :Gdiff to do this).
It would be nice if the working directory changes could be computed in background and be accessible only when ready.
Of course with a progress loop to emphasis that something is in progress.

PS by too long I mean many seconds.

Salvaged from old home: Double-clicking a commit in the history view does not open the relevant commit

Submitted by ralfj ralfj on 2017-07-05.

Steps to reproduce:
Open the file browser side-bar
Double-click some file to view its history
Double-click an item in the commit list in the top half of the window
Expected behavior:
The commit view opens, showing the double-clicked commit.

Actual behavior:
qgit switches focus to the “Rev list”. It selects the “Nothing to commit” at the top of the list, so this is pretty useless.

Recover gracefully from corrupted cache situations

If the cache file (.git/qgit_cache.dat) gets corrupted in some way (e.g. file truncated or crash in the middle of saving it), qgit can't be started anymore on the affected repository, crashing in the cache reading process.

TODO: wrap all cache process in a try...catch... and simply reconstruct cache on any error. If recovery process fails, forego use of cache and inform user for further investigation.

Related issue: #69

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.