diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..b311dcdd --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,29 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + +cff-version: 1.2.0 +title: Pro Git +message: >- + If you use this software, please cite it using the + metadata from this file. +type: software +authors: + - given-names: Scott + family-names: Chacon + email: schacon@gmail.com + - given-names: Ben + family-names: Straub + email: ben@straub.cc +identifiers: + - type: url + value: 'https://git-scm.com/book/en/v2' + description: Pro Git website +repository-code: 'https://github.com/progit/progit2' +url: 'https://git-scm.com/book/en/v2' +keywords: + - git + - book + - asciidoc + - pro-git +license: CC-BY-NC-SA-3.0 +version: '2' diff --git a/Gemfile b/Gemfile index fda906bc..60c316aa 100644 --- a/Gemfile +++ b/Gemfile @@ -1,17 +1,17 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' -gem 'asciidoctor', '2.0.16' +gem 'asciidoctor', '2.0.18' -gem 'json', '2.6.1' +gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '1.6.1' +gem 'asciidoctor-pdf', '2.3.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.2.0' +gem 'pygments.rb', '2.3.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '3.19.3' +gem 'html-proofer', '4.4.1' gem 'kindlegen', '3.1.1' diff --git a/Rakefile b/Rakefile index d32493c3..c32b9e3a 100644 --- a/Rakefile +++ b/Rakefile @@ -53,7 +53,7 @@ namespace :book do file 'book/contributors.txt' do puts 'Generating contributors list' sh "echo 'Contributors as of #{header_hash}:\n' > book/contributors.txt" - sh "git shortlog -s | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" + sh "git shortlog -s HEAD | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" end desc 'build HTML format' @@ -98,7 +98,7 @@ namespace :book do task :check => [:build_html, :build_epub] do puts 'Checking generated books' - sh "htmlproofer --check-html progit.html" + sh "htmlproofer progit.html" sh "epubcheck progit.epub" end diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index d97987a0..02bfb718 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -23,7 +23,7 @@ image::images/local.png["Локален контрол на версиите, диаграма"] Една от най-популярните подобни системи се нарича RCS и все още се разпространява с много компютри и до днес. -https://www.gnu.org/software/rcs/[RCS] работи съхранявайки множество от пачове (разликите във файловете) в специален формат на диска и може да възстанови състоянието на файла към произволен момент добавяйки всички тези пачове. +https://www.gnu.org/software/rcs/[RCS^] работи съхранявайки множество от пачове (разликите във файловете) в специален формат на диска и може да възстанови състоянието на файла към произволен момент добавяйки всички тези пачове. ==== Централизирани Version Control Systems diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 174f02d2..df25191b 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -84,6 +84,7 @@ Vim, Emacs и Notepad++ са популярни текстови редакто Примерно под Windows, може да се стигне до преждевременно прекратена Git операция по време на редакция инициирана от Git. ==== +[[_new_default_branch]] ==== Име на клон по подразбиране По подразбиране, Git ще създава клон с има _master_, когато създавате хранилища с `git init`. diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index ee9a5d35..ab44fdb6 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -18,7 +18,7 @@ $ git help config ---- Тези команди са полезни, защото имате достъп до тях винаги, дори когато сте офлайн. -Ако помощните страници и тази книга не са достатъчни в специфични ситуации, можете да опитате `\#git`, `\#github` или `#gitlab` каналите на Libera Chat IRC сървъра на адрес https://libera.chat/[]. +Ако помощните страници и тази книга не са достатъчни в специфични ситуации, можете да опитате `\#git`, `\#github` или `#gitlab` каналите на Libera Chat IRC сървъра на адрес https://libera.chat/[^]. Тези канали редовно са пълни със стотици потребители напреднали с Git и нямащи нищо против да помагат.(((IRC))) В допълнение, ако не се нуждаете от пълната manpage документация, а само от кратко пояснение за опциите на конкретна команда, можете да използвате параметрите `-h` or `--help` така: diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 7eb1cf9c..e6d5ea4d 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -6,9 +6,9 @@ [NOTE] ==== -Тази книга е написана за Git версия *2.8.0*. -Въпреки че повечето команди, които използваме трябва да работят дори в много стари версии на Git, някои от тях може да работят с леки разлики, ако вашата версия е по-стара. -Понеже Git е достатъчно добър в поддържането на обратната съвместимост, всяка версия след 2.8 би трябвало да работи добре. +Тази книга е написана за Git версия 2. +Понеже Git е достатъчно добър в поддържането на обратната съвместимост, всяка актуална версия би трябвало да работи добре. +Въпреки че повечето команди трябва да работят дори в много стари версии на Git, някои от тях може да работят с леки разлики, ако вашата версия е по-стара. ==== ==== Инсталация в Linux @@ -29,7 +29,7 @@ $ sudo dnf install git-all $ sudo apt install git-all ---- -За повече подробности и опции касаещи инсталацията в Linux, вижте сайта на Git: https://git-scm.com/download/linux[]. +За повече подробности и опции касаещи инсталацията в Linux, вижте сайта на Git: https://git-scm.com/download/linux[^]. ==== Инсталация в macOS @@ -46,7 +46,7 @@ $ git --version Ако не сте го инсталирали вече, системата ще ви предложи да го направите. Ако желаете по-актуална версия, можете да я инсталирате и през binary инсталатор. -OSX Git инсталатор за MacOS се поддържа и може да се изтегли от https://git-scm.com/download/mac[]. +OSX Git инсталатор за MacOS се поддържа и може да се изтегли от https://git-scm.com/download/mac[^]. .Git macOS Installer image::images/git-osx-installer.png[Git macOS installer] @@ -55,8 +55,8 @@ image::images/git-osx-installer.png[Git macOS installer] И тук има няколко опции да инсталирате Git.(((Windows, installing))) Официалната версия е налична за сваляне от сайта на Git. -Отворете https://git-scm.com/download/win[] и изтеглянето ще започне автоматично. -Имайте предвид, че това е проект наречен Git for Windows, който е отделен от самия Git, за повече информация за него, посетете https://gitforwindows.org[]. +Отворете https://git-scm.com/download/win[^] и изтеглянето ще започне автоматично. +Имайте предвид, че това е проект наречен Git for Windows, който е отделен от самия Git, за повече информация за него, посетете https://gitforwindows.org[^]. Ако искате автоматизирана инсталация, можете да използвате https://chocolatey.org/packages/git[Git Chocolatey package]. Chocolatey пакетът се поддържа от общност доброволци. @@ -87,7 +87,7 @@ $ sudo apt-get install asciidoc xmlto docbook2x [NOTE] ==== -Потребителите на RHEL и RHEL деривати като CentOS и Scientific Linux трябва https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F[да разрешат EPEL хранилището] за да изтеглят пакета `docbook2X`. +Потребителите на RHEL и RHEL деривати като CentOS и Scientific Linux трябва https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F[да разрешат EPEL хранилището^] за да изтеглят пакета `docbook2X`. ==== Ако използвате Debian-базирана дистрибуция (Debian/Ubuntu/Ubuntu-варианти), ще се нуждаете също и от пакета `install-info`: @@ -114,7 +114,7 @@ $ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi поради различия в имената на двоичните файлове. След като се уверите, че имате инсталирани всички зависимости, продължавате напред и изтегляте най-новия архив с изходен код на Git. -Това може да стане от няколко места - сайта Kernel.org на адрес https://www.kernel.org/pub/software/scm/git[], или от хранилището в GitHub - https://github.com/git/git/releases[]. +Това може да стане от няколко места - сайта Kernel.org на адрес https://www.kernel.org/pub/software/scm/git[], или от хранилището в GitHub - https://github.com/git/git/releases[^]. Обикновено страницата в GitHub би следвало да е по-актуална, но и Kernel.org също разполага с контролни сигнатури, ако желаете да проверите какво сте изтеглили. Следва компилация и инсталиране: diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index b39cb874..5abff98c 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -36,6 +36,15 @@ Git също така не вижда никакви непроследени ф Засега, този клон е винаги `master`, както е по подразбиране, към момента това не ви интересува. <> ще разгледа клоновете и референциите в подробности. +[NOTE] +==== +GitHub смени името на клона по подразбиране от `master` на `main` в средата на 2020 г. и други Git хостове направиха същото. +Ето защо, може да установите, че клонът по подразбиране на новосъздадените хранилища е `main` вместо `master`. +Освен това, името на клона по подразбиране може да се променя (както видяхме в <>), така че може да видите съвсем различно име във вашия случай. + +Git обаче все още използва `master` по подразбиране, така че ще го използваме по-натам в книгата. +==== + Нека сега добавим нов файл в проекта, прост `README` файл. Ако файлът не е съществувал преди и изпълните `git status`, ще видите untracked файла си така: @@ -254,7 +263,7 @@ doc/**/*.pdf [TIP] ==== -GitHub поддържа сравнително подробен списък от добри `.gitignore` примери за стотици проекти и езици на адрес https://github.com/github/gitignore[], ако искате отправна точка за проекта си. +GitHub поддържа сравнително подробен списък от добри `.gitignore` примери за стотици проекти и езици на адрес https://github.com/github/gitignore[^], ако искате отправна точка за проекта си. ==== [NOTE] @@ -617,4 +626,4 @@ $ git add README Git установява, че това е безусловно преименуване, така че няма значение дали сте променили файла по този начин или с `mv` командата. Единствената реална разлика е, че `git mv` е една команда вместо три -- така че това е команда за удобство. -По-важното е, че можете да използвате произволни средства за преименуване на файлове и да се занимавате с add/rm действията по-късно, преди да къмитнете промените. +По-важното е, че можете да използвате произволни средства за преименуване на файлове и да се занимавате с `add`/`rm` действията по-късно, преди да къмитнете промените. diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index d8d33378..9c76a42d 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -153,7 +153,7 @@ $ git push --set-upstream origin main [source,console] ---- -git branch --all +$ git branch --all * main remotes/origin/HEAD -> origin/master remotes/origin/main diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index e0657a86..41819ee5 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -231,5 +231,5 @@ To https://github.com/schacon/simplegit - [deleted] serverfix ---- -Това в общи линии изтрива указателя от сървъра. +Всичко, което това прави е да изтрие указателя от сървъра. Git сървърът в повечето случаи ще пази данните за известно време докато мине garbage collection системата му, така че случайно изтритите данни често могат лесно да се възстановят. diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index 3ce18bf3..d2563e66 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -54,4 +54,4 @@ mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local ---- -За повече информация и детайлно упътване за създаване на SSH ключове на множество операционни системи, погледнете GitHub SSH keys страницата на адрес https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[]. +За повече информация и детайлно упътване за създаване на SSH ключове на множество операционни системи, погледнете GitHub SSH keys страницата на адрес https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^]. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 7fd528a1..3894c80e 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -19,7 +19,7 @@ GitLab горещо препоръчва инсталирането на сър * От сорс-файлове. * От облачен доставчик като AWS, Google Cloud Platform, Azure, OpenShift и Digital Ocean. -За повече информация прочетете https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) ръководството]. +За повече информация прочетете https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) ръководството^]. ==== Администрация diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index 94ef247d..db8b1a63 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -5,6 +5,6 @@ Дори и да сте си инсталирали собствен сървър, може все още да искате да се възползвате от публичните хостинг услуги за съхранение на проектите ви с отворен код – така по-лесно ще бъдете в контакт с общността от open source разработчици. В днешни дни броят на хостинг опциите е достатъчно голям, така че да изберете вашата претегляйки предимствата и недостатъците им. -Актуален списък на вариантите се поддържа в страницата GitHosting в основното wiki на Git на адрес https://git.wiki.kernel.org/index.php/GitHosting[]. +Актуален списък на вариантите се поддържа в страницата GitHosting в основното wiki на Git на адрес https://git.wiki.kernel.org/index.php/GitHosting[^]. Ще разгледаме в детайли GitHub в главата <>, понеже е най-голямата хостинг система в момента и вероятно ще искате да я ползвате така или иначе. Но съществуват и дузини други варианти, ако не желаете да инсталирате и поддържате собствен Git сървър. diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index f5bab24b..3e8065c9 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -7,7 +7,7 @@ Git може да използва 4 основни протокола за тр (((protocols, local))) Най-простият от четирите е _локалният протокол_, при който отдалеченото хранилище се намира просто в друга директория на диска. -Това често се ползва, ако всички в екипа ви имат достъп до споделена файлова система от рода на https://en.wikipedia.org/wiki/Network_File_System[NFS] споделено устройство или пък, в по-редки случаи, когато всички се логват на един и същи компютър. +Това често се ползва, ако всички в екипа ви имат достъп до споделена файлова система от рода на https://en.wikipedia.org/wiki/Network_File_System[NFS^] споделено устройство или пък, в по-редки случаи, когато всички се логват на един и същи компютър. Последното не е препоръчително, защото всички копия на хранилището ще се пазят на едно място и рискът от загубата на данни при хардуерна повреда е значително по-голям. Ако имате споделена монтирана файлова система, тогава вие клонирате, изпращате и изтегляте данни от локално, файлово-базирано хранилище. @@ -82,7 +82,7 @@ Git може да работи през HTTP в два различни режи Ако се опитате да изпратите данни към хранилище настроено да изисква оторизация (както би следвало да е), сървърът може да ви попита за потребителско име и парола за достъп. Същото важи и за достъпа само за четене. -На практика, в услуги като GitHub, URL-ът който ползвате за да разглеждате хранилището в браузъра (например, https://github.com/schacon/simplegit[]) е същият URL, който можете да използвате за клонирането му или пък за изпращане на промени към него (ако имате права за това). +На практика, в услуги като GitHub, URL-ът който ползвате за да разглеждате хранилището в браузъра (например, https://github.com/schacon/simplegit[^]) е същият URL, който можете да използвате за клонирането му или пък за изпращане на промени към него (ако имате права за това). ===== Dumb HTTP diff --git a/book/04-git-server/sections/smart-http.asc b/book/04-git-server/sections/smart-http.asc index 723520b4..76d36e22 100644 --- a/book/04-git-server/sections/smart-http.asc +++ b/book/04-git-server/sections/smart-http.asc @@ -68,5 +68,5 @@ $ htpasswd -c /srv/git/.htpasswd schacon [NOTE] ==== -За повече информация за настройка на Apache, вижте документацията тук: https://httpd.apache.org/docs/current/howto/auth.html[] +За повече информация за настройка на Apache, вижте документацията тук: https://httpd.apache.org/docs/current/howto/auth.html[^] ==== diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index b299dead..7b698b53 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -60,7 +60,7 @@ image::images/git-diff-check.png[Изход от `git diff --check`] Като основно правило, съобщенията ви трябва да започват с един ред не по-дълъг от 50 символа, описващ стегнато промените, следван от празен ред, след което може да се разположат по-дългите обяснения. Git проектът например изисква подробното описание да включва мотивите ви за дадената промяна и да обяснява разликите с оригиналния вариант на кода -- и това е добро правило, което може да следвате. Пишете съобщенията си в императивна форма: "Fix bug" а не "Fixed bug" или "Fixes bug" -Тук има един https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[шаблон, написан отначало от Tim Pope, който леко преработихме]: +Тук има един https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[шаблон, написан отначало от Tim Pope, който леко преработихме^]: [source,text] ---- @@ -154,8 +154,7 @@ To jessica@githost:simplegit.git Последният ред от изхода отгоре показва полезно съобщение за резултата от push операцията. Основният формат е `.. fromref -> toref`, където `oldref` означава референция към предишния къмит, `newref` - към текущия, `fromref` е името на локалния клон, който се изпраща, и `toref` - на отдалечения, който се обновява. Ще виждате подобен изход по-натам в дискусиите, така че да имате представа какво означава това ще е полезно в осмислянето на различните статуси на хранилищата. - -Повече подробности има в документацията на командата https://git-scm.com/docs/git-push[git-push]. +Повече подробности има в документацията на командата https://git-scm.com/docs/git-push[git-push^]. Продължаваме с този пример. Скоро след това, John прави някакви промени, къмитва ги в локалното си хранилище и се опитва да ги изпрати в същия сървър: diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 873302f5..d956de37 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -92,7 +92,7 @@ Martin Fowler е автор на ръководството "Patterns for Managi То обхваща всички популярни работни процеси в Git и обяснява как и кога да се използват. Налична е и глава сравняваща high и low integration frequencies. -https://martinfowler.com/articles/branching-patterns.html +https://martinfowler.com/articles/branching-patterns.html[^] ==== ==== Обобщение diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 5fd95584..7808861b 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -364,7 +364,7 @@ image::images/large-merges-2.png[Сливане на topic клонове в lon Проектът Git също има и клон `maint`, който се прави от последната версия за да осигури backported пачове в случай, че се изисква maintenance release. Така при клониране на Git хранилището, имате четири клона, които може да използвате за да пробвате проекта в различните му състояния на разработка, в зависимост от това колко актуален искате да бъде или как искате да допринасяте към него. А поддържащият проекта има структуриран работен процес за управление на новите промени. Все пак, Git проектът е със специализиран работен процес. -За да го разберете напълно, можете да погледнете https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide]. +За да го разберете напълно, можете да погледнете https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide^]. [[_rebase_cherry_pick]] ===== Rebasing и Cherry-Picking работни процеси diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 3e2a7e31..f15cb2f9 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -2,7 +2,7 @@ (((GitHub, user accounts))) Първото нещо, което трябва да сторите, е да си създадете безплатен акаунт. -Просто отворете https://github.com[], изберете си незаето потребителско име, посочете имейл адрес и парола и натиснете големия зелен бутон "`Sign up for GitHub`". +Просто отворете https://github.com[^], изберете си незаето потребителско име, посочете имейл адрес и парола и натиснете големия зелен бутон "`Sign up for GitHub`". .Регистрационната форма на GitHub image::images/signup.png[Регистрационната форма на GitHub.] @@ -16,7 +16,7 @@ GitHub ще ви изпрати имейл за потвърждение на п GitHub предоставя почти всичките си функции безплатно, с изключение на някои по-модерни екстри. Платените планове на GitHub включват по-модерни инструменти и функции, както и увеличени лимити за безплатните услуги, но ние няма да се занимаваме с тях в тази книга. -Повече информация за наличните планове и сравнения между плановете може да намерите на https://github.com/pricing[]. +Повече информация за наличните планове и сравнения между плановете може да намерите на https://github.com/pricing[^]. ==== Щраквайки върху Octocat логото в горния ляв ъгъл на екрана, ще попаднете във вашата dashboard страница. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 40f26544..7a26c1db 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -53,7 +53,7 @@ GitHub е проектиран да следва специфичен модел ==== Можете да ползвате официалния *GitHub CLI* инструмент вместо уеб интерфейса на GitHub за повечето операции. Инструментът е наличен за Windows, MacOS, и Linux. -Отидете на https://cli.github.com/[GitHub CLI homepage], където има инструкции за инсталация и ползването му. +Отидете на https://cli.github.com/[GitHub CLI homepage^], където има инструкции за инсталация и ползването му. ==== ===== Създаване на Pull Request @@ -469,7 +469,7 @@ image::images/markdown-07-emoji.png[Интензивно ползване на e Съществуват солиден брой уеб услуги, които осигуряват emoji символи. Можете да погледнете тук: -https://www.webfx.com/tools/emoji-cheat-sheet/ +https://www.webfx.com/tools/emoji-cheat-sheet/[^] ==== ===== Изображения @@ -544,4 +544,4 @@ $ git push <3> Този подход може да е удобен, но си има и недостатъци Git с готовност ще свърши тази работа за вас, но няма да ви предупреди ако направите къмит в `master`, изтеглите от `progit` и след това публикувате в `origin` -- всички тези операции са напълно валидни при такава ситуация. -Така че, трябва да внимавате никога да не къмитвате директно в `master`, защото този клон ефективно принадлежи към upstream хранилището. \ No newline at end of file +Така че, трябва да внимавате никога да не къмитвате директно в `master`, защото този клон ефективно принадлежи към upstream хранилището. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index f35ad557..6792a821 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -107,7 +107,7 @@ image::images/scripting-04-webhook-debug.png[Webhook debug] Друга чудесна особеност е, че можете да повтаряте изпращането на всяка заявка за да тествате уеб услугата си лесно. -За повече информация как да пишете webhooks и за всички възможни типове GitHub събития, погледнете документацията за разработчици на GitHub на адрес https://developer.github.com/webhooks/[]. +За повече информация как да пишете webhooks и за всички възможни типове GitHub събития, погледнете документацията за разработчици на GitHub на адрес https://developer.github.com/webhooks/[^]. ==== GitHub API @@ -296,7 +296,7 @@ image::images/scripting-07-status.png[Commit status] Въпреки, че правим всичко през `curl` и прости HTTP заявки в нашите примери, налични са няколко open-source библиотеки, които могат да ви помогнат да ползвате API интерфейса в по-идиоматичен стил. По време на писането на книгата, поддържаните езици включваха Go, Objective-C, Ruby, и .NET. -Проверете https://github.com/octokit[] за повече информация, понеже те поемат повечето HTTP действия вместо вас. +Проверете https://github.com/octokit[^] за повече информация, понеже те поемат повечето HTTP действия вместо вас. Надяваме се, че тези инструменти ще ви помогнат да настроите поведението на GitHub така, че да комуникира с вашите системи и работни похвати така като желаете. -За пълна документация на целия API интерфейс, както и за упътвания за често извършвани задачи, посетете https://developer.github.com[]. +За пълна документация на целия API интерфейс, както и за упътвания за често извършвани задачи, посетете https://developer.github.com[^]. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index b00d5c0d..0eec4295 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -17,10 +17,11 @@ * Режимът "`store`" съхранява данните за достъп в обикновен текстов файл на диска и те не се премахват от там. Това значи, че докато не смените паролата си на Git хоста, няма да е нужно да я въвеждате. Недостатъкът е, че паролите ви се съхраняват в чист текст в домашната директория. -* Ако използвате Mac, Git предлага "`osxkeychain`" режим, при който данните за достъп се съхраняват в защитена keychain прикрепена към системния ви акаунт. +* Ако използвате Mac, Git предлага "`osxkeychain`" режим, при който данните за достъп се съхраняват в защитената keychain прикрепена към системния ви акаунт. Този метод пази данните на диска, те остават валидни, но са криптирани със същата система, която съхранява HTTPS сертификати и auto-fill данните на браузъра Safari. -* Ако използвате Windows, macOS или Linux, можете да инсталирате помощния инструмент https://github.com/GitCredentialManager/git-credential-manager["`Git Credential Manager`"]. - Той използва нативни за операционната система data stores за да контролира сензитивна информация. +* Ако използвате Windows, можете да активирате *Git Credential Manager* функцията когато инсталирате https://gitforwindows.org/[Git for Windows] или инсталирате отделно https://github.com/GitCredentialManager/git-credential-manager/releases/latest[най-новия GCM] като независима услуга (service). + Това е подобно на "`osxkeychain`" helper-а описан отгоре, но използва Windows Credential Store за контрол на поверителната информация. + Могат да се използват и средствата за достъп в WSL1 или WSL2. Вижте https://github.com/GitCredentialManager/git-credential-manager#windows[GCM инструкции за инсталиране] за повече информация. Избирате един от тези методи чрез конфигурацията на Git: diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 881a6ef5..e2666d68 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -84,7 +84,7 @@ SHA-1 хеш сумата е с дължина 20 байта или 160 бита Ако всички 6.5 милиарда човека на земята програмираха, и всяка секунда всеки един от тях произвежда код еквивалентен на цялото Linux ядро (6.5 милиона Git обекта) и го изпраща в едно грамадно общо Git хранилище, биха били необходими около 2 години докато това хранилище получи толкова обекти, че да има 50% шанс от единично SHA-1 повторение. Така че, SHA-1 колизията е по-малко вероятна от това всеки член на екипа ви да бъде атакуван и убит от вълци в различно място в една и съща нощ. -Ако заделите няколко хиляди долара за изчислителна мощ, възможно е да синтезирате два файла с един и същи хеш, както беше демонстрирано от https://shattered.io/[] през февруари 2017г. +Ако заделите няколко хиляди долара за изчислителна мощ, възможно е да синтезирате два файла с един и същи хеш, както беше демонстрирано от https://shattered.io/[^] през февруари 2017г. Git постепенно преминава към SHA256 като хеширащ алгоритъм по подразбиране, който е много по-устойчив на collision атаки и има помощен код за смекчаване на този тип атаки (въпреки че, не може да ги елимиира изцяло). ==== diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index cf4dce2d..9c99f580 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -323,7 +323,7 @@ drop 5aecc10 This commit is broken [NOTE] ==== Drew DeVault е създал практическо hands-on упътване с упражнения за използването на `git rebase`. -Достъпно е на адрес: https://git-rebase.io/[] +Достъпно е на адрес: https://git-rebase.io/[^] ==== ==== Мощната алтернатива: filter-branch @@ -337,7 +337,7 @@ Drew DeVault е създал практическо hands-on упътване с ==== `git filter-branch` има много недостатъци и вече не се препоръчва като начин за презапис на историята. Вместо това, използвайте `git-filter-repo`, която е скрипт на Python и върши по-добра работа в ситуациите, в които нормално бихте използвали `filter-branch`. -Документацията и сорс кода ѝ могат да се намерят на https://github.com/newren/git-filter-repo[]. +Документацията и сорс кода ѝ могат да се намерят на https://github.com/newren/git-filter-repo[^]. ==== [[_removing_file_every_commit]] diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index 3cf4d766..cf5d0bf6 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -29,7 +29,7 @@ $ gpg --gen-key [source,console] ---- -$ git config --global user.signingkey 0A46826A +$ git config --global user.signingkey 0A46826A! ---- Сега Git по подразбиране ще използва този ключ за да подписва тагове и къмити, ако желаете това. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index ec3e31fe..84861a90 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -262,7 +262,7 @@ From https://github.com/chaconinc/DbConnector Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644' ---- -Командата по подразбиране приема, че желаете да обновите съдържанието на `master` клона в хранилището на подмодула. +Командата по подразбиране приема, че желаете да обновите съдържанието на `master` клона в хранилището на подмодула (този, към който сочи `HEAD` в отдалеченото хранилище). Но можете да промените това поведение, ако желаете. Например, ако искате DbConnector подмодула да следи клона "`stable`" от хранилището си, можете да зададете това или в `.gitmodules` файла (така че и всички останали да следят този клон) или само в локалния ви файл `.git/config`. Нека използваме `.gitmodules`: diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 979c5806..d86fa94c 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -37,7 +37,6 @@ Това става, като указвате на системата да конвертира двоичната информация в текст, който да се съпоставя с нормална diff операция. Ще използваме тази техника за решаване на един от най-досадните известни проблеми: контрол на версиите за Microsoft Word документи. -За мнозина Word е един от най-ужасните редактори, но така или иначе продължава да се ползва масово. Ако искате да контролирате Word документи, можете да ги съберете в Git хранилище и да къмитвате от време на време, но каква полза получавате с това? Ако нормално изпълните `git diff`, виждате нещо такова: @@ -63,7 +62,7 @@ Binary files a/chapter1.docx and b/chapter1.docx differ Ще трябва да го настроите. В случая, ще използваме програмата `docx2txt` за да конвертираме Word документите в четими текстови файлове, за които могат да се правят четими diff-ове. -Първо инсталираме `docx2txt`; налична е на https://sourceforge.net/projects/docx2txt[]. +Първо инсталираме `docx2txt`; налична е на https://sourceforge.net/projects/docx2txt[^]. Следваме инструкциите в `INSTALL` файла за да я сложим на място, в което шелът да я намира. След това, ще напишем кратък wrapper скрипт за конвертиране на изхода във формат, който Git очаква. Създайте файл достъпен в пътя ви с име `docx2txt`, съдържащ: @@ -298,7 +297,7 @@ test/ export-ignore ===== `export-subst` -Когато експортирате файлове за внедряване, можете да прилагате правилата за форматиране и разширяване на ключови думи на `git log` към избрани части от файлове маркирани с атрибута `export-subst`. +Когато експортирате файлове за внедряване, можете да прилагате правилата за форматиране и разширяване на ключови думи на ``git log`` към избрани части от файлове маркирани с атрибута ``export-subst``. Например, ако искате да вмъкнете файл с име `LAST_COMMIT` и съдържащ метаданните от последния къмит в проекта си автоматично, когато изпълните `git archive`, можете да го направите със следните `.gitattributes` и `LAST_COMMIT` файлове: diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 20d56eac..959f9fce 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -45,7 +45,7 @@ $ man git-config ---- Тази команда изброява и обяснява всички налични опции в подробности. -Алтернативно място да получите тази информация е https://git-scm.com/docs/git-config.html[]. +Алтернативно място да получите тази информация е https://git-scm.com/docs/git-config[^]. ===== `core.editor` @@ -248,7 +248,7 @@ $ git config --global color.diff.meta "blue black bold" Ако искате да го пробвате, P4Merge работи на всички основни платформи. В примерите ще използваме пътища, които се ползват в macOS и Linux, за Windows ще трябва да смените `/usr/local/bin` към съответния път в конкретната инсталация. -За начало, https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools[изтеглете P4Merge от Perforce]. +За начало, https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools[изтеглете P4Merge от Perforce^]. След това, ще създадем външни wrapper скриптове за изпълнение на командите ви. Ще използваме macOS пътя за изпълнимия файл, в други системи той ще е мястото, където се намира `p4merge` програмата. Създаваме merge wrapper скрипт наречен `extMerge`, който извиква програмата с всички необходими аргументи: @@ -402,7 +402,7 @@ $ git config --global core.autocrlf true ---- Ако сте на Linux или macOS, няма да искате автоматично конвертиране, обаче ако някой файл с CRLF внезапно се появи, бихте желали Git да го коригира. -Можете да зададете CRLF към LF конвертирането да се прави при къмит със стойността input за `core.autocrlf`: +Можете да зададете CRLF към LF конвертирането да се прави при къмит задавайки стойността `input` за `core.autocrlf`: [source,console] ---- diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index 517a9cf2..4136181d 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -1,14 +1,14 @@ ==== Git и Bazaar -Друга популярна DVCS система е http://bazaar.canonical.com/[Bazaar]. -Bazaar е безплатна система с отворен код, част от проекта https://www.gnu.org/[GNU Project]. +Друга популярна DVCS система е http://bazaar.canonical.com/[Bazaar^]. +Bazaar е безплатна система с отворен код, част от проекта https://www.gnu.org/[GNU Project^]. Тя работи по много различен начин от Git. Понякога, за да направите едно и също нещо като в Git, ще трябва да използвате различна ключова дума и също така някои често използвани ключови думи нямат значението, което може би бихте очаквали. По-специално, управлението на клонове е много различно и може да предизвика конфуз, особено сред Git потребителите. Но въпреки всичко, да се работи с Bazaar хранилище от Git такова, е възможно. Съществуват много проекти, които позволяват да използвате Git като Bazaar клиент. -Тук ще използваме проекта на Felipe Contreras, който можете да намерите на https://github.com/felipec/git-remote-bzr[]. +Тук ще използваме проекта на Felipe Contreras, който можете да намерите на https://github.com/felipec/git-remote-bzr[^]. За да го инсталирате, трябва просто да свалите git-remote-bzr в папка от пътя ви: [source,console] @@ -85,11 +85,11 @@ $ git fetch По-късно ще видим как да се справим с това. Bazaar използва същия модел за игнориране на файлове като Git, но в допълнение има две възможности без еквивалент в Git. -Пълното описание може да се намери в http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[документацията]. +Пълното описание може да се намери в http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[документацията^]. Тези две възможности са: 1. "!!" позволява да игнорирате определени файлови маски дори ако те са указани с "!" правило. -2. "RE:" в началото на реда позволява да укажете като маска https://docs.python.org/3/library/re.html[Python регулярен израз] (Git позволява само шел globs). +2. "RE:" в началото на реда позволява да укажете като маска https://docs.python.org/3/library/re.html[Python регулярен израз^] (Git позволява само шел globs). В резултат на това, възникват две различни ситуации: diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index dd92a997..c34a51c4 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -8,7 +8,7 @@ DVCS вселената не включва само Git. Добрите новини са, че ако предпочитате да използвате Git локално, но се налага да работите по проект, чийто сорс код се контролира с Mercurial, съществува начин Git да функционира като клиент на Mercurial хранилища. Понеже Git използва remotes за комуникация със сървърни хранилища, не е изненадващо, че въпросният бридж е имплементиран като remote helper. -Името на проекта е git-remote-hg, и може да се намери на https://github.com/felipec/git-remote-hg[]. +Името на проекта е git-remote-hg, и може да се намери на https://github.com/felipec/git-remote-hg[^]. ===== git-remote-hg @@ -31,7 +31,7 @@ Git-remote-hg има и още една друга зависимост: биб $ pip install mercurial ---- -Ако нямате Python, посетете https://www.python.org/[] и го инсталирайте преди това. +Ако нямате Python, посетете https://www.python.org/[^] и го инсталирайте преди това. Последното нещо, от което се нуждаем, е Mercurial клиента. Изтеглете го и го инсталирайте от https://www.mercurial-scm.org/[]. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index d22ed31a..2e76f107 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -15,12 +15,12 @@ Perforce е много популярна version-control система в ко ===== Git Fusion (((Perforce, Git Fusion))) -Perforce предоставя продукта Git Fusion (наличен на http://www.perforce.com/git-fusion[]), който синхронизира Perforce сървър с Git хранилища от страна на сървъра. +Perforce предоставя продукта Git Fusion (наличен на http://www.perforce.com/git-fusion[^]), който синхронизира Perforce сървър с Git хранилища от страна на сървъра. ====== Настройка За нашите примери ще използваме най-лесния метод за инсталиране на Git Fusion, виртуална машина, в която работят Perforce демона и Git Fusion. -Можете да свалите имидж за виртуалната машина от http://www.perforce.com/downloads/Perforce/20-User[], и след това да го стартирате в предпочитания от вас виртуализационен софтуер (в случая ползваме VirtualBox). +Можете да свалите имидж за виртуалната машина от http://www.perforce.com/downloads/Perforce/20-User[^], и след това да го стартирате в предпочитания от вас виртуализационен софтуер (в случая ползваме VirtualBox). След стартирането си, виртуалната машина изисква задаване на пароли за три Linux потребителя (`root`, `perforce` и `git`) и предоставя име на инстанцията, което може да се използва за различаване на конкретната инсталация от другите в същата мрежа. Когато всичко това приключи ще видите следното: @@ -323,7 +323,7 @@ Git-p4 не е толкова гъвкаво и пълно решение кат [NOTE] ====== Трябва да поставите `p4` инструмента някъде в пътищата на `PATH` променливата, за да работите с git-p4. -По времето на писането на този текст, той е наличен на http://www.perforce.com/downloads/Perforce/20-User[]. +По времето на писането на този текст, той е наличен на http://www.perforce.com/downloads/Perforce/20-User[^]. ====== ====== Настройка diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index 72eeb5a0..bc95c40b 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -53,7 +53,7 @@ ImportError: No module named fastimport $ pip install fastimport ---- -Ако не е наличен, можете да го изтеглите от https://pypi.python.org/pypi/fastimport/. +Ако не е наличен, можете да го изтеглите от https://pypi.python.org/pypi/fastimport/[^]. Под Windows, `bzr-fastimport` се инсталира автоматично със standalone версията и инсталацията по подразбиране (изберете всички чекбоксове). diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index 40af844d..1c93f291 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -33,7 +33,7 @@ $ svn log --xml --quiet | grep author | sort -u | \ [NOTE] ==== Ако пробвате това на Windows машина, ще срещнете проблем. -Microsoft предлага няколко добри съвета и примера на адрес https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[]. +Microsoft предлага няколко добри съвета и примера на адрес https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[^]. ==== Може да подадете този файл на командата `git svn` за да я подпомогнете в по-акуратното мапване на данните за авторите. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index e3444a31..c10683cc 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -202,7 +202,7 @@ tree [source,console] ---- $ echo 'new file' > new.txt -$ git update-index --add --cacheinfo 100644 \ +$ git update-index --cacheinfo 100644 \ 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt $ git update-index --add new.txt ---- diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index d854aa75..2389e4e2 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -74,7 +74,7 @@ HEAD файлът е symbolic референция към текущия кло Под symbolic референция се има предвид, че за разлика от нормалните референции, тя не съдържа SHA-1 стойност, а вместо това указател към друга референция. В някои редки случаи обаче, HEAD файлът все пак може да съдържа SHA-1 стойност на git обект. -Това се случва при извличане на таг, къмит или отдалечен клон, при което хранилището ви попада в https://git-scm.com/docs/git-checkout#_detached_head["detached HEAD"] състояние. +Това се случва при извличане на таг, къмит или отдалечен клон, при което хранилището ви попада в https://git-scm.com/docs/git-checkout#_detached_head["detached HEAD"^] състояние. Ако погледнете файла, обикновено виждате нещо такова: diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index 2b90849b..c94bc325 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -96,7 +96,7 @@ image::images/github_win.png[GitHub for Windows] ===== Инсталация -GitHub for Windows може да се изтегли от https://windows.github.com[], а GitHub for macOS от https://mac.github.com[]. +GitHub for Windows може да се изтегли от https://windows.github.com[^], а GitHub for macOS от https://mac.github.com[^]. При първото им стартиране приложенията ви водят през първоначална настройка на Git, вкл. конфигуриране на вашето име и имейл адрес, след което задават много настройки по подразбиране като credential кеширането и CRLF обработката. И двете са винаги актуални - обновяванията им се издърпват и инсталират на заден план докато приложението работи. @@ -148,5 +148,5 @@ Git вътрешно си има отделни операции за публи ==== Други графични инструменти Съществуват множество други графични Git клиенти, при това с широк диапазон от функционалности -- от тясно специализирани върху конкретни дейности до такива, които се опитват да въплатят всичко, което Git поддържа. -Официалният сайт на Git съдържа списък с най-популярните клиенти на адрес https://git-scm.com/downloads/guis[]. -Още по-пълен списък е наличен от Git wiki сайта на адрес https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces[]. \ No newline at end of file +Официалният сайт на Git съдържа списък с най-популярните клиенти на адрес https://git-scm.com/downloads/guis[^]. +Още по-пълен списък е наличен от Git wiki сайта на адрес https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces[^]. diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index d6040ca7..94f881df 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -7,4 +7,4 @@ It provides a dedicated view in the IDE to work with Git and GitHub Pull Request image::images/jb.png[Version Control ToolWindow in JetBrains IDEs] The integration relies on the command-line git client, and requires one to be installed. -The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[]. +The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 55b2ef5c..e3c0d46d 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -5,7 +5,7 @@ (((posh-git))) Стандартният команден терминал в Windows (`cmd.exe`) не е особено подходящ за комфортна работа с Git, но ако използвате PowerShell, тогава нещата са други. Това също работи ако използвате PowerShell Core на друга платформа, например Linux или macOS. -Пакетът posh-git (https://github.com/dahlbyk/posh-git[]) осигурява мощна tab-completion функционалност, както и подобрен промпт за вашите хранилища. +Пакетът posh-git (https://github.com/dahlbyk/posh-git[^]) осигурява мощна tab-completion функционалност, както и подобрен промпт за вашите хранилища. Изглежда така: .PowerShell с Posh-git @@ -21,9 +21,9 @@ image::images/posh-git.png[PowerShell с Posh-git] Ако сте администратор и искате да го зададете за всички потребители, използвайте `-Scope LocalMachine`. Ако сте нормален потребител без административни права, използвайте `-Scope CurrentUser` за да зададете настройката само за вас. -Повече за PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[]. +Повече за PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[^]. -Повече за PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[]. +Повече за PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[^]. За да зададете стойност `RemoteSigned` на `ExecutionPolicy` за всички потребители, използвайте командата: @@ -36,7 +36,7 @@ image::images/posh-git.png[PowerShell с Posh-git] Ако имате поне PowerShell 5 или PowerShell 4 с PackageManagement, можете да използвате пакетния мениджър за да издърпате posh-git. -Повече информация за PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[]. +Повече информация за PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[^]. [source,powershell] ---- @@ -71,7 +71,7 @@ image::images/posh-git.png[PowerShell с Posh-git] ===== От изходен код -Просто изтеглете posh-git версия от (https://github.com/dahlbyk/posh-git[]), и я разархивирайте. +Просто изтеглете posh-git версия от https://github.com/dahlbyk/posh-git/releases[^], и я разархивирайте. След това импортирайте модула използвайки пълния път до `файла posh-git.psd1`: [source,powershell] @@ -82,5 +82,5 @@ image::images/posh-git.png[PowerShell с Posh-git] Това ще добави правилния ред във файла `profile.ps1` и posh-git ще е активен следващия път, когато отворите вашия промпт. -За описание на Git status summary информацията, която се вижда в промпта, погледнете: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] -За повече подробности как да настроите вашия posh-git промпт, вижте: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[]. +За описание на Git status summary информацията, която се вижда в промпта, погледнете: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[^] +За повече подробности как да настроите вашия posh-git промпт, вижте: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[^]. diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index 796c850b..c2843d9b 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -9,6 +9,6 @@ * В статус лентата можете да виждате текущия git клон и колко промени сте направили. * Всички промени по файл сега са видими чрез маркери в gutter-а. * Може да използвате част от функционалността на Sublime Merge git клиента в Sublime Text. - Това изисква инсталиран Sublime Merge. Вижте: https://www.sublimemerge.com/[]. + Това изисква инсталиран Sublime Merge. Вижте: https://www.sublimemerge.com/[^]. -Официалната документация на Sublime Text е на адрес: https://www.sublimetext.com/docs/3/git_integration.html[]. +Официалната документация на Sublime Text е на адрес: https://www.sublimetext.com/docs/3/git_integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 3a807ae2..87d3a11d 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -16,4 +16,3 @@ Visual Studio разполага с Git инструменти вградени * ... и още много! Прочетете https://docs.microsoft.com/visualstudio/version-control[официалната документация^] за повече информация. - diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 5c3e0fa7..c6397c57 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -16,6 +16,6 @@ Visual Studio Code има вградена git поддръжка. ** Разрешаване на merge конфликти. ** Преглед на diffs. * Чрез допълнително разширение, можете също така да обслужвате GitHub Pull Request-и: - https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[]. + https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[^]. -Официалната документация е на адрес: https://code.visualstudio.com/Docs/editor/versioncontrol[]. +Официалната документация е на адрес: https://code.visualstudio.com/Docs/editor/versioncontrol[^]. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index c5319597..6f7d8172 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -40,13 +40,13 @@ zstyle ':vcs_info:git:*' formats '%b' .Потребителски `zsh` промпт image::images/zsh-prompt.png[Потребителски `zsh` промпт] -За повече информация за vcs_info, погледнете документацията в `zshcontrib(1)` man страницата или онлайн на адрес http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. +За повече информация за vcs_info, погледнете документацията в `zshcontrib(1)` man страницата или онлайн на адрес http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. -Вместо `vcs_info`, може да изберете prompt customization скрипта, който е част от Git и се нарича `git-prompt.sh`; вижте https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh[] за подробности. +Вместо `vcs_info`, може да изберете prompt customization скрипта, който е част от Git и се нарича `git-prompt.sh`; вижте https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh[^] за подробности. `git-prompt.sh` е съвместим с Bash и Zsh. Zsh е достатъчно мощен и има цели frameworks предназначени да го направят още по-добър. -Една от тях е "oh-my-zsh", налична от https://github.com/robbyrussell/oh-my-zsh[]. +Една от тях е "oh-my-zsh", налична от https://github.com/robbyrussell/oh-my-zsh[^]. Плъгин системата на oh-my-zsh идва с git tab-completion и има разнообразни промпт "теми", много от които показват version-control информация. Изображението от фигурата <> е само един вариант на това какво може да се направи с тази система. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 48ed6aa1..382edc4d 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -2,7 +2,7 @@ (((Dulwich)))(((Python))) Съществува и Git имплементация за Python - Dulwich. -Проектът се хоства на адрес https://www.dulwich.io/ +Проектът се хоства на адрес https://www.dulwich.io/[^] Целта му е да предостави интерфейс за достъп до git хранилища (локални и отдалечени), който не се обръща към git директно, а вместо това използва чист Python. Той също съдържа и опционални C разширения, които значително подобряват производителността. @@ -40,4 +40,4 @@ porcelain.log('.', max_entries=1) ==== Допълнителна информация -API документацията, ръководство за ползване и много примери за това как да извършвате специфични задачи в Dulwich може да намерите на официалния уебсайт https://www.dulwich.io[]. +API документацията, ръководство за ползване и много примери за това как да извършвате специфични задачи в Dulwich може да намерите на официалния уебсайт https://www.dulwich.io[^]. diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index 3b8ec1ad..c4ee0665 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -5,7 +5,7 @@ Тази имплементация няма никакви нативни зависимости и по тази причина е неподатлива на manual memory management грешки. Също така е прозрачна за стандартните Golang performance analysis инструментариуми като CPU, Memory profilers, race detector, и т.н. -go-git акцентира върху разширяемостта и съвместимостта и поддържа повечето plumbing APIs, документирани на https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[]. +go-git акцентира върху разширяемостта и съвместимостта и поддържа повечето plumbing APIs, документирани на https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[^]. Ето прост пример за използването на Go APIs: @@ -51,12 +51,12 @@ r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ ---- Pluggable storage системата осигурява много интересни опции. -Например, https://github.com/go-git/go-git/tree/master/_examples/storage[] позволява да съхранявате референции, обекти и конфигурационни настройки в Aerospike база данни. +Например, https://github.com/go-git/go-git/tree/master/_examples/storage[^] позволява да съхранявате референции, обекти и конфигурационни настройки в Aerospike база данни. Друга функция е гъвкавата абстракция на файловата система. -Посредством https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem[] е лесно да се съхраняват всички файлове по различен начин, например като се пакетират в единичен архив на диска или като се запазват всички in-memory. +Посредством https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem[^] е лесно да се съхраняват всички файлове по различен начин, например като се пакетират в единичен архив на диска или като се запазват всички in-memory. -Друг advanced use-case включва HTTP клиент с фина настройка, като този от https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[]. +Друг advanced use-case включва HTTP клиент с фина настройка, като този от https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[^]. [source, go] ---- @@ -80,4 +80,4 @@ r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ==== Допълнителна информация Извън обхвата на тази книга е да разглеждаме всички поддържани от go-git възможности. -Ако се нуждаете от подробности, налична е API документация на адрес https://pkg.go.dev/github.com/go-git/go-git/v5[], както и комплект от примери на https://github.com/go-git/go-git/tree/master/_examples[]. +Ако се нуждаете от подробности, налична е API документация на адрес https://pkg.go.dev/github.com/go-git/go-git/v5[^], както и комплект от примери на https://github.com/go-git/go-git/tree/master/_examples[^]. diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index 009430df..993baaee 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -3,7 +3,7 @@ (((jgit)))(((java))) Ако искате да ползвате Git от Java програма, налична е пълнофункционалната библиотека JGit. JGit е Git имплементация написана на Java и е много популярна в Java общността. -Проектът JGit е под шапката на Eclipse и е на адрес https://www.eclipse.org/jgit/[]. +Проектът JGit е под шапката на Eclipse и е на адрес https://www.eclipse.org/jgit/[^]. ==== Настройка @@ -19,7 +19,7 @@ JGit е Git имплементация написана на Java и е мног ---- -Елементът `version` вероятно ще е различен по времето, когато четете това, проверете https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit[] за актуална информация за хранилището. +Елементът `version` вероятно ще е различен по времето, когато четете това, проверете https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit[^] за актуална информация за хранилището. След като това бъде направено, Maven автоматично ще намери и използва JGit библиотеките, които ви трябват. Ако вместо това сами управлявате binary зависимостите, компилирани JGit binaries има на адрес https://www.eclipse.org/jgit/download[]. @@ -155,6 +155,6 @@ for (Ref ref : remoteRefs) { Това е само малка демонстрация на възможностите на JGit. Ако се интересувате и искате да научите повече, ето къде да потърсите допълнителна информация и вдъхновение: -* Официалната JGit API документация на адрес https://www.eclipse.org/jgit/documentation/[]. +* Официалната JGit API документация на адрес https://www.eclipse.org/jgit/documentation/[^]. Това са стандартни Javadoc, така че любимата ви JVM IDE ще може да ги инсталира и локално. -* Хранилището JGit Cookbook на адрес https://github.com/centic9/jgit-cookbook[] съдържа много примери за извършване на специфични дейности с JGit. \ No newline at end of file +* Хранилището JGit Cookbook на адрес https://github.com/centic9/jgit-cookbook[^] съдържа много примери за извършване на специфични дейности с JGit. diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index ec7dd334..921b8b4b 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -3,7 +3,7 @@ (((libgit2)))((("C"))) Библиотеката Libgit2 е друга опция на ваше разположение. Libgit2 е dependency-free имплементация на Git, фокусирана в предоставянето на добър API за ползване от външни програми. -Налична е от https://libgit2.org[]. +Налична е от https://libgit2.org[^]. Първо нека видим как изглежда един C API. Накратко: @@ -54,7 +54,7 @@ git_repository_free(repo); (((Ruby))) Последното означава, че не е много вероятно да пишете на C, когато използвате Libgit2. За щастие, налични са много language-specific bindings, които правят сравнително лесно да работите с Git хранилища от вашия специфичен език за програмиране и среда. -Нека видим примера отгоре написан с помощта на Ruby bindings за Libgit2, наречени Rugged и налични от https://github.com/libgit2/rugged[]. +Нека видим примера отгоре написан с помощта на Ruby bindings за Libgit2, наречени Rugged и налични от https://github.com/libgit2/rugged[^]. [source,ruby] ---- @@ -115,7 +115,7 @@ Libgit2 има доста възможности, които са извън о Libgit2 позволява custom backends за конфигурация, съхранение на референции и обектната база данни. Нека видим как работи това. -Кодът отдолу е взаимстван от множеството backend примери, които екипът на Libgit2 предоставя (на адрес https://github.com/libgit2/libgit2-backends[]). +Кодът отдолу е взаимстван от множеството backend примери, които екипът на Libgit2 предоставя (на адрес https://github.com/libgit2/libgit2-backends[^]). Ето как се настройва custom backend за базата данни с обекти: [source,c] @@ -172,7 +172,7 @@ int git_odb_backend_mine(git_odb_backend **backend_out, /*…*/) } ---- -Неуловимото ограничение тук е, че първият член на `my_backend_struct` трябва да е `git_odb_backend` структура -- това гарантира, че разположението в паметта е такова, каквото Libgit2 кода очаква. +Неуловимото ограничение тук е, че първият член на ``my_backend_struct``` трябва да е ``git_odb_backend`` структура -- това гарантира, че разположението в паметта е такова, каквото Libgit2 кода очаква. Останалото е по избор, тази структура може да е толкова голяма или малка, колкото е нужно. Инициализиращата функция запазва малко памет за структурата, настройва custom контекст и след това попълва членовете на `parent` структурата, която поддържа. @@ -183,13 +183,13 @@ int git_odb_backend_mine(git_odb_backend **backend_out, /*…*/) Libgit2 има bindings за много езици. Тук показваме малък пример за използване на някои от по-завършените (към момента на писането на книгата) bindings пакети. Библиотеки съществуват за много други платформи, включително C++, Go, Node.js, Erlang, и JVM, всяка от тях на различен етап от развитието си. -Официалната колекция bindings може да се намери като разгледате хранилищата на адрес https://github.com/libgit2[]. +Официалната колекция bindings може да се намери като разгледате хранилищата на адрес https://github.com/libgit2[^]. Кодът, който пишем ще върне къмит съобщението на къмита, към който сочи HEAD (нещо като `git log -1`). ===== LibGit2Sharp (((.NET)))(((C#)))(((Mono))) -Ако пишете .NET или Mono приложение, LibGit2Sharp (https://github.com/libgit2/libgit2sharp[]) е нещото, което ви трябва. +Ако пишете .NET или Mono приложение, LibGit2Sharp (https://github.com/libgit2/libgit2sharp[^]) е нещото, което ви трябва. Самите bindings са написани на C# и е обърнато сериозно внимание на добрата синхронизация между чистите Libgit2 повиквания с native-feeling CLR API-та. Ето как би изглеждала примерната ни програма: @@ -204,7 +204,7 @@ new Repository(@"C:\path\to\repo").Head.Tip.Message; (((Apple)))(((Objective-C)))(((Cocoa))) Ако приложението ви работи на Apple платформа, вероятно ще използвате Objective-C като език за имплементация. -Objective-Git (https://github.com/libgit2/objective-git[]) е името на Libgit2 binding-те за тази среда. +Objective-Git (https://github.com/libgit2/objective-git[^]) е името на Libgit2 binding-те за тази среда. Примерна програма: [source,objc] @@ -219,7 +219,7 @@ Objective-git е напълно оперативно съвместим със S ===== pygit2 (((Python))) -Binding-ите на Libgit2 за Python се наричат Pygit2, достъпни на https://www.pygit2.org[]. +Binding-ите на Libgit2 за Python се наричат Pygit2, достъпни на https://www.pygit2.org[^]. Примерна програма: [source,python] @@ -233,5 +233,5 @@ pygit2.Repository("/path/to/repo") # отваряме хранилище ==== Допълнителна информация Разбира се, пълният преглед на Libgit2 възможностите е извън обхвата на книгата. -Ако се нуждаете от повече информация за самата Libgit2 имате API документация на адрес https://libgit2.github.com/libgit2[], както и набор от ръководства на https://libgit2.github.com/docs[]. +Ако се нуждаете от повече информация за самата Libgit2 имате API документация на адрес https://libgit2.github.com/libgit2[^], както и набор от ръководства на https://libgit2.github.com/docs[^]. За другите bindings, погледнете файла README и тестовете, често там има малки указания и насоки за получаване на допълнителна информация. diff --git a/images/snapshots.svg b/images/snapshots.svg index f4af9c32..446fb751 100644 --- a/images/snapshots.svg +++ b/images/snapshots.svg @@ -18,25 +18,17 @@ - - - Version 1 - - - - Version 2 - - - - Version 3 - - - - Version 4 - - - - Version 5 + + + Version 1 + + Version 2 + + Version 3 + + Version 4 + + Version 5