├── book ├── index.asc ├── toc.asc ├── cover.png ├── license.asc ├── cover.html ├── 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 │ │ └── 4-managing-organization.asc ├── 07-git-tools │ ├── callouts │ │ ├── 1.pdf │ │ ├── 1.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 │ │ ├── 10.pdf │ │ └── 10.png │ └── git-credential-read-only ├── B-embedding-git │ ├── callouts │ │ ├── 1.pdf │ │ ├── 1.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 │ │ ├── 10.pdf │ │ └── 10.png │ └── sections │ │ ├── command-line.asc │ │ └── go-git.asc ├── dedication.asc ├── contributors.asc ├── A-git-in-other-environments │ └── sections │ │ ├── eclipse.asc │ │ ├── visualstudio.asc │ │ ├── bash.asc │ │ ├── zsh.asc │ │ └── powershell.asc ├── preface_ben.asc ├── 01-introduction │ └── sections │ │ ├── command-line.asc │ │ ├── history.asc │ │ ├── help.asc │ │ └── about-version-control.asc ├── 04-git-server │ └── sections │ │ ├── hosted.asc │ │ ├── generating-ssh-key.asc │ │ ├── gitweb.asc │ │ ├── smart-http.asc │ │ └── git-daemon.asc ├── 02-git-basics │ └── sections │ │ ├── aliases.asc │ │ └── getting-a-repository.asc ├── 10-git-internals │ └── sections │ │ └── plumbing-porcelain.asc ├── 09-git-and-other-scms │ └── sections │ │ ├── import-tfs.asc │ │ └── import-p4.asc ├── 03-git-branching │ └── sections │ │ ├── branch-management.asc │ │ └── workflows.asc ├── preface_schacon.asc └── introduction.asc ├── index.asc ├── Pro.ico ├── .mailmap ├── 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 ├── images ├── egit.png ├── gitk.png ├── vs-1.png ├── vs-2.png ├── 2fa-1.png ├── areas.png ├── clean.png ├── deltas.png ├── emoji.png ├── local.png ├── neworg.png ├── signup.png ├── smudge.png ├── bitnami.png ├── git-bash.png ├── git-gui.png ├── lifecycle.png ├── new-repo.png ├── newrepo.png ├── p4merge.png ├── posh-git.png ├── replace1.png ├── replace2.png ├── replace3.png ├── replace4.png ├── replace5.png ├── rerere1.png ├── rerere2.png ├── rerere3.png ├── reset-ex1.png ├── reset-ex2.png ├── reset-ex3.png ├── reset-ex4.png ├── reset-ex5.png ├── reset-ex6.png ├── snapshots.png ├── ssh-keys.png ├── zsh-oh-my.png ├── avatar-crop.png ├── blink-02-pr.png ├── centralized.png ├── distributed.png ├── double-dot.png ├── forkbutton.png ├── git-tfs-ct.png ├── github_mac.png ├── github_win.png ├── gitlab-menu.png ├── newrepoform.png ├── pr-01-fail.png ├── rebasing-1.png ├── rebasing-2.png ├── reset-hard.png ├── reset-mixed.png ├── reset-path1.png ├── reset-path2.png ├── reset-path3.png ├── reset-soft.png ├── reset-start.png ├── zsh-prompt.png ├── advance-master.png ├── basic-rebase-1.png ├── basic-rebase-2.png ├── basic-rebase-3.png ├── basic-rebase-4.png ├── blink-01-start.png ├── blink-04-email.png ├── blink-06-final.png ├── collaborators.png ├── data-model-1.png ├── data-model-2.png ├── data-model-3.png ├── data-model-4.png ├── email-settings.png ├── git-diff-check.png ├── git-instaweb.png ├── gitlab-groups.png ├── gitlab-users.png ├── head-to-master.png ├── large-merges-1.png ├── large-merges-2.png ├── lr-branches-1.png ├── lr-branches-2.png ├── maint-01-email.png ├── maint-02-merge.png ├── managed-team-1.png ├── managed-team-2.png ├── managed-team-3.png ├── notifications.png ├── orgs-01-page.png ├── orgs-02-teams.png ├── orgs-03-audit.png ├── public-small-1.png ├── public-small-2.png ├── public-small-3.png ├── reset-checkout.png ├── reset-workflow.png ├── small-team-1.png ├── small-team-2.png ├── small-team-3.png ├── small-team-4.png ├── small-team-5.png ├── small-team-6.png ├── small-team-7.png ├── two-branches.png ├── your-profile.png ├── account-settings.png ├── advance-testing.png ├── basic-merging-1.png ├── basic-merging-2.png ├── checkout-master.png ├── commit-and-tree.png ├── git-fusion-boot.png ├── head-to-testing.png ├── maint-04-target.png ├── maint-09-contrib.png ├── pr-02-merge-fix.png ├── reposettingslink.png ├── reset-squash-r1.png ├── reset-squash-r2.png ├── reset-squash-r3.png ├── small-team-flow.png ├── topic-branches-1.png ├── topic-branches-2.png ├── undomerge-reset.png ├── undomerge-revert.png ├── undomerge-start.png ├── basic-branching-1.png ├── basic-branching-2.png ├── basic-branching-3.png ├── basic-branching-4.png ├── basic-branching-5.png ├── basic-branching-6.png ├── benevolent-dictator.png ├── blink-04-pr-comment.png ├── branch-and-history.png ├── branch_widget_mac.png ├── branch_widget_win.png ├── commits-and-parents.png ├── git-osx-installer.png ├── integration-manager.png ├── maint-03-email-resp.png ├── maint-05-mentions.png ├── maint-11-transfer.png ├── managed-team-flow.png ├── markdown-01-example.png ├── markdown-02-tasks.png ├── markdown-05-quote.png ├── markdown-07-emoji.png ├── mentions-01-syntax.png ├── mentions-02-render.png ├── mentions-03-closed.png ├── merging-workflows-1.png ├── merging-workflows-2.png ├── merging-workflows-3.png ├── merging-workflows-4.png ├── merging-workflows-5.png ├── remote-branches-1.png ├── remote-branches-2.png ├── remote-branches-3.png ├── remote-branches-4.png ├── remote-branches-5.png ├── scripting-07-status.png ├── undomerge-revert2.png ├── undomerge-revert3.png ├── centralized_workflow.png ├── interesting-rebase-1.png ├── interesting-rebase-2.png ├── interesting-rebase-3.png ├── interesting-rebase-4.png ├── interesting-rebase-5.png ├── maint-06-unsubscribe.png ├── markdown-08-drag-drop.png ├── perils-of-rebasing-1.png ├── perils-of-rebasing-2.png ├── perils-of-rebasing-3.png ├── perils-of-rebasing-4.png ├── perils-of-rebasing-5.png ├── scripting-01-services.png ├── scripting-03-webhook.png ├── scripting-06-comment.png ├── blink-05-general-comment.png ├── maint-07-notifications.png ├── maint-10-default-branch.png ├── markdown-03-task-summary.png ├── markdown-04-fenced-code.png ├── blink-03-pull-request-open.png ├── git-fusion-perforce-graph.png ├── markdown-06-emoji-complete.png ├── scripting-02-email-service.png ├── scripting-04-webhook-debug.png ├── scripting-05-access-token.png └── maint-08-notifications-page.png ├── diagram-source └── progit.sketch ├── CONTRIBUTING.md ├── .tgitconfig ├── .gitignore ├── LICENSE.asc ├── Gemfile ├── .github └── workflows │ ├── pr-build.yml │ └── release-on-merge.yml ├── theme ├── epub │ ├── layout.html │ ├── epub.xsl │ └── epub.css ├── html │ ├── html.xsl │ └── html.css ├── mobi │ ├── mobi.xsl │ └── mobi.css └── pdf │ └── pdf.xsl ├── script └── tag_on_master ├── .travis.yml ├── B-embedding-git-in-your-applications.asc ├── update-plan └── plan.adoc ├── progit.asc ├── ch01-getting-started.asc ├── ch08-customizing-git.asc ├── ch05-distributed-git.asc ├── A-git-in-other-environments.asc ├── ch02-git-basics-chapter.asc ├── ch03-git-branching.asc ├── ch07-git-tools.asc ├── ch06-github.asc ├── README.asc ├── atlas.json ├── ch10-git-internals.asc ├── ch09-git-and-other-systems.asc ├── ch04-git-on-the-server.asc ├── status.json └── Rakefile /book/index.asc: -------------------------------------------------------------------------------- 1 | == Index 2 | -------------------------------------------------------------------------------- /book/toc.asc: -------------------------------------------------------------------------------- 1 | {{ toc }} 2 | -------------------------------------------------------------------------------- /index.asc: -------------------------------------------------------------------------------- 1 | [#index] 2 | [index] 3 | = Index 4 | -------------------------------------------------------------------------------- /Pro.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/Pro.ico -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Jean-Noël Avila 2 | Scott Chacon -------------------------------------------------------------------------------- /book/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/cover.png -------------------------------------------------------------------------------- /book/license.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Licence 3 | 4 | include::../LICENSE.asc[] 5 | -------------------------------------------------------------------------------- /callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/1.pdf -------------------------------------------------------------------------------- /callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/1.png -------------------------------------------------------------------------------- /callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/10.pdf -------------------------------------------------------------------------------- /callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/10.png -------------------------------------------------------------------------------- /callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/2.pdf -------------------------------------------------------------------------------- /callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/2.png -------------------------------------------------------------------------------- /callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/3.pdf -------------------------------------------------------------------------------- /callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/3.png -------------------------------------------------------------------------------- /callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/4.pdf -------------------------------------------------------------------------------- /callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/4.png -------------------------------------------------------------------------------- /callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/5.pdf -------------------------------------------------------------------------------- /callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/5.png -------------------------------------------------------------------------------- /callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/6.pdf -------------------------------------------------------------------------------- /callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/6.png -------------------------------------------------------------------------------- /callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/7.pdf -------------------------------------------------------------------------------- /callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/7.png -------------------------------------------------------------------------------- /callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/8.pdf -------------------------------------------------------------------------------- /callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/8.png -------------------------------------------------------------------------------- /callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/9.pdf -------------------------------------------------------------------------------- /callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/callouts/9.png -------------------------------------------------------------------------------- /images/egit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/egit.png -------------------------------------------------------------------------------- /images/gitk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/gitk.png -------------------------------------------------------------------------------- /images/vs-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/vs-1.png -------------------------------------------------------------------------------- /images/vs-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/vs-2.png -------------------------------------------------------------------------------- /images/2fa-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/2fa-1.png -------------------------------------------------------------------------------- /images/areas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/areas.png -------------------------------------------------------------------------------- /images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/clean.png -------------------------------------------------------------------------------- /images/deltas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/deltas.png -------------------------------------------------------------------------------- /images/emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/emoji.png -------------------------------------------------------------------------------- /images/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/local.png -------------------------------------------------------------------------------- /images/neworg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/neworg.png -------------------------------------------------------------------------------- /images/signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/signup.png -------------------------------------------------------------------------------- /images/smudge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/smudge.png -------------------------------------------------------------------------------- /book/cover.html: -------------------------------------------------------------------------------- 1 |
cover
2 | -------------------------------------------------------------------------------- /images/bitnami.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/bitnami.png -------------------------------------------------------------------------------- /images/git-bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-bash.png -------------------------------------------------------------------------------- /images/git-gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-gui.png -------------------------------------------------------------------------------- /images/lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/lifecycle.png -------------------------------------------------------------------------------- /images/new-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/new-repo.png -------------------------------------------------------------------------------- /images/newrepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/newrepo.png -------------------------------------------------------------------------------- /images/p4merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/p4merge.png -------------------------------------------------------------------------------- /images/posh-git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/posh-git.png -------------------------------------------------------------------------------- /images/replace1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/replace1.png -------------------------------------------------------------------------------- /images/replace2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/replace2.png -------------------------------------------------------------------------------- /images/replace3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/replace3.png -------------------------------------------------------------------------------- /images/replace4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/replace4.png -------------------------------------------------------------------------------- /images/replace5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/replace5.png -------------------------------------------------------------------------------- /images/rerere1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/rerere1.png -------------------------------------------------------------------------------- /images/rerere2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/rerere2.png -------------------------------------------------------------------------------- /images/rerere3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/rerere3.png -------------------------------------------------------------------------------- /images/reset-ex1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex1.png -------------------------------------------------------------------------------- /images/reset-ex2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex2.png -------------------------------------------------------------------------------- /images/reset-ex3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex3.png -------------------------------------------------------------------------------- /images/reset-ex4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex4.png -------------------------------------------------------------------------------- /images/reset-ex5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex5.png -------------------------------------------------------------------------------- /images/reset-ex6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-ex6.png -------------------------------------------------------------------------------- /images/snapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/snapshots.png -------------------------------------------------------------------------------- /images/ssh-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/ssh-keys.png -------------------------------------------------------------------------------- /images/zsh-oh-my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/zsh-oh-my.png -------------------------------------------------------------------------------- /images/avatar-crop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/avatar-crop.png -------------------------------------------------------------------------------- /images/blink-02-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-02-pr.png -------------------------------------------------------------------------------- /images/centralized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/centralized.png -------------------------------------------------------------------------------- /images/distributed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/distributed.png -------------------------------------------------------------------------------- /images/double-dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/double-dot.png -------------------------------------------------------------------------------- /images/forkbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/forkbutton.png -------------------------------------------------------------------------------- /images/git-tfs-ct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-tfs-ct.png -------------------------------------------------------------------------------- /images/github_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/github_mac.png -------------------------------------------------------------------------------- /images/github_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/github_win.png -------------------------------------------------------------------------------- /images/gitlab-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/gitlab-menu.png -------------------------------------------------------------------------------- /images/newrepoform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/newrepoform.png -------------------------------------------------------------------------------- /images/pr-01-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/pr-01-fail.png -------------------------------------------------------------------------------- /images/rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/rebasing-1.png -------------------------------------------------------------------------------- /images/rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/rebasing-2.png -------------------------------------------------------------------------------- /images/reset-hard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-hard.png -------------------------------------------------------------------------------- /images/reset-mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-mixed.png -------------------------------------------------------------------------------- /images/reset-path1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-path1.png -------------------------------------------------------------------------------- /images/reset-path2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-path2.png -------------------------------------------------------------------------------- /images/reset-path3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-path3.png -------------------------------------------------------------------------------- /images/reset-soft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-soft.png -------------------------------------------------------------------------------- /images/reset-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-start.png -------------------------------------------------------------------------------- /images/zsh-prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/zsh-prompt.png -------------------------------------------------------------------------------- /images/advance-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/advance-master.png -------------------------------------------------------------------------------- /images/basic-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-rebase-1.png -------------------------------------------------------------------------------- /images/basic-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-rebase-2.png -------------------------------------------------------------------------------- /images/basic-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-rebase-3.png -------------------------------------------------------------------------------- /images/basic-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-rebase-4.png -------------------------------------------------------------------------------- /images/blink-01-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-01-start.png -------------------------------------------------------------------------------- /images/blink-04-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-04-email.png -------------------------------------------------------------------------------- /images/blink-06-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-06-final.png -------------------------------------------------------------------------------- /images/collaborators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/collaborators.png -------------------------------------------------------------------------------- /images/data-model-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/data-model-1.png -------------------------------------------------------------------------------- /images/data-model-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/data-model-2.png -------------------------------------------------------------------------------- /images/data-model-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/data-model-3.png -------------------------------------------------------------------------------- /images/data-model-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/data-model-4.png -------------------------------------------------------------------------------- /images/email-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/email-settings.png -------------------------------------------------------------------------------- /images/git-diff-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-diff-check.png -------------------------------------------------------------------------------- /images/git-instaweb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-instaweb.png -------------------------------------------------------------------------------- /images/gitlab-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/gitlab-groups.png -------------------------------------------------------------------------------- /images/gitlab-users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/gitlab-users.png -------------------------------------------------------------------------------- /images/head-to-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/head-to-master.png -------------------------------------------------------------------------------- /images/large-merges-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/large-merges-1.png -------------------------------------------------------------------------------- /images/large-merges-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/large-merges-2.png -------------------------------------------------------------------------------- /images/lr-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/lr-branches-1.png -------------------------------------------------------------------------------- /images/lr-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/lr-branches-2.png -------------------------------------------------------------------------------- /images/maint-01-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-01-email.png -------------------------------------------------------------------------------- /images/maint-02-merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-02-merge.png -------------------------------------------------------------------------------- /images/managed-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/managed-team-1.png -------------------------------------------------------------------------------- /images/managed-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/managed-team-2.png -------------------------------------------------------------------------------- /images/managed-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/managed-team-3.png -------------------------------------------------------------------------------- /images/notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/notifications.png -------------------------------------------------------------------------------- /images/orgs-01-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/orgs-01-page.png -------------------------------------------------------------------------------- /images/orgs-02-teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/orgs-02-teams.png -------------------------------------------------------------------------------- /images/orgs-03-audit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/orgs-03-audit.png -------------------------------------------------------------------------------- /images/public-small-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/public-small-1.png -------------------------------------------------------------------------------- /images/public-small-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/public-small-2.png -------------------------------------------------------------------------------- /images/public-small-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/public-small-3.png -------------------------------------------------------------------------------- /images/reset-checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-checkout.png -------------------------------------------------------------------------------- /images/reset-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-workflow.png -------------------------------------------------------------------------------- /images/small-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-1.png -------------------------------------------------------------------------------- /images/small-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-2.png -------------------------------------------------------------------------------- /images/small-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-3.png -------------------------------------------------------------------------------- /images/small-team-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-4.png -------------------------------------------------------------------------------- /images/small-team-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-5.png -------------------------------------------------------------------------------- /images/small-team-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-6.png -------------------------------------------------------------------------------- /images/small-team-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-7.png -------------------------------------------------------------------------------- /images/two-branches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/two-branches.png -------------------------------------------------------------------------------- /images/your-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/your-profile.png -------------------------------------------------------------------------------- /images/account-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/account-settings.png -------------------------------------------------------------------------------- /images/advance-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/advance-testing.png -------------------------------------------------------------------------------- /images/basic-merging-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-merging-1.png -------------------------------------------------------------------------------- /images/basic-merging-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-merging-2.png -------------------------------------------------------------------------------- /images/checkout-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/checkout-master.png -------------------------------------------------------------------------------- /images/commit-and-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/commit-and-tree.png -------------------------------------------------------------------------------- /images/git-fusion-boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-fusion-boot.png -------------------------------------------------------------------------------- /images/head-to-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/head-to-testing.png -------------------------------------------------------------------------------- /images/maint-04-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-04-target.png -------------------------------------------------------------------------------- /images/maint-09-contrib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-09-contrib.png -------------------------------------------------------------------------------- /images/pr-02-merge-fix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/pr-02-merge-fix.png -------------------------------------------------------------------------------- /images/reposettingslink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reposettingslink.png -------------------------------------------------------------------------------- /images/reset-squash-r1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-squash-r1.png -------------------------------------------------------------------------------- /images/reset-squash-r2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-squash-r2.png -------------------------------------------------------------------------------- /images/reset-squash-r3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/reset-squash-r3.png -------------------------------------------------------------------------------- /images/small-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/small-team-flow.png -------------------------------------------------------------------------------- /images/topic-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/topic-branches-1.png -------------------------------------------------------------------------------- /images/topic-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/topic-branches-2.png -------------------------------------------------------------------------------- /images/undomerge-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/undomerge-reset.png -------------------------------------------------------------------------------- /images/undomerge-revert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/undomerge-revert.png -------------------------------------------------------------------------------- /images/undomerge-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/undomerge-start.png -------------------------------------------------------------------------------- /book/06-github/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/1.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/1.png -------------------------------------------------------------------------------- /book/06-github/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/10.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/10.png -------------------------------------------------------------------------------- /book/06-github/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/2.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/2.png -------------------------------------------------------------------------------- /book/06-github/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/3.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/3.png -------------------------------------------------------------------------------- /book/06-github/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/4.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/4.png -------------------------------------------------------------------------------- /book/06-github/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/5.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/5.png -------------------------------------------------------------------------------- /book/06-github/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/6.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/6.png -------------------------------------------------------------------------------- /book/06-github/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/7.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/7.png -------------------------------------------------------------------------------- /book/06-github/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/8.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/8.png -------------------------------------------------------------------------------- /book/06-github/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/9.pdf -------------------------------------------------------------------------------- /book/06-github/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/06-github/callouts/9.png -------------------------------------------------------------------------------- /diagram-source/progit.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/diagram-source/progit.sketch -------------------------------------------------------------------------------- /images/basic-branching-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-1.png -------------------------------------------------------------------------------- /images/basic-branching-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-2.png -------------------------------------------------------------------------------- /images/basic-branching-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-3.png -------------------------------------------------------------------------------- /images/basic-branching-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-4.png -------------------------------------------------------------------------------- /images/basic-branching-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-5.png -------------------------------------------------------------------------------- /images/basic-branching-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/basic-branching-6.png -------------------------------------------------------------------------------- /images/benevolent-dictator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/benevolent-dictator.png -------------------------------------------------------------------------------- /images/blink-04-pr-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-04-pr-comment.png -------------------------------------------------------------------------------- /images/branch-and-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/branch-and-history.png -------------------------------------------------------------------------------- /images/branch_widget_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/branch_widget_mac.png -------------------------------------------------------------------------------- /images/branch_widget_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/branch_widget_win.png -------------------------------------------------------------------------------- /images/commits-and-parents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/commits-and-parents.png -------------------------------------------------------------------------------- /images/git-osx-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-osx-installer.png -------------------------------------------------------------------------------- /images/integration-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/integration-manager.png -------------------------------------------------------------------------------- /images/maint-03-email-resp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-03-email-resp.png -------------------------------------------------------------------------------- /images/maint-05-mentions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-05-mentions.png -------------------------------------------------------------------------------- /images/maint-11-transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-11-transfer.png -------------------------------------------------------------------------------- /images/managed-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/managed-team-flow.png -------------------------------------------------------------------------------- /images/markdown-01-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-01-example.png -------------------------------------------------------------------------------- /images/markdown-02-tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-02-tasks.png -------------------------------------------------------------------------------- /images/markdown-05-quote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-05-quote.png -------------------------------------------------------------------------------- /images/markdown-07-emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-07-emoji.png -------------------------------------------------------------------------------- /images/mentions-01-syntax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/mentions-01-syntax.png -------------------------------------------------------------------------------- /images/mentions-02-render.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/mentions-02-render.png -------------------------------------------------------------------------------- /images/mentions-03-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/mentions-03-closed.png -------------------------------------------------------------------------------- /images/merging-workflows-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/merging-workflows-1.png -------------------------------------------------------------------------------- /images/merging-workflows-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/merging-workflows-2.png -------------------------------------------------------------------------------- /images/merging-workflows-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/merging-workflows-3.png -------------------------------------------------------------------------------- /images/merging-workflows-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/merging-workflows-4.png -------------------------------------------------------------------------------- /images/merging-workflows-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/merging-workflows-5.png -------------------------------------------------------------------------------- /images/remote-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/remote-branches-1.png -------------------------------------------------------------------------------- /images/remote-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/remote-branches-2.png -------------------------------------------------------------------------------- /images/remote-branches-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/remote-branches-3.png -------------------------------------------------------------------------------- /images/remote-branches-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/remote-branches-4.png -------------------------------------------------------------------------------- /images/remote-branches-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/remote-branches-5.png -------------------------------------------------------------------------------- /images/scripting-07-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-07-status.png -------------------------------------------------------------------------------- /images/undomerge-revert2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/undomerge-revert2.png -------------------------------------------------------------------------------- /images/undomerge-revert3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/undomerge-revert3.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/1.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/1.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/2.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/2.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/3.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/3.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/4.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/4.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/5.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/5.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/6.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/6.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/7.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/7.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/8.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/8.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/9.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/9.png -------------------------------------------------------------------------------- /images/centralized_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/centralized_workflow.png -------------------------------------------------------------------------------- /images/interesting-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/interesting-rebase-1.png -------------------------------------------------------------------------------- /images/interesting-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/interesting-rebase-2.png -------------------------------------------------------------------------------- /images/interesting-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/interesting-rebase-3.png -------------------------------------------------------------------------------- /images/interesting-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/interesting-rebase-4.png -------------------------------------------------------------------------------- /images/interesting-rebase-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/interesting-rebase-5.png -------------------------------------------------------------------------------- /images/maint-06-unsubscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-06-unsubscribe.png -------------------------------------------------------------------------------- /images/markdown-08-drag-drop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-08-drag-drop.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/perils-of-rebasing-1.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/perils-of-rebasing-2.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/perils-of-rebasing-3.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/perils-of-rebasing-4.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/perils-of-rebasing-5.png -------------------------------------------------------------------------------- /images/scripting-01-services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-01-services.png -------------------------------------------------------------------------------- /images/scripting-03-webhook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-03-webhook.png -------------------------------------------------------------------------------- /images/scripting-06-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-06-comment.png -------------------------------------------------------------------------------- /book/07-git-tools/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/10.pdf -------------------------------------------------------------------------------- /book/07-git-tools/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/07-git-tools/callouts/10.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/1.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/1.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/2.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/2.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/3.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/3.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/4.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/4.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/5.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/5.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/6.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/6.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/7.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/7.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/8.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/8.png -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/9.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/9.png -------------------------------------------------------------------------------- /images/blink-05-general-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-05-general-comment.png -------------------------------------------------------------------------------- /images/maint-07-notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-07-notifications.png -------------------------------------------------------------------------------- /images/maint-10-default-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-10-default-branch.png -------------------------------------------------------------------------------- /images/markdown-03-task-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-03-task-summary.png -------------------------------------------------------------------------------- /images/markdown-04-fenced-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-04-fenced-code.png -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Як долучитися до Pro Git (2-ге видання) 2 | 3 | Щодо допомоги з перекладом дивіться TRANSLATION_NOTES.asc 4 | -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/10.pdf -------------------------------------------------------------------------------- /book/B-embedding-git/callouts/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/book/B-embedding-git/callouts/10.png -------------------------------------------------------------------------------- /images/blink-03-pull-request-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/blink-03-pull-request-open.png -------------------------------------------------------------------------------- /images/git-fusion-perforce-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/git-fusion-perforce-graph.png -------------------------------------------------------------------------------- /images/markdown-06-emoji-complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/markdown-06-emoji-complete.png -------------------------------------------------------------------------------- /images/scripting-02-email-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-02-email-service.png -------------------------------------------------------------------------------- /images/scripting-04-webhook-debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-04-webhook-debug.png -------------------------------------------------------------------------------- /images/scripting-05-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/scripting-05-access-token.png -------------------------------------------------------------------------------- /images/maint-08-notifications-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-uk/HEAD/images/maint-08-notifications-page.png -------------------------------------------------------------------------------- /.tgitconfig: -------------------------------------------------------------------------------- 1 | [bugtraq] 2 | url = https://github.com/progit/progit2/issues/%BUGID% 3 | logregex = "[Ii]ssues?:?(\\s*(,|and)?\\s*#?\\d+)+\n(\\d+)" 4 | 5 | [tgit] 6 | icon = Pro.ico 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | output 2 | .DS_Store 3 | 4 | # build artifacts 5 | Gemfile.lock 6 | progit.html 7 | progit.pdf 8 | progit.pdfmarks 9 | progit.epub 10 | progit.fb2.zip 11 | progit-kf8.epub 12 | progit.mobi 13 | contributors.txt -------------------------------------------------------------------------------- /LICENSE.asc: -------------------------------------------------------------------------------- 1 | Ця робота розповсюджується під ліцензією Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. Для перегляду копії цієї ліцензії, відвідайте http://creativecommons.org/licenses/by-nc-sa/3.0/ або відправте листа до Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 2 | -------------------------------------------------------------------------------- /book/dedication.asc: -------------------------------------------------------------------------------- 1 | [dedication] 2 | == Присвячується 3 | 4 | _Моїй дружині, Беккі, без кого ця пригода ніколи б не розпочалась. — Бен_ 5 | 6 | _Ця версія присвячується моїм дівчатам. 7 | Моїй дружині Джесіці яка підтримувала мене всі ці роки і моїй доньці Жозефіні, 8 | котра буде підтримувати мене, коли я буду занадто старий, щоб усвідомлювати те, що відбувається. — Скотт_ 9 | -------------------------------------------------------------------------------- /book/contributors.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Автори 3 | 4 | Оскільки це книга з відкритим кодом, накопичилась певна кількість помилок та змін, внесених за останні роки. Нижче наведено список всіх учасників, що внесли свої зміни в англомовну версію книги Pro Git, як в проект з відкритим кодом. Дякуємо кожному за допомогу в створенні кращої книги для кожного. 5 | 6 | [source,tabsize=8] 7 | ---- 8 | include::contributors.txt[] 9 | ---- 10 | 11 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'rake', '13.2.1' 4 | gem 'asciidoctor', '2.0.22' 5 | 6 | gem 'json', '2.7.2' 7 | gem 'awesome_print', '1.9.2' 8 | 9 | gem 'asciidoctor-fb2', '0.7.0' 10 | gem 'asciidoctor-epub3', '2.1.3' 11 | gem 'asciidoctor-pdf', '2.3.17' 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.9' 18 | gem 'kindlegen', '3.1.1' 19 | -------------------------------------------------------------------------------- /.github/workflows/pr-build.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request Build 2 | 3 | on: 4 | pull_request: 5 | branches: [ main, master ] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | 13 | - name: Set up Ruby 14 | uses: ruby/setup-ruby@v1 15 | with: 16 | ruby-version: 3.1 17 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 18 | 19 | - name: Build book 20 | run: bundle exec rake book:build 21 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/eclipse.asc: -------------------------------------------------------------------------------- 1 | === Git в Eclipse 2 | 3 | (((Eclipse))) 4 | Git постачає додаток під назвою 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 | -------------------------------------------------------------------------------- /theme/epub/layout.html: -------------------------------------------------------------------------------- 1 | {{ doctype }} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {{ title }} 10 | 11 | 12 | {{ content }} 13 | 14 | 15 | -------------------------------------------------------------------------------- /script/tag_on_master: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This is for running on Travis. It automatically tags any merge to Master as a release in the 2.1.x series. 4 | if [[ $TRAVIS_PULL_REQUEST != 'false' || "$TRAVIS_BRANCH" != 'master' ]]; then 5 | # Don't run on pull requests 6 | echo 'This only runs on a merge to master.' 7 | exit 0 8 | fi 9 | 10 | # Compute the next tag number 11 | LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) 12 | PATCH=$(($LASTPATCH+1)) 13 | echo $PATCH 14 | 15 | # Create a tag 16 | curl -H "Authorization: token $GITHUB_KEY" \ 17 | -X POST \ 18 | -d "{\"ref\":\"refs/tags/2.1.$PATCH\", \"sha\":\"$TRAVIS_COMMIT\"}" \ 19 | https://api.github.com/repos/progit/progit2/git/refs 20 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | sudo: false 3 | git: 4 | depth: false 5 | cache: bundler 6 | before_install: 7 | - wget https://raw.githubusercontent.com/progit/progit2-pub/master/bootstrap.sh 8 | - sh bootstrap.sh 9 | script: bundle exec rake book:build 10 | after_success: bundle exec rake book:tag 11 | deploy: 12 | provider: releases 13 | file_glob: true 14 | file: 15 | - progit*.epub 16 | - progit*.mobi 17 | - progit*.pdf 18 | skip_cleanup: true 19 | on: 20 | tags: true 21 | api-key: $GITHUB_API_TOKEN 22 | branches: 23 | only: 24 | - master 25 | - /^2\.1(\.\d+)+$/ 26 | 27 | addons: 28 | apt: 29 | packages: 30 | - epubcheck 31 | notifications: 32 | email: 33 | on_success: never 34 | on_failure: always 35 | -------------------------------------------------------------------------------- /book/preface_ben.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Передмова від Бена Страуба 3 | 4 | Перша версія цієї книги стала тим, що втягло мене в Git. Це був мій вступ в стиль створення програмного забезпечення, яке відчувається більш природнім ніж будь-що бачене дотоді. Я був розробником декілька років до того, але це був правильний поворот, який направив мене набагато цікавішим шляхом, ніж той, на якому я був. 5 | 6 | Тепер, по кількох роках, я долучився до головної реалізації Git, я працював на найбільшу компанію розгортання Git, і я подорожував світом навчаючи людей Git. Коли Скот запитав мене чи був би я зацікавлений в роботі над другим виданням, я навіть не роздумував. 7 | 8 | Працювати над цією книгою було великим задоволенням та привілеєм. Я надіюсь вона допоможе тобі так, як допомогла мені. 9 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /B-embedding-git-in-your-applications.asc: -------------------------------------------------------------------------------- 1 | [[B-embedding-git-in-your-applications]] 2 | [appendix] 3 | == Вбудовування Git у ваші застосунки 4 | 5 | Якщо ваш застосунок створено для розробників, є хороші шанси, що він може отримати вигоду від інтеграції з системою контролю за програмним кодом. 6 | Навіть застосунки для нерозробників, такі як редактори документів, потенційно можуть отримати вигоду з особливостей контролю версій, оскільки модель роботи Git працює дуже добре для багатьох різноманітних сценаріїв. 7 | 8 | Якщо вам потрібно інтегрувати Git з вашим застосунком, по суті ви маєте два варіанти: ініціалізація оболонки та використання версії Git для командного рядка, або вбудувати бібліотеку у ваш застосунок. 9 | Тут ми розглянемо інтеграцію за допомогою командного рядка так кілька найпопулярніших бібліотек для вбудування Git. 10 | 11 | include::book/B-embedding-git/sections/command-line.asc[] 12 | 13 | include::book/B-embedding-git/sections/libgit2.asc[] 14 | 15 | include::book/B-embedding-git/sections/jgit.asc[] 16 | 17 | include::book/B-embedding-git/sections/go-git.asc[] 18 | -------------------------------------------------------------------------------- /update-plan/plan.adoc: -------------------------------------------------------------------------------- 1 | == План оновлення перекладу 2 | 3 | Поточний переклад базується на версії https://github.com/progit/progit2/commit/e95aba0b236ab57b8ea9a1ef1b4fdae6339573ec[e95aba0b236ab57b8ea9a1ef1b4fdae6339573ec] 4 | (`english-version`) від 3-го квітня 2016-го року. 5 | 6 | Це план, як оновити переклад до версії https://github.com/progit/progit2/commit/652208f3f9ba3f31a846cf54b4b1aa682dd72e09[2.1.434] від 4 вересня 2024-го року. 7 | 8 | Спробував залити `2.1.434` до `master`, список файлів з конфліктами у `files.adoc`. 9 | 10 | // Пропонований порядок роботи (продемонстрований на `book/01-introduction/sections/about-version-control.asc`): 11 | // 12 | // Спершу отримаємо всі версії цього файлу: 13 | // 14 | // ---- 15 | // f=book/01-introduction/sections/about-version-control.asc 16 | // # Дивимося конфлікти 17 | // git show origin/english-version:$f > $f-old-english 18 | // git show 2.1.434:$f > $f-cur-english 19 | // git show HEAD:$f > $f-ukrainian 20 | // git merge-file -p $f-ukrainian $f-old-english $f-cur-english > $f 21 | // ---- 22 | // 23 | // Виправляємо файл і робимо PR. 24 | -------------------------------------------------------------------------------- /book/01-introduction/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Командний рядок 2 | 3 | Є багато різних варіантів використання Git. 4 | Крім оригінальних клієнтів командного рядка, є безліч клієнтів з графічним інтерфейсом користувача з різними можливостями. 5 | Для цієї книги ми будемо використовувати Git в командному рядку. 6 | З одного боку, командний рядок -- єдине місце, де можна виконувати _всі_ команди Git - більшість графічних інтерфейсів для простоти реалізують тільки деяку підмножину функціональності Git. 7 | Якщо ви знаєте, як виконати щось з командного рядка, ви, ймовірно, також можете з'ясувати, як виконати це і графічному інтерфейсі, у той час як зворотне не завжди вірно. 8 | Крім того, в той час, як вибір графічного клієнта справа особистого смаку, інструменти командного рядка мають _усі_ користувачі одразу ж після інсталяції. 9 | 10 | Таким чином, ми очікуємо, що ви знаєте, як відкрити термінал в Mac або командний рядок, або Powershell в Windows. 11 | Якщо ви не розумієте, про що ми тут говоримо, можливо, вам потрібно буде зупинитися та швидко дізнатися це, щоб ви були в змозі розуміти інші приклади і описи в цій книзі. 12 | -------------------------------------------------------------------------------- /progit.asc: -------------------------------------------------------------------------------- 1 | = Pro Git 2 | Скот Чакон (Scott Chacon); Бен Страуб (Ben Straub) 3 | :doctype: book 4 | :docinfo: 5 | :toc-title: Зміст 6 | :toc: 7 | :toclevels: 2 8 | :pagenums: 9 | :front-cover-image: image:book/cover.png[width=1050,height=1600] 10 | :icons: font 11 | 12 | include::book/license.asc[] 13 | 14 | include::book/preface_schacon.asc[] 15 | 16 | include::book/preface_ben.asc[] 17 | 18 | include::book/dedication.asc[] 19 | 20 | include::book/contributors.asc[] 21 | 22 | include::book/introduction.asc[] 23 | 24 | include::ch01-getting-started.asc[] 25 | 26 | include::ch02-git-basics-chapter.asc[] 27 | 28 | include::ch03-git-branching.asc[] 29 | 30 | include::ch04-git-on-the-server.asc[] 31 | 32 | include::ch05-distributed-git.asc[] 33 | 34 | include::ch06-github.asc[] 35 | 36 | include::ch07-git-tools.asc[] 37 | 38 | include::ch08-customizing-git.asc[] 39 | 40 | include::ch09-git-and-other-systems.asc[] 41 | 42 | include::ch10-git-internals.asc[] 43 | 44 | include::A-git-in-other-environments.asc[] 45 | 46 | include::B-embedding-git-in-your-applications.asc[] 47 | 48 | include::C-git-commands.asc[] 49 | 50 | ifdef::backend-pdf[include::index.asc[]] 51 | -------------------------------------------------------------------------------- /book/04-git-server/sections/hosted.asc: -------------------------------------------------------------------------------- 1 | === Варіанти стороннього хостингу 2 | 3 | Якщо ви не хочете витрачати час на всю роботу, що пов’язана зі встановленням вашого власного серверу Git, у вас є декілька варіантів хостингу ваших проектів Git на зовнішньому виділеному хостингу. 4 | Це надає чисельні переваги: зазвичай хостинг швидко налаштувати, на ньому легко почати проекти, та не треба підтримувати чи слідкувати за сервером. 5 | Навіть якщо ви налаштували та запустили свій власний внутрішній сервер, ви все одно можете використати публічний хостинг для вашого відкритого коду – так спільноті зазвичай легше його знайти та допомогти з вашим проектом. 6 | 7 | Нині у вас є величезний вибір хостингів, кожен зі своїми перевагами та недоліками. 8 | Ви можете побачити оновлюваний список на сторінці GitHosting, на головній вікі Git за адресою https://git.wiki.kernel.org/index.php/GitHosting[] 9 | 10 | Ми в подробицях розглянемо використання GitHub у розділі <>, адже це найбільший хостинг Git, та вам може бути потрібно взаємодіяти з проектами, що викладені на нього, проте є ще десятки варіантів, з яких ви можете вибирати, якщо не бажаєте налаштовувати власний Git сервер. 11 | -------------------------------------------------------------------------------- /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/basics.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 | -------------------------------------------------------------------------------- /ch08-customizing-git.asc: -------------------------------------------------------------------------------- 1 | [[ch08-customizing-git]] 2 | == Налаштування Git 3 | 4 | До цього часу ми розглянули основи роботи Git і як його використовувати, а також ми розповіли про декілька засобів, які надає Git для легшого та ефективнішого його використання. 5 | У цьому розділі ми побачимо, як можна змусити 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 | -------------------------------------------------------------------------------- /.github/workflows/release-on-merge.yml: -------------------------------------------------------------------------------- 1 | name: Release on push to main 2 | 3 | on: 4 | push: 5 | branches: [ main, master ] 6 | 7 | jobs: 8 | release: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | with: 13 | fetch-depth: 0 14 | 15 | - name: Set up Ruby 16 | uses: ruby/setup-ruby@v1 17 | with: 18 | ruby-version: 3.1 19 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 20 | 21 | - name: Build release assets 22 | run: bundle exec rake book:build 23 | 24 | - name: Compute tag name 25 | id: compute-tag 26 | run: | 27 | echo Computing next tag number 28 | LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) 29 | PATCH=$(($LASTPATCH+1)) 30 | echo "tagname=2.1.${PATCH}" >> $GITHUB_OUTPUT 31 | 32 | - name: Create release 33 | uses: ncipollo/release-action@v1 34 | with: 35 | token: ${{ secrets.GITHUB_TOKEN }} 36 | tag: ${{ steps.compute-tag.outputs.tagname }} 37 | commit: ${{ steps.compute-tag.outputs.branch }} 38 | artifacts: './progit.epub,./progit.fb2.zip,./progit.mobi,./progit.pdf,./progit.html' 39 | -------------------------------------------------------------------------------- /ch05-distributed-git.asc: -------------------------------------------------------------------------------- 1 | [[ch05-distributed-git]] 2 | == Розподілений Git 3 | 4 | (((distributed 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 | -------------------------------------------------------------------------------- /A-git-in-other-environments.asc: -------------------------------------------------------------------------------- 1 | [[A-git-in-other-environments]] 2 | [appendix] 3 | == Git в інших середовищах 4 | 5 | Якщо ви прочитали всю книгу, то чимало дізнались про використання Git з командного рядка. 6 | Ви можете працювати з локальними файлами, зʼєднуватись з вашим сховищем чи з іншими через мережу, та працювати з іншими ефективно. 7 | Проте казка тут не закінчується; Git зазвичай використовується як частина більшої екосистеми, і термінал не завжди найкращий спосіб з ним працювати. 8 | Тепер ми поглянемо на декілька інших типів середовищ, в яких Git може бути корисним, та як інші застосунки (включно з вашими) можуть працювати з 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/eclipse.asc[] 15 | 16 | 17 | include::book/A-git-in-other-environments/sections/bash.asc[] 18 | 19 | include::book/A-git-in-other-environments/sections/zsh.asc[] 20 | 21 | include::book/A-git-in-other-environments/sections/powershell.asc[] 22 | 23 | === Підсумок 24 | 25 | Ви дізнались, як опанувати могутність Git з інструментів, які ви використовуєте в повсякденній роботі, а також як взаємодіяти з репозиторіями Git з ваших власних програм. 26 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Git з командного рядка 2 | 3 | Один з варіантів -- породити оболонку (shell) та використати версію Git для командного рядка для виконання завдань. 4 | Перевагою цього підходу є канонічність та підтримка всіх можливостей Git. 5 | Також це досить легко зробити, оскільки більшість середовищ виконання має досить просту можливість для виклику процесу з аргументами командного рядка. 6 | Тим не менш, цей підхід має певні недоліки. 7 | 8 | Одним з них є те, що весь результат роботи є звичайним текстом. 9 | Це означає, що вам доведеться аналізувати результат роботи команд (що може змінюватись з часом) для отримання прогресу виконання та інформації про результат, що може бути неефективним та схильним до помилок. 10 | 11 | Іншим є відсутність відновлення після помилок. 12 | Якщо репозиторій якимось чином пошкоджено, або користувач вказав погано сформоване значення конфігурації, то Git просто відмовиться від виконання багатьох операцій. 13 | 14 | Ще одним недоліком є управління процесом. 15 | Git вимагає від вас управління середовищем оболонки в окремому процесі, що може викликати небажані труднощі. 16 | Спроба координувати багато таких процесів (особливо під час можливого доступу до одного репозиторія з різних процесів) може бути доволі складним завданням. 17 | -------------------------------------------------------------------------------- /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.(((Linus Torvalds))) 11 | Деякі з цілей нової системи були: 12 | 13 | * швидкість 14 | * проста архітектура 15 | * сильна підтримка для нелінійного розвитку (тисячі паралельних гілок) 16 | * децентралізація 17 | * можливість ефективно управляти великими проектами, такими як ядро Linux (швидкість і розмір даних) 18 | 19 | З моменту свого народження в 2005 році, Git розвинувся і дозрів, щоб бути простим у використанні і в той же час зберегти свої первинні властивості. 20 | Git дивовижно швидкий, та дуже ефективний для великих проектів, і має неймовірну систему галуження для нелінійного розвитку (див. <>). 21 | -------------------------------------------------------------------------------- /ch02-git-basics-chapter.asc: -------------------------------------------------------------------------------- 1 | [[ch02-git-basics-chapter]] 2 | == Основи Git 3 | 4 | Якщо ви бажаєте прочитати тільки один розділ, щоб почати працювати з Git, саме цей вам і потрібен. 5 | У цьому розділі розглядаються всі основні команди, які потрібні для переважної більшості завдань, що виникають під час роботи з Git. 6 | До кінця розділу, ви будете в змозі налаштувати й ініціалізувати репозиторій, починати і зупиняти відстеження файлів, а також готувати і вносити зміни. 7 | Ми також покажемо вам, як налаштувати Git ігнорувати певні файли чи шаблони файлів, як швидко і легко скасувати помилки, як переглядати історію своїх проектів або зміни між комітами, а також як відправляти та отримувати зміни з віддалених репозиторіїв. 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 | Майже кожна система контролю версій підтримує гілки (branches) в певній мірі. 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 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /ch07-git-tools.asc: -------------------------------------------------------------------------------- 1 | [[ch07-git-tools]] 2 | == Інструменти Git 3 | 4 | Тепер ви вже вивчили більшість повсякденних команд та процесів роботи, що вам потрібні для керування та підтримки сховища Git з вашим програмним кодом. 5 | Ви виконали базові завдання супроводжування та зберігання файлів, та ви приборкали силу області індексування, легкого тематичного галуження та зливання. 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 | -------------------------------------------------------------------------------- /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 мають безпосередньо вбудований у своє IDE клієнт Git. 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 переведе вас до вигляду Home, який виглядає як <>. 17 | Це центральне місце для виконання дій Git; коли ви _пишете_ код, ви напевно проводите більшість часу у вікні "Changes", проте коли настає час для отримання змін, що їх зробили інші з вашої команди, то ви використовуєте вікна "Unsynced Commits" та "Branches". 18 | 19 | [[vs_home]] 20 | .Вигляд "Home" репозиторія Git у Visual Studio. 21 | image::images/vs-2.png[Вигляд Home репозиторія Git у Visual Studio.] 22 | 23 | Visual Studio тепер має могутній орієнтований на завдання інтерфейс для Git. 24 | Він включає перегляд лінійної історії, відображення різниці, команди для віддалених сховищ, та багато інших можливостей. 25 | Задля повної документації цього функціоналу (який не вміщається тут), перейдіть до http://msdn.microsoft.com/en-us/library/hh850437.aspx[]. 26 | -------------------------------------------------------------------------------- /ch06-github.asc: -------------------------------------------------------------------------------- 1 | [[ch06-github]] 2 | == GitHub 3 | 4 | (((GitHub))) 5 | GitHub - це найбільший хостинг для сховищ Git, та є центром співпраці між мільйонами розробників та проектів. 6 | Великий відсоток усіх сховищ Git мають хост на GitHub, та багато проектів з відкритим кодом використовують задля Git хостингу, керування завданнями, перегляду коду та для багато чого іншого. 7 | Отже хоч це і не частина вільного проекту Git, ви майже напевно захочете чи вам доведеться колись взаємодіяти з GitHub під час професійного використання Git. 8 | 9 | Цей розділ про ефективне використання GitHub. 10 | Ми розглянемо реєстрацію та керування обліковим записом (account), створення та використання сховищ Git, поширені схеми додавання змін до проектів та прийом змін до ваших, програмний інтерфейс GitHub, та багато маленьких порад, що зроблять ваше життя легшим. 11 | 12 | Якщо вас не цікавить ані використання GitHub як хостингу ваших власних проектів, ані взаємодія з іншими проектами, що використовують 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 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/bash.asc: -------------------------------------------------------------------------------- 1 | === Git у Bash 2 | 3 | (((bash)))(((tab completion, bash)))(((shell prompts, 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 | Також корисно налаштувати ваш запит команд (prompt), щоб відображати інформацію про репозиторій Git поточної директорії. 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` з аргументом формату. 37 | Тепер ваш запит bash виглядатиме наступним чином, коли ви знаходитесь десь у керованому Git проекті: 38 | 39 | .Customized `bash` prompt. 40 | image::images/git-bash.png[Налаштований запит `bash`.] 41 | 42 | Обидва ці скрипти мають корисну документацію; погляньте на вміст `git-completion.bash` та `git-prompt.sh` для докладнішої інформації. 43 | -------------------------------------------------------------------------------- /book/01-introduction/sections/help.asc: -------------------------------------------------------------------------------- 1 | [[_git_help]] 2 | === Отримання допомоги 3 | 4 | Якщо вам коли-небудь знадобиться допомога при використанні Git, є два еквівалентних способи, щоб отримати допомогу на докладних сторінках довідника (manpage) для будь-якої команди Git: 5 | 6 | [source,console] 7 | ---- 8 | $ git help 9 | $ man git- 10 | ---- 11 | 12 | Наприклад, ви можете отримати допомогу у довіднику для команди `git config`, виконавши:(((git commands, help))) 13 | 14 | [source,console] 15 | ---- 16 | $ git help config 17 | ---- 18 | 19 | Ці команди гарні тим, що ви можете отримати доступ до них в будь-якому місці, навіть без доступу до мережі. 20 | Якщо сторінок довідника і цієї книги вам недостатньо, ви можете спробувати пошукати допомоги на `#git` або `#github` каналі на сервері IRC Freenode (irc.freenode.net). 21 | Ці канали постійно заповнені сотнями людей, які дуже добре інформовані про Git і готові допомогти.(((IRC))) 22 | 23 | Крім того, якщо вам не потрібен вичерпний довідник, а треба лише трохи освіжити памʼять щодо доступних опцій команди git, ви можете отримати стислішу версію за допомогою опцій `-h` чи `--help`, наприклад: 24 | 25 | [source,console] 26 | ---- 27 | $ git add -h 28 | usage: git add [] [--] ... 29 | 30 | -n, --dry-run dry run 31 | -v, --verbose be verbose 32 | 33 | -i, --interactive interactive picking 34 | -p, --patch select hunks interactively 35 | -e, --edit edit current diff and apply 36 | -f, --force allow adding otherwise ignored files 37 | -u, --update update tracked files 38 | -N, --intent-to-add record only the fact that the path will be added later 39 | -A, --all add changes from all tracked and untracked files 40 | --ignore-removal ignore paths removed in the working tree (same as --no-all) 41 | --refresh don't add, only refresh the index 42 | --ignore-errors just skip files which cannot be added because of errors 43 | --ignore-missing check if - even missing - files are ignored in dry run 44 | --chmod <(+/-)x> override the executable bit of the listed files 45 | ---- 46 | 47 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /README.asc: -------------------------------------------------------------------------------- 1 | image:https://travis-ci.org/progit/progit2-uk.svg?branch=master["Build Status", link="https://travis-ci.org/progit/progit2-uk"] 2 | 3 | = Pro Git, друге видання - переклад українською 4 | 5 | Щодо допомоги з перекладом дивіться link:TRANSLATION_NOTES.asc[TRANSLATION_NOTES.asc] 6 | 7 | Ласкаво просимо до другого видання книги Pro Git. 8 | 9 | Цю книгу можна знайти онлайн за адресою https://git-scm.com/book/uk/v2 10 | 11 | Друге видання, так само, як і перше, має відкритий код під ліцензією Creative Commons. 12 | 13 | Деякі речі є відмінними у відкритому коді цього видання, порівняно з першим. 14 | Перш за все, для тексту книги ми перейшли від Markdown до неймовірно зручного формату Asciidoc. 15 | 16 | Ми також перейшли від піддиректорій англійського репозиторія, до зберігання перекладів в окремих сховищах. 17 | Докладніше -- за посиланням link:TRANSLATING.md[як перекласти]. 18 | 19 | == Як згенерувати книгу 20 | 21 | Ви можете згенерувати файли електронної книги вручну за допомогою Asciidoctor. 22 | Якщо ви виконаєте наступні команди, то _можете_ отримати власне HTML, Epub, Mobi та PDF вихідні файли: 23 | 24 | ---- 25 | $ bundle install 26 | $ bundle exec rake book:build 27 | Converting to HTML... 28 | -- HTML output at progit.html 29 | Converting to EPub... 30 | -- Epub output at progit.epub 31 | Converting to Mobi (kf8)... 32 | -- Mobi output at progit.mobi 33 | Converting to PDF... 34 | -- PDF output at progit.pdf 35 | ---- 36 | 37 | Інший варіант -- викликати `asciidoctor` напряму без команди `bundle`. 38 | 39 | Виконайте такі команди: 40 | 41 | ---- 42 | $ asciidoctor progit.asc 43 | $ asciidoctor-pdf progit.asc 44 | $ asciidoctor-epub3 progit.asc 45 | $ asciidoctor-epub3 -a ebook-format=kf8 progit.asc 46 | ---- 47 | 48 | В обох варіантах використовуються проєкти `asciidoctor`, `asciidoctor-pdf` та `asciidoctor-epub`. 49 | 50 | == Повідомлення про проблеми 51 | 52 | Перед тим, як повідомити про проблему, будь ласка, перевірте, чи існує вже схожа в системі обліку вад (bug tracking system). 53 | 54 | Також, якщо проблему помічено на сайті git-scm.com, будь ласка, перевірте, чи вона досі присутня в цьому сховищі. 55 | Проблема може бути вже виправленою, проте зміни ще не розгорнули. 56 | 57 | == Як долучитися 58 | 59 | Якщо ви бажаєте допомогти проєкту, вносячи зміни, перегляньте link:CONTRIBUTING.md[інструкцію, як долучитися]. 60 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/aliases.asc: -------------------------------------------------------------------------------- 1 | [[_git_aliases]] 2 | === Псевдоніми Git 3 | 4 | (((aliases))) 5 | Перед тим, як перейти до наступного розділу, ми хочемо представити особливість, яка може зробити ваше користування Git простішим, легшим та більш знайомим: псевдоніми. 6 | Для ясності, ми більше не будемо використовувати їх деінде в цій книзі, але якщо ви продовжите працювати з Git регулярно, псевдоніми -- це те, про що ви повинні знати. 7 | 8 | Git сам не намагається здогадатись, яку команду ви набрали, якщо ви набрали її частково. 9 | Якщо ви не хочете набирати команди Git повністю, ви легко можете налаштувати псевдоніми для кожної команди за допомогою `git config`.(((git commands, 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 | З часом, ви напевно почнете використовувати частіше й інші команди. Не вагайтесь створювати для них нові псевдоніми. 22 | 23 | Ця техніка також може бути дуже корисною для створення нових команд, які на вашу думку, мали б існувати. 24 | Наприклад, щоб виправити незручність, яку ми бачили при скасуванні змін до файлу, ви можете додати свою власну команду unstage (видалити з індексу) до Git: 25 | 26 | [source,console] 27 | ---- 28 | $ git config --global alias.unstage 'reset HEAD --' 29 | ---- 30 | 31 | Після цього наступні дві команди еквівалентні: 32 | 33 | [source,console] 34 | ---- 35 | $ git unstage fileA 36 | $ git reset HEAD -- fileA 37 | ---- 38 | 39 | Це здається трохи яснішим. 40 | Також нерідко додають команду `last` (останній), ось так: 41 | 42 | [source,console] 43 | ---- 44 | $ git config --global alias.last 'log -1 HEAD' 45 | ---- 46 | 47 | Тепер ви легко можете побачити останній коміт: 48 | 49 | [source,console] 50 | ---- 51 | $ git last 52 | commit 66938dae3329c7aebe598c2246a8e6af90d04646 53 | Author: Josh Goebel 54 | Date: Tue Aug 26 19:48:51 2008 +0800 55 | 56 | Test for current head 57 | 58 | Signed-off-by: Scott Chacon 59 | ---- 60 | 61 | Як ви напевно зрозуміли, Git просто підставляє замість псевдоніму його значення. 62 | Проте, можливо ви бажаєте виконати зовнішню команду, а не команду Git. 63 | У цьому разі, треба почати команду зі знаку оклику `!`. 64 | Це корисно, якщо ви бажаєте створити власні інструменти для роботи зі сховищем Git. 65 | Ми продемонструємо це, створивши псевдонім `git visual` для виконання `gitk`: 66 | 67 | [source,console] 68 | ---- 69 | $ git config --global alias.visual '!gitk' 70 | ---- 71 | -------------------------------------------------------------------------------- /book/10-git-internals/sections/plumbing-porcelain.asc: -------------------------------------------------------------------------------- 1 | [[_plumbing_porcelain]] 2 | === Кухонні та парадні команди 3 | 4 | Ця книга переважно розповідає про використання Git за допомогою близько трьох десятків підкоманд на кшталт `checkout`, `branch`, `remote`. 5 | Та оскільки Git спершу був більше інструментом для системи керування версіями, ніж повною СКВ з дружнім інтерфейсом, існує купа підкоманд, що здійснюють низькорівневу роботу і були створені для послідовного використання у стилі UNIX або використання у скриптах. 6 | Ці команди зазвичай називають ``кухонними'' (англійський термін ``plumbing'' -- трубопровід, сантехніка), а орієнтовані на користувача -- ``парадними'' (англійський термін ``porcelain'' -- порцелянові). 7 | 8 | Як ви вже напевно помітили, перші дев’ять розділів книги були присвячені переважно парадним командам. 9 | У цьому розділі розглядатимуться саме низькорівневі кухонні команди, які дають доступ до внутрішніх процесів Git, та допомогають продемонструвати як і чому Git працює саме так, а не інакше. 10 | Багато з цих команд призначені не для ручного використання з командного рядка, а є блоками для побудови нових інструментів та користувацьких скриптів. 11 | 12 | Коли ви виконуєте `git init` у новій чи існуючій теці, Git створює теку `.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`. 30 | Файл `description` використовується тільки програмою GitWeb, не звертайте на нього увагу. 31 | Файл `config` містить конфігураційні параметри, специфічні саме для конкретного репозиторія, а в теці `info` знаходиться файл (((excludes))) з глобальними налаштуваннями ігнорування файлів — він дозволяє виключити шляхи, які ви не бажаєте додавати у файл `.gitignore`. 32 | Тека `hooks` містить клієнтські та серверні гаки, які були детальніше розглянуті у розділі <>. 33 | 34 | Лишилися ще чотири важливі елементи: файли `HEAD` та (ще не створений) `index`, і теки `objects` та `refs`. 35 | Це основні складові Git. 36 | У теці `objects` зберігається увесь вміст вашої бази даних, тека `refs` містить вказівники на об’єкти комітів у цих даних (гілки, теґи, віддалені гілки тощо), файл `HEAD` указує на поточну гілку -- на яку ви зараз переключені, а у файлі `index` зберігається вміст індексу. 37 | Тепер ми детально розберемося з цими елементами, щоб зрозуміти як працює Git. 38 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-tfs.asc: -------------------------------------------------------------------------------- 1 | [[_git_tfs]] 2 | ==== TFS 3 | 4 | (((TFS)))(((Importing, from TFS))) 5 | Якщо ваша команда переходить від керування кодом за допомогою TFVC до Git, то ви забажаєте конвертацію найвищої якості з тих, які вам доступні. 6 | Це означає, що хоча ми розглянули й git-tfs і git-tf у секції взаємодії, тут ми розглянемо лише git-tfs, оскільки він підтримує гілки, та здійснити це за допомогою git-tf неприйнятно складно. 7 | 8 | [NOTE] 9 | ==== 10 | Це однобічна конвертація. 11 | Отримане сховище Git не буде в змозі взаємодіяти з оригінальним проектом TFVC. 12 | ==== 13 | 14 | Спершу треба встановити відображення імен користувачів. 15 | TFVC доволі ліберальний щодо того, що може бути в полі автора для набору змін, проте Git бажає читабельне ім’я та поштову адресу. 16 | Ви можете отримати цю інформацію з консольного клієнта `tf` ось так: 17 | 18 | [source,powershell] 19 | ---- 20 | PS> tf history $/myproject -recursive > AUTHORS_TMP 21 | ---- 22 | 23 | Ця команда отримує всі набори змін в історії проекту та кладе їх у файл AUTHORS_TMP, з якого ми отримаємо дані зі стовпчика 'User' (другого). 24 | Відкрийте файл та з’ясуйте з якого символу починається та на якому закінчується стовпчик, та замініть у наступній команді параметри `11-20` команди `cut` своїми значеннями: 25 | 26 | [source,powershell] 27 | ---- 28 | PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | sort | uniq > AUTHORS 29 | ---- 30 | 31 | Команда `cut` залишає лише символи між 11 та 20 кожного рядка. 32 | Команда `tail` ігнорує перші два рядки, що є заголовками та лінією ASCII-арт. 33 | Результат пропускається через `sort` і `uniq`, щоб позбутися дублікатів, та зберігається у файлі `AUTHORS`. 34 | Далі треба попрацювати вручну; щоб git-tfs зміг ефективно використати цей файл, кожен рядок має бути у форматі: 35 | 36 | [source,text] 37 | ---- 38 | DOMAIN\username = User Name 39 | ---- 40 | 41 | Частина ліворуч -- це поле ``User'' з TFVC, а частина праворуч від знаку дорівнює -- це ім’я користувача, яке використовуватиметься для комітів Git. 42 | 43 | Щойно у вас є такий файл, можна робити повний клон проекту TFVC, який вам потрібен: 44 | 45 | [source,powershell] 46 | ---- 47 | PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git 48 | ---- 49 | 50 | Далі ви забажаєте прибрати секції `git-tfs-id` наприкінці повідомлень комітів. 51 | Це зробить наступна команда: 52 | 53 | [source,powershell] 54 | ---- 55 | PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' '--' --all 56 | ---- 57 | 58 | Вона використовує команду `sed` з середовища Git-bash, щоб замінити будь-який рядок, що починається з ``git-tfs-id:'', порожнечею, яку потім проігнорує Git. 59 | 60 | Коли все це зроблено, ви готові додати нове віддалене сховище, надіслати туди всі свої гілки, та команда може розпочати роботу з Git. 61 | -------------------------------------------------------------------------------- /book/03-git-branching/sections/branch-management.asc: -------------------------------------------------------------------------------- 1 | [[_branch_management]] 2 | === Управління гілками 3 | 4 | (((branches, managing))) 5 | Тепер, коли ви вже вмієте створювати гілки, зливати їх та видаляти, розгляньмо те, як ними управляти, та на інструменти, які можуть в цьому допомогти. 6 | 7 | Команда `git branch` насправді вміє більше ніж просто створювати та знищувати гілки.(((git commands, branch))) 8 | Запустіть її без параметрів і ви побачите просто список ваших гілок: 9 | 10 | [source,console] 11 | ---- 12 | $ git branch 13 | iss53 14 | * master 15 | testing 16 | ---- 17 | 18 | Зверніть увагу на символ `*` перед `master`: це вказівник на вашу поточно вибрану гілку (тобто ту, на котру вказує `HEAD`). 19 | Це означає, що якщо ви зараз захочете зробити коміт, `master` оновиться вашими новими змінами. 20 | Щоб побачити ваші останні коміти - запустіть `git branch -v`: 21 | 22 | [source,console] 23 | ---- 24 | $ git branch -v 25 | iss53 93b412c fix javascript issue 26 | * master 7a98805 Merge branch 'iss53' 27 | testing 782fd34 add scott to the author list in the readmes 28 | ---- 29 | 30 | Опції `--merged` та `--no-merged` корисні для фільтрування списку гілок залежно від того чи вони були злиті з поточною гілкою. 31 | Для списку гілок, що були злиті з поточною гілкою виконайте `git branch --merged`: 32 | 33 | [source,console] 34 | ---- 35 | $ git branch --merged 36 | iss53 37 | * master 38 | ---- 39 | 40 | Ви бачите `iss53` в цьому списку тому, що раніше її злили з `master`. 41 | Взагалі, гілки без `*` із цього списку можна вже видаляти (за допомогою `git branch -d`), адже ми вже інтегрували ті зміни, тому не втратимо їх. 42 | 43 | Команда `git branch --no-merged` покаже гілки, які ви не зливали з поточною гілкою: 44 | 45 | [source,console] 46 | ---- 47 | $ git branch --no-merged 48 | testing 49 | ---- 50 | 51 | Тут ви бачите свою іншу гілку. 52 | Оскільки дана гілка містить роботу, що не зливалася, спроба видалити її за допомогою `git branch -d` не буде успішною: 53 | 54 | [source,console] 55 | ---- 56 | $ git branch -d testing 57 | error: The branch 'testing' is not fully merged. 58 | If you are sure you want to delete it, run 'git branch -D testing'. 59 | ---- 60 | 61 | Якщо ж ви дійсно впевнені в тому, що гілка вам не потрібна і всі зміни з неї можна втрачати, можна змусити Git це зробити за допомогою параметра `-D`. Про що Git вам і повідомляв з попередньої спроби. 62 | 63 | [TIP] 64 | ==== 65 | Описані вище опції `--merged` і `--no-merged`, якщо не надати команді хеш коміту чи назву гілки як аргумент, покажуть, що, відповідно, було чи не було залите до _поточної_ гілки. 66 | 67 | Завжди можна додати ще один аргумент, щоб дізнатися про стан злиття відносно якоїсь іншої гілки -- немає потреби спочатку на неї переходити. Наприклад, що не було залите до гілки `master`? 68 | [source,console] 69 | ---- 70 | $ git checkout testing 71 | $ git branch --no-merged master 72 | topicA 73 | featureB 74 | ---- 75 | ==== 76 | -------------------------------------------------------------------------------- /book/04-git-server/sections/generating-ssh-key.asc: -------------------------------------------------------------------------------- 1 | [[_generate_ssh_key]] 2 | === Генерація вашого публічного ключа SSH 3 | 4 | (((SSH keys))) 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 системах та входить до Git для Windows: 23 | 24 | [source,console] 25 | ---- 26 | $ ssh-keygen 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`), а потім двічі питає passphrase, яку ви можете залишити пустою, якщо не бажаєте при кожному використанні ключа набирати пароль. 39 | 40 | Тепер кожен користувач має це зробити та відправити свій публічний ключ до вас чи до того, хто адмініструє Git сервер (у разі використання SSH серверу що вимагає публічних ключів). 41 | Все що їм треба зробити – скопіювати вміст файлу `.pub` та відправити його електронною поштою. 42 | Публічні ключі виглядають приблизно так: 43 | 44 | [source,console] 45 | ---- 46 | $ cat ~/.ssh/id_rsa.pub 47 | ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU 48 | GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3 49 | Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA 50 | t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En 51 | mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx 52 | NrRFi9wrf+M7Q== schacon@mylaptop.local 53 | ---- 54 | 55 | Для докладнішої інструкції по використанню SSH ключів на багатьох операційних системах, дивіться посібник GitHub щодо SSH ключів за адресою https://help.github.com/articles/generating-ssh-keys[]. 56 | -------------------------------------------------------------------------------- /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 | Шар асоціативної файлової системи неймовірно крутий, тож ми охопимо його першим у цьому розділі; потім ви дізнаєтеся про механізми передачі та завдання з обслуговування репозиторія, з якими вам можете знадобитися коли-небудь мати справу. 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 на низькому рівні має спростити розуміння чому він робить те, що робить, а також дозволяє створювати власні інструменти та допоміжні скрипти для забезбечення вашого особистого процесу роботи. 39 | 40 | Git, як файлова система з адресованим вмістом, -- дуже потужний засіб, який ви легко можете використовувати як СКВ і навіть більше. 41 | Ми сподіваємося ви зможете використовувати здобуті знання про нутрощі Git для реалізації свого власного застосування цієї технології та почувати себе комфортно, користуючись Git просунутими способами. 42 | -------------------------------------------------------------------------------- /ch09-git-and-other-systems.asc: -------------------------------------------------------------------------------- 1 | [[ch09-git-and-other-systems]] 2 | == Git and Other Systems 3 | 4 | Світ не ідеальний. 5 | Зазвичай, ви не зможете швидко перевести будь-який проект, над яким працюєте, на використання Git. 6 | Іноді вам доведеться мати справу з проектами, де використовується інша система контролю версій, хоча вам би й хотілося, щоб це був Git. 7 | У першій частині цього розділу ви дізнаєтесь про способи використання Git в якості клієнта для роботи з проектом, який розміщений в іншій системі. 8 | 9 | В якусь мить ви, можливо, захочете перевести ваш проект на Git. 10 | У другій частині цього розділу ви дізнаєтесь як провести міграцію з деяких поширених систем на Git, а також ознайомитесь з методом, який буде працювати в ситуаціях, коли готових інструментів для міграції не існує. 11 | 12 | === Git як клієнт 13 | 14 | (((Git as a client))) 15 | Git справляє настільки позитивне враження на розробників, що багато з них вигадують способи використання 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 | include::book/09-git-and-other-scms/sections/client-tfs.asc[] 28 | 29 | [[_migrating]] 30 | === Міграція на Git 31 | 32 | (((Migrating to Git))) 33 | Якщо ваш код вже зберігається в іншій системі контролю версій, але ви вирішили почати використовувати Git, вам необхідно так чи інакше здійснити міграцію проекту. 34 | У цій секції описано деякі варіанти імпорту для поширених систем, а потім показано, як розробити власні варіанти імпорту. 35 | Ви дізнаєтесь як імпортувати дані з деякий найбільших професійних систем контролю версій, оскільки вони використовуються більшістю розробників та для них легко знайти якісні інструменти міграції. 36 | 37 | include::book/09-git-and-other-scms/sections/import-svn.asc[] 38 | 39 | include::book/09-git-and-other-scms/sections/import-hg.asc[] 40 | 41 | include::book/09-git-and-other-scms/sections/import-bzr.asc[] 42 | 43 | include::book/09-git-and-other-scms/sections/import-p4.asc[] 44 | 45 | include::book/09-git-and-other-scms/sections/import-tfs.asc[] 46 | 47 | include::book/09-git-and-other-scms/sections/import-custom.asc[] 48 | 49 | === Підсумок 50 | 51 | Ви повинні відчувати себе вільно при використанні Git як клієнта для інших систем контролю версій, чи імпортуючи будь-який із вже створених репозиторіїв у систему Git без втрати даних. 52 | Далі ми розглянемо внутрішню механіку системи Git, відтак ви зможете контролювати кожен байт даних, якщо це буде необхідно. 53 | -------------------------------------------------------------------------------- /ch04-git-on-the-server.asc: -------------------------------------------------------------------------------- 1 | [[ch04-git-on-the-server]] 2 | == Git на сервері 3 | 4 | (((serving repositories))) 5 | Наразі, ви маєте бути в змозі виконувати більшість повсякденних задач, які вам зустрінуться при використанні Git. 6 | Втім, щоб мати можливість співпрацювати за допомогою Git, вам треба мати віддалене сховище Git. 7 | Хоч ви й можете викладати та забирати зміни зі сховищ кожної людини, це не рекомендується, адже так дуже легко заплутатися в тому, хто що робить, якщо не бути дуже обережним. 8 | До того ж, якщо ви бажаєте, щоб ваші колеги мали доступ до сховища навіть коли ваш комп'ютер поза мережею, мати більш надійне спільне сховище зазвичай розумно. 9 | Отже, зазвичай для співпраці з ким-небудь налаштовують проміжне сховище, до якого ви обидва маєте доступ, та викладаєте до і забираєте з нього. 10 | 11 | Запустити Git сервер доволі просто. 12 | 13 | Спершу вам треба обрати протокол, яким ви бажаєте щоб ваш сервер спілкувався. 14 | У першій секції цього розділу ми розповімо про доступні протоколи, переваги та недоліки кожного. 15 | Наступна секція пояснить деякі типові схеми використання цих протоколів та як змусити ваш сервер з ними працювати. 16 | В останній, ми поговоримо про деякі опції хостингу, якщо ви не проти зберігати ваш код на чужому сервері, та не бажаєте мати клопіт зі встановленням та підтримкою вашого власного серверу. 17 | 18 | Якщо вас не цікавить запуск власного серверу, ви можете відразу перейти до останньої секції розділу, щоб побачити деякі варіанти налаштування хостингу та переходити до наступного розділу, де ми розглянемо різноманітні деталі роботи в середовищі розподіленої системи контролю коду. 19 | 20 | Віддалене сховище зазвичай _чисте сховище_ -- сховище Git, що не має робочої теки. 21 | Адже сховище використовується тільки як місце для співпраці, нема підстав мати копію знімку на диску. Там просто дані Git. 22 | Найпростішими словами, чисте сховище містить тільки вміст теки `.git` вашого проекту та більше нічого. 23 | 24 | include::book/04-git-server/sections/protocols.asc[] 25 | 26 | include::book/04-git-server/sections/git-on-a-server.asc[] 27 | 28 | include::book/04-git-server/sections/generating-ssh-key.asc[] 29 | 30 | include::book/04-git-server/sections/setting-up-server.asc[] 31 | 32 | include::book/04-git-server/sections/git-daemon.asc[] 33 | 34 | include::book/04-git-server/sections/smart-http.asc[] 35 | 36 | include::book/04-git-server/sections/gitweb.asc[] 37 | 38 | include::book/04-git-server/sections/gitlab.asc[] 39 | 40 | include::book/04-git-server/sections/hosted.asc[] 41 | 42 | === Підсумок 43 | 44 | У вас декілька варіантів, як отримати працююче віддалене Git сховище, щоб співпрацювати з іншими або надати доступ до своєї праці. 45 | Використання власного серверу дає вам повний контроль та дозволяє налаштовувати ваш власний мережевий екран (firewall), проте такий сервер зазвичай вимагає немало вашого часу для налаштування та підтримки. 46 | Якщо ви розмістите ваші дані на сервері хостера, його легко налаштувати та підтримувати. Проте, вам доведеться зберігати код на чужому сервері, та деякі організації цього не дозволяють. 47 | 48 | Має бути доволі просто визначити, яке рішення чи комбінація рішень влаштовують вас або вашу організацію. 49 | -------------------------------------------------------------------------------- /book/preface_schacon.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Передмова від Скота Чакона 3 | 4 | Ласкаво просимо до другого видання Pro Git. 5 | Перше видання було опубліковано близько чотирьох років тому. 6 | Відтоді багато чого змінилось, але важливі речі залишились незмінними. 7 | Тим часом, поки більшість команд та понять залишаються актуальними сьогодні, оскільки команда ядра Git фантастична в плані збереження зворотної сумісності, стались значні доповнення та зміни в навколишньому оточенні Git. 8 | Друге видання цієї книги призначено описати ці зміни та оновити книжку, щоб вона могла бути більш корисною для нового користувача. 9 | 10 | Коли я писав перше видання, Git ще був складним для використання і ледь прийнятним інструментом для хакерів. 11 | Він починав набирати обертів у деяких спільнотах, але ще навіть близько не досяг тієї всюдисущості яку має сьогодні. 12 | Відтоді, майже кожна спільнота відкритого коду прийняла його. 13 | Git зробив неймовірний прогрес на Windows, в різноманітті графічних користувацьких інтерфейсів до нього для всіх платформ, в підтримці IDE і у використанні для бізнесу. 14 | Pro Git чотири роки тому не знав ні про що з цього. 15 | Одна з головних цілей нового видання це додати в нього опис усіх цих нових меж в Git спільноті. 16 | 17 | Спільнота відкритого коду використовуючи Git також отримала піднесення. 18 | Коли я вперше сів писати книгу близько п'яти років тому (видання першої версії потребувало певного часу), я лише розпочав працювати в дуже маловідомій компанії, де розробляв сайт для розгортання (hosting) Git під назвою GitHub. 19 | На час публікації було близько декількох тисяч людей, що використовували сайт, і лише четверо нас, хто підтримував його. 20 | Під час написання цього вступу, GitHub анонсував наш 10 мільйонний проект, та близько 5 мільйонів зареєстрованих облікових записів і коло 230 працівників. 21 | Подобається вам це чи ні, GitHub сильно змінив ділянки спільноти відкритого коду, що навряд чи було можливо, коли я сів писати перше видання. 22 | 23 | Я написав невеличку секцію в оригінальній версії Pro Git про GitHub, як приклад сайту розгортання Git, з яким мені ніколи не було комфортно. 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 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/zsh.asc: -------------------------------------------------------------------------------- 1 | === Git у Zsh 2 | 3 | (((zsh)))(((tab completion, zsh)))(((shell prompts, zsh))) 4 | Zsh також постачає бібліотеку доповнювання для Git. 5 | Щоб скористатися нею, просто виконайте `autoload -Uz compinit && compinit` зі свого `.zshrc`. 6 | Інтерфейс Zsh трохи функціональніший за той, що в Bash: 7 | 8 | [source,console] 9 | ---- 10 | $ git che 11 | check-attr -- display gitattributes information (відобразити інформацію gitattributes) 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, їхніми аргументами, та іменами речей всередині репозиторія (на кшталт посилань чи віддалених сховищ), а також назв файлів та всіх речей, які Zsh знає як доповнювати. 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.) 38 | Виглядає він схоже на наступне: 39 | 40 | .Налаштований запит `zsh`. 41 | image::images/zsh-prompt.png[Налаштований запит `zsh`.] 42 | 43 | Задля докладнішої інформації про vcs_info, зверніться до його документації 44 | в довідці `zshcontrib(1)` 45 | або онлайн за адресою http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. 46 | 47 | Instead of vcs_info, you might prefer the prompt customization script that ships with Git, called `git-prompt.sh`; see https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh[] for details. 48 | `git-prompt.sh` is compatible with both Bash and Zsh. 49 | 50 | Zsh настільки могутній, що існують цілі фреймворки, присвячені його поліпшенню. 51 | Один з них називається "oh-my-zsh", та його можна знайти за адресою https://github.com/robbyrussell/oh-my-zsh[]. 52 | Система додатків oh-my-zsh має потужне доповнення git, а також має різноманітні "теми" запитів, багато з яких відображають дані керування версіями. 53 | <> -- це лише один з прикладів того, що може бути зроблено в цій системі. 54 | 55 | [[oh_my_zsh_git]] 56 | .Приклад теми oh-my-zsh. 57 | image::images/zsh-oh-my.png[Приклад теми oh-my-zsh.] 58 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/powershell.asc: -------------------------------------------------------------------------------- 1 | [[_git_powershell]] 2 | === Git у Powershell 3 | 4 | (((powershell)))(((tab completion, powershell)))(((shell prompts, powershell))) 5 | (((posh-git))) 6 | Стандартний термінал командного рядку на Windows (`cmd.exe`) не дуже здатний на доладне використання Git, проте, якщо ви використовуєте Powershell, то вам пощастило. 7 | Пакет під назвою Posh-Git (https://github.com/dahlbyk/posh-git[]) надає потужні можливості автодоповнювання, а також поліпшений командний запит, щоб допомогти вам спостерігати за останнім статусом репозиторія. 8 | Він виглядає так: 9 | 10 | .Powershell з Posh-git. 11 | image::images/posh-git.png[Powershell з Posh-git.] 12 | 13 | ==== Встановлення 14 | ===== Перед запуском 15 | Перед використанням скриптів PowerShell вам потрібно встановити локальний `ExecutionPolicy` у значення `RemoteSigned` (взагалі-то будь-яке значення крім `Undefined` чи `Restricted`). Якщо вибрати `AllSigned` замість `RemoteSigned`, то й локальні скрипти (тобто ваші власні) потребуватимуть підпису, щоб бути виконаними. У випадку `RemoteSigned`, лише скрипти, що в них `ZoneIdentifief` встановлено у `Internet` (тобто вони були завантажені з мережі) матимуть бути з підписом, решта -- ні. 16 | Якщо ви адміністратор і бажаєте встановити це значення для всіх користувачів на машині, використайте "`-Scope LocalMachine`". 17 | Якщо ви звичайний користувач без прав адміністратора, використайте "`-Scope CurrentUser`", щоб це налаштування стосувалося лише вас. 18 | Докладніше про `PowerShell Scopes`: (https://technet.microsoft.com/de-de/library/hh847849.aspx[]) 19 | Докладніше про `PowerShell ExecutionPolicy`: (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[]) 20 | 21 | [source,powershell] 22 | ----- 23 | > Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force 24 | ----- 25 | 26 | ===== Галерея PowerShell 27 | Якщо у вас принаймні PowerShell 5 чи PowerShell 4 з встановленим менеджером пакунків, ви можете його використати, щоб отримати Posh-Git. 28 | Докладніше про вимоги: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[]. 29 | [source,powershell] 30 | ----- 31 | > Update-Module PowerShellGet -Force 32 | > Install-Module Posh-Git -Scope LocalMachine 33 | ----- 34 | Якщо ви хочете встановити Posh-Git лише для поточного користувача, а не глобально, використайте натомість "`-Scope CurrentUser`". 35 | 36 | ===== Оновлення запиту PowerShell 37 | Щоб у вашому запиті відображалася інформація git, треба імпортувати posh-git. Щоб це відбувалося автоматично, додайте команду `import` до скрипту `$profile`. Цей скрипт виконується щоразу, як ви відкриваєте новий PowerShell. 38 | Памʼятайте, що є декілька скриптів `$profile`. Наприклад, один для консолі, окремий для ISE. 39 | [source,powershell] 40 | ----- 41 | > 'Import-Module Posh-Git' | Out-File -Append -Encoding default -FilePath $profile 42 | ----- 43 | 44 | ===== З джерельного коду 45 | Просто завантажте реліз Posh-Git з (https://github.com/dahlbyk/posh-git[]) та розпакуйте його до теки `WindowsPowershell`. 46 | Тоді відкрийте Powershell як адміністратор та виконайте: 47 | 48 | [source,powershell] 49 | ----- 50 | > cd ~\Documents\WindowsPowerShell\Module\posh-git 51 | > .\install.ps1 52 | ----- 53 | 54 | Це додасть потрібний рядок до файлу `profile.ps1`, та posh-git стане активним наступного разу, коли ви відкриєте його. 55 | -------------------------------------------------------------------------------- /book/04-git-server/sections/gitweb.asc: -------------------------------------------------------------------------------- 1 | === GitWeb 2 | 3 | (((serving repositories, GitWeb)))(((GitWeb))) 4 | Тепер, коли у вас є базовий доступ до вашого проекту з правом читання та з правами на читання та запис, можливо ви бажаєте налаштувати простий візуалізатор через веб. 5 | Git поставляє CGI скрипт GitWeb, який іноді для цього використовують. 6 | 7 | [[gitweb]] 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` не з lighttpd сервером, передайте бажане ім’я серверу опції `--httpd`.(((git commands, 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 для цього скрипту, що можна зробити за допомогою VirtualHost: 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 | Як і попередній CGI скрипт, GitWeb може працювати на будь-якому здатному на CGI або Perl веб сервері. Якщо ви хочете використовувати щось інше, налаштування має бути легким. 70 | Тепер ви можете зайти до `http://gitserver/` та побачити ваші сховища. 71 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/go-git.asc: -------------------------------------------------------------------------------- 1 | === go-git 2 | 3 | (((go-git)))((("Go"))) 4 | In case you want to integrate Git into a service written in Golang, there also is a pure Go library implementation. 5 | This implementation does not have any native dependencies and thus is not prone to manual memory managemen errors. 6 | It is also transparent for the standard Golang performance analysis tooling like CPU, Memory profilers, race detector, etc. 7 | 8 | go-git is focused on extensibility, compatibility and supports most of the plumbing APIs, which is documented at https://github.com/src-d/go-git/blob/master/COMPATIBILITY.md[]. 9 | 10 | Here is a basic example of using Go APIs: 11 | 12 | [source, go] 13 | ----- 14 | import "gopkg.in/src-d/go-git.v4" 15 | 16 | r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ 17 | URL: "https://github.com/src-d/go-git", 18 | Progress: os.Stdout, 19 | }) 20 | ----- 21 | 22 | As soon as you have a `Repository` instance, you can access information and perform mutations on it: 23 | 24 | 25 | [source, go] 26 | ----- 27 | // retrieves the branch pointed by HEAD 28 | ref, err := r.Head() 29 | 30 | // get the commit object, pointed by ref 31 | commit, err := r.CommitObject(ref.Hash()) 32 | 33 | // retrieves the commit history 34 | history, err := commit.History() 35 | 36 | // iterates over the commits and print each 37 | for _, c := range history { 38 | fmt.Println(c) 39 | } 40 | ----- 41 | 42 | 43 | ==== Advanced Functionality 44 | 45 | go-git has few notable advanced features, one of which is a pluggable storage system, which is similar to Libgit2 backends. 46 | The default implementation is in-memory storage, which is very fast. 47 | 48 | [source, go] 49 | ----- 50 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ 51 | URL: "https://github.com/src-d/go-git", 52 | }) 53 | ----- 54 | 55 | Pluggable storage provides many interesting options. For instance, https://github.com/src-d/go-git/tree/master/_examples/storage[] allows you to store references, objects, and configuration in an Aerospike database. 56 | 57 | Another feature is a flexible filesystem abstraction. 58 | Using https://godoc.org/github.com/src-d/go-billy#Filesystem[] it is easy to store all the files in different way i.e by packing all of them to a single archive on disk or by keeping them all in-memory. 59 | 60 | Another advanced use-case includes a fine-tunable HTTP client, such as the one found at https://github.com/src-d/go-git/blob/master/_examples/custom_http/main.go[]. 61 | 62 | [source, go] 63 | ----- 64 | customClient := &http.Client{ 65 | Transport: &http.Transport{ // accept any certificate (might be useful for testing) 66 | TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 67 | }, 68 | Timeout: 15 * time.Second, // 15 second timeout 69 | CheckRedirect: func(req *http.Request, via []*http.Request) error { 70 | return http.ErrUseLastResponse // don't follow redirect 71 | }, 72 | } 73 | 74 | // Override http(s) default protocol to use our custom client 75 | client.InstallProtocol("https", githttp.NewClient(customClient)) 76 | 77 | // Clone repository using the new client if the protocol is https:// 78 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) 79 | ----- 80 | 81 | 82 | ==== Further Reading 83 | 84 | A full treatment of go-git's capabilities is outside the scope of this book. 85 | If you want more information on go-git, there's API documentation at https://godoc.org/gopkg.in/src-d/go-git.v4[], and a set of usage examples at https://github.com/src-d/go-git/tree/master/_examples[]. 86 | -------------------------------------------------------------------------------- /book/04-git-server/sections/smart-http.asc: -------------------------------------------------------------------------------- 1 | === Розумний HTTP 2 | 3 | (((serving repositories, HTTP))) 4 | Ми вже маємо авторизований доступ через SSH та неавторизований через `git://`, проте існує ще протокол, котрий може працювати в обох варіантах одночасно. 5 | Налаштування Розумного HTTP потрибує лише ввімкнути CGI скрипт, що входить в пакет Git під назвою `git-http-backent`, на вашому сервері.(((git commands, "http-backend"))) 6 | Цей CGI буде читати шлях та заголовки, що їх відправили `git fetch` чи `git push` до HTTP 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`. Вони всі необхідні для правильної роботи розумного HTTP. 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` і якимось чином зробити записи авторизованими, можливо за допомогою блоку Auth ось так: 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-backent`, який може відправляти та приймати дані Git через HTTP. 66 | Він не реалізує авторизацію сам, проте авторизацію легко контролювати на рівні веб серверу, що його викликає. 67 | Це дозволяє майже кожен веб сервер, що підтримує CGI, отже використовуйте той, що ви найкраще знаєте. 68 | 69 | [NOTE] 70 | ==== 71 | За докладнішою інформацією щодо конфігурації авторизації в Apache, дивіться документацію Apache за адресою: http://httpd.apache.org/docs/current/howto/auth.html[] 72 | ==== 73 | -------------------------------------------------------------------------------- /book/04-git-server/sections/git-daemon.asc: -------------------------------------------------------------------------------- 1 | === Демон Git 2 | 3 | (((serving repositories, git protocol))) 4 | Тепер встановимо демон, що надає доступ до сховищ за допомогою протоколу ``Git''. 5 | Це поширений вибір для швидкого, неавторизовоного доступу до ваших даних Git. 6 | Пам'ятайте, що оскільки він не авторизований, все до чого ви надаєте доступ за допомогою цього протоколу стає загальнодоступним у його мережі. 7 | 8 | Якщо сервер працює за межами вашого мережевого екрану, він має використовуватись виключно для проектів, що є загальнодоступними для світу. 9 | Якщо ж сервер працює в межах мережевого екрану, ви можете використовувати його для проектів, до яких велика кількість людей або комп’ютерів (наприклад сервери компіляції чи інтеграції) мають доступ тільки на читання, але ви не хочете додавати ключ SSH для кожного з них. 10 | 11 | У будь-якому разі, протокол Git легко налаштувати. 12 | Вам просто треба виконати цю команду так, щоби вона працювала як демон:(((git commands, daemon))) 13 | 14 | [source,console] 15 | ---- 16 | $ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ 17 | ---- 18 | 19 | Опція `--reuseaddr` дозволяє серверу себе перезапускати без очікування, доки старі з’єднання спливуть (time out), а опція `--base-path` дозволяє клонувати сховища за допомогою шляху відносно значення цієї опції замість повного шляху. 20 | Якщо у вас працює мережевий екран, ви також маєте дозволити передачу через порт 9418 машини з Git сервером. 21 | 22 | Запустити цю команду як демон можна декількома шляхами, в залежності від вашої операційної системи. 23 | 24 | Найпоширенішою у сучасних дистрибутивах Linux системою запуску є `systemd`, отже варто її використати для цього. 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 | Ubuntu до версії LTS 14.04 використовувала службу Upstart. 56 | Для її конфігурації, треба додати до файлу 57 | 58 | [source,console] 59 | ---- 60 | /etc/init/local-git-daemon.conf 61 | ---- 62 | 63 | такий скрипт: 64 | 65 | [source,console] 66 | ---- 67 | start on startup 68 | stop on shutdown 69 | exec /usr/bin/git daemon \ 70 | --user=git --group=git \ 71 | --reuseaddr \ 72 | --base-path=/srv/git/ \ 73 | /srv/git/ 74 | respawn 75 | ---- 76 | 77 | З причин безпеки, ми заохочуємо вас запускати цей демон тільки з користувача, що має доступ тільки на читання сховищ -- це легко зробити, створивши нового користувача 'git-ro' та запустивши демон з нього. 78 | Для простоти ми просто запустимо його з нашого користувача `git`, з якого працює і `git-shell`. 79 | 80 | Коли ви перезавантажите свою машину, демон Git автоматично запуститься та буде сам перезапускатися, якщо він впаде. 81 | Щоб запустити його без перезапуску, ви можете виконати: 82 | 83 | [source,console] 84 | ---- 85 | $ initctl start local-git-daemon 86 | ---- 87 | 88 | На інших системах, ви можете використати `xinetd`, скрипт у теці системи `sysvinit`, чи щось інше -- головне щоб команда запускалась як демон, та можна було перевіряти її статус. 89 | 90 | Далі, вам треба сказати Git, до яких сховищ дозволяти неавторизований доступ за допомогою сервера Git. 91 | Ви можете зробити це в кожному сховищі за допомогою створення файлу під назвою `git-daemon-export-ok`. 92 | 93 | [source,console] 94 | ---- 95 | $ cd /path/to/project.git 96 | $ touch git-daemon-export-ok 97 | ---- 98 | 99 | Присутність цього файлу каже Git, що він може роздавати цей проект без авторизації. 100 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/getting-a-repository.asc: -------------------------------------------------------------------------------- 1 | [[_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 commands, 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 'Початкова версія проєкту' 51 | ---- 52 | 53 | Ми розповімо що саме роблять ці команди за хвилину. 54 | Наразі, у вас є Git репозиторій з декількома відстежуваними файлами та першим комітом. 55 | 56 | [[_git_cloning]] 57 | ==== Клонування існуючого репозиторія 58 | 59 | Якщо ви бажаєте отримати копію існуючого Git сховища -- наприклад, проєкту, в якому ви хочете прийняти участь -- вам потрібна команда `git clone`. 60 | Якщо ви знайомі з іншими СКВ, наприклад Subversion, ви помітите, що команда називається "clone" (клонувати), а не "checkout" (перевірити). 61 | Це важлива відмінність -- замість отримання просто робочої копії, Git отримує повну копію майже всіх даних, що є у сервера. 62 | Кожна версія кожного файлу в історії проєкту витягується автоматично, коли ви виконуєте `git clone`. 63 | Насправді, якщо щось станеться з диском вашого серверу, ви зазвичай можете використати майже будь-який з клонів на будь-якому клієнті щоб повернути сервер до стану на момент клонування (ви можете втратити деякі серверні хуки (hook), проте усі дані під контролем версій повернуться – дивіться <> задля детальнішої інформації). 64 | 65 | Щоб клонувати репозиторій треба використати команду `git clone `.(((git commands, clone))) 66 | Наприклад, якщо ви бажаєте зробити клон бібліотеки Git `libgit2`, ви можете зробити це так: 67 | 68 | [source,console] 69 | ---- 70 | $ git clone https://github.com/libgit2/libgit2 71 | ---- 72 | 73 | Це створить теку під назвою `libgit2`, проведе ініціалізацію піддиректорії `.git`, стяне всі дані для цього репозиторія, та приведе директорію до стану останньої версії. 74 | Якщо ви зайдете до щойно створеної директорії `libgit2`, ви побачите, що всі файли проєкту на місці, готові для використання. 75 | 76 | Якщо ви бажаєте зробити клон репозиторія в директорію з іншою назвою, ви можете передати її як додатковий параметр: 77 | 78 | [source,console] 79 | ---- 80 | $ git clone https://github.com/libgit2/libgit2 mylibgit 81 | ---- 82 | 83 | Ця команда робить те саме, що й попередня, тільки цільова директорія називається `mylibgit`. 84 | 85 | Git має декілька різних протоколів передачі даних, які ви можете використовувати. 86 | Попередній приклад використовує протокол `https://`, проте ви також можете побачити `git://` або `user@server:шлях/до/репозиторія.git`, що використовує SSH протокол. 87 | <> познайомить вас з усіма можливими варіантами доступу до Git репозиторія, які може мати сервер, та "за" та "проти" кожного. 88 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-p4.asc: -------------------------------------------------------------------------------- 1 | [[_perforce_import]] 2 | ==== Perforce 3 | 4 | (((Perforce)))(((Importing, from Perforce))) 5 | Наступна система, яку ви розглянете для імпорту -- Perforce. 6 | Як ми вже обговорювали, існує два способи співпраці Git з Perforce: git-p4 та Perforce Git Fusion. 7 | 8 | ===== Perforce Git Fusion 9 | 10 | Git Fusion робить цей процес зовсім безболісним. 11 | Просто встановіть налаштування вашого проекту, відображення користувачів та гілки за допомогою файлу конфігурації (як описано в <<_p4_git_fusion>>) та зробіть клон репозиторія. 12 | Git Fusion створить для вас те, що виглядає як рідний Git репозиторій, який вже готовий для надсилання до серверу Git, якщо бажаєте. 13 | Ви можете навіть використовувати Perforce як сервер для Git, якщо хочете. 14 | 15 | [[_git_p4]] 16 | ===== Git-p4 17 | 18 | Git-p4 також може бути інструментом для імпортування. 19 | Для прикладу, ми імпортуємо проект Jam з Perforce Public Depot. 20 | Щоб налаштувати клієнта, ви маєте експортувати змінну середовища P4PORT, щоб вона вказувала на депо Perforce: 21 | 22 | [source,console] 23 | ---- 24 | $ export P4PORT=public.perforce.com:1666 25 | ---- 26 | 27 | [NOTE] 28 | ==== 29 | Щоб розуміти що коїться, вам потрібно мати депо Perforce, з яким можна зʼєднатися. 30 | Ми використовуємо публічне депо на public.perforce.com, проте ви можете використати будь-яке депо, що якого маєте доступ. 31 | ==== 32 | 33 | (((git commands, p4))) 34 | Виконайте команду `git p4 clone`, щоб імпортувати проект Jam з сервера Perforce, надайте депо та шлях проетку, а також шлях, до якого ви бажаєте імпортувати проект: 35 | 36 | [source,console] 37 | ---- 38 | $ git-p4 clone //guest/perforce_software/jam@all p4import 39 | Importing from //guest/perforce_software/jam@all into p4import 40 | Initialized empty Git repository in /private/tmp/p4import/.git/ 41 | Import destination: refs/remotes/p4/master 42 | Importing revision 9957 (100%) 43 | ---- 44 | 45 | Саме цей проект має лише одну гілку, проте, якщо у вас декілька гілок, які налаштовані відображенням гілок (або просто набором директорій), то можете використати опцію `--detect-branches` з `git p4 clone`, щоб також імпортувати всі гілки проекту. 46 | Дивіться <<_git_p4_branches>> для трохи детальнішої інформації про це. 47 | 48 | Наразі, ви майже все зробили. 49 | Якщо перейти до директорії `p4import` та виконати `git log`, то ви побачите імпортовану роботу: 50 | 51 | [source,console] 52 | ---- 53 | $ git log -2 54 | commit e5da1c909e5db3036475419f6379f2c73710c4e6 55 | Author: giles 56 | Date: Wed Feb 8 03:13:27 2012 -0800 57 | 58 | Correction to line 355; change to . 59 | 60 | [git-p4: depot-paths = "//public/jam/src/": change = 8068] 61 | 62 | commit aa21359a0a135dda85c50a7f7cf249e4f7b8fd98 63 | Author: kwirth 64 | Date: Tue Jul 7 01:35:51 2009 -0800 65 | 66 | Fix spelling error on Jam doc page (cummulative -> cumulative). 67 | 68 | [git-p4: depot-paths = "//public/jam/src/": change = 7304] 69 | ---- 70 | 71 | Як бачите, `git-p4` залишив ідентифікатор у кожному повідомленні коміту. 72 | Ви можете залишити їх на випадок, якщо вам потрібно буде пізніше послатись на номер зміни Perforce. 73 | Втім, якщо ви бажаєте вилучити ідентифікатор, зараз саме час для цього – перед початком роботи в новому сховищі. 74 | (((git commands, filter-branch))) 75 | Ви можете використати `git filter-branch`, щоб вилучити рядки ідентифікаторів гуртом: 76 | 77 | [source,console] 78 | ---- 79 | $ git filter-branch --msg-filter 'sed -e "/^\[git-p4:/d"' 80 | Rewrite e5da1c909e5db3036475419f6379f2c73710c4e6 (125/125) 81 | Ref 'refs/heads/master' was rewritten 82 | ---- 83 | 84 | Якщо ви виконаєте `git log`, то побачите, що всі суми SHA-1 комітів змінилися, проте рядків `git-p4` більше немає в повідомленнях комітів: 85 | 86 | [source,console] 87 | ---- 88 | $ git log -2 89 | commit b17341801ed838d97f7800a54a6f9b95750839b7 90 | Author: giles 91 | Date: Wed Feb 8 03:13:27 2012 -0800 92 | 93 | Correction to line 355; change to . 94 | 95 | commit 3e68c2e26cd89cb983eb52c024ecdfba1d6b3fff 96 | Author: kwirth 97 | Date: Tue Jul 7 01:35:51 2009 -0800 98 | 99 | Fix spelling error on Jam doc page (cummulative -> cumulative). 100 | ---- 101 | 102 | Ваше імпортоване сховище готове для надсилання до нового сервера Git. 103 | -------------------------------------------------------------------------------- /book/06-github/sections/4-managing-organization.asc: -------------------------------------------------------------------------------- 1 | [[ch06-github_orgs]] 2 | === Керування організацією 3 | 4 | (((GitHub, organizations))) 5 | Крім облікових записів на одного користувача, на GitHub також є так звані Організації. 6 | Як і особисті облікові записи, облікові записи Організацій мають свій простір імен, в якому існують усі їхні проекти, проте багато іншого для них відрізняється. 7 | Ці облікові записи представляють групу людей з сумісним правом власності проектів, та є багато інструментів для керування підгрупами цих людей. 8 | Зазвичай організації використовують для груп з Відкритим Кодом (такі як ``perl'' чи ``rails'') або компаній (такі як ``google'' чи ``twitter''). 9 | 10 | ==== Основи організацій 11 | 12 | Організацію доволі легко створити: просто натисніть на іконку ``+'' у нагорі праворуч на будь-якій сторінці GitHub та виберіть у меню ``New organization'' (нова організація). 13 | 14 | .Елемент меню ``New organization'' (нова організація). 15 | image::images/neworg.png[Елемент меню ``New organization'' (нова організація).] 16 | 17 | Спочатку вам треба назвати вашу організацію та надати поштову адресу, що буде головним контактом групи. 18 | Потім ви можете запросити інших користувачів бути співвласниками облікового запису, якщо бажаєте. 19 | 20 | Виконайте наступні кроки, і невдовзі ви будете власником новенької організації. 21 | Як і особисті облікові записи, організації безкоштовні, якщо все, що ви будете в них зберігати буде відкритим кодом. 22 | 23 | Як власник організації, коли ви робите форк сховища, у вас буде вибір: робити форк у вашому власному просторі імен, чи у просторі імен організації. 24 | Коли ви створюєте нові сховища, ви можете створити їх або під особистим обліковим записом, або під будь-якою організацією, що її власником є ви. 25 | Також ви автоматично будете ``слідкувати'' (`watch`) за всіма сховищами, що ви створили для цих організацій. 26 | 27 | Так само як у <<_personal_avatar>>, ви можете відвантажити аватар для вашої організації щоб трохи додати їй особливості. 28 | Також як і з особистими обліковими записами, у вас є головна сторінка організації, на якій є список усіх ваших сховищ -- її можуть бачити й інші люди. 29 | 30 | Тепер розгляньмо невеликі відмінності облікового запису організації. 31 | 32 | ==== Команди 33 | 34 | Організації пов’язані з окремими людьми через команди, що є простим групуванням окремих облікових записів і сховищ в організації, та ще який доступ ці люди мають у цих сховищах. 35 | 36 | Наприклад, припустімо, що у вашій компанії три сховища: `frontend`, `backend` та `deployscripts`. 37 | Ви бажаєте, щоб ваші розробники HTML/CSS/JavaScript мали доступ до `frontend` та можливо `backend`, а ваші люди з Операційного відділу мали доступ до `backend` та `deployscripts`. 38 | За допомогою команд цього легко досягти без необхідності керувати співпрацівниками для кожного окремого сховища. 39 | 40 | Сторінка Організації має просту панель приладів зі всіма сховищами, користувачами та командами, що належать до цієї організації. 41 | 42 | [[_org_page]] 43 | .Сторінка Організації. 44 | image::images/orgs-01-page.png[] 45 | 46 | Щоб керувати вашими Командами, ви можете натиснути на бокову панель Teams праворуч на сторінці <<_org_page>>. 47 | Тоді ви потрапите до сторінки, на якій ви можете додавати користувачів до команди, додавати сховища до команди та керувати налаштуваннями та рівнем доступу команди. 48 | Кожна команда може мати доступ тільки на читання, доступ на читання та запис або доступ адміністрування до сховищ. 49 | Ви можете змінити рівень, якщо натиснете на кнопку ``Settings'' (налаштування) у <<_team_page>>. 50 | 51 | [[_team_page]] 52 | .Сторінка команди. 53 | image::images/orgs-02-teams.png[] 54 | 55 | Коли ви когось запрошуєте до команди, вони отримають листа, що повідомить їм про запрошення. 56 | 57 | Крім того, `@згадки` команди (такі як `@acmecorp/frontend`) працюють так само, як і для окремих користувачів, крім того, що *всі* користувачі команди підписані на ці повідомлення. 58 | Це корисно, якщо ви бажаєте привернути увагу когось з команди, про те не знаєте, кого саме спитати. 59 | 60 | Користувач може бути в декількох командах, отже не обмежуйте себе тільки командами для контролю рівня доступу. 61 | Команди особливих інтересів, такі як `ux`, `css` чи `refactoring` корисні для деяких видів питань, та інші команди `legal` та `colorblind` для зовсім інших типів. 62 | 63 | ==== Журнал подій 64 | 65 | Організації також надають власникам доступ до всієї інформації про те, що діялося в організації. 66 | Ви можете перейти до вкладки 'Audit Log' ('Журнал Подій') та побачити всі події, які відбувалися на рівні організації, хто та де в світі їх учинив. 67 | 68 | [[_the_audit_log]] 69 | .Журнал подій. 70 | image::images/orgs-03-audit.png[] 71 | 72 | Ви також можете фільтрувати за типами подій, за місцями або людьми. 73 | -------------------------------------------------------------------------------- /book/introduction.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Вступ 3 | 4 | Ви збираєтеся витратити кілька годин свого життя на читання про Git. Отже, викроїмо хвильку, щоб пояснити, що для вас тут приготовлено. Нижче подано поверхневий огляд всіх десяти розділів та трьох додатків цієї книги. 5 | 6 | У *Розділі 1*, ми збираємося оглянути системи контролю версій (СКВ) та нетехнічні основи Git, просто що таке Git, чому він з'явився (на тлі, вже й так переповненому іншими СКВ), що вирізняє Git та чому так багато людей ним користуються. Потім розкажемо як завантажити Git та налаштувати вперше, якщо ви цього ще не зробили. 7 | 8 | У *Розділі 2*, пройдемося по основах користування Git -- це вам згодиться у 80% випадків з найпоширеніших задач. Після прочитання цього розділу, ви зможете клонувати репозиторій, бачити що відбувалося в історії проекту, змінювати файли, та долучати свої зміни. Якщо після цього книга спопелиться в цей момент, ви вже будете в змозі з неабиякою користю вживати Git, доки не знайдете нову копію книги. 9 | 10 | *Розділ 3* про модель гілкоутворення в Git, яку часто називають вбивчою особливістю Git. Тут ви дізнаєтеся що насправді вирізняє Git від йому подібних. По закінченню, у вас може виникнути бажання побути наодинці та поміркувати як ви жили до того, як ви познайомилися з гілками Git. 11 | 12 | *Розділ 4* описує Git на сервері. Це для тих з вас, хто хоче налаштувати Git всередині організації або свій персональний сервер. Також розглянемо варіанти розміщення (hosting), якщо ви надаєте перевагу, щоб хтось для вас займався розгортанням. 13 | 14 | *Розділ 5* детально пройдеться по різних розподілених процесах роботи та як їх досягнути за допомогою Git. Як розквитаєтеся з цим розділом, то зможете, з вправністю експерта, працювати з кількома сховищами, користуватися Git-ом через електронну пошту та хвацько жонглювати низкою віддалених гілок та латками зі змінами. 15 | 16 | *Розділ 6* покриває деталі розміщення в GitHub та його інструментарій. Ми розглянемо реєстрацію облікового запису, управління ним, створення та використання Git репозиторіїв, типові схеми долучання до чиїхось проектів, та приймання наробків у свої, програмний інтерфейс GitHub та багато дрібних порад, які мали б спростити ваші життя. 17 | 18 | *Розділ 7* про складніші команди Git. Тут дізнаєтесь про такі теми як опановування страшної команди 'reset', залучення двійкового пошуку для виявлення вад, зміну історії, докладно про вибір ревізій, та багато іншого. Цей розділ доповнить ваші знання про Git, щоб ви були дійсно майстром Git. 19 | 20 | *Розділ 8* про підлаштування Git середовища. Включно з встановленням гаків (hook scripts), які змушують, чи спонукають, до використання своїх правил роботи з Git, а також використання конфігураційних налаштувань середовища для того, щоб робота з Git була такою, як вам це пасує. Також покриємо побудову власних скриптів, щоб запровадити власні нетипові вимоги-обмеження до процесу створення комітів. 21 | 22 | *Розділ 9* розповідає як мати справу з Git разом з іншими СКВ. Зокрема, про використання Git у світі Subversion (SVN) та конвертацію з інших СКВ до Git. Низка організацій досі використовує SVN та не збирається це змінювати, але ви вже вивчили про надзвичайну силу Git і цей розділ показує як з цим справлятися, якщо вам все-таки потрібно використовувати SVN сервер. Ми також розкажемо як імпортувати проекти з кількох різних систем, якщо раптом ви переконали всіх зробити такий крок. 23 | 24 | *Розділ 10* копається в непроглядних, але красивих нетрях внутрішнього світу Git. Тепер, ви вже знаєте все про Git та можете ним володіти з граціозною силою, тому, час перейти на дискусію про те, як Git зберігає свої об'єкти, його об'єктну модель, детальніше про пакфайли (packfiles), протоколи сервера, та інше. Ми посилатимемося до цього розділу впродовж цілої книги для того, щоб ви, при бажанні, могли заглибитися в ту чи іншу тему; але якщо ви, як і ми, полюбляєте занурюватися в технічні деталі, можете розпочати книгу з 10 розділу. Вам вирішувати. 25 | 26 | У *Додатку А* ми розглянемо приклади використання Git в кількох специфічних середовищах. Ми охоплюємо ряд графічних інтерфейсів та розробницьких середовищ, які, можливо, є у вас в наявності та якими ви можете захотіти користуватися. Якщо вас цікавить огляд користування Git у вашій оболонці розробки, Visual Studio чи Eclipse, -- загляньте сюди. 27 | 28 | У *Додатку B* ми оглядаємо скриптування та розширення Git за допомогою таких бібліотек, як libgit2 та JGit. Якщо ви зацікавлені в написанні власних складних та швидких допоміжних інструментів та вам потрібeн низькорівневий доступ до Git, ось де ви зможете ознайомитися як ця кухня виглядає. 29 | 30 | Накінець, у *Додатку C* ми проходимося окремо по кожній з основних команд Git та оглядаємо де та що ми з ними робили в книзі. Користуйтеся цим для того, щоб віднайти де в книзі зустрічалася та чи інша команда. 31 | 32 | Розпочнімо. 33 | -------------------------------------------------------------------------------- /status.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "uk", 3 | "language": "Ukrainian", 4 | "maintainers": ["tbudurovych", "hedrok"], 5 | "files": { 6 | "01-introduction": { 7 | "1-introduction.asc": 100, 8 | "sections/about-version-control.asc": 100, 9 | "sections/basics.asc": 100, 10 | "sections/command-line.asc": 100, 11 | "sections/first-time-setup.asc": 100, 12 | "sections/help.asc": 100, 13 | "sections/history.asc": 100, 14 | "sections/installing.asc": 100 15 | }, 16 | "02-git-basics": { 17 | "1-git-basics.asc": 100, 18 | "sections/aliases.asc": 100, 19 | "sections/getting-a-repository.asc": 100, 20 | "sections/recording-changes.asc": 100, 21 | "sections/remotes.asc": 100, 22 | "sections/tagging.asc": 100, 23 | "sections/undoing.asc": 100, 24 | "sections/viewing-history.asc": 100 25 | }, 26 | "03-git-branching": { 27 | "1-git-branching.asc": 100, 28 | "sections/basic-branching-and-merging.asc": 100, 29 | "sections/branch-management.asc": 100, 30 | "sections/nutshell.asc": 100, 31 | "sections/rebasing.asc": 100, 32 | "sections/remote-branches.asc": 100, 33 | "sections/workflows.asc": 100 34 | }, 35 | "04-git-server": { 36 | "1-git-server.asc": 100, 37 | "sections/generating-ssh-key.asc": 100, 38 | "sections/git-daemon.asc": 100, 39 | "sections/git-on-a-server.asc": 100, 40 | "sections/gitlab.asc": 100, 41 | "sections/gitweb.asc": 100, 42 | "sections/hosted.asc": 100, 43 | "sections/protocols.asc": 100, 44 | "sections/setting-up-server.asc": 100, 45 | "sections/smart-http.asc": 100 46 | }, 47 | "05-distributed-git": { 48 | "1-distributed-git.asc": 100, 49 | "sections/contributing.asc": 100, 50 | "sections/distributed-workflows.asc": 100, 51 | "sections/maintaining.asc": 100 52 | }, 53 | "06-github": { 54 | "1-github.asc": 100, 55 | "sections/1-setting-up-account.asc": 100, 56 | "sections/2-contributing.asc": 100, 57 | "sections/3-maintaining.asc": 100, 58 | "sections/4-managing-organization.asc": 100, 59 | "sections/5-scripting.asc": 100 60 | }, 61 | "07-git-tools": { 62 | "1-git-tools.asc": 100, 63 | "sections/advanced-merging.asc": 100, 64 | "sections/bundling.asc": 100, 65 | "sections/credentials.asc": 100, 66 | "sections/debugging.asc": 100, 67 | "sections/interactive-staging.asc": 100, 68 | "sections/replace.asc": 100, 69 | "sections/rerere.asc": 100, 70 | "sections/reset.asc": 100, 71 | "sections/revision-selection.asc": 100, 72 | "sections/rewriting-history.asc": 100, 73 | "sections/searching.asc": 100, 74 | "sections/signing.asc": 100, 75 | "sections/stashing-cleaning.asc": 100, 76 | "sections/submodules.asc": 100, 77 | "sections/subtree-merges.asc": 100 78 | }, 79 | "08-customizing-git": { 80 | "1-customizing-git.asc": 100, 81 | "sections/attributes.asc": 100, 82 | "sections/config.asc": 100, 83 | "sections/hooks.asc": 100, 84 | "sections/policy.asc": 100 85 | }, 86 | "09-git-and-other-scms": { 87 | "1-git-and-other-scms.asc": 100, 88 | "sections/client-hg.asc": 100, 89 | "sections/client-p4.asc": 100, 90 | "sections/client-svn.asc": 100, 91 | "sections/client-tfs.asc": 100, 92 | "sections/import-custom.asc": 100, 93 | "sections/import-hg.asc": 100, 94 | "sections/import-p4.asc": 100, 95 | "sections/import-svn.asc": 100, 96 | "sections/import-tfs.asc": 100 97 | }, 98 | "10-git-internals": { 99 | "1-git-internals.asc": 100, 100 | "sections/environment.asc": 100, 101 | "sections/maintenance.asc": 100, 102 | "sections/objects.asc": 100, 103 | "sections/packfiles.asc": 100, 104 | "sections/plumbing-porcelain.asc": 100, 105 | "sections/refs.asc": 100, 106 | "sections/refspec.asc": 100, 107 | "sections/transfer-protocols.asc": 100 108 | }, 109 | "A-git-in-other-environments": { 110 | "1-git-other-environments.asc": 100, 111 | "sections/bash.asc": 100, 112 | "sections/eclipse.asc": 100, 113 | "sections/guis.asc": 100, 114 | "sections/powershell.asc": 100, 115 | "sections/visualstudio.asc": 100, 116 | "sections/zsh.asc": 100 117 | }, 118 | "B-embedding-git": { 119 | "1-embedding-git.asc": 100, 120 | "sections/command-line.asc": 100, 121 | "sections/jgit.asc": 100, 122 | "sections/libgit2.asc": 100 123 | }, 124 | "C-git-commands": { 125 | "1-git-commands.asc": 100 126 | } 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /book/03-git-branching/sections/workflows.asc: -------------------------------------------------------------------------------- 1 | === Процеси роботи з гілками 2 | 3 | Тепер, коли ви навчилися основам роботи з гілками, що ж з ними можна чи потрібно робити далі? 4 | В цьому розділі ми розкажемо про найбільш вживані підходи до роботи з гілками, які дозволяє така легка система галуження Git, а ви можете вирішити чи втілювати вам їх у свій робочий цикл. 5 | 6 | ==== Довго-триваючі гілки 7 | 8 | (((branches, long-running))) 9 | Оскільки Git використовує просте триточкове злиття, то зливання одної гілки в іншу протягом тривалого часу зазвичай не є складною задачею. 10 | Це означає, що ви можете мати кілька активних гілок та використовувати їх для різних стадій вашого робочого циклу; можете періодично зливати з одної гілки в іншу. 11 | 12 | Багато розробників підтримують з Git такий процес, коли тільки в `master` є стабільна версія коду -- найімовірніше того, що був чи буде запроваджений у виробництво. 13 | Також вони мають паралельні гілки `develop` чи `next`, які використовуються для тестування стабільності -- це не обов'язково постійно стабільні гілки, але, як тільки вони стабілізовуються, їх можна зливати з `master`. 14 | Також практикується мати тематичні гілки (коротко-термінові, як `iss53`, що ви створили раніше) та зливати їх, коли вони готові, проходять всі тести, та не привнесуть нових помилок. 15 | 16 | Насправді, ми маємо справу з вказівниками, що рухаються вздовж лінії комітів, які ви додаєте. 17 | Стабільні гілки нижче по лінії ваших комітів, а "`дослідницькі`" гілки -- ті, що містять нові зміни, випереджають їх. 18 | 19 | .Лінійне представлення прогресування стабільності в гілках 20 | image::images/lr-branches-1.png[Лінійне представлення прогресування стабільності в гілках.] 21 | 22 | Взагалі простіше собі уявити цей процес як елеватор, коли набори комітів прямують до більш стабільних гілок, де вони повністю тестуються. 23 | 24 | [[lrbranch_b]] 25 | .``Елеваторне'' представлення прогресування стабільності в гілках 26 | image::images/lr-branches-2.png[``Елеваторне'' представлення прогресування стабільності в гілках.] 27 | 28 | Ви можете мати декілька рівнів стабільності. 29 | На більших проектах також практикують мати `proposed` чи `pu` (proposed updates) гілки, де зберігаються гілки, що вже інтегровані, але не готові бути перенесені в основні гілки `next` чи `master`. 30 | Ідея таких гілок в тому, що ваші гілки мають кілька рівнів стабільності і коли вони досягають більш стабільного рівня, їх зливають до гілок, котрі вище над ними. 31 | Зверніть увагу, що мати кілька довготривалих гілок не обов'язково, проте буває корисним, особливо коли маєте справу з великими чи складними проектами. 32 | 33 | [[_topic_branch]] 34 | ==== Тематичні гілки 35 | 36 | (((branches, topic))) 37 | Тематичні гілки мають своє застосування в проектах будь-якого розміру. 38 | Тематична гілка -- це короткострокова гілка, що створюється для окремо взятого завдання чи функціональності. 39 | Напевно, ви таке раніше не робили часто з іншими СКВ, оскільки загалом це досить "`дорого`" створювати та зливати гілки. 40 | Проте в Git це досить звична практика створювати, додавати коміти, зливати та видаляти гілки по кілька разів на день. 41 | 42 | Приклад цього ви бачили раніше в попередньому розділі з гілками `iss53` та `hotfix` 43 | Ви додавали кілька комітів в ці гілки та видаляли їх одразу після зливання в основну гілку. 44 | Така техніка дозволяє швидко та повністю змінювати контекст роботи, оскільки ваша робота в окремому елеваторі, де всі зміни пов'язані тільки з однією темою чи завданням, це полегшує та ізолює перегляд коду тощо. 45 | Ви можете тримати свої зміни там кілька хвилин, днів, чи місяців, і зливати аж тоді, коли вони будуть готові. 46 | 47 | Розглянемо приклад, коли нам потрібно зробити завдання №91 (в `master`), ми робимо гілку (`iss91`), трохи там працюємо, потім робимо з неї ще одну гілку (`iss91v2`) щоб попробувати інший підхід, повертаємося в `master` на деякий час, і тоді робимо ще одну гілку щоб перевірити одну непевну ідею (гілка `dumbidea`). 48 | Історія комітів виглядатиме десь так: 49 | 50 | .Багато тематичних гілок 51 | image::images/topic-branches-1.png[Багато тематичних гілок.] 52 | 53 | Тепер, скажімо, вам сподобався підхід номер два (`iss91v2`) і ви показали свою ідею (гілку `dumbidea`) колегам, і вона їм здається геніальною. 54 | Ви можете викидати оригінальну `iss91` (втрачаючи коміти `C5` та `C6`) та зливати дві інші гілки. 55 | Тепер ваша історія така: 56 | 57 | .Історія після зливання `dumbidea` та `iss91v2` 58 | image::images/topic-branches-2.png[Історія після зливання `dumbidea` та `iss91v2`.] 59 | 60 | Ми приділимо більше уваги різним можливим робочим процесам ваших Git проектів в <>, тому, перед остаточним рішенням яку ж схему обрати, прочитайте цей розділ. 61 | 62 | Пам'ятайте: усі зміни, що ви робили тут з гілками -- повністю локальні. 63 | Коли ви створюєте гілки та зливаєте їх -- все це відбувається тільки у вашому сховищі -- жодних змін на сервер чи з нього не надсилається. 64 | -------------------------------------------------------------------------------- /book/01-introduction/sections/about-version-control.asc: -------------------------------------------------------------------------------- 1 | === Про систему контролю версій 2 | 3 | (((version control))) 4 | Що таке ``система контролю версій'', і чому це важливо? 5 | Система контролю версій - це система, що записує зміни у файл або набір файлів протягом деякого часу, так що ви зможете повернутися до певної версії пізніше. 6 | Як приклад, в цій книзі, для файлів, що знаходяться під контролем версій, буде використовуватися код програмного забезпечення, хоча насправді ви можете використовувати контроль версій практично для будь-яких типів файлів. 7 | 8 | Якщо ви графічний або веб-дизайнер і хочете зберегти кожну версію зображення або макета (швидше за все, захочете), система контролю версій (далі СКВ) якраз те, що потрібно. 9 | Вона дозволяє повернути вибрані файли до попереднього стану, повернути весь проект до попереднього стану, побачити зміни, побачити, хто останній міняв щось і спровокував проблему, хто вказав на проблему і коли, та багато іншого. 10 | Використання СКВ також в цілому означає, що, якщо ви зламали щось або втратили файли, ви просто можете все виправити. 11 | Крім того, ви отримаєте все це за дуже невеликі накладні витрати. 12 | 13 | ==== Локальні системи контролю версій 14 | 15 | (((version control,local))) 16 | Багато людей в якості одного з методів контролю версій застосовують копіювання файлів в окрему директорію (можливо навіть директорію з відміткою за часом, якщо вони достатньо розумні). 17 | Даний підхід є дуже поширеним завдяки його простоті, проте він, неймовірним чином, схильний до появи помилок. 18 | Можна легко забути в якій директорії ви знаходитеся і випадково змінити не той файл або скопіювати не ті файли, які ви хотіли. 19 | 20 | Щоб справитися з цією проблемою, програмісти давно розробили локальні СКВ, що мають просту базу даних, яка зберігає всі зміни в файлах під контролем версій. 21 | 22 | .Локальні системи контролю версій. 23 | image::images/local.png[Local version control diagram] 24 | 25 | Одним з найбільш поширених інструментів СКВ була система під назвою RCS, яка досі поширюється з багатьма комп'ютерами сьогодні. 26 | RCS зберігає набори латок (тобто, відмінності між файлами) в спеціальному форматі на диску; він може заново відтворити будь-який файл, як він виглядав, в будь-який момент часу, шляхом додавання всіх латок. 27 | 28 | ==== Централізовані системи контролю версій 29 | 30 | (((version control,centralized))) 31 | Наступним важливим питанням, з яким стикаються люди, є необхідність співпрацювати з іншими розробниками. 32 | Щоб справитися з цією проблемою, були розроблені централізовані системи контролю версій (ЦСКВ). 33 | Такі системи як CVS, Subversion і Perforce, мають єдиний сервер, який містить всі версії файлів, та деяке число клієнтів, які отримують файли з центрального місця. 34 | Протягом багатьох років, це було стандартом для систем контролю версій. 35 | 36 | .Централізовані системи контролю версій. 37 | image::images/centralized.png[Centralized version control diagram] 38 | 39 | Такий підхід має безліч переваг, особливо над локальними СКВ. 40 | Наприклад, кожному учаснику проекту відомо, певною мірою, чим займаються інші. 41 | Адміністратори мають повний контроль над тим, хто і що може робити. Набагато легше адмініструвати ЦСКВ, ніж мати справу з локальними базами даних для кожного клієнта. 42 | 43 | Але цей підхід також має деякі серйозні недоліки. 44 | Найбільш очевидним є єдина точка відмови, яким є централізований сервер. 45 | Якщо сервер виходить з ладу протягом години, то протягом цієї години ніхто не може співпрацювати або зберігати зміни над якими вони працюють під версійним контролем. 46 | Якщо жорсткий диск центральної бази даних на сервері пошкоджено, і своєчасні резервні копії не були зроблені, ви втрачаєте абсолютно все -- всю історію проекту, крім одиночних знімків проекту, що збереглися на локальних машинах людей. 47 | Локальні СКВ страждають тією ж проблемою -- щоразу, коли вся історія проекту зберігається в одному місці, ви ризикуєте втратити все. 48 | 49 | ==== Децентралізовані системи контролю версій 50 | 51 | (((version control,distributed))) 52 | Долучаються до гри децентралізовані системи контролю версій (ДСКВ). 53 | В ДСКВ (таких як, Git, Mercurial, Bazaar або Darcs), клієнти не просто отримують останній знімок файлів репозиторія: натомість вони є повною копією сховища разом з усією його історією. 54 | Таким чином, якщо вмирає який-небудь сервер, через який співпрацюють розробники, будь-який з клієнтських репозиторіїв може бути скопійований назад до серверу, щоб відновити його. 55 | Кожна копія дійсно є повною резервною копією всіх даних. 56 | 57 | .Децентралізовані системи контролю версій. 58 | image::images/distributed.png[Distributed version control diagram] 59 | 60 | Більш того, багато з цих систем дуже добре взаємодіють з декількома віддаленими репозиторіями, так що ви можете співпрацювати з різними групами людей, застосовуючи різні підходи в межах одного проекту одночасно. 61 | Це дозволяє налаштувати декілька типів робочих процесів, таких як ієрархічні моделі, які неможливі в централізованих системах. 62 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | namespace :book do 2 | 3 | # Variables referenced for build 4 | version_string = `git describe --tags --abbrev=0`.chomp 5 | if version_string.empty? 6 | version_string = '0' 7 | else 8 | versions = version_string.split('.') 9 | version_string = versions[0] + '.' + versions[1] + '.' + versions[2].to_i.next.to_s 10 | end 11 | date_string = Time.now.strftime('%Y-%m-%d') 12 | params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" 13 | header_hash = `git rev-parse --short HEAD`.strip 14 | 15 | # Check contributors list 16 | # This checks commit hash stored in the header of list against current HEAD 17 | def check_contrib 18 | if File.exist?('book/contributors.txt') 19 | current_head_hash = `git rev-parse --short HEAD`.strip 20 | header = `head -n 1 book/contributors.txt`.strip 21 | # Match regex, then coerce resulting array to string by join 22 | header_hash = header.scan(/[a-f0-9]{7,}/).join 23 | 24 | if header_hash == current_head_hash 25 | puts "Hash on header of contributors list (#{header_hash}) matches the current HEAD (#{current_head_hash})" 26 | else 27 | puts "Hash on header of contributors list (#{header_hash}) does not match the current HEAD (#{current_head_hash}), refreshing" 28 | sh "rm book/contributors.txt" 29 | # Reenable and invoke task again 30 | Rake::Task['book/contributors.txt'].reenable 31 | Rake::Task['book/contributors.txt'].invoke 32 | end 33 | end 34 | end 35 | 36 | desc 'build basic book formats' 37 | task :build => [:build_html, :build_epub, :build_fb2, :build_mobi, :build_pdf] do 38 | begin 39 | # Run check 40 | Rake::Task['book:check'].invoke 41 | 42 | # Rescue to ignore checking errors 43 | rescue => e 44 | puts e.message 45 | puts 'Error when checking books (ignored)' 46 | end 47 | end 48 | 49 | desc 'build basic book formats (for ci)' 50 | task :ci => [:build_html, :build_epub, :build_fb2, :build_mobi, :build_pdf] do 51 | # Run check, but don't ignore any errors 52 | Rake::Task['book:check'].invoke 53 | end 54 | 55 | desc 'generate contributors list' 56 | file 'book/contributors.txt' do 57 | puts 'Generating contributors list' 58 | sh "echo 'Contributors as of #{header_hash}:\n' > book/contributors.txt" 59 | sh "git shortlog -s HEAD | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | sort | column -c 120 >> book/contributors.txt" 60 | end 61 | 62 | desc 'build HTML format' 63 | task :build_html => 'book/contributors.txt' do 64 | check_contrib() 65 | 66 | puts 'Converting to HTML...' 67 | sh "bundle exec asciidoctor #{params} -a data-uri progit.asc" 68 | puts ' -- HTML output at progit.html' 69 | 70 | end 71 | 72 | desc 'build Epub format' 73 | task :build_epub => 'book/contributors.txt' do 74 | check_contrib() 75 | 76 | puts 'Converting to EPub...' 77 | sh "bundle exec asciidoctor-epub3 #{params} progit.asc" 78 | puts ' -- Epub output at progit.epub' 79 | 80 | end 81 | 82 | desc 'build FB2 format' 83 | task :build_fb2 => 'book/contributors.txt' do 84 | check_contrib() 85 | 86 | puts 'Converting to FB2...' 87 | sh "bundle exec asciidoctor-fb2 #{params} progit.asc" 88 | puts ' -- FB2 output at progit.fb2.zip' 89 | 90 | end 91 | 92 | desc 'build Mobi format' 93 | task :build_mobi => 'book/contributors.txt' do 94 | check_contrib() 95 | 96 | puts "Converting to Mobi (kf8)..." 97 | sh "bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc" 98 | puts " -- Mobi output at progit.mobi" 99 | end 100 | 101 | desc 'build PDF format' 102 | task :build_pdf => 'book/contributors.txt' do 103 | check_contrib() 104 | 105 | puts 'Converting to PDF... (this one takes a while)' 106 | sh "bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null" 107 | puts ' -- PDF output at progit.pdf' 108 | end 109 | 110 | desc 'Check generated books' 111 | task :check => [:build_html, :build_epub] do 112 | puts 'Checking generated books' 113 | 114 | sh "htmlproofer progit.html" 115 | sh "epubcheck progit.epub" 116 | end 117 | 118 | desc 'Clean all generated files' 119 | task :clean do 120 | begin 121 | puts 'Removing generated files' 122 | 123 | FileList['book/contributors.txt', 'progit.html', 'progit-kf8.epub', 'progit.epub', 'progit.fb2.zip', 'progit.mobi', 'progit.pdf'].each do |file| 124 | rm file 125 | 126 | # Rescue if file not found 127 | rescue Errno::ENOENT => e 128 | begin 129 | puts e.message 130 | puts 'Error removing files (ignored)' 131 | end 132 | end 133 | end 134 | end 135 | 136 | end 137 | 138 | task :default => "book:build" 139 | -------------------------------------------------------------------------------- /theme/epub/epub.css: -------------------------------------------------------------------------------- 1 | /* syntax highlighting and coloring text in general */ 2 | 3 | /* Pygments with manni theme */ 4 | pre code.hll { background-color: #ffffcc } 5 | pre code.c { color: #0099FF; font-style: italic } /* Comment */ 6 | pre code.err { color: #AA0000 } /* Error */ 7 | pre code.k { color: #006699; font-weight: bold } /* Keyword */ 8 | pre code.o { color: #555555 } /* Operator */ 9 | pre code.cm { color: #35586C; font-style: italic } /* Comment.Multiline */ 10 | pre code.cp { color: #009999 } /* Comment.Preproc */ 11 | pre code.c1 { color: #35586C; font-style: italic } /* Comment.Single */ 12 | pre code.cs { color: #35586C; font-weight: bold; font-style: italic } /* Comment.Special */ 13 | pre code.gd { background-color: #FFCCCC } /* Generic.Deleted */ 14 | pre code.ge { font-style: italic } /* Generic.Emph */ 15 | pre code.gr { color: #FF0000 } /* Generic.Error */ 16 | pre code.gh { color: #003300; font-weight: bold } /* Generic.Heading */ 17 | pre code.gi { background-color: #CCFFCC } /* Generic.Inserted */ 18 | 19 | /* Overriding default manni style of #AAAAAA gray for Generic Output with #000000 black, which is better suited to ORM terminal output */ 20 | pre code.go { color: #000000 } /* Generic.Output */ 21 | 22 | pre code.gp { color: #000099; font-weight: bold } /* Generic.Prompt */ 23 | pre code.gs { font-weight: bold } /* Generic.Strong */ 24 | pre code.gu { color: #003300; font-weight: bold } /* Generic.Subheading */ 25 | pre code.gt { color: #99CC66 } /* Generic.Traceback */ 26 | pre code.kc { color: #006699; font-weight: bold } /* Keyword.Constant */ 27 | pre code.kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ 28 | pre code.kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ 29 | pre code.kp { color: #006699 } /* Keyword.Pseudo */ 30 | pre code.kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ 31 | pre code.kt { color: #007788; font-weight: bold } /* Keyword.Type */ 32 | pre code.m { color: #FF6600 } /* Literal.Number */ 33 | pre code.s { color: #CC3300 } /* Literal.String */ 34 | pre code.na { color: #330099 } /* Name.Attribute */ 35 | pre code.nb { color: #336666 } /* Name.Builtin */ 36 | pre code.nc { color: #00AA88; font-weight: bold } /* Name.Class */ 37 | pre code.no { color: #336600 } /* Name.Constant */ 38 | pre code.nd { color: #9999FF } /* Name.Decorator */ 39 | pre code.ni { color: #999999; font-weight: bold } /* Name.Entity */ 40 | pre code.ne { color: #CC0000; font-weight: bold } /* Name.Exception */ 41 | pre code.nf { color: #CC00FF } /* Name.Function */ 42 | pre code.nl { color: #9999FF } /* Name.Label */ 43 | pre code.nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ 44 | pre code.nt { color: #330099; font-weight: bold } /* Name.Tag */ 45 | pre code.nv { color: #003333 } /* Name.Variable */ 46 | pre code.ow { color: #000000; font-weight: bold } /* Operator.Word */ 47 | pre code.w { color: #bbbbbb } /* Text.Whitespace */ 48 | pre code.mf { color: #FF6600 } /* Literal.Number.Float */ 49 | pre code.mh { color: #FF6600 } /* Literal.Number.Hex */ 50 | pre code.mi { color: #FF6600 } /* Literal.Number.Integer */ 51 | pre code.mo { color: #FF6600 } /* Literal.Number.Oct */ 52 | pre code.sb { color: #CC3300 } /* Literal.String.Backtick */ 53 | pre code.sc { color: #CC3300 } /* Literal.String.Char */ 54 | pre code.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ 55 | pre code.s2 { color: #CC3300 } /* Literal.String.Double */ 56 | pre code.se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ 57 | pre code.sh { color: #CC3300 } /* Literal.String.Heredoc */ 58 | pre code.si { color: #AA0000 } /* Literal.String.Interpol */ 59 | pre code.sx { color: #CC3300 } /* Literal.String.Other */ 60 | pre code.sr { color: #33AAAA } /* Literal.String.Regex */ 61 | pre code.s1 { color: #CC3300 } /* Literal.String.Single */ 62 | 63 | /* Overriding manni default yellow #FFCC33 with brown #AA6600, which is easier to read */ 64 | pre code.ss { color: #AA6600 } /* Literal.String.Symbol */ 65 | 66 | pre code.bp { color: #336666 } /* Name.Builtin.Pseudo */ 67 | pre code.vc { color: #003333 } /* Name.Variable.Class */ 68 | pre code.vg { color: #003333 } /* Name.Variable.Global */ 69 | pre code.vi { color: #003333 } /* Name.Variable.Instance */ 70 | pre code.il { color: #FF6600 } /* Literal.Number.Integer.Long */ 71 | 72 | /* Sanders's additions to manni */ 73 | pre code.g { color: #005500 } /* Generic */ 74 | pre code.l { color: #CC6600 } /* Literal */ 75 | pre code.l { color: #FF9900 } /* Literal.Date */ 76 | pre code.n { color: #000088 } /* Name */ 77 | pre code.nx { color: #000088 } /* Name.Other */ 78 | pre code.py { color: #9966FF } /* Name.Property */ 79 | pre code.p { color: #000000 } /* Punctuation */ 80 | pre code.x { color: #FF0066 } /* Other */ 81 | 82 | /* Chacon's additions to make command line look more like a command line */ 83 | pre[data-code-language="console"] { 84 | background: #ddd; 85 | padding: 10px; 86 | } 87 | pre[data-code-language="console"] code.go { 88 | color: #555; 89 | font-size: 1.0em; 90 | } 91 | pre[data-code-language="console"] code.gp { 92 | color: #009900; 93 | font-weight: bold; 94 | } 95 | -------------------------------------------------------------------------------- /theme/html/html.css: -------------------------------------------------------------------------------- 1 | /* syntax highlighting and coloring text in general */ 2 | 3 | /* Pygments with manni theme */ 4 | pre code.hll { background-color: #ffffcc } 5 | pre code.c { color: #0099FF; font-style: italic } /* Comment */ 6 | pre code.err { color: #AA0000 } /* Error */ 7 | pre code.k { color: #006699; font-weight: bold } /* Keyword */ 8 | pre code.o { color: #555555 } /* Operator */ 9 | pre code.cm { color: #35586C; font-style: italic } /* Comment.Multiline */ 10 | pre code.cp { color: #009999 } /* Comment.Preproc */ 11 | pre code.c1 { color: #35586C; font-style: italic } /* Comment.Single */ 12 | pre code.cs { color: #35586C; font-weight: bold; font-style: italic } /* Comment.Special */ 13 | pre code.gd { background-color: #FFCCCC } /* Generic.Deleted */ 14 | pre code.ge { font-style: italic } /* Generic.Emph */ 15 | pre code.gr { color: #FF0000 } /* Generic.Error */ 16 | pre code.gh { color: #003300; font-weight: bold } /* Generic.Heading */ 17 | pre code.gi { background-color: #CCFFCC } /* Generic.Inserted */ 18 | 19 | /* Overriding default manni style of #AAAAAA gray for Generic Output with #000000 black, which is better suited to ORM terminal output */ 20 | pre code.go { color: #000000 } /* Generic.Output */ 21 | 22 | pre code.gp { color: #000099; font-weight: bold } /* Generic.Prompt */ 23 | pre code.gs { font-weight: bold } /* Generic.Strong */ 24 | pre code.gu { color: #003300; font-weight: bold } /* Generic.Subheading */ 25 | pre code.gt { color: #99CC66 } /* Generic.Traceback */ 26 | pre code.kc { color: #006699; font-weight: bold } /* Keyword.Constant */ 27 | pre code.kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ 28 | pre code.kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ 29 | pre code.kp { color: #006699 } /* Keyword.Pseudo */ 30 | pre code.kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ 31 | pre code.kt { color: #007788; font-weight: bold } /* Keyword.Type */ 32 | pre code.m { color: #FF6600 } /* Literal.Number */ 33 | pre code.s { color: #CC3300 } /* Literal.String */ 34 | pre code.na { color: #330099 } /* Name.Attribute */ 35 | pre code.nb { color: #336666 } /* Name.Builtin */ 36 | pre code.nc { color: #00AA88; font-weight: bold } /* Name.Class */ 37 | pre code.no { color: #336600 } /* Name.Constant */ 38 | pre code.nd { color: #9999FF } /* Name.Decorator */ 39 | pre code.ni { color: #999999; font-weight: bold } /* Name.Entity */ 40 | pre code.ne { color: #CC0000; font-weight: bold } /* Name.Exception */ 41 | pre code.nf { color: #CC00FF } /* Name.Function */ 42 | pre code.nl { color: #9999FF } /* Name.Label */ 43 | pre code.nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ 44 | pre code.nt { color: #330099; font-weight: bold } /* Name.Tag */ 45 | pre code.nv { color: #003333 } /* Name.Variable */ 46 | pre code.ow { color: #000000; font-weight: bold } /* Operator.Word */ 47 | pre code.w { color: #bbbbbb } /* Text.Whitespace */ 48 | pre code.mf { color: #FF6600 } /* Literal.Number.Float */ 49 | pre code.mh { color: #FF6600 } /* Literal.Number.Hex */ 50 | pre code.mi { color: #FF6600 } /* Literal.Number.Integer */ 51 | pre code.mo { color: #FF6600 } /* Literal.Number.Oct */ 52 | pre code.sb { color: #CC3300 } /* Literal.String.Backtick */ 53 | pre code.sc { color: #CC3300 } /* Literal.String.Char */ 54 | pre code.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ 55 | pre code.s2 { color: #CC3300 } /* Literal.String.Double */ 56 | pre code.se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ 57 | pre code.sh { color: #CC3300 } /* Literal.String.Heredoc */ 58 | pre code.si { color: #AA0000 } /* Literal.String.Interpol */ 59 | pre code.sx { color: #CC3300 } /* Literal.String.Other */ 60 | pre code.sr { color: #33AAAA } /* Literal.String.Regex */ 61 | pre code.s1 { color: #CC3300 } /* Literal.String.Single */ 62 | 63 | /* Overriding manni default yellow #FFCC33 with brown #AA6600, which is easier to read */ 64 | pre code.ss { color: #AA6600 } /* Literal.String.Symbol */ 65 | 66 | pre code.bp { color: #336666 } /* Name.Builtin.Pseudo */ 67 | pre code.vc { color: #003333 } /* Name.Variable.Class */ 68 | pre code.vg { color: #003333 } /* Name.Variable.Global */ 69 | pre code.vi { color: #003333 } /* Name.Variable.Instance */ 70 | pre code.il { color: #FF6600 } /* Literal.Number.Integer.Long */ 71 | 72 | /* Sanders's additions to manni */ 73 | pre code.g { color: #005500 } /* Generic */ 74 | pre code.l { color: #CC6600 } /* Literal */ 75 | pre code.l { color: #FF9900 } /* Literal.Date */ 76 | pre code.n { color: #000088 } /* Name */ 77 | pre code.nx { color: #000088 } /* Name.Other */ 78 | pre code.py { color: #9966FF } /* Name.Property */ 79 | pre code.p { color: #000000 } /* Punctuation */ 80 | pre code.x { color: #FF0066 } /* Other */ 81 | 82 | /* Chacon's additions to make command line look more like a command line */ 83 | pre[data-code-language="console"] { 84 | background: #ddd; 85 | padding: 10px; 86 | } 87 | pre[data-code-language="console"] code.go { 88 | color: #555; 89 | font-size: 1.0em; 90 | } 91 | pre[data-code-language="console"] code.gp { 92 | color: #009900; 93 | font-weight: bold; 94 | } 95 | -------------------------------------------------------------------------------- /theme/mobi/mobi.css: -------------------------------------------------------------------------------- 1 | /* syntax highlighting and coloring text in general */ 2 | 3 | /* Pygments with manni theme */ 4 | pre code.hll { background-color: #ffffcc } 5 | pre code.c { color: #0099FF; font-style: italic } /* Comment */ 6 | pre code.err { color: #AA0000 } /* Error */ 7 | pre code.k { color: #006699; font-weight: bold } /* Keyword */ 8 | pre code.o { color: #555555 } /* Operator */ 9 | pre code.cm { color: #35586C; font-style: italic } /* Comment.Multiline */ 10 | pre code.cp { color: #009999 } /* Comment.Preproc */ 11 | pre code.c1 { color: #35586C; font-style: italic } /* Comment.Single */ 12 | pre code.cs { color: #35586C; font-weight: bold; font-style: italic } /* Comment.Special */ 13 | pre code.gd { background-color: #FFCCCC } /* Generic.Deleted */ 14 | pre code.ge { font-style: italic } /* Generic.Emph */ 15 | pre code.gr { color: #FF0000 } /* Generic.Error */ 16 | pre code.gh { color: #003300; font-weight: bold } /* Generic.Heading */ 17 | pre code.gi { background-color: #CCFFCC } /* Generic.Inserted */ 18 | 19 | /* Overriding default manni style of #AAAAAA gray for Generic Output with #000000 black, which is better suited to ORM terminal output */ 20 | pre code.go { color: #000000 } /* Generic.Output */ 21 | 22 | pre code.gp { color: #000099; font-weight: bold } /* Generic.Prompt */ 23 | pre code.gs { font-weight: bold } /* Generic.Strong */ 24 | pre code.gu { color: #003300; font-weight: bold } /* Generic.Subheading */ 25 | pre code.gt { color: #99CC66 } /* Generic.Traceback */ 26 | pre code.kc { color: #006699; font-weight: bold } /* Keyword.Constant */ 27 | pre code.kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ 28 | pre code.kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ 29 | pre code.kp { color: #006699 } /* Keyword.Pseudo */ 30 | pre code.kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ 31 | pre code.kt { color: #007788; font-weight: bold } /* Keyword.Type */ 32 | pre code.m { color: #FF6600 } /* Literal.Number */ 33 | pre code.s { color: #CC3300 } /* Literal.String */ 34 | pre code.na { color: #330099 } /* Name.Attribute */ 35 | pre code.nb { color: #336666 } /* Name.Builtin */ 36 | pre code.nc { color: #00AA88; font-weight: bold } /* Name.Class */ 37 | pre code.no { color: #336600 } /* Name.Constant */ 38 | pre code.nd { color: #9999FF } /* Name.Decorator */ 39 | pre code.ni { color: #999999; font-weight: bold } /* Name.Entity */ 40 | pre code.ne { color: #CC0000; font-weight: bold } /* Name.Exception */ 41 | pre code.nf { color: #CC00FF } /* Name.Function */ 42 | pre code.nl { color: #9999FF } /* Name.Label */ 43 | pre code.nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ 44 | pre code.nt { color: #330099; font-weight: bold } /* Name.Tag */ 45 | pre code.nv { color: #003333 } /* Name.Variable */ 46 | pre code.ow { color: #000000; font-weight: bold } /* Operator.Word */ 47 | pre code.w { color: #bbbbbb } /* Text.Whitespace */ 48 | pre code.mf { color: #FF6600 } /* Literal.Number.Float */ 49 | pre code.mh { color: #FF6600 } /* Literal.Number.Hex */ 50 | pre code.mi { color: #FF6600 } /* Literal.Number.Integer */ 51 | pre code.mo { color: #FF6600 } /* Literal.Number.Oct */ 52 | pre code.sb { color: #CC3300 } /* Literal.String.Backtick */ 53 | pre code.sc { color: #CC3300 } /* Literal.String.Char */ 54 | pre code.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ 55 | pre code.s2 { color: #CC3300 } /* Literal.String.Double */ 56 | pre code.se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ 57 | pre code.sh { color: #CC3300 } /* Literal.String.Heredoc */ 58 | pre code.si { color: #AA0000 } /* Literal.String.Interpol */ 59 | pre code.sx { color: #CC3300 } /* Literal.String.Other */ 60 | pre code.sr { color: #33AAAA } /* Literal.String.Regex */ 61 | pre code.s1 { color: #CC3300 } /* Literal.String.Single */ 62 | 63 | /* Overriding manni default yellow #FFCC33 with brown #AA6600, which is easier to read */ 64 | pre code.ss { color: #AA6600 } /* Literal.String.Symbol */ 65 | 66 | pre code.bp { color: #336666 } /* Name.Builtin.Pseudo */ 67 | pre code.vc { color: #003333 } /* Name.Variable.Class */ 68 | pre code.vg { color: #003333 } /* Name.Variable.Global */ 69 | pre code.vi { color: #003333 } /* Name.Variable.Instance */ 70 | pre code.il { color: #FF6600 } /* Literal.Number.Integer.Long */ 71 | 72 | /* Sanders's additions to manni */ 73 | pre code.g { color: #005500 } /* Generic */ 74 | pre code.l { color: #CC6600 } /* Literal */ 75 | pre code.l { color: #FF9900 } /* Literal.Date */ 76 | pre code.n { color: #000088 } /* Name */ 77 | pre code.nx { color: #000088 } /* Name.Other */ 78 | pre code.py { color: #9966FF } /* Name.Property */ 79 | pre code.p { color: #000000 } /* Punctuation */ 80 | pre code.x { color: #FF0066 } /* Other */ 81 | 82 | /* Chacon's additions to make command line look more like a command line */ 83 | pre[data-code-language="console"] { 84 | background: #ddd; 85 | padding: 10px; 86 | } 87 | pre[data-code-language="console"] code.go { 88 | color: #555; 89 | font-size: 1.0em; 90 | } 91 | pre[data-code-language="console"] code.gp { 92 | color: #009900; 93 | font-weight: bold; 94 | } 95 | --------------------------------------------------------------------------------