From 83a705b6879c511e37c58b1a7f210ee2580b9ddd Mon Sep 17 00:00:00 2001 From: Alexander Shopov Date: Mon, 19 Jan 2026 10:13:14 +0100 Subject: [PATCH 1/4] git-gui i18n: Update Bulgarian translation (557t) Fix the meaning of a string Signed-off-by: Alexander Shopov --- po/bg.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/bg.po b/po/bg.po index 21f5bd54e9f3cd..2e98fb1d1e374d 100644 --- a/po/bg.po +++ b/po/bg.po @@ -1,7 +1,7 @@ # Bulgarian translation of git-gui po-file. -# Copyright (C) 2012, 2013, 2014, 2015, 2016, 2024, 2025 Alexander Shopov . +# Copyright (C) 2012, 2013, 2014, 2015, 2016, 2024, 2025, 2026 Alexander Shopov . # This file is distributed under the same license as the git package. -# Alexander Shopov , 2012, 2013, 2014, 2015, 2016, 2024, 2025. +# Alexander Shopov , 2012, 2013, 2014, 2015, 2016, 2024, 2025, 2026. # # msgid "" @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: git-gui master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-07-22 17:37+0200\n" -"PO-Revision-Date: 2025-07-28 11:56+0200\n" +"PO-Revision-Date: 2026-01-19 10:12+0100\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -322,7 +322,7 @@ msgid "Staged Changes (Will Commit)" msgstr "Промени в индекса (за подаване)" msgid "Stage Changed" -msgstr "Индексът е променен" +msgstr "Добавяне към индекса" msgid "Push" msgstr "Изтласкване" From 539e6337b82e385c58b4446f2f674090beb2860d Mon Sep 17 00:00:00 2001 From: Alexander Shopov Date: Mon, 19 Jan 2026 10:13:14 +0100 Subject: [PATCH 2/4] git-gui i18n: Update Bulgarian translation (558t) - Translate new string (558t) - Add graves for disambiguation - Improve glossary translation (96t) and synchonize with git Signed-off-by: Alexander Shopov --- po/bg.po | 90 ++++++----- po/glossary/bg.po | 402 +++++++++++++++++++++++++++++----------------- 2 files changed, 305 insertions(+), 187 deletions(-) diff --git a/po/bg.po b/po/bg.po index 2e98fb1d1e374d..ff5adb25cce612 100644 --- a/po/bg.po +++ b/po/bg.po @@ -230,7 +230,7 @@ msgid "Delete..." msgstr "Изтриване…" msgid "Reset..." -msgstr "Отмяна на промените…" +msgstr "Отмяна на промѐните…" msgid "Done" msgstr "Готово" @@ -394,7 +394,7 @@ msgid "Revert To Base" msgstr "Връщане към родителската версия" msgid "Visualize These Changes In The Submodule" -msgstr "Визуализиране на промените в подмодула" +msgstr "Визуализиране на промѐните в подмодула" msgid "Visualize Current Branch History In The Submodule" msgstr "Визуализация на историята на текущия клон в историята за подмодула" @@ -535,7 +535,7 @@ msgid "Options" msgstr "Опции" msgid "Fetch Tracking Branch" -msgstr "Изтегляне на промените от следения клон" +msgstr "Изтегляне на промѐните от следения клон" msgid "Detach From Local Branch" msgstr "Изтриване от локалния клон" @@ -602,14 +602,14 @@ msgid "Local Branches" msgstr "Локални клони" msgid "Delete Only If Merged Into" -msgstr "Изтриване, само ако промените са слети и другаде" +msgstr "Изтриване, само ако промѐните са слети и другаде" msgid "Always (Do not perform merge checks)" msgstr "Винаги (без проверка за сливане)" #, tcl-format msgid "The following branches are not completely merged into %s:" -msgstr "Не всички промени в клоните са слети в „%s“:" +msgstr "Не всички промѐни в клоните са слети в „%s“:" msgid "" "Recovering deleted branches is difficult.\n" @@ -1035,27 +1035,10 @@ msgid "" "\n" "You must stage at least 1 file before you can commit.\n" msgstr "" -"Няма промени за подаване.\n" +"Няма промѐни за подаване.\n" "\n" "Трябва да добавите поне един файл към индекса, за да подадете.\n" -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "" -"Задайте добро съобщение при подаване.\n" -"\n" -"Използвайте следния формат:\n" -"\n" -"● Първи ред: описание в едно изречение на промяната.\n" -"● Втори ред: празен.\n" -"● Останалите редове: опишете защо се налага тази промяна.\n" - msgid "Calling pre-commit hook..." msgstr "Изпълняване на куката преди подаване…" @@ -1071,7 +1054,7 @@ msgid "" " Do you really want to proceed with your Commit?" msgstr "" "Ще подадете към несвързан, отделѐн указател „HEAD“. Това е опасно, защото " -"при преминаването към клон ще загубите промените си, като единственият начин " +"при преминаването към клон ще загубите промѐните си, като единственият начин " "да ги върнете ще е чрез журнала на указателите (reflog). Най-вероятно трябва " "да не правите това подаване, а да създадете нов клон, преди да продължите.\n" " \n" @@ -1083,8 +1066,25 @@ msgstr "Изпълняване на куката за съобщението п msgid "Commit declined by commit-msg hook." msgstr "Подаването е отхвърлено от куката за съобщението при подаване." +msgid "" +"Please supply a commit message.\n" +"\n" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" +msgstr "" +"Задайте добро съобщение при подаване.\n" +"\n" +"Използвайте следния формат:\n" +"\n" +"● Първи ред: описание в едно изречение на промяната.\n" +"● Втори ред: празен.\n" +"● Останалите редове: опишете защо се налага тази промяна.\n" + msgid "Committing changes..." -msgstr "Подаване на промените…" +msgstr "Подаване на промѐните…" msgid "write-tree failed:" msgstr "неуспешно запазване на дървото (write-tree):" @@ -1103,7 +1103,7 @@ msgid "" "\n" "A rescan will be automatically started now.\n" msgstr "" -"Няма промени за подаване.\n" +"Няма промѐни за подаване.\n" "\n" "В това подаване не са променяни никакви файлове, а и не е подаване със " "сливане.\n" @@ -1111,7 +1111,7 @@ msgstr "" "Автоматично ще започне нова проверка.\n" msgid "No changes to commit." -msgstr "Няма промени за подаване." +msgstr "Няма промѐни за подаване." msgid "commit-tree failed:" msgstr "неуспешно подаване на дървото (commit-tree):" @@ -1191,7 +1191,7 @@ msgid "" "* No differences detected; stage the file to de-list it from Unstaged " "Changes.\n" msgstr "" -"● Няма разлики. Добавете файла към индекса, за да се извади от промените " +"● Няма разлики. Добавете файла към индекса, за да се извади от промѐните " "извън индекса.\n" msgid "* Click to find other files that may have the same state.\n" @@ -1350,15 +1350,15 @@ msgstr "Добавяне на всички променени файлове" #, tcl-format msgid "Revert changes in file %s?" -msgstr "Да се махнат ли промените във файла „%s“?" +msgstr "Да се махнат ли промѐните във файла „%s“?" #, tcl-format msgid "Revert changes in these %i files?" -msgstr "Да се махнат ли промените в тези %i файла?" +msgstr "Да се махнат ли промѐните в тези %i файла?" msgid "Any unstaged changes will be permanently lost by the revert." msgstr "" -"Всички промени, които не са били добавени в индекса, ще се загубят " +"Всички промѐни, които не са били добавени в индекса, ще се загубят " "безвъзвратно." msgid "Do Nothing" @@ -1393,11 +1393,11 @@ msgid "%d of the %d selected files could not be deleted." msgstr "%d от избраните %d файла не бяха изтрити." msgid "Reverting selected files" -msgstr "Махане на промените в избраните файлове" +msgstr "Махане на промѐните в избраните файлове" #, tcl-format msgid "Reverting %s" -msgstr "Махане на промените в „%s“" +msgstr "Махане на промѐните в „%s“" msgid "Goto Line:" msgstr "Към ред:" @@ -1507,7 +1507,7 @@ msgid "" msgstr "" "Да се преустанови ли сливането?\n" "\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще се загубят безвъзвратно.\n" +"В такъв случай ●ВСИЧКИ● неподадени промѐни ще се загубят безвъзвратно.\n" "\n" "Наистина ли да се преустанови сливането?" @@ -1518,17 +1518,17 @@ msgid "" "\n" "Continue with resetting the current changes?" msgstr "" -"Да се занулят ли промените?\n" +"Да се занулят ли промѐните?\n" "\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще се загубят безвъзвратно.\n" +"В такъв случай ●ВСИЧКИ● неподадени промѐни ще се загубят безвъзвратно.\n" "\n" -"Наистина ли да се занулят промените?" +"Наистина ли да се занулят промѐните?" msgid "Aborting" msgstr "Преустановяване" msgid "files reset" -msgstr "файла със занулени промени" +msgstr "файла със занулени промѐни" msgid "Abort failed." msgstr "Неуспешно преустановяване." @@ -1766,7 +1766,7 @@ msgid "Fetch Immediately" msgstr "Незабавно доставяне" msgid "Initialize Remote Repository and Push" -msgstr "Инициализиране на отдалеченото хранилище и изтласкване на промените" +msgstr "Инициализиране на отдалеченото хранилище и изтласкване на промѐните" msgid "Do Nothing Else Now" msgstr "Да не се прави нищо" @@ -1896,6 +1896,10 @@ msgstr "Главни/Малки" msgid "%s (%s): Create Desktop Icon" msgstr "%s (%s): Добавяне на икона на работния плот" +#, tcl-format +msgid "Replace existing shortcut: %s?" +msgstr "Да се замени ли съществуващата клавишна комбинация: %s?" + msgid "Cannot write shortcut:" msgstr "Клавишната комбинация не може да се запази:" @@ -2081,7 +2085,7 @@ msgstr "Командата върна грешка: %s" #, tcl-format msgid "Fetching new changes from %s" -msgstr "Доставяне на промените от „%s“" +msgstr "Доставяне на промѐните от „%s“" #, tcl-format msgid "remote prune %s" @@ -2095,7 +2099,7 @@ msgid "fetch all remotes" msgstr "доставяне от всички отдалечени" msgid "Fetching new changes from all remotes" -msgstr "Доставяне на промените от всички отдалечени хранилища" +msgstr "Доставяне на промѐните от всички отдалечени хранилища" msgid "remote prune all remotes" msgstr "окастряне на следящите изтрити" @@ -2107,7 +2111,7 @@ msgstr "" #, tcl-format msgid "Pushing changes to %s" -msgstr "Изтласкване на промените към „%s“" +msgstr "Изтласкване на промѐните към „%s“" #, tcl-format msgid "Mirroring to %s" @@ -2131,7 +2135,7 @@ msgstr "Настройки при пренасянето" msgid "Force overwrite existing branch (may discard changes)" msgstr "" -"Изрично презаписване на съществуващ клон (някои промени може да се загубят)" +"Изрично презаписване на съществуващ клон (някои промѐни може да се загубят)" msgid "Use thin pack (for slow network connections)" msgstr "Максимална компресия (за бавни мрежови връзки)" diff --git a/po/glossary/bg.po b/po/glossary/bg.po index 8b71fad9a5902b..96563ef4dc1f50 100644 --- a/po/glossary/bg.po +++ b/po/glossary/bg.po @@ -1,14 +1,14 @@ # Bulgarian translation of git-gui-glossary po-file. -# Copyright (C) 2012, 2013, 2014 Alexander Shopov . +# Copyright (C) 2012, 2013, 2014, 2026 Alexander Shopov . # This file is distributed under the same license as the git package. -# Alexander Shopov , 2012, 2013, 2014. +# Alexander Shopov , 2012, 2013, 2014, 2026. # # msgid "" msgstr "" "Project-Id-Version: git-gui-glossary master\n" -"POT-Creation-Date: 2014-01-13 21:39+0200\n" -"PO-Revision-Date: 2014-01-13 21:39+0200\n" +"POT-Creation-Date: 2020-01-26 22:26+0100\n" +"PO-Revision-Date: 2026-01-24 11:18+0100\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -20,23 +20,55 @@ msgstr "" #. "English Definition (Dear translator: This file will never be visible to the user! It should only serve as a tool for you, the translator. Nothing more.)" msgid "" "English Term (Dear translator: This file will never be visible to the user!)" -msgstr "Термин" +msgstr "Български превод на термина" + +#. "prematurely stop and abandon an operation" +msgid "abort" +msgstr "преустановявам" #. "" msgid "amend" msgstr "поправям" +#. "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" +msgid "ancestor" +msgstr "предшественик" + #. "" msgid "annotate" msgstr "анотирам" +#. "The person who initially created (authored) a commit" +msgid "author" +msgstr "автор" + +#. "a repository with only .git directory, without working directory" +msgid "bare repository" +msgstr "голо хранилище" + +#. "a parent version of the current file" +msgid "base" +msgstr "базова версия" + +#. "" +msgid "bisect" +msgstr "двоично търсене" + +#. "get the authors responsible for each line in a file" +msgid "blame" +msgstr "анотирам/анотиране" + +#. "" +msgid "blob" +msgstr "обект-BLOB" + #. "A 'branch' is an active line of development." msgid "branch [noun]" -msgstr "клон, разклонение [съществително]" +msgstr "клон [съществително]" #. "" msgid "branch [verb]" -msgstr "разклонявам [глагол]" +msgstr "създавам клон [глагол]" #. "" msgid "checkout [noun]" @@ -46,6 +78,18 @@ msgstr "изтегляне [съществително]" msgid "checkout [verb]" msgstr "изтегляне [глагол]" +#. "to select and apply a single commit to the current HEAD without merging" +msgid "cherry-pick" +msgstr "отбирам" + +#. "a commit that directly succeeds the current one in git's graph of commits" +msgid "child commit" +msgstr "подаване-наследник" + +#. "clean the state of the git repository, often after manually stopped operation" +msgid "cleanup" +msgstr "зачиствам" + #. "" msgid "clone [verb]" msgstr "клонирам [глагол]" @@ -56,45 +100,140 @@ msgstr "подаване [съществително]" #. "The action of storing a new snapshot of the project's state in the git history." msgid "commit [verb]" -msgstr "подавам [съществително]" +msgstr "подавам [глагол]" + +#. "a message that gets attached with any commit" +msgid "commit message" +msgstr "съобщение при подаване" + +#. "The person who committed a commit (to the current branch), which might be different than the author." +msgid "committer" +msgstr "подаващ" + +#. "a commit that precedes the current one in git's graph of commits (not necessarily directly)" +msgid "descendant" +msgstr "наследник" + +#. "checkout of a revision rather than some head" +msgid "detached HEAD" +msgstr "несвързан указател „HEAD“" + +#. "checkout of a revision rather than some head" +msgid "detached checkout" +msgstr "несвързано изтегляне" #. "" msgid "diff [noun]" -msgstr "разлика/промени [съществително]" +msgstr "разлика/промѐни [съществително]" #. "" msgid "diff [verb]" -msgstr "изчислявам разлика/промени [глагол]" +msgstr "изчислявам разлика/промѐни [глагол]" + +#. "" +msgid "directory" +msgstr "директория" -#. "A fast-forward is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." -msgid "fast forward merge" -msgstr "превъртащо/директно/тривиално сливане" +#. "A fast-forward merge is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have." +msgid "fast-forward" +msgstr "превъртане" #. "Fetching a branch means to get the branch's head from a remote repository, to find out which objects are missing from the local object database, and to get them, too." msgid "fetch" msgstr "доставяне" +#. "any merge strategy that works on a file by file basis" +msgid "file level merging" +msgstr "пофайлово сливане" + +#. "" +msgid "file" +msgstr "файл" + +#. "the last revision in a branch" +msgid "head" +msgstr "връх (на клон, разработка)" + +#. "script that gets executed automatically on some event" +msgid "hook" +msgstr "кука" + #. "One context of consecutive lines in a whole patch, which consists of many such hunks" msgid "hunk" msgstr "парче" #. "A collection of files. The index is a stored version of your working tree." msgid "index (in git-gui: staging area)" -msgstr "скеле/индекс/изба" +msgstr "индекс" + +#. "the first checkout during a clone operation" +msgid "initial checkout" +msgstr "първоначално изтегляне" + +#. "The very first commit in a repository" +msgid "initial commit" +msgstr "първоначално подаване" + +#. "a branch that resides in the local git repository" +msgid "local branch" +msgstr "локален клон" + +#. "a Git object that is not part of any pack" +msgid "loose object" +msgstr "непакетиран обект" + +#. "a branch called by convention 'master' that exists in a newly created git repository" +msgid "master branch" +msgstr "основен клон" #. "A successful merge results in the creation of a new commit representing the result of the merge." msgid "merge [noun]" -msgstr "сливане/обединяване [съществително]" +msgstr "сливане [съществително]" #. "To bring the contents of another branch into the current branch." msgid "merge [verb]" -msgstr "сливам/обединявам [глагол]" +msgstr "сливам [глагол]" #. "" msgid "message" msgstr "съобщение" -#. "Deletes all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." +#. "a remote called by convention 'origin' that the current git repository has been cloned from" +msgid "origin" +msgstr "хранилище-източник" + +#. "" +msgid "orphan commit" +msgstr "неродено подаване" + +#. "" +msgid "orphan reference" +msgstr "неродѐн указател" + +#. "a file containing many git objects packed together" +msgid "pack [noun]" +msgstr "пакет [глагол]" + +#. "the process of creating a pack file" +msgid "pack [verb]" +msgstr "пакетирам [глагол]" + +#. "a Git object part of some pack" +msgid "packed object" +msgstr "пакетиран обект" + +#. "a commit that directly precedes the current one in git's graph of commits" +msgid "parent commit" +msgstr "подаване-родител" + +msgid "patch" +msgstr "кръпка" + +#. "The path to a file" +msgid "path" +msgstr "път" + +#. "Delete all stale tracking branches under . These stale branches have already been removed from the remote repository referenced by , but are still locally available in 'remotes/'." msgid "prune" msgstr "окастрям" @@ -106,13 +245,44 @@ msgstr "издърпвам" msgid "push" msgstr "изтласквам" +#. "The process of rebasing one set of commits on top of another branch's head" +msgid "rebase [noun]" +msgstr "пребазиране [съществително]" + +#. "Re-apply one set of commits on top of another branch's head. Contrary to merge." +msgid "rebase [verb]" +msgstr "пребазирам [глагол]" + #. "" msgid "redo" msgstr "повтарям/правя наново" -#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." -msgid "remote" -msgstr "отдалечено хранилище" +#. "" +msgid "reference" +msgstr "указател" + +#. "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" +msgid "reflog" +msgstr "журнал на указателите" + +msgid "refmap" +msgstr "карта с указатели" + +#. "" +msgid "refspec" +msgstr "указател на версия" + +#. "The adjective for anything which is outside of the current (local) repository" +msgid "remote [adj]" +msgstr "отдалечен [прилагателно]" + +#. "A branch in any other ('remote') repository" +msgid "remote branch" +msgstr "отдалечен клон" + +#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks." +msgid "remote repository" +msgstr "отдалечено/насрещно хранилище" #. "A collection of refs (?) together with an object database containing all objects which are reachable from the refs... (oops, you've lost me here. Again, please an explanation for mere mortals?)" msgid "repository" @@ -120,11 +290,23 @@ msgstr "хранилище" #. "" msgid "reset" -msgstr "занулявам/отменям" +msgstr "занулявам" + +#. "decide which changes from alternative versions of a file should persist in Git" +msgid "resolve (a conflict)" +msgstr "коригирам (конфликт)" + +#. "abandon changes and go to pristine version" +msgid "revert changes" +msgstr "връщане на оригинала" #. "" msgid "revert" -msgstr "връщам/отменям" +msgstr "отменям" + +#. "expression that signifies a revision in git" +msgid "revision expression" +msgstr "израз за версия" #. "A particular state of files and directories which was stored in the object database." msgid "revision" @@ -134,154 +316,86 @@ msgstr "версия" msgid "sign off" msgstr "подписвам" -#. "" +#. "see: staging area. In some areas of git this is called 'index'." +msgid "stage [noun], index" +msgstr "индекс [съществително]" + +#. "add some content of files and directories to the staging area in preparation for a commit" +msgid "stage [verb]" +msgstr "добавям в индекса [глагол]" + +#. "The place where changes from files are marked to be included for the next commit. In some areas of git this is called 'index'." msgid "staging area" -msgstr "скеле/индекс/изба" +msgstr "индекс" + +#. "The place (stack) where changes can be temporarily saved without committing" +msgid "stash [noun]" +msgstr "скатано [съществително]" + +#. "temporarily save changes in a stack without committing" +msgid "stash [verb]" +msgstr "скатано [глагол]" #. "" msgid "status" msgstr "състояние" -#. "A ref pointing to a tag or commit object" +#. "" +msgid "submodule" +msgstr "подмодул" + +#. "A ref pointing to some commit object. In other words: A label on a specific commit." msgid "tag [noun]" msgstr "етикет [съществително]" -#. "" +#. "The process of creating a tag at a specific commit object" msgid "tag [verb]" msgstr "задавам етикет [глагол]" +#. "The person who created a tag" +msgid "tagger" +msgstr "етикиращ" + +#. "file whose content is tracked/not tracked by git" +msgid "tracked/untracked" +msgstr "следен/неследен" + #. "A regular git branch that is used to follow changes from another repository." msgid "tracking branch" msgstr "следящ клон" +#. "" +msgid "trailer" +msgstr "епилог" + +#. "1. tree object, 2. directory tree" +msgid "tree" +msgstr "обект-дърво/дърво" + #. "" msgid "undo" msgstr "отменям" +#. "Remove content of files from the staging area again so that it will not be part of the next commit" +msgid "unstage" +msgstr "изваждено от индекса" + +#. "Retrieving the temporarily saved changes back again from the stash" +msgid "unstash [verb]" +msgstr "изваждам от индекса [глагол]" + #. "" msgid "update" msgstr "обновявам" +#. "" +msgid "upstream branch" +msgstr "следен клон" + #. "" msgid "verify" msgstr "проверявам" #. "The tree of actual checked out files." -msgid "working copy, working tree" -msgstr "работно копие/работно дърво" - -#. "a commit that succeeds the current one in git's graph of commits (not necessarily directly)" -msgid "ancestor" -msgstr "предшественик" - -#. "prematurely stop and abandon an operation" -msgid "abort" -msgstr "преустановявам" - -#. "a repository with only .git directory, without working directory" -msgid "bare repository" -msgstr "голо хранилище" - -#. "a parent version of the current file" -msgid "base" -msgstr "родителска версия" - -#. "get the authors responsible for each line in a file" -msgid "blame" -msgstr "анотирам/анотиране" - -#. "to select and apply a single commit without merging" -msgid "cherry-pick" -msgstr "отбирам" - -#. "a commit that directly succeeds the current one in git's graph of commits" -msgid "child" -msgstr "дете" - -#. "clean the state of the git repository, often after manually stopped operation" -msgid "cleanup" -msgstr "зачиствам" - -#. "a message that gets attached with any commit" -msgid "commit message" -msgstr "съобщение при подаване" - -#. "a commit that precedes the current one in git's graph of commits (not necessarily directly)" -msgid "descendant" -msgstr "наследник" - -#. "checkout of a revision rather than a some head" -msgid "detached checkout" -msgstr "несвързано изтегляне" - -#. "any merge strategy that works on a file by file basis" -msgid "file level merging" -msgstr "пофайлово сливане" - -#. "the last revision in a branch" -msgid "head" -msgstr "глава/връх (на клон, разработка)" - -#. "script that gets executed automatically on some event" -msgid "hook" -msgstr "кука/автоматичен скрипт" - -#. "the first checkout during a clone operation" -msgid "initial checkout" -msgstr "първоначално изтегляне" - -#. "a branch that resides in the local git repository" -msgid "local branch" -msgstr "локален клон" - -#. "a Git object that is not part of any pack" -msgid "loose object" -msgstr "непакетиран обект" - -#. "a branch called by convention 'master' that exists in a newly created git repository" -msgid "master branch" -msgstr "основен клон" - -#. "a remote called by convention 'origin' that the current git repository has been cloned from" -msgid "origin" -msgstr "хранилище-източник" - -#. "a file containing many git objects packed together" -msgid "pack [noun]" -msgstr "етикет" - -#. "a Git object part of some pack" -msgid "packed object" -msgstr "пакетиран обект" - -#. "a commit that directly precedes the current one in git's graph of commits" -msgid "parent" -msgstr "родител" - -#. "the log file containing all states of the HEAD reference (in other words past pristine states of the working copy)" -msgid "reflog" -msgstr "журнал на указателите" - -#. "decide which changes from alternative versions of a file should persist in Git" -msgid "resolve (a conflict)" -msgstr "коригирам (конфликт)" - -#. "abandon changes and go to pristine version" -msgid "revert changes" -msgstr "връщане на оригинала" - -#. "expression that signifies a revision in git" -msgid "revision expression" -msgstr "израз за версия" - -#. "add some content of files and directories to the staging area in preparation for a commit" -msgid "stage/unstage" -msgstr "(добавяне) към скелето за подаване/изваждане от скелето за подаване" - -#. "temporarily save changes in a stack without committing" -msgid "stash" -msgstr "скатавам промени" - -#. "file whose content is tracked/not tracked by git" -msgid "tracked/untracked" -msgstr "следен/неследен" +msgid "working directory, working copy, working tree" +msgstr "работна директория, работно копие, работно дърво" From 1a729ccb930f3c3e206117aeb4f536c9864e09c9 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sun, 25 Jan 2026 10:46:23 +0100 Subject: [PATCH 3/4] git-gui: mark *.po files at any directory level as UTF-8 When a commit is viewed in Gitk that changes a file in po/glossary, the patch text shows mojibake instead of correctly decoded UTF-8 text. Gitk retrieves the encoding attribute to decide how to treat the bytes that make up the patch text. There is an attribute definition that all files are US-ASCII, and a later attribute definition overrides this. But the override, which specifies UTF-8, applies only to *.po files in directory po/ and does not apply to subdirectories. Widen the pattern to apply to all directory levels. Signed-off-by: Johannes Sixt --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 889d58257fb3c8..f03c0fe3c9fe49 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ * whitespace=indent-with-non-tab,trailing-space,space-before-tab,tabwidth=4 * encoding=US-ASCII git-gui.sh encoding=UTF-8 -/po/*.po encoding=UTF-8 +*.po encoding=UTF-8 /GIT-VERSION-GEN eol=lf Makefile whitespace=!indent,trail,space meson.build whitespace=space From ab689ea7f91ab0858e85776f31102203d3ea7b83 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 25 Jan 2026 09:43:29 -0800 Subject: [PATCH 4/4] Revert "Merge branch 'cs/rebased-subtree-split'" This reverts commit 79e3055baba32e2952e6e8994cdcd4fc145ba7f0, reversing changes made to 9813aace1e52765e01e688672cdcdcbe25336ec7. Regresison report https://lore.kernel.org/git/755578cb-07e0-4b40-aa90-aacf4d45ccaa@heusel.eu/ --- contrib/subtree/git-subtree.sh | 141 ++++++++++------------------- contrib/subtree/t/t7900-subtree.sh | 83 ++--------------- 2 files changed, 55 insertions(+), 169 deletions(-) diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index 3ebe88cbeadb02..17106d1a721519 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -325,12 +325,6 @@ check_parents () { done } -# Usage: get_notree REV -get_notree () { - assert test $# = 1 - test -r "$cachedir/notree/$1" -} - # Usage: set_notree REV set_notree () { assert test $# = 1 @@ -517,71 +511,6 @@ find_existing_splits () { done || exit $? } -# Usage: find_other_splits DIR REV UNREVS... -# -# Scan history in REV UNREVS for other `git subtree split --rejoin` -# merge commits belonging to prefixes outside of DIR. These -# "other splits" don't contribute to DIR and can be ignored. -# -# If any such rejoins are found, -# -# * emit their second-parent as an UNREV, avoiding a -# potentially costly history traversal -# -# * mark the merge commit as "notree" to ignore it -find_other_splits () { - assert test $# -ge 2 - dir="${1%/}" - rev="$2" - shift 2 - debug "Looking for other splits with dir != $dir..." - - git log \ - --grep '^git-subtree-mainline:' \ - --no-patch \ - --no-show-signature \ - --format='hash: %H%nparents: %P%n%(trailers:key=git-subtree-dir,key=git-subtree-mainline,key=git-subtree-split)%nEND' \ - "$rev" ${@:+"$@"} | - while read -r key val - do - case "$key" in - hash:) - commit_hash="${val}" - commit_parents= - subtree_dir= - subtree_mainline= - subtree_split= - ;; - parents:) - commit_parents="${val}" ;; - git-subtree-dir:) - subtree_dir="${val%/}/" ;; - git-subtree-mainline:) - subtree_mainline="${val}" ;; - git-subtree-split:) - subtree_split="${val}" ;; - END) - # verify: - # * all git-subtree-* trailers are present - # * this subtree is outside of $dir - # * the first parent is the git-subtree-mainline: - # * the commit has at least two parents - if test -n "${subtree_dir}" && - test -n "${subtree_split}" && - test -n "${subtree_mainline}" && - test "${subtree_dir}" = "${subtree_dir#"${dir}/"}" && - test "${commit_parents}" != "${commit_parents#"$subtree_mainline "}" && - rev_exists "${commit_hash}^2" - then - debug "find_other_splits excluding dir=$subtree_dir merged in ${commit_hash}" - echo "^${commit_hash}^2" - set_notree "${commit_hash}" - fi - ;; - esac - done -} - # Usage: copy_commit REV TREE FLAGS_STR copy_commit () { assert test $# = 3 @@ -856,6 +785,42 @@ ensure_valid_ref_format () { die "fatal: '$1' does not look like a ref" } +# Usage: should_ignore_subtree_split_commit REV +# +# Check if REV is a commit from another subtree and should be +# ignored from processing for splits +should_ignore_subtree_split_commit () { + assert test $# = 1 + + git show \ + --no-patch \ + --no-show-signature \ + --format='%(trailers:key=git-subtree-dir,key=git-subtree-mainline)' \ + "$1" | + ( + have_mainline= + subtree_dir= + + while read -r trailer val + do + case "$trailer" in + git-subtree-dir:) + subtree_dir="${val%/}" ;; + git-subtree-mainline:) + have_mainline=y ;; + esac + done + + if test -n "${subtree_dir}" && + test -z "${have_mainline}" && + test "${subtree_dir}" != "$arg_prefix" + then + return 0 + fi + return 1 + ) +} + # Usage: process_split_commit REV PARENTS process_split_commit () { assert test $# = 2 @@ -1029,39 +994,31 @@ cmd_split () { fi unrevs="$(find_existing_splits "$dir" "$rev" "$repository")" || exit $? - (find_other_splits >"$cachedir/prune" "$dir" "$rev" $unrevs) || exit $? # We can't restrict rev-list to only $dir here, because some of our # parents have the $dir contents the root, and those won't match. # (and rev-list --follow doesn't seem to solve this) - revmax="$(git rev-list \ - <"$cachedir/prune" \ - --topo-order \ - --reverse \ - --parents \ - --stdin \ - --count \ - "$rev" \ - $unrevs - )" + grl='git rev-list --topo-order --reverse --parents $rev $unrevs' + revmax=$(eval "$grl" | wc -l) revcount=0 createcount=0 extracount=0 - git rev-list \ - <"$cachedir/prune" \ - --topo-order \ - --reverse \ - --parents \ - --stdin \ - "$rev" \ - $unrevs | + eval "$grl" | while read rev parents do - if get_notree "$rev" + if should_ignore_subtree_split_commit "$rev" then continue fi - process_split_commit "$rev" "$parents" + parsedparents='' + for parent in $parents + do + if ! should_ignore_subtree_split_commit "$parent" + then + parsedparents="$parsedparents$parent " + fi + done + process_split_commit "$rev" "$parsedparents" done || exit $? latest_new=$(cache_get latest_new) || exit $? diff --git a/contrib/subtree/t/t7900-subtree.sh b/contrib/subtree/t/t7900-subtree.sh index 4db3a6eff37c4d..316dc5269e2b6f 100755 --- a/contrib/subtree/t/t7900-subtree.sh +++ b/contrib/subtree/t/t7900-subtree.sh @@ -411,9 +411,8 @@ test_expect_success 'split sub dir/ with --rejoin' ' git fetch ./"sub proj" HEAD && git subtree merge --prefix="sub dir" FETCH_HEAD && split_hash=$(git subtree split --prefix="sub dir" --annotate="*") && - git subtree split --prefix="sub dir" --annotate="*" -b spl --rejoin && - test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''" && - test "$(git rev-list --count spl)" -eq 5 + git subtree split --prefix="sub dir" --annotate="*" --rejoin && + test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''" ) ' @@ -443,25 +442,18 @@ test_expect_success 'split with multiple subtrees' ' git -C "$test_count" subtree add --prefix=subADir FETCH_HEAD && git -C "$test_count" fetch ./subB HEAD && git -C "$test_count" subtree add --prefix=subBDir FETCH_HEAD && - test "$(git -C "$test_count" rev-list --count main)" -eq 7 && test_create_commit "$test_count" subADir/main-subA1 && test_create_commit "$test_count" subBDir/main-subB1 && git -C "$test_count" subtree split --prefix=subADir \ - --squash --rejoin -m "Sub A Split 1" -b a1 && - test "$(git -C "$test_count" rev-list --count main..a1)" -eq 1 && + --squash --rejoin -m "Sub A Split 1" && git -C "$test_count" subtree split --prefix=subBDir \ - --squash --rejoin -m "Sub B Split 1" -b b1 && - test "$(git -C "$test_count" rev-list --count main..b1)" -eq 1 && + --squash --rejoin -m "Sub B Split 1" && test_create_commit "$test_count" subADir/main-subA2 && test_create_commit "$test_count" subBDir/main-subB2 && git -C "$test_count" subtree split --prefix=subADir \ - --squash --rejoin -m "Sub A Split 2" -b a2 && - test "$(git -C "$test_count" rev-list --count main..a2)" -eq 2 && - test "$(git -C "$test_count" rev-list --count a1..a2)" -eq 1 && + --squash --rejoin -m "Sub A Split 2" && test "$(git -C "$test_count" subtree split --prefix=subBDir \ - --squash --rejoin -d -m "Sub B Split 1" -b b2 2>&1 | grep -w "\[1\]")" = "" && - test "$(git -C "$test_count" rev-list --count main..b2)" -eq 2 && - test "$(git -C "$test_count" rev-list --count b1..b2)" -eq 1 + --squash --rejoin -d -m "Sub B Split 1" 2>&1 | grep -w "\[1\]")" = "" ' # When subtree split-ing a directory that has other subtree @@ -485,7 +477,6 @@ do test_path_is_file subA/file1.t && test_path_is_file subA/subB/file2.t && git subtree split --prefix=subA --branch=bsplit && - test "$(git rev-list --count bsplit)" -eq 2 && git checkout bsplit && test_path_is_file file1.t && test_path_is_file subB/file2.t && @@ -498,7 +489,6 @@ do --prefix=subA/subB mksubtree && test_path_is_file subA/subB/file3.t && git subtree split --prefix=subA --branch=bsplit && - test "$(git rev-list --count bsplit)" -eq 3 && git checkout bsplit && test_path_is_file file1.t && test_path_is_file subB/file2.t && @@ -507,67 +497,6 @@ do ' done -# Usually, -# -# git subtree merge -P subA --squash f00... -# -# makes two commits, in this order: -# -# 1. Squashed 'subA/' content from commit f00... -# 2. Merge commit (1) as 'subA' -# -# Commit 1 updates the subtree but does *not* rewrite paths. -# Commit 2 rewrites all trees to start with `subA/` -# -# Commit 1 either has no parents or depends only on other -# "Squashed 'subA/' content" commits. -# -# For merge without --squash, subtree produces just one commit: -# a merge commit with git-subtree trailers. -# -# In either case, if the user rebases these commits, they will -# still have the git-subtree-* trailers… but will NOT have -# the layout described above. -# -# Test that subsequent `git subtree split` are not confused by this. -test_expect_success 'split with rebased subtree commit' ' - subtree_test_create_repo "$test_count" && - ( - cd "$test_count" && - test_commit file0 && - test_create_subtree_add \ - . mksubtree subA file1 --squash && - test_path_is_file subA/file1.t && - mkdir subB && - test_commit subB/bfile && - git commit --amend -F - <<'EOF' && -Squashed '\''subB/'\'' content from commit '\''badf00da911bbe895347b4b236f5461d55dc9877'\'' - -Simulate a cherry-picked or rebased subtree commit. - -git-subtree-dir: subB -git-subtree-split: badf00da911bbe895347b4b236f5461d55dc9877 -EOF - test_commit subA/file2 && - test_commit subB/bfile2 && - git commit --amend -F - <<'EOF' && -Split '\''subB/'\'' into commit '\''badf00da911bbe895347b4b236f5461d55dc9877'\'' - -Simulate a cherry-picked or rebased subtree commit. - -git-subtree-dir: subB -git-subtree-mainline: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -git-subtree-split: badf00da911bbe895347b4b236f5461d55dc9877 -EOF - git subtree split --prefix=subA --branch=bsplit && - git checkout bsplit && - test_path_is_file file1.t && - test_path_is_file file2.t && - test "$(last_commit_subject)" = "subA/file2" && - test "$(git rev-list --count bsplit)" -eq 2 - ) -' - test_expect_success 'split sub dir/ with --rejoin from scratch' ' subtree_test_create_repo "$test_count" && test_create_commit "$test_count" main1 &&