diff --git a/README.md b/README.md
index 2bf6c6968..38a7e99fa 100644
--- a/README.md
+++ b/README.md
@@ -163,6 +163,14 @@ For **Linux** users:
sudo apt install sourcegit
```
+* `AOSC OS`: In addition to AMD64 and ARM64, support for LoongArch and RISC-V has been added.
+ ```shell
+ sudo oma install sourcegit
+ ```
+
+> [!NOTE]
+> RISC-V support is untested.
+
* `AppImage` files can be found on [AppImage hub](https://appimage.github.io/SourceGit/), `xdg-open` (`xdg-utils`) must be installed to support open native file manager.
* Make sure [git-credential-manager](https://github.com/git-ecosystem/git-credential-manager/releases) or [git-credential-libsecret](https://pkgs.org/search/?q=git-credential-libsecret) is installed on your Linux.
* Maybe you need to set environment variable `AVALONIA_SCREEN_SCALE_FACTORS`. See https://github.com/AvaloniaUI/Avalonia/wiki/Configuring-X11-per-monitor-DPI.
diff --git a/TRANSLATION.md b/TRANSLATION.md
index 2297d1157..47960c547 100644
--- a/TRANSLATION.md
+++ b/TRANSLATION.md
@@ -6,7 +6,7 @@ This document shows the translation status of each locale file in the repository
### 
-### 
+### 
Missing keys in de_DE.axaml
@@ -81,6 +81,7 @@ This document shows the translation status of each locale file in the repository
- Text.Init.CommandTip
- Text.Init.ErrorMessageTip
- Text.InteractiveRebase.NoVerify
+- Text.Launcher.NewVersion
- Text.Merge.Test
- Text.Merge.Test.NoConflicts
- Text.Merge.Test.UnknownError
@@ -102,6 +103,9 @@ This document shows the translation status of each locale file in the repository
- Text.Rebase.Test.UnknownError
- Text.Rebase.Test.WillCauseConflicts
- Text.RemoteCM.EnableAutoFetch
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.StashCM.ApplyFileChanges
- Text.StashCM.Branch
- Text.SubmoduleRevisionCompare
@@ -110,17 +114,36 @@ This document shows the translation status of each locale file in the repository
- Text.TagCM.Merge
- Text.UpdateSubmodules.Recursive
- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
+- Text.WorkingCopy.FilterChanges
- Text.Worktree.Branch
- Text.Worktree.Head
- Text.Worktree.Path
-### 
+### 
-### 
+
+Missing keys in el_GR.axaml
+
+- Text.Launcher.NewVersion
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
+- Text.WorkingCopy.FilterChanges
+
+
+
+### 
+
+
+Missing keys in es_ES.axaml
+
+- Text.WorkingCopy.FilterChanges
+
+
-### 
+### 
Missing keys in fr_FR.axaml
@@ -153,6 +176,7 @@ This document shows the translation status of each locale file in the repository
- Text.GitFlow.FinishWithRebase
- Text.GitFlow.StartAt
- Text.GitFlow.StartName
+- Text.Launcher.NewVersion
- Text.Merge.Test
- Text.Merge.Test.NoConflicts
- Text.Merge.Test.UnknownError
@@ -162,14 +186,18 @@ This document shows the translation status of each locale file in the repository
- Text.Rebase.Test.OK
- Text.Rebase.Test.UnknownError
- Text.Rebase.Test.WillCauseConflicts
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.TagCM.Checkout
- Text.TagCM.Merge
- Text.UpdateSubmodules.Recursive
- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
+- Text.WorkingCopy.FilterChanges
-### 
+### 
Missing keys in he_IL.axaml
@@ -202,6 +230,7 @@ This document shows the translation status of each locale file in the repository
- Text.GitFlow.FinishWithRebase
- Text.GitFlow.StartAt
- Text.GitFlow.StartName
+- Text.Launcher.NewVersion
- Text.Merge.Test
- Text.Merge.Test.NoConflicts
- Text.Merge.Test.UnknownError
@@ -211,196 +240,27 @@ This document shows the translation status of each locale file in the repository
- Text.Rebase.Test.OK
- Text.Rebase.Test.UnknownError
- Text.Rebase.Test.WillCauseConflicts
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.TagCM.Checkout
- Text.TagCM.Merge
- Text.UpdateSubmodules.Recursive
- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
+- Text.WorkingCopy.FilterChanges
-### 
+### 
Missing keys in id_ID.axaml
-- Text.About.ReleaseDate
-- Text.About.ReleaseNotes
-- Text.AIAssistant.Use
-- Text.App.HideOthers
-- Text.Apply.3Way
-- Text.Apply.Source
-- Text.Apply.Source.File
-- Text.Apply.Source.Clipboard
-- Text.Bisect.WaitingForCheckoutAnother
-- Text.Bisect.WaitingForFirstBad
-- Text.Blame.BlameOnPreviousRevision
-- Text.Blame.IgnoreWhitespace
-- Text.BranchCM.CompareTwo
-- Text.BranchCM.CompareWith
-- Text.BranchCM.CompareWithHead
-- Text.BranchCM.CompareWithSpecial
-- Text.BranchCM.CreatePR
-- Text.BranchCM.CreatePRForUpstream
-- Text.BranchCM.EditDescription
-- Text.ChangeCM.Merge
-- Text.ChangeCM.MergeExternal
-- Text.ChangeCM.ResetFileTo
-- Text.Checkout.WarnUpdatingSubmodules
-- Text.CheckoutBranchFromStash
-- Text.CheckoutBranchFromStash.Branch
-- Text.CheckoutBranchFromStash.Stash
-- Text.CheckoutDetached
-- Text.CheckoutDetached.Target
-- Text.CheckoutDetached.Warning
-- Text.Clone.Bookmark
-- Text.Clone.Group
-- Text.CommandPalette.Branches
-- Text.CommandPalette.BranchesAndTags
-- Text.CommandPalette.RepositoryActions
-- Text.CommandPalette.RevisionFiles
-- Text.CommitCM.CopyAuthorTime
-- Text.CommitCM.CopyCommitterTime
-- Text.CommitDetail.CollapseToBottom
-- Text.CommitMessageTextBox.Column
-- Text.CommitMessageTextBox.Placeholder
-- Text.Compare.Changes
-- Text.Compare.Commits
-- Text.Compare.Commits.LeftOnly
-- Text.Compare.Commits.RightOnly
-- Text.Compare.Commits.Tips
-- Text.Configure.CommitMessageTemplate.BuiltinVars
-- Text.Configure.Git.AskBeforeAutoUpdatingSubmodules
-- Text.Configure.Git.ConventionalTypesOverride
-- Text.Configure.Git.EnableRecursiveWhenAutoUpdatingSubmodules
-- Text.ConfigureCustomActionControls.StringFormatter
-- Text.ConfigureCustomActionControls.StringFormatter.Tip
-- Text.ConfigureCustomActionControls.StringValue.Tip
-- Text.ConfigureCustomActionControls.UseFriendlyName
-- Text.ConfirmEmptyCommit.StageSelectedThenCommit
-- Text.CopyAsPatch
-- Text.DealWithLocalChanges.DoNothing
-- Text.DeleteBranch.AskForRemote
-- Text.DeleteBranch.Force
-- Text.Diff.EmptyFile
-- Text.Diff.Submodule.UncommittedChanges
-- Text.Discard.IncludeModified
-- Text.EditBranchDescription
-- Text.EditBranchDescription.Target
-- Text.FileCM.CustomAction
-- Text.FileModeChange
-- Text.FileModeChange.Deleted
-- Text.FileModeChange.Directory
-- Text.FileModeChange.Executable
-- Text.FileModeChange.New
-- Text.FileModeChange.Normal
-- Text.FileModeChange.Submodule
-- Text.FileModeChange.Symlink
-- Text.FileModeChange.Unknown
-- Text.GitFlow.Finish
-- Text.GitFlow.FinishWithRebase
-- Text.GitFlow.StartAt
-- Text.GitFlow.StartName
-- Text.GitLFS.Locks.UnlockAllMyLocks
-- Text.GitLFS.Locks.UnlockAllMyLocks.Confirm
-- Text.GotoRevisionSelector
-- Text.Histories.HighlightsInGraph
-- Text.Histories.HighlightsInGraph.All
-- Text.Histories.HighlightsInGraph.CurrentBranchOnly
-- Text.Histories.HighlightsInGraph.CurrentBranchAndSelectedCommits
-- Text.Histories.HighlightsInGraph.SelectedCommitsOnly
-- Text.Histories.ShowColumns
-- Text.HistoriesDetailsStandalone
-- Text.HistoriesDetailsStandalone.CommitDetail
-- Text.HistoriesDetailsStandalone.RevisionCompare
-- Text.Hotkeys.Global.OpenLocalRepository
-- Text.Hotkeys.Global.ShowWorkspaceDropdownMenu
-- Text.Hotkeys.Global.Zoom
-- Text.Hotkeys.Repo.CreateBranch
-- Text.Hotkeys.Repo.GoToChild
-- Text.Hotkeys.Repo.GoToParent
-- Text.Hotkeys.Repo.OpenCommandPalette
-- Text.Hotkeys.Repo.ToggleHistoriesDetailPanel
-- Text.Init.CommandTip
-- Text.Init.ErrorMessageTip
-- Text.InteractiveRebase.NoVerify
-- Text.Launcher.Commands
-- Text.Launcher.OpenRepository
-- Text.Merge.Test
-- Text.Merge.Test.NoConflicts
-- Text.Merge.Test.UnknownError
-- Text.Merge.Test.WillCauseConflicts
-- Text.MergeConflictEditor.AcceptBoth.MineFirst
-- Text.MergeConflictEditor.AcceptBoth.TheirsFirst
-- Text.MergeConflictEditor.UseBoth
-- Text.MergeConflictEditor.AllResolved
-- Text.MergeConflictEditor.ConflictsRemaining
-- Text.MergeConflictEditor.Mine
-- Text.MergeConflictEditor.NextConflict
-- Text.MergeConflictEditor.PrevConflict
-- Text.MergeConflictEditor.Result
-- Text.MergeConflictEditor.SaveAndStage
-- Text.MergeConflictEditor.Theirs
-- Text.MergeConflictEditor.Title
-- Text.MergeConflictEditor.UnsavedChanges
-- Text.MergeConflictEditor.UseMine
-- Text.MergeConflictEditor.UseTheirs
-- Text.MergeConflictEditor.Undo
-- Text.No
-- Text.Open
-- Text.Open.SystemDefaultEditor
-- Text.OpenFile
-- Text.OpenLocalRepository
-- Text.OpenLocalRepository.Bookmark
-- Text.OpenLocalRepository.Group
-- Text.OpenLocalRepository.Path
-- Text.PageTabBar.Tab.MoveToWorkspace
-- Text.PageTabBar.Tab.Refresh
-- Text.Preferences.AI.AdditionalPrompt
-- Text.Preferences.AI.Model
-- Text.Preferences.AI.Model.AutoFetchAvailableModels
-- Text.Preferences.DiffMerge.DiffArgs
-- Text.Preferences.DiffMerge.DiffArgs.Tip
-- Text.Preferences.DiffMerge.MergeArgs
-- Text.Preferences.DiffMerge.MergeArgs.Tip
-- Text.Preferences.General.ShowRelativeTimeInGraph
-- Text.Preferences.General.Use24Hours
-- Text.Preferences.General.UseCompactBranchNames
-- Text.Preferences.Git.UseStashAndReapplyByDefault
-- Text.Preferences.Shell.Args
-- Text.Preferences.Shell.Args.Tip
-- Text.PushToNewBranch
-- Text.PushToNewBranch.Title
-- Text.Rebase.NoVerify
-- Text.Rebase.Test
-- Text.Rebase.Test.OK
-- Text.Rebase.Test.UnknownError
-- Text.Rebase.Test.WillCauseConflicts
-- Text.RemoteCM.EnableAutoFetch
-- Text.Repository.OpenAsFolder
-- Text.Repository.Resolve
-- Text.SelfUpdate.CurrentVersion
-- Text.SelfUpdate.ReleaseDate
-- Text.StashCM.ApplyFileChanges
-- Text.StashCM.Branch
-- Text.SubmoduleRevisionCompare
-- Text.SubmoduleRevisionCompare.OpenDetails
-- Text.TagCM.Checkout
-- Text.TagCM.CompareTwo
-- Text.TagCM.CompareWith
-- Text.TagCM.CompareWithHead
-- Text.TagCM.Merge
-- Text.UpdateSubmodules.Recursive
-- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
-- Text.WorkingCopy.Conflicts.Merge
-- Text.WorkingCopy.Conflicts.MergeExternal
-- Text.Worktree.Branch
-- Text.Worktree.Head
-- Text.Worktree.Path
-- Text.Yes
+- Text.WorkingCopy.FilterChanges
-### 
+### 
Missing keys in it_IT.axaml
@@ -478,6 +338,7 @@ This document shows the translation status of each locale file in the repository
- Text.Init.CommandTip
- Text.Init.ErrorMessageTip
- Text.InteractiveRebase.NoVerify
+- Text.Launcher.NewVersion
- Text.Merge.Test
- Text.Merge.Test.NoConflicts
- Text.Merge.Test.UnknownError
@@ -499,6 +360,9 @@ This document shows the translation status of each locale file in the repository
- Text.Rebase.Test.UnknownError
- Text.Rebase.Test.WillCauseConflicts
- Text.RemoteCM.EnableAutoFetch
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.SelfUpdate.CurrentVersion
- Text.SelfUpdate.ReleaseDate
- Text.StashCM.ApplyFileChanges
@@ -509,15 +373,27 @@ This document shows the translation status of each locale file in the repository
- Text.TagCM.Merge
- Text.UpdateSubmodules.Recursive
- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
+- Text.WorkingCopy.FilterChanges
- Text.Worktree.Branch
- Text.Worktree.Head
- Text.Worktree.Path
-### 
+### 
+
+
+Missing keys in ja_JP.axaml
+
+- Text.Launcher.NewVersion
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
+- Text.WorkingCopy.FilterChanges
+
+
-### 
+### 
Missing keys in ko_KR.axaml
@@ -544,14 +420,19 @@ This document shows the translation status of each locale file in the repository
- Text.GitFlow.FinishWithRebase
- Text.GitFlow.StartAt
- Text.GitFlow.StartName
+- Text.Launcher.NewVersion
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.TagCM.Checkout
- Text.TagCM.Merge
- Text.UpdateSubmodules.Recursive
- Text.WorkingCopy.AddToGitIgnore.UntrackedInSameFolder
+- Text.WorkingCopy.FilterChanges
-### 
+### 
Missing keys in pt_BR.axaml
@@ -615,7 +496,6 @@ This document shows the translation status of each locale file in the repository
- Text.CommitDetail.Changes.Count
- Text.CommitDetail.CollapseToBottom
- Text.CommitDetail.Files.Search
-- Text.CommitDetail.Info.Children
- Text.CommitDetail.Info.CopyEmail
- Text.CommitDetail.Info.CopyName
- Text.CommitDetail.Info.CopyNameAndEmail
@@ -750,6 +630,7 @@ This document shows the translation status of each locale file in the repository
- Text.InteractiveRebase.NoVerify
- Text.InteractiveRebase.ReorderTip
- Text.Launcher.Commands
+- Text.Launcher.NewVersion
- Text.Launcher.OpenRepository
- Text.Launcher.Pages
- Text.Launcher.Workspaces
@@ -806,7 +687,6 @@ This document shows the translation status of each locale file in the repository
- Text.Preferences.General.EnableCompactFolders
- Text.Preferences.General.ShowChangesPageByDefault
- Text.Preferences.General.ShowChangesTabInCommitDetailByDefault
-- Text.Preferences.General.ShowChildren
- Text.Preferences.General.ShowRelativeTimeInGraph
- Text.Preferences.General.ShowTagsInGraph
- Text.Preferences.General.Use24Hours
@@ -836,6 +716,9 @@ This document shows the translation status of each locale file in the repository
- Text.Repository.ClearStashes
- Text.Repository.Dashboard
- Text.Repository.FilterCommits
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.Repository.HistoriesLayout
- Text.Repository.HistoriesLayout.Horizontal
- Text.Repository.HistoriesLayout.Vertical
@@ -925,6 +808,7 @@ This document shows the translation status of each locale file in the repository
- Text.WorkingCopy.Conflicts.OpenExternalMergeToolAllConflicts
- Text.WorkingCopy.Conflicts.UseMine
- Text.WorkingCopy.Conflicts.UseTheirs
+- Text.WorkingCopy.FilterChanges
- Text.WorkingCopy.NoVerify
- Text.WorkingCopy.ResetAuthor
- Text.WorkingCopy.SignOff
@@ -938,7 +822,7 @@ This document shows the translation status of each locale file in the repository
### 
-### 
+### 
Missing keys in ta_IN.axaml
@@ -1146,6 +1030,7 @@ This document shows the translation status of each locale file in the repository
- Text.InteractiveRebase.NoVerify
- Text.InteractiveRebase.ReorderTip
- Text.Launcher.Commands
+- Text.Launcher.NewVersion
- Text.Launcher.OpenRepository
- Text.Launcher.Pages
- Text.Launcher.Workspaces
@@ -1221,6 +1106,9 @@ This document shows the translation status of each locale file in the repository
- Text.Repository.BranchSort.ByName
- Text.Repository.ClearStashes
- Text.Repository.Dashboard
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.Repository.MoreOptions
- Text.Repository.OpenAsFolder
- Text.Repository.Resolve
@@ -1294,6 +1182,7 @@ This document shows the translation status of each locale file in the repository
- Text.WorkingCopy.Conflicts.OpenExternalMergeToolAllConflicts
- Text.WorkingCopy.Conflicts.UseMine
- Text.WorkingCopy.Conflicts.UseTheirs
+- Text.WorkingCopy.FilterChanges
- Text.WorkingCopy.NoVerify
- Text.WorkingCopy.ResetAuthor
- Text.Worktree.Branch
@@ -1304,7 +1193,7 @@ This document shows the translation status of each locale file in the repository
-### 
+### 
Missing keys in uk_UA.axaml
@@ -1508,6 +1397,7 @@ This document shows the translation status of each locale file in the repository
- Text.InteractiveRebase.NoVerify
- Text.InteractiveRebase.ReorderTip
- Text.Launcher.Commands
+- Text.Launcher.NewVersion
- Text.Launcher.OpenRepository
- Text.Launcher.Pages
- Text.Launcher.Workspaces
@@ -1583,6 +1473,9 @@ This document shows the translation status of each locale file in the repository
- Text.Repository.BranchSort.ByName
- Text.Repository.ClearStashes
- Text.Repository.Dashboard
+- Text.Repository.FilterCommits.Collapse
+- Text.Repository.FilterCommits.Expand
+- Text.Repository.FilterCommits.Summary
- Text.Repository.MoreOptions
- Text.Repository.OpenAsFolder
- Text.Repository.Resolve
@@ -1652,6 +1545,7 @@ This document shows the translation status of each locale file in the repository
- Text.WorkingCopy.ConfirmCommitWithDetachedHead
- Text.WorkingCopy.Conflicts.Merge
- Text.WorkingCopy.Conflicts.MergeExternal
+- Text.WorkingCopy.FilterChanges
- Text.WorkingCopy.NoVerify
- Text.WorkingCopy.ResetAuthor
- Text.Worktree.Branch
diff --git a/VERSION b/VERSION
index 3f492ad1c..054d00cdb 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2026.15
\ No newline at end of file
+2026.17
\ No newline at end of file
diff --git a/build/resources/app/App.plist b/build/resources/app/App.plist
index ba6f40a2b..d20efa5e2 100644
--- a/build/resources/app/App.plist
+++ b/build/resources/app/App.plist
@@ -20,6 +20,21 @@
APPL
CFBundleShortVersionString
SOURCE_GIT_VERSION
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeName
+ Supported Folder
+ CFBundleTypeRole
+ Viewer
+ LSHandlerRank
+ Alternate
+ LSItemContentTypes
+
+ public.folder
+
+
+
NSHighResolutionCapable
diff --git a/src/AI/Agent.cs b/src/AI/Agent.cs
index e1b102724..a01839063 100644
--- a/src/AI/Agent.cs
+++ b/src/AI/Agent.cs
@@ -14,7 +14,7 @@ public Agent(Service service)
_service = service;
}
- public async Task GenerateCommitMessageAsync(string repo, string changeList, Action onUpdate, CancellationToken cancellation)
+ public async Task GenerateCommitMessageAsync(string repo, string currentBranch, string changeList, string amendParent, Action onUpdate, CancellationToken cancellation)
{
var chatClient = _service.GetChatClient();
if (chatClient == null)
@@ -28,6 +28,7 @@ public async Task GenerateCommitMessageAsync(string repo, string changeList, Act
.AppendLine("- Output the conventional commit message (with detail changes in list) directly. Do not explain your output nor introduce your answer.")
.AppendLine(_service.AdditionalPrompt)
.Append("Repository path: ").AppendLine(repo.Quoted())
+ .Append("Current branch: ").AppendLine(currentBranch.Quoted())
.AppendLine("Changed files ('A' means added, 'M' means modified, 'D' means deleted, 'T' means type changed, 'R' means renamed, 'C' means copied): ")
.Append(changeList);
@@ -94,7 +95,7 @@ public async Task GenerateCommitMessageAsync(string repo, string changeList, Act
foreach (var call in completion.ToolCalls)
{
- var result = await ChatTools.ProcessAsync(call, onUpdate);
+ var result = await ChatTools.ProcessAsync(call, repo, amendParent, onUpdate);
messages.Add(result);
}
diff --git a/src/AI/ChatTools.cs b/src/AI/ChatTools.cs
index b9e2f80c6..57a8e1459 100644
--- a/src/AI/ChatTools.cs
+++ b/src/AI/ChatTools.cs
@@ -15,10 +15,6 @@ public static class ChatTools
{
"type": "object",
"properties": {
- "repo": {
- "type": "string",
- "description": "The path to the repository."
- },
"file": {
"type": "string",
"description": "The path to the file."
@@ -28,28 +24,25 @@ public static class ChatTools
"description": "The path to the original file when it has been renamed or copied."
}
},
- "required": ["repo", "file"]
+ "required": ["file"]
}
""")), false);
- public static async Task ProcessAsync(ChatToolCall call, Action output)
+ public static async Task ProcessAsync(ChatToolCall call, string repo, string amendParent, Action output)
{
using var doc = JsonDocument.Parse(call.FunctionArguments);
if (call.FunctionName.Equals(GetDetailChangesInFile.FunctionName))
{
- var hasRepo = doc.RootElement.TryGetProperty("repo", out var repoPath);
var hasFile = doc.RootElement.TryGetProperty("file", out var filePath);
var hasOriginalFile = doc.RootElement.TryGetProperty("originalFile", out var originalFilePath);
- if (!hasRepo)
- throw new ArgumentException("repo", "The repo argument is required");
if (!hasFile)
throw new ArgumentException("file", "The file argument is required");
output?.Invoke($"Read changes in file: {filePath.GetString()}");
var orgFilePath = hasOriginalFile ? originalFilePath.GetString() : string.Empty;
- var rs = await new Commands.GetFileChangeForAI(repoPath.GetString(), filePath.GetString(), orgFilePath).ReadAsync();
+ var rs = await new Commands.GetFileChangeForAI(repo, filePath.GetString(), orgFilePath, amendParent).ReadAsync();
var message = rs.IsSuccess ? rs.StdOut : string.Empty;
return new ToolChatMessage(call.Id, message);
}
diff --git a/src/App.Extensions.cs b/src/App.Extensions.cs
index e6d8add25..08c1b5478 100644
--- a/src/App.Extensions.cs
+++ b/src/App.Extensions.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
+using System.Threading;
using Avalonia.Media;
namespace SourceGit
@@ -79,6 +80,12 @@ public static T Use(this T cmd, Models.ICommandLog log) where T : Commands.Co
cmd.Log = log;
return cmd;
}
+
+ public static T WithCancellation(this T cmd, CancellationToken token) where T : Commands.Command
+ {
+ cmd.CancellationToken = token;
+ return cmd;
+ }
}
public static class DirectoryInfoExtension
diff --git a/src/App.axaml.cs b/src/App.axaml.cs
index 3a7470dc1..a22f764d6 100644
--- a/src/App.axaml.cs
+++ b/src/App.axaml.cs
@@ -11,6 +11,7 @@
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Media.Fonts;
+using Avalonia.Platform;
using Avalonia.Styling;
using Avalonia.Threading;
@@ -101,8 +102,11 @@ public static async Task AskConfirmAsync(string message, Models.ConfirmBut
public static void SetLocale(string localeKey)
{
+ var locale = Models.Locale.Supported.Find(x => x.Key.Equals(localeKey, StringComparison.OrdinalIgnoreCase));
+ var finalLocaleKey = locale?.Key ?? "en_US";
+
if (Current is not App app ||
- app.Resources[localeKey] is not ResourceDictionary targetLocale ||
+ app.Resources[finalLocaleKey] is not ResourceDictionary targetLocale ||
targetLocale == app._activeLocale)
return;
@@ -472,6 +476,15 @@ private void TryLaunchAsNormal(IClassicDesktopStyleApplicationLifetime desktop)
Native.OS.SetupExternalTools();
Models.AvatarManager.Instance.Start();
+ if (this.TryGetFeature() is { } activatable)
+ {
+ activatable.Activated += (_, e) =>
+ {
+ if (e is FileActivatedEventArgs { Files: { Count: > 0 } } fileArgs)
+ _launcher?.TryOpenRepositoryFromPath(fileArgs.Files[0].Path.LocalPath);
+ };
+ }
+
string startupRepo = null;
if (desktop.Args is { Length: 1 })
{
@@ -524,6 +537,9 @@ private void TryLaunchAsNormal(IClassicDesktopStyleApplicationLifetime desktop)
#region Check for Updates
private void Check4Update(bool manually = false)
{
+ if (_launcher != null)
+ _launcher.NewVersion = null;
+
Task.Run(async () =>
{
try
@@ -537,23 +553,20 @@ private void Check4Update(bool manually = false)
if (ver == null)
return;
- // Check if already up-to-date.
- if (!ver.IsNewVersion)
+ if (manually)
{
- if (manually)
+ if (ver.IsNewVersion)
+ ShowSelfUpdateResult(ver);
+ else
ShowSelfUpdateResult(new Models.AlreadyUpToDate());
- return;
}
-
- // Should not check ignored tag if this is called manually.
- if (!manually)
+ else if (_launcher != null)
{
- var pref = ViewModels.Preferences.Instance;
- if (ver.TagName == pref.IgnoreUpdateTag)
+ if (!ver.IsNewVersion || ver.TagName == ViewModels.Preferences.Instance.IgnoreUpdateTag)
return;
- }
- ShowSelfUpdateResult(ver);
+ _launcher.NewVersion = ver;
+ }
}
catch (Exception e)
{
diff --git a/src/Commands/Branch.cs b/src/Commands/Branch.cs
index c80bdab92..6ed017841 100644
--- a/src/Commands/Branch.cs
+++ b/src/Commands/Branch.cs
@@ -48,9 +48,9 @@ public async Task DeleteLocalAsync(bool force)
return await ExecAsync().ConfigureAwait(false);
}
- public async Task DeleteRemoteAsync(string remote)
+ public async Task DeleteRemoteAsync(string remote, bool force)
{
- Args = $"branch -D -r {remote}/{_name}";
+ Args = $"branch {(force ? "-D" : "-d")} -r {remote}/{_name}";
return await ExecAsync().ConfigureAwait(false);
}
diff --git a/src/Commands/Command.cs b/src/Commands/Command.cs
index 94c7d84fa..977c81012 100644
--- a/src/Commands/Command.cs
+++ b/src/Commands/Command.cs
@@ -62,7 +62,7 @@ public async Task ExecAsync()
lock (capturedLock)
{
if (captured is { Process: { HasExited: false } })
- captured.Process.Kill();
+ captured.Process.Kill(true);
}
});
}
diff --git a/src/Commands/Diff.cs b/src/Commands/Diff.cs
index 6edeff540..89248ddc1 100644
--- a/src/Commands/Diff.cs
+++ b/src/Commands/Diff.cs
@@ -144,20 +144,23 @@ private void ParseLine(ArraySegment lineBytes)
if (line.Length == 0)
return;
- // If we are reading a chunk body, try to read the current line as body first (because
- // the number of chunk body is greater than the number of chunk indicator in most time.
+ // If we are reading a chunk-body, try to read the current line as chunk-body first (because
+ // there are usually more chunk-body lines than chunk-indicator lines).
if (_isInChunk)
{
- if (ParseChunkBodyLine(line, lineBytes[1..]))
+ if (ParseChunkBodyLine(line, lineBytes))
return;
ProcessInlineHighlights();
_isInChunk = false;
}
- // If the current line is not a chunk body, try to parse it as chunk indicator
+ // If the current line is not a chunk-body, try to parse it as chunk-indicator
if (ParseChunkStartLine(line))
+ {
+ _isInChunk = true;
return;
+ }
// Fallback to diff headers to support type-changed diff (multiple headers).
ParseDiffHeaderLine(line);
@@ -193,7 +196,6 @@ private bool ParseChunkStartLine(string line)
_newLine = int.Parse(match.Groups[2].Value);
_last = new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, null, 0, 0);
_result.TextDiff.Lines.Add(_last);
- _isInChunk = true;
return true;
}
@@ -204,13 +206,14 @@ private bool ParseChunkBodyLine(string line, ArraySegment lineBytes)
{
var prefix = line[0];
var content = line.Substring(1);
+ var rawContent = lineBytes[1..].ToArray();
if (ParseLFSChange(prefix, content))
return true;
if (prefix == PREFIX_DELETED)
{
_result.TextDiff.DeletedLines++;
- _last = new Models.TextDiffLine(Models.TextDiffLineType.Deleted, content, lineBytes.ToArray(), _oldLine, 0);
+ _last = new Models.TextDiffLine(Models.TextDiffLineType.Deleted, content, rawContent, _oldLine, 0);
_deleted.Add(_last);
_oldLine++;
return true;
@@ -219,7 +222,7 @@ private bool ParseChunkBodyLine(string line, ArraySegment lineBytes)
if (prefix == PREFIX_ADDED)
{
_result.TextDiff.AddedLines++;
- _last = new Models.TextDiffLine(Models.TextDiffLineType.Added, content, lineBytes.ToArray(), 0, _newLine);
+ _last = new Models.TextDiffLine(Models.TextDiffLineType.Added, content, rawContent, 0, _newLine);
_added.Add(_last);
_newLine++;
return true;
@@ -229,7 +232,7 @@ private bool ParseChunkBodyLine(string line, ArraySegment lineBytes)
{
ProcessInlineHighlights();
- _last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, content, lineBytes.ToArray(), _oldLine, _newLine);
+ _last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, content, rawContent, _oldLine, _newLine);
_result.TextDiff.Lines.Add(_last);
_oldLine++;
_newLine++;
diff --git a/src/Commands/GetFileChangeForAI.cs b/src/Commands/GetFileChangeForAI.cs
index 96ef162dc..128d0aba6 100644
--- a/src/Commands/GetFileChangeForAI.cs
+++ b/src/Commands/GetFileChangeForAI.cs
@@ -6,13 +6,16 @@ namespace SourceGit.Commands
{
public class GetFileChangeForAI : Command
{
- public GetFileChangeForAI(string repo, string file, string originalFile)
+ public GetFileChangeForAI(string repo, string file, string originalFile, string amendParent)
{
WorkingDirectory = repo;
Context = repo;
var builder = new StringBuilder();
- builder.Append("diff --no-color --no-ext-diff --diff-algorithm=minimal --cached -- ");
+ builder.Append("diff --no-color --no-ext-diff --diff-algorithm=minimal --cached ");
+ if (!string.IsNullOrEmpty(amendParent))
+ builder.Append(amendParent).Append(' ');
+ builder.Append("-- ");
if (!string.IsNullOrEmpty(originalFile) && !file.Equals(originalFile, StringComparison.Ordinal))
builder.Append(originalFile.Quoted()).Append(' ');
builder.Append(file.Quoted());
diff --git a/src/Commands/GitFlow.cs b/src/Commands/GitFlow.cs
index 56b56a923..0438d76de 100644
--- a/src/Commands/GitFlow.cs
+++ b/src/Commands/GitFlow.cs
@@ -47,24 +47,32 @@ public async Task InitAsync(string production, string develop, string feat
return await ExecAsync().ConfigureAwait(false);
}
- public async Task StartAsync(Models.GitFlowBranchType type, string name)
+ public async Task StartAsync(Models.GitFlowBranchType type, string name, Models.Branch based)
{
+ var builder = new StringBuilder();
+ builder.Append("flow ");
+
switch (type)
{
case Models.GitFlowBranchType.Feature:
- Args = $"flow feature start {name}";
+ builder.Append("feature");
break;
case Models.GitFlowBranchType.Release:
- Args = $"flow release start {name}";
+ builder.Append("release");
break;
case Models.GitFlowBranchType.Hotfix:
- Args = $"flow hotfix start {name}";
+ builder.Append("hotfix");
break;
default:
RaiseException("Bad git-flow branch type!!!");
return false;
}
+ builder.Append(" start ").Append(name);
+ if (based != null)
+ builder.Append(' ').Append(based.Name);
+
+ Args = builder.ToString();
return await ExecAsync().ConfigureAwait(false);
}
diff --git a/src/Commands/IsConflictResolved.cs b/src/Commands/IsConflictResolved.cs
deleted file mode 100644
index e5b752d35..000000000
--- a/src/Commands/IsConflictResolved.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Threading.Tasks;
-
-namespace SourceGit.Commands
-{
- public class IsConflictResolved : Command
- {
- public IsConflictResolved(string repo, Models.Change change)
- {
- var opt = new Models.DiffOption(change, true);
-
- WorkingDirectory = repo;
- Context = repo;
- Args = $"diff --no-color --no-ext-diff -a --ignore-cr-at-eol --check {opt}";
- }
-
- public bool GetResult()
- {
- return ReadToEnd().IsSuccess;
- }
-
- public async Task GetResultAsync()
- {
- var rs = await ReadToEndAsync().ConfigureAwait(false);
- return rs.IsSuccess;
- }
- }
-}
diff --git a/src/Commands/Pull.cs b/src/Commands/Pull.cs
index e121445ba..75b433e73 100644
--- a/src/Commands/Pull.cs
+++ b/src/Commands/Pull.cs
@@ -13,10 +13,13 @@ public Pull(string repo, string remote, string branch, bool useRebase)
Context = repo;
var builder = new StringBuilder(512);
- builder.Append("pull --verbose --progress ");
- if (useRebase)
- builder.Append("--rebase=true ");
- builder.Append(remote).Append(' ').Append(branch);
+ builder
+ .Append("pull --verbose --progress --rebase=")
+ .Append(useRebase ? "true" : "false")
+ .Append(' ')
+ .Append(remote)
+ .Append(' ')
+ .Append(branch);
Args = builder.ToString();
}
diff --git a/src/Commands/QueryCommitChildren.cs b/src/Commands/QueryCommitChildren.cs
deleted file mode 100644
index 7e7e88877..000000000
--- a/src/Commands/QueryCommitChildren.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace SourceGit.Commands
-{
- public class QueryCommitChildren : Command
- {
- public QueryCommitChildren(string repo, string commit, int max)
- {
- WorkingDirectory = repo;
- Context = repo;
- _commit = commit;
- Args = $"rev-list -{max} --parents --branches --remotes --ancestry-path ^{commit}";
- }
-
- public async Task> GetResultAsync()
- {
- var rs = await ReadToEndAsync().ConfigureAwait(false);
- var outs = new List();
- if (rs.IsSuccess)
- {
- var lines = rs.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
- foreach (var line in lines)
- {
- if (line.Contains(_commit))
- outs.Add(line.Substring(0, _commit.Length));
- }
- }
-
- return outs;
- }
-
- private string _commit;
- }
-}
diff --git a/src/Commands/QueryConflictFileState.cs b/src/Commands/QueryConflictFileState.cs
new file mode 100644
index 000000000..f9a52ee12
--- /dev/null
+++ b/src/Commands/QueryConflictFileState.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Diagnostics;
+using System.Threading.Tasks;
+
+namespace SourceGit.Commands
+{
+ public class QueryConflictFileState : Command
+ {
+ public QueryConflictFileState(string repo, Models.Change change)
+ {
+ var opt = new Models.DiffOption(change, true);
+
+ WorkingDirectory = repo;
+ Context = repo;
+ Args = $"diff --no-color --no-ext-diff --no-textconv --full-index --patch {opt}";
+ }
+
+ public async Task GetResultAsync()
+ {
+ try
+ {
+ using var proc = new Process();
+ proc.StartInfo = CreateGitStartInfo(true);
+ proc.Start();
+
+ var isBinary = false;
+ var tokenCount = 0;
+
+ while (await proc.StandardOutput.ReadLineAsync().ConfigureAwait(false) is { } line)
+ {
+ if (isBinary)
+ continue;
+
+ if (line.StartsWith("Binary files ", StringComparison.Ordinal))
+ isBinary = true;
+ else if (line.StartsWith("++<<<<<<<", StringComparison.Ordinal) ||
+ line.StartsWith("++=======", StringComparison.Ordinal) ||
+ line.StartsWith("++>>>>>>>", StringComparison.Ordinal))
+ tokenCount++;
+ }
+
+ await proc.WaitForExitAsync().ConfigureAwait(false);
+
+ if (isBinary)
+ return Models.ConflictFileState.UnmergedBinary;
+
+ return tokenCount == 0 ? Models.ConflictFileState.Resolved : Models.ConflictFileState.UnmergedText;
+ }
+ catch
+ {
+ return Models.ConflictFileState.Unknown;
+ }
+ }
+ }
+}
diff --git a/src/Commands/Statistics.cs b/src/Commands/Statistics.cs
index 2d43c7629..3c6ed017b 100644
--- a/src/Commands/Statistics.cs
+++ b/src/Commands/Statistics.cs
@@ -1,15 +1,28 @@
using System.IO;
+using System.Text;
using System.Threading.Tasks;
namespace SourceGit.Commands
{
public class Statistics : Command
{
- public Statistics(string repo, int max)
+ public Statistics(string repo, int max, Models.Branch specBranch)
{
WorkingDirectory = repo;
Context = repo;
- Args = $"log --date-order --branches --remotes -{max} --format=%ct$%aN±%aE";
+
+ var builder = new StringBuilder();
+ builder
+ .Append("log --date-order -")
+ .Append(max)
+ .Append(" --format=%ct$%aN±%aE ");
+
+ if (specBranch == null || string.IsNullOrEmpty(specBranch.FullName))
+ builder.Append("--branches --remotes");
+ else
+ builder.Append(specBranch.FullName);
+
+ Args = builder.ToString();
}
public async Task ReadAsync()
diff --git a/src/Models/Conflict.cs b/src/Models/Conflict.cs
index 112fdd9b7..fd9c69030 100644
--- a/src/Models/Conflict.cs
+++ b/src/Models/Conflict.cs
@@ -2,6 +2,14 @@
namespace SourceGit.Models
{
+ public enum ConflictFileState
+ {
+ Unknown,
+ UnmergedText,
+ UnmergedBinary,
+ Resolved
+ }
+
public enum ConflictPanelType
{
Ours,
diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs
index 1ca448525..7f93cf8bd 100644
--- a/src/Models/ExternalTool.cs
+++ b/src/Models/ExternalTool.cs
@@ -84,30 +84,18 @@ public class VisualStudioInstance
public class JetBrainsState
{
- [JsonPropertyName("version")]
- public int Version { get; set; } = 0;
- [JsonPropertyName("appVersion")]
- public string AppVersion { get; set; } = string.Empty;
[JsonPropertyName("tools")]
public List Tools { get; set; } = new List();
}
public class JetBrainsTool
{
- [JsonPropertyName("channelId")]
- public string ChannelId { get; set; }
- [JsonPropertyName("toolId")]
- public string ToolId { get; set; }
[JsonPropertyName("productCode")]
public string ProductCode { get; set; }
- [JsonPropertyName("tag")]
- public string Tag { get; set; }
[JsonPropertyName("displayName")]
public string DisplayName { get; set; }
[JsonPropertyName("displayVersion")]
public string DisplayVersion { get; set; }
- [JsonPropertyName("buildNumber")]
- public string BuildNumber { get; set; }
[JsonPropertyName("installLocation")]
public string InstallLocation { get; set; }
[JsonPropertyName("launchCommand")]
@@ -198,8 +186,7 @@ public void Cursor(Func platformFinder)
public void FindJetBrainsFromToolbox(Func platformFinder)
{
- var exclude = new List { "fleet", "dotmemory", "dottrace", "resharper-u", "androidstudio" };
- var supportedIcons = new List { "CL", "DB", "DL", "DS", "GO", "JB", "PC", "PS", "PY", "QA", "QD", "RD", "RM", "RR", "WRS", "WS" };
+ var supported = new List { "CL", "DB", "DL", "DS", "GO", "JB", "PC", "PS", "PY", "QA", "QD", "RD", "RM", "RR", "WRS", "WS" };
var state = Path.Combine(platformFinder(), "state.json");
if (File.Exists(state))
{
@@ -209,12 +196,12 @@ public void FindJetBrainsFromToolbox(Func platformFinder)
var stateData = JsonSerializer.Deserialize(stream, JsonCodeGen.Default.JetBrainsState);
foreach (var tool in stateData.Tools)
{
- if (exclude.Contains(tool.ToolId.ToLowerInvariant()))
+ if (!supported.Contains(tool.ProductCode))
continue;
Tools.Add(new ExternalTool(
$"{tool.DisplayName} {tool.DisplayVersion}",
- supportedIcons.Contains(tool.ProductCode) ? $"JetBrains/{tool.ProductCode}" : "JetBrains/JB",
+ $"JetBrains/{tool.ProductCode}",
Path.Combine(tool.InstallLocation, tool.LaunchCommand),
null,
true));
diff --git a/src/Models/IpcChannel.cs b/src/Models/IpcChannel.cs
index 702f0630b..86c8167ae 100644
--- a/src/Models/IpcChannel.cs
+++ b/src/Models/IpcChannel.cs
@@ -1,6 +1,8 @@
using System;
using System.IO;
using System.IO.Pipes;
+using System.Security.Cryptography;
+using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -19,7 +21,7 @@ public IpcChannel()
_singletonLock = File.Open(Path.Combine(Native.OS.DataDir, "process.lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
IsFirstInstance = true;
_server = new NamedPipeServerStream(
- "SourceGitIPCChannel" + Environment.UserName,
+ GetPipeName(),
PipeDirection.In,
-1,
PipeTransmissionMode.Byte,
@@ -37,7 +39,7 @@ public void SendToFirstInstance(string cmd)
{
try
{
- using (var client = new NamedPipeClientStream(".", "SourceGitIPCChannel" + Environment.UserName, PipeDirection.Out, PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly))
+ using (var client = new NamedPipeClientStream(".", GetPipeName(), PipeDirection.Out, PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly))
{
client.Connect(1000);
if (!client.IsConnected)
@@ -67,6 +69,19 @@ public void Dispose()
_singletonLock?.Dispose();
}
+ private static string GetPipeName()
+ {
+ // SourceGit does not support multiple instances on macOS, so we can use a fixed pipe name for macOS.
+ if (OperatingSystem.IsMacOS())
+ return "SourceGit";
+
+ // Windows and Linux can have multiple instances of SourceGit running (portable-mode), so we need to generate a unique pipe name based on the data directory.
+ var dataDir = Native.OS.DataDir.Replace('\\', '/').TrimEnd('/');
+ var hashStr = $"{Environment.UserName}_{dataDir}";
+ var hash = Convert.ToHexString(SHA256.HashData(Encoding.UTF8.GetBytes(hashStr))).Substring(0, 10);
+ return $"SG_{hash}";
+ }
+
private async void StartServer()
{
using var reader = new StreamReader(_server);
diff --git a/src/Models/RepositoryUIStates.cs b/src/Models/RepositoryUIStates.cs
index 93cb6fc09..723fe900b 100644
--- a/src/Models/RepositoryUIStates.cs
+++ b/src/Models/RepositoryUIStates.cs
@@ -231,6 +231,12 @@ public AvaloniaList HistoryFilters
set;
} = [];
+ public bool IsHistoryFiltersCollapsed
+ {
+ get;
+ set;
+ } = false;
+
public List RecentCommitMessages
{
get;
diff --git a/src/Models/ShellOrTerminal.cs b/src/Models/ShellOrTerminal.cs
index fa818bfe7..e8e585475 100644
--- a/src/Models/ShellOrTerminal.cs
+++ b/src/Models/ShellOrTerminal.cs
@@ -44,7 +44,10 @@ static ShellOrTerminal()
new ShellOrTerminal("iterm2", "iTerm", "iTerm"),
new ShellOrTerminal("warp", "Warp", "Warp"),
new ShellOrTerminal("ghostty", "Ghostty", "Ghostty"),
- new ShellOrTerminal("kitty", "kitty", "kitty")
+ new ShellOrTerminal("kitty", "kitty", "kitty"),
+ new ShellOrTerminal("otty", "Otty", "Otty"),
+ new ShellOrTerminal("cmux", "cmux", "cmux"),
+ new ShellOrTerminal("mux0", "mux0", "mux0"),
};
}
else
diff --git a/src/Native/Linux.cs b/src/Native/Linux.cs
index 0309a6562..a28d88ebe 100644
--- a/src/Native/Linux.cs
+++ b/src/Native/Linux.cs
@@ -48,25 +48,7 @@ public string GetDataDir()
// Runtime data dir: ~/.sourcegit
var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
- var dataDir = Path.Combine(home, ".sourcegit");
- if (Directory.Exists(dataDir))
- return dataDir;
-
- // Migrate old data: ~/.config/SourceGit
- var oldDataDir = Path.Combine(home, ".config", "SourceGit");
- if (Directory.Exists(oldDataDir))
- {
- try
- {
- Directory.Move(oldDataDir, dataDir);
- }
- catch
- {
- // Ignore errors
- }
- }
-
- return dataDir;
+ return Path.Combine(home, ".sourcegit");
}
public string FindGitExecutable()
diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs
index fd8f31c9b..2ec98ca40 100644
--- a/src/Native/Windows.cs
+++ b/src/Native/Windows.cs
@@ -127,11 +127,11 @@ public string FindTerminal(Models.ShellOrTerminal shell)
finder.VSCode(FindVSCode);
finder.VSCodeInsiders(FindVSCodeInsiders);
finder.VSCodium(FindVSCodium);
+ FindVisualStudio(finder);
finder.Cursor(() => Path.Combine(localAppDataDir, @"Programs\Cursor\Cursor.exe"));
finder.FindJetBrainsFromToolbox(() => Path.Combine(localAppDataDir, @"JetBrains\Toolbox"));
finder.SublimeText(FindSublimeText);
finder.Zed(FindZed);
- FindVisualStudio(finder);
return finder.Tools;
}
diff --git a/src/Resources/Images/ShellIcons/cmux.png b/src/Resources/Images/ShellIcons/cmux.png
new file mode 100644
index 000000000..b847bbb70
Binary files /dev/null and b/src/Resources/Images/ShellIcons/cmux.png differ
diff --git a/src/Resources/Images/ShellIcons/mux0.png b/src/Resources/Images/ShellIcons/mux0.png
new file mode 100644
index 000000000..e16b37400
Binary files /dev/null and b/src/Resources/Images/ShellIcons/mux0.png differ
diff --git a/src/Resources/Images/ShellIcons/otty.png b/src/Resources/Images/ShellIcons/otty.png
new file mode 100644
index 000000000..e2ce5897f
Binary files /dev/null and b/src/Resources/Images/ShellIcons/otty.png differ
diff --git a/src/Resources/Locales/de_DE.axaml b/src/Resources/Locales/de_DE.axaml
index 6da606aee..57a344c63 100644
--- a/src/Resources/Locales/de_DE.axaml
+++ b/src/Resources/Locales/de_DE.axaml
@@ -164,7 +164,6 @@
Submodul
INFORMATION
AUTOR
- NACHFOLGER
COMMITTER
Prüfe Refs, die diesen Commit enthalten
COMMIT ENTHALTEN IN
@@ -610,7 +609,6 @@ $1, $2, … Werte der Eingabe-Steuerelemente
Commit-Historie
Standardmäßig ‚ÄNDERUNGEN‘-Ansicht anzeigen
Standardmäßig Registerkarte ‚ÄNDERUNGEN‘ in Commit-Details anzeigen
- Zeige Nachfolger in den Commit-Details
Zeige Tags im Commit-Verlauf
Längenvorgabe für Commit-Nachrichten
Standard-Avatar im GitHub-Stil generieren
diff --git a/src/Resources/Locales/el_GR.axaml b/src/Resources/Locales/el_GR.axaml
index 0b537616e..4de2a9003 100644
--- a/src/Resources/Locales/el_GR.axaml
+++ b/src/Resources/Locales/el_GR.axaml
@@ -188,7 +188,6 @@
Υπομονάδα
ΠΛΗΡΟΦΟΡΙΕΣ
ΣΥΓΓΡΑΦΕΑΣ
- ΑΠΟΓΟΝΟΙ
COMMITTER
Έλεγχος refs που περιέχουν αυτό το commit
ΤΟ COMMIT ΠΕΡΙΕΧΕΤΑΙ ΣΕ
@@ -691,7 +690,6 @@
Commits ιστορικού
Εμφάνιση της σελίδας `ΤΟΠΙΚΕΣ ΑΛΛΑΓΕΣ` από προεπιλογή
Εμφάνιση της καρτέλας `ΑΛΛΑΓΕΣ` στις λεπτομέρειες commit από προεπιλογή
- Εμφάνιση απογόνων στις λεπτομέρειες commit
Εμφάνιση σχετικού χρόνου στο γράφημα commit
Εμφάνιση ετικετών στο γράφημα commit
Μήκος οδηγού θέματος
diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index c997f8221..676bd57a0 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -184,7 +184,6 @@
Submodule
INFORMATION
AUTHOR
- CHILDREN
COMMITTER
Check refs that contains this commit
COMMIT IS CONTAINED BY
@@ -580,6 +579,7 @@
Commands
ERROR
NOTICE
+ New Version Available
Open Repositories
Tabs
Workspaces
@@ -687,7 +687,6 @@
History Commits
Show `LOCAL CHANGES` page by default
Show `CHANGES` tab in commit detail by default
- Show children in the commit details
Show relative time in commit graph
Show tags in commit graph
Subject Guide Length
@@ -800,9 +799,12 @@
Open in File Browser
Search Branches/Tags/Submodules
Visibility in Graph
+ Collapse Filters
Unset
Hide in commit graph
+ Expand Filters
Filter in commit graph
+ filter(s) enabled
LAYOUT
Horizontal
Vertical
@@ -1007,6 +1009,7 @@
FILE CONFLICTS ARE RESOLVED
USE MINE
USE THEIRS
+ Filter Changes...
INCLUDE UNTRACKED FILES
NO RECENT INPUT MESSAGES
NO COMMIT TEMPLATES
diff --git a/src/Resources/Locales/es_ES.axaml b/src/Resources/Locales/es_ES.axaml
index 5f374f093..ac2e7d76f 100644
--- a/src/Resources/Locales/es_ES.axaml
+++ b/src/Resources/Locales/es_ES.axaml
@@ -188,7 +188,6 @@
Submódulo
INFORMACIÓN
AUTOR
- HIJOS
COMMITTER
Ver refs que contienen este commit
COMMIT ESTÁ CONTENIDO EN
@@ -584,6 +583,7 @@
Comandos
ERROR
AVISO
+ Nueva Versión Disponible
Abrir Repositorios
Páginas
Espacios de trabajo
@@ -691,7 +691,6 @@
Commits en el historial
Mostrar la página `CAMBIOS LOCALES` por defecto
Mostrar pestaña de `CAMBIOS` en los detalles del commit por defecto
- Mostrar hijos en los detalles de commit
Mostrar hora relativa en el gráfico de commits
Mostrar etiquetas en el gráfico de commit
Longitud de la guía del asunto
@@ -804,9 +803,12 @@
Abrir en el Explorador
Buscar Ramas/Etiquetas/Submódulos
Visibilidad en el Gráfico
+ Colapsar Filtros
Desestablecer
Ocultar en el Gráfico de Commits
+ Expandir Filtros
Filtrar en el Gráfico de Commits
+ filtro(s) activado(s)
DISPOSICIÓN
Horizontal
Vertical
diff --git a/src/Resources/Locales/fr_FR.axaml b/src/Resources/Locales/fr_FR.axaml
index 8227387c9..a094fb2ae 100644
--- a/src/Resources/Locales/fr_FR.axaml
+++ b/src/Resources/Locales/fr_FR.axaml
@@ -178,7 +178,6 @@
Sous-module
INFORMATIONS
AUTEUR
- ENFANTS
COMMITTER
Vérifier les références contenant ce commit
LE COMMIT EST CONTENU PAR
@@ -659,7 +658,6 @@
Historique de commits
Afficher la page 'CHANGEMENTS LOCAUX' par défaut
Afficher l'onglet 'CHANGEMENTS' dans les détails du commit par défaut
- Afficher les enfants dans les détails du commit
Afficher le temps relatif dans le graphe de commits
Afficher les tags dans le graphique des commits
Guide de longueur du sujet
diff --git a/src/Resources/Locales/he_IL.axaml b/src/Resources/Locales/he_IL.axaml
index 66430604c..64346545d 100644
--- a/src/Resources/Locales/he_IL.axaml
+++ b/src/Resources/Locales/he_IL.axaml
@@ -178,7 +178,6 @@
Submodule
מידע
AUTHOR
- צאצאים
COMMITTER
בדוק refs המכילים את ה־commit הזה
ה־COMMIT כלול ב־
@@ -659,7 +658,6 @@
Commits בהיסטוריה
הצג דף `LOCAL CHANGES` כברירת מחדל
הצג לשונית `CHANGES` בפרטי ה־commit כברירת מחדל
- הצג צאצאים בפרטי ה־commit
הצג זמן יחסי בגרף ה־commits
הצג tags בגרף ה־commits
אורך מנחה ל־Subject
diff --git a/src/Resources/Locales/id_ID.axaml b/src/Resources/Locales/id_ID.axaml
index e5bf64e6e..383ae256d 100644
--- a/src/Resources/Locales/id_ID.axaml
+++ b/src/Resources/Locales/id_ID.axaml
@@ -5,6 +5,8 @@
Tentang
Tentang SourceGit
+ Tanggal Rilis: {0}
+ Catatan Rilis
Klien Git GUI Opensource & Gratis
Tambahkan Berkas ke Abaikan
Pola:
@@ -23,10 +25,16 @@
Model
BUAT ULANG
Gunakan AI untuk membuat pesan commit
+ Gunakan
Sembunyikan SourceGit
+ Sembunyikan Lainnya
Tampilkan Semua
+ Merge 3 Arah
Pilih berkas .patch untuk diterapkan
Abaikan perubahan whitespace
+ Sumber:
+ Berkas
+ Papan Klip
Terapkan Patch
Whitespace:
Terapkan Stash
@@ -50,15 +58,26 @@
Buruk
Baik
Lewati
+ Bisect sedang berjalan. Checkout commit lain, lalu tandai sebagai baik atau buruk.
+ Bisect sedang berjalan. Tandai commit saat ini sebagai buruk atau checkout commit lain, lalu tandai sebagai buruk.
Bisect berjalan. Tandai commit saat ini sebagai baik atau buruk dan checkout yang lain.
Bisect berjalan. Apakah HEAD saat ini baik atau buruk?
Blame
+ Blame pada Revisi Sebelumnya
+ Abaikan perubahan whitespace
BLAME PADA BERKAS INI TIDAK DIDUKUNG!!!
Checkout ${0}$...
+ Bandingkan 2 branch yang dipilih
+ Bandingkan dengan...
+ Bandingkan dengan HEAD
+ Bandingkan dengan ${0}$
Salin Nama Branch
+ Buat PR...
+ Buat PR untuk upstream ${0}$...
Aksi Kustom
Hapus ${0}$...
Hapus {0} branch yang dipilih
+ Sunting deskripsi ${0}$...
Fast-Forward ke ${0}$
Fetch ${0}$ ke ${1}$...
Git Flow - Selesaikan ${0}$
@@ -86,6 +105,9 @@
Reset ke Revisi Parent
Reset ke Revisi Ini
Buat pesan commit
+ Merge (Bawaan)
+ Merge (Eksternal)
+ Reset Berkas ke ${0}$
UBAH MODE TAMPILAN
Tampilkan sebagai Daftar Berkas dan Direktori
Tampilkan sebagai Daftar Jalur
@@ -97,8 +119,15 @@
Perubahan Lokal:
Branch:
HEAD saat ini mengandung commit yang tidak terhubung ke branch/tag manapun! Lanjutkan?
+ Submodule berikut perlu diperbarui:{0}Apakah Anda ingin memperbaruinya?
Checkout & Fast-Forward
Fast-Forward ke:
+ Checkout Branch dari Stash
+ Branch Baru:
+ Stash:
+ Checkout Commit atau Tag
+ Target:
+ Peringatan: Setelah proses ini, HEAD akan terlepas
Cherry Pick
Tambahkan sumber ke pesan commit
Commit:
@@ -110,6 +139,8 @@
Clone Repositori Remote
Parameter Tambahan:
Argumen tambahan untuk clone repositori. Opsional.
+ Markah:
+ Grup:
Nama Lokal:
Nama repositori. Opsional.
Folder Parent:
@@ -117,14 +148,20 @@
URL Repositori:
TUTUP
Editor
+ Branch
+ Branch & Tag
+ Aksi Kustom Repositori
+ Berkas Revisi
Checkout Commit
Cherry-Pick Commit
Cherry-Pick ...
Bandingkan dengan HEAD
Bandingkan dengan Worktree
Author
+ Waktu Penulis
Pesan
Committer
+ Waktu Committer
SHA
Subjek
Aksi Kustom
@@ -144,13 +181,13 @@
PERUBAHAN
berkas berubah
Cari Perubahan...
+ Ciutkan detail
BERKAS
Berkas LFS
Cari Berkas...
Submodule
INFORMASI
AUTHOR
- CHILDREN
COMMITTER
Periksa ref yang mengandung commit ini
COMMIT TERKANDUNG DALAM
@@ -165,10 +202,25 @@
SHA
Penanda Tangan:
Buka di Browser
+ KOL
+ Masukkan pesan commit. Gunakan baris kosong untuk memisahkan subjek dan deskripsi!
SUBJEK
Perbandingan
+ PERUBAHAN
+ COMMIT
+ COMMIT HANYA DI KIRI
+ COMMIT HANYA DI KANAN
+ Tips: Anda dapat melakukan cherry-pick pada commit yang dipilih jika sisi lainnya adalah HEAD (melalui menu konteks).
Konfigurasi Repositori
TEMPLATE COMMIT
+ Parameter bawaan:
+
+ ${branch_name} Nama branch lokal saat ini.
+ ${files_num} Jumlah berkas yang berubah
+ ${files} Jalur berkas yang berubah
+ ${files:N} Maksimal N jalur berkas yang berubah
+ ${pure_files} Seperti ${files}, tetapi hanya nama berkas
+ ${pure_files:N} Seperti ${files:N}, tetapi tanpa folder
Konten Template:
Nama Template:
AKSI KUSTOM
@@ -198,9 +250,12 @@
Alamat Email
Alamat email
GIT
+ Tanyakan sebelum memperbarui submodule secara otomatis
Fetch remote secara otomatis
Menit
+ Tipe Conventional Commit
Remote Default
+ Aktifkan `--recursive` saat memperbarui submodule secara otomatis
Mode Merge Pilihan
ISSUE TRACKER
Tambah Aturan Azure DevOps
@@ -233,7 +288,11 @@
Label:
Opsi:
Gunakan '|' sebagai pembatas untuk opsi
+ Pemformat String:
+ Opsional. Digunakan untuk memformat string keluaran. Diabaikan jika input kosong. Gunakan `${VALUE}` untuk mewakili string input.
+ Variabel bawaan ${REPO}, ${REMOTE}, ${BRANCH}, ${BRANCH_FRIENDLY_NAME}, ${SHA}, ${FILE}, dan ${TAG} tetap tersedia di sini
Jenis:
+ Gunakan Nama Ramah:
Workspace
Warna
Nama
@@ -241,6 +300,7 @@
LANJUTKAN
Commit kosong terdeteksi! Lanjutkan (--allow-empty)?
STAGE SEMUA & COMMIT
+ STAGE PILIHAN & COMMIT
Commit kosong terdeteksi! Lanjutkan (--allow-empty) atau stage semua lalu commit?
Perlu Mulai Ulang
Anda perlu memulai ulang aplikasi ini untuk menerapkan perubahan.
@@ -253,6 +313,7 @@
Jenis Perubahan:
Salin
Salin Semua Teks
+ Salin sebagai Patch
Salin Jalur Lengkap
Salin Jalur
Buat Branch...
@@ -278,12 +339,15 @@
Tahan Ctrl untuk memulai langsung
Potong
Buang
+ Jangan Lakukan Apa Pun
Stash & Terapkan Ulang
De-initialize Submodule
Paksa de-init meski mengandung perubahan lokal.
Submodule:
Hapus Branch
+ Apakah Anda juga ingin menghapus remote branch berikut?
Branch:
+ Paksa hapus meskipun berisi commit yang belum di-merge
Anda akan menghapus remote branch!!!
Hapus Beberapa Branch
Anda akan menghapus beberapa branch sekaligus. Pastikan untuk memeriksa ulang sebelum bertindak!
@@ -304,6 +368,7 @@
Tag:
Hapus dari repositori remote
DIFF BINARY
+ BERKAS KOSONG
Perbedaan Pertama
Abaikan Perubahan Whitespace
BLEND
@@ -323,6 +388,7 @@
PERUBAHAN SUBMODULE
DIHAPUS
BARU
+ + {0} Perubahan Belum Di-commit
Tukar
Syntax Highlighting
Word Wrap Baris
@@ -339,9 +405,12 @@
Semua perubahan lokal dalam working copy.
Perubahan:
Termasuk berkas yang diabaikan
+ Sertakan berkas yang diubah/dihapus
Termasuk berkas yang tidak dilacak
{0} perubahan akan dibuang
Anda tidak dapat membatalkan aksi ini!!!
+ Sunting Deskripsi Branch
+ Target:
Bookmark:
Nama Baru:
Target:
@@ -356,6 +425,7 @@
Remote:
Fetch Perubahan dari Remote
Asumsikan tidak berubah
+ Aksi Kustom
Buang...
Buang {0} berkas...
Selesaikan Menggunakan ${0}$
@@ -371,14 +441,25 @@
Riwayat Berkas
PERUBAHAN
KONTEN
+ Perubahan mode berkas:
+ Mode berkas yang dihapus:
+ Direktori
+ Dapat Dieksekusi
+ Mode berkas baru:
+ Normal
+ Submodule
+ Symlink
+ Tidak Diketahui
Git-Flow
Branch Development:
Feature:
Prefix Feature:
+ Selesaikan ${0}$
FLOW - Selesaikan Feature
FLOW - Selesaikan Hotfix
FLOW - Selesaikan Release
Target:
+ Rebase sebelum merge
Squash saat merge
Hotfix:
Prefix Hotfix:
@@ -387,10 +468,12 @@
Branch Production:
Release:
Prefix Release:
+ Mulai dari:
Mulai Feature...
FLOW - Mulai Feature
Mulai Hotfix...
FLOW - Mulai Hotfix
+ Nama:
Masukkan nama
Mulai Release...
FLOW - Mulai Release
@@ -410,6 +493,8 @@
Hanya tampilkan lock saya
Lock LFS
Unlock
+ Buka semua lock saya
+ Yakin ingin membuka lock semua berkas yang Anda kunci?
Paksa Unlock
Prune
Jalankan `git lfs prune` untuk menghapus berkas LFS lama dari penyimpanan lokal
@@ -422,16 +507,26 @@
Remote:
Track berkas bernama '{0}'
Track semua berkas *{0}
+ Pilih Commit
RIWAYAT
AUTHOR
WAKTU AUTHOR
WAKTU COMMIT
GRAFIK & SUBJEK
SHA
+ SOROTAN DALAM GRAFIK
+ Semua
+ Hanya Branch Saat Ini
+ Branch Saat Ini & Commit Terpilih
+ Hanya Commit Terpilih
DIPILIH {0} COMMIT
+ TAMPILKAN KOLOM
Tahan 'Ctrl' atau 'Shift' untuk memilih beberapa commit.
Tahan ⌘ atau ⇧ untuk memilih beberapa commit.
TIPS:
+ Buka di jendela terpisah
+ Detail Commit
+ Perbandingan Revisi
Referensi Shortcut Keyboard
GLOBAL
Clone repositori baru
@@ -439,18 +534,26 @@
Ke tab berikutnya
Ke tab sebelumnya
Buat tab baru
+ Buka repositori lokal
Buka dialog Preferensi
+ Tampilkan menu tarik-turun workspace
Ganti tab aktif
+ Perbesar/perkecil
REPOSITORI
Commit perubahan yang di-stage
Commit dan push perubahan yang di-stage
Stage semua perubahan dan commit
+ Buat branch baru
Fetch, langsung dimulai
Mode dashboard (Default)
+ Ke turunan commit yang dipilih
+ Ke induk commit yang dipilih
+ Buka palet perintah
Mode pencarian commit
Pull, langsung dimulai
Push, langsung dimulai
Paksa muat ulang repositori ini
+ Bentangkan/Ciutkan panel detail di `RIWAYAT`
Pindah ke 'Changes'
Pindah ke 'History'
Pindah ke 'Stashes'
@@ -458,6 +561,8 @@
Stage
Unstage
Inisialisasi Repositori
+ Apakah Anda ingin menjalankan perintah `git init` di jalur ini?
+ Gagal membuka repositori. Alasan:
Jalur:
Cherry-Pick sedang berjalan.
Memproses commit
@@ -469,13 +574,17 @@
Melakukan revert commit
Interactive Rebase
Stash & terapkan ulang perubahan lokal
+ Lewati hook pre-rebase
Pada:
Drag-drop untuk mengurutkan ulang commit
Branch Target:
Salin Link
Buka di Browser
+ Perintah
ERROR
PEMBERITAHUAN
+ Versi Baru Tersedia
+ Buka Repositori
Tab
Workspace
Merge Branch
@@ -483,6 +592,26 @@
Ke:
Opsi Merge:
Sumber:
+ Menguji merge...
+ Merge dapat dilakukan tanpa konflik
+ Terjadi kesalahan yang tidak diketahui saat menguji merge
+ Merge akan menyebabkan konflik
+ Milik Saya dahulu, lalu Milik Mereka
+ Milik Mereka dahulu, lalu Milik Saya
+ GUNAKAN KEDUANYA
+ Semua konflik terselesaikan
+ {0} konflik tersisa
+ MILIK SAYA
+ Konflik Berikutnya
+ Konflik Sebelumnya
+ HASIL
+ SIMPAN & STAGE
+ MILIK MEREKA
+ Konflik Merge
+ Buang perubahan yang belum disimpan?
+ GUNAKAN MILIK SAYA
+ GUNAKAN MILIK MEREKA
+ URUNGKAN
Merge (Beberapa)
Commit semua perubahan
Strategi:
@@ -493,9 +622,17 @@
Pindahkan Node Repositori
Pilih node parent untuk:
Nama:
+ TIDAK
Git BELUM dikonfigurasi. Silakan ke [Preferences] dan konfigurasikan terlebih dahulu.
+ Buka
+ Editor Default (Sistem)
Buka Direktori Penyimpanan Data
+ Buka Berkas
Buka di Merge Tool
+ Buka Repositori Lokal
+ Markah:
+ Grup:
+ Folder:
Opsional.
Buat Tab Baru
Tutup Tab
@@ -503,6 +640,8 @@
Tutup Tab di Kanan
Salin Jalur Repositori
Sunting
+ Pindahkan ke Workspace
+ Segarkan
Repositori
Tempel
{0} hari lalu
@@ -517,7 +656,10 @@
Kemarin
Preferensi
AI
+ Prompt Tambahan (Gunakan `-` untuk mencantumkan kebutuhan Anda)
API Key
+ Model
+ Ambil model-id yang tersedia secara otomatis
Nama
Nilai yang dimasukkan adalah nama untuk memuat API key dari ENV
Server
@@ -534,6 +676,10 @@
Gunakan lebar tab tetap di titlebar
Gunakan frame window native
DIFF/MERGE TOOL
+ Argumen Diff
+ Variabel tersedia: $LOCAL, $REMOTE
+ Argumen Merge
+ Variabel tersedia: $BASE, $LOCAL, $REMOTE, $MERGED
Jalur Instalasi
Masukkan jalur untuk diff/merge tool
Tool
@@ -545,9 +691,11 @@
Commit Riwayat
Tampilkan halaman `LOCAL CHANGES` secara default
Tampilkan tab `CHANGES` di detail commit secara default
- Tampilkan children di detail commit
+ Tampilkan waktu relatif pada grafik commit
Tampilkan tag di grafik commit
Panjang Panduan Subjek
+ Format 24 Jam
+ Gunakan nama branch ringkas pada grafik commit
Generate avatar default bergaya GitHub
GIT
Aktifkan Auto CRLF
@@ -562,6 +710,7 @@
Gunakan git-credential-libsecret alih-alih git-credential-manager
Nama Pengguna
Nama pengguna git global
+ Stash & terapkan ulang perubahan secara default saat checkout atau merge branch
Versi Git
PENANDATANGANAN GPG
Penandatanganan GPG commit
@@ -573,6 +722,8 @@
Kunci penandatanganan gpg pengguna
INTEGRASI
SHELL/TERMINAL
+ Argumen
+ Gunakan '.' untuk menunjukkan direktori kerja
Jalur
Shell/Terminal
Prune Remote
@@ -602,10 +753,17 @@
Push ke semua remote
Remote:
Tag:
+ Push ke branch BARU
+ Masukkan nama remote branch baru:
Keluar
Rebase Branch Saat Ini
Stash & terapkan ulang perubahan lokal
+ Lewati hook pre-rebase
Pada:
+ Menguji rebase...
+ Rebase dapat dilakukan tanpa konflik
+ Terjadi kesalahan yang tidak diketahui saat menguji rebase
+ Rebase akan menyebabkan konflik
Tambah Remote
Sunting Remote
Nama:
@@ -616,6 +774,7 @@
Aksi Kustom
Hapus...
Sunting...
+ Aktifkan Fetch Otomatis
Fetch
Buka di Browser
Prune
@@ -644,9 +803,12 @@
Buka di File Browser
Cari Branch/Tag/Submodule
Visibilitas di Grafik
+ Ciutkan Filter
Tidak Diatur
Sembunyikan di grafik commit
+ Bentangkan Filter
Filter di grafik commit
+ filter aktif
TATA LETAK
Horizontal
Vertikal
@@ -658,10 +820,12 @@
Navigasi ke HEAD
Buat Branch
BERSIHKAN NOTIFIKASI
+ Buka sebagai Folder
Buka di {0}
Buka di Tool Eksternal
REMOTE
Tambah Remote
+ SELESAIKAN
Cari Commit
Author
Konten
@@ -712,9 +876,11 @@
Pindai direktori kustom lain
Periksa Pembaruan...
Versi baru dari perangkat lunak ini tersedia:
+ Versi Saat Ini:
Pemeriksaan pembaruan gagal!
Unduh
Lewati Versi Ini
+ Tanggal Rilis Versi Baru:
Pembaruan Perangkat Lunak
Saat ini tidak ada pembaruan yang tersedia.
Atur Branch Submodule
@@ -740,6 +906,8 @@
Perubahan staged dan unstaged dari berkas yang dipilih akan di-stash!!!
Stash Perubahan Lokal
Terapkan
+ Terapkan Perubahan
+ Checkout Branch Baru
Salin Pesan
Drop
Simpan sebagai Patch...
@@ -776,9 +944,15 @@
belum di-merge
Perbarui
URL
+ Detail Perubahan Submodule
+ BUKA DETAIL
OK
TAGGER
WAKTU
+ Checkout Tag...
+ Bandingkan 2 tag
+ Bandingkan dengan...
+ Bandingkan dengan HEAD
Pesan
Nama
Tagger
@@ -786,11 +960,13 @@
Aksi Kustom
Hapus ${0}$...
Hapus {0} tag yang dipilih...
+ Merge ${0}$ ke ${1}$...
Push ${0}$...
Perbarui Submodule
Semua submodule
Inisialisasi sesuai kebutuhan
Submodule:
+ Perbarui submodule bertingkat
Perbarui ke remote tracking branch submodule
URL:
Log
@@ -817,6 +993,7 @@
Abaikan berkas *{0} di folder yang sama
Abaikan berkas yang tidak dilacak di folder ini
Abaikan hanya berkas ini
+ Abaikan semua berkas yang tidak dilacak di folder yang sama
Amend
Anda dapat stage berkas ini sekarang.
Bersihkan Riwayat
@@ -830,6 +1007,8 @@
Anda membuat commit pada HEAD yang terlepas. Lanjutkan?
Anda telah stage {0} berkas tetapi hanya {1} berkas yang ditampilkan ({2} berkas disaring). Lanjutkan?
KONFLIK TERDETEKSI
+ MERGE
+ Merge dengan Alat Eksternal
BUKA SEMUA KONFLIK DI MERGETOOL EKSTERNAL
KONFLIK BERKAS DISELESAIKAN
GUNAKAN MILIK SAYA
@@ -851,9 +1030,13 @@
WORKSPACE:
Konfigurasikan Workspace...
WORKTREE
+ BRANCH
Salin Jalur
+ HEAD
Lock
Buka
+ JALUR
Hapus
Unlock
+ YA
diff --git a/src/Resources/Locales/it_IT.axaml b/src/Resources/Locales/it_IT.axaml
index 13122e41c..46b2fa9a5 100644
--- a/src/Resources/Locales/it_IT.axaml
+++ b/src/Resources/Locales/it_IT.axaml
@@ -163,7 +163,6 @@
Sottomodulo
INFORMAZIONI
AUTORE
- FIGLI
CHI HA COMMITTATO
Controlla i riferimenti che contengono questo commit
IL COMMIT È CONTENUTO DA
@@ -607,7 +606,6 @@ ${pure_files:N} Come ${files:N}, ma senza cartelle
Numero massimo di commit nella cronologia
Mostra pagina `MODIFICHE LOCALI` per impostazione predefinita
Mostra scheda `MODIFICHE` nei dettagli del commit per impostazione predefinita
- Mostra i figli nei dettagli del commit
Mostra i tag nel grafico dei commit
Lunghezza Guida Oggetto
Genera avatar predefinito stile GitHub
diff --git a/src/Resources/Locales/ja_JP.axaml b/src/Resources/Locales/ja_JP.axaml
index 7f2341eb6..844e70874 100644
--- a/src/Resources/Locales/ja_JP.axaml
+++ b/src/Resources/Locales/ja_JP.axaml
@@ -188,7 +188,6 @@
サブモジュール
コミットの情報
著者
- 子コミット
コミッター
このコミットが含まれる参照を確認
これらの参照にコミットが含まれています
@@ -691,7 +690,6 @@
コミット履歴
初めから `ローカルの変更` ページを表示
初めからコミットの詳細の `変更` タブを表示
- コミットの詳細に子コミットを表示
コミットグラフを相対時間で表記
コミットグラフにタグを表示
適切とするコミットタイトルの長さ
diff --git a/src/Resources/Locales/ko_KR.axaml b/src/Resources/Locales/ko_KR.axaml
index 4698b0993..5a1d7b053 100644
--- a/src/Resources/Locales/ko_KR.axaml
+++ b/src/Resources/Locales/ko_KR.axaml
@@ -183,7 +183,6 @@
서브모듈
정보
작성자
- 자식
커밋터
이 커밋을 포함하는 ref 확인
커밋 포함 REF
@@ -662,7 +661,6 @@
히스토리 커밋 수
기본으로 `로컬 변경 사항` 페이지 표시
커밋 세부 정보에서 기본으로 `변경 사항` 탭 표시
- 커밋 세부 정보에 자식 커밋 표시
커밋 그래프에 상대 시간 표시
커밋 그래프에 태그 표시
제목 가이드 길이
diff --git a/src/Resources/Locales/ru_RU.axaml b/src/Resources/Locales/ru_RU.axaml
index ee438ac49..525796412 100644
--- a/src/Resources/Locales/ru_RU.axaml
+++ b/src/Resources/Locales/ru_RU.axaml
@@ -188,7 +188,6 @@
Подмодуль
ИНФОРМАЦИЯ
АВТОР
- ДОЧЕРНИЙ
РЕВИЗОР (ИСПОЛНИТЕЛЬ)
Найти все ветки с этой ревизией
ВЕТКИ С ЭТОЙ РЕВИЗИЕЙ
@@ -584,6 +583,7 @@
Команды
ОШИБКА
УВЕДОМЛЕНИЕ
+ Доступна новая версия
Открыть репозитории
Вкладки
Рабочие места
@@ -691,7 +691,6 @@
Максимальная длина истории
Показывать вкладку «ЛОКАЛЬНЫЕ ИЗМЕНЕНИЯ» по умолчанию
Показывать вкладку «Изменения» в сведении ревизии по умолчанию
- Показать наследника в деталях комментария
Отображение относительного времени на графе ревизии
Показывать метки на графике
Длина темы ревизии
@@ -804,9 +803,12 @@
Открыть в файловом менеджере
Поиск веток, меток и подмодулей
Видимость на графике
+ Свернуть фильтры
Не установлен (по умолчанию)
Скрыть в графе ревизии
+ Развернуть фильтры
Фильтр в графе ревизии
+ фильтры включены
РАСПОЛОЖЕНИЕ
Горизонтально
Вертикально
@@ -1011,6 +1013,7 @@
КОНФЛИКТЫ ФАЙЛОВ РАЗРЕШЕНЫ
ИСПОЛЬЗОВАТЬ МОИ
ИСПОЛЬЗОВАТЬ ИХ
+ Фильтр изменений...
ВКЛЮЧИТЬ НЕОТСЛЕЖИВАЕМЫЕ ФАЙЛЫ
НЕТ ПОСЛЕДНИХ ВХОДНЫХ СООБЩЕНИЙ
НЕТ ШАБЛОНОВ РЕВИЗИИ
diff --git a/src/Resources/Locales/ta_IN.axaml b/src/Resources/Locales/ta_IN.axaml
index e7b89e254..5cbea045b 100644
--- a/src/Resources/Locales/ta_IN.axaml
+++ b/src/Resources/Locales/ta_IN.axaml
@@ -103,7 +103,6 @@
துணைத்தொகுதி
தகவல்
ஆசிரியர்
- குழந்தைகள்
உறுதிமொழியாளர்
இந்த உறுதிமொழிடைக் கொண்ட குறிப்புகளைச் சரிபார்
உறுதிமொழி இதில் உள்ளது
@@ -423,7 +422,6 @@
தேதி வடிவம்
மொழி
வரலாற்று உறுதிமொழிகள்
- உறுதிமொழி விவரங்களில் குழந்தைகளைக் காட்டு
உறுதிமொழி வரைபடத்தில் குறிச்சொற்களைக் காட்டு
பொருள் வழிகாட்டி நீளம்
அறிவிலி
diff --git a/src/Resources/Locales/uk_UA.axaml b/src/Resources/Locales/uk_UA.axaml
index f8a730a99..9cad040c7 100644
--- a/src/Resources/Locales/uk_UA.axaml
+++ b/src/Resources/Locales/uk_UA.axaml
@@ -103,7 +103,6 @@
Підмодуль
ІНФОРМАЦІЯ
АВТОР
- ДОЧІРНІ
КОМІТЕР
Перевірити посилання, що містять цей коміт
КОМІТ МІСТИТЬСЯ В
@@ -427,7 +426,6 @@
Формат дати
Мова
Кількість комітів в історії
- Показувати дочірні коміти в деталях
Показувати теги в графі комітів
Довжина лінії-орієнтира для теми
GIT
diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml
index cf27832e7..d77cd5418 100644
--- a/src/Resources/Locales/zh_CN.axaml
+++ b/src/Resources/Locales/zh_CN.axaml
@@ -188,7 +188,6 @@
子模块
基本信息
修改者
- 子提交
提交者
查看包含此提交的分支/标签
本提交已被以下分支/标签包含
@@ -485,7 +484,7 @@
规则 :
添加LFS追踪文件规则
拉取LFS对象 (fetch)
- 执行`git lfs prune`命令,下载远程LFS对象,但不会更新工作副本。
+ 执行`git lfs fetch`命令,下载远程LFS对象,但不会更新工作副本。
拉取LFS对象
启用Git LFS支持
显示LFS对象锁
@@ -584,6 +583,7 @@
命令列表
出错了
系统提示
+ 检测到新版本
打开其他仓库
页面列表
工作区列表
@@ -691,7 +691,6 @@
最大历史提交数
默认显示【本地更改】页
在提交详情页默认打开【变更对比】标签页
- 在提交详情页中显示子提交列表
在提交路线图中显示相对时间
在提交路线图中显示标签
SUBJECT字数检测
@@ -804,9 +803,12 @@
在文件浏览器中打开
快速查找分支/标签/子模块
设置在列表中的可见性
+ 折叠过滤项列表
不指定
在提交列表中隐藏
+ 展开过滤项列表
使用其对提交列表过滤
+ 个过滤项已被启用
布局方式
水平排布
竖直排布
@@ -1011,6 +1013,7 @@
文件冲突已解决
使用 MINE
使用 THEIRS
+ 查找变更...
显示未跟踪文件
没有提交信息记录
没有可应用的提交信息模板
diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml
index fcf0003dd..b07c82996 100644
--- a/src/Resources/Locales/zh_TW.axaml
+++ b/src/Resources/Locales/zh_TW.axaml
@@ -11,9 +11,9 @@
新增忽略檔案
比對模式:
儲存路徑:
- 新增工作區
- 工作區路徑:
- 填寫該工作區的路徑。支援相對路徑。
+ 新增工作樹
+ 工作樹路徑:
+ 填寫該工作樹的路徑。支援相對路徑。
分支名稱:
選填。預設使用目標資料夾名稱。
追蹤分支
@@ -68,7 +68,7 @@
所選擇的檔案不支援該操作!
簽出 (checkout) ${0}$...
比較所選的 2 個分支
- 與分支或標籤進行比較...
+ 與其他分支或標籤比較...
與目前 HEAD 比較
與 ${0}$ 比較
複製分支名稱
@@ -90,7 +90,7 @@
重定基底 (rebase) ${0}$ 分支至 ${1}$...
重新命名 ${0}$...
重設 ${0}$ 至 ${1}$...
- 切換到 ${0}$ (工作區)
+ 切換到 ${0}$ (工作樹)
切換上游分支...
領先 {0} 次提交
領先 {0} 次提交,落後 {1} 次提交
@@ -100,7 +100,7 @@
狀態
上游分支
遠端網址
- 工作區
+ 工作樹
取 消
重設檔案到上一版本
重設檔案為此版本
@@ -156,7 +156,7 @@
揀選 (cherry-pick) 此提交...
揀選 (cherry-pick)...
與目前 HEAD 比較
- 與本機工作區比較
+ 與本機工作樹比較
作者
修改時間
提交訊息
@@ -188,7 +188,6 @@
子模組
基本資訊
作者
- 後續提交
提交者
檢視包含此提交的分支或標籤
本提交包含於以下分支或標籤
@@ -562,7 +561,7 @@
暫存
取消暫存
初始化存放庫
- 您是否要在該路徑執行 git init 以進行初始化?
+ 您是否要在該路徑執行 `git init` 以初始化存放庫?
無法在指定路徑開啟本機存放庫。原因:
路徑:
揀選 (cherry-pick) 操作進行中。
@@ -584,6 +583,7 @@
命令列表
發生錯誤
系統提示
+ 有新版本可用
開啟存放庫
頁面列表
工作區列表
@@ -691,7 +691,6 @@
最大歷史提交數
預設顯示 [本機變更] 頁面
在提交詳細資訊頁面預設顯示 [變更對比]
- 在提交詳細資訊中顯示後續提交
在提交路線圖中顯示相對時間
在路線圖中顯示標籤
提交標題字數偵測
@@ -703,7 +702,7 @@
預設複製 (clone) 路徑
電子郵件
預設 Git 使用者電子郵件
- 拉取變更時進行清理
+ 提取後清理遠端已刪除分支
對比檔案時,預設忽略行末的 CR 變更
本軟體要求 Git 最低版本為 2.25.1
安裝路徑
@@ -729,8 +728,8 @@
終端機/Shell
清理遠端已刪除分支
目標:
- 清理工作區
- 清理在 `$GIT_COMMON_DIR/worktrees` 中的無效工作區資訊
+ 清理工作樹
+ 清理在 `$GIT_COMMON_DIR/worktrees` 中的無效工作樹資訊
拉取 (pull)
拉取分支:
本機分支:
@@ -759,7 +758,7 @@
結束
重定基底 (rebase) 操作
自動擱置變更並復原本機變更
- 繞過 pre-rebase 鉤子
+ 繞過 pre-rebase hook
目標提交:
正在偵測重定基底衝突...
重定基底操作不會產生衝突
@@ -779,9 +778,9 @@
提取 (fetch) 更新
在瀏覽器中開啟網址
清理遠端已刪除分支
- 刪除工作區操作確認
+ 刪除工作樹操作確認
啟用 [--force] 選項
- 目標工作區:
+ 目標工作樹:
分支重新命名
新名稱:
新的分支名稱不能與現有分支名稱相同
@@ -804,9 +803,12 @@
在檔案瀏覽器中開啟
快速搜尋分支/標籤/子模組
篩選以顯示或隱藏
+ 摺疊篩選器
取消指定
在提交列表中隱藏
+ 展開篩選器
以其篩選提交列表
+ 個篩選規則已啟用
版面配置
橫向顯示
縱向顯示
@@ -850,8 +852,8 @@
在終端機中開啟
檢視 Git 指令記錄
檢視遠端存放庫 '{0}'
- 工作區列表
- 新增工作區
+ 工作樹列表
+ 新增工作樹
清理
遠端存放庫網址
重設目前分支到指定版本
@@ -949,7 +951,7 @@
建立時間
簽出標籤...
比較 2 個標籤
- 與分支或標籤進行比較...
+ 與其他分支或標籤比較...
與目前 HEAD 比較
標籤訊息
標籤名稱
@@ -1011,6 +1013,7 @@
檔案衝突已解決
使用我方版本 (ours)
使用對方版本 (theirs)
+ 搜尋變更...
顯示未追蹤檔案
沒有提交訊息記錄
沒有可套用的提交訊息範本
@@ -1027,14 +1030,14 @@
範本: ${0}$
工作區:
設定工作區...
- 本機工作區
+ 本機工作樹
分支
- 複製工作區路徑
+ 複製工作樹路徑
最新提交
- 鎖定工作區
- 開啟工作區
+ 鎖定工作樹
+ 開啟工作樹
位置
- 移除工作區
- 解除鎖定工作區
+ 移除工作樹
+ 解除鎖定工作樹
是
diff --git a/src/Resources/Styles.axaml b/src/Resources/Styles.axaml
index bcf19edeb..27878b5cc 100644
--- a/src/Resources/Styles.axaml
+++ b/src/Resources/Styles.axaml
@@ -1215,6 +1215,44 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
+
diff --git a/src/Views/RevisionFileTreeView.axaml.cs b/src/Views/RevisionFileTreeView.axaml.cs
index bf9586765..953aeff54 100644
--- a/src/Views/RevisionFileTreeView.axaml.cs
+++ b/src/Views/RevisionFileTreeView.axaml.cs
@@ -312,7 +312,7 @@ public async Task SetSearchResultAsync(string file)
last.Add(folder);
last = folder.Children;
- prefix = folder.Backend + "/";
+ prefix = folder.Backend.Path + "/";
}
last.Add(new ViewModels.RevisionFileTreeNode
diff --git a/src/Views/RevisionFiles.axaml b/src/Views/RevisionFiles.axaml
index 8f0407e30..edfd73359 100644
--- a/src/Views/RevisionFiles.axaml
+++ b/src/Views/RevisionFiles.axaml
@@ -109,7 +109,7 @@
-
+
diff --git a/src/Views/Statistics.axaml b/src/Views/Statistics.axaml
index c0e9b448c..8a8ebd648 100644
--- a/src/Views/Statistics.axaml
+++ b/src/Views/Statistics.axaml
@@ -117,74 +117,85 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+