├── .github ├── .dependabot.yml └── workflows │ ├── pr_build.yml │ └── release.yml ├── .gitignore ├── .mailmap ├── A-git-in-other-environments.asc ├── B-embedding-git-in-your-applications.asc ├── C-git-commands.asc ├── Gemfile ├── LICENSE.asc ├── README.asc ├── Rakefile ├── TRANSLATION_NOTES.asc ├── atlas.json ├── attributes.asc ├── book ├── 01-introduction │ └── sections │ │ ├── about-version-control.asc │ │ ├── command-line.asc │ │ ├── first-time-setup.asc │ │ ├── help.asc │ │ ├── history.asc │ │ ├── installing.asc │ │ └── what-is-git.asc ├── 02-git-basics │ └── sections │ │ ├── aliases.asc │ │ ├── getting-a-repository.asc │ │ ├── recording-changes.asc │ │ ├── remotes.asc │ │ ├── tagging.asc │ │ ├── undoing.asc │ │ └── viewing-history.asc ├── 03-git-branching │ └── sections │ │ ├── basic-branching-and-merging.asc │ │ ├── branch-management.asc │ │ ├── nutshell.asc │ │ ├── rebasing.asc │ │ ├── remote-branches.asc │ │ └── workflows.asc ├── 04-git-server │ └── sections │ │ ├── generating-ssh-key.asc │ │ ├── git-daemon.asc │ │ ├── git-on-a-server.asc │ │ ├── gitlab.asc │ │ ├── gitweb.asc │ │ ├── hosted.asc │ │ ├── protocols.asc │ │ ├── setting-up-server.asc │ │ └── smart-http.asc ├── 05-distributed-git │ └── sections │ │ ├── contributing.asc │ │ ├── distributed-workflows.asc │ │ └── maintaining.asc ├── 06-github │ ├── callouts │ │ ├── 1.pdf │ │ ├── 1.png │ │ ├── 10.pdf │ │ ├── 10.png │ │ ├── 2.pdf │ │ ├── 2.png │ │ ├── 3.pdf │ │ ├── 3.png │ │ ├── 4.pdf │ │ ├── 4.png │ │ ├── 5.pdf │ │ ├── 5.png │ │ ├── 6.pdf │ │ ├── 6.png │ │ ├── 7.pdf │ │ ├── 7.png │ │ ├── 8.pdf │ │ ├── 8.png │ │ ├── 9.pdf │ │ └── 9.png │ └── sections │ │ ├── 1-setting-up-account.asc │ │ ├── 2-contributing.asc │ │ ├── 3-maintaining.asc │ │ ├── 4-managing-organization.asc │ │ └── 5-scripting.asc ├── 07-git-tools │ ├── callouts │ │ ├── 1.pdf │ │ ├── 1.png │ │ ├── 10.pdf │ │ ├── 10.png │ │ ├── 2.pdf │ │ ├── 2.png │ │ ├── 3.pdf │ │ ├── 3.png │ │ ├── 4.pdf │ │ ├── 4.png │ │ ├── 5.pdf │ │ ├── 5.png │ │ ├── 6.pdf │ │ ├── 6.png │ │ ├── 7.pdf │ │ ├── 7.png │ │ ├── 8.pdf │ │ ├── 8.png │ │ ├── 9.pdf │ │ └── 9.png │ ├── git-credential-read-only │ └── sections │ │ ├── advanced-merging.asc │ │ ├── bundling.asc │ │ ├── credentials.asc │ │ ├── debugging.asc │ │ ├── interactive-staging.asc │ │ ├── replace.asc │ │ ├── rerere.asc │ │ ├── reset.asc │ │ ├── revision-selection.asc │ │ ├── rewriting-history.asc │ │ ├── searching.asc │ │ ├── signing.asc │ │ ├── stashing-cleaning.asc │ │ ├── submodules.asc │ │ └── subtree-merges.asc ├── 08-customizing-git │ └── sections │ │ ├── attributes.asc │ │ ├── config.asc │ │ ├── hooks.asc │ │ └── policy.asc ├── 09-git-and-other-scms │ └── sections │ │ ├── client-bzr.asc │ │ ├── client-hg.asc │ │ ├── client-p4.asc │ │ ├── client-svn.asc │ │ ├── import-bzr.asc │ │ ├── import-custom.asc │ │ ├── import-hg.asc │ │ ├── import-p4.asc │ │ └── import-svn.asc ├── 10-git-internals │ └── sections │ │ ├── environment.asc │ │ ├── maintenance.asc │ │ ├── objects.asc │ │ ├── packfiles.asc │ │ ├── plumbing-porcelain.asc │ │ ├── refs.asc │ │ ├── refspec.asc │ │ └── transfer-protocols.asc ├── A-git-in-other-environments │ └── sections │ │ ├── bash.asc │ │ ├── eclipse.asc │ │ ├── guis.asc │ │ ├── jetbrainsides.asc │ │ ├── powershell.asc │ │ ├── sublimetext.asc │ │ ├── visualstudio.asc │ │ ├── visualstudiocode.asc │ │ └── zsh.asc ├── B-embedding-git │ ├── callouts │ │ ├── 1.pdf │ │ ├── 1.png │ │ ├── 10.pdf │ │ ├── 10.png │ │ ├── 2.pdf │ │ ├── 2.png │ │ ├── 3.pdf │ │ ├── 3.png │ │ ├── 4.pdf │ │ ├── 4.png │ │ ├── 5.pdf │ │ ├── 5.png │ │ ├── 6.pdf │ │ ├── 6.png │ │ ├── 7.pdf │ │ ├── 7.png │ │ ├── 8.pdf │ │ ├── 8.png │ │ ├── 9.pdf │ │ └── 9.png │ └── sections │ │ ├── command-line.asc │ │ ├── dulwich.asc │ │ ├── go-git.asc │ │ ├── jgit.asc │ │ └── libgit2.asc ├── contributors.asc ├── cover.html ├── cover.png ├── dedication.asc ├── introduction.asc ├── license.asc ├── preface_ben.asc └── preface_schacon.asc ├── callouts ├── 1.pdf ├── 1.png ├── 10.pdf ├── 10.png ├── 2.pdf ├── 2.png ├── 3.pdf ├── 3.png ├── 4.pdf ├── 4.png ├── 5.pdf ├── 5.png ├── 6.pdf ├── 6.png ├── 7.pdf ├── 7.png ├── 8.pdf ├── 8.png ├── 9.pdf └── 9.png ├── ch01-getting-started.asc ├── ch02-git-basics-chapter.asc ├── ch03-git-branching.asc ├── ch04-git-on-the-server.asc ├── ch05-distributed-git.asc ├── ch06-github.asc ├── ch07-git-tools.asc ├── ch08-customizing-git.asc ├── ch09-git-and-other-systems.asc ├── ch10-git-internals.asc ├── images ├── 2fa-1.png ├── account-settings.png ├── advance-master.png ├── advance-master.svg ├── advance-testing.png ├── advance-testing.svg ├── areas.png ├── areas.svg ├── avatar-crop.png ├── basic-branching-1.png ├── basic-branching-1.svg ├── basic-branching-2.png ├── basic-branching-2.svg ├── basic-branching-3.png ├── basic-branching-3.svg ├── basic-branching-4.png ├── basic-branching-4.svg ├── basic-branching-5.png ├── basic-branching-5.svg ├── basic-branching-6.png ├── basic-branching-6.svg ├── basic-merging-1.png ├── basic-merging-1.svg ├── basic-merging-2.png ├── basic-merging-2.svg ├── basic-rebase-1.png ├── basic-rebase-1.svg ├── basic-rebase-2.png ├── basic-rebase-2.svg ├── basic-rebase-3.png ├── basic-rebase-3.svg ├── basic-rebase-4.png ├── basic-rebase-4.svg ├── benevolent-dictator.png ├── benevolent-dictator.svg ├── bitnami.png ├── blink-01-start.png ├── blink-02-pr.png ├── blink-03-pull-request-open.png ├── blink-04-email.png ├── blink-04-pr-comment.png ├── blink-05-general-comment.png ├── blink-06-final.png ├── blink-pull-request-open copy.png ├── blink-pull-request-open.png ├── branch-and-history.png ├── branch-and-history.svg ├── branch_widget_mac.png ├── branch_widget_win.png ├── centralized.png ├── centralized_workflow.png ├── checkout-master.png ├── checkout-master.svg ├── clean.png ├── collaborators.png ├── commit-and-tree.png ├── commit-and-tree.svg ├── commits-and-parents.png ├── commits-and-parents.svg ├── data-model-1.png ├── data-model-2.png ├── data-model-3.png ├── data-model-4.png ├── deltas.png ├── deltas.svg ├── distributed.png ├── distributed.svg ├── double-dot.png ├── egit.png ├── email-settings.png ├── emoji.png ├── forkbutton.png ├── git-bash.png ├── git-diff-check.png ├── git-fusion-boot.png ├── git-fusion-perforce-graph.png ├── git-gui.png ├── git-instaweb.png ├── git-osx-installer.png ├── github_mac.png ├── github_win.png ├── gitk.png ├── gitlab-broadcast.png ├── gitlab-groups.png ├── gitlab-menu.png ├── gitlab-users.png ├── head-to-master.png ├── head-to-master.svg ├── head-to-testing.png ├── head-to-testing.svg ├── hubot.png ├── integration-manager.png ├── integration-manager.svg ├── interesting-rebase-1.png ├── interesting-rebase-1.svg ├── interesting-rebase-2.png ├── interesting-rebase-2.svg ├── interesting-rebase-3.png ├── interesting-rebase-3.svg ├── interesting-rebase-4.png ├── interesting-rebase-4.svg ├── interesting-rebase-5.png ├── interesting-rebase-5.svg ├── jb.png ├── large-merges-1.png ├── large-merges-1.svg ├── large-merges-2.png ├── large-merges-2.svg ├── lifecycle.png ├── lifecycle.svg ├── local.png ├── local.svg ├── lr-branches-1.png ├── lr-branches-1.svg ├── lr-branches-2.png ├── lr-branches-2.svg ├── maint-01-email.png ├── maint-02-merge.png ├── maint-03-email-resp.png ├── maint-04-target.png ├── maint-05-mentions.png ├── maint-06-unsubscribe.png ├── maint-07-notifications.png ├── maint-08-notifications-page.png ├── maint-09-contrib.png ├── maint-10-default-branch.png ├── maint-11-transfer.png ├── managed-team-1.png ├── managed-team-1.svg ├── managed-team-2.png ├── managed-team-2.svg ├── managed-team-3.png ├── managed-team-3.svg ├── managed-team-flow.png ├── managed-team-flow.svg ├── markdown-01-example.png ├── markdown-02-tasks.png ├── markdown-03-task-summary.png ├── markdown-04-fenced-code.png ├── markdown-05-quote.png ├── markdown-06-emoji-complete.png ├── markdown-07-emoji.png ├── markdown-08-drag-drop.png ├── mentions-01-syntax.png ├── mentions-02-render.png ├── mentions-03-closed.png ├── merging-workflows-1.png ├── merging-workflows-1.svg ├── merging-workflows-2.png ├── merging-workflows-2.svg ├── merging-workflows-3.png ├── merging-workflows-3.svg ├── merging-workflows-4.png ├── merging-workflows-4.svg ├── merging-workflows-5.png ├── merging-workflows-5.svg ├── new-repo.png ├── neworg.png ├── newrepo.png ├── newrepoform.png ├── notifications.png ├── orgs-01-page.png ├── orgs-02-teams.png ├── orgs-03-audit.png ├── p4merge.png ├── perils-of-rebasing-1.png ├── perils-of-rebasing-1.svg ├── perils-of-rebasing-2.png ├── perils-of-rebasing-2.svg ├── perils-of-rebasing-3.png ├── perils-of-rebasing-3.svg ├── perils-of-rebasing-4.png ├── perils-of-rebasing-4.svg ├── perils-of-rebasing-5.png ├── perils-of-rebasing-5.svg ├── posh-git.png ├── pr-01-fail.png ├── pr-02-merge-fix.png ├── public-small-1.png ├── public-small-1.svg ├── public-small-2.png ├── public-small-2.svg ├── public-small-3.png ├── public-small-3.svg ├── rebasing-1.png ├── rebasing-1.svg ├── rebasing-2.png ├── rebasing-2.svg ├── remote-branches-1.png ├── remote-branches-1.svg ├── remote-branches-2.png ├── remote-branches-2.svg ├── remote-branches-3.png ├── remote-branches-3.svg ├── remote-branches-4.png ├── remote-branches-4.svg ├── remote-branches-5.png ├── remote-branches-5.svg ├── replace1.png ├── replace2.png ├── replace3.png ├── replace4.png ├── replace5.png ├── reposettingslink.png ├── rerere1.png ├── rerere2.png ├── rerere3.png ├── reset-checkout.png ├── reset-ex1.png ├── reset-ex2.png ├── reset-ex3.png ├── reset-ex4.png ├── reset-ex5.png ├── reset-ex6.png ├── reset-hard.png ├── reset-mixed.png ├── reset-path1.png ├── reset-path2.png ├── reset-path3.png ├── reset-soft.png ├── reset-squash-r1.png ├── reset-squash-r2.png ├── reset-squash-r3.png ├── reset-start.png ├── reset-workflow.png ├── scripting-01-services.png ├── scripting-02-email-service.png ├── scripting-03-webhook.png ├── scripting-04-webhook-debug.png ├── scripting-05-access-token.png ├── scripting-06-comment.png ├── scripting-07-status.png ├── signup.png ├── small-team-1.png ├── small-team-1.svg ├── small-team-2.png ├── small-team-2.svg ├── small-team-3.png ├── small-team-3.svg ├── small-team-4.png ├── small-team-4.svg ├── small-team-5.png ├── small-team-5.svg ├── small-team-6.png ├── small-team-6.svg ├── small-team-7.png ├── small-team-7.svg ├── small-team-flow.png ├── small-team-flow.svg ├── smudge.png ├── snapshots.png ├── snapshots.svg ├── ssh-keys.png ├── topic-branches-1.png ├── topic-branches-1.svg ├── topic-branches-2.png ├── topic-branches-2.svg ├── two-branches.png ├── two-branches.svg ├── undomerge-reset.png ├── undomerge-revert.png ├── undomerge-revert2.png ├── undomerge-revert3.png ├── undomerge-start.png ├── vs-1.png ├── vs-2.png ├── your-profile.png ├── zsh-oh-my.png └── zsh-prompt.png ├── index.asc ├── progit.asc ├── proposal.md ├── status.json └── theme ├── epub ├── epub.css ├── epub.xsl └── layout.html ├── html ├── html.css └── html.xsl ├── mobi ├── mobi.css └── mobi.xsl └── pdf ├── pdf.css ├── pdf.xsl └── pdf.xsl~ /.github/.dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Maintain dependencies for Ruby 4 | - package-ecosystem: "bundler" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" # Checks on Monday through Friday. 8 | 9 | # Maintain GitHub Action runners 10 | - package-ecosystem: "github-actions" 11 | directory: "/" 12 | schedule: 13 | interval: "daily" # Checks on Monday through Friday. 14 | 15 | # Set default reviewer and labels 16 | reviewers: 17 | - "Morganov" 18 | labels: 19 | - "dependabot" 20 | -------------------------------------------------------------------------------- /.github/workflows/pr_build.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request Flow 2 | 3 | on: 4 | pull_request: 5 | branches: [ master ] 6 | 7 | workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Install Utils 14 | run: sudo apt-get install -y bsdmainutils 15 | 16 | - uses: actions/checkout@v4 17 | with: 18 | fetch-depth: 0 19 | 20 | - name: Set up Ruby 21 | uses: ruby/setup-ruby@v1 22 | with: 23 | ruby-version: 3.1 24 | bundler-cache: true 25 | 26 | - name: Build Book 27 | run: bundle exec rake book:build 28 | 29 | - name: 'Save Artifacts' 30 | uses: actions/upload-artifact@v3 31 | with: 32 | name: Build Artifacts 33 | path: | 34 | book/contributors.txt 35 | attributes-ru.adoc 36 | progit.epub 37 | progit.fb2.zip 38 | progit.mobi 39 | progit.pdf 40 | progit.html 41 | retention-days: 5 42 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release from master 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | 7 | workflow_dispatch: 8 | 9 | jobs: 10 | release: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Install Utils 14 | run: sudo apt-get install -y bsdmainutils 15 | 16 | - uses: actions/checkout@v4 17 | with: 18 | fetch-depth: 0 19 | 20 | - name: Compute tag name 21 | id: compute-tag 22 | run: | 23 | echo "Computing next tag number" 24 | LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) 25 | PATCH=$(($LASTPATCH+1)) 26 | echo "New tag name: 2.1.${PATCH}" 27 | echo "tagname=2.1.${PATCH}" >> "$GITHUB_OUTPUT" 28 | 29 | - name: Set up Ruby 30 | uses: ruby/setup-ruby@v1 31 | with: 32 | ruby-version: 3.1 33 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 34 | 35 | - name: Build release assets 36 | run: bundle exec rake book:build 37 | 38 | - name: Create Release 39 | uses: ncipollo/release-action@v1 40 | with: 41 | token: ${{ secrets.GITHUB_TOKEN }} 42 | tag: ${{ steps.compute-tag.outputs.tagname }} 43 | commit: master 44 | artifacts: './progit.epub,./progit.fb2.zip,./progit.mobi,./progit.pdf,./progit.html' 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | output 2 | .DS_Store 3 | .vscode 4 | .bundle 5 | .vendor 6 | 7 | # build artifacts 8 | Gemfile.lock 9 | *.html 10 | *.pdf 11 | *.pdfmarks 12 | *.epub 13 | *.fb2.zip 14 | *-kf8.epub 15 | *.mobi 16 | contributors.txt 17 | attributes-* 18 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Alexander Krasnikov 2 | Alex Chumakov 3 | Alex Dudarik <50113949+Dudarik@users.noreply.github.com> 4 | Andre Polykanine 5 | Arkadij Chistyj <43615579+chstarkd@users.noreply.github.com> 6 | Bogdan Doroschenko 7 | Denis Savitskiy 8 | Denis Savitskiy 9 | Dexter Morganov 10 | Dmitri Gouliaev 11 | Eugene Rexilier 12 | Igor Bakutin 13 | Jean-Noël Avila 14 | Mattias Vannergard 15 | Max Lazarev 16 | Maxim Kostrikin 17 | Nail Samatov 18 | Oleg Karnauhov 19 | Oleg Zolotarev 20 | Pavel Janík 21 | Pavel Tolstolytko 22 | Richard Hoyle 23 | Roma Zvarich 24 | Sanders Kleinfeld 25 | Scott Chacon 26 | Sergey Matveev 27 | Sergey Solomein 28 | Sergei Zelenyi 29 | Sevak Avetisyan 30 | Siarhei Krukau 31 | Viktor Dmitriyev 32 | Vitalii Elenhaupt 33 | Vladimir Nikinorov 34 | -------------------------------------------------------------------------------- /A-git-in-other-environments.asc: -------------------------------------------------------------------------------- 1 | [#A-git-in-other-environments] 2 | [appendix] 3 | == Git в других окружениях 4 | 5 | Если вы прочитали всю книгу, то много узнали об использовании Git в командной строке. 6 | Вы можете работать с локальными файлами, синхронизировать свой репозиторий с чужими по сети и эффективно работать с другими людьми. 7 | Но это ещё не всё; Git обычно используется как часть большей экосистемы и терминал это не всегда лучший способ работы с ним. 8 | Рассмотрим несколько других окружений где Git может быть полезен и как другие приложения (включая ваши) работают с ним. 9 | 10 | include::book/A-git-in-other-environments/sections/guis.asc[] 11 | 12 | include::book/A-git-in-other-environments/sections/visualstudio.asc[] 13 | 14 | include::book/A-git-in-other-environments/sections/visualstudiocode.asc[] 15 | 16 | include::book/A-git-in-other-environments/sections/eclipse.asc[] 17 | 18 | include::book/A-git-in-other-environments/sections/jetbrainsides.asc[] 19 | 20 | include::book/A-git-in-other-environments/sections/sublimetext.asc[] 21 | 22 | include::book/A-git-in-other-environments/sections/bash.asc[] 23 | 24 | include::book/A-git-in-other-environments/sections/zsh.asc[] 25 | 26 | include::book/A-git-in-other-environments/sections/powershell.asc[] 27 | 28 | === Заключение 29 | 30 | Теперь вы знаете, как использовать мощь Git внутри инструментов, используемых вами каждый день и как получить доступ к репозиториям из ваших собственных программ. 31 | -------------------------------------------------------------------------------- /B-embedding-git-in-your-applications.asc: -------------------------------------------------------------------------------- 1 | [[B-embedding-git-in-your-applications]] 2 | [appendix] 3 | == Встраивание Git в ваши приложения 4 | 5 | Если вы пишете приложение для разработчиков, с высокой вероятностью оно выиграет от интеграции с системой управления версиями. 6 | Даже приложения для обычных пользователей -- например, текстовые редакторы -- могут извлечь пользу из систем управления версиями. 7 | Git хорошо работает во многих сценариях. 8 | 9 | Если вам нужно интегрировать Git в ваше приложение, то у вас есть два основных варианта: запустить шелл и выполнять Git команды в нём или добавить библиотеку Git и использовать её. 10 | Ниже мы рассмотрим интеграцию командной строки и несколько наиболее популярных встраиваемых библиотек Git. 11 | 12 | include::book/B-embedding-git/sections/command-line.asc[] 13 | 14 | include::book/B-embedding-git/sections/libgit2.asc[] 15 | 16 | include::book/B-embedding-git/sections/jgit.asc[] 17 | 18 | include::book/B-embedding-git/sections/go-git.asc[] 19 | 20 | include::book/B-embedding-git/sections/dulwich.asc[] -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'rake', '13.1.0' 4 | gem 'asciidoctor', '2.0.22' 5 | 6 | gem 'json', '2.6.3' 7 | gem 'awesome_print', '1.9.2' 8 | 9 | gem 'asciidoctor-fb2', '0.7.0' 10 | gem 'asciidoctor-epub3', '2.1.0' 11 | gem 'asciidoctor-pdf', '2.3.15' 12 | 13 | gem 'coderay', '1.1.3' 14 | gem 'pygments.rb', '2.4.1' 15 | gem 'thread_safe', '0.3.6' 16 | gem 'epubcheck-ruby', '5.1.0.0' 17 | gem 'html-proofer', '5.0.8' 18 | gem 'kindlegen', '3.1.1' 19 | -------------------------------------------------------------------------------- /LICENSE.asc: -------------------------------------------------------------------------------- 1 | Это произведение распространяется по свободной лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. 2 | Ознакомиться с текстом лицензии вы можете на сайте https://creativecommons.org/licenses/by-nc-sa/3.0/deed.ru или по почте, отправив письмо в организацию Creative Commons по адресу: PO Box 1866, Mountain View, CA 94042, USA. 3 | -------------------------------------------------------------------------------- /TRANSLATION_NOTES.asc: -------------------------------------------------------------------------------- 1 | == Заметки по переводу 2 | 3 | В этом файле хранятся заметки по переводу. 4 | Сюда следует писать принятую в переводе терминологию, чтобы не создавать путаницу. 5 | 6 | === Статус перевода 7 | По ходу перевода, пожалуйста, обновляйте `status.json`, приблизительно указывая какая часть файла уже переведена (в процентах). 8 | Это используется на большом количестве страниц, чтобы показать, сколько работы осталось до завершения. 9 | 10 | === Буква Ё 11 | Пожалуйста, используйте эту букву в тех словах, где она должна быть, особенно где могут быть разночтения (например, осел/осёл, все/всё). 12 | 13 | === Summary → заключение 14 | Каждая из глав имеет такую структуру: 15 | 16 | Название главы 17 | Краткое описание о чём пойдёт речь 18 | Собственно, содержимое 19 | Заключение (Summary) 20 | 21 | Важно единообразно называть последний пункт. 22 | 23 | === Git → Git 24 | С большой буквы в английской раскладке. 25 | Как следствие, «Git Pro» тоже не переводится. 26 | 27 | === Hosting → хостинг 28 | Конструкции через слова «хранилище» или «размещение» чересчур громоздки. Целевая аудитория книги знакома с базовыми терминами. 29 | 30 | === GitHub → GitHub 31 | С большой буквы в английской раскладке. 32 | 33 | === killer feature → киллер-фича 34 | Неформальный тон книги вполне позволяет использовать айтишный сленг. 35 | 36 | === patch → патч 37 | см. хостинг 38 | 39 | === bug → баг 40 | 41 | === IDE → IDE 42 | Если очень хочется: среда разработки. 43 | 44 | === GUI → GUI 45 | Если очень хочется: интерфейс. 46 | 47 | === Tag → тег 48 | Согласно https://github.com/web-standards-ru/dictionary/blob/master/dictionary.md#tag 49 | 50 | === Directory → Каталог 51 | Слово «директория» -- это транслитерация английского слова directory, которое в русскоязычной документации (и литературе) в отношении хранения данных на блочных устройствах переводится как «каталог». 52 | 53 | === Stash 54 | stash, stashes (существительное) -- припрятанные изменения 55 | to stash (глагол) -- припрятать 56 | stashing (существительное, процесс) -- припрятывание 57 | stashed -- припрятано, припрятали 58 | 59 | === Working Tree → рабочая копия 60 | Дерево каталогов и файлов в них, соответствующее конкретной версии и извлечённое из истории Git. 61 | 62 | === Working Directory → рабочий каталог 63 | Каталог файловой системы, содержащий рабочую копию. 64 | 65 | === Кавычки 66 | В тексте книги следует использовать кавычки «ёлочки» во всех случаях, за исключением ситуации, когда слово или фраза в кавычках входит в состав другой фразы заключённой в кавычки. 67 | Например: «Фраза с „выделенным“ словом­­». 68 | 69 | В примерах кода или команд, взятых из оригинала, заменять кавычки не допускается. 70 | 71 | Для непринуждённого ввода «редких» символов используйте типографскую раскладку клавиатуры от Ильи Бирмана 72 | https://ilyabirman.ru/projects/typography-layout/ 73 | https://github.com/neochief/birman-typography-layouts-for-ubuntu 74 | 75 | === Склонение слов на латинице 76 | Согласно правилам русского языка слова на латинице, такие как Git или GitHub, не склоняются. 77 | Поэтому, не добавляйте суффиксы к таким словам ни через пробел, ни через дефис, ни через апостроф. 78 | 79 | Неправильно: **GitHub’овский** запрос на слияние 80 | Правильно: запрос на слияние на GitHub 81 | 82 | Указанные конструкции не только противоречат правилам, но и затрудняют чтение. 83 | -------------------------------------------------------------------------------- /atlas.json: -------------------------------------------------------------------------------- 1 | { 2 | "branch": "master", 3 | "files": [ 4 | "book/cover.html", 5 | "LICENSE.asc", 6 | "book/preface.asc", 7 | "book/contributors.asc", 8 | "book/introduction.asc", 9 | "book/toc.asc", 10 | "book/01-introduction/1-introduction.asc", 11 | "book/02-git-basics/1-git-basics.asc", 12 | "book/03-git-branching/1-git-branching.asc", 13 | "book/04-git-server/1-git-server.asc", 14 | "book/05-distributed-git/1-distributed-git.asc", 15 | "book/06-github/1-github.asc", 16 | "book/07-git-tools/1-git-tools.asc", 17 | "book/08-customizing-git/1-customizing-git.asc", 18 | "book/09-git-and-other-scms/1-git-and-other-scms.asc", 19 | "book/10-git-internals/1-git-internals.asc", 20 | "book/A-git-in-other-environments/1-git-other-environments.asc", 21 | "book/B-embedding-git/1-embedding-git.asc", 22 | "book/C-git-commands/1-git-commands.asc", 23 | "book/index.asc" 24 | ], 25 | "formats": { 26 | "pdf": { 27 | "version": "web", 28 | "index": true, 29 | "toc": true, 30 | "syntaxhighlighting": true, 31 | "show_comments": false 32 | }, 33 | "epub": { 34 | "index": true, 35 | "toc": true, 36 | "epubcheck": true, 37 | "embedded_fonts": [ 38 | "fonts/DejaVuSerif.otf", 39 | "fonts/DejaVuSans-Bold.otf", 40 | "fonts/hold/UbuntuMono-Bold.otf", 41 | "fonts/hold/UbuntuMono-BoldItalic.otf", 42 | "fonts/hold/UbuntuMono-Regular.otf", 43 | "fonts/hold/UbuntuMono-Italic.otf" 44 | ], 45 | "syntaxhighlighting": true, 46 | "show_comments": false 47 | }, 48 | "mobi": { 49 | "index": true, 50 | "toc": true, 51 | "embedded_fonts": [ 52 | "fonts/DejaVuSerif.otf", 53 | "fonts/DejaVuSans-Bold.otf", 54 | "fonts/hold/UbuntuMono-Bold.otf", 55 | "fonts/hold/UbuntuMono-BoldItalic.otf", 56 | "fonts/hold/UbuntuMono-Regular.otf", 57 | "fonts/hold/UbuntuMono-Italic.otf" 58 | ], 59 | "syntaxhighlighting": true, 60 | "show_comments": false 61 | }, 62 | "html": { 63 | "index": true, 64 | "toc": true, 65 | "syntaxhighlighting": true, 66 | "show_comments": false, 67 | "consolidate": false, 68 | "consolidated": false 69 | } 70 | }, 71 | "theme": "oreillymedia/atlas_tech1c_theme", 72 | "title": "Pro Git" 73 | } 74 | -------------------------------------------------------------------------------- /attributes.asc: -------------------------------------------------------------------------------- 1 | ifdef::lang[include::attributes-{lang}.adoc[]] 2 | :doctype: book 3 | :docinfo: 4 | :pagenums: 5 | :front-cover-image: image:book/cover.png[width=1050,height=1600] 6 | :icons: font 7 | :toc: 8 | :toclevels: 2 9 | -------------------------------------------------------------------------------- /book/01-introduction/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Командная строка 2 | 3 | Есть много различных способов использования Git. 4 | Помимо оригинального клиента, имеющего интерфейс командной строки, существует множество клиентов с графическим пользовательским интерфейсом, в той или иной степени реализующих функциональность Git. 5 | В рамках данной книги мы будем использовать Git в командной строке. 6 | С одной стороны, командная строка -- это единственное место, где вы можете запустить *все* команды Git, так как большинство клиентов с графическим интерфейсом реализуют для простоты только некоторую часть функциональности Git. 7 | Если вы знаете, как выполнить какое-либо действие в командной строке, вы, вероятно, сможете выяснить, как то же самое сделать и в GUI-версии, а вот обратное не всегда верно. 8 | Кроме того, в то время, как выбор графического клиента -- это дело личного вкуса, инструменты командной строки доступны _всем_ пользователям сразу после установки Git. 9 | 10 | Поэтому мы предполагаем, что вы знаете, как открыть терминал в Mac или командную строку, или PowerShell в Windows. 11 | Если вам не понятно, о чем мы здесь говорим, то вам, возможно, придётся ненадолго прерваться и изучить эти вопросы, чтобы вы могли понимать примеры и пояснения из этой книги. 12 | -------------------------------------------------------------------------------- /book/01-introduction/sections/help.asc: -------------------------------------------------------------------------------- 1 | [[r_git_help]] 2 | === Как получить помощь? 3 | 4 | Если вам нужна помощь при использовании Git, есть три способа открыть страницу руководства по любой команде Git: 5 | 6 | [source,console] 7 | ---- 8 | $ git help <команда> 9 | $ git <команда> --help 10 | $ man git-<команда> 11 | ---- 12 | 13 | Например, так можно открыть руководство по команде `git config` (((команды git, help))) 14 | 15 | [source,console] 16 | ---- 17 | $ git help config 18 | ---- 19 | 20 | Эти команды хороши тем, что ими можно пользоваться всегда, даже без подключения к сети. 21 | Если руководства и этой книги недостаточно и вам нужна персональная помощь, вы можете попытаться поискать её на каналах `#git` и `#github` IRC сервера Libera Chat, который доступен по адресу https://libera.chat/[^]. 22 | Обычно там сотни людей, отлично знающих Git, которые могут помочь.(((IRC))) 23 | 24 | Так же, если вам нужно посмотреть только список опций и вы не хотите читать полную документацию по команде, вы можете использовать опцию `-h` для вывода краткой инструкции по использованию: 25 | 26 | [source,console] 27 | ---- 28 | $ git add -h 29 | usage: git add [] [--] ... 30 | 31 | -n, --dry-run dry run 32 | -v, --verbose be verbose 33 | 34 | -i, --interactive interactive picking 35 | -p, --patch select hunks interactively 36 | -e, --edit edit current diff and apply 37 | -f, --force allow adding otherwise ignored files 38 | -u, --update update tracked files 39 | --renormalize renormalize EOL of tracked files (implies -u) 40 | -N, --intent-to-add record only the fact that the path will be added later 41 | -A, --all add changes from all tracked and untracked files 42 | --ignore-removal ignore paths removed in the working tree (same as --no-all) 43 | --refresh don't add, only refresh the index 44 | --ignore-errors just skip files which cannot be added because of errors 45 | --ignore-missing check if - even missing - files are ignored in dry run 46 | --chmod (+|-)x override the executable bit of the listed files 47 | ---- -------------------------------------------------------------------------------- /book/01-introduction/sections/history.asc: -------------------------------------------------------------------------------- 1 | === Краткая история Git 2 | 3 | Как и многие вещи в жизни, Git начинался с капелькой творческого хаоса и бурных споров. 4 | 5 | Ядро Linux -- это достаточно большой проект с открытым исходным кодом.(((Linux))) 6 | Большую часть времени разработки ядра Linux (1991–2002 гг.) изменения передавались между разработчиками в виде патчей и архивов. 7 | В 2002 году проект ядра Linux начал использовать проприетарную децентрализованную систему контроля версий BitKeeper.(((BitKeeper))) 8 | 9 | В 2005 году отношения между сообществом разработчиков ядра Linux и коммерческой компанией, которая разрабатывала BitKeeper, прекратились, и бесплатное использование утилиты стало невозможным. 10 | Это сподвигло сообщество разработчиков ядра Linux (а в частности Линуса Торвальдса -- создателя Linux) разработать свою собственную утилиту, учитывая уроки, полученные при работе с BitKeeper.(((Линус Торвальдс))) 11 | Некоторыми целями, которые преследовала новая система, были: 12 | 13 | * Скорость 14 | * Простая архитектура 15 | * Хорошая поддержка нелинейной разработки (тысячи параллельных веток) 16 | * Полная децентрализация 17 | * Возможность эффективного управления большими проектами, такими как ядро Linux (скорость работы и разумное использование дискового пространства) 18 | 19 | С момента своего появления в 2005 году, Git развился в простую в использовании систему, сохранив при этом свои изначальные качества. 20 | Он удивительно быстр, эффективен в работе с большими проектами и имеет великолепную систему веток для нелинейной разработки (см. главу <>). 21 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/aliases.asc: -------------------------------------------------------------------------------- 1 | [[r_git_aliases]] 2 | === Псевдонимы в Git 3 | 4 | (((псевдонимы))) 5 | Прежде, чем закончить эту главу по основам Git, рассмотрим ещё одну маленькую хитрость, которая поможет сделать использование Git проще, легче, и более привычным: псевдонимы (aliases). 6 | Мы не будем ссылаться на них дальше или предполагать, что вы будете пользоваться ими по ходу чтения книги, но вам лучше было бы знать, как их использовать. 7 | 8 | Git не будет пытаться сделать вывод о том, какую команду вы хотели ввести, если вы ввели её не полностью. 9 | Если вы не хотите печатать каждую команду для Git целиком, вы легко можете настроить псевдонимы (alias) для любой команды с помощью `git config`.(((команды git, config))) 10 | Вот несколько примеров псевдонимов, которые вы, возможно, захотите задать: 11 | 12 | [source,console] 13 | ---- 14 | $ git config --global alias.co checkout 15 | $ git config --global alias.br branch 16 | $ git config --global alias.ci commit 17 | $ git config --global alias.st status 18 | ---- 19 | 20 | Это означает, что, например, вместо ввода `git commit`, вам достаточно набрать только `git ci`. 21 | По мере освоения Git вам, вероятно, придётся часто пользоваться и другими командами. 22 | В этом случае без колебаний создавайте новые псевдонимы. 23 | 24 | Такой способ может также быть полезен для создания команд, которые, как вы думаете, должны существовать. 25 | Например, чтобы исправить неудобство, с которым мы столкнулись при исключении файла из индекса, можно добавить в Git свой собственный псевдоним `unstage`: 26 | 27 | [source,console] 28 | ---- 29 | $ git config --global alias.unstage 'reset HEAD --' 30 | ---- 31 | 32 | Это делает эквивалентными следующие две команды: 33 | 34 | [source,console] 35 | ---- 36 | $ git unstage fileA 37 | $ git reset HEAD -- fileA 38 | ---- 39 | 40 | Такой вариант кажется немного более понятным. 41 | Также, обычно, добавляют команду `last` следующим образом: 42 | 43 | [source,console] 44 | ---- 45 | $ git config --global alias.last 'log -1 HEAD' 46 | ---- 47 | 48 | Таким образом, можно легко просмотреть последний коммит: 49 | 50 | [source,console] 51 | ---- 52 | $ git last 53 | commit 66938dae3329c7aebe598c2246a8e6af90d04646 54 | Author: Josh Goebel 55 | Date: Tue Aug 26 19:48:51 2008 +0800 56 | 57 | Test for current head 58 | 59 | Signed-off-by: Scott Chacon 60 | ---- 61 | 62 | Можно сказать, что Git просто заменяет эти команды на созданные вами псевдонимы (alias). 63 | Однако, возможно, вы захотите выполнить внешнюю команду, а не подкоманду Git. 64 | В этом случае, следует начать команду с символа `!`. 65 | Это полезно, если вы пишете свои утилиты для работы с Git-репозиторием. 66 | Продемонстрируем этот случай на примере создания псевдонима `git visual` для запуска `gitk`: 67 | 68 | [source,console] 69 | ---- 70 | $ git config --global alias.visual '!gitk' 71 | ---- 72 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/getting-a-repository.asc: -------------------------------------------------------------------------------- 1 | [[r_getting_a_repo]] 2 | === Создание Git-репозитория 3 | 4 | Обычно вы получаете репозиторий Git одним из двух способов: 5 | 6 | 1. Вы можете взять локальный каталог, который в настоящее время не находится под версионным контролем, и превратить его в репозиторий Git, либо 7 | 2. Вы можете _клонировать_ существующий репозиторий Git из любого места. 8 | 9 | В обоих случаях вы получите готовый к работе Git репозиторий на вашем компьютере. 10 | 11 | ==== Создание репозитория в существующем каталоге 12 | 13 | Если у вас уже есть проект в каталоге, который не находится под версионным контролем Git, то для начала нужно перейти в него. 14 | Если вы не делали этого раньше, то для разных операционных систем это выглядит по-разному: 15 | 16 | для Linux: 17 | [source,console] 18 | ---- 19 | $ cd /home/user/my_project 20 | ---- 21 | для macOS: 22 | [source,console] 23 | ---- 24 | $ cd /Users/user/my_project 25 | ---- 26 | для Windows: 27 | [source,console] 28 | ---- 29 | $ cd C:/Users/user/my_project 30 | ---- 31 | 32 | а затем выполните команду: 33 | 34 | [source,console] 35 | ---- 36 | $ git init 37 | ---- 38 | 39 | Эта команда создаёт в текущем каталоге новый подкаталог с именем `.git`, содержащий все необходимые файлы репозитория -- структуру Git репозитория. 40 | На этом этапе ваш проект ещё не находится под версионным контролем. 41 | Подробное описание файлов, содержащихся в только что созданном вами каталоге `.git`, приведено в главе <>(((команды git, init))) 42 | 43 | Если вы хотите добавить под версионный контроль существующие файлы (в отличие от пустого каталога), вам стоит добавить их в индекс и осуществить первый коммит изменений. 44 | Добиться этого вы сможете запустив команду `git add` несколько раз, указав индексируемые файлы, а затем выполнив `git commit`: 45 | 46 | [source,console] 47 | ---- 48 | $ git add *.c 49 | $ git add LICENSE 50 | $ git commit -m 'Initial project version' 51 | ---- 52 | 53 | Мы разберём, что делают эти команды чуть позже. 54 | Теперь у вас есть Git-репозиторий с отслеживаемыми файлами и начальным коммитом. 55 | 56 | [[r_git_cloning]] 57 | ==== Клонирование существующего репозитория 58 | 59 | Для получения копии существующего Git-репозитория, например, проекта, в который вы хотите внести свой вклад, необходимо использовать команду `git clone`. 60 | Если вы знакомы с другими системами контроля версий, такими как Subversion, то заметите, что команда называется «clone», а не «checkout». 61 | Это важное различие -- вместо того, чтобы просто получить рабочую копию, Git получает копию практически всех данных, которые есть на сервере. 62 | При выполнении `git clone` с сервера забирается (pulled) каждая версия каждого файла из истории проекта. 63 | Фактически, если серверный диск выйдет из строя, вы можете использовать любой из клонов на любом из клиентов, для того, чтобы вернуть сервер в то состояние, в котором он находился в момент клонирования (вы можете потерять часть серверных хуков (server-side hooks) и т. п., но все данные, помещённые под версионный контроль, будут сохранены, подробнее об этом смотрите в разделе <> главы 4). 64 | 65 | Клонирование репозитория осуществляется командой `git clone `.(((команды git, clone))) 66 | Например, если вы хотите клонировать библиотеку `libgit2`, вы можете сделать это следующим образом: 67 | 68 | [source,console] 69 | ---- 70 | $ git clone https://github.com/libgit2/libgit2 71 | ---- 72 | 73 | Эта команда создаёт каталог `libgit2`, инициализирует в нём подкаталог `.git`, скачивает все данные для этого репозитория и извлекает рабочую копию последней версии. 74 | Если вы перейдёте в только что созданный каталог `libgit2`, то увидите в нём файлы проекта, готовые для работы или использования. 75 | Для того, чтобы клонировать репозиторий в каталог с именем, отличающимся от `libgit2`, необходимо указать желаемое имя, как параметр командной строки: 76 | 77 | [source,console] 78 | ---- 79 | $ git clone https://github.com/libgit2/libgit2 mylibgit 80 | ---- 81 | 82 | Эта команда делает всё то же самое, что и предыдущая, только результирующий каталог будет назван `mylibgit`. 83 | 84 | В Git реализовано несколько транспортных протоколов, которые вы можете использовать. 85 | В предыдущем примере использовался протокол `https://`, вы также можете встретить `git://` или `user@server:path/to/repo.git`, использующий протокол передачи SSH. 86 | В разделе <> главы 4 мы познакомимся со всеми доступными вариантами конфигурации сервера для обеспечения доступа к вашему Git репозиторию, а также рассмотрим их достоинства и недостатки. 87 | -------------------------------------------------------------------------------- /book/04-git-server/sections/generating-ssh-key.asc: -------------------------------------------------------------------------------- 1 | [[r_generate_ssh_key]] 2 | === Генерация открытого SSH ключа 3 | 4 | (((SSH-ключи))) 5 | Как отмечалось ранее, многие Git-серверы используют аутентификацию по открытым SSH-ключам. 6 | Для того чтобы предоставить открытый ключ, каждый пользователь в системе должен его сгенерировать, если только этого уже не было сделано ранее. 7 | Этот процесс аналогичен во всех операционных системах. 8 | Сначала вам стоит убедиться, что у вас ещё нет ключа. 9 | По умолчанию пользовательские SSH ключи сохраняются в каталоге `~/.ssh` домашнем каталоге пользователя. 10 | Вы можете легко проверить наличие ключа перейдя в этот каталог и посмотрев его содержимое: 11 | 12 | [source,console] 13 | ---- 14 | $ cd ~/.ssh 15 | $ ls 16 | authorized_keys2 id_dsa known_hosts 17 | config id_dsa.pub 18 | ---- 19 | 20 | Ищите файл с именем `id_dsa` или `id_rsa` и соответствующий ему файл с расширением `.pub`. 21 | Файл с расширением `.pub` -- это ваш открытый ключ, а второй файл -- ваш приватный ключ. 22 | Если указанные файлы у вас отсутствуют (или даже нет каталога `.ssh`), вы можете создать их используя программу `ssh-keygen`, которая входит в состав пакета SSH в системах Linux/Mac, а для Windows поставляется вместе с Git: 23 | 24 | [source,console] 25 | ---- 26 | $ ssh-keygen -o 27 | Generating public/private rsa key pair. 28 | Enter file in which to save the key (/home/schacon/.ssh/id_rsa): 29 | Created directory '/home/schacon/.ssh'. 30 | Enter passphrase (empty for no passphrase): 31 | Enter same passphrase again: 32 | Your identification has been saved in /home/schacon/.ssh/id_rsa. 33 | Your public key has been saved in /home/schacon/.ssh/id_rsa.pub. 34 | The key fingerprint is: 35 | d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local 36 | ---- 37 | 38 | Сначала программа попросит указать расположение файла для сохранения ключа (`.ssh/id_rsa`), затем дважды ввести пароль для шифрования. 39 | Если вы не хотите вводить пароль каждый раз при использовании ключа, то можете оставить его пустым или использовать программу `ssh-agent`. 40 | Если вы решили использовать пароль для приватного ключа, то настоятельно рекомендуется использовать опцию `-o`, которая позволяет сохранить ключ в формате, более устойчивом ко взлому методом подбора, чем стандартный формат. 41 | 42 | Теперь каждый пользователь должен отправить свой открытый ключ вам или тому, кто администрирует Git-сервер (подразумевается, что ваш SSH-сервер уже настроен на работу с открытыми ключами). 43 | Для этого достаточно скопировать содержимое файла с расширением `.pub` и отправить его по электронной почте. 44 | Открытый ключ выглядит примерно так: 45 | 46 | [source,console] 47 | ---- 48 | $ cat ~/.ssh/id_rsa.pub 49 | ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU 50 | GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3 51 | Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA 52 | t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En 53 | mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx 54 | NrRFi9wrf+M7Q== schacon@mylaptop.local 55 | ---- 56 | 57 | Более подробное руководство по созданию SSH-ключей и конфигурации клиента на различных системах вы можете найти в https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[руководстве GitHub^]. 58 | -------------------------------------------------------------------------------- /book/04-git-server/sections/git-daemon.asc: -------------------------------------------------------------------------------- 1 | === Git-демон 2 | 3 | (((Git-серверы, протокол Git))) 4 | Далее мы установим демон, обслуживающий репозитории по протоколу «Git». 5 | Это широко распространённый вариант для быстрого доступа без аутентификации. 6 | Помните, что раз сервис -- без аутентификации, всё, что обслуживается по этому протоколу -- публично доступно в сети. 7 | 8 | Если вы запускаете демон на сервере не за сетевым экраном, он должен использоваться только для проектов, которые публично видны внешнему миру. 9 | Если сервер находится за вашим сетевым экраном, вы можете использовать его для проектов, к которым большое число людей или компьютеров (серверов непрерывной интеграции или сборки) должно иметь доступ только на чтение, и если вы не хотите для каждого из них заводить SSH-ключ. 10 | 11 | В любом случае, протокол Git относительно просто настроить. 12 | Упрощённо, вам нужно запустить следующую команду в демонизированной форме:(((команды git, демон))) 13 | 14 | [source,console] 15 | ---- 16 | $ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ 17 | ---- 18 | 19 | Опция `--reuseaddr` позволит серверу перезапуститься без ожидания таймаута существующих подключений, `--base-path` позволит людям не указывать полный путь, чтобы клонировать проект, а путь в конце указывает демону Git где искать экспортируемые репозитории. 20 | Если у вас запущен сетевой экран, вы должны проколоть в нём дырочку, открыв порт 9418 на машине, где всё это запущено. 21 | 22 | Вы можете демонизировать этот процесс несколькими путями, в зависимости от операционной системы. 23 | 24 | Так как `systemd` является самой распространённой системой инициализации в современных дистрибутивах Linux, вы можете использовать именно её. 25 | Просто создайте файл в каталоге `/etc/systemd/system/git-daemon.service` со следующим содержанием: 26 | 27 | [source,console] 28 | ---- 29 | [Unit] 30 | Description=Start Git Daemon 31 | 32 | [Service] 33 | ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ 34 | 35 | Restart=always 36 | RestartSec=500ms 37 | 38 | StandardOutput=syslog 39 | StandardError=syslog 40 | SyslogIdentifier=git-daemon 41 | 42 | User=git 43 | Group=git 44 | 45 | [Install] 46 | WantedBy=multi-user.target 47 | ---- 48 | 49 | Как вы могли здесь заметить, Git демон запускается от имени `git`, как пользователя, так и группы. 50 | При необходимости укажите другие значения и убедитесь, что указанный пользователь существует в системе. 51 | Так же убедитесь, что исполняемый файл Git имеет путь `/usr/bin/git` или укажите соответствующий путь к нему. 52 | 53 | Наконец, выполните команду `systemctl enable git-daemon` для запуска сервиса при старте системы; для ручного запуска и остановки сервиса используйте команды `systemctl start git-daemon` и `systemctl stop git-daemon` соответственно. 54 | 55 | На других системах вы можете использовать `xinetd`, сценарий вашей системы `sysvinit`, или что-то другое -- главное, чтобы вы могли эту команду как-то демонизировать и присматривать за ней. 56 | 57 | Затем нужно указать Git серверу к каким репозиториям предоставлять доступ без аутентификации. 58 | Вы можете сделать это для каждого репозитория, создав файл с именем `git-daemon-export-ok`. 59 | 60 | [source,console] 61 | ---- 62 | $ cd /path/to/project.git 63 | $ touch git-daemon-export-ok 64 | ---- 65 | 66 | Наличие этого файла указывает Git, что можно обслуживать этот проект без аутентификации. 67 | -------------------------------------------------------------------------------- /book/04-git-server/sections/gitweb.asc: -------------------------------------------------------------------------------- 1 | === GitWeb 2 | 3 | (((Git-серверы, GitWeb)))(((GitWeb))) 4 | Теперь, когда к вашему проекту настроен доступ на чтение/запись и только на чтение, вероятно, вы захотите настроить простой веб-визуализатор. 5 | Для этой цели в комплекте с Git поставляется CGI-сценарий GitWeb. 6 | 7 | [[rgitweb]] 8 | .Веб-интерфейс GitWeb 9 | image::images/git-instaweb.png["Веб-интерфейс GitWeb"] 10 | 11 | Если вы хотите посмотреть как будет выглядеть ваш проект в GitWeb, в Git есть стандартная команда для запуска временного экземпляра, однако она требует наличия установленного веб-сервера, такого как `lighttpd` или `webrick`. 12 | Как правило, на машинах с Linux `lighttpd` уже установлен, поэтому вы сможете его запустить, выполнив команду `git instaweb` в каталоге с вашим проектом. 13 | Если вы используете Mac, Leopard поставляется с предустановленным Ruby, поэтому `webrick` может быть лучшим выбором. 14 | Чтобы запустить `instaweb` не с ligttpd используйте параметр `--httpd`.(((команды git, instaweb))) 15 | 16 | [source,console] 17 | ---- 18 | $ git instaweb --httpd=webrick 19 | [2009-02-21 10:02:21] INFO WEBrick 1.3.1 20 | [2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0] 21 | ---- 22 | 23 | Это запустит сервер HTTPD на порту 1234, а затем откроет эту страницу в веб-браузере. 24 | Как видите, нет ничего сложного. 25 | Когда вы закончили и хотите остановить сервер, запустите ту же команду с параметром `--stop`: 26 | 27 | [source,console] 28 | ---- 29 | $ git instaweb --httpd=webrick --stop 30 | ---- 31 | 32 | Если вы хотите иметь постоянно работающий веб-интерфейс на сервере для вашей команды или предоставлять хостинг для проекта с открытым кодом, вам необходимо подключить CGI-сценарий на вашем веб-сервере. 33 | В некоторых дистрибутивах Linux есть пакет `gitweb`, который вы можете установить, используя `apt` или `dnf`, так что вы можете попробовать сначала этот способ. 34 | Мы же вкратце рассмотрим ручную установку GitWeb. 35 | Для начала вам нужно скачать исходный код Git, с которым поставляется GitWeb, и сгенерировать CGI-сценарий под свою систему: 36 | 37 | [source,console] 38 | ---- 39 | $ git clone git://git.kernel.org/pub/scm/git/git.git 40 | $ cd git/ 41 | $ make GITWEB_PROJECTROOT="/srv/git" prefix=/usr gitweb 42 | SUBDIR gitweb 43 | SUBDIR ../ 44 | make[2]: 'GIT-VERSION-FILE' is up to date. 45 | GEN gitweb.cgi 46 | GEN static/gitweb.js 47 | $ sudo cp -Rf gitweb /var/www/ 48 | ---- 49 | 50 | Помните, что вы должны указать команде где расположены ваши репозитории Git с помощью переменной `GITWEB_PROJECTROOT`. 51 | Теперь вы должны настроить Apache на использование этого CGI-сценария, для чего вы можете добавить виртуальный хост: 52 | 53 | [source,console] 54 | ---- 55 | 56 | ServerName gitserver 57 | DocumentRoot /var/www/gitweb 58 | 59 | Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch 60 | AllowOverride All 61 | order allow,deny 62 | Allow from all 63 | AddHandler cgi-script cgi 64 | DirectoryIndex gitweb.cgi 65 | 66 | 67 | ---- 68 | 69 | Повторюсь, GitWeb может быть установлен на любой веб-сервер, совместимый с CGI или Perl; если вы предпочитаете использовать что-то другое, настройка не должна стать для вас проблемой. 70 | К этому моменту вы должны иметь возможность зайти на `http://gitserver/` для просмотра ваших репозиториев онлайн. 71 | -------------------------------------------------------------------------------- /book/04-git-server/sections/hosted.asc: -------------------------------------------------------------------------------- 1 | === Git-хостинг 2 | 3 | Если вы не хотите связываться со всей работой по установке собственного Git-сервера, у вас есть несколько вариантов размещения ваших Git-проектов на внешних специальных хостинг сайтах. 4 | Это предоставляет множество преимуществ: обычно на таких сайтах можно быстро настроить и запустить проект, а так же не требуется никакого мониторинга или поддержки сервера. 5 | Даже если вы установили и запустили свой собственный внутренний сервер, возможно, вы захотите использовать сайт на публичном хостинге для ваших проектов с открытым кодом -- так сообществу будет проще вас найти и помочь. 6 | 7 | В наши дни у вас есть огромный выбор вариантов хостинга, каждый из которых имеет свои преимущества и недостатки. 8 | Актуальный список приведён в главной вики Git на странице GitHosting: https://git.wiki.kernel.org/index.php/GitHosting[^] 9 | 10 | Мы детально рассмотрим GitHub в главе <>, так как это крупнейший Git-хостинг и вам скорее всего понадобится взаимодействовать с проектами, хостящимися на нём; при этом существуют десятки других, что делает необязательным использование собственного сервера. 11 | -------------------------------------------------------------------------------- /book/04-git-server/sections/smart-http.asc: -------------------------------------------------------------------------------- 1 | === Умный HTTP 2 | 3 | (((Git-серверы, HTTP))) 4 | Теперь у нас есть доступ с аутентификацией через SSH и неаутентифицированный доступ через `git://`, но есть ещё протокол, который может делать и то и другое. 5 | Настройка умного HTTP -- это просто установка на сервер CGI-скрипта `git-http-backend`, поставляемого вместе с Git.(((команды git, "http-backend"))) 6 | Этот CGI-скрипт будет читать путь и заголовки, посылаемые `git fetch` или `git push` в URL и определять, может ли клиент работать через HTTP (это верно для любого клиента, начиная с версии 1.6.6). 7 | Если CGI-скрипт видит, что клиент умный, то и общаться с ним будет по-умному, иначе откатится на простое поведение (что делает операции чтения обратно совместимыми со старыми клиентами). 8 | 9 | Давайте пройдёмся по самой базовой установке. 10 | Мы настроим Apache как сервер CGI. 11 | Если у вас не установлен Apache, вы можете сделать это на Linux-машине примерно так: (((Apache))) 12 | 13 | [source,console] 14 | ---- 15 | $ sudo apt-get install apache2 apache2-utils 16 | $ a2enmod cgi alias env 17 | ---- 18 | 19 | Это также включит необходимые для корректной работы модули `mod_cgi`, `mod_alias` и `mod_env`. 20 | 21 | Так же необходимо установить Unix пользователя и группу для каталога `/srv/git` в значение `www-data`, чтобы позволить веб-серверу читать из и писать в репозитории, потому что процесс Apache, запускающий CGI скрипт, работает от имени этого пользователя: 22 | 23 | [source,console] 24 | ---- 25 | $ chgrp -R www-data /srv/git 26 | ---- 27 | 28 | Затем добавим некоторые настройки в конфигурационный файл Apache, чтобы запускать `git-http-backend` как обработчик для всех запросов, содержащих `/git`. 29 | 30 | [source,console] 31 | ---- 32 | SetEnv GIT_PROJECT_ROOT /srv/git 33 | SetEnv GIT_HTTP_EXPORT_ALL 34 | ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ 35 | ---- 36 | 37 | Если пропустить переменную окружения `GIT_HTTP_EXPORT_ALL`, тогда Git будет отдавать только неаутентифицированным клиентам репозитории с файлом `git-daemon-export-ok` внутри, также как это делает Git-демон. 38 | 39 | Наконец, нужно разрешить Apache обрабатывать запросы к `git-http-backend`, при этом запросы на запись должны быть авторизованы, для этого можно использовать вот такой блок конфигурации: 40 | 41 | [source,console] 42 | ---- 43 | 44 | AuthType Basic 45 | AuthName "Git Access" 46 | AuthUserFile /srv/git/.htpasswd 47 | Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#) 48 | Require valid-user 49 | 50 | ---- 51 | 52 | Это потребует создания файла `.htpasswd`, содержащего пароли всех пользователей. 53 | Например, добавление пользователя «schacon» в этот файл делается так: 54 | 55 | [source,console] 56 | ---- 57 | $ htpasswd -c /srv/git/.htpasswd schacon 58 | ---- 59 | 60 | Существует множество способов аутентифицировать пользователей в Apache, вам нужно выбрать и применить хотя бы один из них. 61 | Мы привели простейший пример. 62 | Скорее всего вы ещё захотите настроить SSL для шифрования трафика. 63 | 64 | Мы не хотим погружаться слишком глубоко в бездну настроек Apache, так как у вас может быть другой сервер или другие требования к аутентификации. 65 | Идея в том, что Git идёт с CGI-скриптом `git-http-backend`, который берёт на себя согласование передачи и приёма данных по HTTP. 66 | Сам по себе, он не реализует аутентификации, но это легко настраивается на уровне веб-сервера, который его запускает. 67 | Вы можете сделать это практически на любом веб-сервере с поддержкой CGI, так что используйте тот, который знаете лучше всего. 68 | 69 | [NOTE] 70 | ==== 71 | За дополнительной информацией по настройке аутентификации в Apache обратитесь к документации: https://httpd.apache.org/docs/current/howto/auth.html[^] 72 | ==== 73 | -------------------------------------------------------------------------------- /book/06-github/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/1.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/1.png -------------------------------------------------------------------------------- /book/06-github/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/10.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/10.png -------------------------------------------------------------------------------- /book/06-github/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/2.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/2.png -------------------------------------------------------------------------------- /book/06-github/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/3.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/3.png -------------------------------------------------------------------------------- /book/06-github/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/4.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/4.png -------------------------------------------------------------------------------- /book/06-github/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/5.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/5.png -------------------------------------------------------------------------------- /book/06-github/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/6.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/6.png -------------------------------------------------------------------------------- /book/06-github/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/7.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/7.png -------------------------------------------------------------------------------- /book/06-github/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/8.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/8.png -------------------------------------------------------------------------------- /book/06-github/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/9.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/06-github/callouts/9.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/1.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/1.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/10.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/10.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/2.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/2.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/3.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/3.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/4.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/4.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/5.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/5.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/6.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/6.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/7.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/7.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/8.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/8.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/9.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/07-git-tools/callouts/9.png -------------------------------------------------------------------------------- /book/07-git-tools/git-credential-read-only: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'optparse' 4 | 5 | path = File.expand_path '~/.git-credentials' # <1> 6 | OptionParser.new do |opts| 7 | opts.banner = 'USAGE: git-credential-read-only [options] ' 8 | opts.on('-f', '--file PATH', 'Specify path for backing store') do |argpath| 9 | path = File.expand_path argpath 10 | end 11 | end.parse! 12 | 13 | exit(0) unless ARGV[0].downcase == 'get' # <2> 14 | exit(0) unless File.exists? path 15 | 16 | known = {} # <3> 17 | while line = STDIN.gets 18 | break if line.strip == '' 19 | k,v = line.strip.split '=', 2 20 | known[k] = v 21 | end 22 | 23 | File.readlines(path).each do |fileline| # <4> 24 | prot,user,pass,host = fileline.scan(/^(.*?):\/\/(.*?):(.*?)@(.*)$/).first 25 | if prot == known['protocol'] and host == known['host'] and user == known['username'] then 26 | puts "protocol=#{prot}" 27 | puts "host=#{host}" 28 | puts "username=#{user}" 29 | puts "password=#{pass}" 30 | exit(0) 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-p4.asc: -------------------------------------------------------------------------------- 1 | [[r_perforce_import]] 2 | ==== Perforce 3 | 4 | (((Perforce)))(((Импорт, из Perforce))) 5 | Следующей системой из которой мы импортируем репозиторий станет Perforce. 6 | Вы уже знаете, что существует два способа подружить Git и Perforce: `git-p4` и Git Fusion. 7 | 8 | ===== Perforce Git Fusion 9 | 10 | Git Fusion делает процесс переноса вполне безболезненным. 11 | Просто настройте проект, соответствия между пользователями и ветки в конфигурационном файле как показано в <> и клонируйте репозиторий. 12 | В результате вы получите настоящий Git репозиторий, который, при желании, можно сразу же отправлять на удалённый Git сервер. 13 | Вы даже можете использовать Perforce в качестве такового. 14 | 15 | [[r_git_p4]] 16 | ===== Git-p4 17 | 18 | `git-p4` также можно использовать для переноса репозитория. 19 | В качестве примера мы импортируем проект «Jam» из публичного депо Perforce. 20 | 21 | Вначале нужно указать адрес депо в переменной окружения `P4PORT`. 22 | 23 | [source,console] 24 | ---- 25 | $ export P4PORT=public.perforce.com:1666 26 | ---- 27 | 28 | [NOTE] 29 | ==== 30 | Для дальнейших экспериментов вам понадобится доступ к Perforce депо. 31 | Мы используем общедоступное депо на public.perforce.com, но вы можете взять любое другое, к которому у вас есть доступ. 32 | ==== 33 | 34 | (((команды git, p4))) 35 | Запустите команду `git p4 clone` чтобы импортировать проект «Jam» с Perforce сервера, передав ей путь к проекту в депо и каталог, в который хотите импортировать репозиторий: 36 | 37 | [source,console] 38 | ---- 39 | $ git-p4 clone //guest/perforce_software/jam@all p4import 40 | Importing from //guest/perforce_software/jam@all into p4import 41 | Initialized empty Git repository in /private/tmp/p4import/.git/ 42 | Import destination: refs/remotes/p4/master 43 | Importing revision 9957 (100%) 44 | ---- 45 | 46 | Конкретно этот проект имеет одну ветку, но если бы их было несколько, вы бы просто могли передать флаг `--detect-branches` в `git p4 clone`. 47 | Перечитайте раздел <> для подробностей. 48 | 49 | На данном этапе репозиторий почти готов. 50 | Если вы перейдёте в каталог `p4import` и выполните `git log`, вы увидите результат: 51 | 52 | [source,console] 53 | ---- 54 | $ git log -2 55 | commit e5da1c909e5db3036475419f6379f2c73710c4e6 56 | Author: giles 57 | Date: Wed Feb 8 03:13:27 2012 -0800 58 | 59 | Correction to line 355; change to . 60 | 61 | [git-p4: depot-paths = "//public/jam/src/": change = 8068] 62 | 63 | commit aa21359a0a135dda85c50a7f7cf249e4f7b8fd98 64 | Author: kwirth 65 | Date: Tue Jul 7 01:35:51 2009 -0800 66 | 67 | Fix spelling error on Jam doc page (cummulative -> cumulative). 68 | 69 | [git-p4: depot-paths = "//public/jam/src/": change = 7304] 70 | ---- 71 | 72 | `git-p4` оставил идентификаторы в сообщениях всех коммитов. 73 | Ничего страшного нет в том, чтобы оставить всё как есть, особенно если вы захотите сослаться на номер ревизии в Perforce в будущем. 74 | Если же вы хотите убрать эти строки, теперь -- прежде чем приступать к работе с репозиторием -- самое время для этого. 75 | (((команды git, filter-branch))) 76 | Вы можете использовать `git filter-branch` чтобы удалить идентификаторы из всех сообщений одним махом: 77 | 78 | [source,console] 79 | ---- 80 | $ git filter-branch --msg-filter 'sed -e "/^\[git-p4:/d"' 81 | Rewrite e5da1c909e5db3036475419f6379f2c73710c4e6 (125/125) 82 | Ref 'refs/heads/master' was rewritten 83 | ---- 84 | 85 | Если вы сейчас выполните `git log`, вы увидите, что SHA-1 хеши коммитов изменились, а строки `git-p4` исчезли из сообщений: 86 | 87 | [source,console] 88 | ---- 89 | $ git log -2 90 | commit b17341801ed838d97f7800a54a6f9b95750839b7 91 | Author: giles 92 | Date: Wed Feb 8 03:13:27 2012 -0800 93 | 94 | Correction to line 355; change to . 95 | 96 | commit 3e68c2e26cd89cb983eb52c024ecdfba1d6b3fff 97 | Author: kwirth 98 | Date: Tue Jul 7 01:35:51 2009 -0800 99 | 100 | Fix spelling error on Jam doc page (cummulative -> cumulative). 101 | ---- 102 | 103 | Теперь ваш репозиторий готов к отправке на Git сервер. 104 | -------------------------------------------------------------------------------- /book/10-git-internals/sections/plumbing-porcelain.asc: -------------------------------------------------------------------------------- 1 | [[r_plumbing_porcelain]] 2 | === Сантехника и Фарфор 3 | 4 | В этой книге было описано, как пользоваться Git, применяя примерно три десятка команд, таких как `checkout`, `branch`, `remote` и так далее. 5 | Но так как сначала Git был скорее инструментарием для создания системы контроля версий, чем самой VCS, удобной для пользователей, то в нём полно команд, выполняющих низкоуровневые операции, которые спроектированы так, чтобы их можно было использовать объединив в цепочку в стиле UNIX, а также использовать в скриптах. 6 | Эти команды, как правило, называют служебными («plumbing» -- трубопровод), а ориентированные на пользователя называют пользовательскими («porcelain» -- фарфор). 7 | 8 | Первые девять глав книги были посвящены в основном пользовательским командам. 9 | В данной главе рассматриваются именно низкоуровневые служебные команды, дающие контроль над внутренними процессами Git и показывающие, как он работает и почему он работает так, а не иначе. 10 | Предполагается, что данные команды не будут использоваться напрямую из командной строки, а будут служить в качестве строительных блоков для новых команд и пользовательских скриптов. 11 | 12 | Когда вы выполняете `git init` в новом или существовавшем ранее каталоге, Git создаёт подкаталог `.git`, в котором располагается почти всё, чем он манипулирует. 13 | Если требуется выполнить резервное копирование или клонирование репозитория, достаточно скопировать лишь этот каталог, чтобы получить почти всё необходимое. 14 | Данная глава почти полностью посвящена его содержимому. 15 | Вот так выглядит только что созданный каталог `.git`: 16 | 17 | [source,console] 18 | ---- 19 | $ ls -F1 20 | config 21 | description 22 | HEAD 23 | hooks/ 24 | info/ 25 | objects/ 26 | refs/ 27 | ---- 28 | 29 | В зависимости от используемой версии Git, здесь могут присутствовать и другие файлы, но по умолчанию команда `git init` создаёт именно такое содержимое в каталоге `.git`. 30 | Файл `description` используется только программой GitWeb, не обращайте на него внимание. 31 | Файл `config` содержит специфичные для этого репозитория конфигурационные параметры, а в каталоге `info` расположен файл с глобальными настройкам игнорирования файлов (((исключения))) -- он позволяет исключить файлы, которые вы не хотите помещать в `.gitignore`. 32 | В каталоге `hooks` располагаются клиентские и серверные хуки, подробно рассмотренные в разделе <> главы 8. 33 | 34 | Итак, осталось четыре важных элемента: файлы `HEAD` и `index` (ещё не созданный) и каталоги `objects` и `refs`. 35 | Это ключевые элементы Git. 36 | В каталоге `objects` находится база данных объектов Git; в `refs` -- ссылки на объекты коммитов в этой базе (ветки, теги и другие); файл `HEAD` указывает на текущую ветку, a в файле `index` хранится содержимое индекса. 37 | Далее мы детально рассмотрим эти элементы, чтобы понять как работает Git. 38 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/bash.asc: -------------------------------------------------------------------------------- 1 | === Git в Bash 2 | 3 | (((bash)))(((автодополнение по tab, bash)))(((командные оболочки, bash))) 4 | Если вы используете Bash, то можете задействовать некоторые из его фишек для облегчения работы с Git. 5 | К слову, Git поставляется с плагинами для нескольких командных оболочек, но они выключены по умолчанию. 6 | 7 | Для начала, скачайте файл `contrib/completion/git-completion.bash` из репозитория с исходным кодом Git. 8 | Поместите его в укромное место -- например, в ваш домашний каталог -- и добавьте следующие строки в `.bashrc`: 9 | 10 | [source,console] 11 | ---- 12 | . ~/git-completion.bash 13 | ---- 14 | 15 | Как только закончите с этим, перейдите в каталог с Git репозиторием и наберите: 16 | 17 | [source,console] 18 | ---- 19 | $ git chec 20 | ---- 21 | 22 | …и Bash дополнит строку до `git checkout`. 23 | Эта магия работает для всех Git команд, их параметров, удалённых репозиториев и имён ссылок там, где это возможно. 24 | 25 | Возможно, вам также пригодится отображение информации о репозитории, расположенном в текущем каталоге. 26 | Вы можете выводить сколь угодно сложную информацию, но обычно достаточно названия текущей ветки и статуса рабочего каталога. 27 | Чтобы снабдить строку приветствия этой информацией, скачайте файл `contrib/completion/git-prompt.sh` из репозитория с исходным кодом Git и добавьте примерно такие строки в `.bashrc`: 28 | 29 | [source,console] 30 | ---- 31 | . ~/git-prompt.sh 32 | export GIT_PS1_SHOWDIRTYSTATE=1 33 | export PS1='\w$(__git_ps1 " (%s)")\$ ' 34 | ---- 35 | 36 | Часть `\w` означает текущий рабочий каталог, `\$` -- индикатор суперпользователя (обычно `$` или `#`), а `__git_ps1 " (%s)"` вызывает функцию, объявленную в `git-prompt.sh`, с аргументом ` (%s)` -- строкой форматирования. 37 | Теперь ваша строка приветствия будет похожа на эту, когда вы перейдёте в каталог с Git репозиторием: 38 | 39 | .Кастомизированная строка приветствия `bash` 40 | image::images/git-bash.png["Кастомизированная строка приветствия `bash`"] 41 | 42 | Оба вышеперечисленных скрипта снабжены полезной документацией, загляните внутрь `git-completion.bash` и `git-prompt.sh` чтобы узнать больше. 43 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/eclipse.asc: -------------------------------------------------------------------------------- 1 | === Git в Eclipse 2 | 3 | (((Eclipse))) 4 | В составе IDE Eclipse есть плагин под названием Egit, который предоставляет довольно полнофункциональный интерфейс для операций с Git. 5 | Воспользоваться им можно, включив Git-перспективу (`Window` > `Open Perspective` > `Other`…, и выбрать `Git`). 6 | 7 | .EGit в Eclipse 8 | image::images/egit.png["EGit в Eclipse"] 9 | 10 | EGit поставляется с неплохой документацией, доступной меню через `Help` > `Help Contents` в разделе `EGit Documentation`. 11 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/jetbrainsides.asc: -------------------------------------------------------------------------------- 1 | === Git в IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 2 | 3 | JetBrains IDE (такие как IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, RubyMine и другие) поставляются с соответствующим плагином для интеграции с Git. 4 | Он предоставляет собственный интерфейс для работы с запросами слияния Git и GitHub. 5 | 6 | .Окно версионного контроля в JetBrains IDE 7 | image::images/jb.png["Окно версионного контроля в средах JetBrains"] 8 | 9 | Интеграция обеспечивается за счёт использования консольного Git клиента и требует его наличия в системе. 10 | Официальная документация доступна по ссылке https://www.jetbrains.com/help/idea/using-git-integration.html[^]. 11 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/sublimetext.asc: -------------------------------------------------------------------------------- 1 | === Git в Sublime Text 2 | 3 | Начиная с версии 3.2 в редактор Sublime Text встроена поддержка Git. 4 | 5 | Основные особенности: 6 | 7 | * На боковой панели git статус файлов и каталогов помечается бэйджем/иконкой. 8 | * Файлы и каталоги, указанные в `.gitignore` не отображаются на боковой панели. 9 | * В строке состояния отображается текущая ветка и количество внесённых изменений. 10 | * Изменённые строки помечаются маркерами в канавке с нумерацией. 11 | * Можно использовать некоторые функции git клиента Sublime Merge непосредственно из Sublime Text. 12 | (Это требует установки Sublime Merge: https://www.sublimemerge.com/[^]) 13 | 14 | Официальная документация для Sublime Text доступна здесь: https://www.sublimetext.com/docs/3/git_integration.html[^] 15 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/visualstudio.asc: -------------------------------------------------------------------------------- 1 | === Git в Visual Studio 2 | 3 | (((Visual Studio))) 4 | Начиная с Visual Studio 2013 Update 1, пользователям Visual Studio доступен Git-клиент, встроенный непосредственно в IDE. 5 | Visual Studio уже в течение достаточно долгого времени имеет встроенные функции управления исходным кодом, но они были ориентированы на централизованные системы с блокировкой файлов, и Git не очень хорошо вписывался в такой рабочей процесс. 6 | Поддержка Git в Visual Studio 2013 была существенно переработана по сравнению со старой версией, и в результате удалось добиться лучшей интеграции Visual Studio и Git. 7 | 8 | Чтобы воспользоваться этой функциональностью, откройте проект, который управляется Git (или выполните `git init` для существующего проекта) и выберите пункты View (Вид) > Team Explorer (Командный обозреватель) в главном меню. 9 | В результате откроется окно «Connect» («Подключить»), которое выглядит примерно вот так: 10 | 11 | .Подключение к Git-репозиторию из окна Team Explorer (Командный обозреватель) 12 | image::images/vs-1.png["Подключение к Git-репозиторию из окна Team Explorer (Командный обозреватель)"] 13 | 14 | Visual Studio запоминает все проекты, управляемые с помощью Git, которые Вы открыли, и они доступны в списке в нижней части окна. 15 | Если в списке нет проекта, который вам нужен, нажмите кнопку «Add» («Добавить») и укажите путь к рабочему каталогу. 16 | Двойной клик по одному из локальных Git-репозиториев откроет главную страницу репозитория, которая выглядит примерно так <>. 17 | 18 | Это центр управления Git; когда вы _пишете_ код, вы, вероятно, проводите большую часть своего времени на странице «Changes» («Изменения»), но когда приходит время получать изменения, сделанные вашими коллегами по работе, вам необходимо использовать страницы «Unsynced Commits» («Несинхронизированные коммиты») и «Branches» («Ветки»). 19 | 20 | [[rvs_home]] 21 | .«Домашняя» страница Git-репозитория в Visual Studio 22 | image::images/vs-2.png["Главная страница Git-репозитория в Visual Studio"] 23 | 24 | В настоящее время Visual Studio имеет мощный задача-ориентированный графический интерфейс для Git. 25 | Он включает в себя возможность линейного представления истории, различные средства просмотра, средства выполнения удалённых команд и множество других возможностей. 26 | Подробнее об использовании Git в Visual Studio: https://docs.microsoft.com/en-us/azure/devops/repos/git/command-prompt?view=azure-devops[^]. 27 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/visualstudiocode.asc: -------------------------------------------------------------------------------- 1 | === Git в Visual Studio Code 2 | 3 | Visual Studio Code имеет встроенную поддержку Git. 4 | Вам потребуется установить Git версии не ниже чем 2.0.0. 5 | 6 | Основные особенности: 7 | 8 | * Просмотр изменений редактируемого файла 9 | * Панель состояния Git (слева внизу), на которой отображается текущая ветка, индикатор ошибок, входящие и исходящие коммиты. 10 | * В редакторе можно делать основные Git операции: 11 | ** Инициализация репозитория. 12 | ** Клонирование репозитория. 13 | ** Создание веток и тегов. 14 | ** Индексация изменений и создание коммитов. 15 | ** Push/pull/sync с удалённой веткой. 16 | ** Разрешение конфликтов слияния. 17 | ** Просмотр изменений. 18 | * С помощью плагина можно работать с запросами слияния на GitHub: 19 | https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[^]. 20 | 21 | Официальная документация доступна здесь: https://code.visualstudio.com/Docs/editor/versioncontrol[^]. 22 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/zsh.asc: -------------------------------------------------------------------------------- 1 | === Git в Zsh 2 | 3 | (((zsh)))(((автодополнение по tab, zsh)))(((командные оболочки, zsh))) 4 | Git поставляется с поддержкой автодополнения для Zsh. 5 | Чтобы начать им пользоваться, просто добавьте строку `autoload -Uz compinit && compinit` в ваш `.zshrc` файл. 6 | Интерфейс Zsh более функциональный чем в Bash: 7 | 8 | [source,console] 9 | ---- 10 | $ git che 11 | check-attr -- display gitattributes information 12 | check-ref-format -- ensure that a reference name is well formed 13 | checkout -- checkout branch or paths to working tree 14 | checkout-index -- copy files from index to working directory 15 | cherry -- find commits not merged upstream 16 | cherry-pick -- apply changes introduced by some existing commits 17 | ---- 18 | 19 | Возможные варианты автодополнения не просто перечислены; они снабжены полезными описаниями и вы можете выбрать нужный вариант из предложенных, перемещаясь по ним нажатием клавиши `Tab`. 20 | Это работает не только для команд Git, но и для их аргументов, названий объектов внутри репозитория (например, ссылки и удалённые репозитории), а также для имён файлов и прочего. 21 | 22 | В состав Zsh входит фреймворк `vcs_info`, предназначенный для извлечения информации из систем контроля версий. 23 | Чтобы отобразить имя текущей ветки в правой строке приветствия, добавьте следующие строки в файл `~/.zshrc`: 24 | 25 | [source,console] 26 | ---- 27 | autoload -Uz vcs_info 28 | precmd_vcs_info() { vcs_info } 29 | precmd_functions+=( precmd_vcs_info ) 30 | setopt prompt_subst 31 | RPROMPT=\$vcs_info_msg_0_ 32 | # PROMPT=\$vcs_info_msg_0_'%# ' 33 | zstyle ':vcs_info:git:*' formats '%b' 34 | ---- 35 | 36 | В результате вы будете видеть имя текущей ветки в правой части окна терминала каждый раз, как перейдёте внутрь Git репозитория. 37 | (Для отображения названия ветки слева используйте `PROMPT` вместо `RPROMPT`) 38 | Результат выглядит примерно так: 39 | 40 | .Кастомизированная строка приветствия в `zsh` 41 | image::images/zsh-prompt.png["Кастомизированная строка приветствия в `zsh`"] 42 | 43 | Дополнительную информацию о `vcs_info` можно найти в документации `zshcontrib(1)` или онлайн http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. 44 | 45 | Возможно, вы предпочтёте использовать поставляемый вместе с Git скрипт настройки `git-prompt.sh`; детали использования приведены в комментариях к файлу https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh[^]. 46 | Скрипт `git-prompt.sh` совместим с обеими оболочками Bash и Zsh. 47 | 48 | Zsh настолько конфигурируем, что существуют целые фреймворки, посвящённые его улучшению. 49 | Пример такого проекта, называемый «oh-my-zsh», расположен на https://github.com/robbyrussell/oh-my-zsh[^]. 50 | Система плагинов этого проекта включает в себя мощнейший набор правил автодополнения для Git, а многие «темы» (служащие для настройки строк приветствия) отображают информацию из различных систем контроля версий. 51 | <> -- лишь один из многих вариантов применения. 52 | 53 | [[roh_my_zsh_git]] 54 | .Пример темы oh-my-zsh 55 | image::images/zsh-oh-my.png["Пример темы oh-my-zsh"] 56 | -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/1.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/1.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/10.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/10.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/2.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/2.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/3.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/3.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/4.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/4.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/5.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/5.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/6.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/6.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/7.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/7.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/8.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/8.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/9.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/B-embedding-git/callouts/9.png -------------------------------------------------------------------------------- /book/B-embedding-git/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Git из командной строки 2 | 3 | Первый вариант встраивания Git -- порождение шелла и использование Git из него для выполнения задач. 4 | Плюсом данного подхода является каноничность и поддержка всех возможностей Git. 5 | Это наиболее простой подход, так как большинство сред исполнения предоставляют достаточно простые средства вызова внешних процессов с параметрами командной строки. 6 | Тем не менее, у этого подхода есть некоторые недостатки. 7 | 8 | Первый -- результат выполнения команд представлен в виде простого текста. 9 | Это означает, что вам придётся анализировать вывод команд (который может поменяться со временем) чтобы получить результат выполнения, что неэффективно и подвержено ошибкам. 10 | 11 | Следующий недостаток -- отсутствие восстановления после ошибок. 12 | Если репозиторий был повреждён, или если пользователь указал неверный параметр конфигурации, Git просто откажется выполнять большинство операций. 13 | 14 | Ещё одним недостатком является необходимость управления порождённым процессом. 15 | При таком использовании Git требует выделения в отдельный процесс с шеллом, что может добавить сложностей. 16 | Попытка скоординировать множество таких процессов (особенно при работе с одним репозиторием из нескольких процессов) может оказаться нетривиальной задачей. 17 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/dulwich.asc: -------------------------------------------------------------------------------- 1 | === Dulwich 2 | 3 | (((Dulwich)))(((Python))) 4 | Так же существует реализация Git на чистом Python -- Dulwich. 5 | Проект размещается здесь hhttps://github.com/jelmer/dulwich[^]. 6 | Целью проекта является предоставление интерфейса к Git репозиториям (как локальным, так и удалённым) используя чистый Python, а не вызывая Git. 7 | В нём используются дополнительные расширения на С, которые существенно увеличивают производительность. 8 | 9 | Dulwich следует дизайну Git и разделяет API на два уровня: сантехника и фарфор. 10 | 11 | Например, так выглядит использование низкоуровневого API для получения сообщения последнего коммита: 12 | 13 | [source, python] 14 | ---- 15 | from dulwich.repo import Repo 16 | r = Repo('.') 17 | r.head() 18 | # '57fbe010446356833a6ad1600059d80b1e731e15' 19 | 20 | c = r[r.head()] 21 | c 22 | # 23 | 24 | c.message 25 | # 'Add note about encoding.\n' 26 | ---- 27 | 28 | Чтобы вывести лог коммита используя высокоуровневый фарфоровый API, можно использовать: 29 | 30 | [source, python] 31 | ---- 32 | from dulwich import porcelain 33 | porcelain.log('.', max_entries=1) 34 | 35 | #commit: 57fbe010446356833a6ad1600059d80b1e731e15 36 | #Author: Jelmer Vernooij 37 | #Date: Sat Apr 29 2017 23:57:34 +0000 38 | ---- 39 | 40 | ==== Дополнительные материалы 41 | 42 | Документацию к API, руководство и множество примеров решения специфичных задач с помощью Dulwich можно найти на странице проекта https://github.com/jelmer/dulwich[^]. 43 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/go-git.asc: -------------------------------------------------------------------------------- 1 | === go-git 2 | 3 | (((go-git)))(((Go))) 4 | Для интеграции Git в сервисы, написанные на языке Golang, существует библиотека на чистом Go. 5 | Она не имеет собственных зависимостей, поэтому не подвержена ошибкам ручного управления памятью. 6 | Так же эта библиотека прозрачна для стандартных Golang утилит анализа производительности, таких как профайлеры потребления ЦПУ и памяти, детектор гонки и других. 7 | 8 | go-git ориентирован на расширяемость, совместимость и поддерживает большинство подключаемых API, которые описаны здесь https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[^]. 9 | 10 | Вот простой пример использования Go API: 11 | 12 | [source, go] 13 | ---- 14 | import "github.com/go-git/go-git/v5" 15 | 16 | r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ 17 | URL: "https://github.com/go-git/go-git", 18 | Progress: os.Stdout, 19 | }) 20 | ---- 21 | 22 | Как только у вас есть экземпляр `Repository`, вы можете получить доступ к информации и изменять её: 23 | 24 | [source, go] 25 | ---- 26 | // получаем ветку по указателю HEAD 27 | ref, err := r.Head() 28 | 29 | // получаем объект коммита по указателю ref 30 | commit, err := r.CommitObject(ref.Hash()) 31 | 32 | // получаем историю коммита 33 | history, err := commit.History() 34 | 35 | // проходим по коммитам и выводим каждый из них 36 | for _, c := range history { 37 | fmt.Println(c) 38 | } 39 | ---- 40 | 41 | ==== Расширенная функциональность 42 | 43 | go-git обладает некоторыми дополнительными функциями, одна из которых -- это подключаемое хранилище, что близко по смыслу с бэкендами Libgit2. 44 | Реализация по умолчанию -- хранилище в памяти, которое очень быстро работает. 45 | 46 | [source, go] 47 | ---- 48 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ 49 | URL: "https://github.com/go-git/go-git", 50 | }) 51 | ---- 52 | 53 | Подключаемое хранилище предоставляет много интересных возможностей. 54 | Например, https://github.com/go-git/go-git/tree/master/_examples/storage[^] позволяет вам сохранять ссылки, объекты и конфигурацию в базе данных Aerospike. 55 | 56 | Другая особенность -- гибкая абстракция файловой системы. 57 | Используя https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem[^] легко сохранять все файлы разными способами: упаковав их все в один архив хранить на диске или держать в памяти. 58 | 59 | Ещё одна продвинутая возможность -- это тонко настраиваемый HTTP клиент, как например вот этот https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[^]. 60 | 61 | [source, go] 62 | ---- 63 | customClient := &http.Client{ 64 | Transport: &http.Transport{ // принимать любой сертификат (полезно при тестировании) 65 | TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 66 | }, 67 | Timeout: 15 * time.Second, // таймаут в 15 секунд 68 | CheckRedirect: func(req *http.Request, via []*http.Request) error { 69 | return http.ErrUseLastResponse // не следовать перенаправлениям 70 | }, 71 | } 72 | 73 | // Перегружаем http(s) протокол по умолчанию для использования собственного клиента 74 | client.InstallProtocol("https", githttp.NewClient(customClient)) 75 | 76 | // Клонируем репозиторий используя новый клиент, если протокол https:// 77 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) 78 | ---- 79 | 80 | ==== Дополнительные материалы 81 | 82 | Полный разбор возможностей go-git выходит за рамки этой книги. 83 | Если вы хотите получить больше информации о go-git, воспользуйтесь документацией к API https://pkg.go.dev/github.com/go-git/go-git/v5[^] и примерами использования https://github.com/go-git/go-git/tree/master/_examples[^]. 84 | -------------------------------------------------------------------------------- /book/contributors.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Участники 3 | 4 | Поскольку эта книга Open Source, на протяжении многих лет мы получаем замечания об опечатках и другие доработки. 5 | Здесь собраны все люди, которые внесли свой вклад в русскую версию Pro Git как проекта с открытым исходным кодом. 6 | Спасибо всем за то, что помогли сделать эту книгу лучше. 7 | 8 | [source,tabsize=8] 9 | ---- 10 | include::contributors.txt[] 11 | ---- 12 | 13 | -------------------------------------------------------------------------------- /book/cover.html: -------------------------------------------------------------------------------- 1 |
cover
2 | -------------------------------------------------------------------------------- /book/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/book/cover.png -------------------------------------------------------------------------------- /book/dedication.asc: -------------------------------------------------------------------------------- 1 | [dedication] 2 | == Посвящается 3 | 4 | _Моей жене Бекки, без которой это приключение никогда бы не началось. -- Бен_ 5 | 6 | _Это издание посвящено моим девочкам. 7 | Моей жене Джессике, которая поддерживала меня все эти годы, и моей дочери Жозефине, которая поддержит меня, когда я стану слишком стар, чтобы понимать, что происходит. -- Скотт_ 8 | -------------------------------------------------------------------------------- /book/license.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Лицензия 3 | 4 | include::../LICENSE.asc[] 5 | -------------------------------------------------------------------------------- /book/preface_ben.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Пролог от Бена Страуба 3 | 4 | 5 | Я подсел на Git после первого издания этой книги. 6 | Это изменило моё представление о стиле создания программного обеспечения, которое было более естественным, чем всё, что я видел до этого. 7 | К тому моменту я уже несколько лет был разработчиком, но это позволило мне пойти по другому, гораздо более интересному, пути. 8 | 9 | Сейчас, годы спустя, я принимаю участие в реализации основных изменений в Git, работал в крупнейшей Git-хостинг компании, путешествовал по миру и учил людей Git. 10 | Я долго не думал, когда Скот спросил меня, хочу ли я поучаствовать в работе над вторым изданием. 11 | 12 | Работать над этой книгой было большим удовольствием и честью для меня. 13 | Надеюсь, она поможет вам так же как и мне. 14 | -------------------------------------------------------------------------------- /book/preface_schacon.asc: -------------------------------------------------------------------------------- 1 | [preface,au="Scott Chacon"] 2 | == Предисловие 3 | 4 | Добро пожаловать во второе издание Pro Git. 5 | Первое издание было опубликовано более четырёх лет назад. 6 | С тех пор многое изменилось, но многие важные вещи остались неизменны. 7 | Хотя большинство ключевых команд и концепций по-прежнему работают, так как команда, разрабатывающая ядро Git, фантастическим образом оставляет всё обратно совместимым, произошло несколько существенных дополнений и изменений в сообществе вокруг Git. 8 | Второе издание призвано обозначить эти изменения и обновить книгу для помощи новичкам. 9 | 10 | Когда я писал первое издание, Git ещё был относительно сложным в использовании и подходил лишь для настоящих хакеров. 11 | И хотя в некоторых сообществах он уже начинал набирать обороты, ему было далеко до сегодняшней распространённости. 12 | С тех пор его приняло практически всё сообщество свободного программного обеспечения. 13 | Git достиг невероятного прогресса в Windows, взрывными темпами получил графический интерфейс для всех платформ, поддержку сред разработки и стал использоваться в бизнесе. 14 | Pro Git четырёхлетней давности ничего подобного не подозревал. 15 | Одна из главных целей издания -- затронуть в Git сообществе эти рубежи. 16 | 17 | Сообщество свободного программного обеспечения тоже испытало взрывной рост. 18 | Когда я лет пять назад впервые сел писать книгу (первая версия потребовала времени), я как раз начал работать в крохотной компании, разрабатывающей сайт для Git хостинга под названием GitHub. 19 | На момент публикации у сайта было лишь несколько тысяч пользователей и четверо разработчиков. 20 | Когда же я пишу это предисловие, GitHub объявляет о десяти миллионах размещённых проектов, около пяти миллионах аккаунтах разработчиков и более 230 сотрудниках. 21 | Его можно любить или ненавидеть, в любом случае GitHub сильнейшим образом изменил сообщество свободного программного обеспечения, что было едва мыслимо, когда я только сел писать первое издание. 22 | 23 | Небольшую часть исходной версии Pro Git я посвятил GitHub в качестве примера хостинга, с которым мне никогда не было особо удобно работать. 24 | Мне не сильно нравилось писать то, что, по-моему, было ресурсом сообщества, а также упоминать в нём о моей компании. 25 | Меня по-прежнему волнует это противоречие, но важность GitHub в Git сообществе бесспорна. 26 | Вместо некоего примера Git хостинга, я решил посвятить этот раздел книги детальному описанию сути GitHub и его эффективному использованию. 27 | Если вы собираетесь узнать, как пользоваться Git, то умение пользоваться GitHub даст вам возможность поучаствовать в огромном сообществе, ценном вне зависимости от выбранного вами Git хостинга. 28 | 29 | Другим изменением с момента первой публикации стала разработка и развитие HTTP протокола для сетевых Git транзакций. Из соображений упрощения, большинство примеров из книги были переделаны из SSH на HTTP. 30 | 31 | Было изумительно смотреть, как за несколько прошедших лет Git вырос из весьма невзрачной системы контроля версий до безусловно лидирующей в коммерческой и некоммерческой сферах. Я счастлив, что Pro Git так хорошо выполнил свою работу, оказавшись одним из немногих представителей успешной и при этом полностью открытой технической литературы. 32 | 33 | Я надеюсь, вам понравится это новое издание Pro Git. 34 | -------------------------------------------------------------------------------- /callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/1.pdf -------------------------------------------------------------------------------- /callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/1.png -------------------------------------------------------------------------------- /callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/10.pdf -------------------------------------------------------------------------------- /callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/10.png -------------------------------------------------------------------------------- /callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/2.pdf -------------------------------------------------------------------------------- /callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/2.png -------------------------------------------------------------------------------- /callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/3.pdf -------------------------------------------------------------------------------- /callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/3.png -------------------------------------------------------------------------------- /callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/4.pdf -------------------------------------------------------------------------------- /callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/4.png -------------------------------------------------------------------------------- /callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/5.pdf -------------------------------------------------------------------------------- /callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/5.png -------------------------------------------------------------------------------- /callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/6.pdf -------------------------------------------------------------------------------- /callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/6.png -------------------------------------------------------------------------------- /callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/7.pdf -------------------------------------------------------------------------------- /callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/7.png -------------------------------------------------------------------------------- /callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/8.pdf -------------------------------------------------------------------------------- /callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/8.png -------------------------------------------------------------------------------- /callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/9.pdf -------------------------------------------------------------------------------- /callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/callouts/9.png -------------------------------------------------------------------------------- /ch01-getting-started.asc: -------------------------------------------------------------------------------- 1 | [[ch01-getting-started]] 2 | == Введение 3 | 4 | Эта глава о том, как начать работу с Git. 5 | Вначале изучим основы систем контроля версий, затем перейдём к тому, как запустить Git на вашей ОС и окончательно настроить для работы. 6 | В конце главы вы уже будете знать, что такое Git и почему им следует пользоваться, а также получите окончательно настроенную для работы систему. 7 | 8 | include::book/01-introduction/sections/about-version-control.asc[] 9 | 10 | include::book/01-introduction/sections/history.asc[] 11 | 12 | include::book/01-introduction/sections/what-is-git.asc[] 13 | 14 | include::book/01-introduction/sections/command-line.asc[] 15 | 16 | include::book/01-introduction/sections/installing.asc[] 17 | 18 | include::book/01-introduction/sections/first-time-setup.asc[] 19 | 20 | include::book/01-introduction/sections/help.asc[] 21 | 22 | === Заключение 23 | 24 | Вы получили базовые знания о том, что такое Git и чем он отличается от централизованных систем контроля версий, которыми вы, возможно, пользовались. 25 | Также вы теперь получили рабочую версию Git в вашей ОС, настроенную и персонализированную. 26 | Самое время изучить основы Git. 27 | -------------------------------------------------------------------------------- /ch02-git-basics-chapter.asc: -------------------------------------------------------------------------------- 1 | [[ch02-git-basics-chapter]] 2 | == Основы Git 3 | 4 | Если вы хотите начать работать с Git, прочитав всего одну главу, то эта глава -- то, что вам нужно. 5 | Здесь рассмотрены все базовые команды, необходимые вам для решения подавляющего большинства задач, возникающих при работе с Git. 6 | После прочтения этой главы вы научитесь настраивать и инициализировать репозиторий, начинать и прекращать контроль версий файлов, а также подготавливать и фиксировать изменения. 7 | Мы также продемонстрируем вам, как настроить в Git игнорирование отдельных файлов или их групп, как быстро и просто отменить ошибочные изменения, как просмотреть историю вашего проекта и изменения между отдельными коммитами (commit), а также как отправлять (push) и получать (pull) изменения в/из удалённого (remote) репозитория. 8 | 9 | include::book/02-git-basics/sections/getting-a-repository.asc[] 10 | 11 | include::book/02-git-basics/sections/recording-changes.asc[] 12 | 13 | include::book/02-git-basics/sections/viewing-history.asc[] 14 | 15 | include::book/02-git-basics/sections/undoing.asc[] 16 | 17 | include::book/02-git-basics/sections/remotes.asc[] 18 | 19 | include::book/02-git-basics/sections/tagging.asc[] 20 | 21 | include::book/02-git-basics/sections/aliases.asc[] 22 | 23 | === Заключение 24 | 25 | Теперь вы умеете выполнять все базовые локальные операции с Git: создавать или клонировать репозиторий, вносить изменения, индексировать и фиксировать эти изменения, а также просматривать историю всех изменений в репозитории. 26 | Дальше мы рассмотрим киллер-фичу Git -- его модель ветвления. 27 | -------------------------------------------------------------------------------- /ch03-git-branching.asc: -------------------------------------------------------------------------------- 1 | [[ch03-git-branching]] 2 | == Ветвление в Git 3 | 4 | (((ветки))) 5 | Почти каждая система контроля версий в той или иной форме поддерживает ветвление. 6 | Используя ветвление, Вы отклоняетесь от основной линии разработки и продолжаете работу независимо от неё, не вмешиваясь в основную линию. 7 | Во многих системах контроля версий создание веток -- это очень затратный процесс, часто требующий создания новой копии каталога с исходным кодом, что может занять много времени для большого проекта. 8 | 9 | Некоторые люди, говоря о модели ветвления Git, называют её «киллер-фича», что выгодно выделяет Git на фоне остальных систем контроля версий. 10 | Что в ней такого особенного? 11 | Ветвление Git очень легковесно: операция создания ветки выполняется почти мгновенно, переключение между ветками туда-сюда, обычно, также быстро. 12 | В отличие от многих других систем контроля версий, Git поощряет процесс работы, при котором ветвление и слияние выполняется часто, даже по несколько раз в день. 13 | Понимание и владение этой функциональностью даёт вам уникальный и мощный инструмент, который может полностью изменить привычный процесс разработки. 14 | 15 | include::book/03-git-branching/sections/nutshell.asc[] 16 | 17 | include::book/03-git-branching/sections/basic-branching-and-merging.asc[] 18 | 19 | include::book/03-git-branching/sections/branch-management.asc[] 20 | 21 | include::book/03-git-branching/sections/workflows.asc[] 22 | 23 | include::book/03-git-branching/sections/remote-branches.asc[] 24 | 25 | include::book/03-git-branching/sections/rebasing.asc[] 26 | 27 | === Заключение 28 | 29 | Мы рассмотрели базовые функции ветвления и слияния в Git. 30 | Вы должны быть способны свободно создавать и переключаться на новую ветку, переключаться между ветками и сливать локальные ветки вместе. 31 | Также вы должны уметь выкладывать ветки на общий сервер, работать с другими людьми над общими ветками и перебазировать ваши ветки до того, как они станут доступны другим разработчикам. 32 | Далее мы поговорим о том, что вам необходимо для запуска собственного сервера с хостингом для Git-репозитория. 33 | -------------------------------------------------------------------------------- /ch04-git-on-the-server.asc: -------------------------------------------------------------------------------- 1 | [[ch04-git-on-the-server]] 2 | == Git на сервере 3 | 4 | (((Git-серверы))) 5 | К этому моменту вы уже должны уметь делать большую часть повседневных задач, для которых вы будете использовать Git. 6 | Однако, для совместной работы в Git, вам необходим удалённый репозиторий. 7 | Несмотря на то, что технически вы можете отправлять и забирать изменения непосредственно из личных репозиториев, делать это не рекомендуется. 8 | Вы легко можете испортить то, над чем работают другие, если не будете аккуратны. 9 | К тому же, вам бы наверняка хотелось, чтобы остальные имели доступ к репозиторию даже если ваш компьютер выключен, поэтому наличие более надёжного репозитория обычно весьма полезно. 10 | Предпочтительный метод взаимодействия с кем-либо -- это создание промежуточного репозитория, к которому вы оба будете иметь доступ, и отправка и получение изменений через него. 11 | 12 | Запустить Git-сервер достаточно просто. 13 | Для начала следует выбрать протокол, который вы будете использовать для связи с сервером. 14 | Доступные протоколы с их достоинствами и недостатками описываются в первой части этой главы. 15 | Следующие части освещают базовые конфигурации с использованием этих протоколов, а также настройку вашего сервера для работы с ними. 16 | Далее мы рассмотрим несколько вариантов готового хостинга, которые можно использовать, если вы не против разместить ваш код на чужом сервере и не хотите мучиться с настройками и поддержкой вашего собственного сервера. 17 | 18 | Если вас не интересует настройка собственного сервера, вы можете перейти сразу к последней части этой главы для настройки аккаунта на Git-хостинге, а затем перейти к следующей главе, где мы обсудим различные аспекты работы с распределённой системой контроля версий. 19 | 20 | Удалённый репозиторий -- это обычно _голый (чистый, bare) репозиторий_ -- репозиторий Git, не имеющий рабочего каталога. 21 | Поскольку этот репозиторий используется только для обмена, то нет причин создавать рабочую копию файлов на диске -- достаточно хранить только данные Git. 22 | 23 | Проще говоря, голый репозиторий содержит только каталог `.git` вашего проекта и ничего больше. 24 | 25 | include::book/04-git-server/sections/protocols.asc[] 26 | 27 | include::book/04-git-server/sections/git-on-a-server.asc[] 28 | 29 | include::book/04-git-server/sections/generating-ssh-key.asc[] 30 | 31 | include::book/04-git-server/sections/setting-up-server.asc[] 32 | 33 | include::book/04-git-server/sections/git-daemon.asc[] 34 | 35 | include::book/04-git-server/sections/smart-http.asc[] 36 | 37 | include::book/04-git-server/sections/gitweb.asc[] 38 | 39 | include::book/04-git-server/sections/gitlab.asc[] 40 | 41 | include::book/04-git-server/sections/hosted.asc[] 42 | 43 | === Заключение 44 | 45 | Существует несколько вариантов использования удалённого Git-репозитория, чтобы принять участие в совместном проекте или поделиться своими наработками. 46 | 47 | Запуск своего сервера даёт полный контроль и позволяет запускать его за вашим сетевым экраном, но такой сервер обычно требует значительного времени на настройку и поддержку. 48 | В случае размещения данных на хостинге, его просто настроить и поддерживать; однако вам необходимо иметь возможность хранить код на чужом сервере, а некоторые организации этого не позволяют. 49 | 50 | Выбор решения или сочетания решений, которое подойдёт вам и вашей организации, не должен вызвать затруднений. 51 | -------------------------------------------------------------------------------- /ch05-distributed-git.asc: -------------------------------------------------------------------------------- 1 | [[ch05-distributed-git]] 2 | == Распределённый Git 3 | 4 | (((распределённый Git))) 5 | Теперь, когда вы обзавелись настроенным удалённым Git-репозиторием, т. е. местом, где разработчики могут обмениваться своим кодом, а также познакомились с основными командами Git для локальной работы, мы рассмотрим, как задействовать некоторые распределённые рабочие процессы, предлагаемые Git. 6 | 7 | В этой главе мы рассмотрим работу с Git в распределённой среде как в роли рядового разработчика, так и в роли системного интегратора. 8 | То есть вы научитесь успешно вносить свой код в проект, делая это как можно более просто и для вас, и для владельца проекта, а также научитесь тому, как сопровождать проекты, в которых участвует множество разработчиков. 9 | 10 | include::book/05-distributed-git/sections/distributed-workflows.asc[] 11 | 12 | include::book/05-distributed-git/sections/contributing.asc[] 13 | 14 | include::book/05-distributed-git/sections/maintaining.asc[] 15 | 16 | === Заключение 17 | 18 | Теперь вы должны чувствовать себя достаточно свободно как внося свой вклад в проект под управлением Git, так и занимаясь поддержкой своего собственного проекта или интегрированием наработок других пользователей. 19 | Поздравляем, вы опытный Git-разработчик! 20 | В следующей главе вы узнаете о том, как использовать самый большой и самый популярный Git хостинг -- GitHub. 21 | -------------------------------------------------------------------------------- /ch06-github.asc: -------------------------------------------------------------------------------- 1 | [[ch06-github]] 2 | == GitHub 3 | 4 | (((GitHub))) 5 | GitHub -- это крупнейшее хранилище Git репозиториев, а так же центр сотрудничества для миллионов разработчиков и проектов. 6 | Огромный процент всех репозиториев хранится на GitHub, а многие проекты с открытым исходным кодом используют его ради Git хостинга, баг-трекера, рецензирования кода и других вещей. 7 | Так что, пока всё это не часть открытого Git проекта, наверняка вы захотите, или вам придётся взаимодействовать с GitHub при профессиональном использовании Git. 8 | 9 | Эта глава про эффективное использование GitHub. 10 | Мы разберём регистрацию, управление учётной записью, создание и использование Git репозиториев, как вносить вклад в чужие проекты и как принимать чужой вклад в собственный проект, а так же программный интерфейс GitHub и ещё множество мелочей, который облегчат вам жизнь. 11 | 12 | Если вас не интересует использование GitHub для размещения собственных проектов или сотрудничества с другими проектами, размещёнными на нём, вы можете смело перейти к главе <>. 13 | 14 | [WARNING] 15 | .Изменения в интерфейсе 16 | ==== 17 | Важно отметить, что, как и на многих активных веб-сайтах, элементы интерфейса со скриншотов обязательно со временем изменятся. 18 | Надеемся, общее представление о том, что мы пытаемся сделать останется, но, если вы хотите более актуальных скриншотов, возможно вы найдёте их в онлайн версии этой книги. 19 | ==== 20 | 21 | include::book/06-github/sections/1-setting-up-account.asc[] 22 | 23 | include::book/06-github/sections/2-contributing.asc[] 24 | 25 | include::book/06-github/sections/3-maintaining.asc[] 26 | 27 | include::book/06-github/sections/4-managing-organization.asc[] 28 | 29 | include::book/06-github/sections/5-scripting.asc[] 30 | 31 | === Заключение 32 | 33 | Теперь вы полноценный пользователь GitHub. 34 | Вы знаете как создать аккаунт, управлять организацией, создавать и обновлять репозитории, помогать другим проектам и принимать чужой вклад в свой проект. 35 | В следующей главе вы узнаете про ещё более мощные инструменты и получите советы для решения сложных ситуаций, которые сделают вас настоящим мастером в Git. 36 | -------------------------------------------------------------------------------- /ch07-git-tools.asc: -------------------------------------------------------------------------------- 1 | [[ch07-git-tools]] 2 | == Инструменты Git 3 | 4 | К этому моменту вы уже изучили большинство повседневных команд и способов организации рабочего процесса, которые необходимы для управления Git репозиторием, используемого для управления вашим исходным кодом. 5 | Вы выполнили основные задания по отслеживанию и сохранению файлов в Git, вооружились мощью области подготовленных изменений, легковесного ветвления и слияния. 6 | 7 | Теперь настало время познакомиться с некоторыми очень мощными возможностями Git, которые при повседневной работе вам, наверное, не потребуются, но в какой-то момент могут оказаться полезными. 8 | 9 | include::book/07-git-tools/sections/revision-selection.asc[] 10 | 11 | include::book/07-git-tools/sections/interactive-staging.asc[] 12 | 13 | include::book/07-git-tools/sections/stashing-cleaning.asc[] 14 | 15 | include::book/07-git-tools/sections/signing.asc[] 16 | 17 | include::book/07-git-tools/sections/searching.asc[] 18 | 19 | include::book/07-git-tools/sections/rewriting-history.asc[] 20 | 21 | include::book/07-git-tools/sections/reset.asc[] 22 | 23 | include::book/07-git-tools/sections/advanced-merging.asc[] 24 | 25 | include::book/07-git-tools/sections/rerere.asc[] 26 | 27 | include::book/07-git-tools/sections/debugging.asc[] 28 | 29 | include::book/07-git-tools/sections/submodules.asc[] 30 | 31 | include::book/07-git-tools/sections/bundling.asc[] 32 | 33 | include::book/07-git-tools/sections/replace.asc[] 34 | 35 | include::book/07-git-tools/sections/credentials.asc[] 36 | 37 | === Заключение 38 | 39 | Вы познакомились с множеством продвинутых инструментов, которые позволяют вам более точно управлять вашими коммитами и областью подготовленных изменений. 40 | Когда вы столкнётесь с какими-то проблемами, вы должны легко выяснить, каким коммитом они были добавлены, когда и кем. 41 | На случай, если в вашем проекте вы захотите использовать подпроекты, вы уже изучили как этого можно добиться. 42 | Таким образом, к этому моменту вы должны уметь выполнять в командной строке большинство операций, необходимых при повседневной работе с Git, и при этом чувствовать себя уверенно. 43 | -------------------------------------------------------------------------------- /ch08-customizing-git.asc: -------------------------------------------------------------------------------- 1 | [[ch08-customizing-git]] 2 | == Настройка Git 3 | 4 | До этого момента мы описывали основы того, как Git работает и как его использовать, а так же мы познакомились с некоторыми инструментами Git, которые делают его использование простым и эффективным. 5 | В этой главе мы рассмотрим некоторые настройки Git и систему хуков, что позволяет настроить поведение Git. 6 | Таким образом, вы сможете заставить Git работать именно так как нужно вам или вашей компании. 7 | 8 | include::book/08-customizing-git/sections/config.asc[] 9 | 10 | include::book/08-customizing-git/sections/attributes.asc[] 11 | 12 | include::book/08-customizing-git/sections/hooks.asc[] 13 | 14 | include::book/08-customizing-git/sections/policy.asc[] 15 | 16 | === Заключение 17 | 18 | Мы рассмотрели большинство основных способов настройки клиента и сервера Git с тем, чтобы он был максимально соответствовал вашим рабочим процессам и проектам. 19 | Мы узнали о всевозможных настройках, атрибутах файлов и о перехватчиках событий, а также рассмотрели пример настройки сервера с соблюдением политики. 20 | Теперь вам должно быть по плечу заставить Git подстроиться под практически любой тип рабочего процесса, который только можно вообразить. 21 | -------------------------------------------------------------------------------- /ch09-git-and-other-systems.asc: -------------------------------------------------------------------------------- 1 | [[ch09-git-and-other-systems]] 2 | == Git и другие системы контроля версий 3 | 4 | Наш мир несовершенен. 5 | Как правило, вы не можете быстро перевести свой проект на использование Git. 6 | Иногда вам придётся иметь дело с проектами, использующими другую систему контроля версий, хотя вам и не нравится, что это не Git. 7 | В первой части этого раздела вы узнаете о способах использования Git в качестве клиента для работы с проектом, размещённом в другой системе контроля версий. 8 | 9 | В какой-то момент, вы, возможно, захотите перевести свой существующий проект на Git. 10 | Во второй части главы вы узнаете о том, как провести миграцию в Git из некоторых специфических систем, а также познакомитесь с методом, который будет работать в нестандартных ситуациях, когда готовых инструментов миграции не существует. 11 | 12 | === Git как клиент 13 | 14 | (((Git как клиент))) 15 | Git оказывает настолько положительное впечатление на разработчиков, что многие из них придумывают способы, как использовать его на своём компьютере, в случае если остальная часть команды использует другую систему контроля версий. 16 | Для этого разработан целый ряд специальных адаптеров, называемых «мостами» («bridges»). 17 | Здесь мы рассмотрим те, с которыми вы, скорее всего, столкнётесь при работе над реальными проектами. 18 | 19 | include::book/09-git-and-other-scms/sections/client-svn.asc[] 20 | 21 | include::book/09-git-and-other-scms/sections/client-hg.asc[] 22 | 23 | include::book/09-git-and-other-scms/sections/client-bzr.asc[] 24 | 25 | include::book/09-git-and-other-scms/sections/client-p4.asc[] 26 | 27 | [[r_migrating]] 28 | === Переход на Git 29 | 30 | (((переход на Git))) 31 | Если у вас уже есть кодовая база в другой системе контроля версий, но вы решили начать использовать Git, вам необходимо перенести проект тем или иным способом. 32 | В этом разделе описаны некоторые существующие варианты импорта для распространённых систем, а затем показано, как разрабатывать собственные нестандартные варианты импорта. 33 | Вы узнаете, как импортировать данные из некоторых основных профессионально используемых систем контроля версий, так как они используются большинством разработчиков, желающих переключиться на использование Git, а так же для них легко найти качественные инструменты миграции. 34 | 35 | include::book/09-git-and-other-scms/sections/import-svn.asc[] 36 | 37 | include::book/09-git-and-other-scms/sections/import-hg.asc[] 38 | 39 | include::book/09-git-and-other-scms/sections/import-bzr.asc[] 40 | 41 | include::book/09-git-and-other-scms/sections/import-p4.asc[] 42 | 43 | include::book/09-git-and-other-scms/sections/import-custom.asc[] 44 | 45 | === Заключение 46 | 47 | После всего вышесказанного вы должны чувствовать себя уверенно, используя Git как клиент для других систем контроля версий или импортируя практически любой существующий репозиторий в Git без потери данных. 48 | Следующая глава раскроет перед вами внутреннюю механику Git, так что вы будете способны контролировать каждый байт данных, если это потребуется. 49 | -------------------------------------------------------------------------------- /ch10-git-internals.asc: -------------------------------------------------------------------------------- 1 | [[ch10-git-internals]] 2 | == Git изнутри 3 | 4 | Вы могли прочитать почти всю книгу перед тем, как приступить к этой главе, а могли только часть -- в любом случае в данной главе рассматриваются внутренние процессы Git и особенности его реализации. 5 | На наш взгляд, изучение этого материала является основой понимания того, насколько Git полезный и мощный инструмент, однако, некоторые утверждают, что изложение этого материала может сбить новичков с толку и оказаться для них неоправданно сложным. 6 | Именно поэтому глава отнесена в самый конец книги, так что вы можете начать читать её раньше или позже по ходу обучения. 7 | Мы оставляем выбор за вами. 8 | 9 | Раз уж вы тут, приступим. 10 | Во-первых, напомню, что Git -- это, по сути, контентно-адресуемая файловая система с пользовательским интерфейсом системы контроля версий поверх неё. 11 | Довольно скоро станет понятнее, что это значит. 12 | 13 | На заре развития Git (примерно до версии 1.5) интерфейс был значительно сложнее, поскольку был больше похож на интерфейс доступа к файловой системе, чем на законченную систему контроля версий. 14 | За последние годы, интерфейс значительно очищен и упрощён до уровня аналогов; тем не менее, сохраняется стереотип о том, что интерфейс у Git чересчур сложен и труден для изучения. 15 | 16 | Контентно-адресуемая файловая система -- основа Git, невероятно крута, именно её мы рассмотрим в этой главе в первую очередь; затем вы узнаете о транспортных механизмах и инструментах обслуживания репозитория, с которыми возможно вам придётся столкнуться. 17 | 18 | include::book/10-git-internals/sections/plumbing-porcelain.asc[] 19 | 20 | include::book/10-git-internals/sections/objects.asc[] 21 | 22 | include::book/10-git-internals/sections/refs.asc[] 23 | 24 | include::book/10-git-internals/sections/packfiles.asc[] 25 | 26 | include::book/10-git-internals/sections/refspec.asc[] 27 | 28 | include::book/10-git-internals/sections/transfer-protocols.asc[] 29 | 30 | include::book/10-git-internals/sections/maintenance.asc[] 31 | 32 | include::book/10-git-internals/sections/environment.asc[] 33 | 34 | === Заключение 35 | 36 | Теперь вы довольно хорошо понимаете, что Git делает за кулисами и, в некоторой степени, как он устроен. 37 | В данной главе мы рассмотрели несколько служебных команд -- более низкоуровневых и простых, чем обычные пользовательские команды, описанные в остальной части книги. 38 | Понимание принципов работы Git на более низком уровне поможет вам лучше понять его работу в целом и даст возможность написать собственные утилиты и сценарии для организации специфического процесса работы с Git. 39 | 40 | Git как контентно-адресуемая файловая система -- очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий. 41 | Надеемся, полученное знание внутренней реализации Git поможет вам написать своё крутое приложение, использующее эти технологии, и позволит вам чувствовать себя свободнее с Git даже в продвинутых вещах. 42 | -------------------------------------------------------------------------------- /images/2fa-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/2fa-1.png -------------------------------------------------------------------------------- /images/account-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/account-settings.png -------------------------------------------------------------------------------- /images/advance-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/advance-master.png -------------------------------------------------------------------------------- /images/advance-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/advance-testing.png -------------------------------------------------------------------------------- /images/advance-testing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/advance-testing 9 | 10 | 11 | 12 | images/advance-testing 13 | Created with Sketch. 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | master 23 | 24 | 25 | 26 | 27 | f30ab 28 | 29 | 30 | 31 | 87ab2 32 | 33 | 34 | 35 | 34ac2 36 | 37 | 38 | 39 | 98ca9 40 | 41 | 42 | 43 | 44 | 45 | testing 46 | 47 | 48 | 49 | 50 | HEAD 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/areas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/areas.png -------------------------------------------------------------------------------- /images/avatar-crop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/avatar-crop.png -------------------------------------------------------------------------------- /images/basic-branching-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-1.png -------------------------------------------------------------------------------- /images/basic-branching-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/basic-branching-1 9 | 10 | 11 | 12 | 13 | images/basic-branching-1 14 | Created with Sketch. 15 | 16 | 17 | C0 18 | 19 | 20 | 21 | 22 | 23 | C1 24 | 25 | 26 | 27 | C2 28 | 29 | 30 | 31 | 32 | 33 | master 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /images/basic-branching-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-2.png -------------------------------------------------------------------------------- /images/basic-branching-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/basic-branching-2 9 | 10 | 11 | 12 | 13 | images/basic-branching-2 14 | Created with Sketch. 15 | 16 | 17 | 18 | C0 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | C1 27 | 28 | 29 | 30 | C2 31 | 32 | 33 | 34 | master 35 | 36 | 37 | 38 | iss53 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /images/basic-branching-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-3.png -------------------------------------------------------------------------------- /images/basic-branching-3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/basic-branching-3 9 | 10 | 11 | 12 | 13 | images/basic-branching-3 14 | Created with Sketch. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | C0 24 | 25 | 26 | 27 | C1 28 | 29 | 30 | 31 | C2 32 | 33 | 34 | 35 | C3 36 | 37 | 38 | 39 | 40 | master 41 | 42 | 43 | 44 | 45 | 46 | iss53 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /images/basic-branching-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-4.png -------------------------------------------------------------------------------- /images/basic-branching-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-5.png -------------------------------------------------------------------------------- /images/basic-branching-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-branching-6.png -------------------------------------------------------------------------------- /images/basic-merging-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-merging-1.png -------------------------------------------------------------------------------- /images/basic-merging-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-merging-2.png -------------------------------------------------------------------------------- /images/basic-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-rebase-1.png -------------------------------------------------------------------------------- /images/basic-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-rebase-2.png -------------------------------------------------------------------------------- /images/basic-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-rebase-3.png -------------------------------------------------------------------------------- /images/basic-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/basic-rebase-4.png -------------------------------------------------------------------------------- /images/benevolent-dictator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/benevolent-dictator.png -------------------------------------------------------------------------------- /images/bitnami.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/bitnami.png -------------------------------------------------------------------------------- /images/blink-01-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-01-start.png -------------------------------------------------------------------------------- /images/blink-02-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-02-pr.png -------------------------------------------------------------------------------- /images/blink-03-pull-request-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-03-pull-request-open.png -------------------------------------------------------------------------------- /images/blink-04-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-04-email.png -------------------------------------------------------------------------------- /images/blink-04-pr-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-04-pr-comment.png -------------------------------------------------------------------------------- /images/blink-05-general-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-05-general-comment.png -------------------------------------------------------------------------------- /images/blink-06-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-06-final.png -------------------------------------------------------------------------------- /images/blink-pull-request-open copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-pull-request-open copy.png -------------------------------------------------------------------------------- /images/blink-pull-request-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/blink-pull-request-open.png -------------------------------------------------------------------------------- /images/branch-and-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/branch-and-history.png -------------------------------------------------------------------------------- /images/branch_widget_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/branch_widget_mac.png -------------------------------------------------------------------------------- /images/branch_widget_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/branch_widget_win.png -------------------------------------------------------------------------------- /images/centralized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/centralized.png -------------------------------------------------------------------------------- /images/centralized_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/centralized_workflow.png -------------------------------------------------------------------------------- /images/checkout-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/checkout-master.png -------------------------------------------------------------------------------- /images/checkout-master.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/checkout-master 9 | 10 | 11 | 12 | 13 | images/checkout-master 14 | Created with Sketch. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | master 24 | 25 | 26 | 27 | f30ab 28 | 29 | 30 | 31 | 87ab2 32 | 33 | 34 | 35 | 34ac2 36 | 37 | 38 | 39 | 98ca9 40 | 41 | 42 | 43 | 44 | testing 45 | 46 | 47 | 48 | 49 | HEAD 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/clean.png -------------------------------------------------------------------------------- /images/collaborators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/collaborators.png -------------------------------------------------------------------------------- /images/commit-and-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/commit-and-tree.png -------------------------------------------------------------------------------- /images/commits-and-parents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/commits-and-parents.png -------------------------------------------------------------------------------- /images/data-model-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/data-model-1.png -------------------------------------------------------------------------------- /images/data-model-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/data-model-2.png -------------------------------------------------------------------------------- /images/data-model-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/data-model-3.png -------------------------------------------------------------------------------- /images/data-model-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/data-model-4.png -------------------------------------------------------------------------------- /images/deltas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/deltas.png -------------------------------------------------------------------------------- /images/distributed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/distributed.png -------------------------------------------------------------------------------- /images/double-dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/double-dot.png -------------------------------------------------------------------------------- /images/egit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/egit.png -------------------------------------------------------------------------------- /images/email-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/email-settings.png -------------------------------------------------------------------------------- /images/emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/emoji.png -------------------------------------------------------------------------------- /images/forkbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/forkbutton.png -------------------------------------------------------------------------------- /images/git-bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-bash.png -------------------------------------------------------------------------------- /images/git-diff-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-diff-check.png -------------------------------------------------------------------------------- /images/git-fusion-boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-fusion-boot.png -------------------------------------------------------------------------------- /images/git-fusion-perforce-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-fusion-perforce-graph.png -------------------------------------------------------------------------------- /images/git-gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-gui.png -------------------------------------------------------------------------------- /images/git-instaweb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-instaweb.png -------------------------------------------------------------------------------- /images/git-osx-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/git-osx-installer.png -------------------------------------------------------------------------------- /images/github_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/github_mac.png -------------------------------------------------------------------------------- /images/github_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/github_win.png -------------------------------------------------------------------------------- /images/gitk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/gitk.png -------------------------------------------------------------------------------- /images/gitlab-broadcast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/gitlab-broadcast.png -------------------------------------------------------------------------------- /images/gitlab-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/gitlab-groups.png -------------------------------------------------------------------------------- /images/gitlab-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/gitlab-menu.png -------------------------------------------------------------------------------- /images/gitlab-users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/gitlab-users.png -------------------------------------------------------------------------------- /images/head-to-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/head-to-master.png -------------------------------------------------------------------------------- /images/head-to-master.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/head-to-master 9 | 10 | 11 | 12 | 13 | images/head-to-master 14 | Created with Sketch. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | master 24 | 25 | 26 | 27 | testing 28 | 29 | 30 | 31 | f30ab 32 | 33 | 34 | 35 | 34ac2 36 | 37 | 38 | 39 | 98ca9 40 | 41 | 42 | 43 | HEAD 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /images/head-to-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/head-to-testing.png -------------------------------------------------------------------------------- /images/head-to-testing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/head-to-testing 9 | 10 | 11 | 12 | 13 | images/head-to-testing 14 | Created with Sketch. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | master 23 | 24 | 25 | 26 | testing 27 | 28 | 29 | 30 | f30ab 31 | 32 | 33 | 34 | 34ac2 35 | 36 | 37 | 38 | 98ca9 39 | 40 | 41 | 42 | 43 | HEAD 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /images/hubot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/hubot.png -------------------------------------------------------------------------------- /images/integration-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/integration-manager.png -------------------------------------------------------------------------------- /images/interesting-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/interesting-rebase-1.png -------------------------------------------------------------------------------- /images/interesting-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/interesting-rebase-2.png -------------------------------------------------------------------------------- /images/interesting-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/interesting-rebase-3.png -------------------------------------------------------------------------------- /images/interesting-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/interesting-rebase-4.png -------------------------------------------------------------------------------- /images/interesting-rebase-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/interesting-rebase-5.png -------------------------------------------------------------------------------- /images/jb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/jb.png -------------------------------------------------------------------------------- /images/large-merges-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/large-merges-1.png -------------------------------------------------------------------------------- /images/large-merges-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/large-merges-2.png -------------------------------------------------------------------------------- /images/lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/lifecycle.png -------------------------------------------------------------------------------- /images/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/local.png -------------------------------------------------------------------------------- /images/local.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/local 9 | 10 | 11 | 12 | images/local 13 | Created with Sketch. 14 | 15 | 16 | 17 | Local Computer 18 | 19 | Version Database 20 | Checkout 21 | 22 | 23 | File 24 | 25 | 26 | 27 | Version 3 28 | 29 | 30 | 31 | Version 2 32 | 33 | 34 | 35 | Version 1 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /images/lr-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/lr-branches-1.png -------------------------------------------------------------------------------- /images/lr-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/lr-branches-2.png -------------------------------------------------------------------------------- /images/maint-01-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-01-email.png -------------------------------------------------------------------------------- /images/maint-02-merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-02-merge.png -------------------------------------------------------------------------------- /images/maint-03-email-resp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-03-email-resp.png -------------------------------------------------------------------------------- /images/maint-04-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-04-target.png -------------------------------------------------------------------------------- /images/maint-05-mentions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-05-mentions.png -------------------------------------------------------------------------------- /images/maint-06-unsubscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-06-unsubscribe.png -------------------------------------------------------------------------------- /images/maint-07-notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-07-notifications.png -------------------------------------------------------------------------------- /images/maint-08-notifications-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-08-notifications-page.png -------------------------------------------------------------------------------- /images/maint-09-contrib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-09-contrib.png -------------------------------------------------------------------------------- /images/maint-10-default-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-10-default-branch.png -------------------------------------------------------------------------------- /images/maint-11-transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/maint-11-transfer.png -------------------------------------------------------------------------------- /images/managed-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/managed-team-1.png -------------------------------------------------------------------------------- /images/managed-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/managed-team-2.png -------------------------------------------------------------------------------- /images/managed-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/managed-team-3.png -------------------------------------------------------------------------------- /images/managed-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/managed-team-flow.png -------------------------------------------------------------------------------- /images/markdown-01-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-01-example.png -------------------------------------------------------------------------------- /images/markdown-02-tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-02-tasks.png -------------------------------------------------------------------------------- /images/markdown-03-task-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-03-task-summary.png -------------------------------------------------------------------------------- /images/markdown-04-fenced-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-04-fenced-code.png -------------------------------------------------------------------------------- /images/markdown-05-quote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-05-quote.png -------------------------------------------------------------------------------- /images/markdown-06-emoji-complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-06-emoji-complete.png -------------------------------------------------------------------------------- /images/markdown-07-emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-07-emoji.png -------------------------------------------------------------------------------- /images/markdown-08-drag-drop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/markdown-08-drag-drop.png -------------------------------------------------------------------------------- /images/mentions-01-syntax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/mentions-01-syntax.png -------------------------------------------------------------------------------- /images/mentions-02-render.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/mentions-02-render.png -------------------------------------------------------------------------------- /images/mentions-03-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/mentions-03-closed.png -------------------------------------------------------------------------------- /images/merging-workflows-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/merging-workflows-1.png -------------------------------------------------------------------------------- /images/merging-workflows-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/merging-workflows-2.png -------------------------------------------------------------------------------- /images/merging-workflows-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/merging-workflows-3.png -------------------------------------------------------------------------------- /images/merging-workflows-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/merging-workflows-4.png -------------------------------------------------------------------------------- /images/merging-workflows-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/merging-workflows-5.png -------------------------------------------------------------------------------- /images/new-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/new-repo.png -------------------------------------------------------------------------------- /images/neworg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/neworg.png -------------------------------------------------------------------------------- /images/newrepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/newrepo.png -------------------------------------------------------------------------------- /images/newrepoform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/newrepoform.png -------------------------------------------------------------------------------- /images/notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/notifications.png -------------------------------------------------------------------------------- /images/orgs-01-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/orgs-01-page.png -------------------------------------------------------------------------------- /images/orgs-02-teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/orgs-02-teams.png -------------------------------------------------------------------------------- /images/orgs-03-audit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/orgs-03-audit.png -------------------------------------------------------------------------------- /images/p4merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/p4merge.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/perils-of-rebasing-1.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/perils-of-rebasing-2.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/perils-of-rebasing-3.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/perils-of-rebasing-4.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/perils-of-rebasing-5.png -------------------------------------------------------------------------------- /images/posh-git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/posh-git.png -------------------------------------------------------------------------------- /images/pr-01-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/pr-01-fail.png -------------------------------------------------------------------------------- /images/pr-02-merge-fix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/pr-02-merge-fix.png -------------------------------------------------------------------------------- /images/public-small-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/public-small-1.png -------------------------------------------------------------------------------- /images/public-small-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/public-small-2.png -------------------------------------------------------------------------------- /images/public-small-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/public-small-3.png -------------------------------------------------------------------------------- /images/rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/rebasing-1.png -------------------------------------------------------------------------------- /images/rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/rebasing-2.png -------------------------------------------------------------------------------- /images/remote-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/remote-branches-1.png -------------------------------------------------------------------------------- /images/remote-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/remote-branches-2.png -------------------------------------------------------------------------------- /images/remote-branches-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/remote-branches-3.png -------------------------------------------------------------------------------- /images/remote-branches-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/remote-branches-4.png -------------------------------------------------------------------------------- /images/remote-branches-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/remote-branches-5.png -------------------------------------------------------------------------------- /images/replace1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/replace1.png -------------------------------------------------------------------------------- /images/replace2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/replace2.png -------------------------------------------------------------------------------- /images/replace3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/replace3.png -------------------------------------------------------------------------------- /images/replace4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/replace4.png -------------------------------------------------------------------------------- /images/replace5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/replace5.png -------------------------------------------------------------------------------- /images/reposettingslink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reposettingslink.png -------------------------------------------------------------------------------- /images/rerere1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/rerere1.png -------------------------------------------------------------------------------- /images/rerere2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/rerere2.png -------------------------------------------------------------------------------- /images/rerere3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/rerere3.png -------------------------------------------------------------------------------- /images/reset-checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-checkout.png -------------------------------------------------------------------------------- /images/reset-ex1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex1.png -------------------------------------------------------------------------------- /images/reset-ex2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex2.png -------------------------------------------------------------------------------- /images/reset-ex3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex3.png -------------------------------------------------------------------------------- /images/reset-ex4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex4.png -------------------------------------------------------------------------------- /images/reset-ex5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex5.png -------------------------------------------------------------------------------- /images/reset-ex6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-ex6.png -------------------------------------------------------------------------------- /images/reset-hard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-hard.png -------------------------------------------------------------------------------- /images/reset-mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-mixed.png -------------------------------------------------------------------------------- /images/reset-path1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-path1.png -------------------------------------------------------------------------------- /images/reset-path2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-path2.png -------------------------------------------------------------------------------- /images/reset-path3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-path3.png -------------------------------------------------------------------------------- /images/reset-soft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-soft.png -------------------------------------------------------------------------------- /images/reset-squash-r1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-squash-r1.png -------------------------------------------------------------------------------- /images/reset-squash-r2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-squash-r2.png -------------------------------------------------------------------------------- /images/reset-squash-r3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-squash-r3.png -------------------------------------------------------------------------------- /images/reset-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-start.png -------------------------------------------------------------------------------- /images/reset-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/reset-workflow.png -------------------------------------------------------------------------------- /images/scripting-01-services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-01-services.png -------------------------------------------------------------------------------- /images/scripting-02-email-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-02-email-service.png -------------------------------------------------------------------------------- /images/scripting-03-webhook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-03-webhook.png -------------------------------------------------------------------------------- /images/scripting-04-webhook-debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-04-webhook-debug.png -------------------------------------------------------------------------------- /images/scripting-05-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-05-access-token.png -------------------------------------------------------------------------------- /images/scripting-06-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-06-comment.png -------------------------------------------------------------------------------- /images/scripting-07-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/scripting-07-status.png -------------------------------------------------------------------------------- /images/signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/signup.png -------------------------------------------------------------------------------- /images/small-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-1.png -------------------------------------------------------------------------------- /images/small-team-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/small-team-1 9 | 10 | 11 | 12 | 13 | images/small-team-1 14 | Created with Sketch. 15 | 16 | 17 | 18 | 4b078 19 | 20 | 21 | 22 | 23 | 24 | 1edee 25 | 26 | 27 | 28 | 29 | 30 | 31 | 738ee 32 | 33 | 34 | 35 | 36 | 37 | 38 | fbff5 39 | 40 | 41 | 42 | 43 | 44 | 45 | origin/master 46 | 47 | 48 | 49 | 50 | 51 | 52 | master 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /images/small-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-2.png -------------------------------------------------------------------------------- /images/small-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-3.png -------------------------------------------------------------------------------- /images/small-team-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-4.png -------------------------------------------------------------------------------- /images/small-team-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-5.png -------------------------------------------------------------------------------- /images/small-team-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-6.png -------------------------------------------------------------------------------- /images/small-team-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-7.png -------------------------------------------------------------------------------- /images/small-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/small-team-flow.png -------------------------------------------------------------------------------- /images/smudge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/smudge.png -------------------------------------------------------------------------------- /images/snapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/snapshots.png -------------------------------------------------------------------------------- /images/ssh-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/ssh-keys.png -------------------------------------------------------------------------------- /images/topic-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/topic-branches-1.png -------------------------------------------------------------------------------- /images/topic-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/topic-branches-2.png -------------------------------------------------------------------------------- /images/two-branches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/two-branches.png -------------------------------------------------------------------------------- /images/two-branches.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | images/two-branches 9 | 10 | 11 | 12 | 13 | images/two-branches 14 | Created with Sketch. 15 | 16 | 17 | 18 | 19 | 20 | master 21 | 22 | 23 | 24 | 25 | 26 | 27 | testing 28 | 29 | 30 | 31 | 32 | 33 | 34 | f30ab 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 34ac2 44 | 45 | 46 | 47 | 48 | 98ca9 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /images/undomerge-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/undomerge-reset.png -------------------------------------------------------------------------------- /images/undomerge-revert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/undomerge-revert.png -------------------------------------------------------------------------------- /images/undomerge-revert2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/undomerge-revert2.png -------------------------------------------------------------------------------- /images/undomerge-revert3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/undomerge-revert3.png -------------------------------------------------------------------------------- /images/undomerge-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/undomerge-start.png -------------------------------------------------------------------------------- /images/vs-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/vs-1.png -------------------------------------------------------------------------------- /images/vs-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/vs-2.png -------------------------------------------------------------------------------- /images/your-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/your-profile.png -------------------------------------------------------------------------------- /images/zsh-oh-my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/zsh-oh-my.png -------------------------------------------------------------------------------- /images/zsh-prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-ru/79a75ed52f39247873bf2d8ffd7ed08706487755/images/zsh-prompt.png -------------------------------------------------------------------------------- /index.asc: -------------------------------------------------------------------------------- 1 | [#index] 2 | [index] 3 | == Индекс 4 | -------------------------------------------------------------------------------- /progit.asc: -------------------------------------------------------------------------------- 1 | = Pro Git 2 | Scott Chacon; Ben Straub 3 | include::attributes.asc[] 4 | 5 | include::book/license.asc[] 6 | 7 | include::book/preface_schacon.asc[] 8 | 9 | include::book/preface_ben.asc[] 10 | 11 | include::book/dedication.asc[] 12 | 13 | include::book/contributors.asc[] 14 | 15 | include::book/introduction.asc[] 16 | 17 | include::ch01-getting-started.asc[] 18 | 19 | include::ch02-git-basics-chapter.asc[] 20 | 21 | include::ch03-git-branching.asc[] 22 | 23 | include::ch04-git-on-the-server.asc[] 24 | 25 | include::ch05-distributed-git.asc[] 26 | 27 | include::ch06-github.asc[] 28 | 29 | include::ch07-git-tools.asc[] 30 | 31 | include::ch08-customizing-git.asc[] 32 | 33 | include::ch09-git-and-other-systems.asc[] 34 | 35 | include::ch10-git-internals.asc[] 36 | 37 | include::A-git-in-other-environments.asc[] 38 | 39 | include::B-embedding-git-in-your-applications.asc[] 40 | 41 | include::C-git-commands.asc[] 42 | 43 | ifdef::backend-pdf[include::index.asc[]] 44 | -------------------------------------------------------------------------------- /theme/epub/epub.xsl: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /theme/epub/layout.html: -------------------------------------------------------------------------------- 1 | {{ doctype }} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {{ title }} 10 | 11 | 12 | {{ content }} 13 | 14 | 15 | -------------------------------------------------------------------------------- /theme/html/html.xsl: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /theme/mobi/mobi.xsl: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /theme/pdf/pdf.xsl: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /theme/pdf/pdf.xsl~: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | --------------------------------------------------------------------------------