mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-30 02:57:00 -04:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44d30173c9 | ||
|
|
6bc85e6a21 | ||
|
|
271ca55512 |
@@ -1,15 +1,24 @@
|
||||
# see https://github.com/JamesIves/github-sponsors-readme-action
|
||||
name: Generate Sponsors README
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request: # Add this if you want to run checks on PRs as well
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout 🛎️
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: master # This ensures the checkout step fetches the master branch
|
||||
|
||||
- name: Switch to master branch
|
||||
run: |
|
||||
git fetch origin master:refs/remotes/origin/master
|
||||
git checkout master
|
||||
|
||||
- name: Generate Sponsors 💖
|
||||
uses: JamesIves/github-sponsors-readme-action@v1.2.2
|
||||
@@ -24,5 +33,7 @@ jobs:
|
||||
git config --global user.email "actions@users.noreply.github.com"
|
||||
git config --global user.name "README-bot"
|
||||
git add README.md
|
||||
git commit -m "Updated README.md" || exit 0
|
||||
git push
|
||||
git commit -m "Updated README.md [skip ci]" || exit 0
|
||||
git push origin master # Explicitly push to master branch
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_API_TOKEN }}
|
||||
|
||||
@@ -86,7 +86,6 @@ gui:
|
||||
border: 'rounded' # one of 'single' | 'double' | 'rounded' | 'hidden'
|
||||
animateExplosion: true # shows an explosion animation when nuking the working tree
|
||||
portraitMode: 'auto' # one of 'auto' | 'never' | 'always'
|
||||
filterMode: 'substring' # one of 'substring' | 'fuzzy'; see 'Filtering' section below
|
||||
git:
|
||||
paging:
|
||||
colorArg: always
|
||||
@@ -126,7 +125,6 @@ git:
|
||||
overrideGpg: false # prevents lazygit from spawning a separate process when using GPG
|
||||
disableForcePushing: false
|
||||
parseEmoji: false
|
||||
truncateCopiedCommitHashesTo: 12 # When copying commit hashes to the clipboard, truncate them to this length. Set to 40 to disable truncation.
|
||||
os:
|
||||
copyToClipboardCmd: '' # See 'Custom Command for Copying to Clipboard' section
|
||||
editPreset: '' # see 'Configuring File Editing' section
|
||||
@@ -256,7 +254,6 @@ keybinding:
|
||||
moveDownCommit: '<c-j>' # move commit down one
|
||||
moveUpCommit: '<c-k>' # move commit up one
|
||||
amendToCommit: 'A'
|
||||
amendAttributeMenu: 'a'
|
||||
pickCommit: 'p' # pick commit (when mid-rebase)
|
||||
revertCommit: 't'
|
||||
cherryPickCopy: 'C'
|
||||
@@ -279,12 +276,6 @@ keybinding:
|
||||
init: 'i'
|
||||
update: 'u'
|
||||
bulkMenu: 'b'
|
||||
commitMessage:
|
||||
commitMenu: '<c-o>'
|
||||
amendAttribute:
|
||||
addCoAuthor: 'c'
|
||||
resetAuthor: 'a'
|
||||
setAuthor: 'A'
|
||||
```
|
||||
|
||||
## Platform Defaults
|
||||
@@ -376,12 +367,6 @@ That's the behavior when `gui.scrollOffBehavior` is set to "margin" (the default
|
||||
|
||||
This setting applies both to all list views (e.g. commits and branches etc), and to the staging view.
|
||||
|
||||
## Filtering
|
||||
|
||||
We have two ways to filter things, substring matching (the default) and fuzzy searching. With substring matching, the text you enter gets searched for verbatim (usually case-insensitive, except when your filter string contains uppercase letters, in which case we search case-sensitively). You can search for multiple non-contiguous substrings by separating them with spaces; for example, "int test" will match "integration-testing". All substrings have to match, but not necessarily in the given order.
|
||||
|
||||
Fuzzy searching is smarter in that it allows every letter of the filter string to match anywhere in the text (only in order though), assigning a weight to the quality of the match and sorting by that order. This has the advantage that it allows typing "clt" to match "commit_loader_test" (letters at the beginning of subwords get more weight); but it has the disadvantage that it tends to return lots of irrelevant results, especially with short filter strings.
|
||||
|
||||
## Color Attributes
|
||||
|
||||
For color attributes you can choose an array of attributes (with max one color attribute)
|
||||
|
||||
@@ -27,19 +27,6 @@ creates a commit with the appropriate subject line.
|
||||
Don't confuse this with the lowercase "f" command ("Fixup commit"); that one
|
||||
squashes the selected commit into its parent, this is not what we want here.
|
||||
|
||||
## Creating amend commits
|
||||
|
||||
There's a special type of fixup commit that uses "amend!" instead of "fixup!" in
|
||||
the commit message subject; in addition to fixing up the original commit with
|
||||
changes it allows you to also (or only) change the commit message of the
|
||||
original commit. The menu that appears when pressing shift-F has options for
|
||||
both of these; they bring up a commit message panel similar to when you reword a
|
||||
commit, but then create the "amend!" commit containing the new message. Note
|
||||
that in that panel you only type the new message as you want it to be
|
||||
eventually; lazygit then takes care of formatting the "amend!" commit
|
||||
appropriately for you (with the subject of your new message moving into the body
|
||||
of the "amend!" commit).
|
||||
|
||||
## Squashing fixup commits
|
||||
|
||||
When you're ready to merge the branch and want to squash all these fixup commits
|
||||
|
||||
@@ -263,7 +263,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Copy branch name to clipboard | |
|
||||
| `` <space> `` | Checkout | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | Checkout | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | New branch | |
|
||||
| `` M `` | Merge | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
@@ -105,7 +105,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | Mark the selected commit to be picked (when mid-rebase). This means that the commit will be retained upon continuing the rebase. |
|
||||
| `` F `` | Fixupコミットを作成 | このコミットに対するfixupコミットを作成 |
|
||||
| `` F `` | Create fixup commit | このコミットに対するfixupコミットを作成 |
|
||||
| `` S `` | Apply fixup commits | Squash all 'fixup!' commits, either above the selected commit, or all in current branch (autosquash). |
|
||||
| `` <c-j> `` | コミットを1つ下に移動 | |
|
||||
| `` <c-k> `` | コミットを1つ上に移動 | |
|
||||
@@ -327,7 +327,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | ブランチ名をクリップボードにコピー | |
|
||||
| `` <space> `` | チェックアウト | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | チェックアウト | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | 新しいブランチを作成 | |
|
||||
| `` M `` | 現在のブランチにマージ | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
@@ -240,7 +240,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | 브랜치명을 클립보드에 복사 | |
|
||||
| `` <space> `` | 체크아웃 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | 체크아웃 | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | 새 브랜치 생성 | |
|
||||
| `` M `` | 현재 브랜치에 병합 | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | 체크아웃된 브랜치를 이 브랜치에 리베이스 | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
@@ -151,7 +151,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | Kies commit (wanneer midden in rebase) |
|
||||
| `` F `` | Creëer fixup commit | Creëer fixup commit |
|
||||
| `` F `` | Create fixup commit | Creëer fixup commit |
|
||||
| `` S `` | Apply fixup commits | Squash bovenstaande commits |
|
||||
| `` <c-j> `` | Verplaats commit 1 naar beneden | |
|
||||
| `` <c-k> `` | Verplaats commit 1 naar boven | |
|
||||
@@ -241,7 +241,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopieer branch name naar klembord | |
|
||||
| `` <space> `` | Uitchecken | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | Uitchecken | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | Nieuwe branch | |
|
||||
| `` M `` | Merge in met huidige checked out branch | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | Rebase branch | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
+280
-280
@@ -1,142 +1,146 @@
|
||||
_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
|
||||
|
||||
# Lazygit Skróty klawiszowe
|
||||
# Lazygit Keybindings
|
||||
|
||||
_Legenda: `<c-b>` oznacza ctrl+b, `<a-b>` oznacza alt+b, `B` oznacza shift+b_
|
||||
_Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_
|
||||
|
||||
## Globalne skróty klawiszowe
|
||||
## Globalne
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-r> `` | Przełącz na ostatnie repozytorium | |
|
||||
| `` <pgup> (fn+up/shift+k) `` | Przewiń główne okno w górę | |
|
||||
| `` <pgdown> (fn+down/shift+j) `` | Przewiń główne okno w dół | |
|
||||
| `` @ `` | Pokaż opcje dziennika poleceń | Pokaż opcje dla dziennika poleceń, np. pokazywanie/ukrywanie dziennika poleceń i skupienie na dzienniku poleceń. |
|
||||
| `` P `` | Wypchnij | Wypchnij bieżącą gałąź do jej gałęzi nadrzędnej. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej. |
|
||||
| `` p `` | Pociągnij | Pociągnij zmiany z zdalnego dla bieżącej gałęzi. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej. |
|
||||
| `` } `` | Zwiększ rozmiar kontekstu w widoku różnic | Zwiększ ilość kontekstu pokazywanego wokół zmian w widoku różnic. |
|
||||
| `` { `` | Zmniejsz rozmiar kontekstu w widoku różnic | Zmniejsz ilość kontekstu pokazywanego wokół zmian w widoku różnic. |
|
||||
| `` : `` | Wykonaj polecenie niestandardowe | Wyświetl monit, w którym możesz wprowadzić polecenie powłoki do wykonania. Nie należy mylić z wcześniej skonfigurowanymi poleceniami niestandardowymi. |
|
||||
| `` <c-p> `` | Wyświetl opcje niestandardowej łatki | |
|
||||
| `` m `` | Pokaż opcje scalania/rebase | Pokaż opcje do przerwania/kontynuowania/pominięcia bieżącego scalania/rebase. |
|
||||
| `` R `` | Odśwież | Odśwież stan git (tj. uruchom `git status`, `git branch`, itp. w tle, aby zaktualizować zawartość paneli). To nie uruchamia `git fetch`. |
|
||||
| `` + `` | Następny tryb ekranu (normalny/półpełny/pełnoekranowy) | |
|
||||
| `` _ `` | Poprzedni tryb ekranu | |
|
||||
| `` ? `` | Otwórz menu przypisań klawiszy | |
|
||||
| `` <c-s> `` | Pokaż opcje filtrowania | Pokaż opcje filtrowania dziennika commitów, tak aby pokazywane były tylko commity pasujące do filtra. |
|
||||
| `` W `` | Pokaż opcje różnicowania | Pokaż opcje dotyczące różnicowania dwóch refów, np. różnicowanie względem wybranego refa, wprowadzanie refa do różnicowania i odwracanie kierunku różnic. |
|
||||
| `` <c-e> `` | Pokaż opcje różnicowania | Pokaż opcje dotyczące różnicowania dwóch refów, np. różnicowanie względem wybranego refa, wprowadzanie refa do różnicowania i odwracanie kierunku różnic. |
|
||||
| `` q `` | Wyjdź | |
|
||||
| `` <c-r> `` | Switch to a recent repo | |
|
||||
| `` <pgup> (fn+up/shift+k) `` | Scroll up main window | |
|
||||
| `` <pgdown> (fn+down/shift+j) `` | Scroll down main window | |
|
||||
| `` @ `` | View command log options | View options for the command log e.g. show/hide the command log and focus the command log. |
|
||||
| `` P `` | Push | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. |
|
||||
| `` p `` | Pull | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. |
|
||||
| `` } `` | Increase diff context size | Increase the amount of the context shown around changes in the diff view. |
|
||||
| `` { `` | Decrease diff context size | Decrease the amount of the context shown around changes in the diff view. |
|
||||
| `` : `` | Wykonaj własną komendę | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. |
|
||||
| `` <c-p> `` | View custom patch options | |
|
||||
| `` m `` | Widok scalenia/opcje zmiany bazy | View options to abort/continue/skip the current merge/rebase. |
|
||||
| `` R `` | Odśwież | Refresh the git state (i.e. run `git status`, `git branch`, etc in background to update the contents of panels). This does not run `git fetch`. |
|
||||
| `` + `` | Next screen mode (normal/half/fullscreen) | |
|
||||
| `` _ `` | Prev screen mode | |
|
||||
| `` ? `` | Open keybindings menu | |
|
||||
| `` <c-s> `` | View filter options | View options for filtering the commit log, so that only commits matching the filter are shown. |
|
||||
| `` W `` | View diffing options | View options relating to diffing two refs e.g. diffing against selected ref, entering ref to diff against, and reversing the diff direction. |
|
||||
| `` <c-e> `` | View diffing options | View options relating to diffing two refs e.g. diffing against selected ref, entering ref to diff against, and reversing the diff direction. |
|
||||
| `` q `` | Quit | |
|
||||
| `` <esc> `` | Anuluj | |
|
||||
| `` <c-w> `` | Przełącz białe znaki | Przełącz czy zmiany białych znaków są pokazywane w widoku różnic. |
|
||||
| `` z `` | Cofnij | Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby cofnąć ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity. |
|
||||
| `` <c-z> `` | Ponów | Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby ponowić ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity. |
|
||||
| `` <c-w> `` | Toggle whitespace | Toggle whether or not whitespace changes are shown in the diff view. |
|
||||
| `` z `` | Undo | The reflog will be used to determine what git command to run to undo the last git command. This does not include changes to the working tree; only commits are taken into consideration. |
|
||||
| `` <c-z> `` | Redo | The reflog will be used to determine what git command to run to redo the last git command. This does not include changes to the working tree; only commits are taken into consideration. |
|
||||
|
||||
## Nawigacja panelu listy
|
||||
## List panel navigation
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` , `` | Poprzednia strona | |
|
||||
| `` . `` | Następna strona | |
|
||||
| `` < `` | Przewiń do góry | |
|
||||
| `` > `` | Przewiń do dołu | |
|
||||
| `` v `` | Przełącz zaznaczenie zakresu | |
|
||||
| `` <s-down> `` | Zaznacz zakres w dół | |
|
||||
| `` <s-up> `` | Zaznacz zakres w górę | |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
| `` H `` | Przewiń w lewo | |
|
||||
| `` L `` | Przewiń w prawo | |
|
||||
| `` ] `` | Następna zakładka | |
|
||||
| `` [ `` | Poprzednia zakładka | |
|
||||
| `` , `` | Previous page | |
|
||||
| `` . `` | Next page | |
|
||||
| `` < `` | Scroll to top | |
|
||||
| `` > `` | Scroll to bottom | |
|
||||
| `` v `` | Toggle range select | |
|
||||
| `` <s-down> `` | Range select down | |
|
||||
| `` <s-up> `` | Range select up | |
|
||||
| `` / `` | Search the current view by text | |
|
||||
| `` H `` | Scroll left | |
|
||||
| `` L `` | Scroll right | |
|
||||
| `` ] `` | Next tab | |
|
||||
| `` [ `` | Previous tab | |
|
||||
|
||||
## Commit summary
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | Potwierdź | |
|
||||
| `` <esc> `` | Zamknij | |
|
||||
|
||||
## Commity
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj SHA commita do schowka | |
|
||||
| `` <c-r> `` | Resetuj wybrane (cherry-picked) commity | |
|
||||
| `` b `` | Zobacz opcje bisect | |
|
||||
| `` s `` | Scal | Scal wybrany commit z commitami poniżej. Wiadomość wybranego commita zostanie dołączona do commita poniżej. |
|
||||
| `` f `` | Poprawka | Włącz wybrany commit do commita poniżej. Podobnie do fixup, ale wiadomość wybranego commita zostanie odrzucona. |
|
||||
| `` r `` | Przeformułuj | Przeformułuj wiadomość wybranego commita. |
|
||||
| `` R `` | Przeformułuj za pomocą edytora | |
|
||||
| `` d `` | Usuń | Usuń wybrany commit. To usunie commit z gałęzi za pomocą rebazowania. Jeśli commit wprowadza zmiany, od których zależą późniejsze commity, być może będziesz musiał rozwiązać konflikty scalania. |
|
||||
| `` e `` | Edytuj (rozpocznij interaktywne rebazowanie) | Edytuj wybrany commit. Użyj tego, aby rozpocząć interaktywne rebazowanie od wybranego commita. Podczas trwania rebazowania, to oznaczy wybrany commit do edycji, co oznacza, że po kontynuacji rebazowania, rebazowanie zostanie wstrzymane na wybranym commicie, aby umożliwić wprowadzenie zmian. |
|
||||
| `` i `` | Rozpocznij interaktywny rebase | Rozpocznij interaktywny rebase dla commitów na twoim branchu. To będzie zawierać wszystkie commity od HEAD do pierwszego commita scalenia lub commita głównego brancha.
|
||||
Jeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, naciśnij `e`. |
|
||||
| `` p `` | Wybierz | Oznacz wybrany commit do wybrania (podczas rebazowania). Oznacza to, że commit zostanie zachowany po kontynuacji rebazowania. |
|
||||
| `` F `` | Utwórz commit fixup | Utwórz commit 'fixup!' dla wybranego commita. Później możesz nacisnąć `S` na tym samym commicie, aby zastosować wszystkie powyższe commity fixup. |
|
||||
| `` S `` | Zastosuj commity fixup | Scal wszystkie commity 'fixup!', albo powyżej wybranego commita, albo wszystkie w bieżącej gałęzi (autosquash). |
|
||||
| `` <c-j> `` | Przesuń commit w dół | |
|
||||
| `` <c-k> `` | Przesuń commit w górę | |
|
||||
| `` V `` | Wklej (cherry-pick) | |
|
||||
| `` B `` | Oznacz jako bazowy commit dla rebase | Wybierz bazowy commit dla następnego rebase. Kiedy robisz rebase na branch, tylko commity powyżej bazowego commita zostaną przeniesione. Używa to polecenia `git rebase --onto`. |
|
||||
| `` A `` | Popraw | Popraw commit ze zmianami zatwierdzonymi. Jeśli wybrany commit jest commit HEAD, to wykona `git commit --amend`. W przeciwnym razie commit zostanie poprawiony za pomocą rebazowania. |
|
||||
| `` a `` | Popraw atrybut commita | Ustaw/Resetuj autora commita lub ustaw współautora. |
|
||||
| `` t `` | Cofnij | Utwórz commit cofający dla wybranego commita, który stosuje zmiany wybranego commita w odwrotnej kolejności. |
|
||||
| `` T `` | Otaguj commit | Utwórz nowy tag wskazujący na wybrany commit. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu. |
|
||||
| `` <c-l> `` | Zobacz opcje logów | Zobacz opcje dla logów commitów, np. zmiana kolejności sortowania, ukrywanie grafu gita, pokazywanie całego grafu gita. |
|
||||
| `` <space> `` | Przełącz | Przełącz wybrany commit jako odłączoną HEAD. |
|
||||
| `` y `` | Kopiuj atrybut commita do schowka | Kopiuj atrybut commita do schowka (np. hash, URL, różnice, wiadomość, autor). |
|
||||
| `` o `` | Otwórz commit w przeglądarce | |
|
||||
| `` n `` | Utwórz nową gałąź z commita | |
|
||||
| `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. |
|
||||
| `` C `` | Kopiuj (cherry-pick) | Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `V`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `<esc>`, aby anulować zaznaczenie. |
|
||||
| `` <c-t> `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | |
|
||||
| `` <enter> `` | Wyświetl pliki | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
| `` <c-o> `` | Copy commit SHA to clipboard | |
|
||||
| `` <c-r> `` | Reset copied (cherry-picked) commits selection | |
|
||||
| `` b `` | View bisect options | |
|
||||
| `` s `` | Spłaszcz | Squash the selected commit into the commit below it. The selected commit's message will be appended to the commit below it. |
|
||||
| `` f `` | Napraw | Meld the selected commit into the commit below it. Similar to fixup, but the selected commit's message will be discarded. |
|
||||
| `` r `` | Zmień nazwę commita | Reword the selected commit's message. |
|
||||
| `` R `` | Zmień nazwę commita w edytorze | |
|
||||
| `` d `` | Usuń commit | Drop the selected commit. This will remove the commit from the branch via a rebase. If the commit makes changes that later commits depend on, you may need to resolve merge conflicts. |
|
||||
| `` e `` | Edit (start interactive rebase) | Edytuj commit |
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | Wybierz commit (podczas zmiany bazy) |
|
||||
| `` F `` | Create fixup commit | Utwórz commit naprawczy dla tego commita |
|
||||
| `` S `` | Apply fixup commits | Spłaszcz wszystkie commity naprawcze powyżej zaznaczonych commitów (autosquash) |
|
||||
| `` <c-j> `` | Przenieś commit 1 w dół | |
|
||||
| `` <c-k> `` | Przenieś commit 1 w górę | |
|
||||
| `` V `` | Wklej commity (przebieranie) | |
|
||||
| `` B `` | Mark as base commit for rebase | Select a base commit for the next rebase. When you rebase onto a branch, only commits above the base commit will be brought across. This uses the `git rebase --onto` command. |
|
||||
| `` A `` | Amend | Popraw commit zmianami z poczekalni |
|
||||
| `` a `` | Amend commit attribute | Set/Reset commit author or set co-author. |
|
||||
| `` t `` | Revert | Create a revert commit for the selected commit, which applies the selected commit's changes in reverse. |
|
||||
| `` T `` | Tag commit | Create a new tag pointing at the selected commit. You'll be prompted to enter a tag name and optional description. |
|
||||
| `` <c-l> `` | View log options | View options for commit log e.g. changing sort order, hiding the git graph, showing the whole git graph. |
|
||||
| `` <space> `` | Przełącz | Checkout the selected commit as a detached HEAD. |
|
||||
| `` y `` | Copy commit attribute to clipboard | Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author). |
|
||||
| `` o `` | Open commit in browser | |
|
||||
| `` n `` | Create new branch off of commit | |
|
||||
| `` g `` | Wyświetl opcje resetu | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` C `` | Kopiuj commit (przebieranie) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | Przeglądaj pliki commita | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Drzewa pracy
|
||||
## Confirmation panel
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` n `` | Nowe drzewo pracy | |
|
||||
| `` <space> `` | Przełącz | Przełącz do wybranego drzewa pracy. |
|
||||
| `` o `` | Otwórz w edytorze | |
|
||||
| `` d `` | Usuń | Usuń wybrane drzewo pracy. To usunie zarówno katalog drzewa pracy, jak i metadane o drzewie pracy w katalogu .git. |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` <enter> `` | Potwierdź | |
|
||||
| `` <esc> `` | Zamknij | |
|
||||
|
||||
## Główny panel (budowanie łatki)
|
||||
## Local branches
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <left> `` | Idź do poprzedniego fragmentu | |
|
||||
| `` <right> `` | Idź do następnego fragmentu | |
|
||||
| `` v `` | Przełącz zaznaczenie zakresu | |
|
||||
| `` a `` | Zaznacz fragment | Przełącz tryb zaznaczania fragmentu. |
|
||||
| `` <c-o> `` | Kopiuj zaznaczony tekst do schowka | |
|
||||
| `` o `` | Otwórz plik | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` e `` | Edytuj plik | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` <space> `` | Przełącz linie w łatce | |
|
||||
| `` <esc> `` | Wyjdź z budowniczego niestandardowej łatki | |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
|
||||
## Lokalne gałęzie
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj nazwę gałęzi do schowka | |
|
||||
| `` i `` | Pokaż opcje git-flow | |
|
||||
| `` <space> `` | Przełącz | Przełącz wybrany element. |
|
||||
| `` <c-o> `` | Copy branch name to clipboard | |
|
||||
| `` i `` | Show git-flow options | |
|
||||
| `` <space> `` | Przełącz | Checkout selected item. |
|
||||
| `` n `` | Nowa gałąź | |
|
||||
| `` o `` | Utwórz żądanie ściągnięcia | |
|
||||
| `` O `` | Zobacz opcje tworzenia pull requesta | |
|
||||
| `` <c-y> `` | Kopiuj adres URL żądania ściągnięcia do schowka | |
|
||||
| `` c `` | Przełącz według nazwy | Przełącz według nazwy. W polu wprowadzania możesz wpisać '-' aby przełączyć się na ostatnią gałąź. |
|
||||
| `` F `` | Wymuś przełączenie | Wymuś przełączenie wybranej gałęzi. To spowoduje odrzucenie wszystkich lokalnych zmian w drzewie roboczym przed przełączeniem na wybraną gałąź. |
|
||||
| `` d `` | Usuń | Wyświetl opcje usuwania lokalnej/odległej gałęzi. |
|
||||
| `` r `` | Przebazuj | Przebazuj przełączoną gałąź na wybraną gałąź. |
|
||||
| `` M `` | Scal | Scal wybraną gałąź z aktualnie sprawdzoną gałęzią. |
|
||||
| `` f `` | Szybkie przewijanie | Szybkie przewijanie wybranej gałęzi z jej źródła. |
|
||||
| `` T `` | Nowy tag | |
|
||||
| `` s `` | Kolejność sortowania | |
|
||||
| `` g `` | Reset | |
|
||||
| `` R `` | Zmień nazwę gałęzi | |
|
||||
| `` u `` | Pokaż opcje upstream | Pokaż opcje dotyczące upstream gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream. |
|
||||
| `` <enter> `` | Pokaż commity | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` o `` | Utwórz żądanie pobrania | |
|
||||
| `` O `` | Utwórz opcje żądania ściągnięcia | |
|
||||
| `` <c-y> `` | Skopiuj adres URL żądania pobrania do schowka | |
|
||||
| `` c `` | Przełącz używając nazwy | Checkout by name. In the input box you can enter '-' to switch to the last branch. |
|
||||
| `` F `` | Wymuś przełączenie | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. |
|
||||
| `` d `` | Delete | View delete options for local/remote branch. |
|
||||
| `` r `` | Zmiana bazy gałęzi | Rebase the checked-out branch onto the selected branch. |
|
||||
| `` M `` | Scal do obecnej gałęzi | Merge selected branch into currently checked out branch. |
|
||||
| `` f `` | Fast-forward | Fast-forward selected branch from its upstream. |
|
||||
| `` T `` | New tag | |
|
||||
| `` s `` | Sort order | |
|
||||
| `` g `` | Wyświetl opcje resetu | |
|
||||
| `` R `` | Rename branch | |
|
||||
| `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. |
|
||||
| `` <enter> `` | View commits | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Main panel (patch building)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <left> `` | Poprzedni kawałek | |
|
||||
| `` <right> `` | Następny kawałek | |
|
||||
| `` v `` | Toggle range select | |
|
||||
| `` a `` | Select hunk | Toggle hunk selection mode. |
|
||||
| `` <c-o> `` | Copy selected text to clipboard | |
|
||||
| `` o `` | Otwórz plik | Open file in default application. |
|
||||
| `` e `` | Edytuj plik | Open file in external editor. |
|
||||
| `` <space> `` | Toggle lines in patch | |
|
||||
| `` <esc> `` | Wyście z trybu "linia po linii" | |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Menu
|
||||
|
||||
@@ -144,221 +148,217 @@ Jeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita,
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | Wykonaj | |
|
||||
| `` <esc> `` | Zamknij | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
|
||||
## Panel główny (normalny)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` mouse wheel down (fn+up) `` | Przewiń w dół | |
|
||||
| `` mouse wheel up (fn+down) `` | Przewiń w górę | |
|
||||
|
||||
## Panel główny (scalanie)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <space> `` | Wybierz fragment | |
|
||||
| `` b `` | Wybierz wszystkie fragmenty | |
|
||||
| `` <up> `` | Poprzedni fragment | |
|
||||
| `` <down> `` | Następny fragment | |
|
||||
| `` <left> `` | Poprzedni konflikt | |
|
||||
| `` <right> `` | Następny konflikt | |
|
||||
| `` z `` | Cofnij | Cofnij ostatnie rozwiązanie konfliktu scalania. |
|
||||
| `` e `` | Edytuj plik | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` o `` | Otwórz plik | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` M `` | Otwórz zewnętrzne narzędzie scalania | Uruchom `git mergetool`. |
|
||||
| `` <esc> `` | Wróć do panelu plików | |
|
||||
|
||||
## Panel główny (zatwierdzanie)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <left> `` | Idź do poprzedniego fragmentu | |
|
||||
| `` <right> `` | Idź do następnego fragmentu | |
|
||||
| `` v `` | Przełącz zaznaczenie zakresu | |
|
||||
| `` a `` | Zaznacz fragment | Przełącz tryb zaznaczania fragmentu. |
|
||||
| `` <c-o> `` | Kopiuj zaznaczony tekst do schowka | |
|
||||
| `` <space> `` | Zatwierdź | Przełącz zaznaczenie zatwierdzone/niezatwierdzone. |
|
||||
| `` d `` | Odrzuć | Gdy zaznaczona jest niezatwierdzona zmiana, odrzuć ją używając `git reset`. Gdy zaznaczona jest zatwierdzona zmiana, cofnij zatwierdzenie. |
|
||||
| `` o `` | Otwórz plik | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` e `` | Edytuj plik | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` <esc> `` | Wróć do panelu plików | |
|
||||
| `` <tab> `` | Przełącz widok | Przełącz na inny widok (zatwierdzone/niezatwierdzone zmiany). |
|
||||
| `` E `` | Edytuj fragment | Edytuj wybrany fragment w zewnętrznym edytorze. |
|
||||
| `` c `` | Commit | Zatwierdź zmiany zatwierdzone. |
|
||||
| `` w `` | Zatwierdź zmiany bez hooka pre-commit | |
|
||||
| `` C `` | Zatwierdź zmiany używając edytora git | |
|
||||
| `` <c-f> `` | Znajdź bazowy commit do poprawki | Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
|
||||
## Panel potwierdzenia
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | Potwierdź | |
|
||||
| `` <esc> `` | Zamknij/Anuluj | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Pliki
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj ścieżkę do schowka | |
|
||||
| `` <space> `` | Zatwierdź | Przełącz zatwierdzenie dla wybranego pliku. |
|
||||
| `` <c-b> `` | Filtruj pliki według statusu | |
|
||||
| `` y `` | Kopiuj do schowka | |
|
||||
| `` c `` | Commit | Zatwierdź zmiany zatwierdzone. |
|
||||
| `` w `` | Zatwierdź zmiany bez hooka pre-commit | |
|
||||
| `` A `` | Popraw ostatni commit | |
|
||||
| `` C `` | Zatwierdź zmiany używając edytora git | |
|
||||
| `` <c-f> `` | Znajdź bazowy commit do poprawki | Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` e `` | Edytuj | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` o `` | Otwórz plik | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` i `` | Ignoruj lub wyklucz plik | |
|
||||
| `` <c-o> `` | Copy path to clipboard | |
|
||||
| `` <space> `` | Przełącz stan poczekalni | Toggle staged for selected file. |
|
||||
| `` <c-b> `` | Filter files by status | |
|
||||
| `` y `` | Copy to clipboard | |
|
||||
| `` c `` | Zatwierdź zmiany | Commit staged changes. |
|
||||
| `` w `` | Zatwierdź zmiany bez skryptu pre-commit | |
|
||||
| `` A `` | Zmień ostatni commit | |
|
||||
| `` C `` | Zatwierdź zmiany używając edytora | |
|
||||
| `` <c-f> `` | Find base commit for fixup | Find the commit that your current changes are building upon, for the sake of amending/fixing up the commit. This spares you from having to look through your branch's commits one-by-one to see which commit should be amended/fixed up. See docs: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` e `` | Edit | Open file in external editor. |
|
||||
| `` o `` | Otwórz plik | Open file in default application. |
|
||||
| `` i `` | Ignore or exclude file | |
|
||||
| `` r `` | Odśwież pliki | |
|
||||
| `` s `` | Schowaj | Schowaj wszystkie zmiany. Dla innych wariantów schowania, użyj klawisza wyświetlania opcji schowka. |
|
||||
| `` S `` | Wyświetl opcje schowka | Wyświetl opcje schowka (np. schowaj wszystko, schowaj zatwierdzone, schowaj niezatwierdzone). |
|
||||
| `` a `` | Zatwierdź wszystko | Przełącz zatwierdzenie/odznaczenie dla wszystkich plików w drzewie roboczym. |
|
||||
| `` <enter> `` | Zatwierdź linie / Zwiń katalog | Jeśli wybrany element jest plikiem, skup się na widoku zatwierdzania, aby móc zatwierdzać poszczególne fragmenty/linie. Jeśli wybrany element jest katalogiem, zwiń/rozwiń go. |
|
||||
| `` d `` | Odrzuć | Wyświetl opcje odrzucania zmian w wybranym pliku. |
|
||||
| `` g `` | Pokaż opcje resetowania do upstream | |
|
||||
| `` D `` | Reset | Wyświetl opcje resetu dla drzewa roboczego (np. zniszczenie drzewa roboczego). |
|
||||
| `` ` `` | Przełącz widok drzewa plików | Przełącz widok plików między płaskim a drzewem. Płaski układ pokazuje wszystkie ścieżki plików na jednej liście, układ drzewa grupuje pliki według katalogów. |
|
||||
| `` <c-t> `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | |
|
||||
| `` M `` | Otwórz zewnętrzne narzędzie scalania | Uruchom `git mergetool`. |
|
||||
| `` f `` | Pobierz | Pobierz zmiany ze zdalnego serwera. |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
| `` s `` | Stash | Stash all changes. For other variations of stashing, use the view stash options keybinding. |
|
||||
| `` S `` | Wyświetl opcje schowka | View stash options (e.g. stash all, stash staged, stash unstaged). |
|
||||
| `` a `` | Przełącz stan poczekalni wszystkich | Toggle staged/unstaged for all files in working tree. |
|
||||
| `` <enter> `` | Zatwierdź pojedyncze linie | If the selected item is a file, focus the staging view so you can stage individual hunks/lines. If the selected item is a directory, collapse/expand it. |
|
||||
| `` d `` | Pokaż opcje porzucania zmian | View options for discarding changes to the selected file. |
|
||||
| `` g `` | View upstream reset options | |
|
||||
| `` D `` | Reset | View reset options for working tree (e.g. nuking the working tree). |
|
||||
| `` ` `` | Toggle file tree view | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` M `` | Open external merge tool | Run `git mergetool`. |
|
||||
| `` f `` | Pobierz | Fetch changes from remote. |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Pliki commita
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj ścieżkę do schowka | |
|
||||
| `` c `` | Przełącz | Przełącz plik. Zastępuje plik w twoim drzewie roboczym wersją z wybranego commita. |
|
||||
| `` d `` | Usuń | Odrzuć zmiany w tym pliku z tego commita. Uruchamia interaktywny rebase w tle, więc możesz otrzymać konflikt scalania, jeśli późniejszy commit również zmienia ten plik. |
|
||||
| `` o `` | Otwórz plik | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` e `` | Edytuj | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` <c-t> `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | |
|
||||
| `` <space> `` | Przełącz plik włączony w łatkę | Przełącz, czy plik jest włączony w niestandardową łatkę. Zobacz https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` a `` | Przełącz wszystkie pliki | Dodaj/usuń wszystkie pliki commita do niestandardowej łatki. Zobacz https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` <enter> `` | Wejdź do pliku / Przełącz zwiń katalog | Jeśli plik jest wybrany, wejdź do pliku, aby móc dodawać/usuwać poszczególne linie do niestandardowej łatki. Jeśli wybrany jest katalog, przełącz katalog. |
|
||||
| `` ` `` | Przełącz widok drzewa plików | Przełącz widok plików między płaskim a drzewem. Płaski układ pokazuje wszystkie ścieżki plików na jednej liście, układ drzewa grupuje pliki według katalogów. |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
| `` <c-o> `` | Copy path to clipboard | |
|
||||
| `` c `` | Przełącz | Plik wybierania |
|
||||
| `` d `` | Remove | Porzuć zmiany commita dla tego pliku |
|
||||
| `` o `` | Otwórz plik | Open file in default application. |
|
||||
| `` e `` | Edit | Open file in external editor. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <space> `` | Toggle file included in patch | Toggle whether the file is included in the custom patch. See https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` a `` | Toggle all files | Add/remove all commit's files to custom patch. See https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` <enter> `` | Enter file / Toggle directory collapsed | If a file is selected, enter the file so that you can add/remove individual lines to the custom patch. If a directory is selected, toggle the directory. |
|
||||
| `` ` `` | Toggle file tree view | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Podsumowanie commita
|
||||
## Poczekalnia
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | Potwierdź | |
|
||||
| `` <esc> `` | Zamknij | |
|
||||
| `` <left> `` | Poprzedni kawałek | |
|
||||
| `` <right> `` | Następny kawałek | |
|
||||
| `` v `` | Toggle range select | |
|
||||
| `` a `` | Select hunk | Toggle hunk selection mode. |
|
||||
| `` <c-o> `` | Copy selected text to clipboard | |
|
||||
| `` <space> `` | Przełącz stan poczekalni | Toggle selection staged / unstaged. |
|
||||
| `` d `` | Discard | When unstaged change is selected, discard the change using `git reset`. When staged change is selected, unstage the change. |
|
||||
| `` o `` | Otwórz plik | Open file in default application. |
|
||||
| `` e `` | Edytuj plik | Open file in external editor. |
|
||||
| `` <esc> `` | Wróć do panelu plików | |
|
||||
| `` <tab> `` | Switch view | Switch to other view (staged/unstaged changes). |
|
||||
| `` E `` | Edit hunk | Edit selected hunk in external editor. |
|
||||
| `` c `` | Zatwierdź zmiany | Commit staged changes. |
|
||||
| `` w `` | Zatwierdź zmiany bez skryptu pre-commit | |
|
||||
| `` C `` | Zatwierdź zmiany używając edytora | |
|
||||
| `` <c-f> `` | Find base commit for fixup | Find the commit that your current changes are building upon, for the sake of amending/fixing up the commit. This spares you from having to look through your branch's commits one-by-one to see which commit should be amended/fixed up. See docs: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Reflog
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj SHA commita do schowka | |
|
||||
| `` <space> `` | Przełącz | Przełącz wybrany commit jako odłączoną HEAD. |
|
||||
| `` y `` | Kopiuj atrybut commita do schowka | Kopiuj atrybut commita do schowka (np. hash, URL, różnice, wiadomość, autor). |
|
||||
| `` o `` | Otwórz commit w przeglądarce | |
|
||||
| `` n `` | Utwórz nową gałąź z commita | |
|
||||
| `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. |
|
||||
| `` C `` | Kopiuj (cherry-pick) | Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `V`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `<esc>`, aby anulować zaznaczenie. |
|
||||
| `` <c-r> `` | Resetuj wybrane (cherry-picked) commity | |
|
||||
| `` <c-t> `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | |
|
||||
| `` <enter> `` | Pokaż commity | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` <c-o> `` | Copy commit SHA to clipboard | |
|
||||
| `` <space> `` | Przełącz | Checkout the selected commit as a detached HEAD. |
|
||||
| `` y `` | Copy commit attribute to clipboard | Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author). |
|
||||
| `` o `` | Open commit in browser | |
|
||||
| `` n `` | Create new branch off of commit | |
|
||||
| `` g `` | Wyświetl opcje resetu | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` C `` | Kopiuj commit (przebieranie) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-r> `` | Reset copied (cherry-picked) commits selection | |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | View commits | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Remote branches
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Copy branch name to clipboard | |
|
||||
| `` <space> `` | Przełącz | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | Nowa gałąź | |
|
||||
| `` M `` | Scal do obecnej gałęzi | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | Zmiana bazy gałęzi | Rebase the checked-out branch onto the selected branch. |
|
||||
| `` d `` | Delete | Delete the remote branch from the remote. |
|
||||
| `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. |
|
||||
| `` s `` | Sort order | |
|
||||
| `` g `` | Wyświetl opcje resetu | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` <enter> `` | View commits | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Remotes
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | View branches | |
|
||||
| `` n `` | New remote | |
|
||||
| `` d `` | Remove | Remove the selected remote. Any local branches tracking a remote branch from the remote will be unaffected. |
|
||||
| `` e `` | Edit | Edit the selected remote's name or URL. |
|
||||
| `` f `` | Pobierz | Fetch updates from the remote repository. This retrieves new commits and branches without merging them into your local branches. |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Scalanie
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <space> `` | Wybierz kawałek | |
|
||||
| `` b `` | Wybierz oba kawałki | |
|
||||
| `` <up> `` | Wybierz poprzedni kawałek | |
|
||||
| `` <down> `` | Wybierz następny kawałek | |
|
||||
| `` <left> `` | Poprzedni konflikt | |
|
||||
| `` <right> `` | Następny konflikt | |
|
||||
| `` z `` | Cofnij | Undo last merge conflict resolution. |
|
||||
| `` e `` | Edytuj plik | Open file in external editor. |
|
||||
| `` o `` | Otwórz plik | Open file in default application. |
|
||||
| `` M `` | Open external merge tool | Run `git mergetool`. |
|
||||
| `` <esc> `` | Wróć do panelu plików | |
|
||||
|
||||
## Schowek
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <space> `` | Zastosuj | Zastosuj wpis schowka do katalogu roboczego. |
|
||||
| `` g `` | Wyciągnij | Zastosuj wpis schowka do katalogu roboczego i usuń wpis schowka. |
|
||||
| `` d `` | Usuń | Usuń wpis schowka z listy schowka. |
|
||||
| `` n `` | Nowa gałąź | Utwórz nową gałąź z wybranego wpisu schowka. Działa poprzez przełączenie git na commit, na którym wpis schowka został utworzony, tworzenie nowej gałęzi z tego commita, a następnie zastosowanie wpisu schowka do nowej gałęzi jako dodatkowego commita. |
|
||||
| `` r `` | Zmień nazwę schowka | |
|
||||
| `` <enter> `` | Wyświetl pliki | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` <space> `` | Zastosuj | Apply the stash entry to your working directory. |
|
||||
| `` g `` | Wyciągnij | Apply the stash entry to your working directory and remove the stash entry. |
|
||||
| `` d `` | Porzuć | Remove the stash entry from the stash list. |
|
||||
| `` n `` | Nowa gałąź | Create a new branch from the selected stash entry. This works by git checking out the commit that the stash entry was created from, creating a new branch from that commit, then applying the stash entry to the new branch as an additional commit. |
|
||||
| `` r `` | Rename stash | |
|
||||
| `` <enter> `` | Przeglądaj pliki commita | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Status
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` o `` | Otwórz plik konfiguracyjny | Otwórz plik w domyślnej aplikacji. |
|
||||
| `` e `` | Edytuj plik konfiguracyjny | Otwórz plik w zewnętrznym edytorze. |
|
||||
| `` o `` | Otwórz konfigurację | Open file in default application. |
|
||||
| `` e `` | Edytuj konfigurację | Open file in external editor. |
|
||||
| `` u `` | Sprawdź aktualizacje | |
|
||||
| `` <enter> `` | Przełącz na ostatnie repozytorium | |
|
||||
| `` a `` | Pokaż wszystkie gałęzie w logach | |
|
||||
| `` <enter> `` | Switch to a recent repo | |
|
||||
| `` a `` | Pokaż wszystkie logi gałęzi | |
|
||||
|
||||
## Sub-commity
|
||||
## Sub-commits
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj SHA commita do schowka | |
|
||||
| `` <space> `` | Przełącz | Przełącz wybrany commit jako odłączoną HEAD. |
|
||||
| `` y `` | Kopiuj atrybut commita do schowka | Kopiuj atrybut commita do schowka (np. hash, URL, różnice, wiadomość, autor). |
|
||||
| `` o `` | Otwórz commit w przeglądarce | |
|
||||
| `` n `` | Utwórz nową gałąź z commita | |
|
||||
| `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. |
|
||||
| `` C `` | Kopiuj (cherry-pick) | Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `V`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `<esc>`, aby anulować zaznaczenie. |
|
||||
| `` <c-r> `` | Resetuj wybrane (cherry-picked) commity | |
|
||||
| `` <c-t> `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | |
|
||||
| `` <enter> `` | Wyświetl pliki | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Szukaj w bieżącym widoku po tekście | |
|
||||
| `` <c-o> `` | Copy commit SHA to clipboard | |
|
||||
| `` <space> `` | Przełącz | Checkout the selected commit as a detached HEAD. |
|
||||
| `` y `` | Copy commit attribute to clipboard | Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author). |
|
||||
| `` o `` | Open commit in browser | |
|
||||
| `` n `` | Create new branch off of commit | |
|
||||
| `` g `` | Wyświetl opcje resetu | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` C `` | Kopiuj commit (przebieranie) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-r> `` | Reset copied (cherry-picked) commits selection | |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | Przeglądaj pliki commita | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Search the current view by text | |
|
||||
|
||||
## Submoduły
|
||||
## Submodules
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj nazwę submodułu do schowka | |
|
||||
| `` <enter> `` | Wejdź | Wejdź do submodułu. Po wejściu do submodułu możesz nacisnąć `<esc>`, aby wrócić do repozytorium nadrzędnego. |
|
||||
| `` d `` | Usuń | Usuń wybrany submoduł i odpowiadający mu katalog. |
|
||||
| `` u `` | Aktualizuj | Aktualizuj wybrany submoduł. |
|
||||
| `` n `` | Nowy submoduł | |
|
||||
| `` e `` | Zaktualizuj URL submodułu | |
|
||||
| `` i `` | Zainicjuj | Zainicjuj wybrany submoduł, aby przygotować do pobrania. Prawdopodobnie chcesz to kontynuować, wywołując akcję 'update', aby pobrać submoduł. |
|
||||
| `` b `` | Pokaż opcje masowych operacji na submodułach | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` <c-o> `` | Copy submodule name to clipboard | |
|
||||
| `` <enter> `` | Enter | Enter submodule. After entering the submodule, you can press `<esc>` to escape back to the parent repo. |
|
||||
| `` d `` | Remove | Remove the selected submodule and its corresponding directory. |
|
||||
| `` u `` | Update | Update selected submodule. |
|
||||
| `` n `` | New submodule | |
|
||||
| `` e `` | Update submodule URL | |
|
||||
| `` i `` | Initialize | Initialize the selected submodule to prepare for fetching. You probably want to follow this up by invoking the 'update' action to fetch the submodule. |
|
||||
| `` b `` | View bulk submodule options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Tagi
|
||||
## Tags
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <space> `` | Przełącz | Przełącz wybrany tag jako odłączoną głowę (detached HEAD). |
|
||||
| `` n `` | Nowy tag | Utwórz nowy tag z bieżącego commita. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu. |
|
||||
| `` d `` | Usuń | Wyświetl opcje usuwania lokalnego/odległego tagu. |
|
||||
| `` P `` | Wyślij tag | Wyślij wybrany tag do zdalnego. Zostaniesz poproszony o wybranie zdalnego. |
|
||||
| `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. |
|
||||
| `` <enter> `` | Pokaż commity | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` <space> `` | Przełącz | Checkout the selected tag tag as a detached HEAD. |
|
||||
| `` n `` | New tag | Create new tag from current commit. You'll be prompted to enter a tag name and optional description. |
|
||||
| `` d `` | Delete | View delete options for local/remote tag. |
|
||||
| `` P `` | Push tag | Push the selected tag to a remote. You'll be prompted to select a remote. |
|
||||
| `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` <enter> `` | View commits | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Zdalne
|
||||
## Worktrees
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | Wyświetl gałęzie | |
|
||||
| `` n `` | Nowy zdalny | |
|
||||
| `` d `` | Usuń | Usuń wybrany zdalny. Wszelkie lokalne gałęzie śledzące gałąź zdalną z tego zdalnego nie zostaną dotknięte. |
|
||||
| `` e `` | Edytuj | Edytuj nazwę lub URL wybranego zdalnego. |
|
||||
| `` f `` | Pobierz | Pobierz aktualizacje z zdalnego repozytorium. Pobiera nowe commity i gałęzie bez scalania ich z lokalnymi gałęziami. |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` n `` | New worktree | |
|
||||
| `` <space> `` | Switch | Switch to the selected worktree. |
|
||||
| `` o `` | Open in editor | |
|
||||
| `` d `` | Remove | Remove the selected worktree. This will both delete the worktree's directory, as well as metadata about the worktree in the .git directory. |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## Zdalne gałęzie
|
||||
## Zwykłe
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Kopiuj nazwę gałęzi do schowka | |
|
||||
| `` <space> `` | Przełącz | Przełącz na nową lokalną gałąź na podstawie wybranej gałęzi zdalnej. Nowa gałąź będzie śledzić gałąź zdalną. |
|
||||
| `` n `` | Nowa gałąź | |
|
||||
| `` M `` | Scal | Scal wybraną gałąź z aktualnie sprawdzoną gałęzią. |
|
||||
| `` r `` | Przebazuj | Przebazuj przełączoną gałąź na wybraną gałąź. |
|
||||
| `` d `` | Usuń | Usuń gałąź zdalną ze zdalnego. |
|
||||
| `` u `` | Ustaw jako upstream | Ustaw wybraną gałąź zdalną jako upstream sprawdzonej gałęzi. |
|
||||
| `` s `` | Kolejność sortowania | |
|
||||
| `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. |
|
||||
| `` <enter> `` | Pokaż commity | |
|
||||
| `` w `` | Zobacz opcje drzewa pracy | |
|
||||
| `` / `` | Filtruj bieżący widok po tekście | |
|
||||
| `` mouse wheel down (fn+up) `` | Przewiń w dół | |
|
||||
| `` mouse wheel up (fn+down) `` | Przewiń w górę | |
|
||||
|
||||
@@ -152,7 +152,7 @@ _Связки клавиш_
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | Выбрать коммит (в середине перебазирования) |
|
||||
| `` F `` | Создать fixup коммит | Создать fixup коммит для этого коммита |
|
||||
| `` F `` | Create fixup commit | Создать fixup коммит для этого коммита |
|
||||
| `` S `` | Apply fixup commits | Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение) |
|
||||
| `` <c-j> `` | Переместить коммит вниз на один | |
|
||||
| `` <c-k> `` | Переместить коммит вверх на один | |
|
||||
@@ -297,7 +297,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | Скопировать название ветки в буфер обмена | |
|
||||
| `` <space> `` | Переключить | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | Переключить | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | Новая ветка | |
|
||||
| `` M `` | Слияние с текущей переключённой веткой | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | Перебазировать переключённую ветку на эту ветку | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
@@ -149,7 +149,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | 选择提交(变基过程中) |
|
||||
| `` F `` | 为此提交创建修正 | 创建修正提交 |
|
||||
| `` F `` | Create fixup commit | 创建修正提交 |
|
||||
| `` S `` | Apply fixup commits | 压缩在所选提交之上的所有“fixup!”提交(自动压缩) |
|
||||
| `` <c-j> `` | 下移提交 | |
|
||||
| `` <c-k> `` | 上移提交 | |
|
||||
@@ -340,7 +340,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | 将分支名称复制到剪贴板 | |
|
||||
| `` <space> `` | 检出 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | 检出 | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | 新分支 | |
|
||||
| `` M `` | 合并到当前检出的分支 | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | 将已检出的分支变基到该分支 | Rebase the checked-out branch onto the selected branch. |
|
||||
|
||||
@@ -2,9 +2,9 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
|
||||
|
||||
# Lazygit 鍵盤快捷鍵
|
||||
|
||||
_說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B_
|
||||
_說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B_
|
||||
|
||||
## 全域快捷鍵
|
||||
## 全局快捷鍵
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
@@ -29,10 +29,10 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` q `` | 結束 | |
|
||||
| `` <esc> `` | 取消 | |
|
||||
| `` <c-w> `` | 切換是否在差異檢視中顯示空格變更 | Toggle whether or not whitespace changes are shown in the diff view. |
|
||||
| `` z `` | 復原 | 將使用 reflog 確任 git 指令以復原。這不包括工作區更改;只考慮提交。 |
|
||||
| `` <c-z> `` | 取消復原 | 將使用 reflog 確任 git 指令以重作。這不包括工作區更改;只考慮提交。 |
|
||||
| `` z `` | 復原 | 將使用 reflog 確定要運行哪個 git 命令以復原上一個 git 命令。這不包括工作區的更改;只考慮提交。 |
|
||||
| `` <c-z> `` | 取消復原 | 將使用 reflog 確定要運行哪個 git 命令以重作上一個 git 命令。這不包括工作區的更改;只考慮提交。 |
|
||||
|
||||
## 移動
|
||||
## 列表面板導航
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
@@ -43,35 +43,47 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` v `` | 切換拖曳選擇 | |
|
||||
| `` <s-down> `` | Range select down | |
|
||||
| `` <s-up> `` | Range select up | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
| `` H `` | 向左捲動 | |
|
||||
| `` L `` | 向右捲動 | |
|
||||
| `` ] `` | 下一個索引標籤 | |
|
||||
| `` [ `` | 上一個索引標籤 | |
|
||||
|
||||
## 主面板 (補丁生成)
|
||||
## Reflog
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <left> `` | 選擇上一段 | |
|
||||
| `` <right> `` | 選擇下一段 | |
|
||||
| `` v `` | 切換拖曳選擇 | |
|
||||
| `` a `` | 切換選擇程式碼塊 | Toggle hunk selection mode. |
|
||||
| `` <c-o> `` | 複製所選文本至剪貼簿 | |
|
||||
| `` o `` | 開啟檔案 | Open file in default application. |
|
||||
| `` e `` | 編輯檔案 | Open file in external editor. |
|
||||
| `` <space> `` | 向 (或從) 補丁中添加/刪除行 | |
|
||||
| `` <esc> `` | 退出自訂補丁建立器 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` <c-o> `` | 複製提交 SHA 到剪貼簿 | |
|
||||
| `` <space> `` | 檢出 | Checkout the selected commit as a detached HEAD. |
|
||||
| `` y `` | 複製提交屬性 | Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author). |
|
||||
| `` o `` | 在瀏覽器中開啟提交 | |
|
||||
| `` n `` | 從提交建立新分支 | |
|
||||
| `` g `` | 檢視重設選項 | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` C `` | 複製提交 (揀選) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-r> `` | 重設選定的揀選 (複製) 提交 | |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | 檢視提交 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 主面板(一般)
|
||||
## Worktrees
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` n `` | New worktree | |
|
||||
| `` <space> `` | Switch | Switch to the selected worktree. |
|
||||
| `` o `` | Open in editor | |
|
||||
| `` d `` | Remove | Remove the selected worktree. This will both delete the worktree's directory, as well as metadata about the worktree in the .git directory. |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 主視窗 (一般)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` mouse wheel down (fn+up) `` | 向下捲動 | |
|
||||
| `` mouse wheel up (fn+down) `` | 向上捲動 | |
|
||||
|
||||
## 主面板(合併)
|
||||
## 主視窗 (合併中)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
@@ -87,7 +99,7 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` M `` | 開啟外部合併工具 (git mergetool) | Run `git mergetool`. |
|
||||
| `` <esc> `` | 返回檔案面板 | |
|
||||
|
||||
## 主面板(預存)
|
||||
## 主視窗 (預存中)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
@@ -107,7 +119,22 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` w `` | 沒有預提交 hook 就提交更改 | |
|
||||
| `` C `` | 使用 git 編輯器提交變更 | |
|
||||
| `` <c-f> `` | Find base commit for fixup | Find the commit that your current changes are building upon, for the sake of amending/fixing up the commit. This spares you from having to look through your branch's commits one-by-one to see which commit should be amended/fixed up. See docs: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 主面板 (補丁生成)
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <left> `` | 選擇上一段 | |
|
||||
| `` <right> `` | 選擇下一段 | |
|
||||
| `` v `` | 切換拖曳選擇 | |
|
||||
| `` a `` | 切換選擇程式碼塊 | Toggle hunk selection mode. |
|
||||
| `` <c-o> `` | 複製所選文本至剪貼簿 | |
|
||||
| `` o `` | 開啟檔案 | Open file in default application. |
|
||||
| `` e `` | 編輯檔案 | Open file in external editor. |
|
||||
| `` <space> `` | 向 (或從) 補丁中添加/刪除行 | |
|
||||
| `` <esc> `` | 退出自訂補丁建立器 | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 功能表
|
||||
|
||||
@@ -115,7 +142,7 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
|-----|--------|-------------|
|
||||
| `` <enter> `` | 執行 | |
|
||||
| `` <esc> `` | 關閉 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 子提交
|
||||
|
||||
@@ -131,8 +158,8 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` <c-r> `` | 重設選定的揀選 (複製) 提交 | |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | 檢視所選項目的檔案 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 子模組
|
||||
|
||||
@@ -146,17 +173,7 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` e `` | 更新子模組 URL | |
|
||||
| `` i `` | Initialize | 初始化子模組 |
|
||||
| `` b `` | 查看批量子模組選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
|
||||
## 工作目錄
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` n `` | New worktree | |
|
||||
| `` <space> `` | Switch | Switch to the selected worktree. |
|
||||
| `` o `` | Open in editor | |
|
||||
| `` d `` | Remove | Remove the selected worktree. This will both delete the worktree's directory, as well as metadata about the worktree in the .git directory. |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 提交
|
||||
|
||||
@@ -174,14 +191,14 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B
|
||||
| `` i `` | Start interactive rebase | Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.
|
||||
If you would instead like to start an interactive rebase from the selected commit, press `e`. |
|
||||
| `` p `` | Pick | 挑選提交 (於變基過程中) |
|
||||
| `` F `` | 建立修復提交 | 為此提交建立修復提交 |
|
||||
| `` S `` | 壓縮上方所有「fixup」提交(自動壓縮) | 是否壓縮上方 {{.commit}} 所有「fixup」提交? |
|
||||
| `` F `` | Create fixup commit | 為此提交建立修復提交 |
|
||||
| `` S `` | Apply fixup commits | 壓縮上方所有的“fixup!”提交 (自動壓縮) |
|
||||
| `` <c-j> `` | 向下移動提交 | |
|
||||
| `` <c-k> `` | 向上移動提交 | |
|
||||
| `` V `` | 貼上提交 (揀選) | |
|
||||
| `` B `` | 為了變基已標注提交為基準提交 | 請為了下一次變基選擇一項基準提交;此將執行 `git rebase --onto`。 |
|
||||
| `` B `` | Mark as base commit for rebase | Select a base commit for the next rebase. When you rebase onto a branch, only commits above the base commit will be brought across. This uses the `git rebase --onto` command. |
|
||||
| `` A `` | Amend | 使用已預存的更改修正提交 |
|
||||
| `` a `` | 設定/重設提交作者 | Set/Reset commit author or set co-author. |
|
||||
| `` a `` | 設置/重設提交作者 | Set/Reset commit author or set co-author. |
|
||||
| `` t `` | Revert | Create a revert commit for the selected commit, which applies the selected commit's changes in reverse. |
|
||||
| `` T `` | 打標籤到提交 | Create a new tag pointing at the selected commit. You'll be prompted to enter a tag name and optional description. |
|
||||
| `` <c-l> `` | 開啟記錄選單 | View options for commit log e.g. changing sort order, hiding the git graph, showing the whole git graph. |
|
||||
@@ -193,8 +210,8 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` C `` | 複製提交 (揀選) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | 檢視所選項目的檔案 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 提交摘要
|
||||
|
||||
@@ -209,15 +226,15 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | 複製檔案名稱到剪貼簿 | |
|
||||
| `` c `` | 檢出 | 檢出檔案 |
|
||||
| `` d `` | Remove | Discard this commit's changes to this file. This runs an interactive rebase in the background, so you may get a merge conflict if a later commit also changes this file. |
|
||||
| `` d `` | Remove | 捨棄此提交對此檔案的更改 |
|
||||
| `` o `` | 開啟檔案 | Open file in default application. |
|
||||
| `` e `` | Edit | Open file in external editor. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <space> `` | 切換檔案是否包含在補丁中 | Toggle whether the file is included in the custom patch. See https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` a `` | 切換所有檔案是否包含在補丁中 | Add/remove all commit's files to custom patch. See https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches. |
|
||||
| `` <enter> `` | 輸入檔案以將選定的行添加至補丁(或切換目錄折疊) | If a file is selected, enter the file so that you can add/remove individual lines to the custom patch. If a directory is selected, toggle the directory. |
|
||||
| `` ` `` | 顯示檔案樹狀視圖 | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` ` `` | 切換檔案樹狀視圖 | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 收藏 (Stash)
|
||||
|
||||
@@ -229,25 +246,8 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` n `` | 新分支 | Create a new branch from the selected stash entry. This works by git checking out the commit that the stash entry was created from, creating a new branch from that commit, then applying the stash entry to the new branch as an additional commit. |
|
||||
| `` r `` | 重新命名收藏 | |
|
||||
| `` <enter> `` | 檢視所選項目的檔案 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
|
||||
## 日誌
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | 複製提交 SHA 到剪貼簿 | |
|
||||
| `` <space> `` | 檢出 | Checkout the selected commit as a detached HEAD. |
|
||||
| `` y `` | 複製提交屬性 | Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author). |
|
||||
| `` o `` | 在瀏覽器中開啟提交 | |
|
||||
| `` n `` | 從提交建立新分支 | |
|
||||
| `` g `` | 檢視重設選項 | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` C `` | 複製提交 (揀選) | Mark commit as copied. Then, within the local commits view, you can press `V` to paste (cherry-pick) the copied commit(s) into your checked out branch. At any time you can press `<esc>` to cancel the selection. |
|
||||
| `` <c-r> `` | 重設選定的揀選 (複製) 提交 | |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` <enter> `` | 檢視提交 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 本地分支
|
||||
|
||||
@@ -270,10 +270,10 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` s `` | Sort order | |
|
||||
| `` g `` | 檢視重設選項 | |
|
||||
| `` R `` | 重新命名分支 | |
|
||||
| `` u `` | 檢視上游設定 | 檢視有關上游分支的設定(例如重設至上游) |
|
||||
| `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. |
|
||||
| `` <enter> `` | 檢視提交 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 標籤
|
||||
|
||||
@@ -285,8 +285,8 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` P `` | 推送標籤 | Push the selected tag to a remote. You'll be prompted to select a remote. |
|
||||
| `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` <enter> `` | 檢視提交 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 檔案
|
||||
|
||||
@@ -298,7 +298,7 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` y `` | Copy to clipboard | |
|
||||
| `` c `` | 提交變更 | Commit staged changes. |
|
||||
| `` w `` | 沒有預提交 hook 就提交更改 | |
|
||||
| `` A `` | 修改上次提交 | |
|
||||
| `` A `` | 修正上次提交 | |
|
||||
| `` C `` | 使用 git 編輯器提交變更 | |
|
||||
| `` <c-f> `` | Find base commit for fixup | Find the commit that your current changes are building upon, for the sake of amending/fixing up the commit. This spares you from having to look through your branch's commits one-by-one to see which commit should be amended/fixed up. See docs: <https://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md> |
|
||||
| `` e `` | Edit | Open file in external editor. |
|
||||
@@ -309,14 +309,14 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` S `` | 檢視收藏選項 | View stash options (e.g. stash all, stash staged, stash unstaged). |
|
||||
| `` a `` | 全部預存/取消預存 | Toggle staged/unstaged for all files in working tree. |
|
||||
| `` <enter> `` | 選擇檔案中的單個程式碼塊/行,或展開/折疊目錄 | If the selected item is a file, focus the staging view so you can stage individual hunks/lines. If the selected item is a directory, collapse/expand it. |
|
||||
| `` d `` | Discard | View options for discarding changes to the selected file. |
|
||||
| `` d `` | 檢視“捨棄更改”的選項 | View options for discarding changes to the selected file. |
|
||||
| `` g `` | 檢視上游重設選項 | |
|
||||
| `` D `` | Reset | View reset options for working tree (e.g. nuking the working tree). |
|
||||
| `` ` `` | 顯示檔案樹狀視圖 | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` ` `` | 切換檔案樹狀視圖 | Toggle file view between flat and tree layout. Flat layout shows all file paths in a single list, tree layout groups files by directory. |
|
||||
| `` <c-t> `` | Open external diff tool (git difftool) | |
|
||||
| `` M `` | 開啟外部合併工具 (git mergetool) | Run `git mergetool`. |
|
||||
| `` f `` | 擷取 | Fetch changes from remote. |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | 開始搜尋 | |
|
||||
|
||||
## 狀態
|
||||
|
||||
@@ -344,14 +344,14 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` d `` | Remove | Remove the selected remote. Any local branches tracking a remote branch from the remote will be unaffected. |
|
||||
| `` e `` | Edit | 編輯遠端 |
|
||||
| `` f `` | 擷取 | 擷取遠端 |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
## 遠端分支
|
||||
|
||||
| Key | Action | Info |
|
||||
|-----|--------|-------------|
|
||||
| `` <c-o> `` | 複製分支名稱到剪貼簿 | |
|
||||
| `` <space> `` | 檢出 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. |
|
||||
| `` <space> `` | 檢出 | Checkout a new local branch based on the selected remote branch. The new branch will track the remote branch. |
|
||||
| `` n `` | 新分支 | |
|
||||
| `` M `` | 合併到當前檢出的分支 | Merge selected branch into currently checked out branch. |
|
||||
| `` r `` | 將已檢出的分支變基至此分支 | Rebase the checked-out branch onto the selected branch. |
|
||||
@@ -360,5 +360,5 @@ If you would instead like to start an interactive rebase from the selected commi
|
||||
| `` s `` | Sort order | |
|
||||
| `` g `` | 檢視重設選項 | View reset options (soft/mixed/hard) for resetting onto selected item. |
|
||||
| `` <enter> `` | 檢視提交 | |
|
||||
| `` w `` | 檢視工作目錄選項 | |
|
||||
| `` / `` | 搜尋 | |
|
||||
| `` w `` | View worktree options | |
|
||||
| `` / `` | Filter the current view by text | |
|
||||
|
||||
@@ -28,17 +28,6 @@ func (self *BranchCommands) New(name string, base string) error {
|
||||
return self.cmd.New(cmdArgs).Run()
|
||||
}
|
||||
|
||||
// CreateWithUpstream creates a new branch with a given upstream, but without
|
||||
// checking it out
|
||||
func (self *BranchCommands) CreateWithUpstream(name string, upstream string) error {
|
||||
cmdArgs := NewGitCmd("branch").
|
||||
Arg("--track").
|
||||
Arg(name, upstream).
|
||||
ToArgv()
|
||||
|
||||
return self.cmd.New(cmdArgs).Run()
|
||||
}
|
||||
|
||||
// CurrentBranchInfo get the current branch information.
|
||||
func (self *BranchCommands) CurrentBranchInfo() (BranchInfo, error) {
|
||||
branchName, err := self.cmd.New(
|
||||
|
||||
@@ -39,13 +39,13 @@ func (self *CommitCommands) SetAuthor(value string) error {
|
||||
}
|
||||
|
||||
// Add a commit's coauthor using Github/Gitlab Co-authored-by metadata. Value is expected to be of the form 'Name <Email>'
|
||||
func (self *CommitCommands) AddCoAuthor(sha string, author string) error {
|
||||
func (self *CommitCommands) AddCoAuthor(sha string, value string) error {
|
||||
message, err := self.GetCommitMessage(sha)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
message = AddCoAuthorToMessage(message, author)
|
||||
message = message + fmt.Sprintf("\nCo-authored-by: %s", value)
|
||||
|
||||
cmdArgs := NewGitCmd("commit").
|
||||
Arg("--allow-empty", "--amend", "--only", "-m", message).
|
||||
@@ -54,25 +54,6 @@ func (self *CommitCommands) AddCoAuthor(sha string, author string) error {
|
||||
return self.cmd.New(cmdArgs).Run()
|
||||
}
|
||||
|
||||
func AddCoAuthorToMessage(message string, author string) string {
|
||||
subject, body, _ := strings.Cut(message, "\n")
|
||||
|
||||
return strings.TrimSpace(subject) + "\n\n" + AddCoAuthorToDescription(strings.TrimSpace(body), author)
|
||||
}
|
||||
|
||||
func AddCoAuthorToDescription(description string, author string) string {
|
||||
if description != "" {
|
||||
lines := strings.Split(description, "\n")
|
||||
if strings.HasPrefix(lines[len(lines)-1], "Co-authored-by:") {
|
||||
description += "\n"
|
||||
} else {
|
||||
description += "\n\n"
|
||||
}
|
||||
}
|
||||
|
||||
return description + fmt.Sprintf("Co-authored-by: %s", author)
|
||||
}
|
||||
|
||||
// ResetToCommit reset to commit
|
||||
func (self *CommitCommands) ResetToCommit(sha string, strength string, envVars []string) error {
|
||||
cmdArgs := NewGitCmd("reset").Arg("--"+strength, sha).ToArgv()
|
||||
@@ -297,21 +278,6 @@ func (self *CommitCommands) CreateFixupCommit(sha string) error {
|
||||
return self.cmd.New(cmdArgs).Run()
|
||||
}
|
||||
|
||||
// CreateAmendCommit creates a commit that changes the commit message of a previous commit
|
||||
func (self *CommitCommands) CreateAmendCommit(originalSubject, newSubject, newDescription string, includeFileChanges bool) error {
|
||||
description := newSubject
|
||||
if newDescription != "" {
|
||||
description += "\n\n" + newDescription
|
||||
}
|
||||
cmdArgs := NewGitCmd("commit").
|
||||
Arg("-m", "amend! "+originalSubject).
|
||||
Arg("-m", description).
|
||||
ArgIf(!includeFileChanges, "--only", "--allow-empty").
|
||||
ToArgv()
|
||||
|
||||
return self.cmd.New(cmdArgs).Run()
|
||||
}
|
||||
|
||||
// a value of 0 means the head commit, 1 is the parent commit, etc
|
||||
func (self *CommitCommands) GetCommitMessageFromHistory(value int) (string, error) {
|
||||
cmdArgs := NewGitCmd("log").Arg("-1", fmt.Sprintf("--skip=%d", value), "--pretty=%H").
|
||||
|
||||
@@ -348,7 +348,7 @@ func (self *CommitLoader) getRebasingCommits(rebaseMode enums.RebaseMode) []*mod
|
||||
|
||||
for _, t := range todos {
|
||||
if t.Command == todo.UpdateRef {
|
||||
t.Msg = t.Ref
|
||||
t.Msg = strings.TrimPrefix(t.Ref, "refs/heads/")
|
||||
} else if t.Commit == "" {
|
||||
// Command does not have a commit associated, skip
|
||||
continue
|
||||
|
||||
@@ -180,57 +180,6 @@ func TestCommitCreateFixupCommit(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommitCreateAmendCommit(t *testing.T) {
|
||||
type scenario struct {
|
||||
testName string
|
||||
originalSubject string
|
||||
newSubject string
|
||||
newDescription string
|
||||
includeFileChanges bool
|
||||
runner *oscommands.FakeCmdObjRunner
|
||||
}
|
||||
|
||||
scenarios := []scenario{
|
||||
{
|
||||
testName: "subject only",
|
||||
originalSubject: "original subject",
|
||||
newSubject: "new subject",
|
||||
newDescription: "",
|
||||
includeFileChanges: true,
|
||||
runner: oscommands.NewFakeRunner(t).
|
||||
ExpectGitArgs([]string{"commit", "-m", "amend! original subject", "-m", "new subject"}, "", nil),
|
||||
},
|
||||
{
|
||||
testName: "subject and description",
|
||||
originalSubject: "original subject",
|
||||
newSubject: "new subject",
|
||||
newDescription: "new description",
|
||||
includeFileChanges: true,
|
||||
runner: oscommands.NewFakeRunner(t).
|
||||
ExpectGitArgs([]string{"commit", "-m", "amend! original subject", "-m", "new subject\n\nnew description"}, "", nil),
|
||||
},
|
||||
{
|
||||
testName: "without file changes",
|
||||
originalSubject: "original subject",
|
||||
newSubject: "new subject",
|
||||
newDescription: "",
|
||||
includeFileChanges: false,
|
||||
runner: oscommands.NewFakeRunner(t).
|
||||
ExpectGitArgs([]string{"commit", "-m", "amend! original subject", "-m", "new subject", "--only", "--allow-empty"}, "", nil),
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
s := s
|
||||
t.Run(s.testName, func(t *testing.T) {
|
||||
instance := buildCommitCommands(commonDeps{runner: s.runner})
|
||||
err := instance.CreateAmendCommit(s.originalSubject, s.newSubject, s.newDescription, s.includeFileChanges)
|
||||
assert.NoError(t, err)
|
||||
s.runner.CheckForMissingCalls()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommitShowCmdObj(t *testing.T) {
|
||||
type scenario struct {
|
||||
testName string
|
||||
@@ -384,70 +333,3 @@ func TestGetCommitMessageFromHistory(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddCoAuthorToMessage(t *testing.T) {
|
||||
scenarios := []struct {
|
||||
name string
|
||||
message string
|
||||
expectedResult string
|
||||
}{
|
||||
{
|
||||
// This never happens, I think it isn't possible to create a commit
|
||||
// with an empty message. Just including it for completeness.
|
||||
name: "Empty message",
|
||||
message: "",
|
||||
expectedResult: "\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
{
|
||||
name: "Just a subject, no body",
|
||||
message: "Subject",
|
||||
expectedResult: "Subject\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
{
|
||||
name: "Subject and body",
|
||||
message: "Subject\n\nBody",
|
||||
expectedResult: "Subject\n\nBody\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
{
|
||||
name: "Body already ending with a Co-authored-by line",
|
||||
message: "Subject\n\nBody\n\nCo-authored-by: Jane Smith <jane@smith.com>",
|
||||
expectedResult: "Subject\n\nBody\n\nCo-authored-by: Jane Smith <jane@smith.com>\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
}
|
||||
for _, s := range scenarios {
|
||||
t.Run(s.name, func(t *testing.T) {
|
||||
result := AddCoAuthorToMessage(s.message, "John Doe <john@doe.com>")
|
||||
assert.Equal(t, s.expectedResult, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddCoAuthorToDescription(t *testing.T) {
|
||||
scenarios := []struct {
|
||||
name string
|
||||
description string
|
||||
expectedResult string
|
||||
}{
|
||||
{
|
||||
name: "Empty description",
|
||||
description: "",
|
||||
expectedResult: "Co-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
{
|
||||
name: "Non-empty description",
|
||||
description: "Body",
|
||||
expectedResult: "Body\n\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
{
|
||||
name: "Description already ending with a Co-authored-by line",
|
||||
description: "Body\n\nCo-authored-by: Jane Smith <jane@smith.com>",
|
||||
expectedResult: "Body\n\nCo-authored-by: Jane Smith <jane@smith.com>\nCo-authored-by: John Doe <john@doe.com>",
|
||||
},
|
||||
}
|
||||
for _, s := range scenarios {
|
||||
t.Run(s.name, func(t *testing.T) {
|
||||
result := AddCoAuthorToDescription(s.description, "John Doe <john@doe.com>")
|
||||
assert.Equal(t, s.expectedResult, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/go-errors/errors"
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
type FileCommands struct {
|
||||
@@ -76,21 +75,18 @@ func (self *FileCommands) GetEditCmdStrLegacy(filename string, lineNumber int) (
|
||||
return utils.ResolvePlaceholderString(editCmdTemplate, templateValues), nil
|
||||
}
|
||||
|
||||
func (self *FileCommands) GetEditCmdStr(filenames []string) (string, bool) {
|
||||
func (self *FileCommands) GetEditCmdStr(filename string) (string, bool) {
|
||||
// Legacy support for old config; to be removed at some point
|
||||
if self.UserConfig.OS.Edit == "" && self.UserConfig.OS.EditCommandTemplate != "" {
|
||||
// If multiple files are selected, we'll simply edit just the first one.
|
||||
// It's not worth fixing this for the legacy support.
|
||||
if cmdStr, err := self.GetEditCmdStrLegacy(filenames[0], 1); err == nil {
|
||||
if cmdStr, err := self.GetEditCmdStrLegacy(filename, 1); err == nil {
|
||||
return cmdStr, true
|
||||
}
|
||||
}
|
||||
|
||||
template, suspend := config.GetEditTemplate(&self.UserConfig.OS, self.guessDefaultEditor)
|
||||
quotedFilenames := lo.Map(filenames, func(filename string, _ int) string { return self.cmd.Quote(filename) })
|
||||
|
||||
templateValues := map[string]string{
|
||||
"filename": strings.Join(quotedFilenames, " "),
|
||||
"filename": self.cmd.Quote(filename),
|
||||
}
|
||||
|
||||
cmdStr := utils.ResolvePlaceholderString(template, templateValues)
|
||||
|
||||
@@ -177,9 +177,9 @@ func TestEditFileCmdStrLegacy(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEditFilesCmd(t *testing.T) {
|
||||
func TestEditFileCmd(t *testing.T) {
|
||||
type scenario struct {
|
||||
filenames []string
|
||||
filename string
|
||||
osConfig config.OSConfig
|
||||
expectedCmdStr string
|
||||
suspend bool
|
||||
@@ -187,13 +187,13 @@ func TestEditFilesCmd(t *testing.T) {
|
||||
|
||||
scenarios := []scenario{
|
||||
{
|
||||
filenames: []string{"test"},
|
||||
filename: "test",
|
||||
osConfig: config.OSConfig{},
|
||||
expectedCmdStr: `vim -- "test"`,
|
||||
suspend: true,
|
||||
},
|
||||
{
|
||||
filenames: []string{"test"},
|
||||
filename: "test",
|
||||
osConfig: config.OSConfig{
|
||||
Edit: "nano {{filename}}",
|
||||
},
|
||||
@@ -201,21 +201,13 @@ func TestEditFilesCmd(t *testing.T) {
|
||||
suspend: true,
|
||||
},
|
||||
{
|
||||
filenames: []string{"file/with space"},
|
||||
filename: "file/with space",
|
||||
osConfig: config.OSConfig{
|
||||
EditPreset: "sublime",
|
||||
},
|
||||
expectedCmdStr: `subl -- "file/with space"`,
|
||||
suspend: false,
|
||||
},
|
||||
{
|
||||
filenames: []string{"multiple", "files"},
|
||||
osConfig: config.OSConfig{
|
||||
EditPreset: "sublime",
|
||||
},
|
||||
expectedCmdStr: `subl -- "multiple" "files"`,
|
||||
suspend: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
@@ -226,7 +218,7 @@ func TestEditFilesCmd(t *testing.T) {
|
||||
userConfig: userConfig,
|
||||
})
|
||||
|
||||
cmdStr, suspend := instance.GetEditCmdStr(s.filenames)
|
||||
cmdStr, suspend := instance.GetEditCmdStr(s.filename)
|
||||
assert.Equal(t, s.expectedCmdStr, cmdStr)
|
||||
assert.Equal(t, s.suspend, suspend)
|
||||
}
|
||||
|
||||
@@ -272,14 +272,6 @@ func (self *RebaseCommands) AmendTo(commits []*models.Commit, commitIndex int) e
|
||||
}).Run()
|
||||
}
|
||||
|
||||
func todoFromCommit(commit *models.Commit) utils.Todo {
|
||||
if commit.Action == todo.UpdateRef {
|
||||
return utils.Todo{Ref: commit.Name, Action: commit.Action}
|
||||
} else {
|
||||
return utils.Todo{Sha: commit.Sha, Action: commit.Action}
|
||||
}
|
||||
}
|
||||
|
||||
// Sets the action for the given commits in the git-rebase-todo file
|
||||
func (self *RebaseCommands) EditRebaseTodo(commits []*models.Commit, action todo.TodoCommand) error {
|
||||
commitsWithAction := lo.Map(commits, func(commit *models.Commit, _ int) utils.TodoChange {
|
||||
@@ -297,22 +289,13 @@ func (self *RebaseCommands) EditRebaseTodo(commits []*models.Commit, action todo
|
||||
)
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) DeleteUpdateRefTodos(commits []*models.Commit) error {
|
||||
todosToDelete := lo.Map(commits, func(commit *models.Commit, _ int) utils.Todo {
|
||||
return todoFromCommit(commit)
|
||||
})
|
||||
|
||||
return utils.DeleteTodos(
|
||||
filepath.Join(self.repoPaths.WorktreeGitDirPath(), "rebase-merge/git-rebase-todo"),
|
||||
todosToDelete,
|
||||
self.config.GetCoreCommentChar(),
|
||||
)
|
||||
}
|
||||
|
||||
func (self *RebaseCommands) MoveTodosDown(commits []*models.Commit) error {
|
||||
fileName := filepath.Join(self.repoPaths.WorktreeGitDirPath(), "rebase-merge/git-rebase-todo")
|
||||
todosToMove := lo.Map(commits, func(commit *models.Commit, _ int) utils.Todo {
|
||||
return todoFromCommit(commit)
|
||||
return utils.Todo{
|
||||
Sha: commit.Sha,
|
||||
Action: commit.Action,
|
||||
}
|
||||
})
|
||||
|
||||
return utils.MoveTodosDown(fileName, todosToMove, self.config.GetCoreCommentChar())
|
||||
@@ -321,7 +304,10 @@ func (self *RebaseCommands) MoveTodosDown(commits []*models.Commit) error {
|
||||
func (self *RebaseCommands) MoveTodosUp(commits []*models.Commit) error {
|
||||
fileName := filepath.Join(self.repoPaths.WorktreeGitDirPath(), "rebase-merge/git-rebase-todo")
|
||||
todosToMove := lo.Map(commits, func(commit *models.Commit, _ int) utils.Todo {
|
||||
return todoFromCommit(commit)
|
||||
return utils.Todo{
|
||||
Sha: commit.Sha,
|
||||
Action: commit.Action,
|
||||
}
|
||||
})
|
||||
|
||||
return utils.MoveTodosUp(fileName, todosToMove, self.config.GetCoreCommentChar())
|
||||
|
||||
@@ -343,7 +343,6 @@ type AppState struct {
|
||||
LastUpdateCheck int64
|
||||
RecentRepos []string
|
||||
StartupPopupVersion int
|
||||
LastVersion string // this is the last version the user was using, for the purpose of showing release notes
|
||||
|
||||
// these are for custom commands typed in directly, not for custom commands in the lazygit config
|
||||
CustomCommandsHistory []string
|
||||
@@ -368,7 +367,6 @@ func getDefaultAppState() *AppState {
|
||||
LastUpdateCheck: 0,
|
||||
RecentRepos: []string{},
|
||||
StartupPopupVersion: 0,
|
||||
LastVersion: "",
|
||||
DiffContextSize: 3,
|
||||
LocalBranchSortOrder: "recency",
|
||||
RemoteBranchSortOrder: "alphabetical",
|
||||
|
||||
@@ -12,9 +12,16 @@ func isWSL() bool {
|
||||
|
||||
func isContainer() bool {
|
||||
data, err := os.ReadFile("/proc/1/cgroup")
|
||||
return err == nil && (strings.Contains(string(data), "docker") ||
|
||||
|
||||
if strings.Contains(string(data), "docker") ||
|
||||
strings.Contains(string(data), "/lxc/") ||
|
||||
os.Getenv("CONTAINER") != "")
|
||||
[]string{string(data)}[0] != "systemd" &&
|
||||
[]string{string(data)}[0] != "init" ||
|
||||
os.Getenv("container") != "" {
|
||||
return err == nil && true
|
||||
}
|
||||
|
||||
return err == nil && false
|
||||
}
|
||||
|
||||
// GetPlatformDefaultConfig gets the defaults for the platform
|
||||
|
||||
+23
-47
@@ -142,13 +142,6 @@ type GuiConfig struct {
|
||||
// Whether to stack UI components on top of each other.
|
||||
// One of 'auto' (default) | 'always' | 'never'
|
||||
PortraitMode string `yaml:"portraitMode"`
|
||||
// How things are filtered when typing '/'.
|
||||
// One of 'substring' (default) | 'fuzzy'
|
||||
FilterMode string `yaml:"filterMode" jsonschema:"enum=substring,enum=fuzzy"`
|
||||
}
|
||||
|
||||
func (c *GuiConfig) UseFuzzySearch() bool {
|
||||
return c.FilterMode == "fuzzy"
|
||||
}
|
||||
|
||||
type ThemeConfig struct {
|
||||
@@ -214,9 +207,6 @@ type GitConfig struct {
|
||||
ParseEmoji bool `yaml:"parseEmoji"`
|
||||
// Config for showing the log in the commits view
|
||||
Log LogConfig `yaml:"log"`
|
||||
// When copying commit hashes to the clipboard, truncate them to this
|
||||
// length. Set to 40 to disable truncation.
|
||||
TruncateCopiedCommitHashesTo int `yaml:"truncateCopiedCommitHashesTo"`
|
||||
}
|
||||
|
||||
type PagerType string
|
||||
@@ -291,18 +281,17 @@ type UpdateConfig struct {
|
||||
}
|
||||
|
||||
type KeybindingConfig struct {
|
||||
Universal KeybindingUniversalConfig `yaml:"universal"`
|
||||
Status KeybindingStatusConfig `yaml:"status"`
|
||||
Files KeybindingFilesConfig `yaml:"files"`
|
||||
Branches KeybindingBranchesConfig `yaml:"branches"`
|
||||
Worktrees KeybindingWorktreesConfig `yaml:"worktrees"`
|
||||
Commits KeybindingCommitsConfig `yaml:"commits"`
|
||||
AmendAttribute KeybindingAmendAttributeConfig `yaml:"amendAttribute"`
|
||||
Stash KeybindingStashConfig `yaml:"stash"`
|
||||
CommitFiles KeybindingCommitFilesConfig `yaml:"commitFiles"`
|
||||
Main KeybindingMainConfig `yaml:"main"`
|
||||
Submodules KeybindingSubmodulesConfig `yaml:"submodules"`
|
||||
CommitMessage KeybindingCommitMessageConfig `yaml:"commitMessage"`
|
||||
Universal KeybindingUniversalConfig `yaml:"universal"`
|
||||
Status KeybindingStatusConfig `yaml:"status"`
|
||||
Files KeybindingFilesConfig `yaml:"files"`
|
||||
Branches KeybindingBranchesConfig `yaml:"branches"`
|
||||
Worktrees KeybindingWorktreesConfig `yaml:"worktrees"`
|
||||
Commits KeybindingCommitsConfig `yaml:"commits"`
|
||||
Stash KeybindingStashConfig `yaml:"stash"`
|
||||
CommitFiles KeybindingCommitFilesConfig `yaml:"commitFiles"`
|
||||
Main KeybindingMainConfig `yaml:"main"`
|
||||
Submodules KeybindingSubmodulesConfig `yaml:"submodules"`
|
||||
CommitMessage KeybindingCommitMessageConfig `yaml:"commitMessage"`
|
||||
}
|
||||
|
||||
// damn looks like we have some inconsistencies here with -alt and -alt1
|
||||
@@ -451,12 +440,6 @@ type KeybindingCommitsConfig struct {
|
||||
StartInteractiveRebase string `yaml:"startInteractiveRebase"`
|
||||
}
|
||||
|
||||
type KeybindingAmendAttributeConfig struct {
|
||||
ResetAuthor string `yaml:"resetAuthor"`
|
||||
SetAuthor string `yaml:"setAuthor"`
|
||||
AddCoAuthor string `yaml:"addCoAuthor"`
|
||||
}
|
||||
|
||||
type KeybindingStashConfig struct {
|
||||
PopStash string `yaml:"popStash"`
|
||||
RenameStash string `yaml:"renameStash"`
|
||||
@@ -479,7 +462,7 @@ type KeybindingSubmodulesConfig struct {
|
||||
}
|
||||
|
||||
type KeybindingCommitMessageConfig struct {
|
||||
CommitMenu string `yaml:"commitMenu"`
|
||||
SwitchToEditor string `yaml:"switchToEditor"`
|
||||
}
|
||||
|
||||
// OSConfig contains config on the level of the os
|
||||
@@ -670,7 +653,6 @@ func GetDefaultConfig() *UserConfig {
|
||||
Border: "rounded",
|
||||
AnimateExplosion: true,
|
||||
PortraitMode: "auto",
|
||||
FilterMode: "substring",
|
||||
},
|
||||
Git: GitConfig{
|
||||
Paging: PagingConfig{
|
||||
@@ -693,17 +675,16 @@ func GetDefaultConfig() *UserConfig {
|
||||
ShowGraph: "always",
|
||||
ShowWholeGraph: false,
|
||||
},
|
||||
SkipHookPrefix: "WIP",
|
||||
MainBranches: []string{"master", "main"},
|
||||
AutoFetch: true,
|
||||
AutoRefresh: true,
|
||||
FetchAll: true,
|
||||
BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
|
||||
AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium",
|
||||
DisableForcePushing: false,
|
||||
CommitPrefixes: map[string]CommitPrefixConfig(nil),
|
||||
ParseEmoji: false,
|
||||
TruncateCopiedCommitHashesTo: 12,
|
||||
SkipHookPrefix: "WIP",
|
||||
MainBranches: []string{"master", "main"},
|
||||
AutoFetch: true,
|
||||
AutoRefresh: true,
|
||||
FetchAll: true,
|
||||
BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
|
||||
AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium",
|
||||
DisableForcePushing: false,
|
||||
CommitPrefixes: map[string]CommitPrefixConfig(nil),
|
||||
ParseEmoji: false,
|
||||
},
|
||||
Refresher: RefresherConfig{
|
||||
RefreshInterval: 10,
|
||||
@@ -855,11 +836,6 @@ func GetDefaultConfig() *UserConfig {
|
||||
ViewBisectOptions: "b",
|
||||
StartInteractiveRebase: "i",
|
||||
},
|
||||
AmendAttribute: KeybindingAmendAttributeConfig{
|
||||
ResetAuthor: "a",
|
||||
SetAuthor: "A",
|
||||
AddCoAuthor: "c",
|
||||
},
|
||||
Stash: KeybindingStashConfig{
|
||||
PopStash: "g",
|
||||
RenameStash: "r",
|
||||
@@ -878,7 +854,7 @@ func GetDefaultConfig() *UserConfig {
|
||||
BulkMenu: "b",
|
||||
},
|
||||
CommitMessage: KeybindingCommitMessageConfig{
|
||||
CommitMenu: "<c-o>",
|
||||
SwitchToEditor: "<c-o>",
|
||||
},
|
||||
},
|
||||
OS: OSConfig{},
|
||||
|
||||
@@ -28,9 +28,9 @@ var Links = struct {
|
||||
CustomPagers: "https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md",
|
||||
CustomKeybindings: "https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Custom_Keybindings.md",
|
||||
CustomCommands: "https://github.com/jesseduffield/lazygit/wiki/Custom-Commands-Compendium",
|
||||
Keybindings: "https://github.com/jesseduffield/lazygit/blob/%s/docs/keybindings",
|
||||
Keybindings: "https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings",
|
||||
Undoing: "https://github.com/jesseduffield/lazygit/blob/master/docs/Undoing.md",
|
||||
Config: "https://github.com/jesseduffield/lazygit/blob/%s/docs/Config.md",
|
||||
Config: "https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md",
|
||||
Tutorial: "https://youtu.be/VDXvbHZYeKY",
|
||||
CustomPatchDemo: "https://github.com/jesseduffield/lazygit#rebase-magic-custom-patches",
|
||||
},
|
||||
|
||||
@@ -22,6 +22,7 @@ func NewBranchesContext(c *ContextCommon) *BranchesContext {
|
||||
func(branch *models.Branch) []string {
|
||||
return []string{branch.Name}
|
||||
},
|
||||
func() bool { return c.AppState.LocalBranchSortOrder != "alphabetical" },
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/keybindings"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
type CommitMessageContext struct {
|
||||
@@ -111,10 +112,11 @@ func (self *CommitMessageContext) SetPanelState(
|
||||
self.GetView().Title = summaryTitle
|
||||
self.c.Views().CommitDescription.Title = descriptionTitle
|
||||
|
||||
self.c.Views().CommitDescription.Subtitle = utils.ResolvePlaceholderString(self.c.Tr.CommitDescriptionSubTitle,
|
||||
subtitleTemplate := lo.Ternary(onSwitchToEditor != nil, self.c.Tr.CommitDescriptionSubTitle, self.c.Tr.CommitDescriptionSubTitleNoSwitch)
|
||||
self.c.Views().CommitDescription.Subtitle = utils.ResolvePlaceholderString(subtitleTemplate,
|
||||
map[string]string{
|
||||
"togglePanelKeyBinding": keybindings.Label(self.c.UserConfig.Keybinding.Universal.TogglePanel),
|
||||
"commitMenuKeybinding": keybindings.Label(self.c.UserConfig.Keybinding.CommitMessage.CommitMenu),
|
||||
"togglePanelKeyBinding": keybindings.Label(self.c.UserConfig.Keybinding.Universal.TogglePanel),
|
||||
"switchToEditorKeyBinding": keybindings.Label(self.c.UserConfig.Keybinding.CommitMessage.SwitchToEditor),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package context
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
@@ -16,14 +17,21 @@ type FilteredList[T any] struct {
|
||||
getFilterFields func(T) []string
|
||||
filter string
|
||||
|
||||
// Normally, filtered items are presented sorted by best match. If this
|
||||
// function returns true, they retain their original sort order instead;
|
||||
// this is useful for lists that show items sorted by date, for example.
|
||||
// Leaving this nil is equivalent to returning false.
|
||||
shouldRetainSortOrder func() bool
|
||||
|
||||
mutex *deadlock.Mutex
|
||||
}
|
||||
|
||||
func NewFilteredList[T any](getList func() []T, getFilterFields func(T) []string) *FilteredList[T] {
|
||||
func NewFilteredList[T any](getList func() []T, getFilterFields func(T) []string, shouldRetainSortOrder func() bool) *FilteredList[T] {
|
||||
return &FilteredList[T]{
|
||||
getList: getList,
|
||||
getFilterFields: getFilterFields,
|
||||
mutex: &deadlock.Mutex{},
|
||||
getList: getList,
|
||||
getFilterFields: getFilterFields,
|
||||
shouldRetainSortOrder: shouldRetainSortOrder,
|
||||
mutex: &deadlock.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,18 +39,18 @@ func (self *FilteredList[T]) GetFilter() string {
|
||||
return self.filter
|
||||
}
|
||||
|
||||
func (self *FilteredList[T]) SetFilter(filter string, useFuzzySearch bool) {
|
||||
func (self *FilteredList[T]) SetFilter(filter string) {
|
||||
self.filter = filter
|
||||
|
||||
self.applyFilter(useFuzzySearch)
|
||||
self.applyFilter()
|
||||
}
|
||||
|
||||
func (self *FilteredList[T]) ClearFilter() {
|
||||
self.SetFilter("", false)
|
||||
self.SetFilter("")
|
||||
}
|
||||
|
||||
func (self *FilteredList[T]) ReApplyFilter(useFuzzySearch bool) {
|
||||
self.applyFilter(useFuzzySearch)
|
||||
func (self *FilteredList[T]) ReApplyFilter() {
|
||||
self.applyFilter()
|
||||
}
|
||||
|
||||
func (self *FilteredList[T]) IsFiltering() bool {
|
||||
@@ -76,7 +84,7 @@ func (self *fuzzySource[T]) Len() int {
|
||||
return len(self.list)
|
||||
}
|
||||
|
||||
func (self *FilteredList[T]) applyFilter(useFuzzySearch bool) {
|
||||
func (self *FilteredList[T]) applyFilter() {
|
||||
self.mutex.Lock()
|
||||
defer self.mutex.Unlock()
|
||||
|
||||
@@ -88,10 +96,13 @@ func (self *FilteredList[T]) applyFilter(useFuzzySearch bool) {
|
||||
getFilterFields: self.getFilterFields,
|
||||
}
|
||||
|
||||
matches := utils.FindFrom(self.filter, source, useFuzzySearch)
|
||||
matches := fuzzy.FindFrom(self.filter, source)
|
||||
self.filteredIndices = lo.Map(matches, func(match fuzzy.Match, _ int) int {
|
||||
return match.Index
|
||||
})
|
||||
if self.shouldRetainSortOrder != nil && self.shouldRetainSortOrder() {
|
||||
slices.Sort(self.filteredIndices)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ type FilteredListViewModel[T HasID] struct {
|
||||
*SearchHistory
|
||||
}
|
||||
|
||||
func NewFilteredListViewModel[T HasID](getList func() []T, getFilterFields func(T) []string) *FilteredListViewModel[T] {
|
||||
filteredList := NewFilteredList(getList, getFilterFields)
|
||||
func NewFilteredListViewModel[T HasID](getList func() []T, getFilterFields func(T) []string, shouldRetainSortOrder func() bool) *FilteredListViewModel[T] {
|
||||
filteredList := NewFilteredList(getList, getFilterFields, shouldRetainSortOrder)
|
||||
|
||||
self := &FilteredListViewModel[T]{
|
||||
FilteredList: filteredList,
|
||||
|
||||
@@ -61,6 +61,10 @@ func NewMenuViewModel(c *ContextCommon) *MenuViewModel {
|
||||
self.FilteredListViewModel = NewFilteredListViewModel(
|
||||
func() []*types.MenuItem { return self.menuItems },
|
||||
func(item *types.MenuItem) []string { return item.LabelColumns },
|
||||
// The only menu that the user is likely to filter in is the keybindings
|
||||
// menu; retain the sort order in that one because this allows us to
|
||||
// keep the section headers while filtering:
|
||||
func() bool { return true },
|
||||
)
|
||||
|
||||
return self
|
||||
@@ -95,13 +99,6 @@ func (self *MenuViewModel) GetDisplayStrings(_ int, _ int) [][]string {
|
||||
}
|
||||
|
||||
func (self *MenuViewModel) GetNonModelItems() []*NonModelItem {
|
||||
// Don't display section headers when we are filtering, and the filter mode
|
||||
// is fuzzy. The reason is that filtering changes the order of the items
|
||||
// (they are sorted by best match), so all the sections would be messed up.
|
||||
if self.FilteredListViewModel.IsFiltering() && self.c.UserConfig.Gui.UseFuzzySearch() {
|
||||
return []*NonModelItem{}
|
||||
}
|
||||
|
||||
result := []*NonModelItem{}
|
||||
menuItems := self.FilteredListViewModel.GetItems()
|
||||
var prevSection *types.MenuSection = nil
|
||||
|
||||
@@ -24,6 +24,7 @@ func NewReflogCommitsContext(c *ContextCommon) *ReflogCommitsContext {
|
||||
func(commit *models.Commit) []string {
|
||||
return []string{commit.ShortSha(), commit.Name}
|
||||
},
|
||||
func() bool { return true },
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -26,6 +26,7 @@ func NewRemoteBranchesContext(
|
||||
func(remoteBranch *models.RemoteBranch) []string {
|
||||
return []string{remoteBranch.Name}
|
||||
},
|
||||
func() bool { return c.AppState.RemoteBranchSortOrder != "alphabetical" },
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -22,6 +22,7 @@ func NewRemotesContext(c *ContextCommon) *RemotesContext {
|
||||
func(remote *models.Remote) []string {
|
||||
return []string{remote.Name}
|
||||
},
|
||||
nil,
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -24,6 +24,7 @@ func NewStashContext(
|
||||
func(stashEntry *models.StashEntry) []string {
|
||||
return []string{stashEntry.Name}
|
||||
},
|
||||
func() bool { return true },
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -19,6 +19,7 @@ func NewSubmodulesContext(c *ContextCommon) *SubmodulesContext {
|
||||
func(submodule *models.SubmoduleConfig) []string {
|
||||
return []string{submodule.FullName()}
|
||||
},
|
||||
nil,
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -24,6 +24,7 @@ func NewTagsContext(
|
||||
func(tag *models.Tag) []string {
|
||||
return []string{tag.Name, tag.Message}
|
||||
},
|
||||
nil,
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -65,11 +65,7 @@ func (self *ListCursor) SetSelection(value int) {
|
||||
func (self *ListCursor) SetSelectionRangeAndMode(selectedIdx, rangeStartIdx int, mode RangeSelectMode) {
|
||||
self.selectedIdx = self.clampValue(selectedIdx)
|
||||
self.rangeStartIdx = self.clampValue(rangeStartIdx)
|
||||
if mode == RangeSelectModeNonSticky && selectedIdx == rangeStartIdx {
|
||||
self.rangeSelectMode = RangeSelectModeNone
|
||||
} else {
|
||||
self.rangeSelectMode = mode
|
||||
}
|
||||
self.rangeSelectMode = mode
|
||||
}
|
||||
|
||||
// Returns the selectedIdx, the rangeStartIdx, and the mode of the current selection.
|
||||
|
||||
@@ -19,6 +19,7 @@ func NewWorktreesContext(c *ContextCommon) *WorktreesContext {
|
||||
func(Worktree *models.Worktree) []string {
|
||||
return []string{Worktree.Name}
|
||||
},
|
||||
nil,
|
||||
)
|
||||
|
||||
getDisplayStrings := func(_ int, _ int) [][]string {
|
||||
|
||||
@@ -175,7 +175,7 @@ func (self *BasicCommitsController) copyCommitSHAToClipboard(commit *models.Comm
|
||||
return self.c.Error(err)
|
||||
}
|
||||
|
||||
self.c.Toast(fmt.Sprintf("'%s' %s", commit.Sha, self.c.Tr.CopiedToClipboard))
|
||||
self.c.Toast(self.c.Tr.CommitSHACopiedToClipboard)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -436,10 +436,6 @@ func (self *BranchesController) checkoutByName() error {
|
||||
FindSuggestionsFunc: self.c.Helpers().Suggestions.GetRefsSuggestionsFunc(),
|
||||
HandleConfirm: func(response string) error {
|
||||
self.c.LogAction("Checkout branch")
|
||||
_, branchName, found := self.c.Helpers().Refs.ParseRemoteBranchName(response)
|
||||
if found {
|
||||
return self.c.Helpers().Refs.CheckoutRemoteBranch(response, branchName)
|
||||
}
|
||||
return self.c.Helpers().Refs.CheckoutRef(response, types.CheckoutRefOptions{
|
||||
OnRefNotFound: func(ref string) error {
|
||||
return self.c.Confirm(types.ConfirmOpts{
|
||||
|
||||
@@ -36,8 +36,8 @@ func (self *CommitDescriptionController) GetKeybindings(opts types.KeybindingsOp
|
||||
Handler: self.confirm,
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.CommitMessage.CommitMenu),
|
||||
Handler: self.openCommitMenu,
|
||||
Key: opts.GetKey(opts.Config.CommitMessage.SwitchToEditor),
|
||||
Handler: self.switchToEditor,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -64,7 +64,6 @@ func (self *CommitDescriptionController) confirm() error {
|
||||
return self.c.Helpers().Commits.HandleCommitConfirm()
|
||||
}
|
||||
|
||||
func (self *CommitDescriptionController) openCommitMenu() error {
|
||||
authorSuggestion := self.c.Helpers().Suggestions.GetAuthorsSuggestionsFunc()
|
||||
return self.c.Helpers().Commits.OpenCommitMenu(authorSuggestion)
|
||||
func (self *CommitDescriptionController) switchToEditor() error {
|
||||
return self.c.Helpers().Commits.SwitchToEditor()
|
||||
}
|
||||
|
||||
@@ -48,8 +48,8 @@ func (self *CommitMessageController) GetKeybindings(opts types.KeybindingsOpts)
|
||||
Handler: self.switchToCommitDescription,
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.CommitMessage.CommitMenu),
|
||||
Handler: self.openCommitMenu,
|
||||
Key: opts.GetKey(opts.Config.CommitMessage.SwitchToEditor),
|
||||
Handler: self.switchToEditor,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -89,6 +89,10 @@ func (self *CommitMessageController) switchToCommitDescription() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *CommitMessageController) switchToEditor() error {
|
||||
return self.c.Helpers().Commits.SwitchToEditor()
|
||||
}
|
||||
|
||||
func (self *CommitMessageController) handleCommitIndexChange(value int) error {
|
||||
currentIndex := self.context().GetSelectedIndex()
|
||||
newIndex := currentIndex + value
|
||||
@@ -130,8 +134,3 @@ func (self *CommitMessageController) confirm() error {
|
||||
func (self *CommitMessageController) close() error {
|
||||
return self.c.Helpers().Commits.CloseCommitMessagePanel()
|
||||
}
|
||||
|
||||
func (self *CommitMessageController) openCommitMenu() error {
|
||||
authorSuggestion := self.c.Helpers().Suggestions.GetAuthorsSuggestionsFunc()
|
||||
return self.c.Helpers().Commits.OpenCommitMenu(authorSuggestion)
|
||||
}
|
||||
|
||||
@@ -65,8 +65,8 @@ func (self *CommitFilesController) GetKeybindings(opts types.KeybindingsOpts) []
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.Edit),
|
||||
Handler: self.withItems(self.edit),
|
||||
GetDisabledReason: self.require(self.itemsSelected(self.canEditFiles)),
|
||||
Handler: self.withItem(self.edit),
|
||||
GetDisabledReason: self.require(self.singleItemSelected()),
|
||||
Description: self.c.Tr.Edit,
|
||||
Tooltip: self.c.Tr.EditFileTooltip,
|
||||
DisplayOnScreen: true,
|
||||
@@ -230,22 +230,12 @@ func (self *CommitFilesController) open(node *filetree.CommitFileNode) error {
|
||||
return self.c.Helpers().Files.OpenFile(node.GetPath())
|
||||
}
|
||||
|
||||
func (self *CommitFilesController) edit(nodes []*filetree.CommitFileNode) error {
|
||||
return self.c.Helpers().Files.EditFiles(lo.FilterMap(nodes,
|
||||
func(node *filetree.CommitFileNode, _ int) (string, bool) {
|
||||
return node.GetPath(), node.IsFile()
|
||||
}))
|
||||
}
|
||||
|
||||
func (self *CommitFilesController) canEditFiles(nodes []*filetree.CommitFileNode) *types.DisabledReason {
|
||||
if lo.NoneBy(nodes, func(node *filetree.CommitFileNode) bool { return node.IsFile() }) {
|
||||
return &types.DisabledReason{
|
||||
Text: self.c.Tr.ErrCannotEditDirectory,
|
||||
ShowErrorInPanel: true,
|
||||
}
|
||||
func (self *CommitFilesController) edit(node *filetree.CommitFileNode) error {
|
||||
if node.File == nil {
|
||||
return self.c.ErrorMsg(self.c.Tr.ErrCannotEditDirectory)
|
||||
}
|
||||
|
||||
return nil
|
||||
return self.c.Helpers().Files.EditFile(node.GetPath())
|
||||
}
|
||||
|
||||
func (self *CommitFilesController) openDiffTool(node *filetree.CommitFileNode) error {
|
||||
|
||||
@@ -38,7 +38,7 @@ func (self *CustomCommandAction) Call() error {
|
||||
func (self *CustomCommandAction) GetCustomCommandsHistorySuggestionsFunc() func(string) []*types.Suggestion {
|
||||
history := self.c.GetAppState().CustomCommandsHistory
|
||||
|
||||
return helpers.FilterFunc(history, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return helpers.FuzzySearchFunc(history)
|
||||
}
|
||||
|
||||
// this mimics the shell functionality `ignorespace`
|
||||
|
||||
@@ -86,8 +86,8 @@ func (self *FilesController) GetKeybindings(opts types.KeybindingsOpts) []*types
|
||||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.Edit),
|
||||
Handler: self.withItems(self.edit),
|
||||
GetDisabledReason: self.require(self.itemsSelected(self.canEditFiles)),
|
||||
Handler: self.withItem(self.edit),
|
||||
GetDisabledReason: self.require(self.singleItemSelected()),
|
||||
Description: self.c.Tr.Edit,
|
||||
Tooltip: self.c.Tr.EditFileTooltip,
|
||||
DisplayOnScreen: true,
|
||||
@@ -714,22 +714,12 @@ func (self *FilesController) setStatusFiltering(filter filetree.FileTreeDisplayF
|
||||
return self.c.PostRefreshUpdate(self.context())
|
||||
}
|
||||
|
||||
func (self *FilesController) edit(nodes []*filetree.FileNode) error {
|
||||
return self.c.Helpers().Files.EditFiles(lo.FilterMap(nodes,
|
||||
func(node *filetree.FileNode, _ int) (string, bool) {
|
||||
return node.GetPath(), node.IsFile()
|
||||
}))
|
||||
}
|
||||
|
||||
func (self *FilesController) canEditFiles(nodes []*filetree.FileNode) *types.DisabledReason {
|
||||
if lo.NoneBy(nodes, func(node *filetree.FileNode) bool { return node.IsFile() }) {
|
||||
return &types.DisabledReason{
|
||||
Text: self.c.Tr.ErrCannotEditDirectory,
|
||||
ShowErrorInPanel: true,
|
||||
}
|
||||
func (self *FilesController) edit(node *filetree.FileNode) error {
|
||||
if node.File == nil {
|
||||
return self.c.ErrorMsg(self.c.Tr.ErrCannotEditDirectory)
|
||||
}
|
||||
|
||||
return nil
|
||||
return self.c.Helpers().Files.EditFile(node.GetPath())
|
||||
}
|
||||
|
||||
func (self *FilesController) Open() error {
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/git_commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
@@ -91,6 +90,10 @@ func TryRemoveHardLineBreaks(message string, autoWrapWidth int) string {
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) SwitchToEditor() error {
|
||||
if !self.c.Contexts().CommitMessage.CanSwitchToEditor() {
|
||||
return nil
|
||||
}
|
||||
|
||||
message := lo.Ternary(len(self.getCommitDescription()) == 0,
|
||||
self.getCommitSummary(),
|
||||
self.getCommitSummary()+"\n\n"+self.getCommitDescription())
|
||||
@@ -212,47 +215,3 @@ func (self *CommitsHelper) commitMessageContexts() []types.Context {
|
||||
self.c.Contexts().CommitMessage,
|
||||
}
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) OpenCommitMenu(suggestionFunc func(string) []*types.Suggestion) error {
|
||||
var disabledReasonForOpenInEditor *types.DisabledReason
|
||||
if !self.c.Contexts().CommitMessage.CanSwitchToEditor() {
|
||||
disabledReasonForOpenInEditor = &types.DisabledReason{
|
||||
Text: self.c.Tr.CommandDoesNotSupportOpeningInEditor,
|
||||
}
|
||||
}
|
||||
|
||||
menuItems := []*types.MenuItem{
|
||||
{
|
||||
Label: self.c.Tr.OpenInEditor,
|
||||
OnPress: func() error {
|
||||
return self.SwitchToEditor()
|
||||
},
|
||||
Key: 'e',
|
||||
DisabledReason: disabledReasonForOpenInEditor,
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.AddCoAuthor,
|
||||
OnPress: func() error {
|
||||
return self.addCoAuthor(suggestionFunc)
|
||||
},
|
||||
Key: 'c',
|
||||
},
|
||||
}
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: self.c.Tr.CommitMenuTitle,
|
||||
Items: menuItems,
|
||||
})
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) addCoAuthor(suggestionFunc func(string) []*types.Suggestion) error {
|
||||
return self.c.Prompt(types.PromptOpts{
|
||||
Title: self.c.Tr.AddCoAuthorPromptTitle,
|
||||
FindSuggestionsFunc: suggestionFunc,
|
||||
HandleConfirm: func(value string) error {
|
||||
commitDescription := self.getCommitDescription()
|
||||
commitDescription = git_commands.AddCoAuthorToDescription(commitDescription, value)
|
||||
self.setCommitDescription(commitDescription)
|
||||
return nil
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,12 +2,10 @@ package helpers
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
type IFilesHelper interface {
|
||||
EditFiles(filenames []string) error
|
||||
EditFile(filename string) error
|
||||
EditFileAtLine(filename string, lineNumber int) error
|
||||
OpenFile(filename string) error
|
||||
}
|
||||
@@ -24,15 +22,12 @@ func NewFilesHelper(c *HelperCommon) *FilesHelper {
|
||||
|
||||
var _ IFilesHelper = &FilesHelper{}
|
||||
|
||||
func (self *FilesHelper) EditFiles(filenames []string) error {
|
||||
absPaths := lo.Map(filenames, func(filename string, _ int) string {
|
||||
absPath, err := filepath.Abs(filename)
|
||||
if err != nil {
|
||||
return filename
|
||||
}
|
||||
return absPath
|
||||
})
|
||||
cmdStr, suspend := self.c.Git().File.GetEditCmdStr(absPaths)
|
||||
func (self *FilesHelper) EditFile(filename string) error {
|
||||
absPath, err := filepath.Abs(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cmdStr, suspend := self.c.Git().File.GetEditCmdStr(absPath)
|
||||
return self.callEditor(cmdStr, suspend)
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/git_commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
@@ -54,7 +53,7 @@ func (self *RefsHelper) CheckoutRef(ref string, options types.CheckoutRefOptions
|
||||
|
||||
refreshOptions := types.RefreshOptions{Mode: types.BLOCK_UI, KeepBranchSelectionIndex: true}
|
||||
|
||||
f := func(gocui.Task) error {
|
||||
return self.c.WithWaitingStatus(waitingStatus, func(gocui.Task) error {
|
||||
if err := self.c.Git().Branch.Checkout(ref, cmdOptions); err != nil {
|
||||
// note, this will only work for english-language git commands. If we force git to use english, and the error isn't this one, then the user will receive an english command they may not understand. I'm not sure what the best solution to this is. Running the command once in english and a second time in the native language is one option
|
||||
|
||||
@@ -94,75 +93,6 @@ func (self *RefsHelper) CheckoutRef(ref string, options types.CheckoutRefOptions
|
||||
onSuccess()
|
||||
|
||||
return self.c.Refresh(refreshOptions)
|
||||
}
|
||||
|
||||
localBranch, found := lo.Find(self.c.Model().Branches, func(branch *models.Branch) bool {
|
||||
return branch.Name == ref
|
||||
})
|
||||
if found {
|
||||
return self.c.WithInlineStatus(localBranch, types.ItemOperationCheckingOut, context.LOCAL_BRANCHES_CONTEXT_KEY, f)
|
||||
} else {
|
||||
return self.c.WithWaitingStatus(waitingStatus, f)
|
||||
}
|
||||
}
|
||||
|
||||
// Shows a prompt to choose between creating a new branch or checking out a detached head
|
||||
func (self *RefsHelper) CheckoutRemoteBranch(fullBranchName string, localBranchName string) error {
|
||||
checkout := func(branchName string) error {
|
||||
// Switch to the branches context _before_ starting to check out the
|
||||
// branch, so that we see the inline status
|
||||
if self.c.CurrentContext() != self.c.Contexts().Branches {
|
||||
if err := self.c.PushContext(self.c.Contexts().Branches); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return self.CheckoutRef(branchName, types.CheckoutRefOptions{})
|
||||
}
|
||||
|
||||
// If a branch with this name already exists locally, just check it out. We
|
||||
// don't bother checking whether it actually tracks this remote branch, since
|
||||
// it's very unlikely that it doesn't.
|
||||
if lo.ContainsBy(self.c.Model().Branches, func(branch *models.Branch) bool {
|
||||
return branch.Name == localBranchName
|
||||
}) {
|
||||
return checkout(localBranchName)
|
||||
}
|
||||
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: utils.ResolvePlaceholderString(self.c.Tr.RemoteBranchCheckoutTitle, map[string]string{
|
||||
"branchName": fullBranchName,
|
||||
}),
|
||||
Items: []*types.MenuItem{
|
||||
{
|
||||
Label: self.c.Tr.CheckoutTypeNewBranch,
|
||||
Tooltip: self.c.Tr.CheckoutTypeNewBranchTooltip,
|
||||
OnPress: func() error {
|
||||
// First create the local branch with the upstream set, and
|
||||
// then check it out. We could do that in one step using
|
||||
// "git checkout -b", but we want to benefit from all the
|
||||
// nice features of the CheckoutRef function.
|
||||
if err := self.c.Git().Branch.CreateWithUpstream(localBranchName, fullBranchName); err != nil {
|
||||
return self.c.Error(err)
|
||||
}
|
||||
// Do a sync refresh to make sure the new branch is visible,
|
||||
// so that we see an inline status when checking it out
|
||||
if err := self.c.Refresh(types.RefreshOptions{
|
||||
Mode: types.SYNC,
|
||||
Scope: []types.RefreshableView{types.BRANCHES},
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return checkout(localBranchName)
|
||||
},
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.CheckoutTypeDetachedHead,
|
||||
Tooltip: self.c.Tr.CheckoutTypeDetachedHeadTooltip,
|
||||
OnPress: func() error {
|
||||
return checkout(fullBranchName)
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -302,21 +232,3 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest
|
||||
func SanitizedBranchName(input string) string {
|
||||
return strings.Replace(input, " ", "-", -1)
|
||||
}
|
||||
|
||||
// Checks if the given branch name is a remote branch, and returns the name of
|
||||
// the remote and the bare branch name if it is.
|
||||
func (self *RefsHelper) ParseRemoteBranchName(fullBranchName string) (string, string, bool) {
|
||||
remoteName, branchName, found := strings.Cut(fullBranchName, "/")
|
||||
if !found {
|
||||
return "", "", false
|
||||
}
|
||||
|
||||
// See if the part before the first slash is actually one of our remotes
|
||||
if !lo.ContainsBy(self.c.Model().Remotes, func(remote *models.Remote) bool {
|
||||
return remote.Name == remoteName
|
||||
}) {
|
||||
return "", "", false
|
||||
}
|
||||
|
||||
return remoteName, branchName, true
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ func (self *SearchHelper) OnPromptContentChanged(searchString string) {
|
||||
case types.IFilterableContext:
|
||||
context.SetSelection(0)
|
||||
_ = context.GetView().SetOriginY(0)
|
||||
context.SetFilter(searchString, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
context.SetFilter(searchString)
|
||||
_ = self.c.PostRefreshUpdate(context)
|
||||
case types.ISearchableContext:
|
||||
// do nothing
|
||||
@@ -234,7 +234,7 @@ func (self *SearchHelper) ReApplyFilter(context types.Context) {
|
||||
if ok {
|
||||
filterableContext.SetSelection(0)
|
||||
_ = filterableContext.GetView().SetOriginY(0)
|
||||
filterableContext.ReApplyFilter(self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
filterableContext.ReApplyFilter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package helpers
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
@@ -66,7 +65,7 @@ func matchesToSuggestions(matches []string) []*types.Suggestion {
|
||||
func (self *SuggestionsHelper) GetRemoteSuggestionsFunc() func(string) []*types.Suggestion {
|
||||
remoteNames := self.getRemoteNames()
|
||||
|
||||
return FilterFunc(remoteNames, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return FuzzySearchFunc(remoteNames)
|
||||
}
|
||||
|
||||
func (self *SuggestionsHelper) getBranchNames() []string {
|
||||
@@ -83,7 +82,7 @@ func (self *SuggestionsHelper) GetBranchNameSuggestionsFunc() func(string) []*ty
|
||||
if input == "" {
|
||||
matchingBranchNames = branchNames
|
||||
} else {
|
||||
matchingBranchNames = utils.FilterStrings(input, branchNames, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
matchingBranchNames = utils.FuzzySearch(input, branchNames)
|
||||
}
|
||||
|
||||
return lo.Map(matchingBranchNames, func(branchName string, _ int) *types.Suggestion {
|
||||
@@ -129,26 +128,13 @@ func (self *SuggestionsHelper) GetFilePathSuggestionsFunc() func(string) []*type
|
||||
|
||||
return func(input string) []*types.Suggestion {
|
||||
matchingNames := []string{}
|
||||
if self.c.UserConfig.Gui.UseFuzzySearch() {
|
||||
_ = self.c.Model().FilesTrie.VisitFuzzy(patricia.Prefix(input), true, func(prefix patricia.Prefix, item patricia.Item, skipped int) error {
|
||||
matchingNames = append(matchingNames, item.(string))
|
||||
return nil
|
||||
})
|
||||
_ = self.c.Model().FilesTrie.VisitFuzzy(patricia.Prefix(input), true, func(prefix patricia.Prefix, item patricia.Item, skipped int) error {
|
||||
matchingNames = append(matchingNames, item.(string))
|
||||
return nil
|
||||
})
|
||||
|
||||
// doing another fuzzy search for good measure
|
||||
matchingNames = utils.FilterStrings(input, matchingNames, true)
|
||||
} else {
|
||||
substrings := strings.Fields(input)
|
||||
_ = self.c.Model().FilesTrie.Visit(func(prefix patricia.Prefix, item patricia.Item) error {
|
||||
for _, sub := range substrings {
|
||||
if !utils.CaseAwareContains(item.(string), sub) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
matchingNames = append(matchingNames, item.(string))
|
||||
return nil
|
||||
})
|
||||
}
|
||||
// doing another fuzzy search for good measure
|
||||
matchingNames = utils.FuzzySearch(input, matchingNames)
|
||||
|
||||
return matchesToSuggestions(matchingNames)
|
||||
}
|
||||
@@ -163,7 +149,7 @@ func (self *SuggestionsHelper) getRemoteBranchNames(separator string) []string {
|
||||
}
|
||||
|
||||
func (self *SuggestionsHelper) GetRemoteBranchesSuggestionsFunc(separator string) func(string) []*types.Suggestion {
|
||||
return FilterFunc(self.getRemoteBranchNames(separator), self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return FuzzySearchFunc(self.getRemoteBranchNames(separator))
|
||||
}
|
||||
|
||||
func (self *SuggestionsHelper) getTagNames() []string {
|
||||
@@ -175,7 +161,7 @@ func (self *SuggestionsHelper) getTagNames() []string {
|
||||
func (self *SuggestionsHelper) GetTagsSuggestionsFunc() func(string) []*types.Suggestion {
|
||||
tagNames := self.getTagNames()
|
||||
|
||||
return FilterFunc(tagNames, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return FuzzySearchFunc(tagNames)
|
||||
}
|
||||
|
||||
func (self *SuggestionsHelper) GetRefsSuggestionsFunc() func(string) []*types.Suggestion {
|
||||
@@ -186,7 +172,7 @@ func (self *SuggestionsHelper) GetRefsSuggestionsFunc() func(string) []*types.Su
|
||||
|
||||
refNames := append(append(append(remoteBranchNames, localBranchNames...), tagNames...), additionalRefNames...)
|
||||
|
||||
return FilterFunc(refNames, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return FuzzySearchFunc(refNames)
|
||||
}
|
||||
|
||||
func (self *SuggestionsHelper) GetAuthorsSuggestionsFunc() func(string) []*types.Suggestion {
|
||||
@@ -196,16 +182,16 @@ func (self *SuggestionsHelper) GetAuthorsSuggestionsFunc() func(string) []*types
|
||||
|
||||
slices.Sort(authors)
|
||||
|
||||
return FilterFunc(authors, self.c.UserConfig.Gui.UseFuzzySearch())
|
||||
return FuzzySearchFunc(authors)
|
||||
}
|
||||
|
||||
func FilterFunc(options []string, useFuzzySearch bool) func(string) []*types.Suggestion {
|
||||
func FuzzySearchFunc(options []string) func(string) []*types.Suggestion {
|
||||
return func(input string) []*types.Suggestion {
|
||||
var matches []string
|
||||
if input == "" {
|
||||
matches = options
|
||||
} else {
|
||||
matches = utils.FilterStrings(input, options, useFuzzySearch)
|
||||
matches = utils.FuzzySearch(input, options)
|
||||
}
|
||||
|
||||
return matchesToSuggestions(matches)
|
||||
|
||||
@@ -106,7 +106,7 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
|
||||
Handler: self.withItemsRange(self.drop),
|
||||
GetDisabledReason: self.require(
|
||||
self.itemRangeSelected(
|
||||
self.canDropCommits,
|
||||
self.midRebaseCommandEnabled,
|
||||
),
|
||||
),
|
||||
Description: self.c.Tr.DropCommit,
|
||||
@@ -157,7 +157,7 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
|
||||
Key: opts.GetKey(opts.Config.Commits.CreateFixupCommit),
|
||||
Handler: self.withItem(self.createFixupCommit),
|
||||
GetDisabledReason: self.require(self.singleItemSelected()),
|
||||
Description: self.c.Tr.CreateFixupCommit,
|
||||
Description: self.c.Tr.CreateFixupCommitDescription,
|
||||
Tooltip: utils.ResolvePlaceholderString(
|
||||
self.c.Tr.CreateFixupCommitTooltip,
|
||||
map[string]string{
|
||||
@@ -179,7 +179,7 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
|
||||
Key: opts.GetKey(opts.Config.Commits.MoveDownCommit),
|
||||
Handler: self.withItemsRange(self.moveDown),
|
||||
GetDisabledReason: self.require(self.itemRangeSelected(
|
||||
self.midRebaseMoveCommandEnabled,
|
||||
self.midRebaseCommandEnabled,
|
||||
self.canMoveDown,
|
||||
)),
|
||||
Description: self.c.Tr.MoveDownCommit,
|
||||
@@ -188,7 +188,7 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
|
||||
Key: opts.GetKey(opts.Config.Commits.MoveUpCommit),
|
||||
Handler: self.withItemsRange(self.moveUp),
|
||||
GetDisabledReason: self.require(self.itemRangeSelected(
|
||||
self.midRebaseMoveCommandEnabled,
|
||||
self.midRebaseCommandEnabled,
|
||||
self.canMoveUp,
|
||||
)),
|
||||
Description: self.c.Tr.MoveUpCommit,
|
||||
@@ -282,7 +282,7 @@ func (self *LocalCommitsController) GetOnRenderToMain() func() error {
|
||||
utils.ResolvePlaceholderString(
|
||||
self.c.Tr.UpdateRefHere,
|
||||
map[string]string{
|
||||
"ref": strings.TrimPrefix(commit.Name, "refs/heads/"),
|
||||
"ref": commit.Name,
|
||||
}))
|
||||
} else {
|
||||
cmdObj := self.c.Git().Commit.ShowCmdObj(commit.Sha, self.c.Modes().Filtering.GetPath())
|
||||
@@ -439,36 +439,6 @@ func (self *LocalCommitsController) rewordEditor(commit *models.Commit) error {
|
||||
|
||||
func (self *LocalCommitsController) drop(selectedCommits []*models.Commit, startIdx int, endIdx int) error {
|
||||
if self.isRebasing() {
|
||||
groupedTodos := lo.GroupBy(selectedCommits, func(c *models.Commit) bool {
|
||||
return c.Action == todo.UpdateRef
|
||||
})
|
||||
updateRefTodos := groupedTodos[true]
|
||||
nonUpdateRefTodos := groupedTodos[false]
|
||||
|
||||
if len(updateRefTodos) > 0 {
|
||||
return self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.DropCommitTitle,
|
||||
Prompt: self.c.Tr.DropUpdateRefPrompt,
|
||||
HandleConfirm: func() error {
|
||||
selectedIdx, rangeStartIdx, rangeSelectMode := self.context().GetSelectionRangeAndMode()
|
||||
|
||||
if err := self.c.Git().Rebase.DeleteUpdateRefTodos(updateRefTodos); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if selectedIdx > rangeStartIdx {
|
||||
selectedIdx = utils.Max(selectedIdx-len(updateRefTodos), rangeStartIdx)
|
||||
} else {
|
||||
rangeStartIdx = utils.Max(rangeStartIdx-len(updateRefTodos), selectedIdx)
|
||||
}
|
||||
|
||||
self.context().SetSelectionRangeAndMode(selectedIdx, rangeStartIdx, rangeSelectMode)
|
||||
|
||||
return self.updateTodos(todo.Drop, nonUpdateRefTodos)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return self.updateTodos(todo.Drop, selectedCommits)
|
||||
}
|
||||
|
||||
@@ -703,26 +673,25 @@ func (self *LocalCommitsController) canAmend(commit *models.Commit) *types.Disab
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) amendAttribute(commit *models.Commit) error {
|
||||
opts := self.c.KeybindingsOpts()
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: "Amend commit attribute",
|
||||
Items: []*types.MenuItem{
|
||||
{
|
||||
Label: self.c.Tr.ResetAuthor,
|
||||
OnPress: self.resetAuthor,
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.ResetAuthor),
|
||||
Tooltip: self.c.Tr.ResetAuthorTooltip,
|
||||
Key: 'a',
|
||||
Tooltip: "Reset the commit's author to the currently configured user. This will also renew the author timestamp",
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.SetAuthor,
|
||||
OnPress: self.setAuthor,
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.SetAuthor),
|
||||
Tooltip: self.c.Tr.SetAuthorTooltip,
|
||||
Key: 'A',
|
||||
Tooltip: "Set the author based on a prompt",
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.AddCoAuthor,
|
||||
OnPress: self.addCoAuthor,
|
||||
Key: opts.GetKey(opts.Config.AmendAttribute.AddCoAuthor),
|
||||
Key: 'c',
|
||||
Tooltip: self.c.Tr.AddCoAuthorTooltip,
|
||||
},
|
||||
},
|
||||
@@ -832,87 +801,30 @@ func (self *LocalCommitsController) afterRevertCommit() error {
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) createFixupCommit(commit *models.Commit) error {
|
||||
var disabledReasonWhenFilesAreNeeded *types.DisabledReason
|
||||
if len(self.c.Model().Files) == 0 {
|
||||
disabledReasonWhenFilesAreNeeded = &types.DisabledReason{
|
||||
Text: self.c.Tr.NoFilesStagedTitle,
|
||||
ShowErrorInPanel: true,
|
||||
}
|
||||
}
|
||||
|
||||
return self.c.Menu(types.CreateMenuOptions{
|
||||
Title: self.c.Tr.CreateFixupCommit,
|
||||
Items: []*types.MenuItem{
|
||||
{
|
||||
Label: self.c.Tr.FixupMenu_Fixup,
|
||||
Key: 'f',
|
||||
OnPress: func() error {
|
||||
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||
self.c.LogAction(self.c.Tr.Actions.CreateFixupCommit)
|
||||
return self.c.WithWaitingStatusSync(self.c.Tr.CreatingFixupCommitStatus, func() error {
|
||||
if err := self.c.Git().Commit.CreateFixupCommit(commit.Sha); err != nil {
|
||||
return self.c.Error(err)
|
||||
}
|
||||
|
||||
self.context().MoveSelectedLine(1)
|
||||
return self.c.Refresh(types.RefreshOptions{Mode: types.SYNC})
|
||||
})
|
||||
})
|
||||
},
|
||||
DisabledReason: disabledReasonWhenFilesAreNeeded,
|
||||
Tooltip: self.c.Tr.FixupMenu_FixupTooltip,
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.FixupMenu_AmendWithChanges,
|
||||
Key: 'a',
|
||||
OnPress: func() error {
|
||||
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||
return self.createAmendCommit(commit, true)
|
||||
})
|
||||
},
|
||||
DisabledReason: disabledReasonWhenFilesAreNeeded,
|
||||
Tooltip: self.c.Tr.FixupMenu_AmendWithChangesTooltip,
|
||||
},
|
||||
{
|
||||
Label: self.c.Tr.FixupMenu_AmendWithoutChanges,
|
||||
Key: 'r',
|
||||
OnPress: func() error { return self.createAmendCommit(commit, false) },
|
||||
Tooltip: self.c.Tr.FixupMenu_AmendWithoutChangesTooltip,
|
||||
},
|
||||
prompt := utils.ResolvePlaceholderString(
|
||||
self.c.Tr.SureCreateFixupCommit,
|
||||
map[string]string{
|
||||
"commit": commit.Sha,
|
||||
},
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
func (self *LocalCommitsController) createAmendCommit(commit *models.Commit, includeFileChanges bool) error {
|
||||
commitMessage, err := self.c.Git().Commit.GetCommitMessage(commit.Sha)
|
||||
if err != nil {
|
||||
return self.c.Error(err)
|
||||
}
|
||||
if self.c.UserConfig.Git.Commit.AutoWrapCommitMessage {
|
||||
commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig.Git.Commit.AutoWrapWidth)
|
||||
}
|
||||
originalSubject, _, _ := strings.Cut(commitMessage, "\n")
|
||||
return self.c.Helpers().Commits.OpenCommitMessagePanel(
|
||||
&helpers.OpenCommitMessagePanelOpts{
|
||||
CommitIndex: self.context().GetSelectedLineIdx(),
|
||||
InitialMessage: commitMessage,
|
||||
SummaryTitle: self.c.Tr.CreateAmendCommit,
|
||||
DescriptionTitle: self.c.Tr.CommitDescriptionTitle,
|
||||
PreserveMessage: false,
|
||||
OnConfirm: func(summary string, description string) error {
|
||||
return self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.CreateFixupCommit,
|
||||
Prompt: prompt,
|
||||
HandleConfirm: func() error {
|
||||
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||
self.c.LogAction(self.c.Tr.Actions.CreateFixupCommit)
|
||||
return self.c.WithWaitingStatusSync(self.c.Tr.CreatingFixupCommitStatus, func() error {
|
||||
if err := self.c.Git().Commit.CreateAmendCommit(originalSubject, summary, description, includeFileChanges); err != nil {
|
||||
if err := self.c.Git().Commit.CreateFixupCommit(commit.Sha); err != nil {
|
||||
return self.c.Error(err)
|
||||
}
|
||||
|
||||
self.context().MoveSelectedLine(1)
|
||||
return self.c.Refresh(types.RefreshOptions{Mode: types.SYNC})
|
||||
})
|
||||
},
|
||||
OnSwitchToEditor: nil,
|
||||
})
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) squashFixupCommits() error {
|
||||
@@ -1279,49 +1191,6 @@ func (self *LocalCommitsController) midRebaseCommandEnabled(selectedCommits []*m
|
||||
return nil
|
||||
}
|
||||
|
||||
// Ensures that if we are mid-rebase, we're only selecting commits that can be moved
|
||||
func (self *LocalCommitsController) midRebaseMoveCommandEnabled(selectedCommits []*models.Commit, startIdx int, endIdx int) *types.DisabledReason {
|
||||
if !self.isRebasing() {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, commit := range selectedCommits {
|
||||
if !commit.IsTODO() {
|
||||
return &types.DisabledReason{Text: self.c.Tr.MustSelectTodoCommits}
|
||||
}
|
||||
|
||||
// All todo types that can be edited are allowed to be moved, plus
|
||||
// update-ref todos
|
||||
if !isChangeOfRebaseTodoAllowed(commit.Action) && commit.Action != todo.UpdateRef {
|
||||
return &types.DisabledReason{Text: self.c.Tr.ChangingThisActionIsNotAllowed}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *LocalCommitsController) canDropCommits(selectedCommits []*models.Commit, startIdx int, endIdx int) *types.DisabledReason {
|
||||
if !self.isRebasing() {
|
||||
return nil
|
||||
}
|
||||
|
||||
nonUpdateRefTodos := lo.Filter(selectedCommits, func(c *models.Commit, _ int) bool {
|
||||
return c.Action != todo.UpdateRef
|
||||
})
|
||||
|
||||
for _, commit := range nonUpdateRefTodos {
|
||||
if !commit.IsTODO() {
|
||||
return &types.DisabledReason{Text: self.c.Tr.MustSelectTodoCommits}
|
||||
}
|
||||
|
||||
if !isChangeOfRebaseTodoAllowed(commit.Action) {
|
||||
return &types.DisabledReason{Text: self.c.Tr.ChangingThisActionIsNotAllowed}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// These actions represent standard things you might want to do with a commit,
|
||||
// as opposed to TODO actions like 'merge', 'update-ref', etc.
|
||||
var standardActions = []todo.TodoCommand{
|
||||
|
||||
@@ -35,8 +35,9 @@ func NewRemoteBranchesController(
|
||||
func (self *RemoteBranchesController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding {
|
||||
return []*types.Binding{
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.Select),
|
||||
Handler: self.withItem(self.checkoutBranch),
|
||||
Key: opts.GetKey(opts.Config.Universal.Select),
|
||||
// gonna use the exact same handler as the 'n' keybinding because everybody wants this to happen when they checkout a remote branch
|
||||
Handler: self.withItem(self.newLocalBranch),
|
||||
GetDisabledReason: self.require(self.singleItemSelected()),
|
||||
Description: self.c.Tr.Checkout,
|
||||
Tooltip: self.c.Tr.RemoteBranchCheckoutTooltip,
|
||||
@@ -183,7 +184,3 @@ func (self *RemoteBranchesController) newLocalBranch(selectedBranch *models.Remo
|
||||
|
||||
return self.c.Helpers().Refs.NewBranch(selectedBranch.RefName(), selectedBranch.RefName(), nameSuggestion)
|
||||
}
|
||||
|
||||
func (self *RemoteBranchesController) checkoutBranch(selectedBranch *models.RemoteBranch) error {
|
||||
return self.c.Helpers().Refs.CheckoutRemoteBranch(selectedBranch.FullName(), selectedBranch.Name)
|
||||
}
|
||||
|
||||
@@ -145,27 +145,7 @@ func (self *RemotesController) add() error {
|
||||
if err := self.c.Git().Remote.AddRemote(remoteName, remoteUrl); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Do a sync refresh of the remotes so that we can select
|
||||
// the new one. Loading remotes is not expensive, so we can
|
||||
// afford it.
|
||||
if err := self.c.Refresh(types.RefreshOptions{
|
||||
Scope: []types.RefreshableView{types.REMOTES},
|
||||
Mode: types.SYNC,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Select the new remote
|
||||
for idx, remote := range self.c.Model().Remotes {
|
||||
if remote.Name == remoteName {
|
||||
self.c.Contexts().Remotes.SetSelection(idx)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch the new remote
|
||||
return self.fetch(self.c.Contexts().Remotes.GetSelected())
|
||||
return self.c.Refresh(types.RefreshOptions{Scope: []types.RefreshableView{types.REMOTES}})
|
||||
},
|
||||
})
|
||||
},
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
||||
"github.com/jesseduffield/lazygit/pkg/constants"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
||||
@@ -68,53 +67,19 @@ func (self *StatusController) GetKeybindings(opts types.KeybindingsOpts) []*type
|
||||
return bindings
|
||||
}
|
||||
|
||||
func (self *StatusController) GetMouseKeybindings(opts types.KeybindingsOpts) []*gocui.ViewMouseBinding {
|
||||
return []*gocui.ViewMouseBinding{
|
||||
{
|
||||
ViewName: "main",
|
||||
Key: gocui.MouseLeft,
|
||||
Handler: self.onClickMain,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (self *StatusController) onClickMain(opts gocui.ViewMouseBindingOpts) error {
|
||||
view := self.c.Views().Main
|
||||
|
||||
cx, cy := view.Cursor()
|
||||
url, err := view.Word(cx, cy)
|
||||
if err == nil && strings.HasPrefix(url, "https://") {
|
||||
// Ignore errors (opening the link via the OS can fail if the
|
||||
// `os.openLink` config key references a command that doesn't exist, or
|
||||
// that errors when called.)
|
||||
_ = self.c.OS().OpenLink(url)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *StatusController) GetOnRenderToMain() func() error {
|
||||
versionStr := "master"
|
||||
version, err := types.ParseVersionNumber(self.c.GetConfig().GetVersion())
|
||||
if err == nil {
|
||||
// Don't just take the version string as is, but format it again. This
|
||||
// way it will be correct even if a distribution omits the "v", or the
|
||||
// ".0" at the end.
|
||||
versionStr = fmt.Sprintf("v%d.%d.%d", version.Major, version.Minor, version.Patch)
|
||||
}
|
||||
|
||||
return func() error {
|
||||
dashboardString := strings.Join(
|
||||
[]string{
|
||||
lazygitTitle(),
|
||||
"Copyright 2022 Jesse Duffield",
|
||||
fmt.Sprintf("Keybindings: %s", style.AttrUnderline.Sprint(fmt.Sprintf(constants.Links.Docs.Keybindings, versionStr))),
|
||||
fmt.Sprintf("Config Options: %s", style.AttrUnderline.Sprint(fmt.Sprintf(constants.Links.Docs.Config, versionStr))),
|
||||
fmt.Sprintf("Tutorial: %s", style.AttrUnderline.Sprint(constants.Links.Docs.Tutorial)),
|
||||
fmt.Sprintf("Raise an Issue: %s", style.AttrUnderline.Sprint(constants.Links.Issues)),
|
||||
fmt.Sprintf("Release Notes: %s", style.AttrUnderline.Sprint(constants.Links.Releases)),
|
||||
style.FgMagenta.Sprintf("Become a sponsor: %s", style.AttrUnderline.Sprint(constants.Links.Donate)), // caffeine ain't free
|
||||
}, "\n\n") + "\n"
|
||||
fmt.Sprintf("Keybindings: %s", constants.Links.Docs.Keybindings),
|
||||
fmt.Sprintf("Config Options: %s", constants.Links.Docs.Config),
|
||||
fmt.Sprintf("Tutorial: %s", constants.Links.Docs.Tutorial),
|
||||
fmt.Sprintf("Raise an Issue: %s", constants.Links.Issues),
|
||||
fmt.Sprintf("Release Notes: %s", constants.Links.Releases),
|
||||
style.FgMagenta.Sprintf("Become a sponsor: %s", constants.Links.Donate), // caffeine ain't free
|
||||
}, "\n\n")
|
||||
|
||||
return self.c.RenderToMainViews(types.RefreshMainOpts{
|
||||
Pair: self.c.MainViewPairs().Normal,
|
||||
@@ -217,9 +182,7 @@ func (self *StatusController) openConfig() error {
|
||||
}
|
||||
|
||||
func (self *StatusController) editConfig() error {
|
||||
return self.askForConfigFile(func(file string) error {
|
||||
return self.c.Helpers().Files.EditFiles([]string{file})
|
||||
})
|
||||
return self.askForConfigFile(self.c.Helpers().Files.EditFile)
|
||||
}
|
||||
|
||||
func (self *StatusController) showAllBranchLogs() error {
|
||||
|
||||
@@ -196,8 +196,23 @@ func (self *SyncController) pushAux(currentBranch *models.Branch, opts pushOpts)
|
||||
SetUpstream: opts.setUpstream,
|
||||
})
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "Updates were rejected") {
|
||||
return self.c.ErrorMsg(self.c.Tr.UpdatesRejected)
|
||||
if !opts.force && strings.Contains(err.Error(), "Updates were rejected") {
|
||||
forcePushDisabled := self.c.UserConfig.Git.DisableForcePushing
|
||||
if forcePushDisabled {
|
||||
_ = self.c.ErrorMsg(self.c.Tr.UpdatesRejectedAndForcePushDisabled)
|
||||
return nil
|
||||
}
|
||||
_ = self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.ForcePush,
|
||||
Prompt: self.forcePushPrompt(),
|
||||
HandleConfirm: func() error {
|
||||
newOpts := opts
|
||||
newOpts.force = true
|
||||
|
||||
return self.pushAux(currentBranch, newOpts)
|
||||
},
|
||||
})
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -110,15 +110,6 @@ func (gui *Gui) scrollDownConfirmationPanel() error {
|
||||
}
|
||||
|
||||
func (gui *Gui) handleCopySelectedSideContextItemToClipboard() error {
|
||||
return gui.handleCopySelectedSideContextItemToClipboardWithTruncation(-1)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleCopySelectedSideContextItemCommitHashToClipboard() error {
|
||||
return gui.handleCopySelectedSideContextItemToClipboardWithTruncation(
|
||||
gui.UserConfig.Git.TruncateCopiedCommitHashesTo)
|
||||
}
|
||||
|
||||
func (gui *Gui) handleCopySelectedSideContextItemToClipboardWithTruncation(maxWidth int) error {
|
||||
// important to note that this assumes we've selected an item in a side context
|
||||
currentSideContext := gui.c.CurrentSideContext()
|
||||
if currentSideContext == nil {
|
||||
@@ -136,10 +127,6 @@ func (gui *Gui) handleCopySelectedSideContextItemToClipboardWithTruncation(maxWi
|
||||
return nil
|
||||
}
|
||||
|
||||
if maxWidth > 0 {
|
||||
itemId = itemId[:utils.Min(len(itemId), maxWidth)]
|
||||
}
|
||||
|
||||
gui.c.LogAction(gui.c.Tr.Actions.CopyToClipboard)
|
||||
if err := gui.os.CopyToClipboard(itemId); err != nil {
|
||||
return gui.c.Error(err)
|
||||
|
||||
+1
-69
@@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
@@ -41,7 +40,6 @@ import (
|
||||
"github.com/jesseduffield/lazygit/pkg/theme"
|
||||
"github.com/jesseduffield/lazygit/pkg/updates"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
"github.com/samber/lo"
|
||||
"github.com/sasha-s/go-deadlock"
|
||||
"gopkg.in/ozeidan/fuzzy-patricia.v3/patricia"
|
||||
)
|
||||
@@ -824,7 +822,7 @@ func (gui *Gui) runSubprocess(cmdObj oscommands.ICmdObj) error { //nolint:unpara
|
||||
subprocess.Stderr = io.Discard
|
||||
subprocess.Stdin = nil
|
||||
|
||||
if gui.integrationTest == nil && (gui.Config.GetUserConfig().PromptToReturnFromSubprocess || err != nil) {
|
||||
if gui.Config.GetUserConfig().PromptToReturnFromSubprocess {
|
||||
fmt.Fprintf(os.Stdout, "\n%s", style.FgGreen.Sprint(gui.Tr.PressEnterToReturn))
|
||||
|
||||
// scan to buffer to prevent run unintentional operations when TUI resumes.
|
||||
@@ -871,72 +869,6 @@ func (gui *Gui) showIntroPopupMessage() {
|
||||
})
|
||||
}
|
||||
|
||||
func (gui *Gui) showBreakingChangesMessage() {
|
||||
_, err := types.ParseVersionNumber(gui.Config.GetVersion())
|
||||
if err != nil {
|
||||
// We don't have a parseable version, so we'll assume it's a developer
|
||||
// build, or a build from HEAD with a version such as 0.40.0-g1234567;
|
||||
// in these cases we don't show release notes.
|
||||
return
|
||||
}
|
||||
|
||||
last := &types.VersionNumber{}
|
||||
lastVersionStr := gui.c.GetAppState().LastVersion
|
||||
// If there's no saved last version, we show all release notes. This is for
|
||||
// people upgrading from a version before we started to save lastVersion.
|
||||
// First time new users won't see the release notes because we show them the
|
||||
// intro popup instead.
|
||||
if lastVersionStr != "" {
|
||||
last, err = types.ParseVersionNumber(lastVersionStr)
|
||||
if err != nil {
|
||||
// The last version was a developer build, so don't show release
|
||||
// notes in this case either.
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Now collect all release notes texts for versions newer than lastVersion.
|
||||
// We don't need to bother checking the current version here, because we
|
||||
// can't possibly have texts for versions newer than current.
|
||||
type versionAndText struct {
|
||||
version *types.VersionNumber
|
||||
text string
|
||||
}
|
||||
texts := []versionAndText{}
|
||||
for versionStr, text := range gui.Tr.BreakingChangesByVersion {
|
||||
v, err := types.ParseVersionNumber(versionStr)
|
||||
if err != nil {
|
||||
// Ignore bogus entries in the BreakingChanges map
|
||||
continue
|
||||
}
|
||||
if last.IsOlderThan(v) {
|
||||
texts = append(texts, versionAndText{version: v, text: text})
|
||||
}
|
||||
}
|
||||
|
||||
if len(texts) > 0 {
|
||||
sort.Slice(texts, func(i, j int) bool {
|
||||
return texts[i].version.IsOlderThan(texts[j].version)
|
||||
})
|
||||
message := strings.Join(lo.Map(texts, func(t versionAndText, _ int) string { return t.text }), "\n")
|
||||
|
||||
gui.waitForIntro.Add(1)
|
||||
gui.c.OnUIThread(func() error {
|
||||
onConfirm := func() error {
|
||||
gui.waitForIntro.Done()
|
||||
return nil
|
||||
}
|
||||
|
||||
return gui.c.Confirm(types.ConfirmOpts{
|
||||
Title: gui.Tr.BreakingChangesTitle,
|
||||
Prompt: gui.Tr.BreakingChangesMessage + "\n\n" + message,
|
||||
HandleConfirm: onConfirm,
|
||||
HandleClose: onConfirm,
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// setColorScheme sets the color scheme for the app based on the user config
|
||||
func (gui *Gui) setColorScheme() error {
|
||||
userConfig := gui.UserConfig
|
||||
|
||||
+2
-12
@@ -146,7 +146,7 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
|
||||
{
|
||||
ViewName: "commits",
|
||||
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
|
||||
Handler: self.handleCopySelectedSideContextItemCommitHashToClipboard,
|
||||
Handler: self.handleCopySelectedSideContextItemToClipboard,
|
||||
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
|
||||
Description: self.c.Tr.CopyCommitShaToClipboard,
|
||||
},
|
||||
@@ -166,7 +166,7 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
|
||||
{
|
||||
ViewName: "subCommits",
|
||||
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
|
||||
Handler: self.handleCopySelectedSideContextItemCommitHashToClipboard,
|
||||
Handler: self.handleCopySelectedSideContextItemToClipboard,
|
||||
GetDisabledReason: self.getCopySelectedSideContextItemToClipboardDisabledReason,
|
||||
Description: self.c.Tr.CopyCommitShaToClipboard,
|
||||
},
|
||||
@@ -247,16 +247,6 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
|
||||
Modifier: gocui.ModNone,
|
||||
Handler: self.scrollDownConfirmationPanel,
|
||||
},
|
||||
{
|
||||
ViewName: "confirmation",
|
||||
Key: gocui.MouseWheelUp,
|
||||
Handler: self.scrollUpConfirmationPanel,
|
||||
},
|
||||
{
|
||||
ViewName: "confirmation",
|
||||
Key: gocui.MouseWheelDown,
|
||||
Handler: self.scrollDownConfirmationPanel,
|
||||
},
|
||||
{
|
||||
ViewName: "submodules",
|
||||
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
|
||||
|
||||
@@ -254,14 +254,9 @@ func (gui *Gui) onInitialViewsCreation() error {
|
||||
storedPopupVersion := gui.c.GetAppState().StartupPopupVersion
|
||||
if storedPopupVersion < StartupPopupVersion {
|
||||
gui.showIntroPopupMessage()
|
||||
} else {
|
||||
gui.showBreakingChangesMessage()
|
||||
}
|
||||
}
|
||||
|
||||
gui.c.GetAppState().LastVersion = gui.Config.GetVersion()
|
||||
gui.c.SaveAppStateAndLogError()
|
||||
|
||||
if gui.showRecentRepos {
|
||||
if err := gui.helpers.Repos.CreateRecentReposMenu(); err != nil {
|
||||
return err
|
||||
|
||||
@@ -342,9 +342,6 @@ func displayCommit(
|
||||
}
|
||||
|
||||
name := commit.Name
|
||||
if commit.Action == todo.UpdateRef {
|
||||
name = strings.TrimPrefix(name, "refs/heads/")
|
||||
}
|
||||
if parseEmoji {
|
||||
name = emoji.Sprint(name)
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ func ItemOperationToString(itemOperation types.ItemOperation, tr *i18n.Translati
|
||||
return tr.DeletingStatus
|
||||
case types.ItemOperationFetching:
|
||||
return tr.FetchingStatus
|
||||
case types.ItemOperationCheckingOut:
|
||||
return tr.CheckingOutStatus
|
||||
}
|
||||
|
||||
return ""
|
||||
|
||||
@@ -309,7 +309,6 @@ const (
|
||||
ItemOperationFastForwarding
|
||||
ItemOperationDeleting
|
||||
ItemOperationFetching
|
||||
ItemOperationCheckingOut
|
||||
)
|
||||
|
||||
type HasUrn interface {
|
||||
|
||||
@@ -102,10 +102,10 @@ type IFilterableContext interface {
|
||||
IListPanelState
|
||||
ISearchHistoryContext
|
||||
|
||||
SetFilter(string, bool)
|
||||
SetFilter(string)
|
||||
GetFilter() string
|
||||
ClearFilter()
|
||||
ReApplyFilter(bool)
|
||||
ReApplyFilter()
|
||||
IsFiltering() bool
|
||||
IsFilterableContext()
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type VersionNumber struct {
|
||||
Major, Minor, Patch int
|
||||
}
|
||||
|
||||
func (v *VersionNumber) IsOlderThan(otherVersion *VersionNumber) bool {
|
||||
this := v.Major*1000*1000 + v.Minor*1000 + v.Patch
|
||||
other := otherVersion.Major*1000*1000 + otherVersion.Minor*1000 + otherVersion.Patch
|
||||
return this < other
|
||||
}
|
||||
|
||||
func ParseVersionNumber(versionStr string) (*VersionNumber, error) {
|
||||
re := regexp.MustCompile(`^v?(\d+)\.(\d+)(?:\.(\d+))?$`)
|
||||
matches := re.FindStringSubmatch(versionStr)
|
||||
if matches == nil {
|
||||
return nil, errors.New("unexpected version format: " + versionStr)
|
||||
}
|
||||
|
||||
v := &VersionNumber{}
|
||||
var err error
|
||||
|
||||
if v.Major, err = strconv.Atoi(matches[1]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v.Minor, err = strconv.Atoi(matches[2]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(matches[3]) > 0 {
|
||||
if v.Patch, err = strconv.Atoi(matches[3]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestParseVersionNumber(t *testing.T) {
|
||||
tests := []struct {
|
||||
versionStr string
|
||||
expected *VersionNumber
|
||||
err error
|
||||
}{
|
||||
{
|
||||
versionStr: "1.2.3",
|
||||
expected: &VersionNumber{
|
||||
Major: 1,
|
||||
Minor: 2,
|
||||
Patch: 3,
|
||||
},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
versionStr: "v1.2.3",
|
||||
expected: &VersionNumber{
|
||||
Major: 1,
|
||||
Minor: 2,
|
||||
Patch: 3,
|
||||
},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
versionStr: "12.34.56",
|
||||
expected: &VersionNumber{
|
||||
Major: 12,
|
||||
Minor: 34,
|
||||
Patch: 56,
|
||||
},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
versionStr: "1.2",
|
||||
expected: &VersionNumber{
|
||||
Major: 1,
|
||||
Minor: 2,
|
||||
Patch: 0,
|
||||
},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
versionStr: "1",
|
||||
expected: nil,
|
||||
err: errors.New("unexpected version format: 1"),
|
||||
},
|
||||
{
|
||||
versionStr: "invalid",
|
||||
expected: nil,
|
||||
err: errors.New("unexpected version format: invalid"),
|
||||
},
|
||||
{
|
||||
versionStr: "junk_before 1.2.3",
|
||||
expected: nil,
|
||||
err: errors.New("unexpected version format: junk_before 1.2.3"),
|
||||
},
|
||||
{
|
||||
versionStr: "1.2.3 junk_after",
|
||||
expected: nil,
|
||||
err: errors.New("unexpected version format: 1.2.3 junk_after"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.versionStr, func(t *testing.T) {
|
||||
actual, err := ParseVersionNumber(test.versionStr)
|
||||
assert.Equal(t, test.expected, actual)
|
||||
assert.Equal(t, test.err, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
+319
-317
@@ -35,323 +35,325 @@ const chineseIntroPopupMessage = `
|
||||
// exporting this so we can use it in tests
|
||||
func chineseTranslationSet() TranslationSet {
|
||||
return TranslationSet{
|
||||
NotEnoughSpace: "没有足够的空间来渲染面板",
|
||||
DiffTitle: "差异",
|
||||
FilesTitle: "文件",
|
||||
BranchesTitle: "分支",
|
||||
CommitsTitle: "提交",
|
||||
StashTitle: "贮藏",
|
||||
UnstagedChanges: `未暂存更改`,
|
||||
StagedChanges: `已暂存更改`,
|
||||
MainTitle: "主要",
|
||||
StagingTitle: "正在暂存",
|
||||
MergingTitle: "正在合并",
|
||||
NormalTitle: "正常",
|
||||
CommitSummary: "提交信息",
|
||||
CredentialsUsername: "用户名",
|
||||
CredentialsPassword: "密码",
|
||||
CredentialsPassphrase: "输入 SSH 密钥的密码",
|
||||
PassUnameWrong: "密码 和/或 用户名错误",
|
||||
Commit: "提交更改",
|
||||
AmendLastCommit: "修补最后一次提交",
|
||||
AmendLastCommitTitle: "修补最后一次提交",
|
||||
SureToAmend: "您确定要修补上一次提交吗?之后您可以从提交面板更改提交消息。",
|
||||
NoCommitToAmend: "没有需要提交的修补。",
|
||||
CommitChangesWithEditor: "提交更改(使用编辑器编辑提交信息)",
|
||||
StatusTitle: "状态",
|
||||
Menu: "菜单",
|
||||
Execute: "执行",
|
||||
Stage: "切换暂存状态",
|
||||
ToggleStagedAll: "切换所有文件的暂存状态",
|
||||
ToggleTreeView: "切换文件树视图",
|
||||
OpenMergeTool: "打开外部合并工具 (git mergetool)",
|
||||
Refresh: "刷新",
|
||||
Push: "推送",
|
||||
Pull: "拉取",
|
||||
Scroll: "滚动",
|
||||
MergeConflictsTitle: "合并冲突",
|
||||
Checkout: "检出",
|
||||
NoChangedFiles: "没有更改过文件",
|
||||
SoftReset: "软重置",
|
||||
AlreadyCheckedOutBranch: "您已经检出至此分支",
|
||||
SureForceCheckout: "您确定要强制检出吗?您将丢失所有本地更改",
|
||||
ForceCheckoutBranch: "强制检出分支",
|
||||
BranchName: "分支名称",
|
||||
NewBranchNameBranchOff: "新分支名称(基于 {{.branchName}})",
|
||||
CantDeleteCheckOutBranch: "您不能删除已检出的分支!",
|
||||
ForceDeleteBranchMessage: "{{.selectedBranchName}} 还没有被完全合并。您确定要删除它吗?",
|
||||
RebaseBranch: "将已检出的分支变基到该分支",
|
||||
CantRebaseOntoSelf: "您不能将分支变基到其自身",
|
||||
CantMergeBranchIntoItself: "您不能将分支合并到其自身",
|
||||
ForceCheckout: "强制检出",
|
||||
CheckoutByName: "按名称检出",
|
||||
NewBranch: "新分支",
|
||||
NoBranchesThisRepo: "此仓库中没有分支",
|
||||
CommitWithoutMessageErr: "您必须编写提交消息才能进行提交",
|
||||
CloseCancel: "关闭",
|
||||
Confirm: "确认",
|
||||
Close: "关闭",
|
||||
Quit: "退出",
|
||||
NoCommitsThisBranch: "该分支没有提交",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "修正(fixup)",
|
||||
SureFixupThisCommit: "您确定要“修正”此提交吗?它将合并到下面的提交中",
|
||||
SureSquashThisCommit: "您确定要将这个提交压缩到下面的提交中吗?",
|
||||
Squash: "压缩",
|
||||
PickCommitTooltip: "选择提交(变基过程中)",
|
||||
RevertCommit: "还原提交",
|
||||
Reword: "改写提交",
|
||||
DropCommit: "删除提交",
|
||||
MoveDownCommit: "下移提交",
|
||||
MoveUpCommit: "上移提交",
|
||||
EditCommitTooltip: "编辑提交",
|
||||
AmendCommitTooltip: "用已暂存的更改来修补提交",
|
||||
RewordCommitEditor: "使用编辑器重命名提交",
|
||||
Error: "错误",
|
||||
PickHunk: "选中区块",
|
||||
PickAllHunks: "选中所有区块",
|
||||
Undo: "撤销",
|
||||
UndoReflog: "(通过 reflog)撤销「实验功能」",
|
||||
RedoReflog: "(通过 reflog)重做「实验功能」",
|
||||
Pop: "应用并删除",
|
||||
Drop: "删除",
|
||||
Apply: "应用",
|
||||
NoStashEntries: "没有贮藏条目",
|
||||
StashDrop: "删除贮藏",
|
||||
SureDropStashEntry: "您确定要删除此贮藏条目吗?",
|
||||
StashPop: "应用并删除贮藏",
|
||||
SurePopStashEntry: "您确定要应用并删除此贮藏条目吗?",
|
||||
StashApply: "应用贮藏",
|
||||
SureApplyStashEntry: "您确定要应用此贮藏条目?",
|
||||
NoTrackedStagedFilesStash: "没有可以贮藏的已跟踪/暂存文件",
|
||||
StashChanges: "贮藏更改",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
OpenConfig: "打开配置文件",
|
||||
EditConfig: "编辑配置文件",
|
||||
ForcePush: "强制推送",
|
||||
ForcePushPrompt: "您的分支已与远程分支不同。按‘esc’取消,或‘enter’强制推送.",
|
||||
ForcePushDisabled: "您的分支已与远程分支不同, 并且您已经禁用了强行推送",
|
||||
CheckForUpdate: "检查更新",
|
||||
CheckingForUpdates: "正在检查更新…",
|
||||
OnLatestVersionErr: "已是最新版本",
|
||||
MajorVersionErr: "新版本 ({{.newVersion}}) 与当前版本 ({{.currentVersion}}) 相比,具有非向后兼容的更改",
|
||||
CouldNotFindBinaryErr: "在 {{.url}} 处找不到任何二进制文件",
|
||||
MergeToolTitle: "合并工具",
|
||||
MergeToolPrompt: "确定要打开 `git mergetool` 吗?",
|
||||
IntroPopupMessage: chineseIntroPopupMessage,
|
||||
GitconfigParseErr: `由于存在未加引号的'\'字符,因此 Gogit 无法解析您的 gitconfig 文件。删除它们应该可以解决问题。`,
|
||||
EditFile: `编辑文件`,
|
||||
OpenFile: `打开文件`,
|
||||
IgnoreFile: `添加到 .gitignore`,
|
||||
RefreshFiles: `刷新文件`,
|
||||
Merge: `合并到当前检出的分支`,
|
||||
ConfirmQuit: `您确定要退出吗?`,
|
||||
SwitchRepo: `切换到最近的仓库`,
|
||||
AllBranchesLogGraph: `显示所有分支的日志`,
|
||||
UnsupportedGitService: `不支持的 git 服务`,
|
||||
CreatePullRequest: `创建抓取请求`,
|
||||
CopyPullRequestURL: `将抓取请求 URL 复制到剪贴板`,
|
||||
NoBranchOnRemote: `该分支在远程上不存在. 您需要先将其推送到远程.`,
|
||||
Fetch: `抓取`,
|
||||
NoAutomaticGitFetchTitle: `无法自动进行 "git fetch"`,
|
||||
NoAutomaticGitFetchBody: `Lazygit 不能在私人仓库中使用 "git fetch"; 请在文件面板中使用 'f' 手动运行 "git fetch"`,
|
||||
FileEnter: `暂存单个 块/行 用于文件, 或 折叠/展开 目录`,
|
||||
FileStagingRequirements: `只能暂存跟踪文件的单独行`,
|
||||
StageSelectionTooltip: `切换行暂存状态`,
|
||||
DiscardSelection: `取消变更 (git reset)`,
|
||||
ToggleRangeSelect: `切换拖动选择`,
|
||||
ToggleSelectHunk: `切换选择区块`,
|
||||
ToggleSelectionForPatch: `添加/移除 行到补丁`,
|
||||
ToggleStagingView: `切换到其他面板`,
|
||||
ReturnToFilesPanel: `返回文件面板`,
|
||||
FastForward: `从上游快进此分支`,
|
||||
FastForwarding: "抓取并快进",
|
||||
FoundConflictsTitle: "自动合并失败",
|
||||
ViewMergeRebaseOptions: "查看 合并/变基 选项",
|
||||
NotMergingOrRebasing: "您目前既不进行变基也不进行合并",
|
||||
RecentRepos: "最近的仓库",
|
||||
MergeOptionsTitle: "合并选项",
|
||||
RebaseOptionsTitle: "变基选项",
|
||||
CommitSummaryTitle: "提交讯息",
|
||||
LocalBranchesTitle: "分支页面",
|
||||
SearchTitle: "搜索",
|
||||
TagsTitle: "标签页面",
|
||||
MenuTitle: "菜单",
|
||||
RemotesTitle: "远程页面",
|
||||
RemoteBranchesTitle: "远程分支",
|
||||
PatchBuildingTitle: "构建补丁中",
|
||||
InformationTitle: "信息",
|
||||
SecondaryTitle: "次要",
|
||||
ReflogCommitsTitle: "Reflog 页面",
|
||||
GlobalTitle: "全局键绑定",
|
||||
ConflictsResolved: "已解决所有冲突。是否继续?",
|
||||
ConfirmMerge: "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?",
|
||||
FwdNoUpstream: "此分支没有上游,无法快进",
|
||||
FwdNoLocalUpstream: "此分支的远程未在本地注册,无法快进",
|
||||
FwdCommitsToPush: "此分支带有尚未推送的提交,无法快进",
|
||||
ErrorOccurred: "发生错误!请在以下位置创建 issue",
|
||||
NoRoom: "空间不足",
|
||||
YouAreHere: "您在这里",
|
||||
RewordNotSupported: "当前不支持交互式重新基准化时的重新措词提交",
|
||||
CherryPickCopy: "复制提交(拣选)",
|
||||
PasteCommits: "粘贴提交(拣选)",
|
||||
SureCherryPick: "您确定要将选中的提交进行拣选到这个分支吗?",
|
||||
CherryPick: "拣选 (Cherry-Pick)",
|
||||
Donate: "捐助",
|
||||
AskQuestion: "提问咨询",
|
||||
PrevLine: "选择上一行",
|
||||
NextLine: "选择下一行",
|
||||
PrevHunk: "选择上一个区块",
|
||||
NextHunk: "选择下一个区块",
|
||||
PrevConflict: "选择上一个冲突",
|
||||
NextConflict: "选择下一个冲突",
|
||||
SelectPrevHunk: "选择顶部块",
|
||||
SelectNextHunk: "选择底部块",
|
||||
ScrollDown: "向下滚动",
|
||||
ScrollUp: "向上滚动",
|
||||
ScrollUpMainWindow: "向上滚动主面板",
|
||||
ScrollDownMainWindow: "向下滚动主面板",
|
||||
AmendCommitTitle: "修改提交",
|
||||
AmendCommitPrompt: "您确定要使用暂存文件来修改此提交吗?",
|
||||
DropCommitTitle: "删除提交",
|
||||
DropCommitPrompt: "您确定要删除此提交吗?",
|
||||
PullingStatus: "正在拉取",
|
||||
PushingStatus: "正在推送",
|
||||
FetchingStatus: "正在抓取",
|
||||
SquashingStatus: "正在压缩",
|
||||
FixingStatus: "正在修正",
|
||||
DeletingStatus: "正在删除",
|
||||
MovingStatus: "正在移动",
|
||||
RebasingStatus: "正在变基",
|
||||
AmendingStatus: "正在修改",
|
||||
CherryPickingStatus: "正在拣选",
|
||||
UndoingStatus: "正在撤销",
|
||||
RedoingStatus: "正在重做",
|
||||
CheckingOutStatus: "长子检出",
|
||||
CommittingStatus: "正在提交",
|
||||
CommitFiles: "提交文件",
|
||||
ViewItemFiles: "查看提交的文件",
|
||||
CommitFilesTitle: "提交文件",
|
||||
CheckoutCommitFileTooltip: "检出文件",
|
||||
DiscardOldFileChangeTooltip: "放弃对此文件的提交更改",
|
||||
DiscardFileChangesTitle: "放弃文件更改",
|
||||
DiscardFileChangesPrompt: "您确定要舍弃此提交对该文件的更改吗?如果此文件是在此提交中创建的,它将被删除",
|
||||
DisabledForGPG: "该功能不适用于使用 GPG 的用户",
|
||||
CreateRepo: "当前目录不在 git 仓库中。是否在此目录创建一个新的 git 仓库?(y/n): ",
|
||||
AutoStashTitle: "自动存储?",
|
||||
AutoStashPrompt: "您必须隐藏并弹出更改以使更改生效。自动执行?(enter/esc)",
|
||||
StashPrefix: "自动隐藏更改 ",
|
||||
Discard: "查看'放弃更改'选项",
|
||||
Cancel: "取消",
|
||||
DiscardAllChanges: "放弃所有更改",
|
||||
DiscardUnstagedChanges: "放弃未暂存的变更",
|
||||
DiscardAllChangesToAllFiles: "清空工作区",
|
||||
DiscardAnyUnstagedChanges: "丢弃未暂存的变更",
|
||||
DiscardUntrackedFiles: "丢弃未跟踪的文件",
|
||||
HardReset: "硬重置",
|
||||
ViewResetOptions: `查看重置选项`,
|
||||
CreateFixupCommit: `为此提交创建修正`,
|
||||
SquashAboveCommitsTooltip: `压缩在所选提交之上的所有“fixup!”提交(自动压缩)`,
|
||||
CreateFixupCommitTooltip: `创建修正提交`,
|
||||
ExecuteCustomCommand: "执行自定义命令",
|
||||
CustomCommand: "自定义命令:",
|
||||
CommitChangesWithoutHook: "提交更改而无需预先提交钩子",
|
||||
SkipHookPrefixNotConfigured: "您尚未配置用于跳过钩子的提交消息前缀。请在您的配置中设置 `git.skipHookPrefix ='WIP'`",
|
||||
ResetTo: `重置为`,
|
||||
PressEnterToReturn: "按下 Enter 键返回 lazygit",
|
||||
ViewStashOptions: "查看贮藏选项",
|
||||
StashAllChanges: "将所有更改加入贮藏",
|
||||
StashAllChangesKeepIndex: "将已暂存的更改加入贮藏",
|
||||
StashOptions: "贮藏选项",
|
||||
NotARepository: "错误:必须在 git 仓库中运行",
|
||||
Jump: "跳到面板",
|
||||
ScrollLeftRight: "左右滚动",
|
||||
ScrollLeft: "向左滚动",
|
||||
ScrollRight: "向右滚动",
|
||||
DiscardPatch: "丢弃补丁",
|
||||
DiscardPatchConfirm: "您一次只能通过一个提交或贮藏条目构建补丁。需要放弃当前补丁吗?",
|
||||
CantPatchWhileRebasingError: "处于合并或变基状态时,您无法构建修补程序或运行修补程序命令",
|
||||
ToggleAddToPatch: "补丁中包含的切换文件",
|
||||
ViewPatchOptions: "查看自定义补丁选项",
|
||||
PatchOptionsTitle: "补丁选项",
|
||||
NoPatchError: "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁",
|
||||
EnterCommitFile: "输入文件以将所选行添加到补丁中(或切换目录折叠)",
|
||||
ExitCustomPatchBuilder: `退出逐行模式`,
|
||||
EnterUpstream: `以这种格式输入上游:'<远程仓库> <分支名称>'`,
|
||||
InvalidUpstream: "上游格式无效,格式应当为:'<remote> <branchname>'",
|
||||
ReturnToRemotesList: `返回远程仓库列表`,
|
||||
NewRemote: `添加新的远程仓库`,
|
||||
NewRemoteName: `新远程仓库名称:`,
|
||||
NewRemoteUrl: `新远程仓库 URL:`,
|
||||
EditRemoteName: `输入远程仓库 {{.remoteName}} 的新名称:`,
|
||||
EditRemoteUrl: `输入远程仓库 {{.remoteName}} 的新 URL:`,
|
||||
RemoveRemote: `删除远程`,
|
||||
RemoveRemotePrompt: "您确定要删除远程仓库吗?",
|
||||
DeleteRemoteBranch: "删除远程分支",
|
||||
DeleteRemoteBranchMessage: "您确定要删除远程分支吗?",
|
||||
SetUpstream: "设置为检出分支的上游",
|
||||
SetAsUpstreamTooltip: "设置为检出分支的上游",
|
||||
SetUpstreamTitle: "设置上游分支",
|
||||
SetUpstreamMessage: "您确定要将 {{.checkedOut}} 的上游分支设置为 {{.selected}} 吗?",
|
||||
EditRemoteTooltip: "编辑远程仓库",
|
||||
TagCommit: "标签提交",
|
||||
TagMenuTitle: "创建标签",
|
||||
TagNameTitle: "标签名称",
|
||||
TagMessageTitle: "标签消息",
|
||||
AnnotatedTag: "附注标签",
|
||||
LightweightTag: "轻量标签",
|
||||
PushTagTitle: "将 {{.tagName}} 推送到远程仓库:",
|
||||
PushTag: "推送标签",
|
||||
NewTag: "创建标签",
|
||||
FetchRemoteTooltip: "抓取远程仓库",
|
||||
FetchingRemoteStatus: "抓取远程仓库中",
|
||||
CheckoutCommit: "检出提交",
|
||||
SureCheckoutThisCommit: "您确定要检出此提交吗?",
|
||||
GitFlowOptions: "显示 git-flow 选项",
|
||||
NotAGitFlowBranch: "这似乎不是 git flow 分支",
|
||||
NewGitFlowBranchPrompt: "新的 {{.branchType}} 名称:",
|
||||
IgnoreTracked: "忽略跟踪文件",
|
||||
IgnoreTrackedPrompt: "您确定要忽略已跟踪的文件吗?",
|
||||
ViewResetToUpstreamOptions: "查看上游重置选项",
|
||||
NextScreenMode: "下一屏模式(正常/半屏/全屏)",
|
||||
PrevScreenMode: "上一屏模式",
|
||||
StartSearch: "开始搜索",
|
||||
Panel: "面板",
|
||||
Keybindings: "按键绑定",
|
||||
RenameBranch: "重命名分支",
|
||||
NewBranchNamePrompt: "输入分支的新名称",
|
||||
RenameBranchWarning: "该分支正在跟踪远程仓库。此操作将仅会重命名本地分支名称,而不会重命名远程分支的名称。确定继续?",
|
||||
OpenKeybindingsMenu: "打开菜单",
|
||||
ResetCherryPick: "重置已拣选(复制)的提交",
|
||||
NextTab: "下一个标签",
|
||||
PrevTab: "上一个标签",
|
||||
CantUndoWhileRebasing: "进行基础调整时无法撤消",
|
||||
CantRedoWhileRebasing: "变基时无法重做",
|
||||
MustStashWarning: "将补丁拉出到索引中需要存储和取消存储所做的更改。如果出现问题,您将可以从存储中访问文件。继续?",
|
||||
MustStashTitle: "必须保存进度",
|
||||
ConfirmationTitle: "确认面板",
|
||||
PrevPage: "上一页",
|
||||
NextPage: "下一页",
|
||||
GotoTop: "滚动到顶部",
|
||||
GotoBottom: "滚动到底部",
|
||||
FilteringBy: "过滤依据",
|
||||
ResetInParentheses: "(重置)",
|
||||
OpenFilteringMenu: "查看按路径过滤选项",
|
||||
FilterBy: "过滤",
|
||||
ExitFilterMode: "停止按路径过滤",
|
||||
FilterPathOption: "输入要过滤的路径",
|
||||
EnterFileName: "输入路径:",
|
||||
FilteringMenuTitle: "正在过滤",
|
||||
MustExitFilterModeTitle: "命令不可用",
|
||||
MustExitFilterModePrompt: "命令在过滤模式下不可用。退出过滤模式?",
|
||||
Diff: "差异",
|
||||
EnterRefToDiff: "输入 ref 以 diff",
|
||||
EnterRefName: "输入 ref:",
|
||||
ExitDiffMode: "退出差异模式",
|
||||
DiffingMenuTitle: "正在 diff",
|
||||
SwapDiff: "反向 diff",
|
||||
ViewDiffingOptions: "打开 diff 菜单",
|
||||
NotEnoughSpace: "没有足够的空间来渲染面板",
|
||||
DiffTitle: "差异",
|
||||
FilesTitle: "文件",
|
||||
BranchesTitle: "分支",
|
||||
CommitsTitle: "提交",
|
||||
StashTitle: "贮藏",
|
||||
UnstagedChanges: `未暂存更改`,
|
||||
StagedChanges: `已暂存更改`,
|
||||
MainTitle: "主要",
|
||||
StagingTitle: "正在暂存",
|
||||
MergingTitle: "正在合并",
|
||||
NormalTitle: "正常",
|
||||
CommitSummary: "提交信息",
|
||||
CredentialsUsername: "用户名",
|
||||
CredentialsPassword: "密码",
|
||||
CredentialsPassphrase: "输入 SSH 密钥的密码",
|
||||
PassUnameWrong: "密码 和/或 用户名错误",
|
||||
Commit: "提交更改",
|
||||
AmendLastCommit: "修补最后一次提交",
|
||||
AmendLastCommitTitle: "修补最后一次提交",
|
||||
SureToAmend: "您确定要修补上一次提交吗?之后您可以从提交面板更改提交消息。",
|
||||
NoCommitToAmend: "没有需要提交的修补。",
|
||||
CommitChangesWithEditor: "提交更改(使用编辑器编辑提交信息)",
|
||||
StatusTitle: "状态",
|
||||
Menu: "菜单",
|
||||
Execute: "执行",
|
||||
Stage: "切换暂存状态",
|
||||
ToggleStagedAll: "切换所有文件的暂存状态",
|
||||
ToggleTreeView: "切换文件树视图",
|
||||
OpenMergeTool: "打开外部合并工具 (git mergetool)",
|
||||
Refresh: "刷新",
|
||||
Push: "推送",
|
||||
Pull: "拉取",
|
||||
Scroll: "滚动",
|
||||
MergeConflictsTitle: "合并冲突",
|
||||
Checkout: "检出",
|
||||
NoChangedFiles: "没有更改过文件",
|
||||
SoftReset: "软重置",
|
||||
AlreadyCheckedOutBranch: "您已经检出至此分支",
|
||||
SureForceCheckout: "您确定要强制检出吗?您将丢失所有本地更改",
|
||||
ForceCheckoutBranch: "强制检出分支",
|
||||
BranchName: "分支名称",
|
||||
NewBranchNameBranchOff: "新分支名称(基于 {{.branchName}})",
|
||||
CantDeleteCheckOutBranch: "您不能删除已检出的分支!",
|
||||
ForceDeleteBranchMessage: "{{.selectedBranchName}} 还没有被完全合并。您确定要删除它吗?",
|
||||
RebaseBranch: "将已检出的分支变基到该分支",
|
||||
CantRebaseOntoSelf: "您不能将分支变基到其自身",
|
||||
CantMergeBranchIntoItself: "您不能将分支合并到其自身",
|
||||
ForceCheckout: "强制检出",
|
||||
CheckoutByName: "按名称检出",
|
||||
NewBranch: "新分支",
|
||||
NoBranchesThisRepo: "此仓库中没有分支",
|
||||
CommitWithoutMessageErr: "您必须编写提交消息才能进行提交",
|
||||
CloseCancel: "关闭",
|
||||
Confirm: "确认",
|
||||
Close: "关闭",
|
||||
Quit: "退出",
|
||||
NoCommitsThisBranch: "该分支没有提交",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "修正(fixup)",
|
||||
SureFixupThisCommit: "您确定要“修正”此提交吗?它将合并到下面的提交中",
|
||||
SureSquashThisCommit: "您确定要将这个提交压缩到下面的提交中吗?",
|
||||
Squash: "压缩",
|
||||
PickCommitTooltip: "选择提交(变基过程中)",
|
||||
RevertCommit: "还原提交",
|
||||
Reword: "改写提交",
|
||||
DropCommit: "删除提交",
|
||||
MoveDownCommit: "下移提交",
|
||||
MoveUpCommit: "上移提交",
|
||||
EditCommitTooltip: "编辑提交",
|
||||
AmendCommitTooltip: "用已暂存的更改来修补提交",
|
||||
RewordCommitEditor: "使用编辑器重命名提交",
|
||||
Error: "错误",
|
||||
PickHunk: "选中区块",
|
||||
PickAllHunks: "选中所有区块",
|
||||
Undo: "撤销",
|
||||
UndoReflog: "(通过 reflog)撤销「实验功能」",
|
||||
RedoReflog: "(通过 reflog)重做「实验功能」",
|
||||
Pop: "应用并删除",
|
||||
Drop: "删除",
|
||||
Apply: "应用",
|
||||
NoStashEntries: "没有贮藏条目",
|
||||
StashDrop: "删除贮藏",
|
||||
SureDropStashEntry: "您确定要删除此贮藏条目吗?",
|
||||
StashPop: "应用并删除贮藏",
|
||||
SurePopStashEntry: "您确定要应用并删除此贮藏条目吗?",
|
||||
StashApply: "应用贮藏",
|
||||
SureApplyStashEntry: "您确定要应用此贮藏条目?",
|
||||
NoTrackedStagedFilesStash: "没有可以贮藏的已跟踪/暂存文件",
|
||||
StashChanges: "贮藏更改",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
OpenConfig: "打开配置文件",
|
||||
EditConfig: "编辑配置文件",
|
||||
ForcePush: "强制推送",
|
||||
ForcePushPrompt: "您的分支已与远程分支不同。按‘esc’取消,或‘enter’强制推送.",
|
||||
ForcePushDisabled: "您的分支已与远程分支不同, 并且您已经禁用了强行推送",
|
||||
UpdatesRejectedAndForcePushDisabled: "更新被拒绝,您已禁用强制推送",
|
||||
CheckForUpdate: "检查更新",
|
||||
CheckingForUpdates: "正在检查更新…",
|
||||
OnLatestVersionErr: "已是最新版本",
|
||||
MajorVersionErr: "新版本 ({{.newVersion}}) 与当前版本 ({{.currentVersion}}) 相比,具有非向后兼容的更改",
|
||||
CouldNotFindBinaryErr: "在 {{.url}} 处找不到任何二进制文件",
|
||||
MergeToolTitle: "合并工具",
|
||||
MergeToolPrompt: "确定要打开 `git mergetool` 吗?",
|
||||
IntroPopupMessage: chineseIntroPopupMessage,
|
||||
GitconfigParseErr: `由于存在未加引号的'\'字符,因此 Gogit 无法解析您的 gitconfig 文件。删除它们应该可以解决问题。`,
|
||||
EditFile: `编辑文件`,
|
||||
OpenFile: `打开文件`,
|
||||
IgnoreFile: `添加到 .gitignore`,
|
||||
RefreshFiles: `刷新文件`,
|
||||
Merge: `合并到当前检出的分支`,
|
||||
ConfirmQuit: `您确定要退出吗?`,
|
||||
SwitchRepo: `切换到最近的仓库`,
|
||||
AllBranchesLogGraph: `显示所有分支的日志`,
|
||||
UnsupportedGitService: `不支持的 git 服务`,
|
||||
CreatePullRequest: `创建抓取请求`,
|
||||
CopyPullRequestURL: `将抓取请求 URL 复制到剪贴板`,
|
||||
NoBranchOnRemote: `该分支在远程上不存在. 您需要先将其推送到远程.`,
|
||||
Fetch: `抓取`,
|
||||
NoAutomaticGitFetchTitle: `无法自动进行 "git fetch"`,
|
||||
NoAutomaticGitFetchBody: `Lazygit 不能在私人仓库中使用 "git fetch"; 请在文件面板中使用 'f' 手动运行 "git fetch"`,
|
||||
FileEnter: `暂存单个 块/行 用于文件, 或 折叠/展开 目录`,
|
||||
FileStagingRequirements: `只能暂存跟踪文件的单独行`,
|
||||
StageSelectionTooltip: `切换行暂存状态`,
|
||||
DiscardSelection: `取消变更 (git reset)`,
|
||||
ToggleRangeSelect: `切换拖动选择`,
|
||||
ToggleSelectHunk: `切换选择区块`,
|
||||
ToggleSelectionForPatch: `添加/移除 行到补丁`,
|
||||
ToggleStagingView: `切换到其他面板`,
|
||||
ReturnToFilesPanel: `返回文件面板`,
|
||||
FastForward: `从上游快进此分支`,
|
||||
FastForwarding: "抓取并快进",
|
||||
FoundConflictsTitle: "自动合并失败",
|
||||
ViewMergeRebaseOptions: "查看 合并/变基 选项",
|
||||
NotMergingOrRebasing: "您目前既不进行变基也不进行合并",
|
||||
RecentRepos: "最近的仓库",
|
||||
MergeOptionsTitle: "合并选项",
|
||||
RebaseOptionsTitle: "变基选项",
|
||||
CommitSummaryTitle: "提交讯息",
|
||||
LocalBranchesTitle: "分支页面",
|
||||
SearchTitle: "搜索",
|
||||
TagsTitle: "标签页面",
|
||||
MenuTitle: "菜单",
|
||||
RemotesTitle: "远程页面",
|
||||
RemoteBranchesTitle: "远程分支",
|
||||
PatchBuildingTitle: "构建补丁中",
|
||||
InformationTitle: "信息",
|
||||
SecondaryTitle: "次要",
|
||||
ReflogCommitsTitle: "Reflog 页面",
|
||||
GlobalTitle: "全局键绑定",
|
||||
ConflictsResolved: "已解决所有冲突。是否继续?",
|
||||
ConfirmMerge: "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?",
|
||||
FwdNoUpstream: "此分支没有上游,无法快进",
|
||||
FwdNoLocalUpstream: "此分支的远程未在本地注册,无法快进",
|
||||
FwdCommitsToPush: "此分支带有尚未推送的提交,无法快进",
|
||||
ErrorOccurred: "发生错误!请在以下位置创建 issue",
|
||||
NoRoom: "空间不足",
|
||||
YouAreHere: "您在这里",
|
||||
RewordNotSupported: "当前不支持交互式重新基准化时的重新措词提交",
|
||||
CherryPickCopy: "复制提交(拣选)",
|
||||
PasteCommits: "粘贴提交(拣选)",
|
||||
SureCherryPick: "您确定要将选中的提交进行拣选到这个分支吗?",
|
||||
CherryPick: "拣选 (Cherry-Pick)",
|
||||
Donate: "捐助",
|
||||
AskQuestion: "提问咨询",
|
||||
PrevLine: "选择上一行",
|
||||
NextLine: "选择下一行",
|
||||
PrevHunk: "选择上一个区块",
|
||||
NextHunk: "选择下一个区块",
|
||||
PrevConflict: "选择上一个冲突",
|
||||
NextConflict: "选择下一个冲突",
|
||||
SelectPrevHunk: "选择顶部块",
|
||||
SelectNextHunk: "选择底部块",
|
||||
ScrollDown: "向下滚动",
|
||||
ScrollUp: "向上滚动",
|
||||
ScrollUpMainWindow: "向上滚动主面板",
|
||||
ScrollDownMainWindow: "向下滚动主面板",
|
||||
AmendCommitTitle: "修改提交",
|
||||
AmendCommitPrompt: "您确定要使用暂存文件来修改此提交吗?",
|
||||
DropCommitTitle: "删除提交",
|
||||
DropCommitPrompt: "您确定要删除此提交吗?",
|
||||
PullingStatus: "正在拉取",
|
||||
PushingStatus: "正在推送",
|
||||
FetchingStatus: "正在抓取",
|
||||
SquashingStatus: "正在压缩",
|
||||
FixingStatus: "正在修正",
|
||||
DeletingStatus: "正在删除",
|
||||
MovingStatus: "正在移动",
|
||||
RebasingStatus: "正在变基",
|
||||
AmendingStatus: "正在修改",
|
||||
CherryPickingStatus: "正在拣选",
|
||||
UndoingStatus: "正在撤销",
|
||||
RedoingStatus: "正在重做",
|
||||
CheckingOutStatus: "长子检出",
|
||||
CommittingStatus: "正在提交",
|
||||
CommitFiles: "提交文件",
|
||||
ViewItemFiles: "查看提交的文件",
|
||||
CommitFilesTitle: "提交文件",
|
||||
CheckoutCommitFileTooltip: "检出文件",
|
||||
DiscardOldFileChangeTooltip: "放弃对此文件的提交更改",
|
||||
DiscardFileChangesTitle: "放弃文件更改",
|
||||
DiscardFileChangesPrompt: "您确定要舍弃此提交对该文件的更改吗?如果此文件是在此提交中创建的,它将被删除",
|
||||
DisabledForGPG: "该功能不适用于使用 GPG 的用户",
|
||||
CreateRepo: "当前目录不在 git 仓库中。是否在此目录创建一个新的 git 仓库?(y/n): ",
|
||||
AutoStashTitle: "自动存储?",
|
||||
AutoStashPrompt: "您必须隐藏并弹出更改以使更改生效。自动执行?(enter/esc)",
|
||||
StashPrefix: "自动隐藏更改 ",
|
||||
Discard: "查看'放弃更改'选项",
|
||||
Cancel: "取消",
|
||||
DiscardAllChanges: "放弃所有更改",
|
||||
DiscardUnstagedChanges: "放弃未暂存的变更",
|
||||
DiscardAllChangesToAllFiles: "清空工作区",
|
||||
DiscardAnyUnstagedChanges: "丢弃未暂存的变更",
|
||||
DiscardUntrackedFiles: "丢弃未跟踪的文件",
|
||||
HardReset: "硬重置",
|
||||
ViewResetOptions: `查看重置选项`,
|
||||
CreateFixupCommit: `为此提交创建修正`,
|
||||
SquashAboveCommitsTooltip: `压缩在所选提交之上的所有“fixup!”提交(自动压缩)`,
|
||||
CreateFixupCommitTooltip: `创建修正提交`,
|
||||
SureCreateFixupCommit: `您确定要对 {{.commit}} 创建修正提交吗?`,
|
||||
ExecuteCustomCommand: "执行自定义命令",
|
||||
CustomCommand: "自定义命令:",
|
||||
CommitChangesWithoutHook: "提交更改而无需预先提交钩子",
|
||||
SkipHookPrefixNotConfigured: "您尚未配置用于跳过钩子的提交消息前缀。请在您的配置中设置 `git.skipHookPrefix ='WIP'`",
|
||||
ResetTo: `重置为`,
|
||||
PressEnterToReturn: "按下 Enter 键返回 lazygit",
|
||||
ViewStashOptions: "查看贮藏选项",
|
||||
StashAllChanges: "将所有更改加入贮藏",
|
||||
StashAllChangesKeepIndex: "将已暂存的更改加入贮藏",
|
||||
StashOptions: "贮藏选项",
|
||||
NotARepository: "错误:必须在 git 仓库中运行",
|
||||
Jump: "跳到面板",
|
||||
ScrollLeftRight: "左右滚动",
|
||||
ScrollLeft: "向左滚动",
|
||||
ScrollRight: "向右滚动",
|
||||
DiscardPatch: "丢弃补丁",
|
||||
DiscardPatchConfirm: "您一次只能通过一个提交或贮藏条目构建补丁。需要放弃当前补丁吗?",
|
||||
CantPatchWhileRebasingError: "处于合并或变基状态时,您无法构建修补程序或运行修补程序命令",
|
||||
ToggleAddToPatch: "补丁中包含的切换文件",
|
||||
ViewPatchOptions: "查看自定义补丁选项",
|
||||
PatchOptionsTitle: "补丁选项",
|
||||
NoPatchError: "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁",
|
||||
EnterCommitFile: "输入文件以将所选行添加到补丁中(或切换目录折叠)",
|
||||
ExitCustomPatchBuilder: `退出逐行模式`,
|
||||
EnterUpstream: `以这种格式输入上游:'<远程仓库> <分支名称>'`,
|
||||
InvalidUpstream: "上游格式无效,格式应当为:'<remote> <branchname>'",
|
||||
ReturnToRemotesList: `返回远程仓库列表`,
|
||||
NewRemote: `添加新的远程仓库`,
|
||||
NewRemoteName: `新远程仓库名称:`,
|
||||
NewRemoteUrl: `新远程仓库 URL:`,
|
||||
EditRemoteName: `输入远程仓库 {{.remoteName}} 的新名称:`,
|
||||
EditRemoteUrl: `输入远程仓库 {{.remoteName}} 的新 URL:`,
|
||||
RemoveRemote: `删除远程`,
|
||||
RemoveRemotePrompt: "您确定要删除远程仓库吗?",
|
||||
DeleteRemoteBranch: "删除远程分支",
|
||||
DeleteRemoteBranchMessage: "您确定要删除远程分支吗?",
|
||||
SetUpstream: "设置为检出分支的上游",
|
||||
SetAsUpstreamTooltip: "设置为检出分支的上游",
|
||||
SetUpstreamTitle: "设置上游分支",
|
||||
SetUpstreamMessage: "您确定要将 {{.checkedOut}} 的上游分支设置为 {{.selected}} 吗?",
|
||||
EditRemoteTooltip: "编辑远程仓库",
|
||||
TagCommit: "标签提交",
|
||||
TagMenuTitle: "创建标签",
|
||||
TagNameTitle: "标签名称",
|
||||
TagMessageTitle: "标签消息",
|
||||
AnnotatedTag: "附注标签",
|
||||
LightweightTag: "轻量标签",
|
||||
PushTagTitle: "将 {{.tagName}} 推送到远程仓库:",
|
||||
PushTag: "推送标签",
|
||||
NewTag: "创建标签",
|
||||
FetchRemoteTooltip: "抓取远程仓库",
|
||||
FetchingRemoteStatus: "抓取远程仓库中",
|
||||
CheckoutCommit: "检出提交",
|
||||
SureCheckoutThisCommit: "您确定要检出此提交吗?",
|
||||
GitFlowOptions: "显示 git-flow 选项",
|
||||
NotAGitFlowBranch: "这似乎不是 git flow 分支",
|
||||
NewGitFlowBranchPrompt: "新的 {{.branchType}} 名称:",
|
||||
IgnoreTracked: "忽略跟踪文件",
|
||||
IgnoreTrackedPrompt: "您确定要忽略已跟踪的文件吗?",
|
||||
ViewResetToUpstreamOptions: "查看上游重置选项",
|
||||
NextScreenMode: "下一屏模式(正常/半屏/全屏)",
|
||||
PrevScreenMode: "上一屏模式",
|
||||
StartSearch: "开始搜索",
|
||||
Panel: "面板",
|
||||
Keybindings: "按键绑定",
|
||||
RenameBranch: "重命名分支",
|
||||
NewBranchNamePrompt: "输入分支的新名称",
|
||||
RenameBranchWarning: "该分支正在跟踪远程仓库。此操作将仅会重命名本地分支名称,而不会重命名远程分支的名称。确定继续?",
|
||||
OpenKeybindingsMenu: "打开菜单",
|
||||
ResetCherryPick: "重置已拣选(复制)的提交",
|
||||
NextTab: "下一个标签",
|
||||
PrevTab: "上一个标签",
|
||||
CantUndoWhileRebasing: "进行基础调整时无法撤消",
|
||||
CantRedoWhileRebasing: "变基时无法重做",
|
||||
MustStashWarning: "将补丁拉出到索引中需要存储和取消存储所做的更改。如果出现问题,您将可以从存储中访问文件。继续?",
|
||||
MustStashTitle: "必须保存进度",
|
||||
ConfirmationTitle: "确认面板",
|
||||
PrevPage: "上一页",
|
||||
NextPage: "下一页",
|
||||
GotoTop: "滚动到顶部",
|
||||
GotoBottom: "滚动到底部",
|
||||
FilteringBy: "过滤依据",
|
||||
ResetInParentheses: "(重置)",
|
||||
OpenFilteringMenu: "查看按路径过滤选项",
|
||||
FilterBy: "过滤",
|
||||
ExitFilterMode: "停止按路径过滤",
|
||||
FilterPathOption: "输入要过滤的路径",
|
||||
EnterFileName: "输入路径:",
|
||||
FilteringMenuTitle: "正在过滤",
|
||||
MustExitFilterModeTitle: "命令不可用",
|
||||
MustExitFilterModePrompt: "命令在过滤模式下不可用。退出过滤模式?",
|
||||
Diff: "差异",
|
||||
EnterRefToDiff: "输入 ref 以 diff",
|
||||
EnterRefName: "输入 ref:",
|
||||
ExitDiffMode: "退出差异模式",
|
||||
DiffingMenuTitle: "正在 diff",
|
||||
SwapDiff: "反向 diff",
|
||||
ViewDiffingOptions: "打开 diff 菜单",
|
||||
// 实际视图 (actual view) 是附加视图 (extras view),未来,我打算为附加视图提供更多选项卡,但现在,上面的文本只需要提及“命令日志”这个部分
|
||||
OpenCommandLogMenu: "打开命令日志菜单",
|
||||
ShowingGitDiff: "显示输出:",
|
||||
|
||||
+331
-329
@@ -2,334 +2,336 @@ package i18n
|
||||
|
||||
func dutchTranslationSet() TranslationSet {
|
||||
return TranslationSet{
|
||||
NotEnoughSpace: "Niet genoeg ruimte om de panelen te renderen",
|
||||
DiffTitle: "Diff",
|
||||
FilesTitle: "Bestanden",
|
||||
BranchesTitle: "Branches",
|
||||
CommitsTitle: "Commits",
|
||||
StashTitle: "Stash",
|
||||
UnstagedChanges: "Unstaged wijzigingen",
|
||||
StagedChanges: "Staged wijzigingen",
|
||||
MainTitle: "Hoofd",
|
||||
StagingTitle: "Staging",
|
||||
NormalTitle: "Normaal",
|
||||
CommitSummary: "Commitbericht",
|
||||
CredentialsUsername: "Gebruikersnaam",
|
||||
CredentialsPassword: "Wachtwoord",
|
||||
CredentialsPassphrase: "Voer een wachtwoordzin in voor de SSH-sleutel",
|
||||
PassUnameWrong: "Wachtwoord en/of gebruikersnaam verkeerd",
|
||||
Commit: "Commit veranderingen",
|
||||
AmendLastCommit: "Wijzig laatste commit",
|
||||
AmendLastCommitTitle: "Wijzig laatste commit",
|
||||
SureToAmend: "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.",
|
||||
NoCommitToAmend: "Er is geen commits om te wijzigen.",
|
||||
CommitChangesWithEditor: "Commit veranderingen met de git editor",
|
||||
StatusTitle: "Status",
|
||||
Menu: "Menu",
|
||||
Execute: "Uitvoeren",
|
||||
Stage: "Toggle staged",
|
||||
ToggleStagedAll: "Toggle staged alle",
|
||||
Refresh: "Verversen",
|
||||
Push: "Push",
|
||||
Pull: "Pull",
|
||||
Scroll: "Scroll",
|
||||
FilterStagedFiles: "Show only staged files",
|
||||
FilterUnstagedFiles: "Show only unstaged files",
|
||||
ResetFilter: "Reset commit file state filter",
|
||||
MergeConflictsTitle: "Merge conflicten",
|
||||
Checkout: "Uitchecken",
|
||||
SoftReset: "Zacht reset",
|
||||
AlreadyCheckedOutBranch: "Je hebt deze branch al uitgecheckt",
|
||||
SureForceCheckout: "Weet je zeker dat je het uitchecken wil forceren? Al je lokale verandering zullen worden verwijdert",
|
||||
ForceCheckoutBranch: "Forceer uitchecken op deze branch",
|
||||
BranchName: "Branch naam",
|
||||
NewBranchNameBranchOff: "Nieuw branch naam (Branch is afgeleid van '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "Je kan een uitgecheckte branch niet verwijderen!",
|
||||
ForceDeleteBranchMessage: "Weet je zeker dat je branch '{{.selectedBranchName}}' geforceerd wil verwijderen?",
|
||||
RebaseBranch: "Rebase branch",
|
||||
CantRebaseOntoSelf: "Je kan niet een branch rebasen op zichzelf",
|
||||
CantMergeBranchIntoItself: "Je kan niet een branch in zichzelf mergen",
|
||||
ForceCheckout: "Forceer checkout",
|
||||
CheckoutByName: "Uitchecken bij naam",
|
||||
NewBranch: "Nieuwe branch",
|
||||
NoBranchesThisRepo: "Geen branches voor deze repo",
|
||||
CommitWithoutMessageErr: "Je kan geen commit maken zonder commit bericht",
|
||||
CloseCancel: "Sluiten",
|
||||
Confirm: "Bevestig",
|
||||
Close: "Sluiten",
|
||||
Quit: "Quit",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "Fixup",
|
||||
SureFixupThisCommit: "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze",
|
||||
SureSquashThisCommit: "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?",
|
||||
Squash: "Squash",
|
||||
PickCommitTooltip: "Kies commit (wanneer midden in rebase)",
|
||||
RevertCommit: "Commit ongedaan maken",
|
||||
Reword: "Hernoem commit",
|
||||
DropCommit: "Verwijder commit",
|
||||
MoveDownCommit: "Verplaats commit 1 naar beneden",
|
||||
MoveUpCommit: "Verplaats commit 1 naar boven",
|
||||
EditCommitTooltip: "Wijzig commit",
|
||||
AmendCommitTooltip: "Wijzig commit met staged veranderingen",
|
||||
RewordCommitEditor: "Hernoem commit met editor",
|
||||
NoCommitsThisBranch: "Geen commits in deze branch",
|
||||
Error: "Foutmelding",
|
||||
PickHunk: "Kies stuk",
|
||||
PickAllHunks: "Kies beide stukken",
|
||||
Undo: "Ongedaan maken",
|
||||
UndoReflog: "Ongedaan maken (via reflog) (experimenteel)",
|
||||
RedoReflog: "Redo (via reflog) (experimenteel)",
|
||||
Pop: "Pop",
|
||||
Drop: "Laten vallen",
|
||||
Apply: "Toepassen",
|
||||
NoStashEntries: "Geen stash items",
|
||||
StashDrop: "Stash laten vallen",
|
||||
SureDropStashEntry: "Weet je het zeker dat je deze stash entry wil laten vallen?",
|
||||
StashPop: "Stash pop",
|
||||
SurePopStashEntry: "Weet je zeker dat je deze stash entry wil poppen?",
|
||||
StashApply: "Stash toepassen",
|
||||
SureApplyStashEntry: "Weet je zeker dat je deze stash entry wil toepassen?",
|
||||
NoTrackedStagedFilesStash: "Je hebt geen tracked/staged bestanden om te laten stashen",
|
||||
StashChanges: "Stash veranderingen",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
NoChangedFiles: "Geen veranderde bestanden",
|
||||
OpenConfig: "Open config bestand",
|
||||
EditConfig: "Verander config bestand",
|
||||
ForcePush: "Forceer push",
|
||||
ForcePushPrompt: "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.",
|
||||
ForcePushDisabled: "Your branch has diverged from the remote branch and you've disabled force pushing",
|
||||
CheckForUpdate: "Check voor updates",
|
||||
CheckingForUpdates: "Zoeken naar updates...",
|
||||
OnLatestVersionErr: "Je hebt al de laatste versie",
|
||||
MajorVersionErr: "Nieuwe versie ({{.newVersion}}) is niet backwards compatibele vergeleken met de huidige versie ({{.currentVersion}})",
|
||||
CouldNotFindBinaryErr: "Kon geen binary vinden op {{.url}}",
|
||||
IntroPopupMessage: "Bedankt voor het gebruik maken van lazygit! 2 dingen die je moet weten:\n\n1) Als je meer van lazygit zijn features wilt leren bekijk dan deze video:\n https://youtu.be/CPLdltN7wgE\n\n2) Als je git gebruikt, ben je een programmeur! Met jouw hulp kunnen we lazygit verbeteren, dus overweeg om een donateur te worden en mee te doen aan het plezier op\n https://github.com/jesseduffield/lazygit",
|
||||
GitconfigParseErr: `Gogit kon je gitconfig bestand niet goed parsen door de aanwezigheid van losstaande '\' tekens. Het weghalen van deze tekens zou het probleem moeten oplossen. `,
|
||||
EditFile: `Verander bestand`,
|
||||
OpenFile: `Open bestand`,
|
||||
IgnoreFile: `Voeg toe aan .gitignore`,
|
||||
RefreshFiles: `Refresh bestanden`,
|
||||
Merge: `Merge in met huidige checked out branch`,
|
||||
ConfirmQuit: `Weet je zeker dat je dit programma wil sluiten?`,
|
||||
SwitchRepo: "Wissel naar een recente repo",
|
||||
AllBranchesLogGraph: `Alle logs van de branch laten zien`,
|
||||
UnsupportedGitService: `Niet-ondersteunde git-service`,
|
||||
CreatePullRequest: `Maak een pull-request`,
|
||||
CopyPullRequestURL: `Kopieer de URL van het pull-verzoek naar het klembord`,
|
||||
NoBranchOnRemote: `Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.`,
|
||||
Fetch: `Fetch`,
|
||||
NoAutomaticGitFetchTitle: `Geen automatische git fetch`,
|
||||
NoAutomaticGitFetchBody: `Lazygit kan niet "git fetch" uitvoeren in een privé repository, gebruik f in het branches paneel om "git fetch" manueel uit te voeren`,
|
||||
FileEnter: `Stage individuele hunks/lijnen`,
|
||||
FileStagingRequirements: `Kan alleen individuele lijnen stagen van getrackte bestanden met onstaged veranderingen`,
|
||||
StageSelectionTooltip: `Toggle lijnen staged / unstaged`,
|
||||
DiscardSelection: `Verwijdert change (git reset)`,
|
||||
ToggleRangeSelect: `Toggle drag selecteer`,
|
||||
ToggleSelectHunk: `Toggle selecteer hunk`,
|
||||
ToggleSelectionForPatch: `Voeg toe/verwijder lijn(en) in patch`,
|
||||
ToggleStagingView: `Ga naar een ander paneel`,
|
||||
ReturnToFilesPanel: `Ga terug naar het bestanden paneel`,
|
||||
FastForward: `Fast-forward deze branch vanaf zijn upstream`,
|
||||
FastForwarding: "Fast-forwarding",
|
||||
FoundConflictsTitle: "Conflicten!",
|
||||
ViewMergeRebaseOptions: "Bekijk merge/rebase opties",
|
||||
NotMergingOrRebasing: "Je bent momenteel niet aan het rebasen of mergen",
|
||||
RecentRepos: "Recente repositories",
|
||||
MergeOptionsTitle: "Merge opties",
|
||||
RebaseOptionsTitle: "Rebase opties",
|
||||
CommitSummaryTitle: "Commit bericht",
|
||||
LocalBranchesTitle: "Branches",
|
||||
SearchTitle: "Zoek",
|
||||
TagsTitle: "Tags",
|
||||
MenuTitle: "Menu",
|
||||
RemotesTitle: "Remotes",
|
||||
RemoteBranchesTitle: "Remote branches",
|
||||
PatchBuildingTitle: "Patch bouwen",
|
||||
InformationTitle: "Informatie",
|
||||
SecondaryTitle: "Secondary",
|
||||
ReflogCommitsTitle: "Reflog",
|
||||
GlobalTitle: "Globale sneltoetsen",
|
||||
ConflictsResolved: "Alle merge conflicten zijn opgelost. Wilt je verder gaan?",
|
||||
MergingTitle: "Mergen",
|
||||
ConfirmMerge: "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?",
|
||||
FwdNoUpstream: "Kan niet de branch vooruitspoelen zonder upstream",
|
||||
FwdCommitsToPush: "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft",
|
||||
ErrorOccurred: "Er is iets fout gegaan! Zou je hier een issue aan willen maken",
|
||||
NoRoom: "Niet genoeg ruimte",
|
||||
YouAreHere: "JE BENT HIER",
|
||||
RewordNotSupported: "Herformatteren van commits in interactief rebasen is nog niet ondersteund",
|
||||
CherryPickCopy: "Kopieer commit (cherry-pick)",
|
||||
PasteCommits: "Plak commits (cherry-pick)",
|
||||
SureCherryPick: "Weet je zeker dat je de gekopieerde commits naar deze branch wil cherry-picken?",
|
||||
CherryPick: "Cherry-Pick",
|
||||
Donate: "Doneer",
|
||||
PrevLine: "Selecteer de vorige lijn",
|
||||
NextLine: "Selecteer de volgende lijn",
|
||||
PrevHunk: "Selecteer de vorige hunk",
|
||||
NextHunk: "Selecteer de volgende hunk",
|
||||
PrevConflict: "Selecteer voorgaand conflict",
|
||||
NextConflict: "Selecteer volgende conflict",
|
||||
SelectPrevHunk: "Selecteer bovenste hunk",
|
||||
SelectNextHunk: "Selecteer onderste hunk",
|
||||
ScrollDown: "Scroll omlaag",
|
||||
ScrollUp: "Scroll omhoog",
|
||||
ScrollUpMainWindow: "Scroll naar beneden vanaf hoofdpaneel",
|
||||
ScrollDownMainWindow: "Scroll naar beneden vanaf hoofdpaneel",
|
||||
AmendCommitTitle: "Commit wijzigen",
|
||||
AmendCommitPrompt: "Weet je zeker dat je deze commit wil wijzigen met de vorige staged bestanden?",
|
||||
DropCommitTitle: "Verwijder commit",
|
||||
DropCommitPrompt: "Weet je zeker dat je deze commit wil verwijderen?",
|
||||
PullingStatus: "Pullen",
|
||||
PushingStatus: "Pushen",
|
||||
FetchingStatus: "Fetchen",
|
||||
SquashingStatus: "Squashen",
|
||||
FixingStatus: "Fixing up",
|
||||
DeletingStatus: "Verwijderen",
|
||||
MovingStatus: "Verplaatsen",
|
||||
RebasingStatus: "Rebasen",
|
||||
AmendingStatus: "Wijzigen",
|
||||
CherryPickingStatus: "Cherry-picken",
|
||||
UndoingStatus: "Ongedaan maken",
|
||||
RedoingStatus: "Redoing",
|
||||
CheckingOutStatus: "Uitchecken",
|
||||
CommitFiles: "Commit bestanden",
|
||||
ViewItemFiles: "Bekijk gecommite bestanden",
|
||||
CommitFilesTitle: "Commit bestanden",
|
||||
CheckoutCommitFileTooltip: "Bestand uitchecken",
|
||||
DiscardOldFileChangeTooltip: "Uitsluit deze commit zijn veranderingen aan dit bestand",
|
||||
DiscardFileChangesTitle: "Uitsluit bestand zijn veranderingen",
|
||||
DiscardFileChangesPrompt: "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert",
|
||||
DisabledForGPG: "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken",
|
||||
CreateRepo: "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ",
|
||||
AutoStashTitle: "Autostash?",
|
||||
AutoStashPrompt: "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)",
|
||||
StashPrefix: "Auto-stashing veranderingen voor ",
|
||||
Discard: "Bekijk 'veranderingen ongedaan maken' opties",
|
||||
Cancel: "Annuleren",
|
||||
DiscardAllChanges: "Negeer alle wijzigingen",
|
||||
DiscardUnstagedChanges: "Negeer unstaged wijzigingen",
|
||||
DiscardAllChangesToAllFiles: "Verwijder werkende tree",
|
||||
DiscardAnyUnstagedChanges: "Gooi unstaged wijzigingen weg",
|
||||
DiscardUntrackedFiles: "Negeer niet-gevonden bestanden",
|
||||
ViewResetOptions: `Bekijk reset opties`,
|
||||
HardReset: "Harde reset",
|
||||
CreateFixupCommit: `Creëer fixup commit`,
|
||||
SquashAboveCommitsTooltip: `Squash bovenstaande commits`,
|
||||
CreateFixupCommitTooltip: `Creëer fixup commit`,
|
||||
ExecuteCustomCommand: "Voer aangepaste commando uit",
|
||||
CustomCommand: "Aangepaste commando:",
|
||||
CommitChangesWithoutHook: "Commit veranderingen zonder pre-commit hook",
|
||||
SkipHookPrefixNotConfigured: "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config",
|
||||
ResetTo: `Reset naar`,
|
||||
PressEnterToReturn: "Press om terug te gaan naar lazygit",
|
||||
ViewStashOptions: "Bekijk stash opties",
|
||||
StashAllChanges: "Stash-bestanden",
|
||||
StashAllChangesKeepIndex: "Stash staged wijzigingen",
|
||||
StashOptions: "Stash opties",
|
||||
NotARepository: "Fout: moet in een git repository uitgevoerd worden",
|
||||
Jump: "Ga naar paneel",
|
||||
DiscardPatch: "Patch weg gooien",
|
||||
DiscardPatchConfirm: "Je kan alleen maar een patch bouwen van 1 commit. Huidige patch weggooien?",
|
||||
CantPatchWhileRebasingError: "Je kan geen patch bouwen of patch commando uitvoeren wanneer je in een merging of rebasing state zit",
|
||||
ToggleAddToPatch: "Toggle bestand inbegrepen in patch",
|
||||
ViewPatchOptions: "Bekijk aangepaste patch opties",
|
||||
PatchOptionsTitle: "Patch opties",
|
||||
NoPatchError: "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen",
|
||||
EnterCommitFile: "Enter bestand om geselecteerde regels toe te voegen aan de patch",
|
||||
ExitCustomPatchBuilder: `Sluit lijn-bij-lijn modus`,
|
||||
EnterUpstream: `Enter upstream als '<remote> <branchnaam>'`,
|
||||
ReturnToRemotesList: `Ga terug naar remotes lijst`,
|
||||
NewRemote: `Voeg een nieuwe remote toe`,
|
||||
NewRemoteName: `Nieuwe remote name:`,
|
||||
NewRemoteUrl: `Nieuwe remote url:`,
|
||||
EditRemoteName: `Enter updated remote naam voor {{.remoteName}}:`,
|
||||
EditRemoteUrl: `Enter updated remote url voor {{.remoteName}}:`,
|
||||
RemoveRemote: `Verwijder remote`,
|
||||
RemoveRemotePrompt: "Weet je zeker dat je deze remote wilt verwijderen",
|
||||
DeleteRemoteBranch: "Verwijder remote branch",
|
||||
DeleteRemoteBranchMessage: "Weet je zeker dat je deze remote branch wilt verwijderen",
|
||||
SetUpstream: "Stel in als upstream van uitgecheckte branch",
|
||||
SetAsUpstreamTooltip: "Stel in als upstream van uitgecheckte branch",
|
||||
SetUpstreamTitle: "Stel in als upstream branch",
|
||||
SetUpstreamMessage: "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten",
|
||||
EditRemoteTooltip: "Wijzig remote",
|
||||
TagCommit: "Tag commit",
|
||||
TagNameTitle: "Tag naam:",
|
||||
PushTagTitle: "Remote om tag '{{.tagName}}' te pushen naar:",
|
||||
PushTag: "Push tag",
|
||||
NewTag: "Creëer tag",
|
||||
FetchRemoteTooltip: "Fetch remote",
|
||||
FetchingRemoteStatus: "Remote fetchen",
|
||||
CheckoutCommit: "Checkout commit",
|
||||
SureCheckoutThisCommit: "Weet je zeker dat je deze commit wil uitchecken?",
|
||||
GitFlowOptions: "Laat git-flow opties zien",
|
||||
NotAGitFlowBranch: "Dit lijkt geen git flow branch te zijn",
|
||||
NewGitFlowBranchPrompt: "Nieuwe '{{.branchType}}' naam:",
|
||||
IgnoreTracked: "Negeer tracked bestand",
|
||||
IgnoreTrackedPrompt: "Weet je zeker dat je een getracked bestand wil negeren?",
|
||||
ViewResetToUpstreamOptions: "Bekijk upstream reset opties",
|
||||
NextScreenMode: "Volgende scherm modus (normaal/half/groot)",
|
||||
PrevScreenMode: "Vorige scherm modus",
|
||||
StartSearch: "Start met zoeken",
|
||||
Panel: "Paneel",
|
||||
Keybindings: "Sneltoetsen",
|
||||
RenameBranch: "Hernoem branch",
|
||||
NewBranchNamePrompt: "Noem een nieuwe branch naam",
|
||||
RenameBranchWarning: "Deze branch volgt een remote. Deze actie zal alleen de locale branch name wijzigen niet de naam van de remote branch. Verder gaan?",
|
||||
OpenKeybindingsMenu: "Open menu",
|
||||
ResetCherryPick: "Reset cherry-picked (gekopieerde) commits selectie",
|
||||
NextTab: "Volgende tabblad",
|
||||
PrevTab: "Vorige tabblad",
|
||||
CantUndoWhileRebasing: "Kan niet ongedaan maken terwijl je aan het rebasen bent",
|
||||
CantRedoWhileRebasing: "Kan niet opnieuw doen (redo) terwijl je aan het rebasen bent",
|
||||
MustStashWarning: "Een patch in de index stoppen vereist stashen en onstashen van je wijzigingen. Als er iets verkeert gaat kan je je bestanden terug vinden in de stash. Verder gaan?",
|
||||
MustStashTitle: "Moet stashen",
|
||||
ConfirmationTitle: "Bevestigingspaneel",
|
||||
PrevPage: "Vorige pagina",
|
||||
NextPage: "Volgende pagina",
|
||||
GotoTop: "Scroll naar boven",
|
||||
GotoBottom: "Scroll naar beneden",
|
||||
FilteringBy: "Filteren bij",
|
||||
ResetInParentheses: "(reset)",
|
||||
OpenFilteringMenu: "Bekijk scoping opties",
|
||||
FilterBy: "Filter bij",
|
||||
ExitFilterMode: "Stop met filteren bij pad",
|
||||
FilterPathOption: "Vulin pad om op te filteren",
|
||||
EnterFileName: "Vulin path:",
|
||||
FilteringMenuTitle: "Filteren",
|
||||
MustExitFilterModeTitle: "Command niet beschikbaar",
|
||||
MustExitFilterModePrompt: "Command niet beschikbaar in filter modus. Sluit filter modus?",
|
||||
Diff: "Diff",
|
||||
EnterRefToDiff: "Vul in ref naar diff",
|
||||
EnterRefName: "Vul in ref:",
|
||||
ExitDiffMode: "Sluit diff mode",
|
||||
DiffingMenuTitle: "Diffen",
|
||||
SwapDiff: "Keer diff richting om",
|
||||
ViewDiffingOptions: "Open diff menu",
|
||||
ShowingGitDiff: "Laat output zien voor:",
|
||||
CopyCommitShaToClipboard: "Kopieer commit SHA naar klembord",
|
||||
CopyCommitMessageToClipboard: "Kopieer commit bericht naar klembord",
|
||||
CopyBranchNameToClipboard: "Kopieer branch name naar klembord",
|
||||
CopyPathToClipboard: "Kopieer de bestandsnaam naar het klembord",
|
||||
CommitPrefixPatternError: "Fout in commitPrefix patroon",
|
||||
NoFilesStagedTitle: "Geen bestanden gestaged",
|
||||
NoFilesStagedPrompt: "Je hebt geen bestanden gestaged. Commit alle bestanden?",
|
||||
BranchNotFoundTitle: "Branch niet gevonden",
|
||||
BranchNotFoundPrompt: "Branch niet gevonden. Creëer een nieuwe branch genaamd",
|
||||
PullRequestURLCopiedToClipboard: "Pull-aanvraag-URL gekopieerd naar klembord",
|
||||
CommitMessageCopiedToClipboard: "Commit message gekopieerd naar klembord",
|
||||
CopiedToClipboard: "gekopieerd naar klembord",
|
||||
NavigationTitle: "Lijstpaneel navigatie",
|
||||
ViewCommits: "Bekijk commits",
|
||||
ToggleTreeView: "Toggle bestandsboom weergave",
|
||||
CreateNewBranchFromCommit: "Creëer nieuwe branch van commit",
|
||||
CopySubmoduleNameToClipboard: "Kopieer submodule naam naar klembord",
|
||||
EnterSubmoduleTooltip: "Enter submodule",
|
||||
NewSubmodule: "Voeg nieuwe submodule toe",
|
||||
InitSubmoduleTooltip: "Initialiseer submodule",
|
||||
ViewBulkSubmoduleOptions: "Bekijk bulk submodule opties",
|
||||
CreatePullRequestOptions: "Bekijk opties voor pull-aanvraag",
|
||||
ConfirmRevertCommit: "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?",
|
||||
NotEnoughSpace: "Niet genoeg ruimte om de panelen te renderen",
|
||||
DiffTitle: "Diff",
|
||||
FilesTitle: "Bestanden",
|
||||
BranchesTitle: "Branches",
|
||||
CommitsTitle: "Commits",
|
||||
StashTitle: "Stash",
|
||||
UnstagedChanges: "Unstaged wijzigingen",
|
||||
StagedChanges: "Staged wijzigingen",
|
||||
MainTitle: "Hoofd",
|
||||
StagingTitle: "Staging",
|
||||
NormalTitle: "Normaal",
|
||||
CommitSummary: "Commitbericht",
|
||||
CredentialsUsername: "Gebruikersnaam",
|
||||
CredentialsPassword: "Wachtwoord",
|
||||
CredentialsPassphrase: "Voer een wachtwoordzin in voor de SSH-sleutel",
|
||||
PassUnameWrong: "Wachtwoord en/of gebruikersnaam verkeerd",
|
||||
Commit: "Commit veranderingen",
|
||||
AmendLastCommit: "Wijzig laatste commit",
|
||||
AmendLastCommitTitle: "Wijzig laatste commit",
|
||||
SureToAmend: "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.",
|
||||
NoCommitToAmend: "Er is geen commits om te wijzigen.",
|
||||
CommitChangesWithEditor: "Commit veranderingen met de git editor",
|
||||
StatusTitle: "Status",
|
||||
Menu: "Menu",
|
||||
Execute: "Uitvoeren",
|
||||
Stage: "Toggle staged",
|
||||
ToggleStagedAll: "Toggle staged alle",
|
||||
Refresh: "Verversen",
|
||||
Push: "Push",
|
||||
Pull: "Pull",
|
||||
Scroll: "Scroll",
|
||||
FilterStagedFiles: "Show only staged files",
|
||||
FilterUnstagedFiles: "Show only unstaged files",
|
||||
ResetFilter: "Reset commit file state filter",
|
||||
MergeConflictsTitle: "Merge conflicten",
|
||||
Checkout: "Uitchecken",
|
||||
SoftReset: "Zacht reset",
|
||||
AlreadyCheckedOutBranch: "Je hebt deze branch al uitgecheckt",
|
||||
SureForceCheckout: "Weet je zeker dat je het uitchecken wil forceren? Al je lokale verandering zullen worden verwijdert",
|
||||
ForceCheckoutBranch: "Forceer uitchecken op deze branch",
|
||||
BranchName: "Branch naam",
|
||||
NewBranchNameBranchOff: "Nieuw branch naam (Branch is afgeleid van '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "Je kan een uitgecheckte branch niet verwijderen!",
|
||||
ForceDeleteBranchMessage: "Weet je zeker dat je branch '{{.selectedBranchName}}' geforceerd wil verwijderen?",
|
||||
RebaseBranch: "Rebase branch",
|
||||
CantRebaseOntoSelf: "Je kan niet een branch rebasen op zichzelf",
|
||||
CantMergeBranchIntoItself: "Je kan niet een branch in zichzelf mergen",
|
||||
ForceCheckout: "Forceer checkout",
|
||||
CheckoutByName: "Uitchecken bij naam",
|
||||
NewBranch: "Nieuwe branch",
|
||||
NoBranchesThisRepo: "Geen branches voor deze repo",
|
||||
CommitWithoutMessageErr: "Je kan geen commit maken zonder commit bericht",
|
||||
CloseCancel: "Sluiten",
|
||||
Confirm: "Bevestig",
|
||||
Close: "Sluiten",
|
||||
Quit: "Quit",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "Fixup",
|
||||
SureFixupThisCommit: "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze",
|
||||
SureSquashThisCommit: "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?",
|
||||
Squash: "Squash",
|
||||
PickCommitTooltip: "Kies commit (wanneer midden in rebase)",
|
||||
RevertCommit: "Commit ongedaan maken",
|
||||
Reword: "Hernoem commit",
|
||||
DropCommit: "Verwijder commit",
|
||||
MoveDownCommit: "Verplaats commit 1 naar beneden",
|
||||
MoveUpCommit: "Verplaats commit 1 naar boven",
|
||||
EditCommitTooltip: "Wijzig commit",
|
||||
AmendCommitTooltip: "Wijzig commit met staged veranderingen",
|
||||
RewordCommitEditor: "Hernoem commit met editor",
|
||||
NoCommitsThisBranch: "Geen commits in deze branch",
|
||||
Error: "Foutmelding",
|
||||
PickHunk: "Kies stuk",
|
||||
PickAllHunks: "Kies beide stukken",
|
||||
Undo: "Ongedaan maken",
|
||||
UndoReflog: "Ongedaan maken (via reflog) (experimenteel)",
|
||||
RedoReflog: "Redo (via reflog) (experimenteel)",
|
||||
Pop: "Pop",
|
||||
Drop: "Laten vallen",
|
||||
Apply: "Toepassen",
|
||||
NoStashEntries: "Geen stash items",
|
||||
StashDrop: "Stash laten vallen",
|
||||
SureDropStashEntry: "Weet je het zeker dat je deze stash entry wil laten vallen?",
|
||||
StashPop: "Stash pop",
|
||||
SurePopStashEntry: "Weet je zeker dat je deze stash entry wil poppen?",
|
||||
StashApply: "Stash toepassen",
|
||||
SureApplyStashEntry: "Weet je zeker dat je deze stash entry wil toepassen?",
|
||||
NoTrackedStagedFilesStash: "Je hebt geen tracked/staged bestanden om te laten stashen",
|
||||
StashChanges: "Stash veranderingen",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
NoChangedFiles: "Geen veranderde bestanden",
|
||||
OpenConfig: "Open config bestand",
|
||||
EditConfig: "Verander config bestand",
|
||||
ForcePush: "Forceer push",
|
||||
ForcePushPrompt: "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.",
|
||||
ForcePushDisabled: "Your branch has diverged from the remote branch and you've disabled force pushing",
|
||||
UpdatesRejectedAndForcePushDisabled: "Updates were rejected and you have disabled force pushing",
|
||||
CheckForUpdate: "Check voor updates",
|
||||
CheckingForUpdates: "Zoeken naar updates...",
|
||||
OnLatestVersionErr: "Je hebt al de laatste versie",
|
||||
MajorVersionErr: "Nieuwe versie ({{.newVersion}}) is niet backwards compatibele vergeleken met de huidige versie ({{.currentVersion}})",
|
||||
CouldNotFindBinaryErr: "Kon geen binary vinden op {{.url}}",
|
||||
IntroPopupMessage: "Bedankt voor het gebruik maken van lazygit! 2 dingen die je moet weten:\n\n1) Als je meer van lazygit zijn features wilt leren bekijk dan deze video:\n https://youtu.be/CPLdltN7wgE\n\n2) Als je git gebruikt, ben je een programmeur! Met jouw hulp kunnen we lazygit verbeteren, dus overweeg om een donateur te worden en mee te doen aan het plezier op\n https://github.com/jesseduffield/lazygit",
|
||||
GitconfigParseErr: `Gogit kon je gitconfig bestand niet goed parsen door de aanwezigheid van losstaande '\' tekens. Het weghalen van deze tekens zou het probleem moeten oplossen. `,
|
||||
EditFile: `Verander bestand`,
|
||||
OpenFile: `Open bestand`,
|
||||
IgnoreFile: `Voeg toe aan .gitignore`,
|
||||
RefreshFiles: `Refresh bestanden`,
|
||||
Merge: `Merge in met huidige checked out branch`,
|
||||
ConfirmQuit: `Weet je zeker dat je dit programma wil sluiten?`,
|
||||
SwitchRepo: "Wissel naar een recente repo",
|
||||
AllBranchesLogGraph: `Alle logs van de branch laten zien`,
|
||||
UnsupportedGitService: `Niet-ondersteunde git-service`,
|
||||
CreatePullRequest: `Maak een pull-request`,
|
||||
CopyPullRequestURL: `Kopieer de URL van het pull-verzoek naar het klembord`,
|
||||
NoBranchOnRemote: `Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.`,
|
||||
Fetch: `Fetch`,
|
||||
NoAutomaticGitFetchTitle: `Geen automatische git fetch`,
|
||||
NoAutomaticGitFetchBody: `Lazygit kan niet "git fetch" uitvoeren in een privé repository, gebruik f in het branches paneel om "git fetch" manueel uit te voeren`,
|
||||
FileEnter: `Stage individuele hunks/lijnen`,
|
||||
FileStagingRequirements: `Kan alleen individuele lijnen stagen van getrackte bestanden met onstaged veranderingen`,
|
||||
StageSelectionTooltip: `Toggle lijnen staged / unstaged`,
|
||||
DiscardSelection: `Verwijdert change (git reset)`,
|
||||
ToggleRangeSelect: `Toggle drag selecteer`,
|
||||
ToggleSelectHunk: `Toggle selecteer hunk`,
|
||||
ToggleSelectionForPatch: `Voeg toe/verwijder lijn(en) in patch`,
|
||||
ToggleStagingView: `Ga naar een ander paneel`,
|
||||
ReturnToFilesPanel: `Ga terug naar het bestanden paneel`,
|
||||
FastForward: `Fast-forward deze branch vanaf zijn upstream`,
|
||||
FastForwarding: "Fast-forwarding",
|
||||
FoundConflictsTitle: "Conflicten!",
|
||||
ViewMergeRebaseOptions: "Bekijk merge/rebase opties",
|
||||
NotMergingOrRebasing: "Je bent momenteel niet aan het rebasen of mergen",
|
||||
RecentRepos: "Recente repositories",
|
||||
MergeOptionsTitle: "Merge opties",
|
||||
RebaseOptionsTitle: "Rebase opties",
|
||||
CommitSummaryTitle: "Commit bericht",
|
||||
LocalBranchesTitle: "Branches",
|
||||
SearchTitle: "Zoek",
|
||||
TagsTitle: "Tags",
|
||||
MenuTitle: "Menu",
|
||||
RemotesTitle: "Remotes",
|
||||
RemoteBranchesTitle: "Remote branches",
|
||||
PatchBuildingTitle: "Patch bouwen",
|
||||
InformationTitle: "Informatie",
|
||||
SecondaryTitle: "Secondary",
|
||||
ReflogCommitsTitle: "Reflog",
|
||||
GlobalTitle: "Globale sneltoetsen",
|
||||
ConflictsResolved: "Alle merge conflicten zijn opgelost. Wilt je verder gaan?",
|
||||
MergingTitle: "Mergen",
|
||||
ConfirmMerge: "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?",
|
||||
FwdNoUpstream: "Kan niet de branch vooruitspoelen zonder upstream",
|
||||
FwdCommitsToPush: "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft",
|
||||
ErrorOccurred: "Er is iets fout gegaan! Zou je hier een issue aan willen maken",
|
||||
NoRoom: "Niet genoeg ruimte",
|
||||
YouAreHere: "JE BENT HIER",
|
||||
RewordNotSupported: "Herformatteren van commits in interactief rebasen is nog niet ondersteund",
|
||||
CherryPickCopy: "Kopieer commit (cherry-pick)",
|
||||
PasteCommits: "Plak commits (cherry-pick)",
|
||||
SureCherryPick: "Weet je zeker dat je de gekopieerde commits naar deze branch wil cherry-picken?",
|
||||
CherryPick: "Cherry-Pick",
|
||||
Donate: "Doneer",
|
||||
PrevLine: "Selecteer de vorige lijn",
|
||||
NextLine: "Selecteer de volgende lijn",
|
||||
PrevHunk: "Selecteer de vorige hunk",
|
||||
NextHunk: "Selecteer de volgende hunk",
|
||||
PrevConflict: "Selecteer voorgaand conflict",
|
||||
NextConflict: "Selecteer volgende conflict",
|
||||
SelectPrevHunk: "Selecteer bovenste hunk",
|
||||
SelectNextHunk: "Selecteer onderste hunk",
|
||||
ScrollDown: "Scroll omlaag",
|
||||
ScrollUp: "Scroll omhoog",
|
||||
ScrollUpMainWindow: "Scroll naar beneden vanaf hoofdpaneel",
|
||||
ScrollDownMainWindow: "Scroll naar beneden vanaf hoofdpaneel",
|
||||
AmendCommitTitle: "Commit wijzigen",
|
||||
AmendCommitPrompt: "Weet je zeker dat je deze commit wil wijzigen met de vorige staged bestanden?",
|
||||
DropCommitTitle: "Verwijder commit",
|
||||
DropCommitPrompt: "Weet je zeker dat je deze commit wil verwijderen?",
|
||||
PullingStatus: "Pullen",
|
||||
PushingStatus: "Pushen",
|
||||
FetchingStatus: "Fetchen",
|
||||
SquashingStatus: "Squashen",
|
||||
FixingStatus: "Fixing up",
|
||||
DeletingStatus: "Verwijderen",
|
||||
MovingStatus: "Verplaatsen",
|
||||
RebasingStatus: "Rebasen",
|
||||
AmendingStatus: "Wijzigen",
|
||||
CherryPickingStatus: "Cherry-picken",
|
||||
UndoingStatus: "Ongedaan maken",
|
||||
RedoingStatus: "Redoing",
|
||||
CheckingOutStatus: "Uitchecken",
|
||||
CommitFiles: "Commit bestanden",
|
||||
ViewItemFiles: "Bekijk gecommite bestanden",
|
||||
CommitFilesTitle: "Commit bestanden",
|
||||
CheckoutCommitFileTooltip: "Bestand uitchecken",
|
||||
DiscardOldFileChangeTooltip: "Uitsluit deze commit zijn veranderingen aan dit bestand",
|
||||
DiscardFileChangesTitle: "Uitsluit bestand zijn veranderingen",
|
||||
DiscardFileChangesPrompt: "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert",
|
||||
DisabledForGPG: "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken",
|
||||
CreateRepo: "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ",
|
||||
AutoStashTitle: "Autostash?",
|
||||
AutoStashPrompt: "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)",
|
||||
StashPrefix: "Auto-stashing veranderingen voor ",
|
||||
Discard: "Bekijk 'veranderingen ongedaan maken' opties",
|
||||
Cancel: "Annuleren",
|
||||
DiscardAllChanges: "Negeer alle wijzigingen",
|
||||
DiscardUnstagedChanges: "Negeer unstaged wijzigingen",
|
||||
DiscardAllChangesToAllFiles: "Verwijder werkende tree",
|
||||
DiscardAnyUnstagedChanges: "Gooi unstaged wijzigingen weg",
|
||||
DiscardUntrackedFiles: "Negeer niet-gevonden bestanden",
|
||||
ViewResetOptions: `Bekijk reset opties`,
|
||||
HardReset: "Harde reset",
|
||||
CreateFixupCommit: `Creëer fixup commit voor deze commit`,
|
||||
SquashAboveCommitsTooltip: `Squash bovenstaande commits`,
|
||||
CreateFixupCommitTooltip: `Creëer fixup commit`,
|
||||
SureCreateFixupCommit: `Weet je zeker dat je een fixup wil maken! commit voor commit {{.commit}}?`,
|
||||
ExecuteCustomCommand: "Voer aangepaste commando uit",
|
||||
CustomCommand: "Aangepaste commando:",
|
||||
CommitChangesWithoutHook: "Commit veranderingen zonder pre-commit hook",
|
||||
SkipHookPrefixNotConfigured: "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config",
|
||||
ResetTo: `Reset naar`,
|
||||
PressEnterToReturn: "Press om terug te gaan naar lazygit",
|
||||
ViewStashOptions: "Bekijk stash opties",
|
||||
StashAllChanges: "Stash-bestanden",
|
||||
StashAllChangesKeepIndex: "Stash staged wijzigingen",
|
||||
StashOptions: "Stash opties",
|
||||
NotARepository: "Fout: moet in een git repository uitgevoerd worden",
|
||||
Jump: "Ga naar paneel",
|
||||
DiscardPatch: "Patch weg gooien",
|
||||
DiscardPatchConfirm: "Je kan alleen maar een patch bouwen van 1 commit. Huidige patch weggooien?",
|
||||
CantPatchWhileRebasingError: "Je kan geen patch bouwen of patch commando uitvoeren wanneer je in een merging of rebasing state zit",
|
||||
ToggleAddToPatch: "Toggle bestand inbegrepen in patch",
|
||||
ViewPatchOptions: "Bekijk aangepaste patch opties",
|
||||
PatchOptionsTitle: "Patch opties",
|
||||
NoPatchError: "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen",
|
||||
EnterCommitFile: "Enter bestand om geselecteerde regels toe te voegen aan de patch",
|
||||
ExitCustomPatchBuilder: `Sluit lijn-bij-lijn modus`,
|
||||
EnterUpstream: `Enter upstream als '<remote> <branchnaam>'`,
|
||||
ReturnToRemotesList: `Ga terug naar remotes lijst`,
|
||||
NewRemote: `Voeg een nieuwe remote toe`,
|
||||
NewRemoteName: `Nieuwe remote name:`,
|
||||
NewRemoteUrl: `Nieuwe remote url:`,
|
||||
EditRemoteName: `Enter updated remote naam voor {{.remoteName}}:`,
|
||||
EditRemoteUrl: `Enter updated remote url voor {{.remoteName}}:`,
|
||||
RemoveRemote: `Verwijder remote`,
|
||||
RemoveRemotePrompt: "Weet je zeker dat je deze remote wilt verwijderen",
|
||||
DeleteRemoteBranch: "Verwijder remote branch",
|
||||
DeleteRemoteBranchMessage: "Weet je zeker dat je deze remote branch wilt verwijderen",
|
||||
SetUpstream: "Stel in als upstream van uitgecheckte branch",
|
||||
SetAsUpstreamTooltip: "Stel in als upstream van uitgecheckte branch",
|
||||
SetUpstreamTitle: "Stel in als upstream branch",
|
||||
SetUpstreamMessage: "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten",
|
||||
EditRemoteTooltip: "Wijzig remote",
|
||||
TagCommit: "Tag commit",
|
||||
TagNameTitle: "Tag naam:",
|
||||
PushTagTitle: "Remote om tag '{{.tagName}}' te pushen naar:",
|
||||
PushTag: "Push tag",
|
||||
NewTag: "Creëer tag",
|
||||
FetchRemoteTooltip: "Fetch remote",
|
||||
FetchingRemoteStatus: "Remote fetchen",
|
||||
CheckoutCommit: "Checkout commit",
|
||||
SureCheckoutThisCommit: "Weet je zeker dat je deze commit wil uitchecken?",
|
||||
GitFlowOptions: "Laat git-flow opties zien",
|
||||
NotAGitFlowBranch: "Dit lijkt geen git flow branch te zijn",
|
||||
NewGitFlowBranchPrompt: "Nieuwe '{{.branchType}}' naam:",
|
||||
IgnoreTracked: "Negeer tracked bestand",
|
||||
IgnoreTrackedPrompt: "Weet je zeker dat je een getracked bestand wil negeren?",
|
||||
ViewResetToUpstreamOptions: "Bekijk upstream reset opties",
|
||||
NextScreenMode: "Volgende scherm modus (normaal/half/groot)",
|
||||
PrevScreenMode: "Vorige scherm modus",
|
||||
StartSearch: "Start met zoeken",
|
||||
Panel: "Paneel",
|
||||
Keybindings: "Sneltoetsen",
|
||||
RenameBranch: "Hernoem branch",
|
||||
NewBranchNamePrompt: "Noem een nieuwe branch naam",
|
||||
RenameBranchWarning: "Deze branch volgt een remote. Deze actie zal alleen de locale branch name wijzigen niet de naam van de remote branch. Verder gaan?",
|
||||
OpenKeybindingsMenu: "Open menu",
|
||||
ResetCherryPick: "Reset cherry-picked (gekopieerde) commits selectie",
|
||||
NextTab: "Volgende tabblad",
|
||||
PrevTab: "Vorige tabblad",
|
||||
CantUndoWhileRebasing: "Kan niet ongedaan maken terwijl je aan het rebasen bent",
|
||||
CantRedoWhileRebasing: "Kan niet opnieuw doen (redo) terwijl je aan het rebasen bent",
|
||||
MustStashWarning: "Een patch in de index stoppen vereist stashen en onstashen van je wijzigingen. Als er iets verkeert gaat kan je je bestanden terug vinden in de stash. Verder gaan?",
|
||||
MustStashTitle: "Moet stashen",
|
||||
ConfirmationTitle: "Bevestigingspaneel",
|
||||
PrevPage: "Vorige pagina",
|
||||
NextPage: "Volgende pagina",
|
||||
GotoTop: "Scroll naar boven",
|
||||
GotoBottom: "Scroll naar beneden",
|
||||
FilteringBy: "Filteren bij",
|
||||
ResetInParentheses: "(reset)",
|
||||
OpenFilteringMenu: "Bekijk scoping opties",
|
||||
FilterBy: "Filter bij",
|
||||
ExitFilterMode: "Stop met filteren bij pad",
|
||||
FilterPathOption: "Vulin pad om op te filteren",
|
||||
EnterFileName: "Vulin path:",
|
||||
FilteringMenuTitle: "Filteren",
|
||||
MustExitFilterModeTitle: "Command niet beschikbaar",
|
||||
MustExitFilterModePrompt: "Command niet beschikbaar in filter modus. Sluit filter modus?",
|
||||
Diff: "Diff",
|
||||
EnterRefToDiff: "Vul in ref naar diff",
|
||||
EnterRefName: "Vul in ref:",
|
||||
ExitDiffMode: "Sluit diff mode",
|
||||
DiffingMenuTitle: "Diffen",
|
||||
SwapDiff: "Keer diff richting om",
|
||||
ViewDiffingOptions: "Open diff menu",
|
||||
ShowingGitDiff: "Laat output zien voor:",
|
||||
CopyCommitShaToClipboard: "Kopieer commit SHA naar klembord",
|
||||
CopyCommitMessageToClipboard: "Kopieer commit bericht naar klembord",
|
||||
CopyBranchNameToClipboard: "Kopieer branch name naar klembord",
|
||||
CopyPathToClipboard: "Kopieer de bestandsnaam naar het klembord",
|
||||
CommitPrefixPatternError: "Fout in commitPrefix patroon",
|
||||
NoFilesStagedTitle: "Geen bestanden gestaged",
|
||||
NoFilesStagedPrompt: "Je hebt geen bestanden gestaged. Commit alle bestanden?",
|
||||
BranchNotFoundTitle: "Branch niet gevonden",
|
||||
BranchNotFoundPrompt: "Branch niet gevonden. Creëer een nieuwe branch genaamd",
|
||||
PullRequestURLCopiedToClipboard: "Pull-aanvraag-URL gekopieerd naar klembord",
|
||||
CommitMessageCopiedToClipboard: "Commit message gekopieerd naar klembord",
|
||||
CopiedToClipboard: "Gekopieerd naar klembord",
|
||||
NavigationTitle: "Lijstpaneel navigatie",
|
||||
ViewCommits: "Bekijk commits",
|
||||
ToggleTreeView: "Toggle bestandsboom weergave",
|
||||
CreateNewBranchFromCommit: "Creëer nieuwe branch van commit",
|
||||
CopySubmoduleNameToClipboard: "Kopieer submodule naam naar klembord",
|
||||
EnterSubmoduleTooltip: "Enter submodule",
|
||||
NewSubmodule: "Voeg nieuwe submodule toe",
|
||||
InitSubmoduleTooltip: "Initialiseer submodule",
|
||||
ViewBulkSubmoduleOptions: "Bekijk bulk submodule opties",
|
||||
CreatePullRequestOptions: "Bekijk opties voor pull-aanvraag",
|
||||
ConfirmRevertCommit: "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?",
|
||||
}
|
||||
}
|
||||
|
||||
+481
-541
File diff suppressed because it is too large
Load Diff
@@ -264,6 +264,7 @@ func japaneseTranslationSet() TranslationSet {
|
||||
// LcSquashAboveCommits: `squash all 'fixup!' commits above selected commit (autosquash)`,
|
||||
// SquashAboveCommits: `Squash all 'fixup!' commits above selected commit (autosquash)`,
|
||||
CreateFixupCommit: `Fixupコミットを作成`,
|
||||
SureCreateFixupCommit: `{{.commit}} に対する fixup! コミットを作成します。よろしいですか?`,
|
||||
ExecuteCustomCommand: "カスタムコマンドを実行",
|
||||
CustomCommand: "カスタムコマンド:",
|
||||
CommitChangesWithoutHook: "pre-commitフックを実行せずに変更をコミット",
|
||||
@@ -423,6 +424,7 @@ func japaneseTranslationSet() TranslationSet {
|
||||
// PushingTagStatus: "Pushing tag",
|
||||
PullRequestURLCopiedToClipboard: "Pull requestのURLがクリップボードにコピーされました",
|
||||
CommitDiffCopiedToClipboard: "コミットの差分がクリップボードにコピーされました",
|
||||
CommitSHACopiedToClipboard: "コミットのSHAがクリップボードにコピーされました",
|
||||
CommitURLCopiedToClipboard: "コミットのURLがクリップボードにコピーされました",
|
||||
CommitMessageCopiedToClipboard: "コミットメッセージがクリップボードにコピーされました",
|
||||
CommitAuthorCopiedToClipboard: "コミットの作成者名がクリップボードにコピーされました",
|
||||
|
||||
+267
-264
@@ -19,270 +19,272 @@ lazygit!를 이용해주셔서 감사합니다. Seriously you rock. Three things
|
||||
// exporting this so we can use it in tests
|
||||
func koreanTranslationSet() TranslationSet {
|
||||
return TranslationSet{
|
||||
NotEnoughSpace: "패널을 렌더링 할 공간이 부족합니다.",
|
||||
DiffTitle: "Diff",
|
||||
FilesTitle: "파일",
|
||||
BranchesTitle: "브랜치",
|
||||
CommitsTitle: "커밋",
|
||||
StashTitle: "Stash",
|
||||
UnstagedChanges: `Staged되지 않은 변경 내용`,
|
||||
StagedChanges: `Staged된 변경 내용`,
|
||||
MainTitle: "메인",
|
||||
MergeConfirmTitle: "병합",
|
||||
StagingTitle: "메인 패널 (Staging)",
|
||||
MergingTitle: "메인 패널 (Merging)",
|
||||
NormalTitle: "메인 패널 (Normal)",
|
||||
LogTitle: "로그",
|
||||
CommitSummary: "커밋 메시지",
|
||||
CredentialsUsername: "사용자 이름",
|
||||
CredentialsPassword: "패스워드",
|
||||
CredentialsPassphrase: "SSH키의 passphrase 입력",
|
||||
PassUnameWrong: "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.",
|
||||
Commit: "커밋 변경내용",
|
||||
AmendLastCommit: "마지맛 커밋 수정",
|
||||
AmendLastCommitTitle: "마지막 커밋 수정",
|
||||
SureToAmend: "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.",
|
||||
NoCommitToAmend: "Amend 가능한 커밋이 없습니다.",
|
||||
CommitChangesWithEditor: "Git 편집기를 사용하여 변경 내용을 커밋합니다.",
|
||||
StatusTitle: "상태",
|
||||
Menu: "메뉴",
|
||||
Execute: "실행",
|
||||
Stage: "Staged 전환",
|
||||
ToggleStagedAll: "모든 변경을 Staged/unstaged으로 전환",
|
||||
ToggleTreeView: "파일 트리뷰로 전환",
|
||||
OpenMergeTool: "Git mergetool를 열기",
|
||||
Refresh: "새로고침",
|
||||
Push: "푸시",
|
||||
Pull: "업데이트",
|
||||
Scroll: "스크롤",
|
||||
MergeConflictsTitle: "병합 충돌 내용",
|
||||
Checkout: "체크아웃",
|
||||
FileFilter: "파일을 필터하기 (Staged/unstaged)",
|
||||
FilterStagedFiles: "Staged된 파일만 표시",
|
||||
FilterUnstagedFiles: "Stage되지 않은 파일만 표시",
|
||||
ResetFilter: "필터 리셋",
|
||||
NoChangedFiles: "변경된 파일이 없습니다.",
|
||||
SoftReset: "소프트 리셋",
|
||||
AlreadyCheckedOutBranch: "브랜치가 이미 체크아웃 되었습니다",
|
||||
SureForceCheckout: "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.",
|
||||
ForceCheckoutBranch: "브랜치 강제 체크아웃",
|
||||
BranchName: "브랜치 이름",
|
||||
NewBranchNameBranchOff: "새 브랜치 이름 (branch is off of '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "체크아웃하는 브랜치는 삭제할 수 없습니다!",
|
||||
ForceDeleteBranchMessage: "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?",
|
||||
RebaseBranch: "체크아웃된 브랜치를 이 브랜치에 리베이스",
|
||||
CantRebaseOntoSelf: "브랜치를 자기 자신에게 리베이스할 수는 없습니다.",
|
||||
CantMergeBranchIntoItself: "브랜치를 자기 자신에게 병합할 수는 없습니다.",
|
||||
ForceCheckout: "강제 체크아웃",
|
||||
CheckoutByName: "이름으로 체크아웃",
|
||||
NewBranch: "새 브랜치 생성",
|
||||
NoBranchesThisRepo: "저장소에 브랜치가 존재하지 않습니다.",
|
||||
CommitWithoutMessageErr: "커밋 메시지를 입력하세요.",
|
||||
CloseCancel: "닫기/취소",
|
||||
Confirm: "확인",
|
||||
Close: "닫기",
|
||||
Quit: "종료",
|
||||
NoCommitsThisBranch: "이 브랜치에 커밋이 없습니다.",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "Fixup",
|
||||
SureFixupThisCommit: "Are you sure you want to 'fixup' this commit? It will be merged into the commit below",
|
||||
SureSquashThisCommit: "Are you sure you want to squash this commit into the commit below?",
|
||||
Squash: "Squash",
|
||||
PickCommitTooltip: "Pick commit (when mid-rebase)",
|
||||
RevertCommit: "커밋 되돌리기",
|
||||
Reword: "커밋메시지 변경",
|
||||
DropCommit: "커밋 삭제",
|
||||
MoveDownCommit: "커밋을 1개 아래로 이동",
|
||||
MoveUpCommit: "커밋을 1개 위로 이동",
|
||||
EditCommitTooltip: "커밋을 편집",
|
||||
AmendCommitTooltip: "Amend commit with staged changes",
|
||||
ResetAuthor: "Reset commit author",
|
||||
SureResetCommitAuthor: "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?",
|
||||
RewordCommitEditor: "에디터에서 커밋메시지 수정",
|
||||
Error: "오류",
|
||||
PickHunk: "Pick hunk",
|
||||
PickAllHunks: "Pick all hunks",
|
||||
Undo: "되돌리기",
|
||||
UndoReflog: "되돌리기 (reflog) (실험적)",
|
||||
RedoReflog: "다시 실행 (reflog) (실험적)",
|
||||
Pop: "Pop",
|
||||
Drop: "Drop",
|
||||
Apply: "적용",
|
||||
NoStashEntries: "Stash가 존재하지 않습니다.",
|
||||
StashDrop: "Stash를 삭제",
|
||||
SureDropStashEntry: "정말로 Stash를 삭제하시겠습니까?",
|
||||
StashPop: "Stash를 pop",
|
||||
SurePopStashEntry: "정말로 Stash를 pop하시겠습니까?",
|
||||
StashApply: "Stash 적용",
|
||||
SureApplyStashEntry: "정말로 Stash를 적용하시겠습니까?",
|
||||
NoTrackedStagedFilesStash: "You have no tracked/staged files to stash",
|
||||
StashChanges: "변경을 Stash",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
OpenConfig: "설정 파일 열기",
|
||||
EditConfig: "설정 파일 수정",
|
||||
ForcePush: "강제 푸시",
|
||||
ForcePushPrompt: "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.",
|
||||
ForcePushDisabled: "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.",
|
||||
CheckForUpdate: "업데이트 확인",
|
||||
CheckingForUpdates: "업데이트 확인 중...",
|
||||
UpdateAvailableTitle: "새로운 업데이트 사용가능!",
|
||||
UpdateAvailable: "버전 {{.newVersion}} 을(를) 설치하시겠습니까?",
|
||||
UpdateInProgressWaitingStatus: "업데이트 중",
|
||||
UpdateCompletedTitle: "업데이트 완료!",
|
||||
UpdateCompleted: "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.",
|
||||
FailedToRetrieveLatestVersionErr: "버전 정보를 받아오는데 실패했습니다.",
|
||||
OnLatestVersionErr: "이미 최신 버전을 사용하고 있습니다.",
|
||||
MajorVersionErr: "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.",
|
||||
CouldNotFindBinaryErr: "{{.url}} 에서 바이너리를 찾을 수 없습니다.",
|
||||
UpdateFailedErr: "업데이트 실패: {{.errMessage}}",
|
||||
ConfirmQuitDuringUpdateTitle: "현재 업데이트 중입니다.",
|
||||
ConfirmQuitDuringUpdate: "현재 업데이트를 진행 중입니다.종료하시겠습니까?",
|
||||
MergeToolTitle: "병합 도구",
|
||||
MergeToolPrompt: "정말로 `git mergetool`을 여시겠습니까?",
|
||||
IntroPopupMessage: koreanIntroPopupMessage,
|
||||
GitconfigParseErr: `따옴표로 묶이지 않은 '\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.`,
|
||||
EditFile: `파일 편집`,
|
||||
OpenFile: `파일 닫기`,
|
||||
IgnoreFile: `.gitignore에 추가`,
|
||||
RefreshFiles: `파일 새로고침`,
|
||||
Merge: `현재 브랜치에 병합`,
|
||||
ConfirmQuit: `정말로 종료하시겠습니까?`,
|
||||
SwitchRepo: `최근에 사용한 저장소로 전환`,
|
||||
AllBranchesLogGraph: `모든 브랜치 로그 표시`,
|
||||
UnsupportedGitService: `지원되지 않는 Git 서비스입니다.`,
|
||||
CreatePullRequest: `풀 리퀘스트 생성`,
|
||||
CopyPullRequestURL: `풀 리퀘스트 URL을 클립보드에 복사`,
|
||||
NoBranchOnRemote: `브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.`,
|
||||
Fetch: `Fetch`,
|
||||
NoAutomaticGitFetchTitle: `자동 git 업데이트) 없음`,
|
||||
NoAutomaticGitFetchBody: `Lazygit은 private 저장소에서 "git fetch"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 "git fetch"를 수동으로 실행하세요.`,
|
||||
FileEnter: `Stage individual hunks/lines for file, or collapse/expand for directory`,
|
||||
FileStagingRequirements: `추적된 파일에 대해 개별 라인만 stage할 수 있습니다.`,
|
||||
StageSelectionTooltip: `선택한 행을 staged / unstaged`,
|
||||
DiscardSelection: `변경을 삭제 (git reset)`,
|
||||
ToggleRangeSelect: `드래그 선택 전환`,
|
||||
ToggleSelectHunk: `Toggle select hunk`,
|
||||
ToggleSelectionForPatch: `Line(s)을 패치에 추가/삭제`,
|
||||
ToggleStagingView: `패널 전환`,
|
||||
ReturnToFilesPanel: `파일 목록으로 돌아가기`,
|
||||
FastForward: `Fast-forward this branch from its upstream`,
|
||||
FastForwarding: "Fast-forwarding",
|
||||
FoundConflictsTitle: "Auto-merge failed",
|
||||
ViewMergeRebaseOptions: "View merge/rebase options",
|
||||
NotMergingOrRebasing: "You are currently neither rebasing nor merging",
|
||||
RecentRepos: "최근에 사용한 저장소",
|
||||
MergeOptionsTitle: "Merge options",
|
||||
RebaseOptionsTitle: "Rebase options",
|
||||
CommitSummaryTitle: "커밋메시지",
|
||||
LocalBranchesTitle: "브랜치",
|
||||
SearchTitle: "검색",
|
||||
TagsTitle: "태그",
|
||||
MenuTitle: "메뉴",
|
||||
RemotesTitle: "원격",
|
||||
RemoteBranchesTitle: "원격 브랜치",
|
||||
PatchBuildingTitle: "메인 패널 (Patch Building)",
|
||||
InformationTitle: "정보",
|
||||
SecondaryTitle: "Secondary",
|
||||
ReflogCommitsTitle: "Reflog",
|
||||
GlobalTitle: "글로벌 키 바인딩",
|
||||
ConflictsResolved: "모든 병합 충돌이 해결되었습니다. 계속 할까요?",
|
||||
ConfirmMerge: "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?",
|
||||
FwdNoUpstream: "Cannot fast-forward a branch with no upstream",
|
||||
FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally",
|
||||
FwdCommitsToPush: "Cannot fast-forward a branch with commits to push",
|
||||
ErrorOccurred: "오류가 발생했습니다! issue를 작성해 주세요: ",
|
||||
NoRoom: "Not enough room",
|
||||
YouAreHere: "현재 위치",
|
||||
RewordNotSupported: "Rewording commits while interactively rebasing is not currently supported",
|
||||
CherryPickCopy: "커밋을 복사 (cherry-pick)",
|
||||
PasteCommits: "커밋을 붙여넣기 (cherry-pick)",
|
||||
SureCherryPick: "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?",
|
||||
CherryPick: "체리픽",
|
||||
Donate: "후원",
|
||||
AskQuestion: "질문하기",
|
||||
PrevLine: "이전 줄 선택",
|
||||
NextLine: "다음 줄 선택",
|
||||
PrevHunk: "이전 hunk를 선택",
|
||||
NextHunk: "다음 hunk를 선택",
|
||||
PrevConflict: "이전 충돌을 선택",
|
||||
NextConflict: "다음 충돌을 선택",
|
||||
SelectPrevHunk: "이전 hunk를 선택",
|
||||
SelectNextHunk: "다음 hunk를 선택",
|
||||
ScrollDown: "아래로 스크롤",
|
||||
ScrollUp: "위로 스크롤",
|
||||
ScrollUpMainWindow: "메인 패널을 위로 스크롤",
|
||||
ScrollDownMainWindow: "메인 패널을 아래로로 스크롤",
|
||||
AmendCommitTitle: "Amend commit",
|
||||
AmendCommitPrompt: "Are you sure you want to amend this commit with your staged files?",
|
||||
DropCommitTitle: "커밋 삭제",
|
||||
DropCommitPrompt: "정말로 선택한 커밋을 삭제하시겠습니까?",
|
||||
PullingStatus: "업데이트 중",
|
||||
PushingStatus: "푸시 중",
|
||||
FetchingStatus: "패치 중",
|
||||
SquashingStatus: "Squashing",
|
||||
FixingStatus: "Fixing up",
|
||||
DeletingStatus: "Deleting",
|
||||
MovingStatus: "Moving",
|
||||
RebasingStatus: "Rebasing",
|
||||
AmendingStatus: "Amending",
|
||||
CherryPickingStatus: "Cherry-picking",
|
||||
UndoingStatus: "Undoing",
|
||||
RedoingStatus: "Redoing",
|
||||
CheckingOutStatus: "Checking out",
|
||||
CommittingStatus: "Committing",
|
||||
CommitFiles: "Commit files",
|
||||
SubCommitsDynamicTitle: "커밋 (%s)",
|
||||
CommitFilesDynamicTitle: "Diff files (%s)",
|
||||
RemoteBranchesDynamicTitle: "원격브랜치 (%s)",
|
||||
ViewItemFiles: "View selected item's files",
|
||||
CommitFilesTitle: "커밋 파일",
|
||||
CheckoutCommitFileTooltip: "Checkout file",
|
||||
DiscardOldFileChangeTooltip: "Discard this commit's changes to this file",
|
||||
DiscardFileChangesTitle: "파일 변경 사항 버리기",
|
||||
DiscardFileChangesPrompt: "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted",
|
||||
DisabledForGPG: "Feature not available for users using GPG",
|
||||
CreateRepo: "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ",
|
||||
AutoStashTitle: "Autostash?",
|
||||
AutoStashPrompt: "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)",
|
||||
StashPrefix: "Auto-stashing changes for ",
|
||||
Discard: "View 'discard changes' options",
|
||||
Cancel: "취소",
|
||||
DiscardAllChanges: "모든 변경사항 버리기",
|
||||
DiscardUnstagedChanges: "Discard unstaged changes",
|
||||
DiscardAllChangesToAllFiles: "Nuke working tree",
|
||||
DiscardAnyUnstagedChanges: "Discard unstaged changes",
|
||||
DiscardUntrackedFiles: "Discard untracked files",
|
||||
HardReset: "Hard reset",
|
||||
ViewResetOptions: `View reset options`,
|
||||
CreateFixupCommitTooltip: `Create fixup commit for this commit`,
|
||||
SquashAboveCommitsTooltip: `Squash all 'fixup!' commits above selected commit (autosquash)`,
|
||||
CreateFixupCommit: `Create fixup commit`,
|
||||
ExecuteCustomCommand: "Execute custom command",
|
||||
CustomCommand: "Custom command:",
|
||||
CommitChangesWithoutHook: "Commit changes without pre-commit hook",
|
||||
SkipHookPrefixNotConfigured: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config",
|
||||
ResetTo: `Reset to`,
|
||||
PressEnterToReturn: "엔터를 눌러 lazygit으로 돌아갑니다.",
|
||||
ViewStashOptions: "Stash 옵션 보기",
|
||||
StashAllChanges: "변경사항을 Stash",
|
||||
StashStagedChanges: "Stash staged changes",
|
||||
StashOptions: "Stash 옵션",
|
||||
NotARepository: "Error: must be run inside a git repository",
|
||||
Jump: "패널로 이동",
|
||||
ScrollLeftRight: "좌우로 스크롤",
|
||||
ScrollLeft: "우 스크롤",
|
||||
ScrollRight: "좌 스크롤",
|
||||
DiscardPatch: "Patch 버리기",
|
||||
DiscardPatchConfirm: "You can only build a patch from one commit/stash-entry at a time. Discard current patch?",
|
||||
CantPatchWhileRebasingError: "You cannot build a patch or run patch commands while in a merging or rebasing state",
|
||||
ToggleAddToPatch: "Toggle file included in patch",
|
||||
ToggleAllInPatch: "Toggle all files included in patch",
|
||||
UpdatingPatch: "Updating patch",
|
||||
ViewPatchOptions: "커스텀 Patch 옵션 보기",
|
||||
PatchOptionsTitle: "Patch 옵션",
|
||||
NoPatchError: "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines",
|
||||
EnterCommitFile: "Enter file to add selected lines to the patch (or toggle directory collapsed)",
|
||||
NotEnoughSpace: "패널을 렌더링 할 공간이 부족합니다.",
|
||||
DiffTitle: "Diff",
|
||||
FilesTitle: "파일",
|
||||
BranchesTitle: "브랜치",
|
||||
CommitsTitle: "커밋",
|
||||
StashTitle: "Stash",
|
||||
UnstagedChanges: `Staged되지 않은 변경 내용`,
|
||||
StagedChanges: `Staged된 변경 내용`,
|
||||
MainTitle: "메인",
|
||||
MergeConfirmTitle: "병합",
|
||||
StagingTitle: "메인 패널 (Staging)",
|
||||
MergingTitle: "메인 패널 (Merging)",
|
||||
NormalTitle: "메인 패널 (Normal)",
|
||||
LogTitle: "로그",
|
||||
CommitSummary: "커밋 메시지",
|
||||
CredentialsUsername: "사용자 이름",
|
||||
CredentialsPassword: "패스워드",
|
||||
CredentialsPassphrase: "SSH키의 passphrase 입력",
|
||||
PassUnameWrong: "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.",
|
||||
Commit: "커밋 변경내용",
|
||||
AmendLastCommit: "마지맛 커밋 수정",
|
||||
AmendLastCommitTitle: "마지막 커밋 수정",
|
||||
SureToAmend: "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.",
|
||||
NoCommitToAmend: "Amend 가능한 커밋이 없습니다.",
|
||||
CommitChangesWithEditor: "Git 편집기를 사용하여 변경 내용을 커밋합니다.",
|
||||
StatusTitle: "상태",
|
||||
Menu: "메뉴",
|
||||
Execute: "실행",
|
||||
Stage: "Staged 전환",
|
||||
ToggleStagedAll: "모든 변경을 Staged/unstaged으로 전환",
|
||||
ToggleTreeView: "파일 트리뷰로 전환",
|
||||
OpenMergeTool: "Git mergetool를 열기",
|
||||
Refresh: "새로고침",
|
||||
Push: "푸시",
|
||||
Pull: "업데이트",
|
||||
Scroll: "스크롤",
|
||||
MergeConflictsTitle: "병합 충돌 내용",
|
||||
Checkout: "체크아웃",
|
||||
FileFilter: "파일을 필터하기 (Staged/unstaged)",
|
||||
FilterStagedFiles: "Staged된 파일만 표시",
|
||||
FilterUnstagedFiles: "Stage되지 않은 파일만 표시",
|
||||
ResetFilter: "필터 리셋",
|
||||
NoChangedFiles: "변경된 파일이 없습니다.",
|
||||
SoftReset: "소프트 리셋",
|
||||
AlreadyCheckedOutBranch: "브랜치가 이미 체크아웃 되었습니다",
|
||||
SureForceCheckout: "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.",
|
||||
ForceCheckoutBranch: "브랜치 강제 체크아웃",
|
||||
BranchName: "브랜치 이름",
|
||||
NewBranchNameBranchOff: "새 브랜치 이름 (branch is off of '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "체크아웃하는 브랜치는 삭제할 수 없습니다!",
|
||||
ForceDeleteBranchMessage: "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?",
|
||||
RebaseBranch: "체크아웃된 브랜치를 이 브랜치에 리베이스",
|
||||
CantRebaseOntoSelf: "브랜치를 자기 자신에게 리베이스할 수는 없습니다.",
|
||||
CantMergeBranchIntoItself: "브랜치를 자기 자신에게 병합할 수는 없습니다.",
|
||||
ForceCheckout: "강제 체크아웃",
|
||||
CheckoutByName: "이름으로 체크아웃",
|
||||
NewBranch: "새 브랜치 생성",
|
||||
NoBranchesThisRepo: "저장소에 브랜치가 존재하지 않습니다.",
|
||||
CommitWithoutMessageErr: "커밋 메시지를 입력하세요.",
|
||||
CloseCancel: "닫기/취소",
|
||||
Confirm: "확인",
|
||||
Close: "닫기",
|
||||
Quit: "종료",
|
||||
NoCommitsThisBranch: "이 브랜치에 커밋이 없습니다.",
|
||||
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
|
||||
Fixup: "Fixup",
|
||||
SureFixupThisCommit: "Are you sure you want to 'fixup' this commit? It will be merged into the commit below",
|
||||
SureSquashThisCommit: "Are you sure you want to squash this commit into the commit below?",
|
||||
Squash: "Squash",
|
||||
PickCommitTooltip: "Pick commit (when mid-rebase)",
|
||||
RevertCommit: "커밋 되돌리기",
|
||||
Reword: "커밋메시지 변경",
|
||||
DropCommit: "커밋 삭제",
|
||||
MoveDownCommit: "커밋을 1개 아래로 이동",
|
||||
MoveUpCommit: "커밋을 1개 위로 이동",
|
||||
EditCommitTooltip: "커밋을 편집",
|
||||
AmendCommitTooltip: "Amend commit with staged changes",
|
||||
ResetAuthor: "Reset commit author",
|
||||
SureResetCommitAuthor: "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?",
|
||||
RewordCommitEditor: "에디터에서 커밋메시지 수정",
|
||||
Error: "오류",
|
||||
PickHunk: "Pick hunk",
|
||||
PickAllHunks: "Pick all hunks",
|
||||
Undo: "되돌리기",
|
||||
UndoReflog: "되돌리기 (reflog) (실험적)",
|
||||
RedoReflog: "다시 실행 (reflog) (실험적)",
|
||||
Pop: "Pop",
|
||||
Drop: "Drop",
|
||||
Apply: "적용",
|
||||
NoStashEntries: "Stash가 존재하지 않습니다.",
|
||||
StashDrop: "Stash를 삭제",
|
||||
SureDropStashEntry: "정말로 Stash를 삭제하시겠습니까?",
|
||||
StashPop: "Stash를 pop",
|
||||
SurePopStashEntry: "정말로 Stash를 pop하시겠습니까?",
|
||||
StashApply: "Stash 적용",
|
||||
SureApplyStashEntry: "정말로 Stash를 적용하시겠습니까?",
|
||||
NoTrackedStagedFilesStash: "You have no tracked/staged files to stash",
|
||||
StashChanges: "변경을 Stash",
|
||||
RenameStash: "Rename stash",
|
||||
RenameStashPrompt: "Rename stash: {{.stashName}}",
|
||||
OpenConfig: "설정 파일 열기",
|
||||
EditConfig: "설정 파일 수정",
|
||||
ForcePush: "강제 푸시",
|
||||
ForcePushPrompt: "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.",
|
||||
ForcePushDisabled: "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.",
|
||||
UpdatesRejectedAndForcePushDisabled: "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.",
|
||||
CheckForUpdate: "업데이트 확인",
|
||||
CheckingForUpdates: "업데이트 확인 중...",
|
||||
UpdateAvailableTitle: "새로운 업데이트 사용가능!",
|
||||
UpdateAvailable: "버전 {{.newVersion}} 을(를) 설치하시겠습니까?",
|
||||
UpdateInProgressWaitingStatus: "업데이트 중",
|
||||
UpdateCompletedTitle: "업데이트 완료!",
|
||||
UpdateCompleted: "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.",
|
||||
FailedToRetrieveLatestVersionErr: "버전 정보를 받아오는데 실패했습니다.",
|
||||
OnLatestVersionErr: "이미 최신 버전을 사용하고 있습니다.",
|
||||
MajorVersionErr: "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.",
|
||||
CouldNotFindBinaryErr: "{{.url}} 에서 바이너리를 찾을 수 없습니다.",
|
||||
UpdateFailedErr: "업데이트 실패: {{.errMessage}}",
|
||||
ConfirmQuitDuringUpdateTitle: "현재 업데이트 중입니다.",
|
||||
ConfirmQuitDuringUpdate: "현재 업데이트를 진행 중입니다.종료하시겠습니까?",
|
||||
MergeToolTitle: "병합 도구",
|
||||
MergeToolPrompt: "정말로 `git mergetool`을 여시겠습니까?",
|
||||
IntroPopupMessage: koreanIntroPopupMessage,
|
||||
GitconfigParseErr: `따옴표로 묶이지 않은 '\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.`,
|
||||
EditFile: `파일 편집`,
|
||||
OpenFile: `파일 닫기`,
|
||||
IgnoreFile: `.gitignore에 추가`,
|
||||
RefreshFiles: `파일 새로고침`,
|
||||
Merge: `현재 브랜치에 병합`,
|
||||
ConfirmQuit: `정말로 종료하시겠습니까?`,
|
||||
SwitchRepo: `최근에 사용한 저장소로 전환`,
|
||||
AllBranchesLogGraph: `모든 브랜치 로그 표시`,
|
||||
UnsupportedGitService: `지원되지 않는 Git 서비스입니다.`,
|
||||
CreatePullRequest: `풀 리퀘스트 생성`,
|
||||
CopyPullRequestURL: `풀 리퀘스트 URL을 클립보드에 복사`,
|
||||
NoBranchOnRemote: `브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.`,
|
||||
Fetch: `Fetch`,
|
||||
NoAutomaticGitFetchTitle: `자동 git 업데이트) 없음`,
|
||||
NoAutomaticGitFetchBody: `Lazygit은 private 저장소에서 "git fetch"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 "git fetch"를 수동으로 실행하세요.`,
|
||||
FileEnter: `Stage individual hunks/lines for file, or collapse/expand for directory`,
|
||||
FileStagingRequirements: `추적된 파일에 대해 개별 라인만 stage할 수 있습니다.`,
|
||||
StageSelectionTooltip: `선택한 행을 staged / unstaged`,
|
||||
DiscardSelection: `변경을 삭제 (git reset)`,
|
||||
ToggleRangeSelect: `드래그 선택 전환`,
|
||||
ToggleSelectHunk: `Toggle select hunk`,
|
||||
ToggleSelectionForPatch: `Line(s)을 패치에 추가/삭제`,
|
||||
ToggleStagingView: `패널 전환`,
|
||||
ReturnToFilesPanel: `파일 목록으로 돌아가기`,
|
||||
FastForward: `Fast-forward this branch from its upstream`,
|
||||
FastForwarding: "Fast-forwarding",
|
||||
FoundConflictsTitle: "Auto-merge failed",
|
||||
ViewMergeRebaseOptions: "View merge/rebase options",
|
||||
NotMergingOrRebasing: "You are currently neither rebasing nor merging",
|
||||
RecentRepos: "최근에 사용한 저장소",
|
||||
MergeOptionsTitle: "Merge options",
|
||||
RebaseOptionsTitle: "Rebase options",
|
||||
CommitSummaryTitle: "커밋메시지",
|
||||
LocalBranchesTitle: "브랜치",
|
||||
SearchTitle: "검색",
|
||||
TagsTitle: "태그",
|
||||
MenuTitle: "메뉴",
|
||||
RemotesTitle: "원격",
|
||||
RemoteBranchesTitle: "원격 브랜치",
|
||||
PatchBuildingTitle: "메인 패널 (Patch Building)",
|
||||
InformationTitle: "정보",
|
||||
SecondaryTitle: "Secondary",
|
||||
ReflogCommitsTitle: "Reflog",
|
||||
GlobalTitle: "글로벌 키 바인딩",
|
||||
ConflictsResolved: "모든 병합 충돌이 해결되었습니다. 계속 할까요?",
|
||||
ConfirmMerge: "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?",
|
||||
FwdNoUpstream: "Cannot fast-forward a branch with no upstream",
|
||||
FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally",
|
||||
FwdCommitsToPush: "Cannot fast-forward a branch with commits to push",
|
||||
ErrorOccurred: "오류가 발생했습니다! issue를 작성해 주세요: ",
|
||||
NoRoom: "Not enough room",
|
||||
YouAreHere: "현재 위치",
|
||||
RewordNotSupported: "Rewording commits while interactively rebasing is not currently supported",
|
||||
CherryPickCopy: "커밋을 복사 (cherry-pick)",
|
||||
PasteCommits: "커밋을 붙여넣기 (cherry-pick)",
|
||||
SureCherryPick: "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?",
|
||||
CherryPick: "체리픽",
|
||||
Donate: "후원",
|
||||
AskQuestion: "질문하기",
|
||||
PrevLine: "이전 줄 선택",
|
||||
NextLine: "다음 줄 선택",
|
||||
PrevHunk: "이전 hunk를 선택",
|
||||
NextHunk: "다음 hunk를 선택",
|
||||
PrevConflict: "이전 충돌을 선택",
|
||||
NextConflict: "다음 충돌을 선택",
|
||||
SelectPrevHunk: "이전 hunk를 선택",
|
||||
SelectNextHunk: "다음 hunk를 선택",
|
||||
ScrollDown: "아래로 스크롤",
|
||||
ScrollUp: "위로 스크롤",
|
||||
ScrollUpMainWindow: "메인 패널을 위로 스크롤",
|
||||
ScrollDownMainWindow: "메인 패널을 아래로로 스크롤",
|
||||
AmendCommitTitle: "Amend commit",
|
||||
AmendCommitPrompt: "Are you sure you want to amend this commit with your staged files?",
|
||||
DropCommitTitle: "커밋 삭제",
|
||||
DropCommitPrompt: "정말로 선택한 커밋을 삭제하시겠습니까?",
|
||||
PullingStatus: "업데이트 중",
|
||||
PushingStatus: "푸시 중",
|
||||
FetchingStatus: "패치 중",
|
||||
SquashingStatus: "Squashing",
|
||||
FixingStatus: "Fixing up",
|
||||
DeletingStatus: "Deleting",
|
||||
MovingStatus: "Moving",
|
||||
RebasingStatus: "Rebasing",
|
||||
AmendingStatus: "Amending",
|
||||
CherryPickingStatus: "Cherry-picking",
|
||||
UndoingStatus: "Undoing",
|
||||
RedoingStatus: "Redoing",
|
||||
CheckingOutStatus: "Checking out",
|
||||
CommittingStatus: "Committing",
|
||||
CommitFiles: "Commit files",
|
||||
SubCommitsDynamicTitle: "커밋 (%s)",
|
||||
CommitFilesDynamicTitle: "Diff files (%s)",
|
||||
RemoteBranchesDynamicTitle: "원격브랜치 (%s)",
|
||||
ViewItemFiles: "View selected item's files",
|
||||
CommitFilesTitle: "커밋 파일",
|
||||
CheckoutCommitFileTooltip: "Checkout file",
|
||||
DiscardOldFileChangeTooltip: "Discard this commit's changes to this file",
|
||||
DiscardFileChangesTitle: "파일 변경 사항 버리기",
|
||||
DiscardFileChangesPrompt: "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted",
|
||||
DisabledForGPG: "Feature not available for users using GPG",
|
||||
CreateRepo: "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ",
|
||||
AutoStashTitle: "Autostash?",
|
||||
AutoStashPrompt: "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)",
|
||||
StashPrefix: "Auto-stashing changes for ",
|
||||
Discard: "View 'discard changes' options",
|
||||
Cancel: "취소",
|
||||
DiscardAllChanges: "모든 변경사항 버리기",
|
||||
DiscardUnstagedChanges: "Discard unstaged changes",
|
||||
DiscardAllChangesToAllFiles: "Nuke working tree",
|
||||
DiscardAnyUnstagedChanges: "Discard unstaged changes",
|
||||
DiscardUntrackedFiles: "Discard untracked files",
|
||||
HardReset: "Hard reset",
|
||||
ViewResetOptions: `View reset options`,
|
||||
CreateFixupCommitTooltip: `Create fixup commit for this commit`,
|
||||
SquashAboveCommitsTooltip: `Squash all 'fixup!' commits above selected commit (autosquash)`,
|
||||
CreateFixupCommit: `Create fixup commit`,
|
||||
SureCreateFixupCommit: `Are you sure you want to create a fixup! commit for commit {{.commit}}?`,
|
||||
ExecuteCustomCommand: "Execute custom command",
|
||||
CustomCommand: "Custom command:",
|
||||
CommitChangesWithoutHook: "Commit changes without pre-commit hook",
|
||||
SkipHookPrefixNotConfigured: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config",
|
||||
ResetTo: `Reset to`,
|
||||
PressEnterToReturn: "엔터를 눌러 lazygit으로 돌아갑니다.",
|
||||
ViewStashOptions: "Stash 옵션 보기",
|
||||
StashAllChanges: "변경사항을 Stash",
|
||||
StashStagedChanges: "Stash staged changes",
|
||||
StashOptions: "Stash 옵션",
|
||||
NotARepository: "Error: must be run inside a git repository",
|
||||
Jump: "패널로 이동",
|
||||
ScrollLeftRight: "좌우로 스크롤",
|
||||
ScrollLeft: "우 스크롤",
|
||||
ScrollRight: "좌 스크롤",
|
||||
DiscardPatch: "Patch 버리기",
|
||||
DiscardPatchConfirm: "You can only build a patch from one commit/stash-entry at a time. Discard current patch?",
|
||||
CantPatchWhileRebasingError: "You cannot build a patch or run patch commands while in a merging or rebasing state",
|
||||
ToggleAddToPatch: "Toggle file included in patch",
|
||||
ToggleAllInPatch: "Toggle all files included in patch",
|
||||
UpdatingPatch: "Updating patch",
|
||||
ViewPatchOptions: "커스텀 Patch 옵션 보기",
|
||||
PatchOptionsTitle: "Patch 옵션",
|
||||
NoPatchError: "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines",
|
||||
EnterCommitFile: "Enter file to add selected lines to the patch (or toggle directory collapsed)",
|
||||
// ExitCustomPatchBuilder: ``,
|
||||
EnterUpstream: `'<remote> <branchname>'와 같은 형식으로 입력하세요.`,
|
||||
InvalidUpstream: "Upstream의 형식이 잘못되었습니다.'<remote> <branchname>' 와 같은 형식으로 입력하세요.",
|
||||
@@ -417,6 +419,7 @@ func koreanTranslationSet() TranslationSet {
|
||||
PushingTagStatus: "Pushing tag",
|
||||
PullRequestURLCopiedToClipboard: "풀 리퀘스트의 URL을 클립보드에 복사했습니다.",
|
||||
CommitDiffCopiedToClipboard: "커밋의 Diff를 클립보드에 복사했습니다.",
|
||||
CommitSHACopiedToClipboard: "커밋의 SHA를 클립보드에 복사했습니다.",
|
||||
CommitURLCopiedToClipboard: "커밋의 URL를 클립보드에 복사했습니다.",
|
||||
CommitMessageCopiedToClipboard: "커밋 메시지를 클립보드에 복사했습니다.",
|
||||
CommitAuthorCopiedToClipboard: "커밋 작성자를 클립보드에 복사했습니다.",
|
||||
|
||||
+160
-877
File diff suppressed because it is too large
Load Diff
+386
-383
@@ -35,389 +35,391 @@ const russianDeprecatedEditConfigWarning = `
|
||||
// exporting this so we can use it in tests
|
||||
func RussianTranslationSet() TranslationSet {
|
||||
return TranslationSet{
|
||||
NotEnoughSpace: "Недостаточно места для отрисовки панелей",
|
||||
DiffTitle: "Сравнения",
|
||||
FilesTitle: "Файлы",
|
||||
BranchesTitle: "Ветки",
|
||||
CommitsTitle: "Коммиты",
|
||||
StashTitle: "Хранилище",
|
||||
SnakeTitle: "Змейка",
|
||||
EasterEgg: "Пасхалка",
|
||||
UnstagedChanges: `Непроиндексированные Изменения`,
|
||||
StagedChanges: `Проиндексированные Изменения`,
|
||||
MainTitle: "Главная",
|
||||
MergeConfirmTitle: "Слияние",
|
||||
StagingTitle: "Главная панель (Индексирование)",
|
||||
MergingTitle: "Главная панель (Слияние)",
|
||||
NormalTitle: "Главная панель (Обычный)",
|
||||
LogTitle: "Журнал",
|
||||
CommitSummary: "Сводка коммита",
|
||||
CredentialsUsername: "Имя пользователя",
|
||||
CredentialsPassword: "Пароль",
|
||||
CredentialsPassphrase: "Введите пароль для SSH ключа",
|
||||
CredentialsPIN: "Введите PIN-код для SSH ключа",
|
||||
PassUnameWrong: "Неверный пароль, кодовая фраза и/или имя пользователя",
|
||||
Commit: "Сохранить изменения",
|
||||
AmendLastCommit: "Правка последнего коммита",
|
||||
AmendLastCommitTitle: "Правка Последнего Коммита",
|
||||
SureToAmend: "Вы уверены, что хотите править последний коммит? Впоследствии можно изменить сообщение коммита на панели коммитов.",
|
||||
NoCommitToAmend: "Не найден коммит для внесения поправок.",
|
||||
CommitChangesWithEditor: "Сохранить изменения с помощью редактора git",
|
||||
StatusTitle: "Статус",
|
||||
Menu: "Меню",
|
||||
Execute: "Выполнить",
|
||||
Stage: "Переключить индекс",
|
||||
ToggleStagedAll: "Все проиндексированные/непроиндексированные",
|
||||
ToggleTreeView: "Переключить вид дерева файлов",
|
||||
OpenMergeTool: "Открыть внешний инструмент слияния (git mergetool)",
|
||||
Refresh: "Обновить",
|
||||
Push: "Отправить изменения",
|
||||
Pull: "Получить и слить изменения",
|
||||
Scroll: "Прокрутить",
|
||||
MergeConflictsTitle: "Конфликты Слияния",
|
||||
Checkout: "Переключить",
|
||||
FileFilter: "Фильтровать файлы (проиндексированные/непроиндексированные)",
|
||||
FilterStagedFiles: "Показывать только проиндексированные файлы",
|
||||
FilterUnstagedFiles: "Показывать только непроиндексированные файлы",
|
||||
ResetFilter: "Сбросить фильтр",
|
||||
NoChangedFiles: "Нет изменённых файлов",
|
||||
SoftReset: "Мягкий сброс",
|
||||
AlreadyCheckedOutBranch: "Вы уже переключились в эту ветку",
|
||||
SureForceCheckout: "Вы уверены, что хотите принудительная переключить? Вы потеряете все локальные изменения",
|
||||
ForceCheckoutBranch: "Принудительное Переключение Ветки",
|
||||
BranchName: "Название ветки",
|
||||
NewBranchNameBranchOff: "Название новой ветки (Ветка с '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "Невозможно удалить переключённую ветку!",
|
||||
ForceDeleteBranchMessage: "'{{.selectedBranchName}}' не полностью слилась. Вы уверены, что хотите удалить его?",
|
||||
RebaseBranch: "Перебазировать переключённую ветку на эту ветку",
|
||||
CantRebaseOntoSelf: "Невозможно перебазировать ветку на себя",
|
||||
CantMergeBranchIntoItself: "Невозможно объединить ветку в себя",
|
||||
ForceCheckout: "Принудительное переключение",
|
||||
CheckoutByName: "Переключить по названию",
|
||||
NewBranch: "Новая ветка",
|
||||
NoBranchesThisRepo: "Нет веток для этого репозитория",
|
||||
CommitWithoutMessageErr: "Вы не можете сохранить изменения без сообщения коммита",
|
||||
Close: "Закрыть",
|
||||
CloseCancel: "Закрыть/отменить",
|
||||
Confirm: "Подтвердить",
|
||||
Quit: "Выйти",
|
||||
NoCommitsThisBranch: "Нет коммитов для этой ветки",
|
||||
UpdateRefHere: "Обновить ветку '{{.ref}}' здесь",
|
||||
CannotSquashOrFixupFirstCommit: "Ниже нет коммита, который можно было бы объединить",
|
||||
Fixup: "Объединить несколько коммитов в один отбросив сообщение коммита (Fixup) ",
|
||||
SureFixupThisCommit: "Вы уверены, что хотите объединить несколько коммитов, отбросив сообщение коммита? Он будет объединён с коммитом ниже",
|
||||
SureSquashThisCommit: "Вы уверены, что хотите объединить несколько коммитов в нижний коммит?",
|
||||
Squash: "Объединить коммиты (Squash)",
|
||||
PickCommitTooltip: "Выбрать коммит (в середине перебазирования)",
|
||||
RevertCommit: "Отменить коммит",
|
||||
Reword: "Перефразировать коммит",
|
||||
DropCommit: "Удалить коммит",
|
||||
MoveDownCommit: "Переместить коммит вниз на один",
|
||||
MoveUpCommit: "Переместить коммит вверх на один",
|
||||
EditCommitTooltip: "Изменить коммит",
|
||||
AmendCommitTooltip: "Править последний коммит с проиндексированными изменениями",
|
||||
ResetAuthor: "Сброс автора коммита",
|
||||
SetAuthor: "Установить автора",
|
||||
AmendCommitAttribute: "Установить/убрать автора коммита",
|
||||
SetAuthorPromptTitle: "Установить автора (должно выглядеть как «Имя <Email>»)",
|
||||
SureResetCommitAuthor: "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?",
|
||||
RewordCommitEditor: "Переписать коммит с помощью редактора",
|
||||
Error: "Ошибка",
|
||||
PickHunk: "Выбрать эту часть",
|
||||
PickAllHunks: "Выбрать все части",
|
||||
Undo: "Отменить",
|
||||
UndoReflog: "Отменить (через reflog) (экспериментальный)",
|
||||
RedoReflog: "Повторить (через reflog) (экспериментальный)",
|
||||
UndoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git запустить, чтобы отменить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.",
|
||||
RedoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git нужно запустить, чтобы повторить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.",
|
||||
DiscardAllTooltip: "Отменить проиндексированные и непроиндексированные изменения в '{{.path}}'.",
|
||||
DiscardUnstagedTooltip: "Отменить непроиндексированные изменения в '{{.path}}'.",
|
||||
Pop: "Применить припрятанные изменения и тут же удалить их из хранилища",
|
||||
Drop: "Удалить припрятанные изменения из хранилища",
|
||||
Apply: "Применить припрятанные изменения",
|
||||
NoStashEntries: "Нет записей в хранилище",
|
||||
StashDrop: "Сбросить хранилище",
|
||||
SureDropStashEntry: "Вы уверены, что хотите удалить эту запись хранилища?",
|
||||
StashPop: "Применить припрятанные изменения и тут же удалить их из хранилища",
|
||||
SurePopStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения и тут же удалить их из хранилища?",
|
||||
StashApply: "Применить припрятанные изменения",
|
||||
SureApplyStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения?",
|
||||
NoTrackedStagedFilesStash: "У вас нет отслеженных/проиндексированных файлов для хранения",
|
||||
NoFilesToStash: "У вас нет файлов для хранения",
|
||||
StashChanges: "Припрятать изменения",
|
||||
RenameStash: "Переименовать хранилище",
|
||||
RenameStashPrompt: "Переименовать хранилище: {{.stashName}}",
|
||||
OpenConfig: "Открыть файл конфигурации",
|
||||
EditConfig: "Редактировать файл конфигурации",
|
||||
ForcePush: "Принудительная отправка изменении",
|
||||
ForcePushPrompt: "Ветка отклонилась от удалённой ветки. Нажмите «esc», чтобы отменить, или «enter», чтобы начать принудительную отправку изменении.",
|
||||
ForcePushDisabled: "Ветка отклонилась от удалённой ветки. Принудительная отправка изменении была отключена",
|
||||
CheckForUpdate: "Проверить обновления",
|
||||
CheckingForUpdates: "Проверка обновлений...",
|
||||
UpdateAvailableTitle: "Доступно обновление!",
|
||||
UpdateAvailable: "Скачать и установить версию {{.newVersion}}?",
|
||||
UpdateInProgressWaitingStatus: "Обновление",
|
||||
UpdateCompletedTitle: "Обновление завершено!",
|
||||
UpdateCompleted: "Обновление успешно установлено. Перезапустите lazygit, чтобы обновление вступило в силу.",
|
||||
FailedToRetrieveLatestVersionErr: "Не удалось получить информацию о версии",
|
||||
OnLatestVersionErr: "Установлена последняя версия",
|
||||
MajorVersionErr: "Новая версия ({{.newVersion}}) содержит несовместимые с предыдущими версии изменения по сравнению с текущей версией ({{.currentVersion}})",
|
||||
CouldNotFindBinaryErr: "Не удалось найти бинарный файл на {{.url}}",
|
||||
UpdateFailedErr: "Не удалось обновить: {{.errMessage}}",
|
||||
ConfirmQuitDuringUpdateTitle: "Идёт Обновление",
|
||||
ConfirmQuitDuringUpdate: "Выполняется обновление. Вы уверены, что хотите выйти?",
|
||||
MergeToolTitle: "Инструмент слияния",
|
||||
MergeToolPrompt: "Вы уверены, что хотите открыть `git mergetool`?",
|
||||
IntroPopupMessage: russianIntroPopupMessage,
|
||||
DeprecatedEditConfigWarning: russianDeprecatedEditConfigWarning,
|
||||
GitconfigParseErr: `Gogit не удалось проанализировать ваш файл gitconfig из-за наличия символов «\» без кавычек. Их удаление должно решить проблему.`,
|
||||
EditFile: `Редактировать файл`,
|
||||
OpenFile: `Открыть файл`,
|
||||
IgnoreFile: `Добавить в .gitignore`,
|
||||
ExcludeFile: `Добавить в .git/info/exclude`,
|
||||
RefreshFiles: `Обновить файлы`,
|
||||
Merge: `Слияние с текущей переключённой веткой`,
|
||||
ConfirmQuit: `Вы уверены, что хотите выйти?`,
|
||||
SwitchRepo: `Переключиться на последний репозиторий`,
|
||||
AllBranchesLogGraph: `Показать все логи ветки`,
|
||||
UnsupportedGitService: `Неподдерживаемая служба git`,
|
||||
CreatePullRequest: `Создать запрос на принятие изменений`,
|
||||
CopyPullRequestURL: `Скопировать URL запроса на принятие изменений в буфер обмена`,
|
||||
NoBranchOnRemote: `Этой ветки не существует в удалённом репозитории. Сначала вам нужно его отправить в удалённый репозитории.`,
|
||||
Fetch: `Получить изменения`,
|
||||
NoAutomaticGitFetchTitle: `Нет автоматического получения изменении`,
|
||||
NoAutomaticGitFetchBody: `Lazygit не может использовать «git fetch» в приватном репозитории; используйте «f» на панели файлов, чтобы запустить «git fetch» вручную`,
|
||||
FileEnter: `Проиндексировать отдельные части/строки для файла или свернуть/развернуть для каталога`,
|
||||
FileStagingRequirements: `Можно проиндексировать только отдельные строки для отслеживаемых файлов`,
|
||||
StageSelectionTooltip: `Переключить строку в проиндексированные / непроиндексированные`,
|
||||
DiscardSelection: `Отменить изменение (git reset)`,
|
||||
ToggleRangeSelect: `Переключить выборку перетаскивания`,
|
||||
ToggleSelectHunk: `Переключить выборку частей`,
|
||||
ToggleSelectionForPatch: `Добавить/удалить строку(и) для патча`,
|
||||
EditHunk: `Изменить эту часть`,
|
||||
ToggleStagingView: `Переключиться на другую панель (проиндексированные/непроиндексированные изменения)`,
|
||||
ReturnToFilesPanel: `Вернуться к панели файлов`,
|
||||
FastForward: `Перемотать эту ветку вперёд из её upstream-ветки`,
|
||||
FastForwarding: "Получить изменения и перемотать вперёд",
|
||||
FoundConflictsTitle: "Конфликты!",
|
||||
ViewConflictsMenuItem: "Просмотр конфликтов",
|
||||
AbortMenuItem: "Прервать %s",
|
||||
ViewMergeRebaseOptions: "Просмотреть параметры слияния/перебазирования",
|
||||
NotMergingOrRebasing: "В данный момент вы не выполняете ни перебазирования, ни слияние",
|
||||
AlreadyRebasing: "Невозможно выполнить это действие во время перебазирования",
|
||||
RecentRepos: "Последние репозитории",
|
||||
MergeOptionsTitle: "Параметры слияния",
|
||||
RebaseOptionsTitle: "Параметры перебазирования",
|
||||
CommitSummaryTitle: "Сводка коммита",
|
||||
CommitDescriptionTitle: "Описание коммита",
|
||||
CommitDescriptionSubTitle: "Нажмите вкладку, чтобы переключить фокус",
|
||||
LocalBranchesTitle: "Локальные Ветки",
|
||||
SearchTitle: "Поиск",
|
||||
TagsTitle: "Теги",
|
||||
MenuTitle: "Меню",
|
||||
RemotesTitle: "Удалённые репозитории",
|
||||
RemoteBranchesTitle: "Удалённые ветки",
|
||||
PatchBuildingTitle: "Главная панель (сборка патчей)",
|
||||
InformationTitle: "Информация",
|
||||
SecondaryTitle: "Вторичный",
|
||||
ReflogCommitsTitle: "Журнал ссылок (Reflog)",
|
||||
GlobalTitle: "Глобальные сочетания клавиш",
|
||||
ConflictsResolved: "Все конфликты слияния разрешены. Продолжить?",
|
||||
Continue: "Продолжить",
|
||||
Keybindings: "Связки клавиш",
|
||||
RebasingTitle: "Перебазировать '{{.checkedOutBranch}}' на '{{.ref}}'",
|
||||
SimpleRebase: "Простая перебазировка",
|
||||
InteractiveRebase: "Интерактивная перебазировка",
|
||||
InteractiveRebaseTooltip: "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.",
|
||||
ConfirmMerge: "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?",
|
||||
FwdNoUpstream: "Невозможно перемотать ветку без upstream-ветки",
|
||||
FwdNoLocalUpstream: "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально",
|
||||
FwdCommitsToPush: "Невозможно перемотать ветку с коммитами для отправки",
|
||||
ErrorOccurred: "Произошла ошибка! Пожалуйста, заявите о проблеме на",
|
||||
NoRoom: "Недостаточно места",
|
||||
YouAreHere: "ВЫ ЗДЕСЬ",
|
||||
YouDied: "ТЫ УМЕР!",
|
||||
RewordNotSupported: "Переформулировка коммитов при интерактивном перебазировании в настоящее время не поддерживается",
|
||||
ChangingThisActionIsNotAllowed: "Изменение этого типа записи todo перебазирования не допускается",
|
||||
CherryPickCopy: "Скопировать отобранные коммит (cherry-pick)",
|
||||
PasteCommits: "Вставить отобранные коммиты (cherry-pick)",
|
||||
SureCherryPick: "Вы уверены, что хотите выборочно применить (cherry-picked) отобранные коммиты в эту ветку?",
|
||||
CherryPick: "Выборочная отборка (Cherry-Pick)",
|
||||
Donate: "Пожертвовать",
|
||||
AskQuestion: "Задать вопрос",
|
||||
PrevLine: "Выбрать предыдущую строку",
|
||||
NextLine: "Выбрать следующую строку",
|
||||
PrevHunk: "Выбрать предыдущую часть",
|
||||
NextHunk: "Выбрать следующую часть",
|
||||
PrevConflict: "Выбрать предыдущий конфликт",
|
||||
NextConflict: "Выбрать следующий конфликт",
|
||||
SelectPrevHunk: "Выбрать предыдущую часть",
|
||||
SelectNextHunk: "Выбрать следующую часть",
|
||||
ScrollDown: "Прокрутить вниз",
|
||||
ScrollUp: "Прокрутить вверх",
|
||||
ScrollUpMainWindow: "Прокрутить вверх главную панель",
|
||||
ScrollDownMainWindow: "Прокрутить вниз главную панель",
|
||||
AmendCommitTitle: "Править коммит (amend)",
|
||||
AmendCommitPrompt: "Вы уверены, что хотите править этот коммит проиндексированными файлами?",
|
||||
DropCommitTitle: "Удалить коммит",
|
||||
DropCommitPrompt: "Вы уверены, что хотите удалить этот коммит?",
|
||||
PullingStatus: "Получение и слияние изменении",
|
||||
PushingStatus: "Отправка изменении",
|
||||
FetchingStatus: "Получение изменении",
|
||||
SquashingStatus: "Объединение коммитов",
|
||||
FixingStatus: "Объединение коммитов, отбросив сообщение коммита",
|
||||
DeletingStatus: "Удаление",
|
||||
MovingStatus: "Перемещение",
|
||||
RebasingStatus: "Перебазирование",
|
||||
MergingStatus: "Слияние",
|
||||
LowercaseRebasingStatus: "перебазировка", // lowercase because it shows up in parentheses
|
||||
LowercaseMergingStatus: "слияние", // lowercase because it shows up in parentheses
|
||||
AmendingStatus: "Правка коммита",
|
||||
CherryPickingStatus: "Выборочная отборка (cherry-picking)",
|
||||
UndoingStatus: "Отмена последней команды",
|
||||
RedoingStatus: "Выполнение последней команды",
|
||||
CheckingOutStatus: "Переключение",
|
||||
CommittingStatus: "Сохранение изменении",
|
||||
CommitFiles: "Сохранить изменения файлов",
|
||||
SubCommitsDynamicTitle: "Коммиты (%s)",
|
||||
CommitFilesDynamicTitle: "Различия файлов (%s)",
|
||||
RemoteBranchesDynamicTitle: "Удалённые ветки (%s)",
|
||||
ViewItemFiles: "Просмотреть файлы выбранного элемента",
|
||||
CommitFilesTitle: "Сохранить Изменения Файлов",
|
||||
CheckoutCommitFileTooltip: "Переключить файл",
|
||||
CanOnlyDiscardFromLocalCommits: "Изменения можно отменить только из локальных коммитов.",
|
||||
DiscardOldFileChangeTooltip: "Отменить изменения коммита в этом файле",
|
||||
DiscardFileChangesTitle: "Отменить изменения файла",
|
||||
DiscardFileChangesPrompt: "Вы уверены, что хотите удалить изменения в выбранных файлах из этого коммита?\n\nЭто действие запустит перебазирование и отменит изменения в этих файлах. Обратите внимание, что если последующие коммиты зависят от этих изменений, вам, возможно, придется разрешить конфликты.\nПримечание: это также сбросит все активные пользовательские патчи.",
|
||||
DisabledForGPG: "Функция недоступна для пользователей, использующих GPG",
|
||||
CreateRepo: "Не в git репозитории. Создать новый git репозиторий? (y/n):",
|
||||
BareRepo: "Вы пытались открыть Lazygit в пустом репозитории, но Lazygit ещё не поддерживает пустые репозитории. Открыть последний репозиторий? (y/n)",
|
||||
InitialBranch: "Название ветки? (оставьте пустым для git по умолчанию):",
|
||||
NoRecentRepositories: "Необходимо открыть lazygit в git репозитории. Нет валидных последних репозиториев. Выход.",
|
||||
IncorrectNotARepository: "Неверное значение 'notARepository'. Это должно быть одним из 'prompt', 'create', 'skip', или 'quit'.",
|
||||
AutoStashTitle: "Автосохранить изменения?",
|
||||
AutoStashPrompt: "Чтобы перенести изменения, их нужно сохранить и вынуть. Сделать это автоматически? (enter/esc)",
|
||||
StashPrefix: "Автосохранение изменений для",
|
||||
Discard: "Просмотреть параметры «отмены изменении»",
|
||||
Cancel: "Отменить",
|
||||
DiscardAllChanges: "Отменить все изменения",
|
||||
DiscardUnstagedChanges: "Отменить непроиндексированные изменения",
|
||||
DiscardAllChangesToAllFiles: "Разбомбить рабочее дерево?",
|
||||
DiscardAnyUnstagedChanges: "Отменить непроиндексированные изменения",
|
||||
DiscardUntrackedFiles: "Удалить неотслеживаемые файлы",
|
||||
DiscardStagedChanges: "Отменить проиндексированные изменения",
|
||||
HardReset: "Жёсткий сброс",
|
||||
ViewResetOptions: `Просмотреть параметры сброса`,
|
||||
CreateFixupCommitTooltip: `Создать fixup коммит для этого коммита`,
|
||||
SquashAboveCommitsTooltip: `Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение)`,
|
||||
CreateFixupCommit: `Создать fixup коммит`,
|
||||
ExecuteCustomCommand: "Выполнить пользовательскую команду",
|
||||
CustomCommand: "Пользовательская Команда:",
|
||||
CommitChangesWithoutHook: "Закоммитить изменения без предварительного хука коммита",
|
||||
SkipHookPrefixNotConfigured: "Вы не настроили префикс сообщения коммита для пропуска хуков. Установите `git.skipHookPrefix = 'WIP'` в вашей конфигурации",
|
||||
ResetTo: `Сбросить на`,
|
||||
PressEnterToReturn: "Нажмите Enter, чтобы вернуться в lazygit",
|
||||
ViewStashOptions: "Просмотреть параметры хранилища",
|
||||
StashAllChanges: "Припрятать все изменения",
|
||||
StashStagedChanges: "Припрятать проиндексированные изменения",
|
||||
StashAllChangesKeepIndex: "Припрятать все изменения и сохранить индекс",
|
||||
StashUnstagedChanges: "Припрятать непроиндексированные изменения",
|
||||
StashIncludeUntrackedChanges: "Припрятать все изменения, включая неотслеживаемые файлы",
|
||||
StashOptions: "Параметры хранилища",
|
||||
NotARepository: "Ошибка: необходимо запустить внутри git репозитория",
|
||||
Jump: "Перейти к панели",
|
||||
ScrollLeftRight: "Прокрутить влево/вправо",
|
||||
ScrollLeft: "Прокрутить влево",
|
||||
ScrollRight: "Прокрутить вправо",
|
||||
DiscardPatch: "Отменить патч",
|
||||
DiscardPatchConfirm: "Вы можете собрать патч только из одной записи коммита/хранилища за раз. Отменить текущий патч?",
|
||||
CantPatchWhileRebasingError: "Вы не можете создавать патчи или запускать команды патча, находясь в состоянии слияния или перемещения.",
|
||||
ToggleAddToPatch: "Переключить файлы включённые в патч",
|
||||
ToggleAllInPatch: "Переключить все файлы, включённые в патч",
|
||||
UpdatingPatch: "Обновление патча",
|
||||
ViewPatchOptions: "Просмотреть пользовательские параметры патча",
|
||||
PatchOptionsTitle: "Параметры патча",
|
||||
NoPatchError: "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.",
|
||||
EnterCommitFile: "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)",
|
||||
ExitCustomPatchBuilder: `Выйти из сборщика пользовательских патчей`,
|
||||
EnterUpstream: `Введите upstream как '<remote> <branchname>'`,
|
||||
InvalidUpstream: "Недействительный upstream. Должен быть в формате '<remote> <branchname>'",
|
||||
ReturnToRemotesList: `Вернуться к списку удалённых репозитории`,
|
||||
NewRemote: `Добавить новую удалённую ветку`,
|
||||
NewRemoteName: `Название новой удалённой ветки`,
|
||||
NewRemoteUrl: `Ссылка новой удалённой ветки`,
|
||||
EditRemoteName: `Введите новое название для удалённое ветки {{.remoteName}}:`,
|
||||
EditRemoteUrl: `Введите новую ссылку для удалённое ветки {{.remoteName}}:`,
|
||||
RemoveRemote: `Удалить удалённую ветку`,
|
||||
RemoveRemotePrompt: "Вы уверены, что хотите удалить удалённую ветку?",
|
||||
DeleteRemoteBranch: "Удалить Удалённую Ветку",
|
||||
DeleteRemoteBranchMessage: "Вы уверены, что хотите удалить удалённую ветку",
|
||||
SetAsUpstreamTooltip: "Установить как upstream-ветку переключённую ветку",
|
||||
SetUpstream: "Установить upstream-ветку из выбранной ветки",
|
||||
UnsetUpstream: "Убрать upstream-ветку из выбранной ветки",
|
||||
SetUpstreamTitle: "Установить upstream-ветку",
|
||||
SetUpstreamMessage: "Вы уверены, что хотите установить upstream-ветвь '{{.checkedOut}}' на '{{.selected}}'",
|
||||
EditRemoteTooltip: "Редактировать удалённый репозитории",
|
||||
TagCommit: "Пометить коммит тегом",
|
||||
TagMenuTitle: "Создать тег",
|
||||
TagNameTitle: "Название тега",
|
||||
TagMessageTitle: "Сообщения тега",
|
||||
AnnotatedTag: "Аннотированный тег",
|
||||
LightweightTag: "Легковесный тег",
|
||||
DeleteTagTitle: "Удалить тег",
|
||||
PushTagTitle: "Удалённый репозитории для отправки тега '{{.tagName}}' в:",
|
||||
PushTag: "Отправить тег",
|
||||
NewTag: "Создать тег",
|
||||
FetchRemoteTooltip: "Получение изменения из удалённого репозитория",
|
||||
FetchingRemoteStatus: "Получение статуса удалённого репозитория",
|
||||
CheckoutCommit: "Переключить коммит",
|
||||
SureCheckoutThisCommit: "Вы уверены, что хотите переключить коммит?",
|
||||
GitFlowOptions: "Показать параметры git-flow",
|
||||
NotAGitFlowBranch: "Это не похоже на ветку git-flow",
|
||||
NewGitFlowBranchPrompt: "Новое {{.branchType}} название:",
|
||||
IgnoreTracked: "Игнорировать отслеживаемый файл",
|
||||
IgnoreTrackedPrompt: "Вы уверены, что хотите игнорировать отслеживаемый файл?",
|
||||
ExcludeTracked: "Исключить отслеживаемый файл",
|
||||
ExcludeTrackedPrompt: "Вы уверены, что хотите исключить отслеживаемый файл?",
|
||||
ViewResetToUpstreamOptions: "Просмотреть параметры сброса upstream-ветки",
|
||||
NextScreenMode: "Следующий режим экрана (нормальный/полуэкранный/полноэкранный)",
|
||||
PrevScreenMode: "Предыдущий режим экрана",
|
||||
StartSearch: "Найти",
|
||||
Panel: "Панель",
|
||||
KeybindingsLegend: "Связки клавиш",
|
||||
RenameBranch: "Переименовать ветку",
|
||||
NewBranchNamePrompt: "Введите новое название ветки",
|
||||
RenameBranchWarning: "Эта ветвь отслеживает удалённый репозитории. Это действие переименует только имя локальной ветки, а не имя удалённой ветки. Продолжать?",
|
||||
OpenKeybindingsMenu: "Открыть меню",
|
||||
ResetCherryPick: "Сбросить отобранную (скопированную | cherry-picked) выборку коммитов",
|
||||
NextTab: "Следующая вкладка",
|
||||
PrevTab: "Предыдущая вкладка",
|
||||
CantUndoWhileRebasing: "Невозможно отменить во время перебазирования",
|
||||
CantRedoWhileRebasing: "Невозможно повторить при перебазировании",
|
||||
MustStashWarning: "Вытаскивание исправления в индекс требует сохранения и распаковки ваших изменений. Если что-то пойдёт не так, можно получить доступ к файлам из хранилища. Продолжить?",
|
||||
MustStashTitle: "Необходимо припрятать",
|
||||
ConfirmationTitle: "Панель Подтверждения",
|
||||
PrevPage: "Предыдущая страница",
|
||||
NextPage: "Следующая страница",
|
||||
GotoTop: "Пролистать наверх",
|
||||
GotoBottom: "Прокрутить вниз",
|
||||
FilteringBy: "Фильтрация по",
|
||||
ResetInParentheses: "(сбросить)",
|
||||
OpenFilteringMenu: "Просмотреть параметры фильтрации по пути",
|
||||
FilterBy: "Фильтровать по",
|
||||
ExitFilterMode: "Прекратить фильтрацию по пути",
|
||||
FilterPathOption: "Введите путь для фильтрации",
|
||||
EnterFileName: "Введите путь:",
|
||||
FilteringMenuTitle: "Фильтрация",
|
||||
MustExitFilterModeTitle: "Команда недоступна",
|
||||
MustExitFilterModePrompt: "Команда недоступна в режиме фильтрации. Выйти из режима фильтрации?",
|
||||
Diff: "Разница",
|
||||
EnterRefToDiff: "Введите ссылку для сравнения",
|
||||
EnterRefName: "Введите ссылку:",
|
||||
ExitDiffMode: "Выйти из режима сравнения",
|
||||
DiffingMenuTitle: "Сравнение",
|
||||
SwapDiff: "Обратное направление сравнении",
|
||||
ViewDiffingOptions: "Открыть меню сравнении",
|
||||
NotEnoughSpace: "Недостаточно места для отрисовки панелей",
|
||||
DiffTitle: "Сравнения",
|
||||
FilesTitle: "Файлы",
|
||||
BranchesTitle: "Ветки",
|
||||
CommitsTitle: "Коммиты",
|
||||
StashTitle: "Хранилище",
|
||||
SnakeTitle: "Змейка",
|
||||
EasterEgg: "Пасхалка",
|
||||
UnstagedChanges: `Непроиндексированные Изменения`,
|
||||
StagedChanges: `Проиндексированные Изменения`,
|
||||
MainTitle: "Главная",
|
||||
MergeConfirmTitle: "Слияние",
|
||||
StagingTitle: "Главная панель (Индексирование)",
|
||||
MergingTitle: "Главная панель (Слияние)",
|
||||
NormalTitle: "Главная панель (Обычный)",
|
||||
LogTitle: "Журнал",
|
||||
CommitSummary: "Сводка коммита",
|
||||
CredentialsUsername: "Имя пользователя",
|
||||
CredentialsPassword: "Пароль",
|
||||
CredentialsPassphrase: "Введите пароль для SSH ключа",
|
||||
CredentialsPIN: "Введите PIN-код для SSH ключа",
|
||||
PassUnameWrong: "Неверный пароль, кодовая фраза и/или имя пользователя",
|
||||
Commit: "Сохранить изменения",
|
||||
AmendLastCommit: "Правка последнего коммита",
|
||||
AmendLastCommitTitle: "Правка Последнего Коммита",
|
||||
SureToAmend: "Вы уверены, что хотите править последний коммит? Впоследствии можно изменить сообщение коммита на панели коммитов.",
|
||||
NoCommitToAmend: "Не найден коммит для внесения поправок.",
|
||||
CommitChangesWithEditor: "Сохранить изменения с помощью редактора git",
|
||||
StatusTitle: "Статус",
|
||||
Menu: "Меню",
|
||||
Execute: "Выполнить",
|
||||
Stage: "Переключить индекс",
|
||||
ToggleStagedAll: "Все проиндексированные/непроиндексированные",
|
||||
ToggleTreeView: "Переключить вид дерева файлов",
|
||||
OpenMergeTool: "Открыть внешний инструмент слияния (git mergetool)",
|
||||
Refresh: "Обновить",
|
||||
Push: "Отправить изменения",
|
||||
Pull: "Получить и слить изменения",
|
||||
Scroll: "Прокрутить",
|
||||
MergeConflictsTitle: "Конфликты Слияния",
|
||||
Checkout: "Переключить",
|
||||
FileFilter: "Фильтровать файлы (проиндексированные/непроиндексированные)",
|
||||
FilterStagedFiles: "Показывать только проиндексированные файлы",
|
||||
FilterUnstagedFiles: "Показывать только непроиндексированные файлы",
|
||||
ResetFilter: "Сбросить фильтр",
|
||||
NoChangedFiles: "Нет изменённых файлов",
|
||||
SoftReset: "Мягкий сброс",
|
||||
AlreadyCheckedOutBranch: "Вы уже переключились в эту ветку",
|
||||
SureForceCheckout: "Вы уверены, что хотите принудительная переключить? Вы потеряете все локальные изменения",
|
||||
ForceCheckoutBranch: "Принудительное Переключение Ветки",
|
||||
BranchName: "Название ветки",
|
||||
NewBranchNameBranchOff: "Название новой ветки (Ветка с '{{.branchName}}')",
|
||||
CantDeleteCheckOutBranch: "Невозможно удалить переключённую ветку!",
|
||||
ForceDeleteBranchMessage: "'{{.selectedBranchName}}' не полностью слилась. Вы уверены, что хотите удалить его?",
|
||||
RebaseBranch: "Перебазировать переключённую ветку на эту ветку",
|
||||
CantRebaseOntoSelf: "Невозможно перебазировать ветку на себя",
|
||||
CantMergeBranchIntoItself: "Невозможно объединить ветку в себя",
|
||||
ForceCheckout: "Принудительное переключение",
|
||||
CheckoutByName: "Переключить по названию",
|
||||
NewBranch: "Новая ветка",
|
||||
NoBranchesThisRepo: "Нет веток для этого репозитория",
|
||||
CommitWithoutMessageErr: "Вы не можете сохранить изменения без сообщения коммита",
|
||||
Close: "Закрыть",
|
||||
CloseCancel: "Закрыть/отменить",
|
||||
Confirm: "Подтвердить",
|
||||
Quit: "Выйти",
|
||||
NoCommitsThisBranch: "Нет коммитов для этой ветки",
|
||||
UpdateRefHere: "Обновить ветку '{{.ref}}' здесь",
|
||||
CannotSquashOrFixupFirstCommit: "Ниже нет коммита, который можно было бы объединить",
|
||||
Fixup: "Объединить несколько коммитов в один отбросив сообщение коммита (Fixup) ",
|
||||
SureFixupThisCommit: "Вы уверены, что хотите объединить несколько коммитов, отбросив сообщение коммита? Он будет объединён с коммитом ниже",
|
||||
SureSquashThisCommit: "Вы уверены, что хотите объединить несколько коммитов в нижний коммит?",
|
||||
Squash: "Объединить коммиты (Squash)",
|
||||
PickCommitTooltip: "Выбрать коммит (в середине перебазирования)",
|
||||
RevertCommit: "Отменить коммит",
|
||||
Reword: "Перефразировать коммит",
|
||||
DropCommit: "Удалить коммит",
|
||||
MoveDownCommit: "Переместить коммит вниз на один",
|
||||
MoveUpCommit: "Переместить коммит вверх на один",
|
||||
EditCommitTooltip: "Изменить коммит",
|
||||
AmendCommitTooltip: "Править последний коммит с проиндексированными изменениями",
|
||||
ResetAuthor: "Сброс автора коммита",
|
||||
SetAuthor: "Установить автора",
|
||||
AmendCommitAttribute: "Установить/убрать автора коммита",
|
||||
SetAuthorPromptTitle: "Установить автора (должно выглядеть как «Имя <Email>»)",
|
||||
SureResetCommitAuthor: "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?",
|
||||
RewordCommitEditor: "Переписать коммит с помощью редактора",
|
||||
Error: "Ошибка",
|
||||
PickHunk: "Выбрать эту часть",
|
||||
PickAllHunks: "Выбрать все части",
|
||||
Undo: "Отменить",
|
||||
UndoReflog: "Отменить (через reflog) (экспериментальный)",
|
||||
RedoReflog: "Повторить (через reflog) (экспериментальный)",
|
||||
UndoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git запустить, чтобы отменить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.",
|
||||
RedoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git нужно запустить, чтобы повторить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.",
|
||||
DiscardAllTooltip: "Отменить проиндексированные и непроиндексированные изменения в '{{.path}}'.",
|
||||
DiscardUnstagedTooltip: "Отменить непроиндексированные изменения в '{{.path}}'.",
|
||||
Pop: "Применить припрятанные изменения и тут же удалить их из хранилища",
|
||||
Drop: "Удалить припрятанные изменения из хранилища",
|
||||
Apply: "Применить припрятанные изменения",
|
||||
NoStashEntries: "Нет записей в хранилище",
|
||||
StashDrop: "Сбросить хранилище",
|
||||
SureDropStashEntry: "Вы уверены, что хотите удалить эту запись хранилища?",
|
||||
StashPop: "Применить припрятанные изменения и тут же удалить их из хранилища",
|
||||
SurePopStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения и тут же удалить их из хранилища?",
|
||||
StashApply: "Применить припрятанные изменения",
|
||||
SureApplyStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения?",
|
||||
NoTrackedStagedFilesStash: "У вас нет отслеженных/проиндексированных файлов для хранения",
|
||||
NoFilesToStash: "У вас нет файлов для хранения",
|
||||
StashChanges: "Припрятать изменения",
|
||||
RenameStash: "Переименовать хранилище",
|
||||
RenameStashPrompt: "Переименовать хранилище: {{.stashName}}",
|
||||
OpenConfig: "Открыть файл конфигурации",
|
||||
EditConfig: "Редактировать файл конфигурации",
|
||||
ForcePush: "Принудительная отправка изменении",
|
||||
ForcePushPrompt: "Ветка отклонилась от удалённой ветки. Нажмите «esc», чтобы отменить, или «enter», чтобы начать принудительную отправку изменении.",
|
||||
ForcePushDisabled: "Ветка отклонилась от удалённой ветки. Принудительная отправка изменении была отключена",
|
||||
UpdatesRejectedAndForcePushDisabled: "Обновления были отклонены. Принудительная отправка изменении была отключена",
|
||||
CheckForUpdate: "Проверить обновления",
|
||||
CheckingForUpdates: "Проверка обновлений...",
|
||||
UpdateAvailableTitle: "Доступно обновление!",
|
||||
UpdateAvailable: "Скачать и установить версию {{.newVersion}}?",
|
||||
UpdateInProgressWaitingStatus: "Обновление",
|
||||
UpdateCompletedTitle: "Обновление завершено!",
|
||||
UpdateCompleted: "Обновление успешно установлено. Перезапустите lazygit, чтобы обновление вступило в силу.",
|
||||
FailedToRetrieveLatestVersionErr: "Не удалось получить информацию о версии",
|
||||
OnLatestVersionErr: "Установлена последняя версия",
|
||||
MajorVersionErr: "Новая версия ({{.newVersion}}) содержит несовместимые с предыдущими версии изменения по сравнению с текущей версией ({{.currentVersion}})",
|
||||
CouldNotFindBinaryErr: "Не удалось найти бинарный файл на {{.url}}",
|
||||
UpdateFailedErr: "Не удалось обновить: {{.errMessage}}",
|
||||
ConfirmQuitDuringUpdateTitle: "Идёт Обновление",
|
||||
ConfirmQuitDuringUpdate: "Выполняется обновление. Вы уверены, что хотите выйти?",
|
||||
MergeToolTitle: "Инструмент слияния",
|
||||
MergeToolPrompt: "Вы уверены, что хотите открыть `git mergetool`?",
|
||||
IntroPopupMessage: russianIntroPopupMessage,
|
||||
DeprecatedEditConfigWarning: russianDeprecatedEditConfigWarning,
|
||||
GitconfigParseErr: `Gogit не удалось проанализировать ваш файл gitconfig из-за наличия символов «\» без кавычек. Их удаление должно решить проблему.`,
|
||||
EditFile: `Редактировать файл`,
|
||||
OpenFile: `Открыть файл`,
|
||||
IgnoreFile: `Добавить в .gitignore`,
|
||||
ExcludeFile: `Добавить в .git/info/exclude`,
|
||||
RefreshFiles: `Обновить файлы`,
|
||||
Merge: `Слияние с текущей переключённой веткой`,
|
||||
ConfirmQuit: `Вы уверены, что хотите выйти?`,
|
||||
SwitchRepo: `Переключиться на последний репозиторий`,
|
||||
AllBranchesLogGraph: `Показать все логи ветки`,
|
||||
UnsupportedGitService: `Неподдерживаемая служба git`,
|
||||
CreatePullRequest: `Создать запрос на принятие изменений`,
|
||||
CopyPullRequestURL: `Скопировать URL запроса на принятие изменений в буфер обмена`,
|
||||
NoBranchOnRemote: `Этой ветки не существует в удалённом репозитории. Сначала вам нужно его отправить в удалённый репозитории.`,
|
||||
Fetch: `Получить изменения`,
|
||||
NoAutomaticGitFetchTitle: `Нет автоматического получения изменении`,
|
||||
NoAutomaticGitFetchBody: `Lazygit не может использовать «git fetch» в приватном репозитории; используйте «f» на панели файлов, чтобы запустить «git fetch» вручную`,
|
||||
FileEnter: `Проиндексировать отдельные части/строки для файла или свернуть/развернуть для каталога`,
|
||||
FileStagingRequirements: `Можно проиндексировать только отдельные строки для отслеживаемых файлов`,
|
||||
StageSelectionTooltip: `Переключить строку в проиндексированные / непроиндексированные`,
|
||||
DiscardSelection: `Отменить изменение (git reset)`,
|
||||
ToggleRangeSelect: `Переключить выборку перетаскивания`,
|
||||
ToggleSelectHunk: `Переключить выборку частей`,
|
||||
ToggleSelectionForPatch: `Добавить/удалить строку(и) для патча`,
|
||||
EditHunk: `Изменить эту часть`,
|
||||
ToggleStagingView: `Переключиться на другую панель (проиндексированные/непроиндексированные изменения)`,
|
||||
ReturnToFilesPanel: `Вернуться к панели файлов`,
|
||||
FastForward: `Перемотать эту ветку вперёд из её upstream-ветки`,
|
||||
FastForwarding: "Получить изменения и перемотать вперёд",
|
||||
FoundConflictsTitle: "Конфликты!",
|
||||
ViewConflictsMenuItem: "Просмотр конфликтов",
|
||||
AbortMenuItem: "Прервать %s",
|
||||
ViewMergeRebaseOptions: "Просмотреть параметры слияния/перебазирования",
|
||||
NotMergingOrRebasing: "В данный момент вы не выполняете ни перебазирования, ни слияние",
|
||||
AlreadyRebasing: "Невозможно выполнить это действие во время перебазирования",
|
||||
RecentRepos: "Последние репозитории",
|
||||
MergeOptionsTitle: "Параметры слияния",
|
||||
RebaseOptionsTitle: "Параметры перебазирования",
|
||||
CommitSummaryTitle: "Сводка коммита",
|
||||
CommitDescriptionTitle: "Описание коммита",
|
||||
CommitDescriptionSubTitle: "Нажмите вкладку, чтобы переключить фокус",
|
||||
LocalBranchesTitle: "Локальные Ветки",
|
||||
SearchTitle: "Поиск",
|
||||
TagsTitle: "Теги",
|
||||
MenuTitle: "Меню",
|
||||
RemotesTitle: "Удалённые репозитории",
|
||||
RemoteBranchesTitle: "Удалённые ветки",
|
||||
PatchBuildingTitle: "Главная панель (сборка патчей)",
|
||||
InformationTitle: "Информация",
|
||||
SecondaryTitle: "Вторичный",
|
||||
ReflogCommitsTitle: "Журнал ссылок (Reflog)",
|
||||
GlobalTitle: "Глобальные сочетания клавиш",
|
||||
ConflictsResolved: "Все конфликты слияния разрешены. Продолжить?",
|
||||
Continue: "Продолжить",
|
||||
Keybindings: "Связки клавиш",
|
||||
RebasingTitle: "Перебазировать '{{.checkedOutBranch}}' на '{{.ref}}'",
|
||||
SimpleRebase: "Простая перебазировка",
|
||||
InteractiveRebase: "Интерактивная перебазировка",
|
||||
InteractiveRebaseTooltip: "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.",
|
||||
ConfirmMerge: "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?",
|
||||
FwdNoUpstream: "Невозможно перемотать ветку без upstream-ветки",
|
||||
FwdNoLocalUpstream: "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально",
|
||||
FwdCommitsToPush: "Невозможно перемотать ветку с коммитами для отправки",
|
||||
ErrorOccurred: "Произошла ошибка! Пожалуйста, заявите о проблеме на",
|
||||
NoRoom: "Недостаточно места",
|
||||
YouAreHere: "ВЫ ЗДЕСЬ",
|
||||
YouDied: "ТЫ УМЕР!",
|
||||
RewordNotSupported: "Переформулировка коммитов при интерактивном перебазировании в настоящее время не поддерживается",
|
||||
ChangingThisActionIsNotAllowed: "Изменение этого типа записи todo перебазирования не допускается",
|
||||
CherryPickCopy: "Скопировать отобранные коммит (cherry-pick)",
|
||||
PasteCommits: "Вставить отобранные коммиты (cherry-pick)",
|
||||
SureCherryPick: "Вы уверены, что хотите выборочно применить (cherry-picked) отобранные коммиты в эту ветку?",
|
||||
CherryPick: "Выборочная отборка (Cherry-Pick)",
|
||||
Donate: "Пожертвовать",
|
||||
AskQuestion: "Задать вопрос",
|
||||
PrevLine: "Выбрать предыдущую строку",
|
||||
NextLine: "Выбрать следующую строку",
|
||||
PrevHunk: "Выбрать предыдущую часть",
|
||||
NextHunk: "Выбрать следующую часть",
|
||||
PrevConflict: "Выбрать предыдущий конфликт",
|
||||
NextConflict: "Выбрать следующий конфликт",
|
||||
SelectPrevHunk: "Выбрать предыдущую часть",
|
||||
SelectNextHunk: "Выбрать следующую часть",
|
||||
ScrollDown: "Прокрутить вниз",
|
||||
ScrollUp: "Прокрутить вверх",
|
||||
ScrollUpMainWindow: "Прокрутить вверх главную панель",
|
||||
ScrollDownMainWindow: "Прокрутить вниз главную панель",
|
||||
AmendCommitTitle: "Править коммит (amend)",
|
||||
AmendCommitPrompt: "Вы уверены, что хотите править этот коммит проиндексированными файлами?",
|
||||
DropCommitTitle: "Удалить коммит",
|
||||
DropCommitPrompt: "Вы уверены, что хотите удалить этот коммит?",
|
||||
PullingStatus: "Получение и слияние изменении",
|
||||
PushingStatus: "Отправка изменении",
|
||||
FetchingStatus: "Получение изменении",
|
||||
SquashingStatus: "Объединение коммитов",
|
||||
FixingStatus: "Объединение коммитов, отбросив сообщение коммита",
|
||||
DeletingStatus: "Удаление",
|
||||
MovingStatus: "Перемещение",
|
||||
RebasingStatus: "Перебазирование",
|
||||
MergingStatus: "Слияние",
|
||||
LowercaseRebasingStatus: "перебазировка", // lowercase because it shows up in parentheses
|
||||
LowercaseMergingStatus: "слияние", // lowercase because it shows up in parentheses
|
||||
AmendingStatus: "Правка коммита",
|
||||
CherryPickingStatus: "Выборочная отборка (cherry-picking)",
|
||||
UndoingStatus: "Отмена последней команды",
|
||||
RedoingStatus: "Выполнение последней команды",
|
||||
CheckingOutStatus: "Переключение",
|
||||
CommittingStatus: "Сохранение изменении",
|
||||
CommitFiles: "Сохранить изменения файлов",
|
||||
SubCommitsDynamicTitle: "Коммиты (%s)",
|
||||
CommitFilesDynamicTitle: "Различия файлов (%s)",
|
||||
RemoteBranchesDynamicTitle: "Удалённые ветки (%s)",
|
||||
ViewItemFiles: "Просмотреть файлы выбранного элемента",
|
||||
CommitFilesTitle: "Сохранить Изменения Файлов",
|
||||
CheckoutCommitFileTooltip: "Переключить файл",
|
||||
CanOnlyDiscardFromLocalCommits: "Изменения можно отменить только из локальных коммитов.",
|
||||
DiscardOldFileChangeTooltip: "Отменить изменения коммита в этом файле",
|
||||
DiscardFileChangesTitle: "Отменить изменения файла",
|
||||
DiscardFileChangesPrompt: "Вы уверены, что хотите удалить изменения в выбранных файлах из этого коммита?\n\nЭто действие запустит перебазирование и отменит изменения в этих файлах. Обратите внимание, что если последующие коммиты зависят от этих изменений, вам, возможно, придется разрешить конфликты.\nПримечание: это также сбросит все активные пользовательские патчи.",
|
||||
DisabledForGPG: "Функция недоступна для пользователей, использующих GPG",
|
||||
CreateRepo: "Не в git репозитории. Создать новый git репозиторий? (y/n):",
|
||||
BareRepo: "Вы пытались открыть Lazygit в пустом репозитории, но Lazygit ещё не поддерживает пустые репозитории. Открыть последний репозиторий? (y/n)",
|
||||
InitialBranch: "Название ветки? (оставьте пустым для git по умолчанию):",
|
||||
NoRecentRepositories: "Необходимо открыть lazygit в git репозитории. Нет валидных последних репозиториев. Выход.",
|
||||
IncorrectNotARepository: "Неверное значение 'notARepository'. Это должно быть одним из 'prompt', 'create', 'skip', или 'quit'.",
|
||||
AutoStashTitle: "Автосохранить изменения?",
|
||||
AutoStashPrompt: "Чтобы перенести изменения, их нужно сохранить и вынуть. Сделать это автоматически? (enter/esc)",
|
||||
StashPrefix: "Автосохранение изменений для",
|
||||
Discard: "Просмотреть параметры «отмены изменении»",
|
||||
Cancel: "Отменить",
|
||||
DiscardAllChanges: "Отменить все изменения",
|
||||
DiscardUnstagedChanges: "Отменить непроиндексированные изменения",
|
||||
DiscardAllChangesToAllFiles: "Разбомбить рабочее дерево?",
|
||||
DiscardAnyUnstagedChanges: "Отменить непроиндексированные изменения",
|
||||
DiscardUntrackedFiles: "Удалить неотслеживаемые файлы",
|
||||
DiscardStagedChanges: "Отменить проиндексированные изменения",
|
||||
HardReset: "Жёсткий сброс",
|
||||
ViewResetOptions: `Просмотреть параметры сброса`,
|
||||
CreateFixupCommitTooltip: `Создать fixup коммит для этого коммита`,
|
||||
SquashAboveCommitsTooltip: `Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение)`,
|
||||
CreateFixupCommit: `Создать fixup коммит`,
|
||||
SureCreateFixupCommit: `Вы уверены, что хотите создать fixup! коммит для коммита {{.commit}}?`,
|
||||
ExecuteCustomCommand: "Выполнить пользовательскую команду",
|
||||
CustomCommand: "Пользовательская Команда:",
|
||||
CommitChangesWithoutHook: "Закоммитить изменения без предварительного хука коммита",
|
||||
SkipHookPrefixNotConfigured: "Вы не настроили префикс сообщения коммита для пропуска хуков. Установите `git.skipHookPrefix = 'WIP'` в вашей конфигурации",
|
||||
ResetTo: `Сбросить на`,
|
||||
PressEnterToReturn: "Нажмите Enter, чтобы вернуться в lazygit",
|
||||
ViewStashOptions: "Просмотреть параметры хранилища",
|
||||
StashAllChanges: "Припрятать все изменения",
|
||||
StashStagedChanges: "Припрятать проиндексированные изменения",
|
||||
StashAllChangesKeepIndex: "Припрятать все изменения и сохранить индекс",
|
||||
StashUnstagedChanges: "Припрятать непроиндексированные изменения",
|
||||
StashIncludeUntrackedChanges: "Припрятать все изменения, включая неотслеживаемые файлы",
|
||||
StashOptions: "Параметры хранилища",
|
||||
NotARepository: "Ошибка: необходимо запустить внутри git репозитория",
|
||||
Jump: "Перейти к панели",
|
||||
ScrollLeftRight: "Прокрутить влево/вправо",
|
||||
ScrollLeft: "Прокрутить влево",
|
||||
ScrollRight: "Прокрутить вправо",
|
||||
DiscardPatch: "Отменить патч",
|
||||
DiscardPatchConfirm: "Вы можете собрать патч только из одной записи коммита/хранилища за раз. Отменить текущий патч?",
|
||||
CantPatchWhileRebasingError: "Вы не можете создавать патчи или запускать команды патча, находясь в состоянии слияния или перемещения.",
|
||||
ToggleAddToPatch: "Переключить файлы включённые в патч",
|
||||
ToggleAllInPatch: "Переключить все файлы, включённые в патч",
|
||||
UpdatingPatch: "Обновление патча",
|
||||
ViewPatchOptions: "Просмотреть пользовательские параметры патча",
|
||||
PatchOptionsTitle: "Параметры патча",
|
||||
NoPatchError: "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.",
|
||||
EnterCommitFile: "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)",
|
||||
ExitCustomPatchBuilder: `Выйти из сборщика пользовательских патчей`,
|
||||
EnterUpstream: `Введите upstream как '<remote> <branchname>'`,
|
||||
InvalidUpstream: "Недействительный upstream. Должен быть в формате '<remote> <branchname>'",
|
||||
ReturnToRemotesList: `Вернуться к списку удалённых репозитории`,
|
||||
NewRemote: `Добавить новую удалённую ветку`,
|
||||
NewRemoteName: `Название новой удалённой ветки`,
|
||||
NewRemoteUrl: `Ссылка новой удалённой ветки`,
|
||||
EditRemoteName: `Введите новое название для удалённое ветки {{.remoteName}}:`,
|
||||
EditRemoteUrl: `Введите новую ссылку для удалённое ветки {{.remoteName}}:`,
|
||||
RemoveRemote: `Удалить удалённую ветку`,
|
||||
RemoveRemotePrompt: "Вы уверены, что хотите удалить удалённую ветку?",
|
||||
DeleteRemoteBranch: "Удалить Удалённую Ветку",
|
||||
DeleteRemoteBranchMessage: "Вы уверены, что хотите удалить удалённую ветку",
|
||||
SetAsUpstreamTooltip: "Установить как upstream-ветку переключённую ветку",
|
||||
SetUpstream: "Установить upstream-ветку из выбранной ветки",
|
||||
UnsetUpstream: "Убрать upstream-ветку из выбранной ветки",
|
||||
SetUpstreamTitle: "Установить upstream-ветку",
|
||||
SetUpstreamMessage: "Вы уверены, что хотите установить upstream-ветвь '{{.checkedOut}}' на '{{.selected}}'",
|
||||
EditRemoteTooltip: "Редактировать удалённый репозитории",
|
||||
TagCommit: "Пометить коммит тегом",
|
||||
TagMenuTitle: "Создать тег",
|
||||
TagNameTitle: "Название тега",
|
||||
TagMessageTitle: "Сообщения тега",
|
||||
AnnotatedTag: "Аннотированный тег",
|
||||
LightweightTag: "Легковесный тег",
|
||||
DeleteTagTitle: "Удалить тег",
|
||||
PushTagTitle: "Удалённый репозитории для отправки тега '{{.tagName}}' в:",
|
||||
PushTag: "Отправить тег",
|
||||
NewTag: "Создать тег",
|
||||
FetchRemoteTooltip: "Получение изменения из удалённого репозитория",
|
||||
FetchingRemoteStatus: "Получение статуса удалённого репозитория",
|
||||
CheckoutCommit: "Переключить коммит",
|
||||
SureCheckoutThisCommit: "Вы уверены, что хотите переключить коммит?",
|
||||
GitFlowOptions: "Показать параметры git-flow",
|
||||
NotAGitFlowBranch: "Это не похоже на ветку git-flow",
|
||||
NewGitFlowBranchPrompt: "Новое {{.branchType}} название:",
|
||||
IgnoreTracked: "Игнорировать отслеживаемый файл",
|
||||
IgnoreTrackedPrompt: "Вы уверены, что хотите игнорировать отслеживаемый файл?",
|
||||
ExcludeTracked: "Исключить отслеживаемый файл",
|
||||
ExcludeTrackedPrompt: "Вы уверены, что хотите исключить отслеживаемый файл?",
|
||||
ViewResetToUpstreamOptions: "Просмотреть параметры сброса upstream-ветки",
|
||||
NextScreenMode: "Следующий режим экрана (нормальный/полуэкранный/полноэкранный)",
|
||||
PrevScreenMode: "Предыдущий режим экрана",
|
||||
StartSearch: "Найти",
|
||||
Panel: "Панель",
|
||||
KeybindingsLegend: "Связки клавиш",
|
||||
RenameBranch: "Переименовать ветку",
|
||||
NewBranchNamePrompt: "Введите новое название ветки",
|
||||
RenameBranchWarning: "Эта ветвь отслеживает удалённый репозитории. Это действие переименует только имя локальной ветки, а не имя удалённой ветки. Продолжать?",
|
||||
OpenKeybindingsMenu: "Открыть меню",
|
||||
ResetCherryPick: "Сбросить отобранную (скопированную | cherry-picked) выборку коммитов",
|
||||
NextTab: "Следующая вкладка",
|
||||
PrevTab: "Предыдущая вкладка",
|
||||
CantUndoWhileRebasing: "Невозможно отменить во время перебазирования",
|
||||
CantRedoWhileRebasing: "Невозможно повторить при перебазировании",
|
||||
MustStashWarning: "Вытаскивание исправления в индекс требует сохранения и распаковки ваших изменений. Если что-то пойдёт не так, можно получить доступ к файлам из хранилища. Продолжить?",
|
||||
MustStashTitle: "Необходимо припрятать",
|
||||
ConfirmationTitle: "Панель Подтверждения",
|
||||
PrevPage: "Предыдущая страница",
|
||||
NextPage: "Следующая страница",
|
||||
GotoTop: "Пролистать наверх",
|
||||
GotoBottom: "Прокрутить вниз",
|
||||
FilteringBy: "Фильтрация по",
|
||||
ResetInParentheses: "(сбросить)",
|
||||
OpenFilteringMenu: "Просмотреть параметры фильтрации по пути",
|
||||
FilterBy: "Фильтровать по",
|
||||
ExitFilterMode: "Прекратить фильтрацию по пути",
|
||||
FilterPathOption: "Введите путь для фильтрации",
|
||||
EnterFileName: "Введите путь:",
|
||||
FilteringMenuTitle: "Фильтрация",
|
||||
MustExitFilterModeTitle: "Команда недоступна",
|
||||
MustExitFilterModePrompt: "Команда недоступна в режиме фильтрации. Выйти из режима фильтрации?",
|
||||
Diff: "Разница",
|
||||
EnterRefToDiff: "Введите ссылку для сравнения",
|
||||
EnterRefName: "Введите ссылку:",
|
||||
ExitDiffMode: "Выйти из режима сравнения",
|
||||
DiffingMenuTitle: "Сравнение",
|
||||
SwapDiff: "Обратное направление сравнении",
|
||||
ViewDiffingOptions: "Открыть меню сравнении",
|
||||
// the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part
|
||||
OpenCommandLogMenu: "Открыть меню журнала команд",
|
||||
ShowingGitDiff: "Показывает вывод для:",
|
||||
@@ -480,6 +482,7 @@ func RussianTranslationSet() TranslationSet {
|
||||
PushingTagStatus: "Отправка тега",
|
||||
PullRequestURLCopiedToClipboard: "URL запроса на принятие изменений скопирован в буфер обмена",
|
||||
CommitDiffCopiedToClipboard: "Сравнения коммита скопированы в буфер обмена",
|
||||
CommitSHACopiedToClipboard: "SHA коммита скопировано в буфер обмена",
|
||||
CommitURLCopiedToClipboard: "URL коммита скопирован в буфер обмена",
|
||||
CommitMessageCopiedToClipboard: "Сообщение коммита скопировано в буфер обмена",
|
||||
CommitSubjectCopiedToClipboard: "Тема коммита скопирована в буфер обмена",
|
||||
|
||||
+423
-465
File diff suppressed because it is too large
Load Diff
@@ -41,17 +41,6 @@ func (self *CommitDescriptionPanelDriver) GoToBeginning() *CommitDescriptionPane
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *CommitDescriptionPanelDriver) AddCoAuthor(author string) *CommitDescriptionPanelDriver {
|
||||
self.t.press(self.t.keys.CommitMessage.CommitMenu)
|
||||
self.t.ExpectPopup().Menu().Title(Equals("Commit Menu")).
|
||||
Select(Contains("Add co-author")).
|
||||
Confirm()
|
||||
self.t.ExpectPopup().Prompt().Title(Contains("Add co-author")).
|
||||
Type(author).
|
||||
Confirm()
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *CommitDescriptionPanelDriver) Title(expected *TextMatcher) *CommitDescriptionPanelDriver {
|
||||
self.getViewDriver().Title(expected)
|
||||
|
||||
|
||||
@@ -69,10 +69,7 @@ func (self *CommitMessagePanelDriver) Cancel() {
|
||||
}
|
||||
|
||||
func (self *CommitMessagePanelDriver) SwitchToEditor() {
|
||||
self.OpenCommitMenu()
|
||||
self.t.ExpectPopup().Menu().Title(Equals("Commit Menu")).
|
||||
Select(Contains("Open in editor")).
|
||||
Confirm()
|
||||
self.getViewDriver().Press(self.t.keys.CommitMessage.SwitchToEditor)
|
||||
}
|
||||
|
||||
func (self *CommitMessagePanelDriver) SelectPreviousMessage() *CommitMessagePanelDriver {
|
||||
@@ -84,8 +81,3 @@ func (self *CommitMessagePanelDriver) SelectNextMessage() *CommitMessagePanelDri
|
||||
self.getViewDriver().SelectNextItem()
|
||||
return self
|
||||
}
|
||||
|
||||
func (self *CommitMessagePanelDriver) OpenCommitMenu() *CommitMessagePanelDriver {
|
||||
self.t.press(self.t.keys.CommitMessage.CommitMenu)
|
||||
return self
|
||||
}
|
||||
|
||||
@@ -33,9 +33,8 @@ var AddCoAuthor = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
})
|
||||
|
||||
t.Views().Main().ContainsLines(
|
||||
Equals(" initial commit"),
|
||||
Equals(" "),
|
||||
Equals(" Co-authored-by: John Smith <jsmith@gmail.com>"),
|
||||
Contains("initial commit"),
|
||||
Contains("Co-authored-by: John Smith <jsmith@gmail.com>"),
|
||||
)
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
package commit
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var AddCoAuthorWhileCommitting = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Add co-author while typing the commit message",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {
|
||||
},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.CreateFile("file", "file content")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
PressPrimaryAction(). // stage file
|
||||
Press(keys.Files.CommitChanges)
|
||||
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
Type("Subject").
|
||||
SwitchToDescription().
|
||||
Type("Here's my message.").
|
||||
AddCoAuthor("John Doe <john@doe.com>").
|
||||
Content(Equals("Here's my message.\n\nCo-authored-by: John Doe <john@doe.com>")).
|
||||
AddCoAuthor("Jane Smith <jane@smith.com>").
|
||||
// Second co-author doesn't add a blank line:
|
||||
Content(Equals("Here's my message.\n\nCo-authored-by: John Doe <john@doe.com>\nCo-authored-by: Jane Smith <jane@smith.com>")).
|
||||
SwitchToSummary().
|
||||
Confirm()
|
||||
|
||||
t.Views().Commits().
|
||||
Lines(
|
||||
Contains("Subject"),
|
||||
).
|
||||
Focus().
|
||||
Tap(func() {
|
||||
t.Views().Main().ContainsLines(
|
||||
Equals(" Subject"),
|
||||
Equals(" "),
|
||||
Equals(" Here's my message."),
|
||||
Equals(" "),
|
||||
Equals(" Co-authored-by: John Doe <john@doe.com>"),
|
||||
Equals(" Co-authored-by: Jane Smith <jane@smith.com>"),
|
||||
)
|
||||
})
|
||||
},
|
||||
})
|
||||
@@ -1,60 +0,0 @@
|
||||
package commit
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var CreateAmendCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Create an amend commit for an existing commit",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.
|
||||
CreateNCommits(3).
|
||||
CreateFileAndAdd("fixup-file", "fixup content")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
t.Views().Commits().
|
||||
Focus().
|
||||
Lines(
|
||||
Contains("commit 03"),
|
||||
Contains("commit 02"),
|
||||
Contains("commit 01"),
|
||||
).
|
||||
NavigateToLine(Contains("commit 02")).
|
||||
Press(keys.Commits.CreateFixupCommit).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Create fixup commit")).
|
||||
Select(Contains("amend! commit with changes")).
|
||||
Confirm()
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
Content(Equals("commit 02")).
|
||||
Type(" amended").Confirm()
|
||||
}).
|
||||
Lines(
|
||||
Contains("amend! commit 02"),
|
||||
Contains("commit 03"),
|
||||
Contains("commit 02").IsSelected(),
|
||||
Contains("commit 01"),
|
||||
)
|
||||
|
||||
if t.Git().Version().IsAtLeast(2, 32, 0) { // Support for auto-squashing "amend!" commits was added in git 2.32.0
|
||||
t.Views().Commits().
|
||||
Press(keys.Commits.SquashAboveCommits).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
Title(Equals("Apply fixup commits")).
|
||||
Select(Contains("Above the selected commit")).
|
||||
Confirm()
|
||||
}).
|
||||
Lines(
|
||||
Contains("commit 03"),
|
||||
Contains("commit 02 amended").IsSelected(),
|
||||
Contains("commit 01"),
|
||||
)
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -9,9 +9,7 @@ var FilterFuzzy = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Verify that fuzzy filtering works (not just exact matches)",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {
|
||||
config.UserConfig.Gui.FilterMode = "fuzzy"
|
||||
},
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.NewBranch("this-is-my-branch")
|
||||
shell.EmptyCommit("first commit")
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
package interactive_rebase
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var DeleteUpdateRefTodo = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Delete an update-ref item from the rebase todo list",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
GitVersion: AtLeast("2.38.0"),
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.
|
||||
NewBranch("branch1").
|
||||
CreateNCommits(3).
|
||||
NewBranch("branch2").
|
||||
CreateNCommitsStartingAt(3, 4)
|
||||
|
||||
shell.SetConfig("rebase.updateRefs", "true")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
t.Views().Commits().
|
||||
Focus().
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Universal.Edit).
|
||||
Lines(
|
||||
Contains("pick").Contains("CI commit 06"),
|
||||
Contains("pick").Contains("CI commit 05"),
|
||||
Contains("pick").Contains("CI commit 04"),
|
||||
Contains("update-ref").Contains("branch1"),
|
||||
Contains("pick").Contains("CI commit 03"),
|
||||
Contains("pick").Contains("CI commit 02"),
|
||||
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
|
||||
).
|
||||
NavigateToLine(Contains("update-ref")).
|
||||
Press(keys.Universal.Remove).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Confirmation().
|
||||
Title(Equals("Drop commit")).
|
||||
Content(Contains("Are you sure you want to delete the selected update-ref todo(s)?")).
|
||||
Confirm()
|
||||
}).
|
||||
Lines(
|
||||
Contains("pick").Contains("CI commit 06"),
|
||||
Contains("pick").Contains("CI commit 05"),
|
||||
Contains("pick").Contains("CI commit 04"),
|
||||
Contains("pick").Contains("CI commit 03").IsSelected(),
|
||||
Contains("pick").Contains("CI commit 02"),
|
||||
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
|
||||
).
|
||||
Tap(func() {
|
||||
t.Common().ContinueRebase()
|
||||
}).
|
||||
Lines(
|
||||
Contains("CI ◯ commit 06"),
|
||||
Contains("CI ◯ commit 05"),
|
||||
Contains("CI ◯ commit 04"),
|
||||
Contains("CI ◯ commit 03"), // No start on this commit, so there's no branch head here
|
||||
Contains("CI ◯ commit 02"),
|
||||
Contains("CI ◯ commit 01"),
|
||||
)
|
||||
},
|
||||
})
|
||||
@@ -1,61 +0,0 @@
|
||||
package interactive_rebase
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var MoveUpdateRefTodo = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Move an update-ref item in the rebase todo list",
|
||||
ExtraCmdArgs: []string{},
|
||||
Skip: false,
|
||||
GitVersion: AtLeast("2.38.0"),
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.
|
||||
NewBranch("branch1").
|
||||
CreateNCommits(3).
|
||||
NewBranch("branch2").
|
||||
CreateNCommitsStartingAt(3, 4)
|
||||
|
||||
shell.SetConfig("rebase.updateRefs", "true")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
t.Views().Commits().
|
||||
Focus().
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Universal.Edit).
|
||||
Lines(
|
||||
Contains("pick").Contains("CI commit 06"),
|
||||
Contains("pick").Contains("CI commit 05"),
|
||||
Contains("pick").Contains("CI commit 04"),
|
||||
Contains("update-ref").Contains("branch1"),
|
||||
Contains("pick").Contains("CI commit 03"),
|
||||
Contains("pick").Contains("CI commit 02"),
|
||||
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
|
||||
).
|
||||
NavigateToLine(Contains("update-ref")).
|
||||
Press(keys.Commits.MoveUpCommit).
|
||||
Press(keys.Commits.MoveUpCommit).
|
||||
Lines(
|
||||
Contains("pick").Contains("CI commit 06"),
|
||||
Contains("update-ref").Contains("branch1"),
|
||||
Contains("pick").Contains("CI commit 05"),
|
||||
Contains("pick").Contains("CI commit 04"),
|
||||
Contains("pick").Contains("CI commit 03"),
|
||||
Contains("pick").Contains("CI commit 02"),
|
||||
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
|
||||
).
|
||||
Tap(func() {
|
||||
t.Common().ContinueRebase()
|
||||
}).
|
||||
Lines(
|
||||
Contains("CI ◯ commit 06"),
|
||||
Contains("CI ◯ * commit 05"),
|
||||
Contains("CI ◯ commit 04"),
|
||||
Contains("CI ◯ commit 03"),
|
||||
Contains("CI ◯ commit 02"),
|
||||
Contains("CI ◯ commit 01"),
|
||||
)
|
||||
},
|
||||
})
|
||||
@@ -26,9 +26,9 @@ var SquashFixupsAbove = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("commit 02")).
|
||||
Press(keys.Commits.CreateFixupCommit).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
t.ExpectPopup().Confirmation().
|
||||
Title(Equals("Create fixup commit")).
|
||||
Select(Contains("fixup! commit")).
|
||||
Content(Contains("Are you sure you want to create a fixup! commit for commit")).
|
||||
Confirm()
|
||||
}).
|
||||
Lines(
|
||||
|
||||
@@ -25,9 +25,9 @@ var SquashFixupsAboveFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
NavigateToLine(Contains("commit 01")).
|
||||
Press(keys.Commits.CreateFixupCommit).
|
||||
Tap(func() {
|
||||
t.ExpectPopup().Menu().
|
||||
t.ExpectPopup().Confirmation().
|
||||
Title(Equals("Create fixup commit")).
|
||||
Select(Contains("fixup! commit")).
|
||||
Content(Contains("Are you sure you want to create a fixup! commit for commit")).
|
||||
Confirm()
|
||||
}).
|
||||
NavigateToLine(Contains("commit 01").DoesNotContain("fixup!")).
|
||||
|
||||
@@ -27,7 +27,7 @@ var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
).
|
||||
Press(keys.Universal.CopyToClipboard)
|
||||
|
||||
t.ExpectToast(Equals("'branch-a' copied to clipboard"))
|
||||
t.ExpectToast(Equals("'branch-a' Copied to clipboard"))
|
||||
|
||||
t.Views().Files().
|
||||
Focus()
|
||||
|
||||
@@ -64,7 +64,6 @@ var tests = []*components.IntegrationTest{
|
||||
cherry_pick.CherryPickDuringRebase,
|
||||
cherry_pick.CherryPickRange,
|
||||
commit.AddCoAuthor,
|
||||
commit.AddCoAuthorWhileCommitting,
|
||||
commit.Amend,
|
||||
commit.AutoWrapMessage,
|
||||
commit.Commit,
|
||||
@@ -72,7 +71,6 @@ var tests = []*components.IntegrationTest{
|
||||
commit.CommitSwitchToEditor,
|
||||
commit.CommitWipWithPrefix,
|
||||
commit.CommitWithPrefix,
|
||||
commit.CreateAmendCommit,
|
||||
commit.CreateTag,
|
||||
commit.DiscardOldFileChanges,
|
||||
commit.FindBaseCommitForFixup,
|
||||
@@ -165,7 +163,6 @@ var tests = []*components.IntegrationTest{
|
||||
interactive_rebase.AmendHeadCommitDuringRebase,
|
||||
interactive_rebase.AmendMerge,
|
||||
interactive_rebase.AmendNonHeadCommitDuringRebase,
|
||||
interactive_rebase.DeleteUpdateRefTodo,
|
||||
interactive_rebase.DontShowBranchHeadsForTodoItems,
|
||||
interactive_rebase.DropTodoCommitWithUpdateRef,
|
||||
interactive_rebase.DropWithCustomCommentChar,
|
||||
@@ -178,7 +175,6 @@ var tests = []*components.IntegrationTest{
|
||||
interactive_rebase.MidRebaseRangeSelect,
|
||||
interactive_rebase.Move,
|
||||
interactive_rebase.MoveInRebase,
|
||||
interactive_rebase.MoveUpdateRefTodo,
|
||||
interactive_rebase.MoveWithCustomCommentChar,
|
||||
interactive_rebase.OutsideRebaseRangeSelect,
|
||||
interactive_rebase.PickRescheduled,
|
||||
|
||||
+12
-48
@@ -10,8 +10,7 @@ import (
|
||||
)
|
||||
|
||||
type Todo struct {
|
||||
Sha string // for todos that have one, e.g. pick, drop, fixup, etc.
|
||||
Ref string // for update-ref todos
|
||||
Sha string
|
||||
Action todo.TodoCommand
|
||||
}
|
||||
|
||||
@@ -56,19 +55,6 @@ func equalShas(a, b string) bool {
|
||||
return strings.HasPrefix(a, b) || strings.HasPrefix(b, a)
|
||||
}
|
||||
|
||||
func findTodo(todos []todo.Todo, todoToFind Todo) (int, bool) {
|
||||
_, idx, ok := lo.FindIndexOf(todos, func(t todo.Todo) bool {
|
||||
// Comparing just the sha is not enough; we need to compare both the
|
||||
// action and the sha, as the sha could appear multiple times (e.g. in a
|
||||
// pick and later in a merge). For update-ref todos we also must compare
|
||||
// the Ref.
|
||||
return t.Command == todoToFind.Action &&
|
||||
equalShas(t.Commit, todoToFind.Sha) &&
|
||||
t.Ref == todoToFind.Ref
|
||||
})
|
||||
return idx, ok
|
||||
}
|
||||
|
||||
func ReadRebaseTodoFile(fileName string, commentChar byte) ([]todo.Todo, error) {
|
||||
f, err := os.Open(fileName)
|
||||
if err != nil {
|
||||
@@ -106,33 +92,6 @@ func PrependStrToTodoFile(filePath string, linesToPrepend []byte) error {
|
||||
return os.WriteFile(filePath, linesToPrepend, 0o644)
|
||||
}
|
||||
|
||||
func DeleteTodos(fileName string, todosToDelete []Todo, commentChar byte) error {
|
||||
todos, err := ReadRebaseTodoFile(fileName, commentChar)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rearrangedTodos, err := deleteTodos(todos, todosToDelete)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return WriteRebaseTodoFile(fileName, rearrangedTodos, commentChar)
|
||||
}
|
||||
|
||||
func deleteTodos(todos []todo.Todo, todosToDelete []Todo) ([]todo.Todo, error) {
|
||||
for _, todoToDelete := range todosToDelete {
|
||||
idx, ok := findTodo(todos, todoToDelete)
|
||||
|
||||
if !ok {
|
||||
// Should never happen
|
||||
return []todo.Todo{}, fmt.Errorf("Todo %s not found in git-rebase-todo", todoToDelete.Sha)
|
||||
}
|
||||
|
||||
todos = Remove(todos, idx)
|
||||
}
|
||||
|
||||
return todos, nil
|
||||
}
|
||||
|
||||
func MoveTodosDown(fileName string, todosToMove []Todo, commentChar byte) error {
|
||||
todos, err := ReadRebaseTodoFile(fileName, commentChar)
|
||||
if err != nil {
|
||||
@@ -157,8 +116,8 @@ func MoveTodosUp(fileName string, todosToMove []Todo, commentChar byte) error {
|
||||
return WriteRebaseTodoFile(fileName, rearrangedTodos, commentChar)
|
||||
}
|
||||
|
||||
func moveTodoDown(todos []todo.Todo, todoToMove Todo) ([]todo.Todo, error) {
|
||||
rearrangedTodos, err := moveTodoUp(lo.Reverse(todos), todoToMove)
|
||||
func moveTodoDown(todos []todo.Todo, sha string, action todo.TodoCommand) ([]todo.Todo, error) {
|
||||
rearrangedTodos, err := moveTodoUp(lo.Reverse(todos), sha, action)
|
||||
return lo.Reverse(rearrangedTodos), err
|
||||
}
|
||||
|
||||
@@ -167,12 +126,17 @@ func moveTodosDown(todos []todo.Todo, todosToMove []Todo) ([]todo.Todo, error) {
|
||||
return lo.Reverse(rearrangedTodos), err
|
||||
}
|
||||
|
||||
func moveTodoUp(todos []todo.Todo, todoToMove Todo) ([]todo.Todo, error) {
|
||||
sourceIdx, ok := findTodo(todos, todoToMove)
|
||||
func moveTodoUp(todos []todo.Todo, sha string, action todo.TodoCommand) ([]todo.Todo, error) {
|
||||
_, sourceIdx, ok := lo.FindIndexOf(todos, func(t todo.Todo) bool {
|
||||
// Comparing just the sha is not enough; we need to compare both the
|
||||
// action and the sha, as the sha could appear multiple times (e.g. in a
|
||||
// pick and later in a merge)
|
||||
return t.Command == action && equalShas(t.Commit, sha)
|
||||
})
|
||||
|
||||
if !ok {
|
||||
// Should never happen
|
||||
return []todo.Todo{}, fmt.Errorf("Todo %s not found in git-rebase-todo", todoToMove.Sha)
|
||||
return []todo.Todo{}, fmt.Errorf("Todo %s not found in git-rebase-todo", sha)
|
||||
}
|
||||
|
||||
// The todos are ordered backwards compared to our model commits, so
|
||||
@@ -197,7 +161,7 @@ func moveTodoUp(todos []todo.Todo, todoToMove Todo) ([]todo.Todo, error) {
|
||||
func moveTodosUp(todos []todo.Todo, todosToMove []Todo) ([]todo.Todo, error) {
|
||||
for _, todoToMove := range todosToMove {
|
||||
var newTodos []todo.Todo
|
||||
newTodos, err := moveTodoUp(todos, todoToMove)
|
||||
newTodos, err := moveTodoUp(todos, todoToMove.Sha, todoToMove.Action)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
+32
-117
@@ -10,11 +10,11 @@ import (
|
||||
|
||||
func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
type scenario struct {
|
||||
testName string
|
||||
todos []todo.Todo
|
||||
todoToMoveDown Todo
|
||||
expectedErr string
|
||||
expectedTodos []todo.Todo
|
||||
testName string
|
||||
todos []todo.Todo
|
||||
shaToMoveDown string
|
||||
expectedErr string
|
||||
expectedTodos []todo.Todo
|
||||
}
|
||||
|
||||
scenarios := []scenario{
|
||||
@@ -25,8 +25,8 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "5678", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "5678",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
@@ -40,29 +40,14 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "abcd", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "abcd",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "move update-ref todo",
|
||||
todos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.UpdateRef, Ref: "refs/heads/some_branch"},
|
||||
},
|
||||
todoToMoveDown: Todo{Ref: "refs/heads/some_branch", Action: todo.UpdateRef},
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.UpdateRef, Ref: "refs/heads/some_branch"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "skip an invisible todo",
|
||||
todos: []todo.Todo{
|
||||
@@ -72,8 +57,8 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "def0"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "5678", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "5678",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
@@ -91,9 +76,9 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "def0", Action: todo.Pick},
|
||||
expectedErr: "Todo def0 not found in git-rebase-todo",
|
||||
expectedTodos: []todo.Todo{},
|
||||
shaToMoveDown: "def0",
|
||||
expectedErr: "Todo def0 not found in git-rebase-todo",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
{
|
||||
testName: "trying to move first commit down",
|
||||
@@ -102,9 +87,9 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "1234", Action: todo.Pick},
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
shaToMoveDown: "1234",
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
{
|
||||
testName: "trying to move commit down when all commits before are invisible",
|
||||
@@ -114,15 +99,15 @@ func TestRebaseCommands_moveTodoDown(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
todoToMoveDown: Todo{Sha: "1234", Action: todo.Pick},
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
shaToMoveDown: "1234",
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
t.Run(s.testName, func(t *testing.T) {
|
||||
rearrangedTodos, err := moveTodoDown(s.todos, s.todoToMoveDown)
|
||||
rearrangedTodos, err := moveTodoDown(s.todos, s.shaToMoveDown, todo.Pick)
|
||||
if s.expectedErr == "" {
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
@@ -138,7 +123,7 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
type scenario struct {
|
||||
testName string
|
||||
todos []todo.Todo
|
||||
todoToMoveUp Todo
|
||||
shaToMoveDown string
|
||||
expectedErr string
|
||||
expectedTodos []todo.Todo
|
||||
}
|
||||
@@ -151,8 +136,8 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "5678", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "5678",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
@@ -166,29 +151,14 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "1234", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "1234",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "move update-ref todo",
|
||||
todos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.UpdateRef, Ref: "refs/heads/some_branch"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
todoToMoveUp: Todo{Ref: "refs/heads/some_branch", Action: todo.UpdateRef},
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.UpdateRef, Ref: "refs/heads/some_branch"},
|
||||
},
|
||||
},
|
||||
{
|
||||
testName: "skip an invisible todo",
|
||||
todos: []todo.Todo{
|
||||
@@ -198,8 +168,8 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "def0"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "abcd", Action: todo.Pick},
|
||||
expectedErr: "",
|
||||
shaToMoveDown: "abcd",
|
||||
expectedErr: "",
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Label, Label: "myLabel"},
|
||||
@@ -217,7 +187,7 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "def0", Action: todo.Pick},
|
||||
shaToMoveDown: "def0",
|
||||
expectedErr: "Todo def0 not found in git-rebase-todo",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
@@ -228,7 +198,7 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "abcd", Action: todo.Pick},
|
||||
shaToMoveDown: "abcd",
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
@@ -240,7 +210,7 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
{Command: todo.Label, Label: "myLabel"},
|
||||
{Command: todo.Reset, Label: "otherlabel"},
|
||||
},
|
||||
todoToMoveUp: Todo{Sha: "5678", Action: todo.Pick},
|
||||
shaToMoveDown: "5678",
|
||||
expectedErr: "Destination position for moving todo is out of range",
|
||||
expectedTodos: []todo.Todo{},
|
||||
},
|
||||
@@ -248,7 +218,7 @@ func TestRebaseCommands_moveTodoUp(t *testing.T) {
|
||||
|
||||
for _, s := range scenarios {
|
||||
t.Run(s.testName, func(t *testing.T) {
|
||||
rearrangedTodos, err := moveTodoUp(s.todos, s.todoToMoveUp)
|
||||
rearrangedTodos, err := moveTodoUp(s.todos, s.shaToMoveDown, todo.Pick)
|
||||
if s.expectedErr == "" {
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
@@ -360,58 +330,3 @@ func TestRebaseCommands_moveFixupCommitDown(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRebaseCommands_deleteTodos(t *testing.T) {
|
||||
scenarios := []struct {
|
||||
name string
|
||||
todos []todo.Todo
|
||||
todosToDelete []Todo
|
||||
expectedTodos []todo.Todo
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
name: "success",
|
||||
todos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.UpdateRef, Ref: "refs/heads/some_branch"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
{Command: todo.Pick, Commit: "abcd"},
|
||||
},
|
||||
todosToDelete: []Todo{
|
||||
{Ref: "refs/heads/some_branch", Action: todo.UpdateRef},
|
||||
{Sha: "abcd", Action: todo.Pick},
|
||||
},
|
||||
expectedTodos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
expectedErr: nil,
|
||||
},
|
||||
{
|
||||
name: "failure",
|
||||
todos: []todo.Todo{
|
||||
{Command: todo.Pick, Commit: "1234"},
|
||||
{Command: todo.Pick, Commit: "5678"},
|
||||
},
|
||||
todosToDelete: []Todo{
|
||||
{Sha: "abcd", Action: todo.Pick},
|
||||
},
|
||||
expectedTodos: []todo.Todo{},
|
||||
expectedErr: errors.New("Todo abcd not found in git-rebase-todo"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, scenario := range scenarios {
|
||||
t.Run(scenario.name, func(t *testing.T) {
|
||||
actualTodos, actualErr := deleteTodos(scenario.todos, scenario.todosToDelete)
|
||||
|
||||
if scenario.expectedErr == nil {
|
||||
assert.NoError(t, actualErr)
|
||||
} else {
|
||||
assert.EqualError(t, actualErr, scenario.expectedErr.Error())
|
||||
}
|
||||
|
||||
assert.EqualValues(t, scenario.expectedTodos, actualTodos)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+4
-51
@@ -1,73 +1,26 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/sahilm/fuzzy"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
func FilterStrings(needle string, haystack []string, useFuzzySearch bool) []string {
|
||||
func FuzzySearch(needle string, haystack []string) []string {
|
||||
if needle == "" {
|
||||
return []string{}
|
||||
}
|
||||
|
||||
matches := Find(needle, haystack, useFuzzySearch)
|
||||
matches := fuzzy.Find(needle, haystack)
|
||||
sort.Sort(matches)
|
||||
|
||||
return lo.Map(matches, func(match fuzzy.Match, _ int) string {
|
||||
return match.Str
|
||||
})
|
||||
}
|
||||
|
||||
// Duplicated from the fuzzy package because it's private there
|
||||
type stringSource []string
|
||||
|
||||
func (ss stringSource) String(i int) string {
|
||||
return ss[i]
|
||||
}
|
||||
|
||||
func (ss stringSource) Len() int { return len(ss) }
|
||||
|
||||
// Drop-in replacement for fuzzy.Find (except that it doesn't fill out
|
||||
// MatchedIndexes or Score, but we are not using these)
|
||||
func FindSubstrings(pattern string, data []string) fuzzy.Matches {
|
||||
return FindSubstringsFrom(pattern, stringSource(data))
|
||||
}
|
||||
|
||||
// Drop-in replacement for fuzzy.FindFrom (except that it doesn't fill out
|
||||
// MatchedIndexes or Score, but we are not using these)
|
||||
func FindSubstringsFrom(pattern string, data fuzzy.Source) fuzzy.Matches {
|
||||
substrings := strings.Fields(pattern)
|
||||
result := fuzzy.Matches{}
|
||||
|
||||
outer:
|
||||
for i := 0; i < data.Len(); i++ {
|
||||
s := data.String(i)
|
||||
for _, sub := range substrings {
|
||||
if !CaseAwareContains(s, sub) {
|
||||
continue outer
|
||||
}
|
||||
}
|
||||
result = append(result, fuzzy.Match{Str: s, Index: i})
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func Find(pattern string, data []string, useFuzzySearch bool) fuzzy.Matches {
|
||||
if useFuzzySearch {
|
||||
return fuzzy.Find(pattern, data)
|
||||
}
|
||||
return FindSubstrings(pattern, data)
|
||||
}
|
||||
|
||||
func FindFrom(pattern string, data fuzzy.Source, useFuzzySearch bool) fuzzy.Matches {
|
||||
if useFuzzySearch {
|
||||
return fuzzy.FindFrom(pattern, data)
|
||||
}
|
||||
return FindSubstringsFrom(pattern, data)
|
||||
}
|
||||
|
||||
func CaseAwareContains(haystack, needle string) bool {
|
||||
// if needle contains an uppercase letter, we'll do a case sensitive search
|
||||
if ContainsUppercase(needle) {
|
||||
|
||||
+24
-42
@@ -7,67 +7,49 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestFilterStrings(t *testing.T) {
|
||||
// TestFuzzySearch is a function.
|
||||
func TestFuzzySearch(t *testing.T) {
|
||||
type scenario struct {
|
||||
needle string
|
||||
haystack []string
|
||||
useFuzzySearch bool
|
||||
expected []string
|
||||
needle string
|
||||
haystack []string
|
||||
expected []string
|
||||
}
|
||||
|
||||
scenarios := []scenario{
|
||||
{
|
||||
needle: "",
|
||||
haystack: []string{"test"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{},
|
||||
needle: "",
|
||||
haystack: []string{"test"},
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
needle: "test",
|
||||
haystack: []string{"test"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{"test"},
|
||||
needle: "test",
|
||||
haystack: []string{"test"},
|
||||
expected: []string{"test"},
|
||||
},
|
||||
{
|
||||
needle: "o",
|
||||
haystack: []string{"a", "o", "e"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{"o"},
|
||||
needle: "o",
|
||||
haystack: []string{"a", "o", "e"},
|
||||
expected: []string{"o"},
|
||||
},
|
||||
{
|
||||
needle: "mybranch",
|
||||
haystack: []string{"my_branch", "mybranch", "branch", "this is my branch"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{"mybranch", "my_branch", "this is my branch"},
|
||||
needle: "mybranch",
|
||||
haystack: []string{"my_branch", "mybranch", "branch", "this is my branch"},
|
||||
expected: []string{"mybranch", "my_branch", "this is my branch"},
|
||||
},
|
||||
{
|
||||
needle: "test",
|
||||
haystack: []string{"not a good match", "this 'test' is a good match", "test"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{"test", "this 'test' is a good match"},
|
||||
needle: "test",
|
||||
haystack: []string{"not a good match", "this 'test' is a good match", "test"},
|
||||
expected: []string{"test", "this 'test' is a good match"},
|
||||
},
|
||||
{
|
||||
needle: "test",
|
||||
haystack: []string{"Test"},
|
||||
useFuzzySearch: true,
|
||||
expected: []string{"Test"},
|
||||
},
|
||||
{
|
||||
needle: "test",
|
||||
haystack: []string{"integration-testing", "t_e_s_t"},
|
||||
useFuzzySearch: false,
|
||||
expected: []string{"integration-testing"},
|
||||
},
|
||||
{
|
||||
needle: "integr test",
|
||||
haystack: []string{"integration-testing", "testing-integration"},
|
||||
useFuzzySearch: false,
|
||||
expected: []string{"integration-testing", "testing-integration"},
|
||||
needle: "test",
|
||||
haystack: []string{"Test"},
|
||||
expected: []string{"Test"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
assert.EqualValues(t, s.expected, FilterStrings(s.needle, s.haystack, s.useFuzzySearch))
|
||||
assert.EqualValues(t, s.expected, FuzzySearch(s.needle, s.haystack))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-33
@@ -357,15 +357,6 @@
|
||||
"type": "string",
|
||||
"description": "Whether to stack UI components on top of each other.\nOne of 'auto' (default) | 'always' | 'never'",
|
||||
"default": "auto"
|
||||
},
|
||||
"filterMode": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"substring",
|
||||
"fuzzy"
|
||||
],
|
||||
"description": "How things are filtered when typing '/'.\nOne of 'substring' (default) | 'fuzzy'",
|
||||
"default": "substring"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
@@ -559,11 +550,6 @@
|
||||
"additionalProperties": false,
|
||||
"type": "object",
|
||||
"description": "Config for showing the log in the commits view"
|
||||
},
|
||||
"truncateCopiedCommitHashesTo": {
|
||||
"type": "integer",
|
||||
"description": "When copying commit hashes to the clipboard, truncate them to this\nlength. Set to 40 to disable truncation.",
|
||||
"default": 12
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
@@ -1177,24 +1163,6 @@
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
},
|
||||
"amendAttribute": {
|
||||
"properties": {
|
||||
"resetAuthor": {
|
||||
"type": "string",
|
||||
"default": "a"
|
||||
},
|
||||
"setAuthor": {
|
||||
"type": "string",
|
||||
"default": "A"
|
||||
},
|
||||
"addCoAuthor": {
|
||||
"type": "string",
|
||||
"default": "c"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
},
|
||||
"stash": {
|
||||
"properties": {
|
||||
"popStash": {
|
||||
@@ -1257,7 +1225,7 @@
|
||||
},
|
||||
"commitMessage": {
|
||||
"properties": {
|
||||
"commitMenu": {
|
||||
"switchToEditor": {
|
||||
"type": "string",
|
||||
"default": "\u003cc-o\u003e"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user