diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d7acac8..374bd841 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: dotnet build -c Release - name: Publish - run: dotnet publish src/SourceGit.csproj -c Release -o publish -r win-x64 -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained + run: dotnet publish src/SourceGit.csproj -c Release -o publish -r win-x64 - name: Upload Artifact uses: actions/upload-artifact@v4 with: @@ -43,7 +43,7 @@ jobs: - name: Build run: dotnet build -c Release - name: Publish - run: dotnet publish src/SourceGit.csproj -c Release -o publish -r osx-x64 -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained + run: dotnet publish src/SourceGit.csproj -c Release -o publish -r osx-x64 - name: Packing Program run: tar -cvf sourcegit.osx-x64.tar -C publish/ . - name: Upload Artifact @@ -66,7 +66,7 @@ jobs: - name: Build run: dotnet build -c Release - name: Publish - run: dotnet publish src/SourceGit.csproj -c Release -o publish -r osx-arm64 -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained + run: dotnet publish src/SourceGit.csproj -c Release -o publish -r osx-arm64 - name: Packing Program run: tar -cvf sourcegit.osx-arm64.tar -C publish/ . - name: Upload Artifact @@ -89,7 +89,7 @@ jobs: - name: Build run: dotnet build -c Release - name: Publish - run: dotnet publish src/SourceGit.csproj -c Release -o publish -r linux-x64 -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained + run: dotnet publish src/SourceGit.csproj -c Release -o publish -r linux-x64 - name: Rename Executable File run: mv publish/SourceGit publish/sourcegit - name: Packing Program diff --git a/SourceGit.sln b/SourceGit.sln index 80921840..ee35d8f6 100644 --- a/SourceGit.sln +++ b/SourceGit.sln @@ -75,6 +75,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPECS", "SPECS", "{7802CD7A build\resources\rpm\SPECS\build.spec = build\resources\rpm\SPECS\build.spec EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "appimage", "appimage", "{5D125DD9-B48A-491F-B2FB-D7830D74C4DC}" + ProjectSection(SolutionItems) = preProject + build\resources\appimage\publish-appimage = build\resources\appimage\publish-appimage + build\resources\appimage\publish-appimage.conf = build\resources\appimage\publish-appimage.conf + build\resources\appimage\runtime-x86_64 = build\resources\appimage\runtime-x86_64 + build\resources\appimage\sourcegit.appdata.xml = build\resources\appimage\sourcegit.appdata.xml + build\resources\appimage\sourcegit.png = build\resources\appimage\sourcegit.png + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -104,6 +113,7 @@ Global {F101849D-BDB7-40D4-A516-751150C3CCFC} = {9C2F0CDA-B56E-44A5-94B6-F3EA7AC20CDC} {9BA0B044-0CC9-46F8-B551-204F149BF45D} = {FD384607-ED99-47B7-AF31-FB245841BC92} {7802CD7A-591B-4EDD-96F8-9BF3F61692E4} = {9BA0B044-0CC9-46F8-B551-204F149BF45D} + {5D125DD9-B48A-491F-B2FB-D7830D74C4DC} = {FD384607-ED99-47B7-AF31-FB245841BC92} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7FF1B9C6-B5BF-4A50-949F-4B407A0E31C9} diff --git a/VERSION b/VERSION index 61a56e48..4399d1b4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.22.1 \ No newline at end of file +8.23 \ No newline at end of file diff --git a/build/build.osx.command b/build/build.osx.command index 985dbebc..f60c87b7 100755 --- a/build/build.osx.command +++ b/build/build.osx.command @@ -9,13 +9,13 @@ cp resources/app/App.icns SourceGit.app/Contents/Resources/App.icns sed "s/SOURCE_GIT_VERSION/${version}/g" resources/app/App.plist > SourceGit.app/Contents/Info.plist mkdir -p SourceGit.app/Contents/MacOS -dotnet publish ../src/SourceGit.csproj -c Release -r osx-arm64 -o SourceGit.app/Contents/MacOS -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained +dotnet publish ../src/SourceGit.csproj -c Release -r osx-arm64 -o SourceGit.app/Contents/MacOS zip sourcegit_${version}.osx-arm64.zip -r SourceGit.app -x "*/*\.dsym/*" rm -rf SourceGit.app/Contents/MacOS mkdir -p SourceGit.app/Contents/MacOS -dotnet publish ../src/SourceGit.csproj -c Release -r osx-x64 -o SourceGit.app/Contents/MacOS -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained +dotnet publish ../src/SourceGit.csproj -c Release -r osx-x64 -o SourceGit.app/Contents/MacOS zip sourcegit_${version}.osx-x64.zip -r SourceGit.app -x "*/*\.dsym/*" rm -rf SourceGit.app diff --git a/build/build.windows.ps1 b/build/build.windows.ps1 index a218d5cd..23735e4c 100644 --- a/build/build.windows.ps1 +++ b/build/build.windows.ps1 @@ -6,7 +6,7 @@ if (Test-Path SourceGit) { Remove-Item *.zip -Force -dotnet publish ..\src\SourceGit.csproj -c Release -r win-arm64 -o SourceGit -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained +dotnet publish ..\src\SourceGit.csproj -c Release -r win-arm64 -o SourceGit Remove-Item SourceGit\*.pdb -Force @@ -16,7 +16,7 @@ if (Test-Path SourceGit) { Remove-Item SourceGit -Recurse -Force } -dotnet publish ..\src\SourceGit.csproj -c Release -r win-x64 -o SourceGit -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained +dotnet publish ..\src\SourceGit.csproj -c Release -r win-x64 -o SourceGit Remove-Item SourceGit\*.pdb -Force diff --git a/build/resources/app/App.plist b/build/resources/app/App.plist index 3ccf7335..a9852019 100644 --- a/build/resources/app/App.plist +++ b/build/resources/app/App.plist @@ -2,30 +2,30 @@ - CFBundleIconFile - App.icns - CFBundleIdentifier - com.sourcegit-scm.sourcegit - CFBundleName - SourceGit - CFBundleVersion - SOURCE_GIT_VERSION.0 - LSMinimumSystemVersion - 10.12 - LSEnvironment - - PATH - /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin - - CFBundleExecutable - SourceGit - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleShortVersionString - SOURCE_GIT_VERSION - NSHighResolutionCapable - + CFBundleIconFile + App.icns + CFBundleIdentifier + com.sourcegit-scm.sourcegit + CFBundleName + SourceGit + CFBundleVersion + SOURCE_GIT_VERSION.0 + LSMinimumSystemVersion + 11.0 + LSEnvironment + + PATH + /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + + CFBundleExecutable + SourceGit + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleShortVersionString + SOURCE_GIT_VERSION + NSHighResolutionCapable + diff --git a/build/resources/appimage/publish-appimage.conf b/build/resources/appimage/publish-appimage.conf index 6b17ddc0..ea44ee3b 100644 --- a/build/resources/appimage/publish-appimage.conf +++ b/build/resources/appimage/publish-appimage.conf @@ -82,7 +82,7 @@ DOTNET_PROJECT_PATH="../../../src/SourceGit.csproj" # Additional useful arguments include: # "-p:DebugType=None -p:DebugSymbols=false -p:PublishSingleFile=true -p:PublishTrimmed=true -p:TrimMode=link" # Refer: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish -DOTNET_PUBLISH_ARGS="-c Release -p:DebugType=None -p:DebugSymbols=false -p:PublishAot=true -p:PublishTrimmed=true -p:TrimMode=link --self-contained" +DOTNET_PUBLISH_ARGS="-c Release -p:DebugType=None -p:DebugSymbols=false" ######################################## @@ -137,4 +137,4 @@ PKG_APPIMAGE_SUFFIX=".AppImage" APPIMAGETOOL_COMMAND="appimagetool" # Internal use only. Used for compatibility between conf and script. Do not modify. -CONF_IMPL_VERSION=1 \ No newline at end of file +CONF_IMPL_VERSION=1 diff --git a/src/App.JsonCodeGen.cs b/src/App.JsonCodeGen.cs index ffc74262..f6e3cd88 100644 --- a/src/App.JsonCodeGen.cs +++ b/src/App.JsonCodeGen.cs @@ -62,7 +62,7 @@ namespace SourceGit [JsonSerializable(typeof(Models.JetBrainsState))] [JsonSerializable(typeof(Models.ThemeOverrides))] [JsonSerializable(typeof(Models.Version))] + [JsonSerializable(typeof(Models.RepositorySettings))] [JsonSerializable(typeof(ViewModels.Preference))] - [JsonSerializable(typeof(ViewModels.RepositorySettings))] internal partial class JsonCodeGen : JsonSerializerContext { } } diff --git a/src/App.axaml.cs b/src/App.axaml.cs index 6d09fe00..3cb3909c 100644 --- a/src/App.axaml.cs +++ b/src/App.axaml.cs @@ -92,7 +92,7 @@ namespace SourceGit var toplevel = GetTopLevel() as Window; if (toplevel == null) return; - + var dialog = new Views.Preference(); dialog.ShowDialog(toplevel); }); @@ -102,7 +102,7 @@ namespace SourceGit var toplevel = GetTopLevel() as Window; if (toplevel == null) return; - + var dialog = new Views.Hotkeys(); dialog.ShowDialog(toplevel); }); @@ -112,7 +112,7 @@ namespace SourceGit var toplevel = GetTopLevel() as Window; if (toplevel == null) return; - + var dialog = new Views.About(); dialog.ShowDialog(toplevel); }); @@ -247,7 +247,7 @@ namespace SourceGit var geo = Current?.FindResource(key) as StreamGeometry; if (geo != null) icon.Data = geo; - + return icon; } @@ -257,7 +257,7 @@ namespace SourceGit { return desktop.MainWindow; } - + return null; } @@ -302,6 +302,11 @@ namespace SourceGit }); } + public static ViewModels.Launcher GetLauncer() + { + return Current is App app ? app._launcher : null; + } + public static ViewModels.Repository FindOpenedRepository(string repoPath) { if (Current is App app && app._launcher != null) @@ -501,10 +506,15 @@ namespace SourceGit private bool TryLaunchedAsAskpass(IClassicDesktopStyleApplicationLifetime desktop) { var args = desktop.Args; - if (args == null || args.Length != 1 || !args[0].StartsWith("Enter passphrase", StringComparison.Ordinal)) + if (args == null || args.Length != 1) return false; - desktop.MainWindow = new Views.Askpass(args[0]); + var param = args[0]; + if (!param.StartsWith("enter passphrase", StringComparison.OrdinalIgnoreCase) && + !param.Contains(" password", StringComparison.OrdinalIgnoreCase)) + return false; + + desktop.MainWindow = new Views.Askpass(param); return true; } diff --git a/src/Commands/AssumeUnchanged.cs b/src/Commands/AssumeUnchanged.cs index f4cfe32b..1898122a 100644 --- a/src/Commands/AssumeUnchanged.cs +++ b/src/Commands/AssumeUnchanged.cs @@ -5,11 +5,11 @@ namespace SourceGit.Commands { public partial class AssumeUnchanged { - partial class ViewCommand : Command - { - [GeneratedRegex(@"^(\w)\s+(.+)$")] - private static partial Regex REG(); + [GeneratedRegex(@"^(\w)\s+(.+)$")] + private static partial Regex REG_PARSE(); + class ViewCommand : Command + { public ViewCommand(string repo) { WorkingDirectory = repo; @@ -25,7 +25,7 @@ namespace SourceGit.Commands protected override void OnReadline(string line) { - var match = REG().Match(line); + var match = REG_PARSE().Match(line); if (!match.Success) return; diff --git a/src/Commands/CompareRevisions.cs b/src/Commands/CompareRevisions.cs index 860cd34a..c4674c8e 100644 --- a/src/Commands/CompareRevisions.cs +++ b/src/Commands/CompareRevisions.cs @@ -13,7 +13,9 @@ namespace SourceGit.Commands { WorkingDirectory = repo; Context = repo; - Args = $"diff --name-status {start} {end}"; + + var based = string.IsNullOrEmpty(start) ? "-R" : start; + Args = $"diff --name-status {based} {end}"; } public List Result() diff --git a/src/Commands/Diff.cs b/src/Commands/Diff.cs index 56c924e5..2d7a8ec2 100644 --- a/src/Commands/Diff.cs +++ b/src/Commands/Diff.cs @@ -14,7 +14,8 @@ namespace SourceGit.Commands public Diff(string repo, Models.DiffOption opt, int unified) { - _result.TextDiff = new Models.TextDiff() { + _result.TextDiff = new Models.TextDiff() + { Repo = repo, Option = opt, }; diff --git a/src/Commands/QueryBranches.cs b/src/Commands/QueryBranches.cs index 7b42878d..e598ee08 100644 --- a/src/Commands/QueryBranches.cs +++ b/src/Commands/QueryBranches.cs @@ -1,18 +1,14 @@ using System; using System.Collections.Generic; -using System.Text.RegularExpressions; namespace SourceGit.Commands { - public partial class QueryBranches : Command + public class QueryBranches : Command { private const string PREFIX_LOCAL = "refs/heads/"; private const string PREFIX_REMOTE = "refs/remotes/"; private const string PREFIX_DETACHED = "(HEAD detached at"; - [GeneratedRegex(@"^(\d+)\s(\d+)$")] - private static partial Regex REG_AHEAD_BEHIND(); - public QueryBranches(string repo) { WorkingDirectory = repo; diff --git a/src/Commands/QuerySingleCommit.cs b/src/Commands/QuerySingleCommit.cs index eef08b7e..6c242631 100644 --- a/src/Commands/QuerySingleCommit.cs +++ b/src/Commands/QuerySingleCommit.cs @@ -38,7 +38,5 @@ namespace SourceGit.Commands return null; } - - } } diff --git a/src/Commands/QueryStashChanges.cs b/src/Commands/QueryStashChanges.cs index bf61ca2d..3b8d2db6 100644 --- a/src/Commands/QueryStashChanges.cs +++ b/src/Commands/QueryStashChanges.cs @@ -5,7 +5,6 @@ namespace SourceGit.Commands { public partial class QueryStashChanges : Command { - [GeneratedRegex(@"^(\s?[\w\?]{1,4})\s+(.+)$")] private static partial Regex REG_FORMAT(); diff --git a/src/Commands/QueryTags.cs b/src/Commands/QueryTags.cs index f17b7896..2abbe277 100644 --- a/src/Commands/QueryTags.cs +++ b/src/Commands/QueryTags.cs @@ -9,7 +9,7 @@ namespace SourceGit.Commands { Context = repo; WorkingDirectory = repo; - Args = "for-each-ref --sort=-creatordate --format=\"$%(refname:short)$%(objectname)$%(*objectname)\" refs/tags"; + Args = "tag -l --sort=-creatordate --format=\"$%(refname)$%(objectname)$%(*objectname)\""; } public List Result() @@ -25,7 +25,7 @@ namespace SourceGit.Commands { _loaded.Add(new Models.Tag() { - Name = subs[0], + Name = subs[0].Substring(10), SHA = subs[1], }); } @@ -33,7 +33,7 @@ namespace SourceGit.Commands { _loaded.Add(new Models.Tag() { - Name = subs[0], + Name = subs[0].Substring(10), SHA = subs[2], }); } diff --git a/src/Commands/QueryTrackStatus.cs b/src/Commands/QueryTrackStatus.cs index ce8e4d0e..0bf9746f 100644 --- a/src/Commands/QueryTrackStatus.cs +++ b/src/Commands/QueryTrackStatus.cs @@ -4,7 +4,7 @@ namespace SourceGit.Commands { public class QueryTrackStatus : Command { - public QueryTrackStatus(string repo, string local, string upstream) + public QueryTrackStatus(string repo, string local, string upstream) { WorkingDirectory = repo; Context = repo; @@ -19,7 +19,7 @@ namespace SourceGit.Commands if (!rs.IsSuccess) return status; - var lines = rs.StdOut.Split(['\n', '\r'], StringSplitOptions.RemoveEmptyEntries); + var lines = rs.StdOut.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { if (line[0] == '>') diff --git a/src/Commands/Submodule.cs b/src/Commands/Submodule.cs index 3c4460ea..9a273703 100644 --- a/src/Commands/Submodule.cs +++ b/src/Commands/Submodule.cs @@ -13,36 +13,46 @@ namespace SourceGit.Commands public bool Add(string url, string relativePath, bool recursive, Action outputHandler) { _outputHandler = outputHandler; - Args = $"submodule add {url} {relativePath}"; + Args = $"submodule add {url} \"{relativePath}\""; if (!Exec()) return false; if (recursive) { - Args = $"submodule update --init --recursive -- {relativePath}"; + Args = $"submodule update --init --recursive -- \"{relativePath}\""; return Exec(); } else { - Args = $"submodule update --init -- {relativePath}"; + Args = $"submodule update --init -- \"{relativePath}\""; return true; } } - public bool Update(Action outputHandler) + public bool Update(string module, bool init, bool recursive, bool useRemote, Action outputHandler) { - Args = $"submodule update --rebase --remote"; + Args = "submodule update"; + + if (init) + Args += " --init"; + if (recursive) + Args += " --recursive"; + if (useRemote) + Args += " --remote"; + if (!string.IsNullOrEmpty(module)) + Args += $" -- \"{module}\""; + _outputHandler = outputHandler; return Exec(); } public bool Delete(string relativePath) { - Args = $"submodule deinit -f {relativePath}"; + Args = $"submodule deinit -f \"{relativePath}\""; if (!Exec()) return false; - Args = $"rm -rf {relativePath}"; + Args = $"rm -rf \"{relativePath}\""; return Exec(); } diff --git a/src/Converters/DecoratorTypeConverters.cs b/src/Converters/DecoratorTypeConverters.cs deleted file mode 100644 index f730b613..00000000 --- a/src/Converters/DecoratorTypeConverters.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Data.Converters; -using Avalonia.Media; - -namespace SourceGit.Converters -{ - public static class DecoratorTypeConverters - { - public static readonly FuncValueConverter ToBackground = - new FuncValueConverter(v => - { - if (v == Models.DecoratorType.Tag) - return Application.Current.FindResource("Brush.DecoratorTag") as IBrush; - return Application.Current.FindResource("Brush.DecoratorBranch") as IBrush; - }); - - public static readonly FuncValueConverter ToIcon = - new FuncValueConverter(v => - { - var key = "Icons.Tag"; - switch (v) - { - case Models.DecoratorType.CurrentBranchHead: - key = "Icons.Check"; - break; - case Models.DecoratorType.RemoteBranchHead: - key = "Icons.Remote"; - break; - case Models.DecoratorType.LocalBranchHead: - key = "Icons.Branch"; - break; - default: - break; - } - - return Application.Current?.FindResource(key) as StreamGeometry; - }); - - public static readonly FuncValueConverter ToFontWeight = - new FuncValueConverter(v => - v is Models.DecoratorType.CurrentBranchHead or Models.DecoratorType.CurrentCommitHead - ? FontWeight.Bold : FontWeight.Regular - ); - } -} diff --git a/src/Models/DiffOption.cs b/src/Models/DiffOption.cs index f5bec602..e122ad67 100644 --- a/src/Models/DiffOption.cs +++ b/src/Models/DiffOption.cs @@ -80,7 +80,7 @@ namespace SourceGit.Models /// public DiffOption(string baseRevision, string targetRevision, Change change) { - _revisions.Add(baseRevision); + _revisions.Add(string.IsNullOrEmpty(baseRevision) ? "-R" : baseRevision); _revisions.Add(targetRevision); _path = change.Path; _orgPath = change.OriginalPath; diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs index dc164f59..401fb987 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -128,7 +128,7 @@ namespace SourceGit.Models public void FindJetBrainsFromToolbox(Func platformFinder) { var exclude = new List { "fleet", "dotmemory", "dottrace", "resharper-u", "androidstudio" }; - var supported_icons = new List { "CL", "DB", "DL", "DS", "GO", "IC", "IU", "JB", "PC", "PS", "PY", "QA", "QD", "RD", "RM", "RR", "WRS", "WS" }; + var supported_icons = 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)) { diff --git a/src/Models/MergeMode.cs b/src/Models/MergeMode.cs new file mode 100644 index 00000000..23ace5c5 --- /dev/null +++ b/src/Models/MergeMode.cs @@ -0,0 +1,24 @@ +namespace SourceGit.Models +{ + public class MergeMode + { + public static readonly MergeMode[] Supported = + [ + new MergeMode("Default", "Fast-forward if possible", ""), + new MergeMode("No Fast-forward", "Always create a merge commit", "--no-ff"), + new MergeMode("Squash", "Use '--squash'", "--squash"), + new MergeMode("Don't commit", "Merge without commit", "--no-commit"), + ]; + + public string Name { get; set; } + public string Desc { get; set; } + public string Arg { get; set; } + + public MergeMode(string n, string d, string a) + { + Name = n; + Desc = d; + Arg = a; + } + } +} diff --git a/src/ViewModels/Notification.cs b/src/Models/Notification.cs similarity index 87% rename from src/ViewModels/Notification.cs rename to src/Models/Notification.cs index e54c3790..2261e327 100644 --- a/src/ViewModels/Notification.cs +++ b/src/Models/Notification.cs @@ -1,4 +1,4 @@ -namespace SourceGit.ViewModels +namespace SourceGit.Models { public class Notification { diff --git a/src/Models/Null.cs b/src/Models/Null.cs new file mode 100644 index 00000000..e22ef8b3 --- /dev/null +++ b/src/Models/Null.cs @@ -0,0 +1,6 @@ +namespace SourceGit.Models +{ + public class Null + { + } +} diff --git a/src/Models/RepositorySettings.cs b/src/Models/RepositorySettings.cs new file mode 100644 index 00000000..514a0d59 --- /dev/null +++ b/src/Models/RepositorySettings.cs @@ -0,0 +1,97 @@ +using Avalonia.Collections; + +namespace SourceGit.Models +{ + public class RepositorySettings + { + public DealWithLocalChanges DealWithLocalChangesOnCheckoutBranch + { + get; + set; + } = DealWithLocalChanges.DoNothing; + + public bool FetchWithoutTags + { + get; + set; + } = false; + + public DealWithLocalChanges DealWithLocalChangesOnPull + { + get; + set; + } = DealWithLocalChanges.DoNothing; + + public bool PreferRebaseInsteadOfMerge + { + get; + set; + } = true; + + public bool FetchWithoutTagsOnPull + { + get; + set; + } = false; + + public bool FetchAllBranchesOnPull + { + get; + set; + } = true; + + public bool PushAllTags + { + get; + set; + } = false; + + public DealWithLocalChanges DealWithLocalChangesOnCreateBranch + { + get; + set; + } = DealWithLocalChanges.DoNothing; + + public bool CheckoutBranchOnCreateBranch + { + get; + set; + } = true; + + public bool AutoStageBeforeCommit + { + get; + set; + } = false; + + public AvaloniaList Filters + { + get; + set; + } = new AvaloniaList(); + + public AvaloniaList CommitMessages + { + get; + set; + } = new AvaloniaList(); + + public void PushCommitMessage(string message) + { + var existIdx = CommitMessages.IndexOf(message); + if (existIdx == 0) + return; + + if (existIdx > 0) + { + CommitMessages.Move(existIdx, 0); + return; + } + + if (CommitMessages.Count > 9) + CommitMessages.RemoveRange(9, CommitMessages.Count - 9); + + CommitMessages.Insert(0, message); + } + } +} diff --git a/src/Models/ResetMode.cs b/src/Models/ResetMode.cs new file mode 100644 index 00000000..f2bfb5ef --- /dev/null +++ b/src/Models/ResetMode.cs @@ -0,0 +1,27 @@ +using Avalonia.Media; + +namespace SourceGit.Models +{ + public class ResetMode + { + public static readonly ResetMode[] Supported = + [ + new ResetMode("Soft", "Keep all changes. Stage differences", "--soft", Brushes.Green), + new ResetMode("Mixed", "Keep all changes. Unstage differences", "--mixed", Brushes.Orange), + new ResetMode("Hard", "Discard all changes", "--hard", Brushes.Red), + ]; + + public string Name { get; set; } + public string Desc { get; set; } + public string Arg { get; set; } + public IBrush Color { get; set; } + + public ResetMode(string n, string d, string a, IBrush b) + { + Name = n; + Desc = d; + Arg = a; + Color = b; + } + } +} diff --git a/src/Models/Version.cs b/src/Models/Version.cs index aca1f0fc..35c21778 100644 --- a/src/Models/Version.cs +++ b/src/Models/Version.cs @@ -1,10 +1,9 @@ using System.Reflection; using System.Text.Json.Serialization; -using System.Text.RegularExpressions; namespace SourceGit.Models { - public partial class Version + public class Version { [JsonPropertyName("name")] public string Name { get; set; } @@ -15,21 +14,20 @@ namespace SourceGit.Models [JsonPropertyName("body")] public string Body { get; set; } - [GeneratedRegex(@"^v(\d+)\.(\d+)$")] - private static partial Regex REG_VERSION_TAG(); - public bool IsNewVersion { get { - var match = REG_VERSION_TAG().Match(TagName); - if (!match.Success) + try + { + System.Version version = new System.Version(TagName.Substring(1)); + System.Version current = Assembly.GetExecutingAssembly().GetName().Version!; + return current.CompareTo(version) < 0; + } + catch + { return false; - - var major = int.Parse(match.Groups[1].Value); - var minor = int.Parse(match.Groups[2].Value); - var ver = Assembly.GetExecutingAssembly().GetName().Version!; - return ver.Major < major || (ver.Major == major && ver.Minor < minor); + } } } } diff --git a/src/Resources/Icons.axaml b/src/Resources/Icons.axaml index 724d0b85..66e322a6 100644 --- a/src/Resources/Icons.axaml +++ b/src/Resources/Icons.axaml @@ -16,7 +16,7 @@ M896 811l-128 0c-23 0-43-19-43-43 0-23 19-43 43-43l107 0c13 0 21-9 21-21L896 107c0-13-9-21-21-21L448 85c-13 0-21 9-21 21l0 21c0 23-19 43-43 43-23 0-43-19-43-43L341 85c0-47 38-85 85-85l469 0c47 0 85 38 85 85l0 640C981 772 943 811 896 811zM683 299l0 640c0 47-38 85-85 85L128 1024c-47 0-85-38-85-85L43 299c0-47 38-85 85-85l469 0C644 213 683 252 683 299zM576 299 149 299c-13 0-21 9-21 21l0 597c0 13 9 21 21 21l427 0c13 0 21-9 21-21L597 320C597 307 589 299 576 299z M280 145l243 341 0-0 45 63-0 0 79 110a143 143 0 11-36 75l-88-123-92 126c1 4 1 9 1 13l0 5a143 143 0 11-36-95l82-113L221 188l60-43zm473 541a70 70 0 100 140 70 70 0 000-140zm-463 0a70 70 0 100 140 70 70 0 000-140zM772 145l59 43-232 319-45-63L772 145z M128 183C128 154 154 128 183 128h521c30 0 55 26 55 55v38c0 17-17 34-34 34s-34-17-34-34v-26H196v495h26c17 0 34 17 34 34s-17 34-34 34h-38c-30 0-55-26-55-55V183zM380 896h-34c-26 0-47-21-47-47v-90h68V828h64V896H380c4 0 0 0 0 0zM759 828V896h90c26 0 47-21 47-47v-90h-68V828h-68zM828 435H896V346c0-26-21-47-47-47h-90v68H828v68zM435 299v68H367V439H299V346C299 320 320 299 346 299h90zM367 649H299v-107h68v107zM546 367V299h107v68h-107zM828 546H896v107h-68v-107zM649 828V896h-107v-68h107zM730 508v188c0 17-17 34-34 34h-188c-17 0-34-17-34-34s17-34 34-34h102l-124-124c-13-13-13-34 0-47 13-13 34-13 47 0l124 124V512c0-17 17-34 34-34 21-4 38 9 38 30z - M888.8 0H135.2c-32.3 0-58.9 26.1-58.9 58.9v906.2c0 32.3 26.1 58.9 58.9 58.9h753.2c32.3 0 58.9-26.1 58.9-58.9v-906.2c.5-32.8-26.1-58.9-58.4-58.9zm-164.9 176.6c30.7 0 55.8 25.1 55.8 55.8s-25.1 55.8-55.8 55.8s-55.8-25.1-55.8-55.8s24.6-55.8 55.8-55.8zm-212 0c30.7 0 55.8 25.1 55.8 55.8S542.7 288.3 512 288.3s-55.8-25.1-55.8-55.8S481.3 176.6 512 176.6zm-212 0c30.7 0 55.8 25.1 55.8 55.8s-25.1 55.8-55.8 55.8s-55.8-25.1-55.8-55.8s25.1-55.8 55.8-55.8zm208.9 606.2H285.2c-24.6 0-44-20-44-44c0-24.6 20-44 44-44h223.7c24.6 0 44 20 44 44c0 24.1-19.5 44-44 44zm229.9-212H285.2c-24.6 0-44-20-44-44c0-24.6 20-44 44-44h453.1c24.6 0 44 20 44 44c.5 24.1-19.5 44-43.5 44z + M889 0H135c-32 0-59 26-59 59v906c0 32 26 59 59 59h753c32 0 59-26 59-59v-906c1-33-26-59-58-59zm-165 177c31 0 56 25 56 56s-25 56-56 56-56-25-56-56 25-56 56-56zm-212 0c31 0 56 25 56 56S543 288 512 288s-56-25-56-56S481 177 512 177zm-212 0c31 0 56 25 56 56s-25 56-56 56-56-25-56-56 25-56 56-56zm209 606H285c-25 0-44-20-44-44 0-25 20-44 44-44h224c25 0 44 20 44 44 0 24-20 44-44 44zm230-212H285c-25 0-44-20-44-44 0-25 20-44 44-44h453c25 0 44 20 44 44 1 24-20 44-44 44z M854 307 611 73c-6-6-14-9-22-9H296c-4 0-8 4-8 8v56c0 4 4 8 8 8h277l219 211V824c0 4 4 8 8 8h56c4 0 8-4 8-8V330c0-9-4-17-10-23zM553 201c-6-6-14-9-23-9H192c-18 0-32 14-32 32v704c0 18 14 32 32 32h512c18 0 32-14 32-32V397c0-9-3-17-9-23L553 201zM568 753c0 4-3 7-8 7h-225c-4 0-8-3-8-7v-42c0-4 3-7 8-7h225c4 0 8 3 8 7v42zm0-220c0 4-3 7-8 7H476v85c0 4-3 7-7 7h-42c-4 0-7-3-7-7V540h-85c-4 0-8-3-8-7v-42c0-4 3-7 8-7H420v-85c0-4 3-7 7-7h42c4 0 7 3 7 7V484h85c4 0 8 3 8 7v42z M256 224l0 115L512 544l256-205 0-115-256 205L256 224zM512 685l-256-205L256 595 512 800 768 595l0-115L512 685z M768 800V685L512 480 256 685V800l256-205L768 800zM512 339 768 544V429L512 224 256 429V544l256-205z @@ -45,7 +45,7 @@ M30 271l241 0 0-241-241 0 0 241zM392 271l241 0 0-241-241 0 0 241zM753 30l0 241 241 0 0-241-241 0zM30 632l241 0 0-241-241 0 0 241zM392 632l241 0 0-241-241 0 0 241zM753 632l241 0 0-241-241 0 0 241zM30 994l241 0 0-241-241 0 0 241zM392 994l241 0 0-241-241 0 0 241zM753 994l241 0 0-241-241 0 0 241z M24 512A488 488 0 01512 24A488 488 0 011000 512A488 488 0 01512 1000A488 488 0 0124 512zm447-325v327L243 619l51 111 300-138V187H471z M832 64h128v278l-128-146V64zm64 448L512 73 128 512H0L448 0h128l448 512h-128zm0 83V1024H640V704c0-35-29-64-64-64h-128a64 64 0 00-64 64v320H128V595l384-424 384 424z - M512 0C229.216 0 0 229.216 0 512c0 282.752 229.216 512 512 512s512-229.248 512-512c0-282.784-229.216-512-512-512z m0 957.92C266.112 957.92 66.08 757.888 66.08 512S266.112 66.08 512 66.08 957.92 266.112 957.92 512 757.888 957.92 512 957.92zM192 416h96a32 32 0 0 0 32-32v-32a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32zM384 416h96a32 32 0 0 0 32-32v-32a32 32 0 0 0-32-32h-96a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32zM576 416h96a32 32 0 0 0 32-32v-32a32 32 0 0 0-32-32h-96a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32zM832 320h-64a32 32 0 0 0-32 32v128h-160a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32zM320 544v-32a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32h96a32 32 0 0 0 32-32zM384 576h96a32 32 0 0 0 32-32v-32a32 32 0 0 0-32-32h-96a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32zM800 640H256a32 32 0 0 0-32 32v32a32 32 0 0 0 32 32h544a32 32 0 0 0 32-32v-32a32 32 0 0 0-32-32z + M512 0C229 0 0 229 0 512c0 283 229 512 512 512s512-229 512-512c0-283-229-512-512-512zm0 958C266 958 66 758 66 512S266 66 512 66 958 266 958 512 758 958 512 958zM192 416h96a32 32 0 0032-32v-32a32 32 0 00-32-32H192a32 32 0 00-32 32v32a32 32 0 0032 32zM384 416h96a32 32 0 0032-32v-32a32 32 0 00-32-32h-96a32 32 0 00-32 32v32a32 32 0 0032 32zM576 416h96a32 32 0 0032-32v-32a32 32 0 00-32-32h-96a32 32 0 00-32 32v32a32 32 0 0032 32zM832 320h-64a32 32 0 00-32 32v128h-160a32 32 0 00-32 32v32a32 32 0 0032 32h256a32 32 0 0032-32v-192a32 32 0 00-32-32zM320 544v-32a32 32 0 00-32-32H192a32 32 0 00-32 32v32a32 32 0 0032 32h96a32 32 0 0032-32zM384 576h96a32 32 0 0032-32v-32a32 32 0 00-32-32h-96a32 32 0 00-32 32v32a32 32 0 0032 32zM800 640H256a32 32 0 00-32 32v32a32 32 0 0032 32h544a32 32 0 0032-32v-32a32 32 0 00-32-32z M973 358a51 51 0 0151 51v563a51 51 0 01-51 51H51a51 51 0 01-51-51V410a51 51 0 0151-51h256a51 51 0 110 102H102v461h819V461h-205a51 51 0 110-102h256zM51 102a51 51 0 110-102h256c141 0 256 115 256 256v388l66-66a51 51 0 1172 72l-154 154a51 51 0 01-72 0l-154-154a51 51 0 1172-72L461 644V256c0-85-69-154-154-154H51z M512 0C229 0 0 229 0 512s229 512 512 512 512-229 512-512S795 0 512 0zM512 928c-230 0-416-186-416-416S282 96 512 96s416 186 416 416S742 928 512 928zM538 343c47 0 83-38 83-78 0-32-21-61-62-61-55 0-82 45-82 77C475 320 498 343 538 343zM533 729c-8 0-11-10-3-40l43-166c16-61 11-100-22-100-39 0-131 40-211 108l16 27c25-17 68-35 78-35 8 0 7 10 0 36l-38 158c-23 89 1 110 34 110 33 0 118-30 196-110l-19-25C575 717 543 729 533 729z M412 66C326 132 271 233 271 347c0 17 1 34 4 50-41-48-98-79-162-83a444 444 0 00-46 196c0 207 142 382 337 439h2c19 0 34 15 34 33 0 11-6 21-14 26l1 14C183 973 0 763 0 511 0 272 166 70 393 7A35 35 0 01414 0c19 0 34 15 34 33a33 33 0 01-36 33zm200 893c86-66 141-168 141-282 0-17-1-34-4-50 41 48 98 79 162 83a444 444 0 0046-196c0-207-142-382-337-439h-2a33 33 0 01-34-33c0-11 6-21 14-26L596 0C841 51 1024 261 1024 513c0 239-166 441-393 504A35 35 0 01610 1024a33 33 0 01-34-33 33 33 0 0136-33zM512 704a192 192 0 110-384 192 192 0 010 384z @@ -73,6 +73,7 @@ M277 85a149 149 0 00-43 292v230a32 32 0 0064 0V555h267A160 160 0 00725 395v-12a149 149 0 10-64-5v17a96 96 0 01-96 96H299V383A149 149 0 00277 85zM228 720a32 32 0 00-37-52 150 150 0 00-53 68 32 32 0 1060 23 85 85 0 0130-39zm136-52a32 32 0 00-37 52 86 86 0 0130 39 32 32 0 1060-23 149 149 0 00-53-68zM204 833a32 32 0 10-55 32 149 149 0 0063 58 32 32 0 0028-57 85 85 0 01-36-33zm202 32a32 32 0 00-55-32 85 85 0 01-36 33 32 32 0 0028 57 149 149 0 0063-58z M706 302a289 289 0 00-173 44 27 27 0 1029 46 234 234 0 01125-36c23 0 45 3 66 9 93 28 161 114 161 215C914 704 813 805 687 805H337C211 805 110 704 110 580c0-96 61-178 147-210C282 263 379 183 495 183a245 245 0 01210 119z M364 512h67v108h108v67h-108v108h-67v-108h-108v-67h108v-108zm298-64A107 107 0 01768 555C768 614 720 660 660 660h-108v-54h-108v-108h-94v108h-94c4-21 22-47 44-51l-1-12a75 75 0 0171-75a128 128 0 01239-7a106 106 0 0153-14z + M1024 64v704h-128v128h-128v128h-768v-704h128v-128h128v-128zM64 960h640v-576h-640zM320 128v64h576v512h64v-576zM192 256v64h576v512h64v-576zM432 688L576 832H480L384 736 288 832H192l144-144L192 544h96L384 640l96-96H576z M853 256h-43v512h43c47 0 85-38 85-85v-341c0-47-38-85-85-85zM725 768V171h128V85h-341v85H640v85H171c-47 0-85 38-85 85v341c0 47 38 85 85 85h469V853h-128v85h341v-85H725v-86zm-469-171v-171h384v171H256z M960 146v91C960 318 759 384 512 384S64 318 64 238V146C64 66 265 0 512 0s448 66 448 146zM960 352v206C960 638 759 704 512 704S64 638 64 558V352c96 66 272 97 448 97S864 418 960 352zm0 320v206C960 958 759 1024 512 1024S64 958 64 878V672c96 66 272 97 448 97S864 738 960 672z M883 567l-128-128c-17-17-43-17-60 0l-128 128c-17 17-17 43 0 60 17 17 43 17 60 0l55-55V683c0 21-21 43-43 43H418c-13-38-43-64-77-77V375c51-17 85-64 85-119 0-73-60-128-128-128-73 0-128 55-128 128 0 55 34 102 85 119v269c-51 17-85 64-85 119 0 73 55 128 128 128 55 0 102-34 119-85H640c73 0 128-55 128-128v-111l55 55c9 9 17 13 30 13 13 0 21-4 30-13 17-13 17-43 0-55zM299 213c26 0 43 17 43 43 0 21-21 43-43 43-26 0-43-21-43-43 0-26 17-43 43-43zm0 597c-26 0-43-21-43-43 0-26 17-43 43-43s43 17 43 43c0 21-17 43-43 43zM725 384c-73 0-128-60-128-128 0-73 55-128 128-128s128 55 128 128c0 68-55 128-128 128zm0-171c-26 0-43 17-43 43s17 43 43 43 43-17 43-43-17-43-43-43z @@ -85,7 +86,7 @@ M961 320 512 577 63 320 512 62l449 258zM512 628 185 442 63 512 512 770 961 512l-123-70L512 628zM512 821 185 634 63 704 512 962l449-258L839 634 512 821z M447 561a26 26 0 0126 26v171H421v-171a26 26 0 0126-26zm-98 65a26 26 0 0126 26v104H323v-104a26 26 0 0126-26zm0 0M561 268a32 32 0 0132 30v457h-65V299a32 32 0 0132-32zm0 0M675 384a26 26 0 0126 26v348H649v-350a26 26 0 0126-24zm0 0M801 223v579H223V223h579M805 171H219A49 49 0 00171 219v585A49 49 0 00219 853h585A49 49 0 00853 805V219A49 49 0 00805 171z M576 160H448c-18 0-32-14-32-32s14-32 32-32h128c18 0 32 14 32 32s-14 32-32 32zm243 186 36-36c13-13 13-33 0-45s-33-13-45 0l-33 33C708 233 614 192 512 192c-212 0-384 172-384 384s172 384 384 384 384-172 384-384c0-86-29-166-77-230zM544 894V864c0-18-14-32-32-32s-32 14-32 32v30C329 879 209 759 194 608H224c18 0 32-14 32-32s-14-32-32-32h-30C209 393 329 273 480 258V288c0 18 14 32 32 32s32-14 32-32v-30C695 273 815 393 830 544H800c-18 0-32 14-32 32s14 32 32 32h30C815 759 695 879 544 894zm108-471-160 128c-14 11-16 31-5 45 6 8 16 12 25 12 7 0 14-2 20-7l160-128c14-11 16-31 5-45-11-14-31-16-45-5z - M557.7 545.3 789.9 402.7c24-15 31.3-46.5 16.4-70.5c-14.8-23.8-46-31.2-70-16.7L506.5 456.6 277.1 315.4c-24.1-14.8-55.6-7.3-70.5 16.8c-14.8 24.1-7.3 55.6 16.8 70.5l231.8 142.6V819.1c0 28.3 22.9 51.2 51.2 51.2c28.3 0 51.2-22.9 51.2-51.2V545.3h.1zM506.5 0l443.4 256v511.9L506.5 1023.9 63.1 767.9v-511.9L506.5 0z + M558 545 790 403c24-15 31-47 16-71-15-24-46-31-70-17L507 457 277 315c-24-15-56-7-71 17-15 24-7 56 17 71l232 143V819c0 28 23 51 51 51 28 0 51-23 51-51V545h0zM507 0l443 256v512L507 1024 63 768v-512L507 0z M770 320a41 41 0 00-56-14l-252 153L207 306a41 41 0 10-43 70l255 153 2 296a41 41 0 0082 0l-2-295 255-155a41 41 0 0014-56zM481 935a42 42 0 01-42 0L105 741a42 42 0 01-21-36v-386a42 42 0 0121-36L439 89a42 42 0 0142 0l335 193a42 42 0 0121 36v87h84v-87a126 126 0 00-63-109L523 17a126 126 0 00-126 0L63 210a126 126 0 00-63 109v386a126 126 0 0063 109l335 193a126 126 0 00126 0l94-54-42-72zM1029 700h-126v-125a42 42 0 00-84 0v126h-126a42 42 0 000 84h126v126a42 42 0 1084 0v-126h126a42 42 0 000-84z M875 128h-725A107 107 0 0043 235v555A107 107 0 00149 896h725a107 107 0 00107-107v-555A107 107 0 00875 128zm-115 640h-183v-58l25-3c15 0 19-8 14-24l-22-61H419l-28 82 39 2V768h-166v-58l18-3c18-2 22-11 26-24l125-363-40-4V256h168l160 448 39 3zM506 340l-72 218h145l-71-218h-2z M177 156c-22 5-33 17-36 37c-10 57-33 258-13 278l445 445c23 23 61 23 84 0l246-246c23-23 23-61 0-84l-445-445C437 120 231 145 177 156zM331 344c-26 26-69 26-95 0c-26-26-26-69 0-95s69-26 95 0C357 276 357 318 331 344z diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index b5c6a4d3..6e9ff911 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -96,6 +96,7 @@ Checkout Commit Compare with HEAD Compare with Worktree + Copy Info Copy SHA Interactive Rebase ${0}$ to Here Rebase ${0}$ to Here @@ -189,6 +190,7 @@ Increase Number of Visible Lines SELECT FILE TO VIEW CHANGES Show hidden symbols + Swap Open In Merge Tool Discard Changes All local changes in working copy. @@ -401,6 +403,7 @@ Prune worktree information in `$GIT_DIR/worktrees` Pull Branch: + Fetch all branches Into: Local Changes: Discard @@ -543,7 +546,11 @@ Push ${0}$... URL: Update Submodules - Run `submodule update` command for this repository. + All submodules + Initialize as needed + Recursively + Submodule: + Use --remote option Warning Create Group Create Sub-Group diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index 38592803..9e1794a9 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -99,6 +99,7 @@ 检出此提交 与当前HEAD比较 与本地工作树比较 + 复制简要信息 复制提交指纹 交互式变基(rebase -i) ${0}$ 到此处 变基(rebase) ${0}$ 到此处 @@ -192,10 +193,11 @@ 增加可见的行数 请选择需要对比的文件 显示隐藏符号 + 交换比对双方 使用外部比对工具查看 放弃更改确认 所有本地址未提交的修改。 - 需要放弃的变更 : + 变更 : 总计{0}项选中更改 本操作不支持回退,请确认后继续!!! 书签 : @@ -404,6 +406,7 @@ 清理在`$GIT_DIR/worktrees`中的无效工作树信息 拉回(pull) 拉取分支 : + 拉取远程中的所有分支变更 本地分支 : 未提交更改 : 丢弃更改 @@ -545,7 +548,11 @@ 推送 ${0}$... 仓库地址 : 更新子模块 - 为此仓库执行`submodule update`命令,更新所有的子模块。 + 更新所有子模块 + 启用 '--init' + 启用 '--recursive' + 子模块 : + 启用 '--remote' 警告 新建分组 新建子分组 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index 0c34de95..ee620cba 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -99,6 +99,7 @@ 檢出此提交 與當前HEAD比較 與本地工作樹比較 + 複製簡要資訊 複製提交指紋 互動式變基(rebase -i) ${0}$ 到此處 變基(rebase) ${0}$ 到此處 @@ -192,10 +193,11 @@ 增加可見的行數 請選擇需要對比的檔案 顯示隱藏符號 + 交換比對雙方 使用外部比對工具檢視 放棄更改確認 所有本地址未提交的修改。 - 需要放棄的變更 : + 變更 : 總計{0}項選中更改 本操作不支援回退,請確認後繼續!!! 書籤 : @@ -404,6 +406,7 @@ 清理在`$GIT_DIR/worktrees`中的無效工作樹資訊 拉回(pull) 拉取分支 : + 拉取遠端中的所有分支變更 本地分支 : 未提交更改 : 丟棄更改 @@ -545,7 +548,11 @@ 推送 ${0}$... 倉庫地址 : 更新子模組 - 本操作將執行 `submodule update` 。 + 更新所有子模組 + 啟用『--init』選項 + 啟用『--recursive』選項 + 子模組 : + 啟用『--remote』選項 警告 新建分組 新建子分組 diff --git a/src/Resources/Styles.axaml b/src/Resources/Styles.axaml index 06b2a3bf..89df6a01 100644 --- a/src/Resources/Styles.axaml +++ b/src/Resources/Styles.axaml @@ -163,6 +163,27 @@