Giter Site home page Giter Site logo

jetpackduba / gitnuro Goto Github PK

View Code? Open in Web Editor NEW
820.0 13.0 43.0 9.13 MB

A FOSS Git multiplatform client for newbies and pros

Home Page: https://gitnuro.com/

License: GNU General Public License v3.0

Kotlin 98.95% Rust 1.05%
git kotlin jetbrains-compose jgit multiplatform rust compose-multiplatform

gitnuro's Introduction

Gitnuro - Multiplatform Git Client

Latest release

Icon

A FOSS Git client based on (Jetbrains) Compose and JGit.

The main goal of Gitnuro is to provide a multiplatform open source Git client without any kind of constraint to how you can use it nor relying on web technologies.

Download/Install

Linux:

  • Available as Flatpak here or by running flatpak install com.jetpackduba.Gitnuro if you have Flatpak & Flathub already setup.
    • If Flathub is not set up, you can add the source with the following command flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo.
  • JAR file can be executed as a portable version (Requires JRE 17).

Windows:

MacOS:

Features

Gitnuro has support for the following features:

  • View diffs for text based files.
  • View your history log and all its branches.
  • Add (stage) & reset (unstage) files.
  • Stage & unstage of hunks.
  • Checkout files (revert changes of uncommitted files).
  • Clone.
  • Commit.
  • Reset commits.
  • Revert commits.
  • Amend previous commit.
  • Merge.
  • Rebase.
  • Create and delete branches locally.
  • Create and delete tags locally.
  • View remote branches.
  • Pull and push.
  • Stash and pop stash.
  • Checkout a commit (detached HEAD).
  • View changes/diff in images (side to side comparison).
  • Force push.
  • Remove branches from remote.
  • Manage remotes.
  • Start a new local repository.
  • Search by commit message/author/commit id.
  • Rebase interactive.
  • Blame file.
  • View file history.
  • Theming.
  • Side by side diff in text files.
  • Stage/Unstage specific lines.
  • Submodules support.
  • Change the tracking of a specific branch.
Features planned
  • Create/Apply patches
  • Remove tags from remote.
  • View stashes in the log tree.
  • Syntax highlighting for diff.
  • Various log options like showing the author, filtering by current branch o hide remote branches.
  • Customizations settings.

Contributing

If you find a bug or you would like to suggest a new feature, feel free to open an issue.

Pull requests are also welcome but please create an issue first if it's a new feature. If you want to work on an existing issue, please comment so I'm aware of it and discuss the changes if required. See this page for how to set up your development environment.

FAQ

Is Gitnuro completly free?

Yes, free in both meanings of the word (in money and freedom).

Does Gitnuro keep track of my data?

Gitnuro does not track data in any way, don't worry.

I don't like the built-in themes, can I create a custom one?

Gitnuro includes the option to set custom themes in a JSON format. Keep in mind that themes may break with new releases, making the default theme the fallback option.

For the latest stable version, you can use this JSON as an example:

{
    "primary": "FF456b00",
    "primaryVariant": "FF456b00",
    "onPrimary": "FFFFFFFFF",
    "secondary": "FF9c27b0",
    "onBackground": "FF141f00",
    "onBackgroundSecondary": "FF595858",
    "error": "FFc93838",
    "onError": "FFFFFFFF",
    "background": "FFe7f2d3",
    "backgroundSelected": "C0cee1f2",
    "surface": "FFc5f078",
    "secondarySurface": "FFedeef2",
    "tertiarySurface": "FFF4F6FA",
    "addFile": "FF32A852",
    "deletedFile": "FFc93838",
    "modifiedFile": "FF0070D8",
    "conflictingFile": "FFFFB638",
    "dialogOverlay": "AA000000",
    "normalScrollbar": "FFCCCCCC",
    "hoverScrollbar": "FF0070D8",
    "diffLineAdded": "FF0070D8",
    "diffLineRemoved": "FF0070D8",
    "isLight": true
}

Colors are in ARGB Hex format.

Why isn't the Mac version signed?

The cost of the Apple Developer Program is quite high with a platform that currently has very few users. I may pay for it if it's a very requested feature but not for now.

Authentication has failed. What's wrong?

Currently there are some limitations regarding this topic. Here are some known problematic setups:

  • Multicast DNS remote URL (#19) with this workaround (#19 (comment)).
  • Self signed server certificate (#48)

If the authentication fails and you think its due to a different reason, please open a new issue.

Does it support Git credentials manager (aka manager-core)? Yes but it requires specifying the full path of the binary in your .gitconfig.

Example for linux:

[credential]
   helper = /usr/share/git-credential-manager-core/git-credential-manager-core

Example for windows (you may want to edit C:\Program Files\Git\etc\gitconfig):

[credential]
   helper = C:/Program Files/Git/mingw64/bin/git-credential-manager-core.exe

gitnuro's People

Contributors

drick0230 avatar flashdown avatar hendrikgit avatar jetpackduba avatar oshai avatar philipp91 avatar projectinfinity 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

gitnuro's Issues

Pressing escape should close detail view

When clicking a file either in a commit or from unstaged files you have to press the X to close the file view, allowing the Escape key to close the detail view would allow keyboard driven users to navigate the app easier.

Open terminal in the current repository

Sometimes git cli may be needed to do some specific operation that are not supported by Gitnuro or simply run other commands.

Add an option to open the system command line in the repository's directory.

deb/rpm package for linux

Is your feature request related to a problem? Please describe.
More fastest work without virtual env. Smaller install size.

Describe the solution you'd like
Build for current and previous supported Linux OS version. Depend from installed in system JRE.

Describe alternatives you've considered
Vanille deb/rpm package/zip which in startup request user specify path to JRE (17)

Additional context
I have bad perfomance on IDEA installed from Snap/Flatpak. Install from zip give best perfomance because work with OS directly.

Gitnuro Roadmap

Gitnuro roadmap (last update 21/03/2023 DD/MM/YYYY)

Context

Before release v1.0, Gitnuro was a project meant to cover my needs, without worrying much about the rough edges and the UX in general. After that release, Gitnuro userbase started growing and giving feedback about new features, changes and, of course, reporting bugs. That made me change my mind and focus more in making a product that can be used by anyone, independently of their experience with Git.

I'm currently doing a research to improve Gitnuro's user experience as well as evaluating which features are the most relevant and how to prioritize them but, as already explained in the FAQ, Gitnuro does not make use of any kind of data collection to understand the users' behavior, which means that I'm counting on you (the users) to share your experience and issues with Gitnuro, your feedback is important so we can make a better product for everyone.

1.3.0 Roadmap

There isn't a release date planned yet.

This release will include some customization options as well as keep adding new features. This list will be expanded after v1.2.

Previous versions:

1.2.0 Roadmap

This version will be focused mainly in improving the SSH authentication (as much possible), add support to submodules and complete the UI/UX design. This last point includes better integration with the keyboard, clearer errors messages.

Main tasks for this version:

Support for Git Credential Manager

Hi! Just found out about Gitnuro and am pretty impressed by how convenient it is to work with. Thanks for that!

I have a repository in Azure DevOps and the Git CLI is configured to use Git Credential Manager ( git config --global credential.helper manager-core ). This allows the CLI to pull and push from DevOps-hosted repository using MFA. This also applies for MFA-secured GitHub repositories.

However, when pulling through Gitnuro, the authentication window pops up every time. Is there a way to recognize and use the stored credentials?

Consider swapping staged/unstaged views

I suggest swapping the order of staged/unstaged views for the sake of consistency among git clients. It's personally an annoyance to me, but not much more than that.

I will provide you with examples here.

Gitnuro
image

GitKraken
image

Sublime Merge
image

As you can see the common thing to do seem to be to put unstaged files at top followed by staged files or in the example of SourceTree not use a staged/unstaged list. It seems like more consistent behaviour to me :)

macOS support

Hi, I built this project successfully on a Apple Silicone mac.

In doing so I discovered that the version string breaks the native macOS builder during compose's task.
The error in particular was:
Bundler Mac Application Image skipped because of a configuration problem: The first number in an app-version cannot be zero or negative. Advice to fix: Set a compatible 'app-version' value. Valid versions are one to three integers separated by dots.

The fix for me was to open build.gradle.kts and changing line 14 to say
val projectVersion = "1.0.0"

Write commit message at awrong korean lang Text at Double inputs that's space_bar

Describe the bug
A clear and concise description of what the bug is.
Hi. sorry. im very little english.. T_T
Hi. That's Bug report.
: korean lang Text at Double inputs

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Writing to korea langs at Commit message'
  2. Click on ' no click, take keyboard at spacebar'
  3. Scroll down to 'no scroll down'
  4. See error 'Last Words thats double inputs, "์ž…๋ ฅ-> ์ž…๋ ฅ๋ ฅ"

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: Windows 10 Pro 21H2
  • Version 19044.2251

Uncommited changes / commit detail at the bottom

Users must be able to move the side panel with the uncommited changes (or commit detail) at the bottom of the graph to take less horizontal space. Useful when working with vertical displays or splitting the screen between 2 apps (example: gitnuro + IDE).

Font is too small on Pop Os

I am new user. As soon as I opened the app I couldn't see the text. There is no font setting either. I am struggling to use this app.

GeforceNow start record

Describe the bug
GeforceNow recording app, when it started.

To Reproduce
Steps to reproduce the behavior:

  1. Install app
  2. Start

Expected behavior
When app is starting, GN does not start recording

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows 10 Education Edition
  • Version 1.0.1

Option to undo the reset of a file

In case of accidentally discarding the changes of an uncommited file (file reset) the user should be able to restore the version before the reset.

WIP: More details about this feature after release 1.2.0.

Better support for keyboard usage

Add options to make easier to execute actions with keybindings.

It's mostly relevant when pulling, pushing, fetching, stashing, etc.

Failed to push : Invalid credentials helper: "store" is not yet supported

Describe the bug
our gitlab server is protected by SSO OpenidConnect
With git cli no problem to connect , we use personal token as password

but in gitnuro we dhave not provide any credentials and we have this error when we want to push commit

com.jetpackduba.gitnuro.exceptions.NotSupportedHelper: Invalid credentials helper: "store" is not yet supported
	at com.jetpackduba.gitnuro.credentials.HttpCredentialsProvider.getExternalCredentialsHelper(HttpCredentialsProvider.kt:207)
	at com.jetpackduba.gitnuro.credentials.HttpCredentialsProvider.get(HttpCredentialsProvider.kt:42)
	at org.eclipse.jgit.transport.HttpAuthMethod.authorize(HttpAuthMethod.java:205)
	at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:683)
	at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:627)
	at org.eclipse.jgit.transport.TransportHttp.openPush(TransportHttp.java:541)
	at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:138)
	at org.eclipse.jgit.transport.Transport.push(Transport.java:1473)
	at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:149)
	at com.jetpackduba.gitnuro.git.remote_operations.PushBranchUseCase$invoke$2.invokeSuspend(PushBranchUseCase.kt:26)
	at com.jetpackduba.gitnuro.git.remote_operations.PushBranchUseCase$invoke$2.invoke(PushBranchUseCase.kt)
	at com.jetpackduba.gitnuro.git.remote_operations.PushBranchUseCase$invoke$2.invoke(PushBranchUseCase.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:166)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at com.jetpackduba.gitnuro.git.remote_operations.PushBranchUseCase.invoke(PushBranchUseCase.kt:14)
	at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$push$1.invokeSuspend(MenuViewModel.kt:40)
	at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$push$1.invoke(MenuViewModel.kt)
	at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$push$1.invoke(MenuViewModel.kt)
	at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invokeSuspend(TabState.kt:73)
	at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
	at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
	at com.jetpackduba.gitnuro.extensions.StateManagementUtilsKt.delayedStateChange(StateManagementUtils.kt:21)
	at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1.invokeSuspend(TabState.kt:67)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
LastError flow: Error(date=1669201149734, exception=com.jetpackduba.gitnuro.exceptions.NotSupportedHelper: Invalid credentials helper: "store" is not yet supported, message=Invalid credentials helper: "store" is not yet supported)

Desktop :

  • OS: Linux ubuntu
  • Version [22.04]

Restore Git directory detection

With release 1.1, detection of changes in the .git directory was disabled due to some performance issues and problems with inotify.

The detection should be fixed and Gitnuro should notify the user if inotify limit has been reached to ask them to increase it.

Tree structure

You can make it possible to display files as a tree instead of a list
image

add repository registry to left side

Is your feature request related to a problem? Please describe.
if i have many repos now i must keep open all or reopen from recent/readd from file manager

Describe the solution you'd like
Repository registry like in TortoiseHG, tabs = openned repos
Screenshot+from+2014-05-11+00_51_12

Support for multicast DNS

": can't open git-upload-pack" error after trying to interact with a HTTP remote

Describe the bug
Every time I try to do anything with a HTTP remote (pull, push, fetch...), the operation fails with an error popup, with the text as described in the title. All of the operations work just fine when done from the CLI git. My remote doesn't support HTTPS or SSH, so I couldn't test if any of those works as it should with the same remote.

To Reproduce
Steps to reproduce the behavior:

  1. Open a local repository that has a HTTP remote
  2. Try any of the operations that interact with the remote (tested with pull and clone)
  3. See the error popup

Expected behavior
The operation was supposed to complete as if done via CLI git.

Desktop (please complete the following information):

  • OS: Ubuntu 20.04 LTS
  • Version 1.0.1 from flathub

Scrollbar covers information in sidepanel

On main branch, if you have a lot of local or remote branches, a scrollbar will appear and cover information and buttons in the sidepanel.

I have confirmed this on Linux without screen scaling.

image

Certain characters break SSH config parsing

Currently there seems to be a bug related to ssh config parsing in one of the libraries that Gitnuro uses, this causes connections to fail (at least when using a SSH remote) while the character is present.

To Reproduce

  1. Have a invalid character for the parser in ssh config hostname. Example: [email protected]
  2. Attempt to do any action that interacts with the remote.

Expected behavior
The action should succeed, instead it fails with a hangup and a parsing error.

Logs
Some information have been slightly altered to hide sensitive information.

org.eclipse.jgit.api.errors.TransportException: [email protected]:Organisation/repo.git: remote hung up unexpectedly
        at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:244)
        at com.jetpackduba.gitnuro.git.remote_operations.FetchAllBranchesUseCase$invoke$2.invokeSuspend(FetchAllBranchesUseCase.kt:27)
        at com.jetpackduba.gitnuro.git.remote_operations.FetchAllBranchesUseCase$invoke$2.invoke(FetchAllBranchesUseCase.kt)
        at com.jetpackduba.gitnuro.git.remote_operations.FetchAllBranchesUseCase$invoke$2.invoke(FetchAllBranchesUseCase.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:166)
        at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
        at com.jetpackduba.gitnuro.git.remote_operations.FetchAllBranchesUseCase.invoke(FetchAllBranchesUseCase.kt:13)
        at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$fetchAll$1.invokeSuspend(MenuViewModel.kt:33)
        at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$fetchAll$1.invoke(MenuViewModel.kt)
        at com.jetpackduba.gitnuro.viewmodels.MenuViewModel$fetchAll$1.invoke(MenuViewModel.kt)
        at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invokeSuspend(TabState.kt:71)
        at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
        at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
        at com.jetpackduba.gitnuro.extensions.StateManagementUtilsKt.delayedStateChange(StateManagementUtils.kt:21)
        at com.jetpackduba.gitnuro.git.TabState$safeProcessing$1.invokeSuspend(TabState.kt:65)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
        at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:Organisation/repo.git: remote hung up unexpectedly
        at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:313)
        at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:153)
        at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:151)
        at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:103)
        at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1405)
        at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:233)
        ... 23 more
Caused by: java.io.IOException: java.lang.IllegalArgumentException: Invalid host pattern char in [email protected]
        at org.apache.sshd.client.config.hosts.ConfigFileHostEntryResolver.resolveEffectiveHost(ConfigFileHostEntryResolver.java:72)
        at org.apache.sshd.client.SshClient.resolveHost(SshClient.java:660)
        at org.apache.sshd.client.SshClient.connect(SshClient.java:538)
        at org.apache.sshd.client.session.ClientSessionCreator.connect(ClientSessionCreator.java:74)
        at org.apache.sshd.client.session.ClientSessionCreator.connect(ClientSessionCreator.java:57)
        at com.jetpackduba.gitnuro.credentials.GRemoteSession.setup(GRemoteSession.kt:80)
        at com.jetpackduba.gitnuro.credentials.GSessionManager$generateSshSessionFactory$1.getSession(GSessionManager.kt:23)
        at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:107)
        at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:281)
        ... 28 more
Caused by: java.lang.IllegalArgumentException: Invalid host pattern char in [email protected]
        at org.apache.sshd.common.util.ValidateUtils.createFormattedException(ValidateUtils.java:213)
        at org.apache.sshd.common.util.ValidateUtils.throwIllegalArgumentException(ValidateUtils.java:179)
        at org.apache.sshd.common.util.ValidateUtils.checkTrue(ValidateUtils.java:168)
        at org.apache.sshd.client.config.hosts.HostPatternsHolder.toPattern(HostPatternsHolder.java:293)
        at org.apache.sshd.client.config.hosts.HostPatternsHolder.parsePatterns(HostPatternsHolder.java:246)
        at org.apache.sshd.client.config.hosts.HostConfigEntry.setHost(HostConfigEntry.java:173)
        at org.apache.sshd.client.config.hosts.HostConfigEntry.readHostConfigEntries(HostConfigEntry.java:939)
        at org.apache.sshd.client.config.hosts.HostConfigEntry.readHostConfigEntries(HostConfigEntry.java:867)
        at org.apache.sshd.client.config.hosts.HostConfigEntry.readHostConfigEntries(HostConfigEntry.java:861)
        at org.apache.sshd.client.config.hosts.HostConfigEntry.readHostConfigEntries(HostConfigEntry.java:848)
        at org.apache.sshd.client.config.hosts.ConfigFileHostEntryResolver.reloadHostConfigEntries(ConfigFileHostEntryResolver.java:100)
        at org.apache.sshd.client.config.hosts.DefaultConfigFileHostEntryResolver.reloadHostConfigEntries(DefaultConfigFileHostEntryResolver.java:84)
        at org.apache.sshd.client.config.hosts.ConfigFileHostEntryResolver.resolveEffectiveResolver(ConfigFileHostEntryResolver.java:84)
        at org.apache.sshd.client.config.hosts.ConfigFileHostEntryResolver.resolveEffectiveHost(ConfigFileHostEntryResolver.java:59)
        ... 36 more
LastError flow: Error(date=1667308442593, exception=org.eclipse.jgit.api.errors.TransportException: [email protected]:Organisation/repo.git: remote hung up unexpectedly, [email protected]:Organisation/repo.git: remote hung up unexpectedly)
TabViewModel - Refreshing repository state SAFE`

Improve error messages

Whenever is possible, errors should give more details to the user about what has caused the issue, how can it be solved and if there are any alternatives.

Example:
image

List of issues that should show a custom error dialog:

  • Trying to checkout a remote branch when there is an exiting local branch with the same name.
  • Option to turn off SSL verification for specific repository (or provide the option to import a certificate, related to #48).
  • Having a missconfigured (or unsupported) credentials manager should provide a more descriptive message.
  • WIP...

Support for custom certificates

Describe the bug
SSL error by self-signed certificate.

To Reproduce
Steps to reproduce the behavior:

  1. clone project by git shell from server with self-signed cert
  2. add repo to gitnuro
  3. press pull button

Expected behavior
pull sucessfull

Screenshots
2022-11-24_09-31-44

Desktop (please complete the following information):

  • OS: Kubuntu
  • Version 20.04

maybe possible add trusted store from store - in path /etc/ssl/certs/ca-certificates.crt

Support for external ssh-agent

Describe the bug

I'm using a ssh agent with ssh key (algo: ssh-ed25519). When trying to pull the repo from Gitnuro, error pop up

To Reproduce
Steps to reproduce the behavior:

  1. Open a local repository (which use ssh-ed25519 ssh key)
  2. Try to pull

Expected behavior

Able to pull the repo

Logs

Authentication completed with failure
org.eclipse.jgit.api.errors.TransportException: [email protected]: remote hung up unexpectedly
	at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:224)
	at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:266)
	at app.git.RemoteOperationsManager$pull$2.invokeSuspend(RemoteOperationsManager.kt:32)
	at app.git.RemoteOperationsManager$pull$2.invoke(RemoteOperationsManager.kt)
	at app.git.RemoteOperationsManager$pull$2.invoke(RemoteOperationsManager.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at app.git.RemoteOperationsManager.pull(RemoteOperationsManager.kt:24)
	at app.viewmodels.MenuViewModel$pull$1.invokeSuspend(MenuViewModel.kt:17)
	at app.viewmodels.MenuViewModel$pull$1.invoke(MenuViewModel.kt)
	at app.viewmodels.MenuViewModel$pull$1.invoke(MenuViewModel.kt)
	at app.git.TabState$safeProcessing$1$2.invokeSuspend(TabState.kt:68)
	at app.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
	at app.git.TabState$safeProcessing$1$2.invoke(TabState.kt)
	at app.extensions.StateManagementUtilsKt.delayedStateChange(StateManagementUtils.kt:21)
	at app.git.TabState$safeProcessing$1.invokeSuspend(TabState.kt:62)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:vanhtuan0409/stargazer.git: remote hung up unexpectedly
	at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:313)
	at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:153)
	at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:151)
	at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:103)
	at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1321)
	at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:213)
	... 22 more
Caused by: org.apache.sshd.common.SshException: No more authentication methods available
	at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:127)
	at org.apache.sshd.client.future.DefaultAuthFuture.verify(DefaultAuthFuture.java:39)
	at org.apache.sshd.client.future.DefaultAuthFuture.verify(DefaultAuthFuture.java:32)
	at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:43)
	at app.credentials.GRemoteSession.exec(GRemoteSession.kt:44)
	at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:296)
	... 27 more
Caused by: org.apache.sshd.common.SshException: No more authentication methods available
	at org.apache.sshd.client.session.ClientUserAuthService.tryNext(ClientUserAuthService.java:380)
	at org.apache.sshd.client.session.ClientUserAuthService.processUserAuth(ClientUserAuthService.java:315)
	at org.apache.sshd.client.session.ClientUserAuthService.process(ClientUserAuthService.java:252)
	at org.apache.sshd.common.session.helpers.CurrentService.process(CurrentService.java:109)
	at org.apache.sshd.common.session.helpers.AbstractSession.doHandleMessage(AbstractSession.java:594)
	at org.apache.sshd.common.session.helpers.AbstractSession.lambda$handleMessage$0(AbstractSession.java:525)
	at org.apache.sshd.common.util.threads.ThreadUtils.runAsInternal(ThreadUtils.java:66)
	at org.apache.sshd.common.session.helpers.AbstractSession.handleMessage(AbstractSession.java:524)
	at org.apache.sshd.common.session.helpers.AbstractSession.decode(AbstractSession.java:1644)
	at org.apache.sshd.common.session.helpers.AbstractSession.messageReceived(AbstractSession.java:485)
	at org.apache.sshd.common.session.helpers.AbstractSessionIoHandler.messageReceived(AbstractSessionIoHandler.java:64)
	at org.apache.sshd.common.io.nio2.Nio2Session.handleReadCycleCompletion(Nio2Session.java:371)
	at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:344)
	at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:339)
	at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.lambda$completed$0(Nio2CompletionHandler.java:38)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
	at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.completed(Nio2CompletionHandler.java:37)
	at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:129)
	at java.base/sun.nio.ch.Invoker$2.run(Invoker.java:221)
	at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:113)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

Desktop (please complete the following information):

  • OS:
Linux thinkpad 5.19.12-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 28 Sep 2022 13:21:25 +0000 x86_64 GNU/Linux
  • Java version
openjdk 18.0.2 2022-07-19
OpenJDK Runtime Environment (build 18.0.2+0)
OpenJDK 64-Bit Server VM (build 18.0.2+0, mixed mode)
  • Version: 1.0.1

General UX improvements

  • Buttons and interactable components should show a tooltip giving more details about their keybindings (related to #31 ) and their functionality (if required) .
  • Not all the dialogs handle TAB properly to jump over the different fields.
  • Some views should be closed when pressing ESC, even if they are not focused (related to #9 )
  • Tabs should be closed when clicking with the middle button.
  • Loading screen should give more detail about what's being executed and show progress whenever is possible.

Start window as floating

Currently Gitnuro starts as maximized, this is really jarring if your screen is big. For instance I have 3440x1440 ultrawide screens and by default it starts stretched across the entire screen.

Changing placement = WindowPlacement.Maximized,
to
placement = WindowPlacement.Floating,

on line 72 in App.kt makes for a much nicer experience on large screens.

Predefined commit messages

It will be better if there is a button that opens a list to let user select a predefined message in settings next to the "Commit", and support some variables such as date, time, changed file names or something like that

Project not building after cloning

Describe the bug
Cloned the project and try to build it

To Reproduce
Steps to reproduce the behavior:

  1. Click build after cloning it in IDE

Expected behavior
Project to build successfully

Screenshots
image

Desktop (please complete the following information):

  • OS: Linux
  • Version Fedora 36

Add support for singning commits with gpg

As a user I want to sing my commits with a GPG key.

Expected behaviour:

Gitnuro signs my commits with the configured GPG key.

Actual behaviour

Gitnuro fails to sing the commit with error "Signing service is not available".

Possible solution

Add org.eclipse.jgit:org.eclipse.jgit.gpg.bc to support signing commits.
Note: org.eclipse.jgit.gpg.bc will increase the compiled file/jar size considerably, see: https://wiki.eclipse.org/JGit/New_and_Noteworthy/5.8#GPG

LibSSH/LibSSH2 integration

Using Apache MINA SSHD is resulting quite problematic due to the lack of integration with the OS as well as the issues when having custom configuration in .ssh/config. The lack of support of the ssh-agent is something that would be solved ( #17 ) if we integrate LibSSH.

Discard specific line in diff

Thank you for your work ๐ŸŽ‰

Right click on content currently open the copy tooltip.
I wish to have the possibility to (un)stage/discard lines with a right click on a selected content ๐Ÿ™‚

Theming support

Loading the contents of Color.kt from a JSON file instead would enable theming!
I'd love to create a dark theme that is not blue.

Open repository from command line

Is your feature request related to a problem? Please describe.
I want to be able to open a git repository from command line, like:

gitnuro .
gitnuro path/to/repo

Describe the solution you'd like
Gitnuro opens given repository as active tab on UI

Describe alternatives you've considered
No one for now

Additional context
I use command line a lot, and is almost always more efficient to me to just type a new command to open a GUI application

[Feature] Remotes color

My previous issue put me on the wrong path about how Gitnuro is handling pushing to remotes.

So I am proposing this: a visual way to know which remote branch is tracked by our local branch.
I was thinking about colors, in the list on the left; every remote could have different color, and every local branch should have the same they track.

Thank you for reading ๐Ÿ™‚

[Feature] Push/Pull remote & branch selection

Correct me if I am wrong but I think when we click on the push button Gitnuro tries to push to every remotes.
But when we have multiple remotes, example: JetpackDuba/Gitnuro & Username/Gitnuro we probably just want to push to Username/Gitnuro and create a pull requests for JetpackDuba/Gitnuro

So it would be great to have the control over which remote(s) to push/pull and also have the control on which branch(es).

Thank you ๐Ÿ™‚

Submodules support

Support for submodules as well as hidding them from the uncommited changes list when necessary.

No refresh graph

I push my branch in remote by terminal.

And then I go back to Gitnuro. It wasn't updated its graph.

I think it needs a refresh button on top or check branches state when app gets user focus.

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.