Avoid a pedantic warning (comma at end of enum)
[qgit4/redivivus.git] / README
blob4213f7ba5e765e1898002fe6d7ddde50e190dcd2
1 qgit, a git GUI viewer
2 ======================
4 With qgit you will be able to browse revisions history, view patch content
5 and changed files, graphically following different development branches.
7 Bugs or feature requests should be sent to the git@vger.kernel.org
8 mailing list.
10 Main features
11 -------------
13  - View revisions, diffs, files history, files annotation, archive tree.
15  - Commit changes visually cherry picking modified files.
17  - Apply or save patch series from selected commits, drag and
18    drop commits between two instances of qgit.
20  - Associate commands sequences, scripts and anything else executable
21    to a custom action. Actions can be run from menu and corresponding
22    output is grabbed by a terminal window.
24  - qgit implements a GUI for the most common StGIT commands like push/pop
25    and apply/save patches. You can also create new patches or refresh
26    current top one using the same semantics of git commit, i.e. cherry
27    picking single modified files.
30 Installation
31 ------------
33 You need Qt developer libraries, version 4.3 or later, already installed.
34 Be sure compiler, qmake (Qt4 version) and Qt4 bin tools are in path.
36 NOTE: Correct qmake for Qt4 (/usr/lib/qt4/bin/qmake) must be called, in
37 case also Qt3 version is in path the former must be explicitly invoked.
39 To compile, install and start qgit:
41  - unpack the released tar file or clone from a git public archive
43  - (Windows only) open src/src.pro and set the proper GIT_EXEC_DIR value
45  - generate Makefiles (only the first time)
46    Unix/Linux and Windows:  qmake qgit.pro
47    Mac Os X:                qmake -spec macx-g++ qgit.pro
49  - (Windows only with VC2008 IDE) open qgit.sln solution file
51  - make
53  - make install
55  - (Windows only) run start_qgit.bat to start the application. You can
56     also create a a desktop icon linked to 'start_qgit.bat' and double
57     click on it.
59 Installation directory is $HOME/bin under Linux and the directory of git
60 exe files under Windows.
62 You need to run 'qmake qgit.pro' only the first time to generate Makefile
63 files, then you simply call 'make' and  'make install'. You may need to
64 run 'qmake qgit.pro' again only after patches that modify 'qgit.pro' or
65 'src/src.pro' files or in case of 'strange' compile errors.
67 Remember to manually delete all Makefile* files in 'src/' directory before to
68 start 'qmake qgit.pro'.
71 Performance tweaks
72 ------------------
74 A 'git log' command is used to load the repository at startup or when
75 refreshing. This is an highly performance critical task. Default method is
76 based on a temporary file as data exchange facility. This is the fastest
77 on Linux with a tmpfs filesystem mounted under /tmp, as is common with most
78 distributions. In case of portability issues it is possible to fallback
79 on a standard QProcess based interface. To do this uncomment USE_QPROCESS
80 define in 'src/dataloader.h' before to compile.
83 Command line arguments
84 ----------------------
85 Run qgit from a git working directory, command line arguments
86 are filtered by 'git log'. Some examples:
88         qgit --no-merges
89         qgit v2.6.18.. include/scsi drivers/scsi
90         qgit --since="2 weeks ago" -- kernel/
91         qgit -r --name-status release..test
93 If qgit is launched without arguments or if you change archive with
94 'open' menu, a dialog for range select is shown.
95 You can select top and bottom rev tags from the list or paste a
96 specific revision. Values are passed to 'git log' to narrow
97 data loading to chosen revisions.
100 Main view
101 ---------
102 You can navigate through logs, file names, file history, archive tree.
103 All the views will be updated accordingly.
105 Copy/paste is supported on all fields. Copy (CTRL+C) is supported on
106 all views.
108 All the references found recursively under .git/refs/ directory are
109 highlighted according to their type: current branch(HEAD), branch, tag,
110 other. Reference names and any associated messages can be viewed in status
111 bar when a tagged revision is selected.
113 When you right click on main view a context sensitive pop-up menu is shows
114 available commands and a 'quick jump' tag list.
116 *Key bindings*::
118 `-------------`----------------------------------
119 r             Go to revisions list page
120 p             Go to patch page
121 f             Go to file page
122 <Alt+wheel>   Go to next/previous page
123 t             Toggle tree view
124 s             Toggle view of secondary panes
125 h             Toggle view of revision header
126 <Home>        Move to first revision
127 <End>         Move to last revision
128 i             Move up one revision in main view (global scope)
129 n, k          Move down one revision in main view (global scope)
130 <Shift-Up>    Move to previous highlighted line
131 <Shift-Down>  Move to next highlighted line
132 <Left>        Go back in history list
133 <Right>       Go forward in history list
134 <CTRL-plus>   Increase font size
135 <CTRL-minus>  Decrease font size
136 <Delete>, b   Scroll content up one page
137 <Backspace>   Scroll content up one page
138 <Space>       Scroll content down one page
139 u             Scroll content up 18 lines
140 d             Scroll content down 18 lines
141 -------------------------------------------------
143 *Directory tree*::
144 From menu or toolbar button it is possible to show a side panel with
145 tree view of repository files and directories.
147 Double clicking on a file opens file annotation window. With 'filter by tree'
148 button it is possible to compress revision list to show only selected
149 files/directories in tree view.
151 Tree view supports multi-selection. When you right click on a file on tree
152 view a context sensitive pop-up menu is shows with available commands.
154 *Working directory changes*::
155 When 'Check working dir' flag is set, as example from main view context
156 pop-up menu, a pseudo-revision is shown and highlighted at the top of the
157 list. Highlight and revision name reflect current working directory status:
158 'Nothing to commit' or 'Working directory changes' respectively.
160 To check for working directory modified files set corresponding preference in
161 Edit->Settings->'Working dir'. QGit checks for possible new files added in
162 working directory using ignoring rules according to git ls-files
163 specifications, see menu Edit->Settings->'Working dir'.
165 TIP: If you don't need to see modified files in working dir, disable
166 corresponding setting and start-up time will be shorter.
168 *Lane info*::
169 Selecting a lane with mouse right button will display a pop-up
170 with the list of children and parent. Select one and you jump to it.
172 *Filter / Highlight*::
173 Use the combo box to select where you want to filter or highlight on.
174 Currently supported fields are: log header, log message, revision author,
175 revision SHA1, file name and patch content.
177 Write a filter string, press filter button and the view
178 will update showing only commits that contain the filter string,
179 case insensitive. Toggle filter button to release the filter.
181 Alternatively press the magnifying glass button, in this case matched
182 lines will be highlighted, you can use <Shift-Up> and <Shift-Down>
183 keys to browse them. Toggle the button to remove the highlighting.
185 NOTE: In case of patch content regexp filtering, the given string is
186 interpreted as a POSIX regular expression, not as a simple substring.
188 TIP: Very useful to quick retrieve a sha writing only first 3-4
189 digits and filtering / highlighting on revision sha. The sha value
190 can then be copied from SHA field.
192 TIP: It is possible to insert an abbreviated sha directly in the
193 SHA line edit at the top right of the window. After pressing enter
194 this will trigger an higlighting of the matched revisions. It is
195 a kind of shortcut of the previous tip.
197 *Save patch series*::
198 After mouse selecting the chosen revisions (use standard CTRL+left click)
199 for single select or SHIFT+left click for range select), press 'Save
200 Patch' button or use file menu and a dialog will let you choose patches
201 destination directory. Then 'git format-patch-script' will be called and
202 patches created. It is possible to specify additional options with
203 Edit->Settings menu.
205 *Apply patch*::
206 This menu entry is complementary to save patch and it's an interface
207 to 'git am'.
209 *Drag and drop*::
210 It is possible to drag some selected revs from one instance of qgit to another
211 open on a different archive. In this case 'git format-patch' is used in the
212 dragging archive to create temporary patches imported in the dropping archive
213 by 'git am'.
215 *Make branch*::
216 Select a revision and open Edit->'Make Branch' or use right click context
217 pop-up menu. A dialog will be shown asking for a branch name.
219 *Make tag*::
220 Select a revision and open Edit->'Make Tag' or use right click context
221 pop-up menu. Two dialogs will be shown, the first asking for a tag name, the
222 second for a tag message (not mandatory). If a non empty message is written,
223 this will be saved together with the tag. Tags and tag messages can be viewed
224 in status bar when a tagged revision is selected.
226 *Delete tag*::
227 Select a tagged revision and open Edit->'Delete Tag' or use right click
228 context pop-up menu. After confirmation the selected revision will be
229 untagged.
231 *Save file*::
232 Select a file from tree or file list and open File->'Save file as' or use the
233 tree view context sensitive pop-up menu (right click), a dialog will be shown
234 asking for a file name (default to current) and destination directory. Input
235 a valid name, press OK and the file will be saved.
237 *Commit changes*::
238 When enabled with Edit->Settings->'Working dir'->'Diff against working dir'
239 and there is something committable, a special highlighted first revision is
240 shown, with the status of the archive and the possible pending stuff.
241 From Edit->Commit it is then possible to invoke the commit dialog.
243 In commit dialog select the files to commit or, simply, to sync with index
244 (call 'git update-index' on them). A proper commit message may be entered and,
245 after confirmation, changes are committed and a new revision is created.
247 It is also possible to amend last commit. The Edit->Amend commit opens the
248 same dialog, but changes are added to the head commit instead of creating new
249 commit.
251 The core commit function is performed by 'git commit'.
253 TIP: It is possible to use a template for commit message, use
254 Edit->Settings->Commit to define template file path.
257 Patch viewer
258 ------------
259 To open patch tab use context menu, double click on a revision or file in
260 main view or select View->'View patch' menu (CTRL+P). The patch shown is
261 the diff of current selected commit against:
263  - Parent (default)
264  - HEAD
265  - Selected SHA or reference name
267 In the last case SHA is chosen by writing or pasting a tree-ish or a reference
268 names in the corresponding field and pressing return. You get the same result
269 also with a CTRL+right click on a revision in main list. Selected target
270 will be highlighted. CTRL+right click again on the highlighted revision to
271 release the filter.
273 With the 'filter' button at the right of the tool bar it is possible to
274 toggle the display of removed code lines. This can be useful to easy
275 reading of the patch.
277 External diff tool
278 --------------------
280 From 'View->External diff' it is possible to invoke an external diff tool,
281 as example to view the diffs in a two vertical tiled windows.
283 External diff tool shows the diffs between two files.
284 First file is the current selected file of current revision.
285 Second file is the same file of the parent revision or of a specific revision
286 if 'diff to sha' feature is enabled (diff target is highlighted, see above).
288 Default external viewer is kompare, but it is possible to set a preferred one
289 from 'Edit->Settings->External Diff Tool'.
292 File viewer
293 -----------
295 It is possible to view file contents of any file at any revision time in
296 history.
298 *File list panel*::
299 In the bottom right of main view a list of files modified by current
300 revision is shown. Selecting a file name will update the patch view
301 to center on the file. File names colors use the following convention
303  - black for modified files
304  - green for new files
305  - red for removed files
306  - dark blue for renamed/copied files
308 *Merge files*::
309 In case of merges the groups of files corresponding to each merge parent
310 are separated by two empty lines.
312 In case of merges you can chose between to see all the merge files or only
313 the interesting ones (default), i.e. the files modified by more then one
314 merge parent.
316 *File content*::
317 To view file content double click on a file name in tree view, or use context
318 menu in file list or select View->'View file' menu (CTRL+A).
320 In file view page will be shown current revision's file content and file
321 history.
323 It is possible to copy to the clipboard the selected content with CTRL+C or
324 with the corresponding button.
326 *File annotations*::
327 On opening or updating file viewer, file history will be retrieved from archive
328 together with file content. Annotations are then calculated in background
329 and the view is updated when ready.
331 Double clicking on an annotation index number will update history list
332 to point to corresponding revision.
334 Hovering the mouse over an annotation index will show a tool tip with the
335 corresponding revision description.
337 File content will change too, to show new selected revision file. To keep
338 the same view content after double clicking, probably what you want, just pin
339 it with 'Pin view' check button. Next to the check button there is a spinbox
340 to show/select the current revision number.
342 Double click on history list entry to update main, patch and tree views to
343 corresponding revision.
345 *Code region filter*::
346 When annotation info is available the 'filter' button is enabled and it is
347 possible to mouse select a region of file content. Then, when pressing
348 the filter button, only revisions that modify the selected region will be
349 visible. Selected code region is highlighted and a shrunken history is
350 shown. Filter button is a toggle button, so just press it again to
351 release the filter.
353 *Syntax highlighter*::
354 If GNU Source-highlight (http://www.gnu.org/software/src-highlite/) is
355 installed and in PATH then it is possible to toggle source code highlight
356 pressing the 'Color text' tool button. Please refer to Source-highlight
357 site for the list of supported languages and additional documentation.
360 Actions
361 ------
362 Actions can be added/removed using a dedicated dialog invoked
363 from 'Actions->Setup actions...' menu. Actions can be activated
364 clicking on their name from the Actions menu.
366 Each action can be associated to a list of any type of git or shell
367 commands or to an external script.
369 While an action is running a terminal window is shown to display the
370 corresponding output.
372 An action can also ask for command line arguments before to run so
373 to allow for maximum flexibility.
375 NOTE: command line arguments are always appended to the first command only.
376 This lets you define an action like:
378   git fetch
379   git merge
381 And if you type 'origin' when prompted, the action executed will be:
383   git fetch origin
384   git merge
386 If you need a more complex arguments passing with a shell like notation
387 define a script and associate your action to it.
390 Integration with StGIT
391 ----------------------
392 When a StGIT stack is found on top of a git archive, qgit transparently
393 handles the added information.
395 Integration with StGIT is implemented both by new and modified functions.
397 .New functions are automatically activated:
399  - Visualization of applied and unapplied patches in main view.
400  - Interface to push/pop patches by a mouse right click on selected items.
401    Push supports also multi-selection.
403 .Existing functions change behavior:
405  - Amend commit dialog refreshes top stack patch with modified files instead
406    of amending the commit. It is appropriately renamed in the menu.
407  - Commit dialog creates a new patch on the top of the stack filled with
408    modified working directory content instead of commit a new revision to
409    git repository.
410  - Apply patch changes to interface StGIT import and fold commands instead
411    of applying patch directly on the git repository.