diff --git a/README.md b/README.md
index 63776ab..628f7c3 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,70 @@
GitQuill
+
Cross-platform GUI for Git.
+
+| ![](img/screenshots/commit-history.png) | ![](img/screenshots/file-diff.png) |
+|-----------------------------------------|------------------------------------|
+
+
+Unique features
+---------------
+
+* Edit files directly in the diff view.
+* Quickly amend past commits with the rebase tool.
+* Configure linking from commit messages to your issue tracker.
+* Configure buttons to execute any Git command with a click.
+
+
+Requirements
+------------
+
+* [Git](https://git-scm.com/) 2.23+
+* [Node.js](https://nodejs.org/) 18+
+
+
+Installation
+-----------
+
+```sh
+npm install
+npm run build
+npm start
+```
+
+
+Notes
+-----
+
+* GitQuill has a custom mechanism for saving/restoring work-in-progress (WIP) using branches instead of traditional stashing; this is because Git's stashing has technical quirks that make it difficult to integrate consistently into the UI.
+* If you start a rebase while having a file selected, GitQuill will revert the whole commit content in the index, while keeping it in the working tree, so that you can edit files without leaving the application.
+* When a conflict is detected, GitQuill automatically resets the unmerged files, in order to avoid the special repository state that makes things complicated to handle. Conflict markers are still left to be manually resolved.
+* GitQuill doesn't watch repository files for changes. Status is refreshed when application receives focus or when you perform a relevant action in the UI.
+* GitQuill calls `git` commands directly. You can view all executed operations in the log files for each repository: `.git/.quill/app.log`.
+
+
+Configuration
+-------------
+
+* Per-repository configuration file: `.git/.quill/config.json5`. Example:
+
+ ```js
+ {
+ autolinks: [
+ ['#(\\d+)', 'https://github.com/adamsol/GitQuill/issues/$1'],
+ ],
+ custom_actions: [
+ { icon: 'mdi-download-outline', label: 'Pull', command: ['pull'] },
+ { icon: 'mdi-upload-outline', label: 'Push', command: ['push'], click_twice: true },
+ ],
+ }
+ ```
+
+* Global, automatic configuration file (open repositories, UI layout, etc): `%AppData%/GitQuill/config.json` for Windows; see https://electronjs.org/docs/api/app#appgetpathname for other platforms.
+
+
+Contributing
+------------
+
+Thank you for your interest in the project! I generally do not accept pull requests. The best way to contribute is to report a bug or suggest a feature via [Issues](https://github.com/adamsol/GitQuill/issues).
diff --git a/img/screenshots/commit-history.png b/img/screenshots/commit-history.png
new file mode 100644
index 0000000..4a6660e
Binary files /dev/null and b/img/screenshots/commit-history.png differ
diff --git a/img/screenshots/file-diff.png b/img/screenshots/file-diff.png
new file mode 100644
index 0000000..d29dd8a
Binary files /dev/null and b/img/screenshots/file-diff.png differ
diff --git a/main.js b/main.js
index 8c41c7a..a54d5ee 100644
--- a/main.js
+++ b/main.js
@@ -41,13 +41,23 @@ const app_menu_template = [
{
label: 'View',
submenu: [
- { role: 'reload' }, { role: 'toggledevtools' },
+ { role: 'reload' },
+ { role: 'toggledevtools' },
{ type: 'separator' },
- { role: 'resetzoom' }, { role: 'zoomin' }, { role: 'zoomout' },
+ { role: 'resetzoom' },
+ { role: 'zoomin' },
+ { role: 'zoomout' },
{ type: 'separator' },
{ role: 'togglefullscreen' },
],
},
+ {
+ label: 'Help',
+ submenu: [
+ { label: `Version: ${app.getVersion()}`, enabled: false },
+ { label: 'Homepage', click: () => shell.openExternal('https://github.com/adamsol/GitQuill') },
+ ],
+ },
];
Menu.setApplicationMenu(Menu.buildFromTemplate(app_menu_template));
diff --git a/package.json b/package.json
index b990260..ab7f2ac 100644
--- a/package.json
+++ b/package.json
@@ -2,11 +2,13 @@
"name": "git-quill",
"productName": "GitQuill",
"version": "0.1.0",
- "description": "GUI for Git.",
+ "description": "Cross-platform GUI for Git.",
"keywords": [
"git",
"diff",
- "gui"
+ "graph",
+ "gui",
+ "client"
],
"repository": "https://github.com/adamsol/GitQuill",
"license": "MIT",
diff --git a/src/utils/git.js b/src/utils/git.js
index 1754f56..06dfcc2 100644
--- a/src/utils/git.js
+++ b/src/utils/git.js
@@ -25,11 +25,6 @@ export async function getStatus(repo, ...args) {
file.x === file.y && ['A', 'D'].includes(file.x),
]));
if (conflict_files.length > 0) {
- // The special state of unresolved conflicts makes things complicated to handle,
- // and annoying from the user perspective, as many standard Git commands refuse to work as expected.
- // For this reason, we automatically reset the files.
- // This still leaves the conflict markers to be manually resolved,
- // but brings the repository back to a normal state.
await repo.callGit('reset', '--', ..._.map(conflict_files, 'path'));
// Additionally handle the "deleted by them" conflict, so that it doesn't go unnoticed.
for (const file of _.filter(conflict_files, { x: 'U', y: 'D' })) {