From aca2c92625f323cfb7930bfa2d451fa52307d07f Mon Sep 17 00:00:00 2001 From: Dieter Ziller Date: Fri, 6 Sep 2019 19:45:30 +0200 Subject: [PATCH 001/549] Line 229 formatting error by * (asterisk) fixed --- book/02-git-basics/sections/recording-changes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index e48751fc..bdafe9a0 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -226,7 +226,7 @@ The rules for the patterns you can put in the `.gitignore` file are as follows: * You can negate a pattern by starting it with an exclamation point (`!`). Glob patterns are like simplified regular expressions that shells use. -An asterisk (`*`) matches zero or more characters; `[abc]` matches any character inside the brackets (in this case a, b, or c); a question mark (`?`) matches a single character; and brackets enclosing characters separated by a hyphen (`[0-9]`) matches any character between them (in this case 0 through 9). +An asterisk (`\*`) matches zero or more characters; `[abc]` matches any character inside the brackets (in this case a, b, or c); a question mark (`?`) matches a single character; and brackets enclosing characters separated by a hyphen (`[0-9]`) matches any character between them (in this case 0 through 9). You can also use two asterisks to match nested directories; `a/**/z` would match `a/z`, `a/b/z`, `a/b/c/z`, and so on. Here is another example `.gitignore` file: From 50caafb5983839484b8178747d1e12ae27206b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Jane=C4=8Dek?= Date: Thu, 12 Mar 2020 19:27:01 +0100 Subject: [PATCH 002/549] (#1395) Partial globbing is available in refspec since git 2.6.0 Motivation The docs were saying that partial glob patterns are unavailable in refspec, and namespacing is the only way to get flexible refspecs matching multiple branches. This is no longer true since Git 2.6.0 which added support for partial globbing patterns. Modifications The outdated paragraph was changed so that it now explicitly states that the approach works. Closes #1395. --- book/10-git-internals/sections/refspec.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/10-git-internals/sections/refspec.asc b/book/10-git-internals/sections/refspec.asc index 8d1f7807..f1b411a6 100644 --- a/book/10-git-internals/sections/refspec.asc +++ b/book/10-git-internals/sections/refspec.asc @@ -75,14 +75,14 @@ If you want to always fetch the `master` and `experiment` branches from the `ori fetch = +refs/heads/experiment:refs/remotes/origin/experiment ---- -You can't use partial globs in the pattern, so this would be invalid: +Since Git 2.6.0 you can use partial globs in the pattern to match multiple branches, so this works: [source,ini] ---- fetch = +refs/heads/qa*:refs/remotes/origin/qa* ---- -However, you can use namespaces (or directories) to accomplish something like that. +Even better, you can use namespaces (or directories) to accomplish the same with more structure. If you have a QA team that pushes a series of branches, and you want to get the `master` branch and any of the QA team's branches but nothing else, you can use a config section like this: [source,ini] From bd786822254407e75cb298a53a5c51fc9b434fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1ximo=20Cuadros?= Date: Tue, 17 Mar 2020 08:34:11 +0100 Subject: [PATCH 003/549] Update go-git URL in Appendinx B: embedding You can read about the project status at: https://github.com/go-git/go-git/wiki/go-git-has-a-new-home!-v5-and-some-explanations --- book/B-embedding-git/sections/go-git.asc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index b83ca4b9..f019d2f3 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -5,16 +5,16 @@ In case you want to integrate Git into a service written in Golang, there also i This implementation does not have any native dependencies and thus is not prone to manual memory management errors. It is also transparent for the standard Golang performance analysis tooling like CPU, Memory profilers, race detector, etc. -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[]. +go-git is focused on extensibility, compatibility and supports most of the plumbing APIs, which is documented at https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[]. Here is a basic example of using Go APIs: [source, go] ----- -import "gopkg.in/src-d/go-git.v4" +import "github.com/go-git/go-git/v5" r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ - URL: "https://github.com/src-d/go-git", + URL: "https://github.com/go-git/go-git", Progress: os.Stdout, }) ----- @@ -48,17 +48,17 @@ The default implementation is in-memory storage, which is very fast. [source, go] ----- r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ - URL: "https://github.com/src-d/go-git", + URL: "https://github.com/go-git/go-git", }) ----- 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. +For instance, https://github.com/go-git/go-git/tree/master/_examples/storage[] allows you to store references, objects, and configuration in an Aerospike database. Another feature is a flexible filesystem abstraction. -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. +Using https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#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. -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[]. +Another advanced use-case includes a fine-tunable HTTP client, such as the one found at https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[]. [source, go] ----- @@ -83,4 +83,4 @@ r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ==== Further Reading A full treatment of go-git's capabilities is outside the scope of this book. -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[]. +If you want more information on go-git, there's API documentation at https://pkg.go.dev/github.com/go-git/go-git/v5[], and a set of usage examples at https://github.com/go-git/go-git/tree/master/_examples[]. From 5d573e8da17743127c573ccda5ce1515a2394e5e Mon Sep 17 00:00:00 2001 From: Dieter Ziller Date: Thu, 19 Mar 2020 10:31:51 +0100 Subject: [PATCH 004/549] Update submodules.asc To help the reader understanding the phrase, it is better to divide it into 2 parts. Thereafter, a missing blank line is inserted. --- book/07-git-tools/sections/submodules.asc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index fe80f2f3..41eeeb2c 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -373,9 +373,11 @@ Submodule DbConnector c3f01dc..c87d55d: > better connection routine ---- -Git will by default try to update *all* of your submodules when you run `git submodule update --remote` so if you have a lot of them, you may want to pass the name of just the submodule you want to try to update. +Git will by default try to update *all* of your submodules when you run `git submodule update --remote`. +So, if you have a lot of them, you may want to pass the name of just the submodule you want to try to update. ===== Pulling Upstream Changes from the Project Remote + Let's now step into the shoes of your collaborator, who has their own local clone of the MainProject repository. Simply executing `git pull` to get your newly committed changes is not enough: From 79cee563a5ed01df21e893a17242230d059dac4d Mon Sep 17 00:00:00 2001 From: Dieter Ziller Date: Sat, 21 Mar 2020 15:47:30 +0100 Subject: [PATCH 005/549] Update submodules.asc Bringing new sentence in separate line --- book/07-git-tools/sections/submodules.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 41eeeb2c..5b4a04e5 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -968,7 +968,8 @@ nothing to commit, working tree clean ---- Using the `--recurse-submodules` flag of `git checkout` can also be useful when you work on several branches in the superproject, each having your submodule pointing at different commits. -Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as ``modified'', and indicate ``new commits''. That is because the submodule state is by default not carried over when switching branches. +Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as ``modified'', and indicate ``new commits''. +That is because the submodule state is by default not carried over when switching branches. This can be really confusing, so it's a good idea to always `git checkout --recurse-submodules` when your project has submodules. (For older Git versions that do not have the `--recurse-submodules` flag, after the checkout you can use `git submodule update --init --recursive` to put the submodules in the right state.) From 5c2ee565116c0e42b32b3f213126010d7411ac00 Mon Sep 17 00:00:00 2001 From: Katrin Leinweber <9948149+katrinleinweber@users.noreply.github.com> Date: Wed, 25 Mar 2020 11:52:23 +0100 Subject: [PATCH 006/549] Add UltraEdit to core.editor list in Appendix --- C-git-commands.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/C-git-commands.asc b/C-git-commands.asc index f919ef2f..a5e3e893 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -65,6 +65,7 @@ Accompanying the configuration instructions in <>, |TextEdit (macOS)|`git config --global --add core.editor "open -W -n"` |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m` (Also see note below) +|UltraEdit (Windows 64-bit) | `git config --global core.editor Uedit32` |Vim |`git config --global core.editor "vim"` |VS Code |`git config --global core.editor "code --wait"` |WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` From a10ba780f334a7bac27e5377c86824332d7d946a Mon Sep 17 00:00:00 2001 From: Katrin Leinweber <9948149+katrinleinweber@users.noreply.github.com> Date: Wed, 25 Mar 2020 12:03:12 +0100 Subject: [PATCH 007/549] Clarify meaning of "VS Code" --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index f919ef2f..7ead94b5 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -66,7 +66,7 @@ Accompanying the configuration instructions in <>, |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m` (Also see note below) |Vim |`git config --global core.editor "vim"` -|VS Code |`git config --global core.editor "code --wait"` +|Visual Studio Code and VSCodium |`git config --global core.editor "code --wait"` |WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` |Xi | `git config --global core.editor "xi --wait"` |============================== From 11aa297c431e9a77a7e5fd177f71d6f280fbf523 Mon Sep 17 00:00:00 2001 From: Dieter Ziller Date: Wed, 25 Mar 2020 23:48:06 +0100 Subject: [PATCH 008/549] Update book/07-git-tools/sections/submodules.asc Co-Authored-By: Ben Straub --- book/07-git-tools/sections/submodules.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 5b4a04e5..ff033dab 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -374,7 +374,7 @@ Submodule DbConnector c3f01dc..c87d55d: ---- Git will by default try to update *all* of your submodules when you run `git submodule update --remote`. -So, if you have a lot of them, you may want to pass the name of just the submodule you want to try to update. +If you have a lot of them, you may want to pass the name of just the submodule you want to try to update. ===== Pulling Upstream Changes from the Project Remote From 74c8609f5dd7b279e3a60c389041241c4dda46e1 Mon Sep 17 00:00:00 2001 From: Katrin Leinweber <9948149+katrinleinweber@users.noreply.github.com> Date: Wed, 25 Mar 2020 11:57:57 +0100 Subject: [PATCH 009/549] Harmonize slashes as forward also for Windows paths --- C-git-commands.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 7ead94b5..64be449c 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -67,13 +67,13 @@ Accompanying the configuration instructions in <>, |Textpad (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m` (Also see note below) |Vim |`git config --global core.editor "vim"` |Visual Studio Code and VSCodium |`git config --global core.editor "code --wait"` -|WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` +|WordPad |`git config --global core.editor '"C:/Program Files/Windows NT/Accessories/wordpad.exe"'"` |Xi | `git config --global core.editor "xi --wait"` |============================== [NOTE] ==== -If you have a 32-bit editor on a Windows 64-bit system, the program will be installed in `C:\Program Files (x86)\` rather than `C:\Program Files\` as in the table above. +If you have a 32-bit editor on a Windows 64-bit system, the program will be installed in `C:/Program Files (x86)/` rather than `C:/Program Files/` as in the table above. ==== ==== git help From afa575bca85689b5445bfbb3a1d18632c8ddfe19 Mon Sep 17 00:00:00 2001 From: Katrin Leinweber Date: Thu, 26 Mar 2020 08:10:24 +0100 Subject: [PATCH 010/549] Revert 74c8609 to harmonize as _back_slashes for all Windows paths --- C-git-commands.asc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 64be449c..5a70a807 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -54,26 +54,26 @@ Accompanying the configuration instructions in <>, |BBEdit (Mac, with command line tools) |`git config --global core.editor "bbedit -w"` |Emacs |`git config --global core.editor emacs` |Gedit (Linux) |`git config --global core.editor "gedit --wait --new-window"` -|Gvim (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"` (Also see note below) +|Gvim (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'"` (Also see note below) |Kate (Linux) |`git config --global core.editor "kate"` |nano |`git config --global core.editor "nano -w"` |Notepad (Windows 64-bit) |`git config core.editor notepad` -|Notepad++ (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"` (Also see note below) +|Notepad++ (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"` (Also see note below) |Scratch (Linux)|`git config --global core.editor "scratch-text-editor"` |Sublime Text (macOS) |`git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait"` -|Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/Sublime Text 3/sublime_text.exe' -w"` (Also see note below) +|Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w"` (Also see note below) |TextEdit (macOS)|`git config --global --add core.editor "open -W -n"` |Textmate |`git config --global core.editor "mate -w"` -|Textpad (Windows 64-bit) |`git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m` (Also see note below) +|Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |Vim |`git config --global core.editor "vim"` |Visual Studio Code and VSCodium |`git config --global core.editor "code --wait"` -|WordPad |`git config --global core.editor '"C:/Program Files/Windows NT/Accessories/wordpad.exe"'"` +|WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` |Xi | `git config --global core.editor "xi --wait"` |============================== [NOTE] ==== -If you have a 32-bit editor on a Windows 64-bit system, the program will be installed in `C:/Program Files (x86)/` rather than `C:/Program Files/` as in the table above. +If you have a 32-bit editor on a Windows 64-bit system, the program will be installed in `C:\Program Files (x86)\` rather than `C:\Program Files\` as in the table above. ==== ==== git help From c2e4e756e3394529c0a4f2918b43370178b1aab6 Mon Sep 17 00:00:00 2001 From: Niko Stotz Date: Thu, 26 Mar 2020 16:01:19 +0100 Subject: [PATCH 011/549] replaced 'Working Directory' with 'Working Tree', as per general terminology --- images/areas.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/areas.svg b/images/areas.svg index 13ed3417..c7840b10 100644 --- a/images/areas.svg +++ b/images/areas.svg @@ -45,7 +45,7 @@ - WorkingDirectory + WorkingTree From 0075714551e3f5bea141e21bce3be13eec67a4a0 Mon Sep 17 00:00:00 2001 From: andreas Date: Fri, 27 Mar 2020 13:03:21 +0100 Subject: [PATCH 012/549] Refer to consistent tag --- book/02-git-basics/sections/tagging.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index 66c6d97c..ae6e081c 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -261,8 +261,8 @@ If you want to view the versions of files a tag is pointing to, you can do a `gi [source,console] ---- -$ git checkout 2.0.0 -Note: checking out '2.0.0'. +$ git checkout v2.0.0 +Note: checking out 'v2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this From c87969be92397905bbade0dbbbda93f2a5077d39 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 31 Mar 2020 12:26:39 +0200 Subject: [PATCH 013/549] Move VSCodium and use the proper command --- C-git-commands.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 5a70a807..8cf44c89 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -66,7 +66,8 @@ Accompanying the configuration instructions in <>, |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |Vim |`git config --global core.editor "vim"` -|Visual Studio Code and VSCodium |`git config --global core.editor "code --wait"` +|Visual Studio Code |`git config --global core.editor "code --wait"` +|VSCodium (Free/Libre Open source binaries of VSCode) | `git config --global core.editor "codium --wait"` |WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` |Xi | `git config --global core.editor "xi --wait"` |============================== From bc9ddbce61c8c844323abcdee51e588e99fe4fd4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 31 Mar 2020 15:21:43 +0200 Subject: [PATCH 014/549] Use VSCodium blurb from their website --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 8cf44c89..0ea2f91d 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -67,7 +67,7 @@ Accompanying the configuration instructions in <>, |Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |Vim |`git config --global core.editor "vim"` |Visual Studio Code |`git config --global core.editor "code --wait"` -|VSCodium (Free/Libre Open source binaries of VSCode) | `git config --global core.editor "codium --wait"` +|VSCodium (Free/Libre Open Source Software Binaries of VSCode) | `git config --global core.editor "codium --wait"` |WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` |Xi | `git config --global core.editor "xi --wait"` |============================== From dbace1b78f4af101801ab64d5d1ed1e7c7d82797 Mon Sep 17 00:00:00 2001 From: Kenneth Lum Date: Tue, 7 Apr 2020 01:16:28 -0700 Subject: [PATCH 015/549] fix typo fix typo --- book/A-git-in-other-environments/sections/visualstudiocode.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 31e8de20..581324d9 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -15,7 +15,7 @@ The main features are: ** Push/pull/sync with a remote branch. ** Resolve merge conflicts. ** View diffs. -* With a extension, you can also handle GitHub Pull Requests: +* With an extension, you can also handle GitHub Pull Requests: https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[] The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[] From 45588051bf5680d9915d596d4c8e844bbb7bf305 Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Tue, 7 Apr 2020 19:31:44 +0200 Subject: [PATCH 016/549] Fix error when describing the Smart Protool --- book/10-git-internals/sections/transfer-protocols.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index 554d04a1..ba728a4f 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -153,8 +153,8 @@ $ ssh -x git@server "git-receive-pack 'simplegit-progit.git'" The `git-receive-pack` command immediately responds with one line for each reference it currently has – in this case, just the `master` branch and its SHA-1. The first line also has a list of the server's capabilities (here, `report-status`, `delete-refs`, and some others, including the client identifier). -Each line starts with a 4-character hex value specifying how long the rest of the line is. -Your first line starts with 00a5, which is hexadecimal for 165, meaning that 165 bytes remain on that line. +Each line starts with a 4-character hex value specifying how long the whole the line is (including the 4-character length itself and the trailing linefeed). +Your first line starts with 00a5, which is hexadecimal for 165, meaning the line is 165 bytes long. The next line is 0000, meaning the server is done with its references listing. Now that it knows the server's state, your `send-pack` process determines what commits it has that the server doesn't. From 97e955ce34c20c1d3b9cca18038838d1a34c26aa Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Tue, 7 Apr 2020 20:47:32 +0200 Subject: [PATCH 017/549] Improve terminology --- book/10-git-internals/sections/transfer-protocols.asc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index ba728a4f..67753b22 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -153,9 +153,9 @@ $ ssh -x git@server "git-receive-pack 'simplegit-progit.git'" The `git-receive-pack` command immediately responds with one line for each reference it currently has – in this case, just the `master` branch and its SHA-1. The first line also has a list of the server's capabilities (here, `report-status`, `delete-refs`, and some others, including the client identifier). -Each line starts with a 4-character hex value specifying how long the whole the line is (including the 4-character length itself and the trailing linefeed). -Your first line starts with 00a5, which is hexadecimal for 165, meaning the line is 165 bytes long. -The next line is 0000, meaning the server is done with its references listing. +The data is transmitted in chunks. Each chunk starts with a 4-character hex value specifying how long the chunk is (including the 4 bytes of the length itself). Chunks usually contain a single line of data and a trailing linefeed. +Your first chunk starts with 00a5, which is hexadecimal for 165, meaning the chunk is 165 bytes long. +The next chunk is 0000, meaning the server is done with its references listing. Now that it knows the server's state, your `send-pack` process determines what commits it has that the server doesn't. For each reference that this push will update, the `send-pack` process tells the `receive-pack` process that information. @@ -209,6 +209,8 @@ The client then makes another request, this time a `POST`, with the data that `s The `POST` request includes the `send-pack` output and the packfile as its payload. The server then indicates success or failure with its HTTP response. + + ===== Downloading Data (((git commands, fetch-pack)))(((git commands, upload-pack))) From 7ce52501cc2d8b31e84a8293de3cacc36ac3390b Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Tue, 7 Apr 2020 20:51:07 +0200 Subject: [PATCH 018/549] Clarify HTTP chunked transfer encoding --- book/10-git-internals/sections/transfer-protocols.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index 67753b22..b232ecf2 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -209,7 +209,7 @@ The client then makes another request, this time a `POST`, with the data that `s The `POST` request includes the `send-pack` output and the packfile as its payload. The server then indicates success or failure with its HTTP response. - +Keep in mind the HTTP protocol may further wrap this data inside a chunked transfer encoding. ===== Downloading Data From 4aa90c73b447883cff454e57ce9053d5e47920fe Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Wed, 8 Apr 2020 00:47:48 +0200 Subject: [PATCH 019/549] Stick to one sentence per line --- book/10-git-internals/sections/transfer-protocols.asc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index b232ecf2..9b9e6dec 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -153,7 +153,9 @@ $ ssh -x git@server "git-receive-pack 'simplegit-progit.git'" The `git-receive-pack` command immediately responds with one line for each reference it currently has – in this case, just the `master` branch and its SHA-1. The first line also has a list of the server's capabilities (here, `report-status`, `delete-refs`, and some others, including the client identifier). -The data is transmitted in chunks. Each chunk starts with a 4-character hex value specifying how long the chunk is (including the 4 bytes of the length itself). Chunks usually contain a single line of data and a trailing linefeed. +The data is transmitted in chunks. +Each chunk starts with a 4-character hex value specifying how long the chunk is (including the 4 bytes of the length itself). +Chunks usually contain a single line of data and a trailing linefeed. Your first chunk starts with 00a5, which is hexadecimal for 165, meaning the chunk is 165 bytes long. The next chunk is 0000, meaning the server is done with its references listing. From 435431291a2212be3689072843be77709749712b Mon Sep 17 00:00:00 2001 From: Petr Bodnar Date: Sat, 11 Apr 2020 19:58:11 +0200 Subject: [PATCH 020/549] fix sentence flow: not "however", but "so" Rationale: "However" would start a contradiction, while there is a simple implication, so "so" or "therefore" needs to be used. --- book/10-git-internals/sections/maintenance.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index 49b75f6a..3b91e83e 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -50,7 +50,7 @@ cac0cab538b970a37ea1e769cbbde608743bc96d refs/tags/v1.0 If you update a reference, Git doesn't edit this file but instead writes a new file to `refs/heads`. To get the appropriate SHA-1 for a given reference, Git checks for that reference in the `refs` directory and then checks the `packed-refs` file as a fallback. -However, if you can't find a reference in the `refs` directory, it's probably in your `packed-refs` file. +So, if you can't find a reference in the `refs` directory, it's probably in your `packed-refs` file. Notice the last line of the file, which begins with a `^`. This means the tag directly above is an annotated tag and that line is the commit that the annotated tag points to. From 1fc890021c4d28a94839c1dfb7867991bd17c508 Mon Sep 17 00:00:00 2001 From: Petr Bodnar Date: Mon, 13 Apr 2020 18:45:52 +0200 Subject: [PATCH 021/549] removing unnecessary comma Co-Authored-By: Ben Straub --- book/10-git-internals/sections/maintenance.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index 3b91e83e..b28cf131 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -50,7 +50,7 @@ cac0cab538b970a37ea1e769cbbde608743bc96d refs/tags/v1.0 If you update a reference, Git doesn't edit this file but instead writes a new file to `refs/heads`. To get the appropriate SHA-1 for a given reference, Git checks for that reference in the `refs` directory and then checks the `packed-refs` file as a fallback. -So, if you can't find a reference in the `refs` directory, it's probably in your `packed-refs` file. +So if you can't find a reference in the `refs` directory, it's probably in your `packed-refs` file. Notice the last line of the file, which begins with a `^`. This means the tag directly above is an annotated tag and that line is the commit that the annotated tag points to. From 8167756d13958ce0f331165322993021fa046619 Mon Sep 17 00:00:00 2001 From: franjozen Date: Wed, 15 Apr 2020 10:17:32 +0300 Subject: [PATCH 022/549] Updated link to PowerShell Gallery overview The previous link lead to a 404-page --- book/A-git-in-other-environments/sections/powershell.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 5fd049e8..634ddc62 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -31,7 +31,7 @@ More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershe ===== PowerShell Gallery If you have at least PowerShell 5 or PowerShell 4 with PackageManagement installed, you can use the package manager to install posh-git for you. -More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/gallery/overview[] +More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[] [source,powershell] ----- > Install-Module posh-git -Scope CurrentUser -Force From ddc407347ae997dab02d0af43cff5c4d10bda944 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 8 Mar 2020 21:24:37 +0300 Subject: [PATCH 023/549] Add empty lines accordingly common format --- .../sections/client-bzr.asc | 10 +++++++- .../sections/import-bzr.asc | 1 + .../sections/powershell.asc | 25 +++++++++++++------ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index 3487f9ba..d8a5d4bd 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -10,6 +10,7 @@ Nevertheless, it is possible to work on a Bazaar repository from a Git one. There are many projects that allow you to use Git as a Bazaar client. Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[]. To install it, you just have to download the file git-remote-bzr in a folder contained in your `$PATH`: + [source,console] ---- $ wget https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr -O ~/bin/git-remote-bzr @@ -24,10 +25,11 @@ That's all! It is simple to use. It is enough to clone a Bazaar repository prefixing it by `bzr::`. Since Git and Bazaar both do full clones to your machine, it's possible to attach a Git clone to your local Bazaar clone, but it isn't recommended. -It's much easier to attach your Git clone directly to the same place your Bazaar clone is attached to ‒ the central repository. +It's much easier to attach your Git clone directly to the same place your Bazaar clone is attached to -- the central repository. Let's suppose that you worked with a remote repository which is at address `bzr+ssh://developer@mybazaarserver:myproject`. Then you must clone it in the following way: + [source,console] ---- $ git clone bzr::bzr+ssh://developer@mybazaarserver:myproject myProject-Git @@ -36,6 +38,7 @@ $ cd myProject-Git At this point, your Git repository is created but it is not compacted for optimal disk use. That's why you should also clean and compact your Git repository, especially if it is a big one: + [source,console] ---- $ git gc --aggressive @@ -45,18 +48,21 @@ $ git gc --aggressive Bazaar only allows you to clone branches, but a repository may contain several branches, and `git-remote-bzr` can clone both. For example, to clone a branch: + [source,console] ---- $ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk ---- And to clone the whole repository: + [source,console] ---- $ git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacs ---- The second command clones all the branches contained in the emacs repository; nevertheless, it is possible to point out some branches: + [source,console] ---- $ git config remote-bzr.branches 'trunk, xwindow' @@ -99,6 +105,7 @@ However, be careful with its creation because with Git it is impossible to re-in To fetch the changes of the remote, you pull changes as usually, using Git commands. Supposing that your changes are on the `master` branch, you merge or rebase your work on the `origin/master` branch: + [source,console] ---- $ git pull --rebase origin @@ -110,6 +117,7 @@ Because Bazaar also has the concept of merge commits, there will be no problem i So you can work on a branch, merge the changes into `master` and push your work. Then, you create your branches, you test and commit your work as usual. You finally push your work to the Bazaar repository: + [source,console] ---- $ git push origin master diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index 7617d0bb..a214ad6f 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -52,6 +52,7 @@ Traceback (most recent call last): ImportError: No module named fastimport $ pip install fastimport ---- + If it is not available, you can download it at address https://pypi.python.org/pypi/fastimport/. In the second case (on Windows), `bzr-fastimport` is automatically installed with the standalone version and the default installation (let all the checkboxes checked). diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 634ddc62..8c140e6a 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -12,7 +12,9 @@ It looks like this: image::images/posh-git.png[PowerShell with Posh-git.] ==== Installation + ===== Prerequisites (Windows only) + Before you're able to run PowerShell scripts on your machine, you need to set your local ExecutionPolicy to RemoteSigned (Basically anything except Undefined and Restricted). If you choose AllSigned instead of RemoteSigned, also local scripts (your own) need to be digitally signed in order to be executed. With RemoteSigned, only Scripts having the "ZoneIdentifier" set to Internet (were downloaded from the web) need to be signed, others not. @@ -24,19 +26,22 @@ More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[] [source,powershell] ------ +---- > Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force ------ +---- ===== PowerShell Gallery + If you have at least PowerShell 5 or PowerShell 4 with PackageManagement installed, you can use the package manager to install posh-git for you. More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[] + [source,powershell] ------ +---- > Install-Module posh-git -Scope CurrentUser -Force > Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force # Newer beta version with PowerShell Core support ------ +---- + If you want to install posh-git for all users, use "-Scope AllUsers" instead and execute the command from an elevated PowerShell console. If the second command fails with an error like `Module 'PowerShellGet' was not installed by using Install-Module`, you'll need to run another command first: @@ -49,25 +54,29 @@ Then you can go back and try again. This happens, because the modules that ship with Windows PowerShell are signed with a different publishment certificate. ===== Update PowerShell Prompt + To include git information in your prompt, the posh-git module needs to be imported. To have posh-git imported every time PowerShell starts, execute the Add-PoshGitToProfile command which will add the import statement into you $profile script. This script is executed everytime you open a new PowerShell console. Keep in mind, that there are multiple $profile scripts. E. g. one for the console and a separate one for the ISE. + [source,powershell] ------ +---- > Import-Module posh-git > Add-PoshGitToProfile -AllHosts ------ +---- ===== From Source + Just download a posh-git release from (https://github.com/dahlbyk/posh-git[]), and uncompress it. Then import the module using the full path to the posh-git.psd1 file: + [source,powershell] ------ +---- > Import-Module \src\posh-git.psd1 > Add-PoshGitToProfile -AllHosts ------ +---- This will add the proper line to your `profile.ps1` file, and posh-git will be active the next time you open PowerShell. For a description of the Git status summary information displayed in the prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] From a2ef6c77a6226fc36d8f2ab363a1396ede11fad7 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Thu, 19 Mar 2020 10:16:09 +0300 Subject: [PATCH 024/549] Remove redundant lines accordingly common format Use spaces instead of tabs in the code snippet --- book/B-embedding-git/sections/go-git.asc | 17 +++++++---------- book/B-embedding-git/sections/libgit2.asc | 6 +----- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index f019d2f3..2851b962 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -21,7 +21,6 @@ r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ As soon as you have a `Repository` instance, you can access information and perform mutations on it: - [source, go] ----- // retrieves the branch pointed by HEAD @@ -39,7 +38,6 @@ for _, c := range history { } ----- - ==== Advanced Functionality go-git has few notable advanced features, one of which is a pluggable storage system, which is similar to Libgit2 backends. @@ -63,13 +61,13 @@ Another advanced use-case includes a fine-tunable HTTP client, such as the one f [source, go] ----- customClient := &http.Client{ - Transport: &http.Transport{ // accept any certificate (might be useful for testing) - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - }, - Timeout: 15 * time.Second, // 15 second timeout - CheckRedirect: func(req *http.Request, via []*http.Request) error { - return http.ErrUseLastResponse // don't follow redirect - }, + Transport: &http.Transport{ // accept any certificate (might be useful for testing) + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + Timeout: 15 * time.Second, // 15 second timeout + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse // don't follow redirect + }, } // Override http(s) default protocol to use our custom client @@ -79,7 +77,6 @@ client.InstallProtocol("https", githttp.NewClient(customClient)) r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ----- - ==== Further Reading A full treatment of go-git's capabilities is outside the scope of this book. diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index a83b4d09..9c4e3b76 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -66,7 +66,7 @@ tree = commit.tree ---- As you can see, the code is much less cluttered. -Firstly, Rugged uses exceptions; it can raise things like `ConfigError` or `ObjectError` to signal error conditions. +Firstly, Rugged uses exceptions; it can raise things like `ConfigError` or `ObjectError` to signal error conditions. Secondly, there's no explicit freeing of resources, since Ruby is garbage-collected. Let's take a look at a slightly more complicated example: crafting a commit from scratch @@ -108,7 +108,6 @@ commit = repo.lookup(commit_id) # <8> The Ruby code is nice and clean, but since Libgit2 is doing the heavy lifting, this code will run pretty fast, too. If you're not a rubyist, we touch on some other bindings in <<_libgit2_bindings>>. - ==== Advanced Functionality Libgit2 has a couple of capabilities that are outside the scope of core Git. @@ -187,7 +186,6 @@ Here we show a small example using a few of the more complete bindings packages The official collection of bindings can be found by browsing the repositories at https://github.com/libgit2[]. The code we'll write will return the commit message from the commit eventually pointed to by HEAD (sort of like `git log -1`). - ===== LibGit2Sharp (((.NET)))(((C#)))(((Mono))) @@ -218,7 +216,6 @@ NSString *msg = [[[repo headReferenceWithError:NULL] resolvedTarget] message]; Objective-git is fully interoperable with Swift, so don't fear if you've left Objective-C behind. - ===== pygit2 (((Python))) @@ -233,7 +230,6 @@ pygit2.Repository("/path/to/repo") # open repository .message # read the message ---- - ==== Further Reading Of course, a full treatment of Libgit2's capabilities is outside the scope of this book. From 03e641cea0c8012b8a7b7c02f043a50873284dfb Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Thu, 19 Mar 2020 10:19:13 +0300 Subject: [PATCH 025/549] Use double dash accordingly common format --- book/B-embedding-git/sections/jgit.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index 694529f3..b8c79499 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -128,7 +128,7 @@ Git git = new Git(repo); ---- The Git class has a nice set of high-level _builder_-style methods that can be used to construct some pretty complex behavior. -Let's take a look at an example – doing something like `git ls-remote`: +Let's take a look at an example -- doing something like `git ls-remote`: [source,java] ---- From 7ac4ff57bcc318b75b30cb17176435f722cf59a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Bj=C3=B8rnestad?= Date: Mon, 20 Apr 2020 14:58:05 +0200 Subject: [PATCH 026/549] Replace dot with colon before code example to be consistent with the other paragraphs --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index dc268b61..c09bfaeb 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -465,7 +465,7 @@ Fast forward 1 files changed, 9 insertions(+), 1 deletions(-) ---- -Finally, Jessica might want to make a couple minor changes to all that merged content, so she is free to make those changes, commit them to her local `featureA` branch, and push the end result back to the server. +Finally, Jessica might want to make a couple minor changes to all that merged content, so she is free to make those changes, commit them to her local `featureA` branch, and push the end result back to the server: [source,console] ---- From d4caff5d76eee94081b4d6cdaee9b136aba53d30 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 19 Apr 2020 09:21:20 +0300 Subject: [PATCH 027/549] Apply monospaced font for parameters names and their values --- .../sections/powershell.asc | 23 +++++++++++-------- .../sections/zsh.asc | 10 ++++---- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 8c140e6a..e1ef2bc4 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -15,16 +15,18 @@ image::images/posh-git.png[PowerShell with Posh-git.] ===== Prerequisites (Windows only) -Before you're able to run PowerShell scripts on your machine, you need to set your local ExecutionPolicy to RemoteSigned (Basically anything except Undefined and Restricted). -If you choose AllSigned instead of RemoteSigned, also local scripts (your own) need to be digitally signed in order to be executed. -With RemoteSigned, only Scripts having the "ZoneIdentifier" set to Internet (were downloaded from the web) need to be signed, others not. -If you're an administrator and want to set it for all Users on that machine, use "-Scope LocalMachine". -If you're a normal user, without administrative rights, you can use "-Scope CurrentUser" to set it only for you. +Before you're able to run PowerShell scripts on your machine, you need to set your local `ExecutionPolicy` to `RemoteSigned` (basically, anything except `Undefined` and `Restricted`). +If you choose `AllSigned` instead of `RemoteSigned`, also local scripts (your own) need to be digitally signed in order to be executed. +With `RemoteSigned`, only scripts having the `ZoneIdentifier` set to `Internet` (were downloaded from the web) need to be signed, others not. +If you're an administrator and want to set it for all users on that machine, use `-Scope LocalMachine`. +If you're a normal user, without administrative rights, you can use `-Scope CurrentUser` to set it only for you. More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[] More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[] +To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the next command: + [source,powershell] ---- > Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force @@ -42,7 +44,7 @@ More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powe > Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force # Newer beta version with PowerShell Core support ---- -If you want to install posh-git for all users, use "-Scope AllUsers" instead and execute the command from an elevated PowerShell console. +If you want to install posh-git for all users, use `-Scope AllUsers` instead and execute the command from an elevated PowerShell console. If the second command fails with an error like `Module 'PowerShellGet' was not installed by using Install-Module`, you'll need to run another command first: [source,powershell] @@ -56,9 +58,9 @@ This happens, because the modules that ship with Windows PowerShell are signed w ===== Update PowerShell Prompt To include git information in your prompt, the posh-git module needs to be imported. -To have posh-git imported every time PowerShell starts, execute the Add-PoshGitToProfile command which will add the import statement into you $profile script. +To have posh-git imported every time PowerShell starts, execute the `Add-PoshGitToProfile` command which will add the import statement into you `$profile` script. This script is executed everytime you open a new PowerShell console. -Keep in mind, that there are multiple $profile scripts. +Keep in mind, that there are multiple `$profile` scripts. E. g. one for the console and a separate one for the ISE. [source,powershell] @@ -69,8 +71,8 @@ E. g. one for the console and a separate one for the ISE. ===== From Source -Just download a posh-git release from (https://github.com/dahlbyk/posh-git[]), and uncompress it. -Then import the module using the full path to the posh-git.psd1 file: +Just download a posh-git release from https://github.com/dahlbyk/posh-git/releases[], and uncompress it. +Then import the module using the full path to the `posh-git.psd1` file: [source,powershell] ---- @@ -79,5 +81,6 @@ Then import the module using the full path to the posh-git.psd1 file: ---- This will add the proper line to your `profile.ps1` file, and posh-git will be active the next time you open PowerShell. + For a description of the Git status summary information displayed in the prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] For more details on how to customize your posh-git prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[] diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 2d9c80e6..e389a070 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -37,14 +37,12 @@ This results in a display of the current branch on the right-hand side of the te (The left side is supported as well, of course; just uncomment the assignment to PROMPT.) It looks a bit like this: -.Customized `zsh` prompt. +.Customized `zsh` prompt image::images/zsh-prompt.png[Customized `zsh` prompt.] -For more information on vcs_info, check out its documentation - in the `zshcontrib(1)` manual page, - or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. +For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. -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. +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. `git-prompt.sh` is compatible with both Bash and Zsh. Zsh is powerful enough that there are entire frameworks dedicated to making it better. @@ -53,5 +51,5 @@ oh-my-zsh's plugin system comes with powerful git tab-completion, and it has a v <> is just one example of what can be done with this system. [[oh_my_zsh_git]] -.An example of an oh-my-zsh theme. +.An example of an oh-my-zsh theme image::images/zsh-oh-my.png[An example of an oh-my-zsh theme.] From 117d2f6f3255b8086d9d541f2ca5b0c526216be2 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Mon, 20 Apr 2020 22:45:05 +0300 Subject: [PATCH 028/549] Use four dashes to wrap code snippets accordingly to AsciiDoc format --- book/07-git-tools/sections/credentials.asc | 4 ++-- book/07-git-tools/sections/signing.asc | 4 ++-- .../sections/bash.asc | 8 ++++---- .../sections/guis.asc | 4 ++-- book/B-embedding-git/sections/dulwich.asc | 8 ++++---- book/B-embedding-git/sections/go-git.asc | 16 ++++++++-------- book/B-embedding-git/sections/libgit2.asc | 12 ++++++------ 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 7ff7826a..408f5b40 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -164,9 +164,9 @@ Once again, we'll write this extension in Ruby, but any language will work so lo Here's the full source code of our new credential helper: [source,ruby] --------- +---- include::../git-credential-read-only[] --------- +---- <1> Here we parse the command-line options, allowing the user to specify the input file. The default is `~/.git-credentials`. diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index c6a29dff..8143ab66 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -51,7 +51,7 @@ user: "Ben Straub " If you run `git show` on that tag, you can see your GPG signature attached to it: [source,console] --------- +---- $ git show v1.5 tag v1.5 Tagger: Ben Straub @@ -75,7 +75,7 @@ Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 Change version number --------- +---- ==== Verifying Tags diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index e680b716..f2002b3e 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -8,9 +8,9 @@ First, you need to get a copy of the `contrib/completion/git-completion.bash` fi Copy it somewhere handy, like your home directory, and add this to your `.bashrc`: [source,console] ------ +---- . ~/git-completion.bash ------ +---- Once that's done, change your directory to a Git repository, and type: @@ -27,11 +27,11 @@ This can be as simple or complex as you want, but there are generally a few key To add these to your prompt, just copy the `contrib/completion/git-prompt.sh` file from Git's source repository to your home directory, add something like this to your `.bashrc`: [source,console] ------ +---- . ~/git-prompt.sh export GIT_PS1_SHOWDIRTYSTATE=1 export PS1='\w$(__git_ps1 " (%s)")\$ ' ------ +---- The `\w` means print the current working directory, the `\$` prints the `$` part of the prompt, and `__git_ps1 " (%s)"` calls the function provided by `git-prompt.sh` with a formatting argument. Now your bash prompt will look like this when you're anywhere inside a Git-controlled project: diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index 966d9863..840a7447 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -43,9 +43,9 @@ In between is a collection of controls used for searching history. It, too, is easiest to invoke from the command line: [source,console] ------ +---- $ git gui ------ +---- And it looks something like this: diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index deaa26fd..c202686d 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -11,7 +11,7 @@ Dulwich follows git design and separate two basic levels of API: plumbing and po Here is an example of using the lower level API to access the commit message of the last commit: [source, python] ------ +---- from dulwich.repo import Repo r = Repo('.') r.head() @@ -23,19 +23,19 @@ c c.message # 'Add note about encoding.\n' ------ +---- To print a commit log using high-level porcelain API, one can use: [source, python] ------ +---- from dulwich import porcelain porcelain.log('.', max_entries=1) #commit: 57fbe010446356833a6ad1600059d80b1e731e15 #Author: Jelmer Vernooij #Date: Sat Apr 29 2017 23:57:34 +0000 ------ +---- ==== Further Reading diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index 2851b962..3335802b 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -10,19 +10,19 @@ go-git is focused on extensibility, compatibility and supports most of the plumb Here is a basic example of using Go APIs: [source, go] ------ +---- import "github.com/go-git/go-git/v5" r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ URL: "https://github.com/go-git/go-git", Progress: os.Stdout, }) ------ +---- As soon as you have a `Repository` instance, you can access information and perform mutations on it: [source, go] ------ +---- // retrieves the branch pointed by HEAD ref, err := r.Head() @@ -36,7 +36,7 @@ history, err := commit.History() for _, c := range history { fmt.Println(c) } ------ +---- ==== Advanced Functionality @@ -44,11 +44,11 @@ go-git has few notable advanced features, one of which is a pluggable storage sy The default implementation is in-memory storage, which is very fast. [source, go] ------ +---- r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ URL: "https://github.com/go-git/go-git", }) ------ +---- Pluggable storage provides many interesting options. For instance, https://github.com/go-git/go-git/tree/master/_examples/storage[] allows you to store references, objects, and configuration in an Aerospike database. @@ -59,7 +59,7 @@ Using https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem[] it i Another advanced use-case includes a fine-tunable HTTP client, such as the one found at https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[]. [source, go] ------ +---- customClient := &http.Client{ Transport: &http.Transport{ // accept any certificate (might be useful for testing) TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, @@ -75,7 +75,7 @@ client.InstallProtocol("https", githttp.NewClient(customClient)) // Clone repository using the new client if the protocol is https:// r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ------ +---- ==== Further Reading diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 9c4e3b76..7230a1ae 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -9,7 +9,7 @@ First, let's take a look at what the C API looks like. Here's a whirlwind tour: [source,c] ------ +---- // Open a repository git_repository *repo; int error = git_repository_open(&repo, "/path/to/repository"); @@ -28,7 +28,7 @@ const git_oid *tree_id = git_commit_tree_id(commit); // Cleanup git_commit_free(commit); git_repository_free(repo); ------ +---- The first couple of lines open a Git repository. The `git_repository` type represents a handle to a repository with a cache in memory. @@ -194,9 +194,9 @@ The bindings are written in C#, and great care has been taken to wrap the raw Li Here's what our example program looks like: [source,csharp] ------ +---- new Repository(@"C:\path\to\repo").Head.Tip.Message; ------ +---- For desktop Windows applications, there's even a NuGet package that will help you get started quickly. @@ -208,11 +208,11 @@ Objective-Git (https://github.com/libgit2/objective-git[]) is the name of the Li The example program looks like this: [source,objc] ------ +---- GTRepository *repo = [[GTRepository alloc] initWithURL:[NSURL fileURLWithPath: @"/path/to/repo"] error:NULL]; NSString *msg = [[[repo headReferenceWithError:NULL] resolvedTarget] message]; ------ +---- Objective-git is fully interoperable with Swift, so don't fear if you've left Objective-C behind. From 8e73b7dc15491cc7cee3dc89aa079b83c2a984d9 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Tue, 21 Apr 2020 00:19:27 +0300 Subject: [PATCH 029/549] Fix typo --- book/A-git-in-other-environments/sections/powershell.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index e1ef2bc4..41d92a91 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -58,7 +58,7 @@ This happens, because the modules that ship with Windows PowerShell are signed w ===== Update PowerShell Prompt To include git information in your prompt, the posh-git module needs to be imported. -To have posh-git imported every time PowerShell starts, execute the `Add-PoshGitToProfile` command which will add the import statement into you `$profile` script. +To have posh-git imported every time PowerShell starts, execute the `Add-PoshGitToProfile` command which will add the import statement into your `$profile` script. This script is executed everytime you open a new PowerShell console. Keep in mind, that there are multiple `$profile` scripts. E. g. one for the console and a separate one for the ISE. From 09a22a7d2426ff9b26b869739b776ac79aba5eb9 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Tue, 21 Apr 2020 13:26:27 +0300 Subject: [PATCH 030/549] Colobarators limit has been removed by GitHub --- book/06-github/sections/1-setting-up-account.asc | 1 - 1 file changed, 1 deletion(-) diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 475c7edf..76630ecc 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -14,7 +14,6 @@ Go ahead and do this; it's pretty important (as we'll see later). [NOTE] ==== GitHub provides almost all of its functionality with free accounts, except some advanced features. -Additionally, private repositories are limited to 3 collaborators. GitHub's paid plans include advanced tools and features as well as increased limits for free services, but we won't be covering those in this book. To get more information about available plans and their comparison, visit https://github.com/pricing[]. From 662964257765cf2cb834c6b2c18a33da0da508e0 Mon Sep 17 00:00:00 2001 From: "Alan D. Salewski" Date: Tue, 21 Apr 2020 14:22:01 -0400 Subject: [PATCH 031/549] submodules.asc: clarify DbConnector/try-merge example Fix AsciiDoc 'source,console' block to render separately the consecutive commands 'git branch try-merge c771610' and 'git merge try-merge'. This is accomplished by separating the commands with an empty line, and by omitting the unneeded "(DbConnector) " prefix in front of the 'git merge...' command prompt. Puts the example into the form consistent with the other command blocks, and also enhances readability. State explicitly in the prose that "try-merge" will be the name of the branch. --- book/07-git-tools/sections/submodules.asc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 0918af89..87bb59f2 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -605,7 +605,7 @@ This is what you'll have to merge in and resolve. You can either just try the merge with the SHA-1 directly, or you can create a branch for it and then try to merge that in. We would suggest the latter, even if only to make a nicer merge commit message. -So, we will go into our submodule directory, create a branch based on that second SHA-1 from `git diff` and manually merge. +So, we will go into our submodule directory, create a branch named ``try-merge'' based on that second SHA-1 from `git diff`, and manually merge. [source,console] ---- @@ -615,7 +615,8 @@ $ git rev-parse HEAD eb41d764bccf88be77aced643c13a7fa86714135 $ git branch try-merge c771610 -(DbConnector) $ git merge try-merge + +$ git merge try-merge Auto-merging src/main.c CONFLICT (content): Merge conflict in src/main.c Recorded preimage for 'src/main.c' From 2c0769d3f8784430620d2c03b130cb3e473cbad0 Mon Sep 17 00:00:00 2001 From: Smaug123 Date: Thu, 7 May 2020 20:56:22 +0100 Subject: [PATCH 032/549] Add note about commit objects not being reproducible --- book/10-git-internals/sections/objects.asc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index d0fa0b15..8f793311 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -257,8 +257,14 @@ $ echo 'First commit' | git commit-tree d8329f fdf4fc3344e67ab068f836878b6c4951e3b15f3d ---- + +[NOTE] +==== You will get a different hash value because of different creation time and author data. +Moreover, while in principle any commit object can be reproduced precisely given that data, historical details of this book's construction mean that the printed commit hashes might not correspond to the given commits. Replace commit and tag hashes with your own checksums further in this chapter. +==== + Now you can look at your new commit object with `git cat-file`: [source,console] From e2a3b2b6dbd217a7ea0ac94d9e0588fb91b1ce3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wesley=20Gon=C3=A7alves?= Date: Mon, 11 May 2020 02:57:59 -0300 Subject: [PATCH 033/549] fix outdated information about pushing tags Fix information about pushing only annotated tags Github issue #1426 --- book/02-git-basics/sections/tagging.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index ae6e081c..b0e9030a 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -220,7 +220,7 @@ Now, when someone else clones or pulls from your repository, they will get all y [NOTE] .`git push` pushes both types of tags ==== -Pushing tags using `git push --tags` does not distinguish between lightweight and annotated tags; there is no simple option that allows you to select just one type for pushing. +Pushing tags using `git push --tags` does not distinguish between lightweight and annotated tags; However, if you use `git push --follow-tags` only annotated tags will be pushed to the remote. ==== ==== Deleting Tags From c2ae4012af676dbda3ab40c83fbe835b59545f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wesley=20Gon=C3=A7alves?= Date: Tue, 12 May 2020 22:10:12 -0300 Subject: [PATCH 034/549] Clarify the explanation of the options available to push tags Co-authored-by: Ben Straub --- book/02-git-basics/sections/tagging.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index b0e9030a..30c32393 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -220,7 +220,8 @@ Now, when someone else clones or pulls from your repository, they will get all y [NOTE] .`git push` pushes both types of tags ==== -Pushing tags using `git push --tags` does not distinguish between lightweight and annotated tags; However, if you use `git push --follow-tags` only annotated tags will be pushed to the remote. +`git push --tags` will push both lightweight and annotated tags. +There is currently no option to push only lightweight tags, but if you use `git push --follow-tags` only annotated tags will be pushed to the remote. ==== ==== Deleting Tags From be569c660563e17517dc3a2d910182940ddd6cd3 Mon Sep 17 00:00:00 2001 From: sharpiro Date: Thu, 21 May 2020 09:44:50 -0400 Subject: [PATCH 035/549] fix 'Splitting a Commit' rebase bug The first commit in the rebase script `f7f3f6d` should be unmodified after the script is complete --- book/07-git-tools/sections/rewriting-history.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index be5c5191..4c98eda4 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -292,10 +292,10 @@ $ git log -4 --pretty=format:"%h %s" 1c002dd Add cat-file 9b29157 Add blame 35cfb2b Update README formatting -f3cc40e Change my name a bit +f7f3f6d Change my name a bit ---- -Once again, this changes the SHA-1s of all the commits in your list, so make sure no commit shows up in that list that you've already pushed to a shared repository. +This changes the SHA-1s of the three most recent commits in your list, so make sure no changed commit shows up in that list that you've already pushed to a shared repository. Notice that the last commit (`f7f3f6d`) in the list is unchanged. Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. ==== The Nuclear Option: filter-branch From 0f1a8e431d8cbe0e5b804b1062fdea0934662030 Mon Sep 17 00:00:00 2001 From: sharpiro Date: Sat, 23 May 2020 08:34:48 -0400 Subject: [PATCH 036/549] move new sentences to new source lines --- book/07-git-tools/sections/rewriting-history.asc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 4c98eda4..95a37e6e 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -295,7 +295,9 @@ $ git log -4 --pretty=format:"%h %s" f7f3f6d Change my name a bit ---- -This changes the SHA-1s of the three most recent commits in your list, so make sure no changed commit shows up in that list that you've already pushed to a shared repository. Notice that the last commit (`f7f3f6d`) in the list is unchanged. Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. +This changes the SHA-1s of the three most recent commits in your list, so make sure no changed commit shows up in that list that you've already pushed to a shared repository. +Notice that the last commit (`f7f3f6d`) in the list is unchanged. +Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. ==== The Nuclear Option: filter-branch From 0b37439aa09ae9f89380cd06fe679da26599bb26 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 22 May 2020 21:48:04 +0200 Subject: [PATCH 037/549] Add link to Martin Fowlers git patterns page Closes #1434 --- .../sections/distributed-workflows.asc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 4d0164ad..769c28e5 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -83,6 +83,18 @@ image::images/benevolent-dictator.png[Benevolent dictator workflow.] This kind of workflow isn't common, but can be useful in very big projects, or in highly hierarchical environments. It allows the project leader (the dictator) to delegate much of the work and collect large subsets of code at multiple points before integrating them. +[[_patterns_for_managing_source_code_branches]] +==== Patterns for Managing Source Code Branches + +[NOTE] +==== +Martin Fowler has made a guide "Patterns for Managing Source Code Branches". +This guide covers all the common Git workflows, and explains how/when to use them. +There's also a section comparing high and low integration frequencies. + +https://martinfowler.com/articles/branching-patterns.html +==== + ==== Workflows Summary These are some commonly used workflows that are possible with a distributed system like Git, but you can see that many variations are possible to suit your particular real-world workflow. From d23bf5e73548d5fe52e9f8f1b191909d234ceb9c Mon Sep 17 00:00:00 2001 From: Osman Khwaja Date: Sun, 14 Jun 2020 17:19:55 -0700 Subject: [PATCH 038/549] use bytesize --- book/10-git-internals/sections/objects.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 8f793311..c502e43c 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -370,7 +370,7 @@ To that first part of the header, Git adds a space followed by the size in bytes [source,console] ---- ->> header = "blob #{content.length}\0" +>> header = "blob #{content.bytesize}\0" => "blob 16\u0000" ---- From 37ad532f84ec212f381cb5e5481724766ee0c2fe Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Wed, 24 Jun 2020 06:33:20 +0000 Subject: [PATCH 039/549] [Fix] remove period mark from the figure captions If a paragraph ends with a figure caption, it ends with double period marks. One of them is due to figure caption, which itself ends with a period and other is for end of paragraph. So removing period from figure captions would be a good idea, as Ben has suggested[1]. Due to this commit, now some paragraphs don't have any period mark at end of paragraph. Those period are their because of caption, that's paragraphs itself don't end with any period, see [2]. [1]: https://github.com/progit/progit2/issues/1437#issuecomment-643633534 [2]: https://github.com/progit/progit2/pull/1444#issuecomment-648754034 Resolves: #1437 --- .../sections/about-version-control.asc | 6 ++-- book/01-introduction/sections/installing.asc | 2 +- book/01-introduction/sections/what-is-git.asc | 6 ++-- .../sections/recording-changes.asc | 2 +- book/03-git-branching/sections/rebasing.asc | 2 +- book/04-git-server/sections/gitlab.asc | 8 ++--- book/04-git-server/sections/gitweb.asc | 2 +- .../sections/contributing.asc | 32 +++++++++---------- .../sections/distributed-workflows.asc | 6 ++-- .../sections/maintaining.asc | 18 +++++------ .../sections/1-setting-up-account.asc | 8 ++--- book/06-github/sections/2-contributing.asc | 26 +++++++-------- book/06-github/sections/3-maintaining.asc | 32 +++++++++---------- .../sections/4-managing-organization.asc | 8 ++--- book/06-github/sections/5-scripting.asc | 14 ++++---- .../sections/revision-selection.asc | 2 +- .../sections/attributes.asc | 4 +-- book/08-customizing-git/sections/config.asc | 2 +- .../sections/client-p4.asc | 4 +-- .../sections/client-tfs.asc | 2 +- book/10-git-internals/sections/objects.asc | 6 ++-- book/10-git-internals/sections/refs.asc | 2 +- .../sections/bash.asc | 2 +- .../sections/eclipse.asc | 2 +- .../sections/guis.asc | 12 +++---- .../sections/jetbrainsides.asc | 2 +- .../sections/powershell.asc | 2 +- .../sections/visualstudio.asc | 4 +-- 28 files changed, 109 insertions(+), 109 deletions(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 0b002580..630ee234 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -19,7 +19,7 @@ It is easy to forget which directory you're in and accidentally write to the wro To deal with this issue, programmers long ago developed local VCSs that had a simple database that kept all the changes to files under revision control. -.Local version control. +.Local version control image::images/local.png[Local version control diagram] One of the most popular VCS tools was a system called RCS, which is still distributed with many computers today. @@ -33,7 +33,7 @@ To deal with this problem, Centralized Version Control Systems (CVCSs) were deve These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place. (((CVS)))(((Subversion)))(((Perforce))) For many years, this has been the standard for version control. -.Centralized version control. +.Centralized version control image::images/centralized.png[Centralized version control diagram] This setup offers many advantages, especially over local VCSs. @@ -54,7 +54,7 @@ In a DVCS (such as Git, Mercurial, Bazaar or Darcs), clients don't just check ou Thus, if any server dies, and these systems were collaborating via that server, any of the client repositories can be copied back up to the server to restore it. Every clone is really a full backup of all the data. -.Distributed version control. +.Distributed version control image::images/distributed.png[Distributed version control diagram] Furthermore, many of these systems deal pretty well with having several remote repositories they can work with, so you can collaborate with different groups of people in different ways simultaneously within the same project. diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 102bb787..6f0a2730 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -48,7 +48,7 @@ If you don't have it installed already, it will prompt you to install it. If you want a more up to date version, you can also install it via a binary installer. A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[]. -.Git macOS Installer. +.Git macOS Installer image::images/git-osx-installer.png[Git macOS installer.] You can also install it as part of the GitHub for macOS install. diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index f9792f8b..47f904ec 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -11,7 +11,7 @@ The major difference between Git and any other VCS (Subversion and friends inclu Conceptually, most other systems store information as a list of file-based changes. These other systems (CVS, Subversion, Perforce, Bazaar, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as _delta-based_ version control). -.Storing data as changes to a base version of each file. +.Storing data as changes to a base version of each file image::images/deltas.png[Storing data as changes to a base version of each file.] Git doesn't think of or store its data this way. @@ -20,7 +20,7 @@ With Git, every time you commit, or save the state of your project, Git basicall To be efficient, if files have not changed, Git doesn't store the file again, just a link to the previous identical file it has already stored. Git thinks about its data more like a *stream of snapshots*. -.Storing data as snapshots of the project over time. +.Storing data as snapshots of the project over time image::images/snapshots.png[Git stores data as snapshots of the project over time.] This is an important distinction between Git and nearly all other VCSs. @@ -84,7 +84,7 @@ Git has three main states that your files can reside in: _modified_, _staged_, a This leads us to the three main sections of a Git project: the working tree, the staging area, and the Git directory. -.Working tree, staging area, and Git directory. +.Working tree, staging area, and Git directory image::images/areas.png["Working tree, staging area, and Git directory."] The working tree is a single checkout of one version of the project. diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 60bfec59..ee76585a 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -13,7 +13,7 @@ When you first clone a repository, all of your files will be tracked and unmodif As you edit files, Git sees them as modified, because you've changed them since your last commit. As you work, you selectively stage these modified files and then commit all those staged changes, and the cycle repeats. -.The lifecycle of the status of your files. +.The lifecycle of the status of your files image::images/lifecycle.png[The lifecycle of the status of your files.] [[_checking_status]] diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index 467a6102..d69714f8 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -198,7 +198,7 @@ For instance, in the previous scenario, if instead of doing a merge when we're a So instead of the result we see in <<_merge_rebase_work>>, we would end up with something more like <<_rebase_rebase_work>>. [[_rebase_rebase_work]] -.Rebase on top of force-pushed rebase work. +.Rebase on top of force-pushed rebase work image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work.] This only works if `C4` and `C4'` that your partner made are almost exactly the same patch. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index a17d0e5d..4b169637 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -16,7 +16,7 @@ To get something up and running quickly, you can download a virtual machine imag One nice touch Bitnami has included is the login screen (accessed by typing alt+→); it tells you the IP address and default username and password for the installed GitLab. [[bitnami]] -.The Bitnami GitLab virtual machine login screen. +.The Bitnami GitLab virtual machine login screen image::images/bitnami.png[The Bitnami GitLab virtual machine login screen.] For anything else, follow the guidance in the GitLab Community Edition readme, which can be found at https://gitlab.com/gitlab-org/gitlab-ce/tree/master[]. @@ -31,7 +31,7 @@ The default username is `admin@local.host`, and the default password is `5iveL!f Once logged in, click the ``Admin area'' icon in the menu at the top right. [[gitlab_menu]] -.The ``Admin area'' item in the GitLab menu. +.The ``Admin area'' item in the GitLab menu image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu.] ===== Users @@ -42,7 +42,7 @@ Each user account comes with a *namespace*, which is a logical grouping of proje If the user +jane+ had a project named +project+, that project's url would be `http://server/jane/project`. [[gitlab_users]] -.The GitLab user administration screen. +.The GitLab user administration screen image::images/gitlab-users.png[The GitLab user administration screen.] Removing a user can be done in two ways. @@ -59,7 +59,7 @@ A GitLab group is an assemblage of projects, along with data about how users can Each group has a project namespace (the same way that users do), so if the group +training+ has a project +materials+, its url would be `http://server/training/materials`. [[gitlab_groups]] -.The GitLab group administration screen. +.The GitLab group administration screen image::images/gitlab-groups.png[The GitLab group administration screen.] Each group is associated with a number of users, each of which has a level of permissions for the group's projects and the group itself. diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index b0c4572d..50885832 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -5,7 +5,7 @@ Now that you have basic read/write and read-only access to your project, you may Git comes with a CGI script called GitWeb that is sometimes used for this. [[gitweb]] -.The GitWeb web-based user interface. +.The GitWeb web-based user interface image::images/git-instaweb.png[The GitWeb web-based user interface.] If you want to check out what GitWeb would look like for your project, Git comes with a command to fire up a temporary instance if you have a lightweight web server on your system like `lighttpd` or `webrick`. diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index c09bfaeb..34fac8c1 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -41,7 +41,7 @@ The Git project provides a document that lays out a number of good tips for crea First, your submissions should not contain any whitespace errors. Git provides an easy way to check for this -- before you commit, run `git diff --check`, which identifies possible whitespace errors and lists them for you. -.Output of `git diff --check`. +.Output of `git diff --check` image::images/git-diff-check.png[Output of `git diff --check`.] If you run that command before committing, you can tell if you're about to commit whitespace issues that may annoy other developers. @@ -184,7 +184,7 @@ From john@githost:simplegit At this point, John's local repository looks something like this: -.John's divergent history. +.John's divergent history image::images/small-team-1.png[John's divergent history.] Now John can merge Jessica's work that he fetched into his own local work: @@ -199,7 +199,7 @@ Merge made by the 'recursive' strategy. As long as that local merge goes smoothly, John's updated history will now look like this: -.John's repository after merging `origin/master`. +.John's repository after merging `origin/master` image::images/small-team-2.png[John's repository after merging `origin/master`.] At this point, John might want to test this new code to make sure none of Jessica's work affects any of his and, as long as everything seems fine, he can finally push the new merged work up to the server: @@ -214,13 +214,13 @@ To john@githost:simplegit.git In the end, John's commit history will look like this: -.John's history after pushing to the `origin` server. +.John's history after pushing to the `origin` server image::images/small-team-3.png[John's history after pushing to the `origin` server.] In the meantime, Jessica has created a new topic branch called `issue54`, and made three commits to that branch. She hasn't fetched John's changes yet, so her commit history looks like this: -.Jessica's topic branch. +.Jessica's topic branch image::images/small-team-4.png[Jessica's topic branch.] Suddenly, Jessica learns that John has pushed some new work to the server and she wants to take a look at it, so she can fetch all new content from the server that she does not yet have with: @@ -237,7 +237,7 @@ From jessica@githost:simplegit That pulls down the work John has pushed up in the meantime. Jessica's history now looks like this: -.Jessica's history after fetching John's changes. +.Jessica's history after fetching John's changes image::images/small-team-5.png[Jessica's history after fetching John's changes.] Jessica thinks her topic branch is ready, but she wants to know what part of John's fetched work she has to merge into her work so that she can push. @@ -298,7 +298,7 @@ Merge made by the 'recursive' strategy. Everything merges cleanly, and Jessica's history now looks like this: -.Jessica's history after merging John's changes. +.Jessica's history after merging John's changes image::images/small-team-6.png[Jessica's history after merging John's changes.] Now `origin/master` is reachable from Jessica's `master` branch, so she should be able to successfully push (assuming John hasn't pushed even more changes in the meantime): @@ -313,7 +313,7 @@ To jessica@githost:simplegit.git Each developer has committed a few times and merged each other's work successfully. -.Jessica's history after pushing all changes back to the server. +.Jessica's history after pushing all changes back to the server image::images/small-team-7.png[Jessica's history after pushing all changes back to the server.] That is one of the simplest workflows. @@ -321,7 +321,7 @@ You work for a while (generally in a topic branch), and merge that work into you When you want to share that work, you fetch and merge your `master` from `origin/master` if it has changed, and finally push to the `master` branch on the server. The general sequence is something like this: -.General sequence of events for a simple multiple-developer Git workflow. +.General sequence of events for a simple multiple-developer Git workflow image::images/small-team-flow.png[General sequence of events for a simple multiple-developer Git workflow.] ==== Private Managed Team @@ -388,7 +388,7 @@ $ git commit -am 'Add ls-files' Jessica's repository now looks like this: -.Jessica's initial commit history. +.Jessica's initial commit history image::images/managed-team-1.png[Jessica's initial commit history.] She's ready to push her work, but gets an email from Josie that a branch with some initial ``featureB'' work on it was already pushed to the server as the `featureBee` branch. @@ -480,20 +480,20 @@ To jessica@githost:simplegit.git Jessica's commit history now looks something like this: -.Jessica's history after committing on a feature branch. +.Jessica's history after committing on a feature branch image::images/managed-team-2.png[Jessica's history after committing on a feature branch.] At some point, Jessica, Josie, and John inform the integrators that the `featureA` and `featureBee` branches on the server are ready for integration into the mainline. After the integrators merge these branches into the mainline, a fetch will bring down the new merge commit, making the history look like this: -.Jessica's history after merging both her topic branches. +.Jessica's history after merging both her topic branches image::images/managed-team-3.png[Jessica's history after merging both her topic branches.] Many groups switch to Git because of this ability to have multiple teams working in parallel, merging the different lines of work late in the process. The ability of smaller subgroups of a team to collaborate via remote branches without necessarily having to involve or impede the entire team is a huge benefit of Git. The sequence for the workflow you saw here is something like this: -.Basic sequence of this managed-team workflow. +.Basic sequence of this managed-team workflow image::images/managed-team-flow.png[Basic sequence of this managed-team workflow.] [[_public_project]] @@ -590,7 +590,7 @@ $ git fetch origin Now, each of your topics is contained within a silo -- similar to a patch queue -- that you can rewrite, rebase, and modify without the topics interfering or interdepending on each other, like so: -.Initial commit history with `featureB` work. +.Initial commit history with `featureB` work image::images/public-small-1.png[Initial commit history with `featureB` work.] Let's say the project maintainer has pulled in a bunch of other patches and tried your first branch, but it no longer cleanly merges. @@ -606,7 +606,7 @@ $ git push -f myfork featureA This rewrites your history to now look like <>. [[psp_b]] -.Commit history after `featureA` work. +.Commit history after `featureA` work image::images/public-small-2.png[Commit history after `featureA` work.] Because you rebased the branch, you have to specify the `-f` to your push command in order to be able to replace the `featureA` branch on the server with a commit that isn't a descendant of it. @@ -632,7 +632,7 @@ Also the `--no-commit` option can be useful to delay the merge commit in case of At this point, you can notify the maintainer that you've made the requested changes, and that they can find those changes in your `featureBv2` branch. -.Commit history after `featureBv2` work. +.Commit history after `featureBv2` work image::images/public-small-3.png[Commit history after `featureBv2` work.] [[_project_over_email]] diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 769c28e5..e07b6e7b 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -14,7 +14,7 @@ In centralized systems, there is generally a single collaboration model -- the c One central hub, or _repository_, can accept code, and everyone synchronizes their work with it. A number of developers are nodes -- consumers of that hub -- and synchronize with that centralized location. -.Centralized workflow. +.Centralized workflow image::images/centralized_workflow.png[Centralized workflow.] This means that if two developers clone from the hub and both make changes, the first developer to push their changes back up can do so with no problems. @@ -52,7 +52,7 @@ The process works as follows (see <>): 6. The maintainer pushes merged changes to the main repository. [[wfdiag_b]] -.Integration-manager workflow. +.Integration-manager workflow image::images/integration-manager.png[Integration-manager workflow.] (((forking))) @@ -77,7 +77,7 @@ The process works like this (see <>): 4. Finally, the dictator pushes that `master` branch to the reference repository so the other developers can rebase on it. [[wfdiag_c]] -.Benevolent dictator workflow. +.Benevolent dictator workflow image::images/benevolent-dictator.png[Benevolent dictator workflow.] This kind of workflow isn't common, but can be useful in very big projects, or in highly hierarchical environments. diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index df1b879a..1eb061bf 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -310,11 +310,11 @@ When you have work in a topic branch that you think you've completed, or work th For instance, if we have a repository with work in two branches named `ruby_client` and `php_client` that looks like <>, and we merge `ruby_client` followed by `php_client`, your history will end up looking like <>. [[merwf_a]] -.History with several topic branches. +.History with several topic branches image::images/merging-workflows-1.png[History with several topic branches.] [[merwf_b]] -.After a topic branch merge. +.After a topic branch merge image::images/merging-workflows-2.png[After a topic branch merge.] That is probably the simplest workflow, but it can possibly be problematic if you're dealing with larger or more stable projects where you want to be really careful about what you introduce. @@ -325,15 +325,15 @@ You regularly push both of these branches to the public repository. Each time you have a new topic branch to merge in (<>), you merge it into `develop` (<>); then, when you tag a release, you fast-forward `master` to wherever the now-stable `develop` branch is (<>). [[merwf_c]] -.Before a topic branch merge. +.Before a topic branch merge image::images/merging-workflows-3.png[Before a topic branch merge.] [[merwf_d]] -.After a topic branch merge. +.After a topic branch merge image::images/merging-workflows-4.png[After a topic branch merge.] [[merwf_e]] -.After a project release. +.After a project release image::images/merging-workflows-5.png[After a topic branch release.] This way, when people clone your project's repository, they can either check out `master` to build the latest stable version and keep up to date on that easily, or they can check out `develop`, which is the more cutting-edge content. @@ -349,7 +349,7 @@ At this point, the topics are evaluated to determine whether they're safe and re If they're safe, they're merged into `next`, and that branch is pushed up so everyone can try the topics integrated together. [[merwf_f]] -.Managing a complex series of parallel contributed topic branches. +.Managing a complex series of parallel contributed topic branches image::images/large-merges-1.png[Managing a complex series of parallel contributed topic branches.] If the topics still need work, they're merged into `pu` instead. @@ -357,7 +357,7 @@ When it's determined that they're totally stable, the topics are re-merged into The `next` and `pu` branches are then rebuilt from the `master`. This means `master` almost always moves forward, `next` is rebased occasionally, and `pu` is rebased even more often: -.Merging contributed topic branches into long-term integration branches. +.Merging contributed topic branches into long-term integration branches image::images/large-merges-2.png[Merging contributed topic branches into long-term integration branches.] When a topic branch has finally been merged into `master`, it's removed from the repository. @@ -381,7 +381,7 @@ It takes the patch that was introduced in a commit and tries to reapply it on th This is useful if you have a number of commits on a topic branch and you want to integrate only one of them, or if you only have one commit on a topic branch and you'd prefer to cherry-pick it rather than run rebase. For example, suppose you have a project that looks like this: -.Example history before a cherry-pick. +.Example history before a cherry-pick image::images/rebasing-1.png[Example history before a cherry-pick.] If you want to pull commit `e43a6` into your `master` branch, you can run @@ -397,7 +397,7 @@ Finished one cherry-pick. This pulls the same change introduced in `e43a6`, but you get a new commit SHA-1 value, because the date applied is different. Now your history looks like this: -.History after cherry-picking a commit on a topic branch. +.History after cherry-picking a commit on a topic branch image::images/rebasing-2.png[History after cherry-picking a commit on a topic branch.] Now you can remove your topic branch and drop the commits you didn't want to pull in. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 76630ecc..da092eb3 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -4,7 +4,7 @@ The first thing you need to do is set up a free user account. Simply visit https://github.com[], choose a user name that isn't already taken, provide an email address and a password, and click the big green ``Sign up for GitHub'' button. -.The GitHub sign-up form. +.The GitHub sign-up form image::images/signup.png[The GitHub sign-up form.] The next thing you'll see is the pricing page for upgraded plans, but it's safe to ignore this for now. @@ -32,12 +32,12 @@ If you'd like to use SSH remotes, you'll need to configure a public key. (If you don't already have one, see <>.) Open up your account settings using the link at the top-right of the window: -.The ``Account settings'' link. +.The ``Account settings'' link image::images/account-settings.png[The ``Account settings'' link.] Then select the ``SSH keys'' section along the left-hand side. -.The ``SSH keys'' link. +.The ``SSH keys'' link image::images/ssh-keys.png[The ``SSH keys'' link.] From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click ``Add key''. @@ -54,7 +54,7 @@ You can name each of your keys (e.g. "My Laptop" or "Work Account") so that if y Next, if you wish, you can replace the avatar that is generated for you with an image of your choosing. First go to the ``Profile'' tab (above the SSH Keys tab) and click ``Upload new picture''. -.The ``Profile'' link. +.The ``Profile'' link image::images/your-profile.png[The ``Profile'' link.] We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index e5bbb9d7..0ff2620d 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -20,7 +20,7 @@ This opens up a discussion thread with code review, and the owner and the contri To fork a project, visit the project page and click the ``Fork'' button at the top-right of the page. -.The ``Fork'' button. +.The ``Fork'' button image::images/forkbutton.png[The ``Fork'' button.] After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. @@ -53,7 +53,7 @@ Let's walk through an example of proposing a change to an open source project ho Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at https://github.com/schacon/blink[]. -.The project we want to contribute to. +.The project we want to contribute to image::images/blink-01-start.png[The project we want to contribute to.] The only problem is that the blinking rate is too fast. @@ -306,13 +306,13 @@ We also want to reference an issue in the fork of the repository and an issue in We can fill out the description just like <<_pr_references>>. [[_pr_references]] -.Cross references in a Pull Request. +.Cross references in a Pull Request image::images/mentions-01-syntax.png[PR references] When we submit this pull request, we'll see all of that rendered like <<_pr_references_render>>. [[_pr_references_render]] -.Cross references rendered in a Pull Request. +.Cross references rendered in a Pull Request image::images/mentions-02-render.png[PR references rendered] Notice that the full GitHub URL we put in there was shortened to just the information needed. @@ -322,7 +322,7 @@ This means that anyone who visits this Pull Request and sees that it is closed c The link will look something like <<_pr_closed>>. [[_pr_closed]] -.Link back to the new Pull Request in the closed Pull Request timeline. +.Link back to the new Pull Request in the closed Pull Request timeline image::images/mentions-03-closed.png[PR closed] In addition to issue numbers, you can also reference a specific commit by SHA-1. @@ -338,7 +338,7 @@ Markdown is like writing in plain text but which is rendered richly. See <<_example_markdown>> for an example of how comments or text can be written and then rendered using Markdown. [[_example_markdown]] -.An example of GitHub Flavored Markdown as written and as rendered. +.An example of GitHub Flavored Markdown as written and as rendered image::images/markdown-01-example.png[Example Markdown] The GitHub flavor of Markdown adds more things you can do beyond the basic Markdown syntax. @@ -362,7 +362,7 @@ You can create a task list like this: If we include this in the description of our Pull Request or Issue, we'll see it rendered like <<_eg_task_lists>> [[_eg_task_lists]] -.Task lists rendered in a Markdown comment. +.Task lists rendered in a Markdown comment image::images/markdown-02-tasks.png[Example Task List] This is often used in Pull Requests to indicate what all you would like to get done on the branch before the Pull Request will be ready to merge. @@ -374,7 +374,7 @@ This helps people break down Pull Requests into subtasks and helps other people You can see an example of this in <<_task_list_progress>>. [[_task_list_progress]] -.Task list summary in the Pull Request list. +.Task list summary in the Pull Request list image::images/markdown-03-task-summary.png[Example Task List] These are incredibly useful when you open a Pull Request early and use it to track your progress through the implementation of the feature. @@ -401,7 +401,7 @@ If you add a language name like we did there with 'java', GitHub will also try t In the case of the above example, it would end up rendering like <<_md_code>>. [[_md_code]] -.Rendered fenced code example. +.Rendered fenced code example image::images/markdown-04-fenced-code.png[Rendered fenced code] ===== Quoting @@ -423,7 +423,7 @@ How big are these slings and in particular, these arrows? Once rendered, the comment will look like <<_md_quote>>. [[_md_quote]] -.Rendered quoting example. +.Rendered quoting example image::images/markdown-05-quote.png[Rendered quoting] ===== Emoji @@ -434,7 +434,7 @@ There is even an emoji helper in GitHub. If you are typing a comment and you start with a `:` character, an autocompleter will help you find what you're looking for. [[_md_emoji_auto]] -.Emoji autocompleter in action. +.Emoji autocompleter in action image::images/markdown-06-emoji-complete.png[Emoji autocompleter] Emojis take the form of `::` anywhere in the comment. @@ -454,7 +454,7 @@ I :eyes: that :bug: and I :cold_sweat:. When rendered, it would look something like <<_md_emoji>>. [[_md_emoji]] -.Heavy emoji commenting. +.Heavy emoji commenting image::images/markdown-07-emoji.png[Emoji] Not that this is incredibly useful, but it does add an element of fun and emotion to a medium that is otherwise hard to convey emotion in. @@ -474,7 +474,7 @@ This isn't technically GitHub Flavored Markdown, but it is incredibly useful. In addition to adding Markdown image links to comments, which can be difficult to find and embed URLs for, GitHub allows you to drag and drop images into text areas to embed them. [[_md_drag]] -.Drag and drop images to upload them and auto-embed them. +.Drag and drop images to upload them and auto-embed them image::images/markdown-08-drag-drop.png[Drag and drop images] If you look at <<_md_drag>>, you can see a small ``Parsed as Markdown'' hint above the text area. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index f174e15e..66de8b5c 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -8,16 +8,16 @@ Now that we're comfortable contributing to a project, let's look at the other si Let's create a new repository to share our project code with. Start by clicking the ``New repository'' button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. -.The ``Your repositories'' area. +.The ``Your repositories'' area image::images/newrepo.png[The ``Your repositories'' area.] [[_new_repo_dropdown]] -.The ``New repository'' dropdown. +.The ``New repository'' dropdown image::images/new-repo.png[The ``new repository'' dropdown.] This takes you to the ``new repository'' form: -.The ``new repository'' form. +.The ``new repository'' form image::images/newrepoform.png[The ``new repository'' form.] All you really have to do here is provide a project name; the rest of the fields are completely optional. @@ -45,7 +45,7 @@ Doing so will give them ``push'' access, which means they have both read and wri Click the ``Settings'' link at the bottom of the right-hand sidebar. -.The repository settings link. +.The repository settings link image::images/reposettingslink.png[The repository settings link.] Then select ``Collaborators'' from the menu on the left-hand side. @@ -53,7 +53,7 @@ Then, just type a username into the box, and click ``Add collaborator.'' You can repeat this as many times as you like to grant access to everyone you like. If you need to revoke access, just click the ``X'' on the right-hand side of their row. -.Repository collaborators. +.Repository collaborators image::images/collaborators.png[The repository collaborators box.] ==== Managing Pull Requests @@ -72,7 +72,7 @@ Someone comes along and makes a change to your code and sends you a Pull Request You should get an email notifying you about the new Pull Request and it should look something like <<_email_pr>>. [[_email_pr]] -.Email notification of a new Pull Request. +.Email notification of a new Pull Request image::images/maint-01-email.png[Pull Request email notification] There are a few things to notice about this email. @@ -100,7 +100,7 @@ You can comment on specific lines of code, comment on whole commits or comment o Every time someone else comments on the Pull Request you will continue to get email notifications so you know there is activity happening. They will each have a link to the Pull Request where the activity is happening and you can also directly respond to the email to comment on the Pull Request thread. -.Responses to emails are included in the thread. +.Responses to emails are included in the thread image::images/maint-03-email-resp.png[Email response] Once the code is in a place you like and want to merge it in, you can either pull the code down and merge it locally, either with the `git pull ` syntax we saw earlier, or by adding the fork as a remote and fetching and merging. @@ -111,7 +111,7 @@ This means that no matter what, every time you hit the merge button, a merge com As you can see in <<_merge_button>>, GitHub gives you all of this information if you click the hint link. [[_merge_button]] -.Merge button and instructions for merging a Pull Request manually. +.Merge button and instructions for merging a Pull Request manually image::images/maint-02-merge.png[Merge button] If you decide you don't want to merge it, you can also just close the Pull Request and the person who opened it will be notified. @@ -230,7 +230,7 @@ When you go to open a Pull Request, there is a box at the top of the page that s If you hit the ``Edit'' button at the right of that box you can change not only the branches but also which fork. [[_pr_targets]] -.Manually change the Pull Request target fork and branch. +.Manually change the Pull Request target fork and branch image::images/maint-04-target.png[PR targets] Here you can fairly easily specify to merge your new branch into another Pull Request or another fork of the project. @@ -241,7 +241,7 @@ GitHub also has a pretty nice notifications system built in that can come in han In any comment you can start typing a `@` character and it will begin to autocomplete with the names and usernames of people who are collaborators or contributors in the project. -.Start typing @ to mention someone. +.Start typing @ to mention someone image::images/maint-05-mentions.png[Mentions] You can also mention a user who is not in that dropdown, but often the autocompleter can make it faster. @@ -254,7 +254,7 @@ If someone gets mentioned on a Pull Request or Issue, they will be ``subscribed' You will also be subscribed to something if you opened it, if you're watching the repository or if you comment on something. If you no longer wish to receive notifications, there is an ``Unsubscribe'' button on the page you can click to stop receiving updates on it. -.Unsubscribe from an Issue or Pull Request. +.Unsubscribe from an Issue or Pull Request image::images/maint-06-unsubscribe.png[Unsubscribe] ===== The Notifications Page @@ -262,7 +262,7 @@ image::images/maint-06-unsubscribe.png[Unsubscribe] When we mention ``notifications'' here with respect to GitHub, we mean a specific way that GitHub tries to get in touch with you when events happen and there are a few different ways you can configure them. If you go to the ``Notification center'' tab from the settings page, you can see some of the options you have. -.Notification center options. +.Notification center options image::images/maint-07-notifications.png[Notification center] The two choices are to get notifications over ``Email'' and over ``Web'' and you can choose either, neither or both for when you actively participate in things and for activity on repositories you are watching. @@ -273,7 +273,7 @@ Web notifications only exist on GitHub and you can only check them on GitHub. If you have this option selected in your preferences and a notification is triggered for you, you will see a small blue dot over your notifications icon at the top of your screen as seen in <<_not_center>>. [[_not_center]] -.Notification center. +.Notification center image::images/maint-08-notifications-page.png[Notification center] If you click on that, you will see a list of all the items you have been notified about, grouped by project. @@ -344,7 +344,7 @@ The other special file that GitHub recognizes is the `CONTRIBUTING` file. If you have a file named `CONTRIBUTING` with any file extension, GitHub will show <<_contrib_file>> when anyone starts opening a Pull Request. [[_contrib_file]] -.Opening a Pull Request when a CONTRIBUTING file exists. +.Opening a Pull Request when a CONTRIBUTING file exists image::images/maint-09-contrib.png[Contributing notice] The idea here is that you can specify specific things you want or don't want in a Pull Request sent to your project. @@ -359,7 +359,7 @@ Generally there are not a lot of administrative things you can do with a single If you are using a branch other than ``master'' as your default branch that you want people to open Pull Requests on or see by default, you can change that in your repository's settings page under the ``Options'' tab. [[_default_branch]] -.Change the default branch for a project. +.Change the default branch for a project image::images/maint-10-default-branch.png[Default branch] Simply change the default branch in the dropdown and that will be the default for all major operations from then on, including which branch is checked out by default when someone clones the repository. @@ -369,7 +369,7 @@ Simply change the default branch in the dropdown and that will be the default fo If you would like to transfer a project to another user or an organization in GitHub, there is a ``Transfer ownership'' option at the bottom of the same ``Options'' tab of your repository settings page that allows you to do this. [[_transfer_project]] -.Transfer a project to another GitHub user or Organization. +.Transfer a project to another GitHub user or Organization image::images/maint-11-transfer.png[Transfer] This is helpful if you are abandoning a project and someone wants to take it over, or if your project is getting bigger and want to move it into an organization. diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index f3137e5d..42f1f1f7 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -11,7 +11,7 @@ Normally these accounts are used for Open Source groups (such as ``perl'' or ``r An organization is pretty easy to create; just click on the ``+'' icon at the top-right of any GitHub page, and select ``New organization'' from the menu. -.The ``New organization'' menu item. +.The ``New organization'' menu item image::images/neworg.png[The ``New organization'' menu item.] First you'll need to name your organization and provide an email address for a main point of contact for the group. @@ -40,7 +40,7 @@ Teams make this easy, without having to manage the collaborators for every indiv The Organization page shows you a simple dashboard of all the repositories, users and teams that are under this organization. [[_org_page]] -.The Organization page. +.The Organization page image::images/orgs-01-page.png[] To manage your Teams, you can click on the Teams sidebar on the right hand side of the page in <<_org_page>>. @@ -49,7 +49,7 @@ Each team can have read only, read/write or administrative access to the reposit You can change that level by clicking the ``Settings'' button in <<_team_page>>. [[_team_page]] -.The Team page. +.The Team page image::images/orgs-02-teams.png[] When you invite someone to a team, they will get an email letting them know they've been invited. @@ -66,7 +66,7 @@ Organizations also give owners access to all the information about what went on You can go to the 'Audit Log' tab and see what events have happened at an organization level, who did them and where in the world they were done. [[_the_audit_log]] -.The Audit log. +.The Audit log image::images/orgs-03-audit.png[] You can also filter down to specific types of events, specific places or specific people. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index b85917d7..f27383bf 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -16,7 +16,7 @@ Both the Hooks and Services integrations can be found in the Settings section of Under the ``Webhooks and Services'' tab you will see something like <<_services_hooks>>. [[_services_hooks]] -.Services and Hooks configuration section. +.Services and Hooks configuration section image::images/scripting-01-services.png[Services and hooks] There are dozens of services you can choose from, most of them integrations into other commercial and open source systems. @@ -25,7 +25,7 @@ We'll walk through setting up a very simple one, the Email hook. If you choose ``email'' from the ``Add Service'' dropdown, you'll get a configuration screen like <<_service_config>>. [[_service_config]] -.Email service configuration. +.Email service configuration image::images/scripting-02-email-service.png[Email service] In this case, if we hit the ``Add service'' button, the email address we specified will get an email every time someone pushes to the repository. @@ -46,7 +46,7 @@ To enable a hook, you click the ``Add webhook'' button in <<_services_hooks>>. This will bring you to a page that looks like <<_web_hook>>. [[_web_hook]] -.Web hook configuration. +.Web hook configuration image::images/scripting-03-webhook.png[Web hook] The configuration for a web hook is pretty simple. @@ -102,7 +102,7 @@ For each hook you can dig down into when it was delivered, if it was successful This makes it incredibly easy to test and debug your hooks. [[_web_hook_debug]] -.Web hook debugging information. +.Web hook debugging information image::images/scripting-04-webhook-debug.png[Webhook debug] The other great feature of this is that you can redeliver any of the payloads to test your service easily. @@ -175,7 +175,7 @@ You can use basic authentication with just your username and password, but gener You can generate this from the ``Applications'' tab of your settings page. [[_access_token]] -.Generate your access token from the ``Applications'' tab of your settings page. +.Generate your access token from the ``Applications'' tab of your settings page image::images/scripting-05-access-token.png[Access Token] It will ask you which scopes you want for this token and a description. @@ -218,7 +218,7 @@ $ curl -H "Content-Type: application/json" \ Now if you go to that issue, you can see the comment that we just successfully posted as in <<_api_comment>>. [[_api_comment]] -.A comment posted from the GitHub API. +.A comment posted from the GitHub API image::images/scripting-06-comment.png[API Comment] You can use the API to do just about anything you can do on the website -- creating and setting milestones, assigning people to Issues and Pull Requests, creating and changing labels, accessing commit data, creating new commits and branches, opening, closing or merging Pull Requests, creating and editing teams, commenting on lines of code in a Pull Request, searching the site and on and on. @@ -285,7 +285,7 @@ For example, a testing service may provide a status and a validation service lik If someone opens a new Pull Request on GitHub and this hook is set up, you may see something like <<_commit_status>>. [[_commit_status]] -.Commit status via the API. +.Commit status via the API image::images/scripting-07-status.png[Commit status] You can now see a little green check mark next to the commit that has a ``Signed-off-by'' string in the message and a red cross through the one where the author forgot to sign off. diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index b17972dd..79fccfea 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -291,7 +291,7 @@ This basically asks Git to resolve a range of commits that are reachable from on For example, say you have a commit history that looks like <>. [[double_dot]] -.Example history for range selection. +.Example history for range selection image::images/double-dot.png[Example history for range selection.] Say you want to see what is in your `experiment` branch that hasn't yet been merged into your `master` branch. diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 965cbbed..6863c82f 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -197,11 +197,11 @@ In the `.gitattributes` file, you can set a filter for particular paths and then These filters can be set to do all sorts of fun things. [[filters_a]] -.The ``smudge'' filter is run on checkout. +.The ``smudge'' filter is run on checkout image::images/smudge.png[The ``smudge'' filter is run on checkout.] [[filters_b]] -.The ``clean'' filter is run when files are staged. +.The ``clean'' filter is run when files are staged image::images/clean.png[The ``clean'' filter is run when files are staged.] The original commit message for this feature gives a simple example of running all your C source code through the `indent` program before committing. diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 435366bf..e4277734 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -319,7 +319,7 @@ $ git diff 32d1776b1^ 32d1776b1 Instead of getting the diff output on the command line, Git fires up P4Merge, which looks something like this: -.P4Merge. +.P4Merge image::images/p4merge.png[P4Merge.] If you try to merge two branches and subsequently have merge conflicts, you can run the command `git mergetool`; it starts P4Merge to let you resolve the conflicts through that GUI tool. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index 311aa077..e6950fbd 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -25,7 +25,7 @@ You can get the virtual machine image from http://www.perforce.com/downloads/Per Upon first starting the machine, it asks you to customize the password for three Linux users (`root`, `perforce`, and `git`), and provide an instance name, which can be used to distinguish this installation from others on the same network. When that has all completed, you'll see this: -.The Git Fusion virtual machine boot screen. +.The Git Fusion virtual machine boot screen image::images/git-fusion-boot.png[The Git Fusion virtual machine boot screen.] You should take note of the IP address that's shown here, we'll be using it later on. @@ -288,7 +288,7 @@ To https://10.0.1.254/Jam Git thinks it worked. Let's take a look at the history of the `README` file from Perforce's point of view, using the revision graph feature of `p4v`: -.Perforce revision graph resulting from Git push. +.Perforce revision graph resulting from Git push image::images/git-fusion-perforce-graph.png[Perforce revision graph resulting from Git push.] If you've never seen this view before, it may seem confusing, but it shows the same concepts as a graphical viewer for Git history. diff --git a/book/09-git-and-other-scms/sections/client-tfs.asc b/book/09-git-and-other-scms/sections/client-tfs.asc index 2a216151..fc697f32 100644 --- a/book/09-git-and-other-scms/sections/client-tfs.asc +++ b/book/09-git-and-other-scms/sections/client-tfs.asc @@ -379,7 +379,7 @@ PS> git tfs ct It looks a bit like this: -.The git-tfs checkin tool. +.The git-tfs checkin tool image::images/git-tfs-ct.png[The git-tfs checkin tool.] This will look familiar to TFS users, as it's the same dialog that's launched from within Visual Studio. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 8f793311..e5be083e 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -157,7 +157,7 @@ If you're using ZSH, the `^` character is used for globbing, so you have to encl Conceptually, the data that Git is storing looks something like this: -.Simple version of the Git data model. +.Simple version of the Git data model image::images/data-model-1.png[Simple version of the Git data model.] You can fairly easily create your own tree. @@ -238,7 +238,7 @@ $ git cat-file -p 3c4e9cd789d88d8d89c1073707c3585e41b0e614 If you created a working directory from the new tree you just wrote, you would get the two files in the top level of the working directory and a subdirectory named `bak` that contained the first version of the `test.txt` file. You can think of the data that Git contains for these structures as being like this: -.The content structure of your current Git data. +.The content structure of your current Git data image::images/data-model-2.png[The content structure of your current Git data.] [[_git_commit_objects]] @@ -347,7 +347,7 @@ $ find .git/objects -type f If you follow all the internal pointers, you get an object graph something like this: -.All the reachable objects in your Git directory. +.All the reachable objects in your Git directory image::images/data-model-3.png[All the reachable objects in your Git directory.] ==== Object Storage diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index bf22756d..39f0faf2 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -59,7 +59,7 @@ fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit Now, your Git database conceptually looks something like this: -.Git directory objects with branch head references included. +.Git directory objects with branch head references included image::images/data-model-4.png[Git directory objects with branch head references included.] When you run commands like `git branch `, Git basically runs that `update-ref` command to add the SHA-1 of the last commit of the branch you're on into whatever new reference you want to create. diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index f2002b3e..a317780c 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -36,7 +36,7 @@ export PS1='\w$(__git_ps1 " (%s)")\$ ' The `\w` means print the current working directory, the `\$` prints the `$` part of the prompt, and `__git_ps1 " (%s)"` calls the function provided by `git-prompt.sh` with a formatting argument. Now your bash prompt will look like this when you're anywhere inside a Git-controlled project: -.Customized `bash` prompt. +.Customized `bash` prompt image::images/git-bash.png[Customized `bash` prompt.] Both of these scripts come with helpful documentation; take a look at the contents of `git-completion.bash` and `git-prompt.sh` for more information. diff --git a/book/A-git-in-other-environments/sections/eclipse.asc b/book/A-git-in-other-environments/sections/eclipse.asc index 76cfd9c5..2facd117 100644 --- a/book/A-git-in-other-environments/sections/eclipse.asc +++ b/book/A-git-in-other-environments/sections/eclipse.asc @@ -4,7 +4,7 @@ Eclipse ships with a plugin called Egit, which provides a fairly-complete interface to Git operations. It's accessed by switching to the Git Perspective (Window > Open Perspective > Other…, and select "Git"). -.Eclipse's EGit environment. +.Eclipse's EGit environment image::images/egit.png[Eclipse's EGit environment.] EGit comes with plenty of great documentation, which you can find by going to Help > Help Contents, and choosing the "EGit Documentation" node from the contents listing. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index 840a7447..b046bd89 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -31,7 +31,7 @@ Gitk accepts many command-line options, most of which are passed through to the Probably one of the most useful is the `--all` flag, which tells gitk to show commits reachable from _any_ ref, not just HEAD. Gitk's interface looks like this: -.The `gitk` history viewer. +.The `gitk` history viewer image::images/gitk.png[The `gitk` history viewer.] On the top is something that looks a bit like the output of `git log --graph`; each dot represents a commit, the lines represent parent relationships, and refs are shown as colored boxes. @@ -49,7 +49,7 @@ $ git gui And it looks something like this: -.The `git-gui` commit tool. +.The `git-gui` commit tool image::images/git-gui.png[The `git-gui` commit tool.] On the left is the index; unstaged changes are on top, staged changes on the bottom. @@ -73,10 +73,10 @@ GitHub has created two workflow-oriented Git clients: one for Windows, and one f These clients are a good example of workflow-oriented tools – rather than expose _all_ of Git's functionality, they instead focus on a curated set of commonly-used features that work well together. They look like this: -.GitHub for macOS. +.GitHub for macOS image::images/github_mac.png[GitHub for macOS.] -.GitHub for Windows. +.GitHub for Windows image::images/github_win.png[GitHub for Windows.] They are designed to look and work very much alike, so we'll treat them like a single product in this chapter. @@ -116,12 +116,12 @@ We cover this in more detail in <>, but the genera Branch management is one of the areas where the two tools diverge. On macOS, there's a button at the top of the window for creating a new branch: -.``Create Branch'' button on macOS. +.``Create Branch'' button on macOS image::images/branch_widget_mac.png[``Create Branch'' button on macOS.] On Windows, this is done by typing the new branch's name in the branch-switching widget: -.Creating a branch on Windows. +.Creating a branch on Windows image::images/branch_widget_win.png[Creating a branch on Windows.] Once your branch is created, making new commits is fairly straightforward. diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index 7ad25833..529d0754 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -3,7 +3,7 @@ JetBrains IDEs (such as IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, RubyMine, and others) ship with a Git Integration plugin. It provides a dedicated view in the IDE to work with Git and GitHub Pull Requests. -.Version Control ToolWindow in JetBrains IDEs. +.Version Control ToolWindow in JetBrains IDEs image::images/jb.png[Version Control ToolWindow in JetBrains IDEs.] The integration relies on the command-line git client, and requires one to be installed. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 41d92a91..67b404ce 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -8,7 +8,7 @@ This also works if you're running PowerShell Core on Linux or macOS. A package called posh-git (https://github.com/dahlbyk/posh-git[]) provides powerful tab-completion facilities, as well as an enhanced prompt to help you stay on top of your repository status. It looks like this: -.PowerShell with Posh-git. +.PowerShell with Posh-git image::images/posh-git.png[PowerShell with Posh-git.] ==== Installation diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 8ab66436..78902660 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -8,7 +8,7 @@ Visual Studio 2013's Git support has been separated from this older feature, and To locate the feature, open a project that's controlled by Git (or just `git init` an existing project), and select View > Team Explorer from the menu. You'll see the "Connect" view, which looks a bit like this: -.Connecting to a Git repository from Team Explorer. +.Connecting to a Git repository from Team Explorer image::images/vs-1.png[Connecting to a Git repository from Team Explorer.] Visual Studio remembers all of the projects you've opened that are Git-controlled, and they're available in the list at the bottom. @@ -17,7 +17,7 @@ Double clicking on one of the local Git repositories leads you to the Home view, This is a hub for performing Git actions; when you're _writing_ code, you'll probably spend most of your time in the "Changes" view, but when it comes time to pull down changes made by your teammates, you'll use the "Unsynced Commits" and "Branches" views. [[vs_home]] -.The "Home" view for a Git repository in Visual Studio. +.The "Home" view for a Git repository in Visual Studio image::images/vs-2.png[The Home view for a Git repository in Visual Studio.] Visual Studio now has a powerful task-focused UI for Git. From 18202ef634f4faf3a760e936a61f761903e3ab6b Mon Sep 17 00:00:00 2001 From: Christoph Bachhuber Date: Sun, 28 Jun 2020 11:56:09 +0200 Subject: [PATCH 040/549] Use code highlighting --- book/01-introduction/sections/installing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 102bb787..2b403437 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -36,7 +36,7 @@ For more options, there are instructions for installing on several different Uni (((macOS, installing))) There are several ways to install Git on a Mac. The easiest is probably to install the Xcode Command Line Tools.(((Xcode))) -On Mavericks (10.9) or above you can do this simply by trying to run 'git' from the Terminal the very first time. +On Mavericks (10.9) or above you can do this simply by trying to run `git` from the Terminal the very first time. [source,console] ---- From 5afed08ef706226aa28b287f38bc759a78457e0b Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 26 Jun 2020 21:11:04 +0000 Subject: [PATCH 041/549] [Fix] move period mark after parentheses Usually period mark is present after parentheses, see[1] for more information. [1]: https://brians.wsu.edu/2016/05/30/parentheses/ Resolves: #1443 --- book/01-introduction/sections/first-time-setup.asc | 4 ++-- book/02-git-basics/sections/getting-a-repository.asc | 2 +- book/02-git-basics/sections/recording-changes.asc | 2 +- book/02-git-basics/sections/remotes.asc | 2 +- book/05-distributed-git/sections/contributing.asc | 2 +- book/06-github/sections/1-setting-up-account.asc | 2 +- book/07-git-tools/sections/reset.asc | 7 +++---- book/07-git-tools/sections/submodules.asc | 2 +- book/07-git-tools/sections/subtree-merges.asc | 2 +- book/08-customizing-git/sections/config.asc | 2 +- book/09-git-and-other-scms/sections/client-bzr.asc | 2 +- book/09-git-and-other-scms/sections/client-hg.asc | 2 +- book/10-git-internals/sections/environment.asc | 3 +-- book/A-git-in-other-environments/sections/guis.asc | 2 +- book/A-git-in-other-environments/sections/sublimetext.asc | 2 +- book/A-git-in-other-environments/sections/zsh.asc | 2 +- book/B-embedding-git/sections/libgit2.asc | 2 +- 17 files changed, 20 insertions(+), 22 deletions(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index e694182e..9e8c27c2 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -10,12 +10,12 @@ These variables can be stored in three different places: 1. `/etc/gitconfig` file: Contains values applied to every user on the system and all their repositories. If you pass the option `--system` to `git config`, it reads and writes from this file specifically. - (Because this is a system configuration file, you would need administrative or superuser privilege to make changes to it.) + Because this is a system configuration file, you would need administrative or superuser privilege to make changes to it. 2. `~/.gitconfig` or `~/.config/git/config` file: Values specific personally to you, the user. You can make Git read and write to this file specifically by passing the `--global` option, and this affects _all_ of the repositories you work with on your system. 3. `config` file in the Git directory (that is, `.git/config`) of whatever repository you're currently using: Specific to that single repository. You can force Git to read from and write to this file with the `--local` option, but that is in fact the default. - (Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly.) + Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly. Each level overrides values in the previous level, so values in `.git/config` trump those in `/etc/gitconfig`. diff --git a/book/02-git-basics/sections/getting-a-repository.asc b/book/02-git-basics/sections/getting-a-repository.asc index 10a06122..c7bc8e8a 100644 --- a/book/02-git-basics/sections/getting-a-repository.asc +++ b/book/02-git-basics/sections/getting-a-repository.asc @@ -38,7 +38,7 @@ $ git init This creates a new subdirectory named `.git` that contains all of your necessary repository files -- a Git repository skeleton. At this point, nothing in your project is tracked yet. -(See <> for more information about exactly what files are contained in the `.git` directory you just created.)(((git commands, init))) +See <> for more information about exactly what files are contained in the `.git` directory you just created.(((git commands, init))) If you want to start version-controlling existing files (as opposed to an empty directory), you should probably begin tracking those files and do an initial commit. You can accomplish that with a few `git add` commands that specify the files you want to track, followed by a `git commit`: diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 60bfec59..3a621ff1 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -262,7 +262,7 @@ GitHub maintains a fairly comprehensive list of good `.gitignore` file examples In the simple case, a repository might have a single `.gitignore` file in its root directory, which applies recursively to the entire repository. However, it is also possible to have additional `.gitignore` files in subdirectories. The rules in these nested `.gitignore` files apply only to the files under the directory where they are located. -(The Linux kernel source repository has 206 `.gitignore` files.) +The Linux kernel source repository has 206 `.gitignore` files. It is beyond the scope of this book to get into the details of multiple `.gitignore` files; see `man gitignore` for the details. ==== diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 87a4a5e3..21595910 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -103,7 +103,7 @@ From https://github.com/paulboone/ticgit ---- Paul's `master` branch is now accessible locally as `pb/master` -- you can merge it into one of your branches, or you can check out a local branch at that point if you want to inspect it. -(We'll go over what branches are and how to use them in much more detail in <>.) +We'll go over what branches are and how to use them in much more detail in <>. [[_fetching_and_pulling]] ==== Fetching and Pulling from Your Remotes diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index c09bfaeb..e3ccf932 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -110,7 +110,7 @@ In this environment, you can follow a workflow similar to what you might do when You still get the advantages of things like offline committing and vastly simpler branching and merging, but the workflow can be very similar; the main difference is that merges happen client-side rather than on the server at commit time. Let's see what it might look like when two developers start to work together with a shared repository. The first developer, John, clones the repository, makes a change, and commits locally. -(The protocol messages have been replaced with `...` in these examples to shorten them somewhat.) +The protocol messages have been replaced with `...` in these examples to shorten them somewhat. [source,console] ---- diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 76630ecc..1ff80f62 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -29,7 +29,7 @@ As of right now, you're fully able to connect with Git repositories using the `h However, to simply clone public projects, you don't even need to sign up - the account we just created comes into play when we fork projects and push to our forks a bit later. If you'd like to use SSH remotes, you'll need to configure a public key. -(If you don't already have one, see <>.) +If you don't already have one, see <>. Open up your account settings using the link at the top-right of the window: .The ``Account settings'' link. diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index c7002ac8..2fd83650 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -10,7 +10,7 @@ For this, we recommend a simple metaphor. An easier way to think about `reset` and `checkout` is through the mental frame of Git being a content manager of three different trees. By ``tree'' here, we really mean ``collection of files'', not specifically the data structure. -(There are a few cases where the index doesn't exactly act like a tree, but for our purposes it is easier to think about it this way for now.) +There are a few cases where the index doesn't exactly act like a tree, but for our purposes it is easier to think about it this way for now. Git as a system manages and manipulates three trees in its normal operation: @@ -220,8 +220,7 @@ If we look at the diagram for that command and think about what `git add` does, image::images/reset-path2.png[] -This is why the output of the `git status` command suggests that you run this to unstage a file. -(See <> for more on this.) +This is why the output of the `git status` command suggests that you run this to unstage a file (see <> for more on this). We could just as easily not let Git assume we meant ``pull the data from HEAD'' by specifying a specific commit to pull that file version from. We would just run something like `git reset eb43bf file.txt`. @@ -240,7 +239,7 @@ Let's look at how to do something interesting with this newfound power -- squash Say you have a series of commits with messages like ``oops.'', ``WIP'' and ``forgot this file''. You can use `reset` to quickly and easily squash them into a single commit that makes you look really smart. -(<<_squashing>> shows another way to do this, but in this example it's simpler to use `reset`.) +<<_squashing>> shows another way to do this, but in this example it's simpler to use `reset`. Let's say you have a project where the first commit has one file, the second commit added a new file and changed the first, and the third commit changed the first file again. The second commit was a work in progress and you want to squash it down. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 1debc4c4..55cfce4f 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -973,7 +973,7 @@ Indeed, if you switch between branches that record the submodule at different co That is because the submodule state is by default not carried over when switching branches. This can be really confusing, so it's a good idea to always `git checkout --recurse-submodules` when your project has submodules. -(For older Git versions that do not have the `--recurse-submodules` flag, after the checkout you can use `git submodule update --init --recursive` to put the submodules in the right state.) +For older Git versions that do not have the `--recurse-submodules` flag, after the checkout you can use `git submodule update --init --recursive` to put the submodules in the right state. Luckily, you can tell Git (>=2.14) to always use the `--recurse-submodules` flag by setting the configuration option `submodule.recurse`: `git config submodule.recurse true`. As noted above, this will also make Git recurse into submodules for every command that has a `--recurse-submodules` option (except `git clone`). diff --git a/book/07-git-tools/sections/subtree-merges.asc b/book/07-git-tools/sections/subtree-merges.asc index 6ef0f714..fd682e4d 100644 --- a/book/07-git-tools/sections/subtree-merges.asc +++ b/book/07-git-tools/sections/subtree-merges.asc @@ -69,7 +69,7 @@ $ git pull Then, we can merge those changes back into our `master` branch. To pull in the changes and prepopulate the commit message, use the `--squash` option, as well as the recursive merge strategy's `-Xsubtree` option. -(The recursive strategy is the default here, but we include it for clarity.) +The recursive strategy is the default here, but we include it for clarity. [source,console] ---- diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 435366bf..a5f41674 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -22,7 +22,7 @@ You can make Git read and write to this file by passing the `--global` option. Finally, Git looks for configuration values in the configuration file in the Git directory (`.git/config`) of whatever repository you're currently using. These values are specific to that single repository, and represent passing the `--local` option to `git config`. -(If you don't specify which level you want to work with, this is the default.) +If you don't specify which level you want to work with, this is the default. Each of these ``levels'' (system, global, local) overwrites values in the previous level, so values in `.git/config` trump those in `/etc/gitconfig`, for instance. diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index d8a5d4bd..c9c7191b 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -128,7 +128,7 @@ $ git push origin master Git's remote-helpers framework has some limitations that apply. In particular, these commands don't work: -* git push origin :branch-to-delete (Bazaar can't accept ref deletions in this way.) +* git push origin :branch-to-delete (Bazaar can't accept ref deletions in this way) * git push origin old:new (it will push 'old') * git push --dry-run origin branch (it will push) diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index e84a6a40..1c0770c9 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -31,7 +31,7 @@ If you have Python installed, this is as simple as: $ pip install mercurial ---- -(If you don't have Python installed, visit https://www.python.org/[] and get it first.) +If you don't have Python installed, visit https://www.python.org/[] and get it first. The last thing you'll need is the Mercurial client. Go to https://www.mercurial-scm.org/[] and install it if you haven't already. diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index fb39c9a4..eefc93e4 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -220,8 +220,7 @@ Note that this isn't the easiest way to customize how `ssh` is invoked; it won't It's probably easier just to use the `~/.ssh/config` file for that. *`GIT_ASKPASS`* is an override for the `core.askpass` configuration value. -This is the program invoked whenever Git needs to ask the user for credentials, which can expect a text prompt as a command-line argument, and should return the answer on `stdout`. -(See <> for more on this subsystem.) +This is the program invoked whenever Git needs to ask the user for credentials, which can expect a text prompt as a command-line argument, and should return the answer on `stdout` (see <> for more on this subsystem). *`GIT_NAMESPACE`* controls access to namespaced refs, and is equivalent to the `--namespace` flag. This is mostly useful on the server side, where you may want to store multiple forks of a single repository in one repository, only keeping the refs separate. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index 840a7447..967a8c2c 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -84,7 +84,7 @@ We won't be doing a detailed rundown of these tools (they have their own documen * On the left is the list of repositories the client is tracking; you can add a repository (either by cloning or attaching locally) by clicking the ``+'' icon at the top of this area. * In the center is a commit-input area, which lets you input a commit message, and select which files should be included. - (On Windows, the commit history is displayed directly below this; on macOS, it's on a separate tab.) + On Windows, the commit history is displayed directly below this; on macOS, it's on a separate tab. * On the right is a diff view, which shows what's changed in your working directory, or which changes were included in the selected commit. * The last thing to notice is the ``Sync'' button at the top-right, which is the primary way you interact over the network. diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index eded27be..c1e6561c 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -9,6 +9,6 @@ The features are: * In the status bar, you can see the current git branch and how many modifications you have made. * All changes to a file are now visible via markers in the gutter. * You can use part of the Sublime Merge git client functionality from within Sublime Text. - (This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[]) + This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[]. The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[] \ No newline at end of file diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index e389a070..6b2eb403 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -34,7 +34,7 @@ zstyle ':vcs_info:git:*' formats '%b' ---- This results in a display of the current branch on the right-hand side of the terminal window, whenever your shell is inside a Git repository. -(The left side is supported as well, of course; just uncomment the assignment to PROMPT.) +The left side is supported as well, of course; just uncomment the assignment to PROMPT. It looks a bit like this: .Customized `zsh` prompt diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 7230a1ae..00139ca2 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -133,7 +133,7 @@ error = git_repository_open(&repo, "some-path"); error = git_repository_set_odb(repo, odb); // <4> ---- -_(Note that errors are captured, but not handled. We hope your code is better than ours.)_ +_Note that errors are captured, but not handled. We hope your code is better than ours._ <1> Initialize an empty object database (ODB) ``frontend,'' which will act as a container for the ``backends'' which are the ones doing the real work. <2> Initialize a custom ODB backend. From 17a5da712f8bc655e8dec5255ce7f630c67bc801 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Sat, 27 Jun 2020 14:57:16 +0000 Subject: [PATCH 042/549] [enh] put branch name inside backtick @Morganov has suggested to put branch name inside backtick[1]. [1]: https://github.com/progit/progit2/pull/1445#discussion_r446496665 --- book/09-git-and-other-scms/sections/client-bzr.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index c9c7191b..a023e6d0 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -129,7 +129,7 @@ Git's remote-helpers framework has some limitations that apply. In particular, these commands don't work: * git push origin :branch-to-delete (Bazaar can't accept ref deletions in this way) -* git push origin old:new (it will push 'old') +* git push origin old:new (it will push `old`) * git push --dry-run origin branch (it will push) ===== Summary From e1bf30327e4c43303d95a3a6f0a6327577d569c7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 1 Jul 2020 13:43:52 +0200 Subject: [PATCH 043/549] Migrate to built-in Dependabot --- .dependabot/config.yml | 14 -------------- .github/dependabot.yml | 13 +++++++++++++ 2 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 .dependabot/config.yml create mode 100644 .github/dependabot.yml diff --git a/.dependabot/config.yml b/.dependabot/config.yml deleted file mode 100644 index 3beccd89..00000000 --- a/.dependabot/config.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: 1 -update_configs: - # Update your Gemfile (& lockfiles) as soon as - # new versions are published to the RubyGems registry - - package_manager: "ruby:bundler" - directory: "/" - update_schedule: "live" - - # Apply default reviewer and label to created - # pull requests - default_reviewers: - - "ben" - default_labels: - - "dependabot" diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..06bca5cd --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + # Maintain dependencies for Ruby + - package-ecosystem: "bundler" + directory: "/" + schedule: + interval: "daily" # Checks on Monday trough Friday. + + # Set default reviewer and labels + reviewers: + - "ben" + labels: + - "dependabot" From 97420447c7b1e22d4499bb82f2e16ac360e68743 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 1 Jul 2020 14:12:22 +0200 Subject: [PATCH 044/549] Create note with link to git-rebase.io --- book/07-git-tools/sections/rewriting-history.asc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 95a37e6e..a3553286 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -299,6 +299,12 @@ This changes the SHA-1s of the three most recent commits in your list, so make s Notice that the last commit (`f7f3f6d`) in the list is unchanged. Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. +[NOTE] +==== +Drew DeVault made a practical hands-on guide with exercises to learn how to use `git rebase`. +You can find it at: https://git-rebase.io/[] +==== + ==== The Nuclear Option: filter-branch There is another history-rewriting option that you can use if you need to rewrite a larger number of commits in some scriptable way -- for instance, changing your email address globally or removing a file from every commit. From 2ab4b0aa07c33e55ed01262845548bdc56779ebb Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 2 Jul 2020 09:44:59 +0200 Subject: [PATCH 045/549] Improve intro text on aliases --- book/02-git-basics/sections/aliases.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/aliases.asc b/book/02-git-basics/sections/aliases.asc index f2920448..5d6d117c 100644 --- a/book/02-git-basics/sections/aliases.asc +++ b/book/02-git-basics/sections/aliases.asc @@ -2,8 +2,8 @@ === Git Aliases (((aliases))) -Before we finish this chapter on basic Git, there's just one little tip that can make your Git experience simpler, easier, and more familiar: aliases. -We won't refer to them or assume you've used them later in the book, but you should probably know how to use them. +Before we move on to the next chapter, we want to introduce a feature that can make your Git experience simpler, easier, and more familiar: aliases. +For clarity's sake, we won't be using them anywhere else in this book, but if you go on to use Git with any regularity, aliases are something you should know about. Git doesn't automatically infer your command if you type it in partially. If you don't want to type the entire text of each of the Git commands, you can easily set up an alias for each command using `git config`.(((git commands, config))) From 56ca12a375cf9b7bac69bc02f00c634c17dd4ff5 Mon Sep 17 00:00:00 2001 From: Christoph Bachhuber Date: Thu, 2 Jul 2020 19:24:41 +0200 Subject: [PATCH 046/549] Replace 'option' by more specific terms where needed for '--pretty' --- .../sections/viewing-history.asc | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 2dd731f2..6e036240 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -132,9 +132,9 @@ It also puts a summary of the information at the end. Another really useful option is `--pretty`. This option changes the log output to formats other than the default. -A few prebuilt options are available for you to use. -The `oneline` option prints each commit on a single line, which is useful if you're looking at a lot of commits. -In addition, the `short`, `full`, and `fuller` options show the output in roughly the same format but with less or more information, respectively: +A few prebuilt option values are available for you to use. +The `oneline` value for this option prints each commit on a single line, which is useful if you're looking at a lot of commits. +In addition, the `short`, `full`, and `fuller` values show the output in roughly the same format but with less or more information, respectively: [source,console] ---- @@ -144,7 +144,7 @@ ca82a6dff817ec66f44342007202690a93763949 Change version number a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit ---- -The most interesting option is `format`, which allows you to specify your own log output format. +The most interesting option value is `format`, which allows you to specify your own log output format. This is especially useful when you're generating output for machine parsing -- because you specify the format explicitly, you know it won't change with updates to Git:(((log formatting))) [source,console] @@ -155,28 +155,28 @@ ca82a6d - Scott Chacon, 6 years ago : Change version number a11bef0 - Scott Chacon, 6 years ago : Initial commit ---- -<> lists some of the more useful options that `format` takes. +<> lists some of the more useful specifiers that `format` takes. [[pretty_format]] -.Useful options for `git log --pretty=format` +.Useful specifiers for `git log --pretty=format` [cols="1,4",options="header"] |================================ -| Option | Description of Output -| `%H` | Commit hash -| `%h` | Abbreviated commit hash -| `%T` | Tree hash -| `%t` | Abbreviated tree hash -| `%P` | Parent hashes -| `%p` | Abbreviated parent hashes -| `%an` | Author name -| `%ae` | Author email -| `%ad` | Author date (format respects the --date=option) -| `%ar` | Author date, relative -| `%cn` | Committer name -| `%ce` | Committer email -| `%cd` | Committer date -| `%cr` | Committer date, relative -| `%s` | Subject +| Specifier | Description of Output +| `%H` | Commit hash +| `%h` | Abbreviated commit hash +| `%T` | Tree hash +| `%t` | Abbreviated tree hash +| `%P` | Parent hashes +| `%p` | Abbreviated parent hashes +| `%an` | Author name +| `%ae` | Author email +| `%ad` | Author date (format respects the --date=option) +| `%ar` | Author date, relative +| `%cn` | Committer name +| `%ce` | Committer email +| `%cd` | Committer date +| `%cr` | Committer date, relative +| `%s` | Subject |================================ You may be wondering what the difference is between _author_ and _committer_. @@ -184,7 +184,7 @@ The author is the person who originally wrote the work, whereas the committer is So, if you send in a patch to a project and one of the core members applies the patch, both of you get credit -- you as the author, and the core member as the committer. We'll cover this distinction a bit more in <>. -The `oneline` and `format` options are particularly useful with another `log` option called `--graph`. +The `oneline` and `format` option values are particularly useful with another `log` option called `--graph`. This option adds a nice little ASCII graph showing your branch and merge history: [source,console] @@ -220,7 +220,7 @@ Those are only some simple output-formatting options to `git log` -- there are m | `--abbrev-commit` | Show only the first few characters of the SHA-1 checksum instead of all 40. | `--relative-date` | Display the date in a relative format (for example, ``2 weeks ago'') instead of using the full date format. | `--graph` | Display an ASCII graph of the branch and merge history beside the log output. -| `--pretty` | Show commits in an alternate format. Options include oneline, short, full, fuller, and format (where you specify your own format). +| `--pretty` | Show commits in an alternate format. Option values include oneline, short, full, fuller, and format (where you specify your own format). | `--oneline` | Shorthand for `--pretty=oneline --abbrev-commit` used together. |================================ From b600691c4c5f938baa22befba05c50a95a3d1d95 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 26 Jun 2020 08:41:58 +0000 Subject: [PATCH 047/549] [Fix] add missing period mark - After removing period mark from figure captions; some paragraph left with no period because those paragraph has only one period and that's because of figure caption (see https://github.com/progit/progit2/pull/1444#issuecomment-648754034). - End all bullet points with a period. --- book/04-git-server/sections/hosted.asc | 2 +- book/06-github/sections/2-contributing.asc | 26 +++++++++---------- book/06-github/sections/5-scripting.asc | 2 +- book/07-git-tools/sections/replace.asc | 2 +- book/07-git-tools/sections/reset.asc | 10 +++---- book/07-git-tools/sections/submodules.asc | 10 +++---- .../sections/client-bzr.asc | 2 +- .../sections/powershell.asc | 8 +++--- .../sections/sublimetext.asc | 2 +- .../sections/visualstudiocode.asc | 4 +-- book/B-embedding-git/sections/dulwich.asc | 4 +-- 11 files changed, 36 insertions(+), 36 deletions(-) diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index 6828f64e..c3ca6bc1 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -5,6 +5,6 @@ Doing so offers a number of advantages: a hosting site is generally quick to set Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code – it's generally easier for the open source community to find and help you with. These days, you have a huge number of hosting options to choose from, each with different advantages and disadvantages. -To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[] +To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[]. We'll cover using GitHub in detail in <>, as it is the largest Git host out there and you may need to interact with projects hosted on it in any case, but there are dozens more to choose from should you not want to set up your own Git server. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 0ff2620d..ef3c9586 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -36,7 +36,7 @@ It is centered on the <> workflow covered in < Here's how it generally works: -1. Fork the project +1. Fork the project. 2. Create a topic branch from `master`. 3. Make some commits to improve the project. 4. Push this branch to your GitHub project. @@ -107,12 +107,12 @@ To https://github.com/tonychacon/blink * [new branch] slow-blink -> slow-blink ---- -<1> Clone our fork of the project locally -<2> Create a descriptive topic branch -<3> Make our change to the code -<4> Check that the change is good -<5> Commit our change to the topic branch -<6> Push our new topic branch back up to our GitHub fork +<1> Clone our fork of the project locally. +<2> Create a descriptive topic branch. +<3> Make our change to the code. +<4> Check that the change is good. +<5> Commit our change to the topic branch. +<6> Push our new topic branch back up to our GitHub fork. Now if we go back to our fork on GitHub, we can see that GitHub noticed that we pushed a new topic branch up and presents us with a big green button to check out our changes and open a Pull Request to the original project. @@ -270,11 +270,11 @@ To https://github.com/tonychacon/blink ef4725c..3c8d735 slower-blink -> slow-blink ---- -<1> Add the original repository as a remote named ``upstream'' -<2> Fetch the newest work from that remote -<3> Merge the main branch of that repository into your topic branch -<4> Fix the conflict that occurred -<5> Push back up to the same topic branch +<1> Add the original repository as a remote named ``upstream''. +<2> Fetch the newest work from that remote. +<3> Merge the main branch of that repository into your topic branch. +<4> Fix the conflict that occurred. +<5> Push back up to the same topic branch. Once you do that, the Pull Request will be automatically updated and re-checked to see if it merges cleanly. @@ -359,7 +359,7 @@ You can create a task list like this: - [ ] Document the code ---- -If we include this in the description of our Pull Request or Issue, we'll see it rendered like <<_eg_task_lists>> +If we include this in the description of our Pull Request or Issue, we'll see it rendered like <<_eg_task_lists>>. [[_eg_task_lists]] .Task lists rendered in a Markdown comment diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index f27383bf..669e2d3c 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -107,7 +107,7 @@ image::images/scripting-04-webhook-debug.png[Webhook debug] The other great feature of this is that you can redeliver any of the payloads to test your service easily. -For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://developer.github.com/webhooks/ +For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://developer.github.com/webhooks/[]. ==== The GitHub API diff --git a/book/07-git-tools/sections/replace.asc b/book/07-git-tools/sections/replace.asc index ffd08203..5da498f3 100644 --- a/book/07-git-tools/sections/replace.asc +++ b/book/07-git-tools/sections/replace.asc @@ -94,7 +94,7 @@ $ echo 'Get history from blah blah blah' | git commit-tree 9c68fdc^{tree} The `commit-tree` command is one of a set of commands that are commonly referred to as 'plumbing' commands. These are commands that are not generally meant to be used directly, but instead are used by *other* Git commands to do smaller jobs. On occasions when we're doing weirder things like this, they allow us to do really low-level things but are not meant for daily use. -You can read more about plumbing commands in <> +You can read more about plumbing commands in <>. ===== image::images/replace3.png[] diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index c7002ac8..3f87ac7e 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -194,9 +194,9 @@ In this particular case, we still have the *v3* version of our file in a commit The `reset` command overwrites these three trees in a specific order, stopping when you tell it to: -1. Move the branch HEAD points to _(stop here if `--soft`)_ -2. Make the index look like HEAD _(stop here unless `--hard`)_ -3. Make the working directory look like the index +1. Move the branch HEAD points to _(stop here if `--soft`)_. +2. Make the index look like HEAD _(stop here unless `--hard`)_. +3. Make the working directory look like the index. ==== Reset With a Path @@ -208,8 +208,8 @@ But the index and working directory _can_ be partially updated, so reset proceed So, assume we run `git reset file.txt`. This form (since you did not specify a commit SHA-1 or branch, and you didn't specify `--soft` or `--hard`) is shorthand for `git reset --mixed HEAD file.txt`, which will: -1. Move the branch HEAD points to _(skipped)_ -2. Make the index look like HEAD _(stop here)_ +1. Move the branch HEAD points to _(skipped)_. +2. Make the index look like HEAD _(stop here)_. So it essentially just copies `file.txt` from HEAD to the index. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 1debc4c4..365dbade 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -732,11 +732,11 @@ $ git commit -m "Merge Tom's Changes" <5> [master 10d2c60] Merge Tom's Changes ---- -<1> First we resolve the conflict -<2> Then we go back to the main project directory -<3> We can check the SHA-1s again -<4> Resolve the conflicted submodule entry -<5> Commit our merge +<1> First we resolve the conflict. +<2> Then we go back to the main project directory. +<3> We can check the SHA-1s again. +<4> Resolve the conflicted submodule entry. +<5> Commit our merge. It can be a bit confusing, but it's really not very hard. diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index d8a5d4bd..1e55e3e3 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -93,7 +93,7 @@ The two features are: As a consequence, there are two different situations to consider: -1. If the `.bzrignore` file does not contain any of these two specific prefixes, then you can simply make a symbolic link to it in the repository: `ln -s .bzrignore .git/info/exclude` +1. If the `.bzrignore` file does not contain any of these two specific prefixes, then you can simply make a symbolic link to it in the repository: `ln -s .bzrignore .git/info/exclude`. 2. Otherwise, you must create the `.git/info/exclude` file and adapt it to ignore exactly the same files in `.bzrignore`. Whatever the case is, you will have to remain vigilant against any change of `.bzrignore` to make sure that the `.git/info/exclude` file always reflects `.bzrignore`. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 67b404ce..f0687afb 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -21,9 +21,9 @@ With `RemoteSigned`, only scripts having the `ZoneIdentifier` set to `Internet` If you're an administrator and want to set it for all users on that machine, use `-Scope LocalMachine`. If you're a normal user, without administrative rights, you can use `-Scope CurrentUser` to set it only for you. -More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[] +More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[]. -More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[] +More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[]. To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the next command: @@ -36,7 +36,7 @@ To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the ne If you have at least PowerShell 5 or PowerShell 4 with PackageManagement installed, you can use the package manager to install posh-git for you. -More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[] +More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[]. [source,powershell] ---- @@ -83,4 +83,4 @@ Then import the module using the full path to the `posh-git.psd1` file: This will add the proper line to your `profile.ps1` file, and posh-git will be active the next time you open PowerShell. For a description of the Git status summary information displayed in the prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] -For more details on how to customize your posh-git prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[] +For more details on how to customize your posh-git prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[]. diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index eded27be..78f197fc 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -11,4 +11,4 @@ The features are: * You can use part of the Sublime Merge git client functionality from within Sublime Text. (This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[]) -The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[] \ No newline at end of file +The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[]. diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 581324d9..1a53cb17 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -16,6 +16,6 @@ The main features are: ** Resolve merge conflicts. ** View diffs. * With an extension, you can also handle GitHub Pull Requests: - https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[] + https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[]. -The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[] +The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[]. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index c202686d..73e052bd 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -40,5 +40,5 @@ porcelain.log('.', max_entries=1) ==== Further Reading - * The official API documentation is available at https://www.dulwich.io/apidocs/dulwich.html[] - * Official tutorial at https://www.dulwich.io/docs/tutorial[] has many examples of how to do specific tasks with Dulwich + * The official API documentation is available at https://www.dulwich.io/apidocs/dulwich.html[]. + * Official tutorial at https://www.dulwich.io/docs/tutorial[] has many examples of how to do specific tasks with Dulwich. From 345e4b3f54f4eea9b09307391170fdb54a7befa7 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Thu, 25 Jun 2020 06:17:41 +0000 Subject: [PATCH 048/549] [Fix] remove period from text present in square bracket There is no need for period mark at end of text, present in square bracket; and removing it also make syntax consistent across whole project. --- book/01-introduction/sections/installing.asc | 2 +- book/01-introduction/sections/what-is-git.asc | 4 +-- .../sections/recording-changes.asc | 2 +- .../sections/basic-branching-and-merging.asc | 16 +++++----- book/03-git-branching/sections/nutshell.asc | 18 +++++------ book/03-git-branching/sections/rebasing.asc | 22 ++++++------- .../sections/remote-branches.asc | 8 ++--- book/03-git-branching/sections/workflows.asc | 8 ++--- book/04-git-server/sections/gitlab.asc | 8 ++--- book/04-git-server/sections/gitweb.asc | 2 +- .../sections/contributing.asc | 32 +++++++++---------- .../sections/distributed-workflows.asc | 6 ++-- .../sections/maintaining.asc | 18 +++++------ .../sections/1-setting-up-account.asc | 12 +++---- book/06-github/sections/2-contributing.asc | 4 +-- book/06-github/sections/3-maintaining.asc | 10 +++--- .../sections/4-managing-organization.asc | 2 +- .../sections/advanced-merging.asc | 10 +++--- .../sections/revision-selection.asc | 2 +- .../sections/attributes.asc | 4 +-- book/08-customizing-git/sections/config.asc | 2 +- .../sections/client-p4.asc | 4 +-- .../sections/client-tfs.asc | 2 +- book/10-git-internals/sections/objects.asc | 6 ++-- book/10-git-internals/sections/refs.asc | 2 +- .../sections/bash.asc | 2 +- .../sections/eclipse.asc | 2 +- .../sections/guis.asc | 12 +++---- .../sections/jetbrainsides.asc | 2 +- .../sections/powershell.asc | 2 +- .../sections/visualstudio.asc | 4 +-- .../sections/zsh.asc | 4 +-- 32 files changed, 117 insertions(+), 117 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 6f0a2730..58cd3f01 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -49,7 +49,7 @@ If you want a more up to date version, you can also install it via a binary inst A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[]. .Git macOS Installer -image::images/git-osx-installer.png[Git macOS installer.] +image::images/git-osx-installer.png[Git macOS installer] You can also install it as part of the GitHub for macOS install. Their GUI Git tool has an option to install command line tools as well. diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 47f904ec..08de9a19 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -12,7 +12,7 @@ Conceptually, most other systems store information as a list of file-based chang These other systems (CVS, Subversion, Perforce, Bazaar, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as _delta-based_ version control). .Storing data as changes to a base version of each file -image::images/deltas.png[Storing data as changes to a base version of each file.] +image::images/deltas.png[Storing data as changes to a base version of each file] Git doesn't think of or store its data this way. Instead, Git thinks of its data more like a series of snapshots of a miniature filesystem. @@ -21,7 +21,7 @@ To be efficient, if files have not changed, Git doesn't store the file again, ju Git thinks about its data more like a *stream of snapshots*. .Storing data as snapshots of the project over time -image::images/snapshots.png[Git stores data as snapshots of the project over time.] +image::images/snapshots.png[Git stores data as snapshots of the project over time] This is an important distinction between Git and nearly all other VCSs. It makes Git reconsider almost every aspect of version control that most other systems copied from the previous generation. diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index ee76585a..25765dc5 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -14,7 +14,7 @@ As you edit files, Git sees them as modified, because you've changed them since As you work, you selectively stage these modified files and then commit all those staged changes, and the cycle repeats. .The lifecycle of the status of your files -image::images/lifecycle.png[The lifecycle of the status of your files.] +image::images/lifecycle.png[The lifecycle of the status of your files] [[_checking_status]] ==== Checking the Status of Your Files diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index d26b3445..49f44614 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -22,7 +22,7 @@ You'll do the following: First, let's say you're working on your project and have a couple of commits already on the `master` branch. .A simple commit history -image::images/basic-branching-1.png[A simple commit history.] +image::images/basic-branching-1.png[A simple commit history] You've decided that you're going to work on issue #53 in whatever issue-tracking system your company uses. To create a new branch and switch to it at the same time, you can run the `git checkout` command with the `-b` switch: @@ -42,7 +42,7 @@ $ git checkout iss53 ---- .Creating a new branch pointer -image::images/basic-branching-2.png[Creating a new branch pointer.] +image::images/basic-branching-2.png[Creating a new branch pointer] You work on your website and do some commits. Doing so moves the `iss53` branch forward, because you have it checked out (that is, your `HEAD` is pointing to it): @@ -54,7 +54,7 @@ $ git commit -a -m 'Create new footer [issue 53]' ---- .The `iss53` branch has moved forward with your work -image::images/basic-branching-3.png[The `iss53` branch has moved forward with your work.] +image::images/basic-branching-3.png[The `iss53` branch has moved forward with your work] Now you get the call that there is an issue with the website, and you need to fix it immediately. With Git, you don't have to deploy your fix along with the `iss53` changes you've made, and you don't have to put a lot of effort into reverting those changes before you can work on applying your fix to what is in production. @@ -89,7 +89,7 @@ $ git commit -a -m 'Fix broken email address' ---- .Hotfix branch based on `master` -image::images/basic-branching-4.png[Hotfix branch based on `master`.] +image::images/basic-branching-4.png[Hotfix branch based on `master`] You can run your tests, make sure the hotfix is what you want, and finally merge the `hotfix` branch back into your `master` branch to deploy to production. You do this with the `git merge` command:(((git commands, merge))) @@ -111,7 +111,7 @@ To phrase that another way, when you try to merge one commit with a commit that Your change is now in the snapshot of the commit pointed to by the `master` branch, and you can deploy the fix. .`master` is fast-forwarded to `hotfix` -image::images/basic-branching-5.png[`master` is fast-forwarded to `hotfix`.] +image::images/basic-branching-5.png[`master` is fast-forwarded to `hotfix`] After your super-important fix is deployed, you're ready to switch back to the work you were doing before you were interrupted. However, first you'll delete the `hotfix` branch, because you no longer need it -- the `master` branch points at the same place. @@ -136,7 +136,7 @@ $ git commit -a -m 'Finish the new footer [issue 53]' ---- .Work continues on `iss53` -image::images/basic-branching-6.png[Work continues on `iss53`.] +image::images/basic-branching-6.png[Work continues on `iss53`] It's worth noting here that the work you did in your `hotfix` branch is not contained in the files in your `iss53` branch. If you need to pull it in, you can merge your `master` branch into your `iss53` branch by running `git merge master`, or you can wait to integrate those changes until you decide to pull the `iss53` branch back into `master` later. @@ -165,13 +165,13 @@ Because the commit on the branch you're on isn't a direct ancestor of the branch In this case, Git does a simple three-way merge, using the two snapshots pointed to by the branch tips and the common ancestor of the two. .Three snapshots used in a typical merge -image::images/basic-merging-1.png[Three snapshots used in a typical merge.] +image::images/basic-merging-1.png[Three snapshots used in a typical merge] Instead of just moving the branch pointer forward, Git creates a new snapshot that results from this three-way merge and automatically creates a new commit that points to it. This is referred to as a merge commit, and is special in that it has more than one parent. .A merge commit -image::images/basic-merging-2.png[A merge commit.] +image::images/basic-merging-2.png[A merge commit] Now that your work is merged in, you have no further need for the `iss53` branch. You can close the issue in your issue-tracking system, and delete the branch: diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 278d269f..cb89acc9 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -23,12 +23,12 @@ Git then creates a commit object that has the metadata and a pointer to the root Your Git repository now contains five objects: three _blobs_ (each representing the contents of one of the three files), one _tree_ that lists the contents of the directory and specifies which file names are stored as which blobs, and one _commit_ with the pointer to that root tree and all the commit metadata. .A commit and its tree -image::images/commit-and-tree.png[A commit and its tree.] +image::images/commit-and-tree.png[A commit and its tree] If you make some changes and commit again, the next commit stores a pointer to the commit that came immediately before it. .Commits and their parents -image::images/commits-and-parents.png[Commits and their parents.] +image::images/commits-and-parents.png[Commits and their parents] A branch in Git is simply a lightweight movable pointer to one of these commits. The default branch name in Git is `master`. @@ -43,7 +43,7 @@ The only reason nearly every repository has one is that the `git init` command c ==== .A branch and its commit history -image::images/branch-and-history.png[A branch and its commit history.] +image::images/branch-and-history.png[A branch and its commit history] [[_create_new_branch]] ==== Creating a New Branch @@ -62,7 +62,7 @@ $ git branch testing This creates a new pointer to the same commit you're currently on. .Two branches pointing into the same series of commits -image::images/two-branches.png[Two branches pointing into the same series of commits.] +image::images/two-branches.png[Two branches pointing into the same series of commits] How does Git know what branch you're currently on? It keeps a special pointer called `HEAD`. @@ -72,7 +72,7 @@ In this case, you're still on `master`. The `git branch` command only _created_ a new branch -- it didn't switch to that branch. .HEAD pointing to a branch -image::images/head-to-master.png[HEAD pointing to a branch.] +image::images/head-to-master.png[HEAD pointing to a branch] You can easily see this by running a simple `git log` command that shows you where the branch pointers are pointing. This option is called `--decorate`. @@ -102,7 +102,7 @@ $ git checkout testing This moves `HEAD` to point to the `testing` branch. .HEAD points to the current branch -image::images/head-to-testing.png[HEAD points to the current branch.] +image::images/head-to-testing.png[HEAD points to the current branch] What is the significance of that? Well, let's do another commit: @@ -114,7 +114,7 @@ $ git commit -a -m 'made a change' ---- .The HEAD branch moves forward when a commit is made -image::images/advance-testing.png[The HEAD branch moves forward when a commit is made.] +image::images/advance-testing.png[The HEAD branch moves forward when a commit is made] This is interesting, because now your `testing` branch has moved forward, but your `master` branch still points to the commit you were on when you ran `git checkout` to switch branches. Let's switch back to the `master` branch: @@ -137,7 +137,7 @@ To show all of the branches, add `--all` to your `git log` command. ==== .HEAD moves when you checkout -image::images/checkout-master.png[HEAD moves when you checkout.] +image::images/checkout-master.png[HEAD moves when you checkout] That command did two things. It moved the HEAD pointer back to point to the `master` branch, and it reverted the files in your working directory back to the snapshot that `master` points to. @@ -167,7 +167,7 @@ And you did all that with simple `branch`, `checkout`, and `commit` commands. [[divergent_history]] .Divergent history -image::images/advance-master.png[Divergent history.] +image::images/advance-master.png[Divergent history] You can also see this easily with the `git log` command. If you run `git log --oneline --decorate --graph --all` it will print out the history of your commits, showing where your branch pointers are and how your history has diverged. diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index d69714f8..726f5fc7 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -10,14 +10,14 @@ In this section you'll learn what rebasing is, how to do it, why it's a pretty a If you go back to an earlier example from <<_basic_merging>>, you can see that you diverged your work and made commits on two different branches. .Simple divergent history -image::images/basic-rebase-1.png[Simple divergent history.] +image::images/basic-rebase-1.png[Simple divergent history] The easiest way to integrate the branches, as we've already covered, is the `merge` command. It performs a three-way merge between the two latest branch snapshots (`C3` and `C4`) and the most recent common ancestor of the two (`C2`), creating a new snapshot (and commit). [[rebasing-merging-example]] .Merging to integrate diverged work history -image::images/basic-rebase-2.png[Merging to integrate diverged work history.] +image::images/basic-rebase-2.png[Merging to integrate diverged work history] However, there is another way: you can take the patch of the change that was introduced in `C4` and reapply it on top of `C3`. In Git, this is called _rebasing_. @@ -36,7 +36,7 @@ Applying: added staged command This operation works by going to the common ancestor of the two branches (the one you're on and the one you're rebasing onto), getting the diff introduced by each commit of the branch you're on, saving those diffs to temporary files, resetting the current branch to the same commit as the branch you are rebasing onto, and finally applying each change in turn. .Rebasing the change introduced in `C4` onto `C3` -image::images/basic-rebase-3.png[Rebasing the change introduced in `C4` onto `C3`.] +image::images/basic-rebase-3.png[Rebasing the change introduced in `C4` onto `C3`] At this point, you can go back to the `master` branch and do a fast-forward merge. @@ -47,7 +47,7 @@ $ git merge experiment ---- .Fast-forwarding the `master` branch -image::images/basic-rebase-4.png[Fast-forwarding the `master` branch.] +image::images/basic-rebase-4.png[Fast-forwarding the `master` branch] Now, the snapshot pointed to by `C4'` is exactly the same as the one that was pointed to by `C5` in <>. There is no difference in the end product of the integration, but rebasing makes for a cleaner history. @@ -70,7 +70,7 @@ Finally, you went back to your server branch and did a few more commits. [[rbdiag_e]] .A history with a topic branch off another topic branch -image::images/interesting-rebase-1.png[A history with a topic branch off another topic branch.] +image::images/interesting-rebase-1.png[A history with a topic branch off another topic branch] Suppose you decide that you want to merge your client-side changes into your mainline for a release, but you want to hold off on the server-side changes until it's tested further. You can take the changes on `client` that aren't on `server` (`C8` and `C9`) and replay them on your `master` branch by using the `--onto` option of `git rebase`: @@ -84,7 +84,7 @@ This basically says, ``Take the `client` branch, figure out the patches since it It's a bit complex, but the result is pretty cool. .Rebasing a topic branch off another topic branch -image::images/interesting-rebase-2.png[Rebasing a topic branch off another topic branch.] +image::images/interesting-rebase-2.png[Rebasing a topic branch off another topic branch] Now you can fast-forward your `master` branch (see <>): @@ -96,7 +96,7 @@ $ git merge client [[rbdiag_g]] .Fast-forwarding your `master` branch to include the client branch changes -image::images/interesting-rebase-3.png[Fast-forwarding your `master` branch to include the client branch changes.] +image::images/interesting-rebase-3.png[Fast-forwarding your `master` branch to include the client branch changes] Let's say you decide to pull in your server branch as well. You can rebase the `server` branch onto the `master` branch without having to check it out first by running `git rebase ` -- which checks out the topic branch (in this case, `server`) for you and replays it onto the base branch (`master`): @@ -110,7 +110,7 @@ This replays your `server` work on top of your `master` work, as shown in <>, we would end up with [[_rebase_rebase_work]] .Rebase on top of force-pushed rebase work -image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work.] +image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work] This only works if `C4` and `C4'` that your partner made are almost exactly the same patch. Otherwise the rebase won't be able to tell that it's a duplicate and will add another C4-like patch (which will probably fail to apply cleanly, since the changes would already be at least somewhat there). diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 05ddf3fb..4062663c 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -34,13 +34,13 @@ If you do some work on your local `master` branch, and, in the meantime, someone Also, as long as you stay out of contact with your `origin` server, your `origin/master` pointer doesn't move. .Local and remote work can diverge -image::images/remote-branches-2.png[Local and remote work can diverge.] +image::images/remote-branches-2.png[Local and remote work can diverge] To synchronize your work with a given remote, you run a `git fetch ` command (in our case, `git fetch origin`). This command looks up which server ``origin'' is (in this case, it's `git.ourcompany.com`), fetches any data from it that you don't yet have, and updates your local database, moving your `origin/master` pointer to its new, more up-to-date position. .`git fetch` updates your remote-tracking branches -image::images/remote-branches-3.png[`git fetch` updates your remote references.] +image::images/remote-branches-3.png[`git fetch` updates your remote references] To demonstrate having multiple remote servers and what remote branches for those remote projects look like, let's assume you have another internal Git server that is used only for development by one of your sprint teams. This server is at `git.team1.ourcompany.com`. @@ -48,13 +48,13 @@ You can add it as a new remote reference to the project you're currently working Name this remote `teamone`, which will be your shortname for that whole URL. .Adding another server as a remote -image::images/remote-branches-4.png[Adding another server as a remote.] +image::images/remote-branches-4.png[Adding another server as a remote] Now, you can run `git fetch teamone` to fetch everything the remote `teamone` server has that you don't have yet. Because that server has a subset of the data your `origin` server has right now, Git fetches no data but sets a remote-tracking branch called `teamone/master` to point to the commit that `teamone` has as its `master` branch. .Remote-tracking branch for `teamone/master` -image::images/remote-branches-5.png[Remote tracking branch for `teamone/master`.] +image::images/remote-branches-5.png[Remote tracking branch for `teamone/master`] [[_pushing_branches]] ==== Pushing diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index 4ae66a76..0c238701 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -17,13 +17,13 @@ In reality, we're talking about pointers moving up the line of commits you're ma The stable branches are farther down the line in your commit history, and the bleeding-edge branches are farther up the history. .A linear view of progressive-stability branching -image::images/lr-branches-1.png[A linear view of progressive-stability branching.] +image::images/lr-branches-1.png[A linear view of progressive-stability branching] It's generally easier to think about them as work silos, where sets of commits graduate to a more stable silo when they're fully tested. [[lrbranch_b]] .A ``silo'' view of progressive-stability branching -image::images/lr-branches-2.png[A ``silo'' view of progressive-stability branching.] +image::images/lr-branches-2.png[A ``silo'' view of progressive-stability branching] You can keep doing this for several levels of stability. Some larger projects also have a `proposed` or `pu` (proposed updates) branch that has integrated branches that may not be ready to go into the `next` or `master` branch. @@ -48,14 +48,14 @@ Consider an example of doing some work (on `master`), branching off for an issue Your commit history will look something like this: .Multiple topic branches -image::images/topic-branches-1.png[Multiple topic branches.] +image::images/topic-branches-1.png[Multiple topic branches] Now, let's say you decide you like the second solution to your issue best (`iss91v2`); and you showed the `dumbidea` branch to your coworkers, and it turns out to be genius. You can throw away the original `iss91` branch (losing commits `C5` and `C6`) and merge in the other two. Your history then looks like this: .History after merging `dumbidea` and `iss91v2` -image::images/topic-branches-2.png[History after merging `dumbidea` and `iss91v2`.] +image::images/topic-branches-2.png[History after merging `dumbidea` and `iss91v2`] We will go into more detail about the various possible workflows for your Git project in <>, so before you decide which branching scheme your next project will use, be sure to read that chapter. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 4b169637..1984932f 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -17,7 +17,7 @@ One nice touch Bitnami has included is the login screen (accessed by typing alt+ [[bitnami]] .The Bitnami GitLab virtual machine login screen -image::images/bitnami.png[The Bitnami GitLab virtual machine login screen.] +image::images/bitnami.png[The Bitnami GitLab virtual machine login screen] For anything else, follow the guidance in the GitLab Community Edition readme, which can be found at https://gitlab.com/gitlab-org/gitlab-ce/tree/master[]. There you'll find assistance for installing GitLab using Chef recipes, a virtual machine on Digital Ocean, and RPM and DEB packages (which, as of this writing, are in beta). @@ -32,7 +32,7 @@ Once logged in, click the ``Admin area'' icon in the menu at the top right. [[gitlab_menu]] .The ``Admin area'' item in the GitLab menu -image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu.] +image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu] ===== Users @@ -43,7 +43,7 @@ If the user +jane+ had a project named +project+, that project's url would be `h [[gitlab_users]] .The GitLab user administration screen -image::images/gitlab-users.png[The GitLab user administration screen.] +image::images/gitlab-users.png[The GitLab user administration screen] Removing a user can be done in two ways. ``Blocking'' a user prevents them from logging into the GitLab instance, but all of the data under that user's namespace will be preserved, and commits signed with that user's email address will still link back to their profile. @@ -60,7 +60,7 @@ Each group has a project namespace (the same way that users do), so if the group [[gitlab_groups]] .The GitLab group administration screen -image::images/gitlab-groups.png[The GitLab group administration screen.] +image::images/gitlab-groups.png[The GitLab group administration screen] Each group is associated with a number of users, each of which has a level of permissions for the group's projects and the group itself. These range from ``Guest'' (issues and chat only) to ``Owner'' (full control of the group, its members, and its projects). diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index 50885832..c8d2df55 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -6,7 +6,7 @@ Git comes with a CGI script called GitWeb that is sometimes used for this. [[gitweb]] .The GitWeb web-based user interface -image::images/git-instaweb.png[The GitWeb web-based user interface.] +image::images/git-instaweb.png[The GitWeb web-based user interface] If you want to check out what GitWeb would look like for your project, Git comes with a command to fire up a temporary instance if you have a lightweight web server on your system like `lighttpd` or `webrick`. On Linux machines, `lighttpd` is often installed, so you may be able to get it to run by typing `git instaweb` in your project directory. diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 34fac8c1..f75d89f0 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -42,7 +42,7 @@ First, your submissions should not contain any whitespace errors. Git provides an easy way to check for this -- before you commit, run `git diff --check`, which identifies possible whitespace errors and lists them for you. .Output of `git diff --check` -image::images/git-diff-check.png[Output of `git diff --check`.] +image::images/git-diff-check.png[Output of `git diff --check`] If you run that command before committing, you can tell if you're about to commit whitespace issues that may annoy other developers. @@ -185,7 +185,7 @@ From john@githost:simplegit At this point, John's local repository looks something like this: .John's divergent history -image::images/small-team-1.png[John's divergent history.] +image::images/small-team-1.png[John's divergent history] Now John can merge Jessica's work that he fetched into his own local work: @@ -200,7 +200,7 @@ Merge made by the 'recursive' strategy. As long as that local merge goes smoothly, John's updated history will now look like this: .John's repository after merging `origin/master` -image::images/small-team-2.png[John's repository after merging `origin/master`.] +image::images/small-team-2.png[John's repository after merging `origin/master`] At this point, John might want to test this new code to make sure none of Jessica's work affects any of his and, as long as everything seems fine, he can finally push the new merged work up to the server: @@ -215,13 +215,13 @@ To john@githost:simplegit.git In the end, John's commit history will look like this: .John's history after pushing to the `origin` server -image::images/small-team-3.png[John's history after pushing to the `origin` server.] +image::images/small-team-3.png[John's history after pushing to the `origin` server] In the meantime, Jessica has created a new topic branch called `issue54`, and made three commits to that branch. She hasn't fetched John's changes yet, so her commit history looks like this: .Jessica's topic branch -image::images/small-team-4.png[Jessica's topic branch.] +image::images/small-team-4.png[Jessica's topic branch] Suddenly, Jessica learns that John has pushed some new work to the server and she wants to take a look at it, so she can fetch all new content from the server that she does not yet have with: @@ -238,7 +238,7 @@ That pulls down the work John has pushed up in the meantime. Jessica's history now looks like this: .Jessica's history after fetching John's changes -image::images/small-team-5.png[Jessica's history after fetching John's changes.] +image::images/small-team-5.png[Jessica's history after fetching John's changes] Jessica thinks her topic branch is ready, but she wants to know what part of John's fetched work she has to merge into her work so that she can push. She runs `git log` to find out: @@ -299,7 +299,7 @@ Merge made by the 'recursive' strategy. Everything merges cleanly, and Jessica's history now looks like this: .Jessica's history after merging John's changes -image::images/small-team-6.png[Jessica's history after merging John's changes.] +image::images/small-team-6.png[Jessica's history after merging John's changes] Now `origin/master` is reachable from Jessica's `master` branch, so she should be able to successfully push (assuming John hasn't pushed even more changes in the meantime): @@ -314,7 +314,7 @@ To jessica@githost:simplegit.git Each developer has committed a few times and merged each other's work successfully. .Jessica's history after pushing all changes back to the server -image::images/small-team-7.png[Jessica's history after pushing all changes back to the server.] +image::images/small-team-7.png[Jessica's history after pushing all changes back to the server] That is one of the simplest workflows. You work for a while (generally in a topic branch), and merge that work into your `master` branch when it's ready to be integrated. @@ -322,7 +322,7 @@ When you want to share that work, you fetch and merge your `master` from `origin The general sequence is something like this: .General sequence of events for a simple multiple-developer Git workflow -image::images/small-team-flow.png[General sequence of events for a simple multiple-developer Git workflow.] +image::images/small-team-flow.png[General sequence of events for a simple multiple-developer Git workflow] ==== Private Managed Team @@ -389,7 +389,7 @@ $ git commit -am 'Add ls-files' Jessica's repository now looks like this: .Jessica's initial commit history -image::images/managed-team-1.png[Jessica's initial commit history.] +image::images/managed-team-1.png[Jessica's initial commit history] She's ready to push her work, but gets an email from Josie that a branch with some initial ``featureB'' work on it was already pushed to the server as the `featureBee` branch. Jessica needs to merge those changes with her own before she can push her work to the server. @@ -481,20 +481,20 @@ To jessica@githost:simplegit.git Jessica's commit history now looks something like this: .Jessica's history after committing on a feature branch -image::images/managed-team-2.png[Jessica's history after committing on a feature branch.] +image::images/managed-team-2.png[Jessica's history after committing on a feature branch] At some point, Jessica, Josie, and John inform the integrators that the `featureA` and `featureBee` branches on the server are ready for integration into the mainline. After the integrators merge these branches into the mainline, a fetch will bring down the new merge commit, making the history look like this: .Jessica's history after merging both her topic branches -image::images/managed-team-3.png[Jessica's history after merging both her topic branches.] +image::images/managed-team-3.png[Jessica's history after merging both her topic branches] Many groups switch to Git because of this ability to have multiple teams working in parallel, merging the different lines of work late in the process. The ability of smaller subgroups of a team to collaborate via remote branches without necessarily having to involve or impede the entire team is a huge benefit of Git. The sequence for the workflow you saw here is something like this: .Basic sequence of this managed-team workflow -image::images/managed-team-flow.png[Basic sequence of this managed-team workflow.] +image::images/managed-team-flow.png[Basic sequence of this managed-team workflow] [[_public_project]] ==== Forked Public Project @@ -591,7 +591,7 @@ $ git fetch origin Now, each of your topics is contained within a silo -- similar to a patch queue -- that you can rewrite, rebase, and modify without the topics interfering or interdepending on each other, like so: .Initial commit history with `featureB` work -image::images/public-small-1.png[Initial commit history with `featureB` work.] +image::images/public-small-1.png[Initial commit history with `featureB` work] Let's say the project maintainer has pulled in a bunch of other patches and tried your first branch, but it no longer cleanly merges. In this case, you can try to rebase that branch on top of `origin/master`, resolve the conflicts for the maintainer, and then resubmit your changes: @@ -607,7 +607,7 @@ This rewrites your history to now look like <>. [[psp_b]] .Commit history after `featureA` work -image::images/public-small-2.png[Commit history after `featureA` work.] +image::images/public-small-2.png[Commit history after `featureA` work] Because you rebased the branch, you have to specify the `-f` to your push command in order to be able to replace the `featureA` branch on the server with a commit that isn't a descendant of it. An alternative would be to push this new work to a different branch on the server (perhaps called `featureAv2`). @@ -633,7 +633,7 @@ Also the `--no-commit` option can be useful to delay the merge commit in case of At this point, you can notify the maintainer that you've made the requested changes, and that they can find those changes in your `featureBv2` branch. .Commit history after `featureBv2` work -image::images/public-small-3.png[Commit history after `featureBv2` work.] +image::images/public-small-3.png[Commit history after `featureBv2` work] [[_project_over_email]] ==== Public Project over Email diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index e07b6e7b..3ee8a99e 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -15,7 +15,7 @@ One central hub, or _repository_, can accept code, and everyone synchronizes the A number of developers are nodes -- consumers of that hub -- and synchronize with that centralized location. .Centralized workflow -image::images/centralized_workflow.png[Centralized workflow.] +image::images/centralized_workflow.png[Centralized workflow] This means that if two developers clone from the hub and both make changes, the first developer to push their changes back up can do so with no problems. The second developer must merge in the first one's work before pushing changes up, so as not to overwrite the first developer's changes. @@ -53,7 +53,7 @@ The process works as follows (see <>): [[wfdiag_b]] .Integration-manager workflow -image::images/integration-manager.png[Integration-manager workflow.] +image::images/integration-manager.png[Integration-manager workflow] (((forking))) This is a very common workflow with hub-based tools like GitHub or GitLab, where it's easy to fork a project and push your changes into your fork for everyone to see. @@ -78,7 +78,7 @@ The process works like this (see <>): [[wfdiag_c]] .Benevolent dictator workflow -image::images/benevolent-dictator.png[Benevolent dictator workflow.] +image::images/benevolent-dictator.png[Benevolent dictator workflow] This kind of workflow isn't common, but can be useful in very big projects, or in highly hierarchical environments. It allows the project leader (the dictator) to delegate much of the work and collect large subsets of code at multiple points before integrating them. diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 1eb061bf..b8f2c439 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -311,11 +311,11 @@ For instance, if we have a repository with work in two branches named `ruby_clie [[merwf_a]] .History with several topic branches -image::images/merging-workflows-1.png[History with several topic branches.] +image::images/merging-workflows-1.png[History with several topic branches] [[merwf_b]] .After a topic branch merge -image::images/merging-workflows-2.png[After a topic branch merge.] +image::images/merging-workflows-2.png[After a topic branch merge] That is probably the simplest workflow, but it can possibly be problematic if you're dealing with larger or more stable projects where you want to be really careful about what you introduce. @@ -326,15 +326,15 @@ Each time you have a new topic branch to merge in (<>), you merge it in [[merwf_c]] .Before a topic branch merge -image::images/merging-workflows-3.png[Before a topic branch merge.] +image::images/merging-workflows-3.png[Before a topic branch merge] [[merwf_d]] .After a topic branch merge -image::images/merging-workflows-4.png[After a topic branch merge.] +image::images/merging-workflows-4.png[After a topic branch merge] [[merwf_e]] .After a project release -image::images/merging-workflows-5.png[After a topic branch release.] +image::images/merging-workflows-5.png[After a topic branch release] This way, when people clone your project's repository, they can either check out `master` to build the latest stable version and keep up to date on that easily, or they can check out `develop`, which is the more cutting-edge content. You can also extend this concept by having an `integrate` branch where all the work is merged together. @@ -350,7 +350,7 @@ If they're safe, they're merged into `next`, and that branch is pushed up so eve [[merwf_f]] .Managing a complex series of parallel contributed topic branches -image::images/large-merges-1.png[Managing a complex series of parallel contributed topic branches.] +image::images/large-merges-1.png[Managing a complex series of parallel contributed topic branches] If the topics still need work, they're merged into `pu` instead. When it's determined that they're totally stable, the topics are re-merged into `master`. @@ -358,7 +358,7 @@ The `next` and `pu` branches are then rebuilt from the `master`. This means `master` almost always moves forward, `next` is rebased occasionally, and `pu` is rebased even more often: .Merging contributed topic branches into long-term integration branches -image::images/large-merges-2.png[Merging contributed topic branches into long-term integration branches.] +image::images/large-merges-2.png[Merging contributed topic branches into long-term integration branches] When a topic branch has finally been merged into `master`, it's removed from the repository. The Git project also has a `maint` branch that is forked off from the last release to provide backported patches in case a maintenance release is required. @@ -382,7 +382,7 @@ This is useful if you have a number of commits on a topic branch and you want to For example, suppose you have a project that looks like this: .Example history before a cherry-pick -image::images/rebasing-1.png[Example history before a cherry-pick.] +image::images/rebasing-1.png[Example history before a cherry-pick] If you want to pull commit `e43a6` into your `master` branch, you can run @@ -398,7 +398,7 @@ This pulls the same change introduced in `e43a6`, but you get a new commit SHA-1 Now your history looks like this: .History after cherry-picking a commit on a topic branch -image::images/rebasing-2.png[History after cherry-picking a commit on a topic branch.] +image::images/rebasing-2.png[History after cherry-picking a commit on a topic branch] Now you can remove your topic branch and drop the commits you didn't want to pull in. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index da092eb3..49b95f37 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -5,7 +5,7 @@ The first thing you need to do is set up a free user account. Simply visit https://github.com[], choose a user name that isn't already taken, provide an email address and a password, and click the big green ``Sign up for GitHub'' button. .The GitHub sign-up form -image::images/signup.png[The GitHub sign-up form.] +image::images/signup.png[The GitHub sign-up form] The next thing you'll see is the pricing page for upgraded plans, but it's safe to ignore this for now. GitHub will send you an email to verify the address you provided. @@ -33,12 +33,12 @@ If you'd like to use SSH remotes, you'll need to configure a public key. Open up your account settings using the link at the top-right of the window: .The ``Account settings'' link -image::images/account-settings.png[The ``Account settings'' link.] +image::images/account-settings.png[The ``Account settings'' link] Then select the ``SSH keys'' section along the left-hand side. .The ``SSH keys'' link -image::images/ssh-keys.png[The ``SSH keys'' link.] +image::images/ssh-keys.png[The ``SSH keys'' link] From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click ``Add key''. @@ -55,12 +55,12 @@ Next, if you wish, you can replace the avatar that is generated for you with an First go to the ``Profile'' tab (above the SSH Keys tab) and click ``Upload new picture''. .The ``Profile'' link -image::images/your-profile.png[The ``Profile'' link.] +image::images/your-profile.png[The ``Profile'' link] We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. .Crop your avatar -image::images/avatar-crop.png[Crop your uploaded avatar.] +image::images/avatar-crop.png[Crop your uploaded avatar] Now anywhere you interact on the site, people will see your avatar next to your username. @@ -73,7 +73,7 @@ If you use multiple email addresses in your commits and you want GitHub to link [[_add_email_addresses]] .Add email addresses -image::images/email-settings.png[Add all your email addresses.] +image::images/email-settings.png[Add all your email addresses] In <<_add_email_addresses>> we can see some of the different states that are possible. The top address is verified and set as the primary address, meaning that is where you'll get any notifications and receipts. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index ef3c9586..df9cbf91 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -21,7 +21,7 @@ This opens up a discussion thread with code review, and the owner and the contri To fork a project, visit the project page and click the ``Fork'' button at the top-right of the page. .The ``Fork'' button -image::images/forkbutton.png[The ``Fork'' button.] +image::images/forkbutton.png[The ``Fork'' button] After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. @@ -54,7 +54,7 @@ Let's walk through an example of proposing a change to an open source project ho Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at https://github.com/schacon/blink[]. .The project we want to contribute to -image::images/blink-01-start.png[The project we want to contribute to.] +image::images/blink-01-start.png[The project we want to contribute to] The only problem is that the blinking rate is too fast. We think it's much nicer to wait 3 seconds instead of 1 in between each state change. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index 66de8b5c..cc7637e1 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -9,16 +9,16 @@ Let's create a new repository to share our project code with. Start by clicking the ``New repository'' button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. .The ``Your repositories'' area -image::images/newrepo.png[The ``Your repositories'' area.] +image::images/newrepo.png[The ``Your repositories'' area] [[_new_repo_dropdown]] .The ``New repository'' dropdown -image::images/new-repo.png[The ``new repository'' dropdown.] +image::images/new-repo.png[The ``new repository'' dropdown] This takes you to the ``new repository'' form: .The ``new repository'' form -image::images/newrepoform.png[The ``new repository'' form.] +image::images/newrepoform.png[The ``new repository'' form] All you really have to do here is provide a project name; the rest of the fields are completely optional. For now, just click the ``Create Repository'' button, and boom – you have a new repository on GitHub, named `/`. @@ -46,7 +46,7 @@ Doing so will give them ``push'' access, which means they have both read and wri Click the ``Settings'' link at the bottom of the right-hand sidebar. .The repository settings link -image::images/reposettingslink.png[The repository settings link.] +image::images/reposettingslink.png[The repository settings link] Then select ``Collaborators'' from the menu on the left-hand side. Then, just type a username into the box, and click ``Add collaborator.'' @@ -54,7 +54,7 @@ You can repeat this as many times as you like to grant access to everyone you li If you need to revoke access, just click the ``X'' on the right-hand side of their row. .Repository collaborators -image::images/collaborators.png[The repository collaborators box.] +image::images/collaborators.png[The repository collaborators box] ==== Managing Pull Requests diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index 42f1f1f7..ab30a2fd 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -12,7 +12,7 @@ Normally these accounts are used for Open Source groups (such as ``perl'' or ``r An organization is pretty easy to create; just click on the ``+'' icon at the top-right of any GitHub page, and select ``New organization'' from the menu. .The ``New organization'' menu item -image::images/neworg.png[The ``New organization'' menu item.] +image::images/neworg.png[The ``New organization'' menu item] First you'll need to name your organization and provide an email address for a main point of contact for the group. Then you can invite other users to be co-owners of the account if you want to. diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index 1f1191c4..3fca09d9 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -535,7 +535,7 @@ Merge commits are no different. Let's say you started work on a topic branch, accidentally merged it into `master`, and now your commit history looks like this: .Accidental merge commit -image::images/undomerge-start.png[Accidental merge commit.] +image::images/undomerge-start.png[Accidental merge commit] There are two ways to approach this problem, depending on what your desired outcome is. @@ -545,7 +545,7 @@ If the unwanted merge commit only exists on your local repository, the easiest a In most cases, if you follow the errant `git merge` with `git reset --hard HEAD~`, this will reset the branch pointers so they look like this: .History after `git reset --hard HEAD~` -image::images/undomerge-reset.png[History after `git reset --hard HEAD~`.] +image::images/undomerge-reset.png[History after `git reset --hard HEAD~`] We covered `reset` back in <>, so it shouldn't be too hard to figure out what's going on here. Here's a quick refresher: `reset --hard` usually goes through three steps: @@ -578,7 +578,7 @@ In this case, we want to undo all the changes introduced by merging in parent #2 The history with the revert commit looks like this: .History after `git revert -m 1` -image::images/undomerge-revert.png[History after `git revert -m 1`.] +image::images/undomerge-revert.png[History after `git revert -m 1`] The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in `HEAD`'s history. Git will get confused if you try to merge `topic` into `master` again: @@ -593,7 +593,7 @@ There's nothing in `topic` that isn't already reachable from `master`. What's worse, if you add work to `topic` and merge again, Git will only bring in the changes _since_ the reverted merge: .History with a bad merge -image::images/undomerge-revert2.png[History with a bad merge.] +image::images/undomerge-revert2.png[History with a bad merge] The best way around this is to un-revert the original merge, since now you want to bring in the changes that were reverted out, *then* create a new merge commit: @@ -605,7 +605,7 @@ $ git merge topic ---- .History after re-merging a reverted merge -image::images/undomerge-revert3.png[History after re-merging a reverted merge.] +image::images/undomerge-revert3.png[History after re-merging a reverted merge] In this example, `M` and `^M` cancel out. `^^M` effectively merges in the changes from `C3` and `C4`, and `C8` merges in the changes from `C7`, so now `topic` is fully merged. diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 79fccfea..68a4073d 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -292,7 +292,7 @@ For example, say you have a commit history that looks like <>. [[double_dot]] .Example history for range selection -image::images/double-dot.png[Example history for range selection.] +image::images/double-dot.png[Example history for range selection] Say you want to see what is in your `experiment` branch that hasn't yet been merged into your `master` branch. You can ask Git to show you a log of just those commits with `master..experiment` -- that means ``all commits reachable from `experiment` that aren't reachable from `master`.'' diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 6863c82f..6438920a 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -198,11 +198,11 @@ These filters can be set to do all sorts of fun things. [[filters_a]] .The ``smudge'' filter is run on checkout -image::images/smudge.png[The ``smudge'' filter is run on checkout.] +image::images/smudge.png[The ``smudge'' filter is run on checkout] [[filters_b]] .The ``clean'' filter is run when files are staged -image::images/clean.png[The ``clean'' filter is run when files are staged.] +image::images/clean.png[The ``clean'' filter is run when files are staged] The original commit message for this feature gives a simple example of running all your C source code through the `indent` program before committing. You can set it up by setting the filter attribute in your `.gitattributes` file to filter `*.c` files with the ``indent'' filter: diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index e4277734..68a42c0a 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -320,7 +320,7 @@ $ git diff 32d1776b1^ 32d1776b1 Instead of getting the diff output on the command line, Git fires up P4Merge, which looks something like this: .P4Merge -image::images/p4merge.png[P4Merge.] +image::images/p4merge.png[P4Merge] If you try to merge two branches and subsequently have merge conflicts, you can run the command `git mergetool`; it starts P4Merge to let you resolve the conflicts through that GUI tool. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index e6950fbd..61ae65c7 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -26,7 +26,7 @@ Upon first starting the machine, it asks you to customize the password for three When that has all completed, you'll see this: .The Git Fusion virtual machine boot screen -image::images/git-fusion-boot.png[The Git Fusion virtual machine boot screen.] +image::images/git-fusion-boot.png[The Git Fusion virtual machine boot screen] You should take note of the IP address that's shown here, we'll be using it later on. Next, we'll create a Perforce user. @@ -289,7 +289,7 @@ Git thinks it worked. Let's take a look at the history of the `README` file from Perforce's point of view, using the revision graph feature of `p4v`: .Perforce revision graph resulting from Git push -image::images/git-fusion-perforce-graph.png[Perforce revision graph resulting from Git push.] +image::images/git-fusion-perforce-graph.png[Perforce revision graph resulting from Git push] If you've never seen this view before, it may seem confusing, but it shows the same concepts as a graphical viewer for Git history. We're looking at the history of the `README` file, so the directory tree at top left only shows that file as it surfaces in various branches. diff --git a/book/09-git-and-other-scms/sections/client-tfs.asc b/book/09-git-and-other-scms/sections/client-tfs.asc index fc697f32..8f205058 100644 --- a/book/09-git-and-other-scms/sections/client-tfs.asc +++ b/book/09-git-and-other-scms/sections/client-tfs.asc @@ -380,7 +380,7 @@ PS> git tfs ct It looks a bit like this: .The git-tfs checkin tool -image::images/git-tfs-ct.png[The git-tfs checkin tool.] +image::images/git-tfs-ct.png[The git-tfs checkin tool] This will look familiar to TFS users, as it's the same dialog that's launched from within Visual Studio. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index e5be083e..081c3538 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -158,7 +158,7 @@ If you're using ZSH, the `^` character is used for globbing, so you have to encl Conceptually, the data that Git is storing looks something like this: .Simple version of the Git data model -image::images/data-model-1.png[Simple version of the Git data model.] +image::images/data-model-1.png[Simple version of the Git data model] You can fairly easily create your own tree. Git normally creates a tree by taking the state of your staging area or index and writing a series of tree objects from it. @@ -239,7 +239,7 @@ If you created a working directory from the new tree you just wrote, you would g You can think of the data that Git contains for these structures as being like this: .The content structure of your current Git data -image::images/data-model-2.png[The content structure of your current Git data.] +image::images/data-model-2.png[The content structure of your current Git data] [[_git_commit_objects]] ==== Commit Objects @@ -348,7 +348,7 @@ $ find .git/objects -type f If you follow all the internal pointers, you get an object graph something like this: .All the reachable objects in your Git directory -image::images/data-model-3.png[All the reachable objects in your Git directory.] +image::images/data-model-3.png[All the reachable objects in your Git directory] ==== Object Storage diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index 39f0faf2..0f794b33 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -60,7 +60,7 @@ fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit Now, your Git database conceptually looks something like this: .Git directory objects with branch head references included -image::images/data-model-4.png[Git directory objects with branch head references included.] +image::images/data-model-4.png[Git directory objects with branch head references included] When you run commands like `git branch `, Git basically runs that `update-ref` command to add the SHA-1 of the last commit of the branch you're on into whatever new reference you want to create. diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index a317780c..ad383947 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -37,6 +37,6 @@ The `\w` means print the current working directory, the `\$` prints the `$` part Now your bash prompt will look like this when you're anywhere inside a Git-controlled project: .Customized `bash` prompt -image::images/git-bash.png[Customized `bash` prompt.] +image::images/git-bash.png[Customized `bash` prompt] Both of these scripts come with helpful documentation; take a look at the contents of `git-completion.bash` and `git-prompt.sh` for more information. diff --git a/book/A-git-in-other-environments/sections/eclipse.asc b/book/A-git-in-other-environments/sections/eclipse.asc index 2facd117..ef678170 100644 --- a/book/A-git-in-other-environments/sections/eclipse.asc +++ b/book/A-git-in-other-environments/sections/eclipse.asc @@ -5,6 +5,6 @@ Eclipse ships with a plugin called Egit, which provides a fairly-complete interf It's accessed by switching to the Git Perspective (Window > Open Perspective > Other…, and select "Git"). .Eclipse's EGit environment -image::images/egit.png[Eclipse's EGit environment.] +image::images/egit.png[Eclipse's EGit environment] EGit comes with plenty of great documentation, which you can find by going to Help > Help Contents, and choosing the "EGit Documentation" node from the contents listing. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index b046bd89..03b1b870 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -32,7 +32,7 @@ Probably one of the most useful is the `--all` flag, which tells gitk to show co Gitk's interface looks like this: .The `gitk` history viewer -image::images/gitk.png[The `gitk` history viewer.] +image::images/gitk.png[The `gitk` history viewer] On the top is something that looks a bit like the output of `git log --graph`; each dot represents a commit, the lines represent parent relationships, and refs are shown as colored boxes. The yellow dot represents HEAD, and the red dot represents changes that are yet to become a commit. @@ -50,7 +50,7 @@ $ git gui And it looks something like this: .The `git-gui` commit tool -image::images/git-gui.png[The `git-gui` commit tool.] +image::images/git-gui.png[The `git-gui` commit tool] On the left is the index; unstaged changes are on top, staged changes on the bottom. You can move entire files between the two states by clicking on their icons, or you can select a file for viewing by clicking on its name. @@ -74,10 +74,10 @@ These clients are a good example of workflow-oriented tools – rather than expo They look like this: .GitHub for macOS -image::images/github_mac.png[GitHub for macOS.] +image::images/github_mac.png[GitHub for macOS] .GitHub for Windows -image::images/github_win.png[GitHub for Windows.] +image::images/github_win.png[GitHub for Windows] They are designed to look and work very much alike, so we'll treat them like a single product in this chapter. We won't be doing a detailed rundown of these tools (they have their own documentation), but a quick tour of the ``changes'' view (which is where you'll spend most of your time) is in order. @@ -117,12 +117,12 @@ Branch management is one of the areas where the two tools diverge. On macOS, there's a button at the top of the window for creating a new branch: .``Create Branch'' button on macOS -image::images/branch_widget_mac.png[``Create Branch'' button on macOS.] +image::images/branch_widget_mac.png[``Create Branch'' button on macOS] On Windows, this is done by typing the new branch's name in the branch-switching widget: .Creating a branch on Windows -image::images/branch_widget_win.png[Creating a branch on Windows.] +image::images/branch_widget_win.png[Creating a branch on Windows] Once your branch is created, making new commits is fairly straightforward. Make some changes in your working directory, and when you switch to the GitHub client window, it will show you which files changed. diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index 529d0754..d6040ca7 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -4,7 +4,7 @@ JetBrains IDEs (such as IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, RubyMine, an It provides a dedicated view in the IDE to work with Git and GitHub Pull Requests. .Version Control ToolWindow in JetBrains IDEs -image::images/jb.png[Version Control ToolWindow in JetBrains IDEs.] +image::images/jb.png[Version Control ToolWindow in JetBrains IDEs] The integration relies on the command-line git client, and requires one to be installed. The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[]. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index f0687afb..66f7c3cc 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -9,7 +9,7 @@ A package called posh-git (https://github.com/dahlbyk/posh-git[]) provides power It looks like this: .PowerShell with Posh-git -image::images/posh-git.png[PowerShell with Posh-git.] +image::images/posh-git.png[PowerShell with Posh-git] ==== Installation diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 78902660..a4f09867 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -9,7 +9,7 @@ To locate the feature, open a project that's controlled by Git (or just `git ini You'll see the "Connect" view, which looks a bit like this: .Connecting to a Git repository from Team Explorer -image::images/vs-1.png[Connecting to a Git repository from Team Explorer.] +image::images/vs-1.png[Connecting to a Git repository from Team Explorer] Visual Studio remembers all of the projects you've opened that are Git-controlled, and they're available in the list at the bottom. If you don't see the one you want there, click the "Add" link and type in the path to the working directory. @@ -18,7 +18,7 @@ This is a hub for performing Git actions; when you're _writing_ code, you'll pro [[vs_home]] .The "Home" view for a Git repository in Visual Studio -image::images/vs-2.png[The Home view for a Git repository in Visual Studio.] +image::images/vs-2.png[The Home view for a Git repository in Visual Studio] Visual Studio now has a powerful task-focused UI for Git. It includes a linear history view, a diff viewer, remote commands, and many other capabilities. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index e389a070..934bab35 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -38,7 +38,7 @@ This results in a display of the current branch on the right-hand side of the te It looks a bit like this: .Customized `zsh` prompt -image::images/zsh-prompt.png[Customized `zsh` prompt.] +image::images/zsh-prompt.png[Customized `zsh` prompt] For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. @@ -52,4 +52,4 @@ oh-my-zsh's plugin system comes with powerful git tab-completion, and it has a v [[oh_my_zsh_git]] .An example of an oh-my-zsh theme -image::images/zsh-oh-my.png[An example of an oh-my-zsh theme.] +image::images/zsh-oh-my.png[An example of an oh-my-zsh theme] From 6830c00a42fa102f8e5ed27761469af475f136fa Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Wed, 24 Jun 2020 09:14:06 +0000 Subject: [PATCH 049/549] [Fix] use 'an' article before vowel sounds --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c1b1a0a7..1cae9e97 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,7 +12,7 @@ assignees: '' - + @@ -58,7 +58,7 @@ assignees: '' - Browser/application version: **E-book reader:** - + - Device: - Software Update: From 6183d831957dcb7a3013a9d3173597438b7ef52b Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Thu, 25 Jun 2020 07:57:40 +0000 Subject: [PATCH 050/549] [enh] add missing text in square bracket Some square brackets are empty, but they do have caption along with them. So I've put same text as caption in empty square brackets. --- book/06-github/sections/4-managing-organization.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index ab30a2fd..e919b334 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -41,7 +41,7 @@ The Organization page shows you a simple dashboard of all the repositories, user [[_org_page]] .The Organization page -image::images/orgs-01-page.png[] +image::images/orgs-01-page.png[The Organization page] To manage your Teams, you can click on the Teams sidebar on the right hand side of the page in <<_org_page>>. This will bring you to a page you can use to add members to the team, add repositories to the team or manage the settings and access control levels for the team. @@ -50,7 +50,7 @@ You can change that level by clicking the ``Settings'' button in <<_team_page>>. [[_team_page]] .The Team page -image::images/orgs-02-teams.png[] +image::images/orgs-02-teams.png[The Team page] When you invite someone to a team, they will get an email letting them know they've been invited. @@ -67,6 +67,6 @@ You can go to the 'Audit Log' tab and see what events have happened at an organi [[_the_audit_log]] .The Audit log -image::images/orgs-03-audit.png[] +image::images/orgs-03-audit.png[The Audit log] You can also filter down to specific types of events, specific places or specific people. From 7d59c28a0b1a68a913eef33f696a62cae8de2821 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 26 Jun 2020 07:47:29 +0000 Subject: [PATCH 051/549] [Fix] add missing colon We generally separate statement and commands with a colon. --- book/01-introduction/sections/help.asc | 2 +- book/01-introduction/sections/installing.asc | 2 +- book/02-git-basics/sections/viewing-history.asc | 2 +- book/04-git-server/sections/git-on-a-server.asc | 4 ++-- book/04-git-server/sections/protocols.asc | 2 +- book/05-distributed-git/sections/maintaining.asc | 2 +- book/07-git-tools/sections/advanced-merging.asc | 2 +- book/07-git-tools/sections/revision-selection.asc | 4 ++-- book/07-git-tools/sections/rewriting-history.asc | 6 +++--- book/07-git-tools/sections/subtree-merges.asc | 2 +- book/08-customizing-git/sections/config.asc | 8 ++++---- book/08-customizing-git/sections/policy.asc | 8 ++++---- book/09-git-and-other-scms/sections/client-svn.asc | 4 ++-- book/09-git-and-other-scms/sections/import-svn.asc | 2 +- book/10-git-internals/sections/refspec.asc | 2 +- 15 files changed, 26 insertions(+), 26 deletions(-) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index 6f4a62b3..e7169ee5 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -10,7 +10,7 @@ $ git --help $ man git- ---- -For example, you can get the manpage help for the `git config` command by running(((git commands, help))) +For example, you can get the manpage help for the `git config` command by running:(((git commands, help))) [source,console] ---- diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 58cd3f01..0652df97 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -114,7 +114,7 @@ If you're using a RPM-based distribution (Fedora/RHEL/RHEL-derivatives), you als $ sudo dnf install getopt ---- -Additionally, if you're using Fedora/RHEL/RHEL-derivatives, you need to do this +Additionally, if you're using Fedora/RHEL/RHEL-derivatives, you need to do this: [source,console] ---- diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 2dd731f2..172d8669 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -5,7 +5,7 @@ After you have created several commits, or if you have cloned a repository with The most basic and powerful tool to do this is the `git log` command. These examples use a very simple project called ``simplegit''. -To get the project, run +To get the project, run: [source,console] ---- diff --git a/book/04-git-server/sections/git-on-a-server.asc b/book/04-git-server/sections/git-on-a-server.asc index 18727c66..61847a99 100644 --- a/book/04-git-server/sections/git-on-a-server.asc +++ b/book/04-git-server/sections/git-on-a-server.asc @@ -23,7 +23,7 @@ done. You should now have a copy of the Git directory data in your `my_project.git` directory. -This is roughly equivalent to something like +This is roughly equivalent to something like: [source,console] ---- @@ -45,7 +45,7 @@ Assuming that `/srv/git` exists on that server, you can set up your new reposito $ scp -r my_project.git user@git.example.com:/srv/git ---- -At this point, other users who have SSH-based read access to the `/srv/git` directory on that server can clone your repository by running +At this point, other users who have SSH-based read access to the `/srv/git` directory on that server can clone your repository by running: [source,console] ---- diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index 6fbb41e8..99d232a7 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -105,7 +105,7 @@ $ chmod a+x hooks/post-update That's all.(((hooks, post-update))) The `post-update` hook that comes with Git by default runs the appropriate command (`git update-server-info`) to make HTTP fetching and cloning work properly. -This command is run when you push to this repository (over SSH perhaps); then, other people can clone via something like +This command is run when you push to this repository (over SSH perhaps); then, other people can clone via something like: [source,console] ---- diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index b8f2c439..8196ce91 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -384,7 +384,7 @@ For example, suppose you have a project that looks like this: .Example history before a cherry-pick image::images/rebasing-1.png[Example history before a cherry-pick] -If you want to pull commit `e43a6` into your `master` branch, you can run +If you want to pull commit `e43a6` into your `master` branch, you can run: [source,console] ---- diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index 3fca09d9..79fa865a 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -226,7 +226,7 @@ In the `ignore-space-change` merge, we actually ended up with a few lines with D If you want to get an idea before finalizing this commit about what was actually changed between one side or the other, you can ask `git diff` to compare what is in your working directory that you're about to commit as the result of the merge to any of these stages. Let's go through them all. -To compare your result to what you had in your branch before the merge, in other words, to see what the merge introduced, you can run `git diff --ours` +To compare your result to what you had in your branch before the merge, in other words, to see what the merge introduced, you can run `git diff --ours`: [source,console] ---- diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 68a4073d..9583b15e 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -138,7 +138,7 @@ $ git show HEAD@{5} ---- You can also use this syntax to see where a branch was some specific amount of time ago. -For instance, to see where your `master` branch was yesterday, you can type +For instance, to see where your `master` branch was yesterday, you can type: [source,console] ---- @@ -252,7 +252,7 @@ The other main ancestry specification is the `~` (tilde). This also refers to the first parent, so `HEAD~` and `HEAD^` are equivalent. The difference becomes apparent when you specify a number. `HEAD~2` means ``the first parent of the first parent,'' or ``the grandparent'' -- it traverses the first parents the number of times you specify. -For example, in the history listed earlier, `HEAD~3` would be +For example, in the history listed earlier, `HEAD~3` would be: [source,console] ---- diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 95a37e6e..306ff41c 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -150,7 +150,7 @@ Once you're satisfied with your changes, run ---- These instructions tell you exactly what to do. -Type +Type: [source,console] ---- @@ -158,7 +158,7 @@ $ git commit --amend ---- Change the commit message, and exit the editor. -Then, run +Then, run: [source,console] ---- @@ -172,7 +172,7 @@ Each time, Git will stop, let you amend the commit, and continue when you're fin ==== Reordering Commits You can also use interactive rebases to reorder or remove commits entirely. -If you want to remove the ``added cat-file'' commit and change the order in which the other two commits are introduced, you can change the rebase script from this +If you want to remove the ``added cat-file'' commit and change the order in which the other two commits are introduced, you can change the rebase script from this: [source,console] ---- diff --git a/book/07-git-tools/sections/subtree-merges.asc b/book/07-git-tools/sections/subtree-merges.asc index 6ef0f714..09592d20 100644 --- a/book/07-git-tools/sections/subtree-merges.asc +++ b/book/07-git-tools/sections/subtree-merges.asc @@ -95,7 +95,7 @@ Instead, you must run `git diff-tree` with the branch you want to compare to: $ git diff-tree -p rack_branch ---- -Or, to compare what is in your `rack` subdirectory with what the `master` branch on the server was the last time you fetched, you can run +Or, to compare what is in your `rack` subdirectory with what the `master` branch on the server was the last time you fetched, you can run: [source,console] ---- diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 68a42c0a..4a84856b 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -37,7 +37,7 @@ It's generally easier to run the `git config` command, though. The configuration options recognized by Git fall into two categories: client-side and server-side. The majority of the options are client-side -- configuring your personal working preferences. Many, _many_ configuration options are supported, but a large fraction of them are useful only in certain edge cases; we'll cover just the most common and useful options here. -If you want to see a list of all the options your version of Git recognizes, you can run +If you want to see a list of all the options your version of Git recognizes, you can run: [source,console] ---- @@ -227,7 +227,7 @@ Each of these can be set to `true`, `false`, or `always`: color.status In addition, each of these has subsettings you can use to set specific colors for parts of the output, if you want to override each color. -For example, to set the meta information in your diff output to blue foreground, black background, and bold text, you can run +For example, to set the meta information in your diff output to blue foreground, black background, and bold text, you can run: [source,console] ---- @@ -287,7 +287,7 @@ $ sudo chmod +x /usr/local/bin/extDiff Now you can set up your config file to use your custom merge resolution and diff tools. This takes a number of custom settings: `merge.tool` to tell Git what strategy to use, `mergetool..cmd` to specify how to run the command, `mergetool..trustExitCode` to tell Git if the exit code of that program indicates a successful merge resolution or not, and `diff.external` to tell Git what command to run for diffs. -So, you can either run four config commands +So, you can either run four config commands: [source,console] ---- @@ -369,7 +369,7 @@ Some of the tools listed above only work in a windowed environment. If run in a terminal-only session, they will fail. ---- -If you're not interested in using KDiff3 for diff but rather want to use it just for merge resolution, and the kdiff3 command is in your path, then you can run +If you're not interested in using KDiff3 for diff but rather want to use it just for merge resolution, and the kdiff3 command is in your path, then you can run: [source,console] ---- diff --git a/book/08-customizing-git/sections/policy.asc b/book/08-customizing-git/sections/policy.asc index 48e759b1..a20d40d8 100644 --- a/book/08-customizing-git/sections/policy.asc +++ b/book/08-customizing-git/sections/policy.asc @@ -270,7 +270,7 @@ error: failed to push some refs to 'git@gitserver:project.git' You'll see a remote rejected message for each reference that your hook declined, and it tells you that it was declined specifically because of a hook failure. Furthermore, if someone tries to edit a file they don't have access to and push a commit containing it, they will see something similar. -For instance, if a documentation author tries to push a commit modifying something in the `lib` directory, they see +For instance, if a documentation author tries to push a commit modifying something in the `lib` directory, they see: [source,console] ---- @@ -360,7 +360,7 @@ check_directory_perms This is roughly the same script as the server-side part, but with two important differences. First, the ACL file is in a different place, because this script runs from your working directory, not from your `.git` directory. -You have to change the path to the ACL file from this +You have to change the path to the ACL file from this: [source,ruby] ---- @@ -376,14 +376,14 @@ access = get_acl_access_data('.git/acl') The other important difference is the way you get a listing of the files that have been changed. Because the server-side method looks at the log of commits, and, at this point, the commit hasn't been recorded yet, you must get your file listing from the staging area instead. -Instead of +Instead of: [source,ruby] ---- files_modified = `git log -1 --name-only --pretty=format:'' #{ref}` ---- -you have to use +you have to use: [source,ruby] ---- diff --git a/book/09-git-and-other-scms/sections/client-svn.asc b/book/09-git-and-other-scms/sections/client-svn.asc index a3e0d87f..5ee30720 100644 --- a/book/09-git-and-other-scms/sections/client-svn.asc +++ b/book/09-git-and-other-scms/sections/client-svn.asc @@ -58,7 +58,7 @@ $ svnsync init file:///tmp/test-svn \ ---- This sets up the properties to run the sync. -You can then clone the code by running +You can then clone the code by running: [source,console] ---- @@ -362,7 +362,7 @@ It's important to note that it doesn't check you out into that branch; if you co Git figures out what branch your dcommits go to by looking for the tip of any of your Subversion branches in your history – you should have only one, and it should be the last one with a `git-svn-id` in your current branch history. If you want to work on more than one branch simultaneously, you can set up local branches to `dcommit` to specific Subversion branches by starting them at the imported Subversion commit for that branch. -If you want an `opera` branch that you can work on separately, you can run +If you want an `opera` branch that you can work on separately, you can run: [source,console] ---- diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index f33c6ccb..becb37df 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -57,7 +57,7 @@ $ cd my_project ---- Now you should have a nicer Subversion import in your `my_project` directory. -Instead of commits that look like this +Instead of commits that look like this: [source] ---- diff --git a/book/10-git-internals/sections/refspec.asc b/book/10-git-internals/sections/refspec.asc index f1b411a6..f8157ce5 100644 --- a/book/10-git-internals/sections/refspec.asc +++ b/book/10-git-internals/sections/refspec.asc @@ -101,7 +101,7 @@ If you have a complex workflow process that has a QA team pushing branches, deve It's nice that you can fetch namespaced references that way, but how does the QA team get their branches into a `qa/` namespace in the first place? You accomplish that by using refspecs to push. -If the QA team wants to push their `master` branch to `qa/master` on the remote server, they can run +If the QA team wants to push their `master` branch to `qa/master` on the remote server, they can run: [source,console] ---- From 11863e740174660b07ba125174789033bced1bc0 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 3 Jul 2020 14:43:13 +0000 Subject: [PATCH 052/549] [Fix] add missing "this" keyword See @ben's comment on PR #1444[1]. [1]: https://github.com/progit/progit2/pull/1444#discussion_r446303558 --- book/01-introduction/sections/help.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index e7169ee5..d5331d83 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -10,7 +10,7 @@ $ git --help $ man git- ---- -For example, you can get the manpage help for the `git config` command by running:(((git commands, help))) +For example, you can get the manpage help for the `git config` command by running this:(((git commands, help))) [source,console] ---- From 1283cac07fb08bc35cf0d8cd1aec1020435dba9b Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 3 Jul 2020 14:51:58 +0000 Subject: [PATCH 053/549] [Fix] use monospace font for "upstream" keyword See @ben's comment on PR #1444[1]. [1]: https://github.com/progit/progit2/pull/1444/files/20ec785536bb526e16dc0de8fb7ad1fe2635049c#r446307067 --- book/06-github/sections/2-contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index df9cbf91..cfec4c79 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -270,7 +270,7 @@ To https://github.com/tonychacon/blink ef4725c..3c8d735 slower-blink -> slow-blink ---- -<1> Add the original repository as a remote named ``upstream''. +<1> Add the original repository as a remote named `upstream`. <2> Fetch the newest work from that remote. <3> Merge the main branch of that repository into your topic branch. <4> Fix the conflict that occurred. From e98c6518d0204c7fa31402134afef12ecd0009b0 Mon Sep 17 00:00:00 2001 From: Vipul Kumar Date: Fri, 3 Jul 2020 15:12:27 +0000 Subject: [PATCH 054/549] [Fix] add missing double quote around "Home" keyword Double quote around "Home" keyword is missing in square bracket, but present in figure caption, see @Morganov's comment on PR #1444[1]. [1]: https://github.com/progit/progit2/pull/1444#discussion_r446494854 --- book/A-git-in-other-environments/sections/visualstudio.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index a4f09867..22a77f08 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -18,7 +18,7 @@ This is a hub for performing Git actions; when you're _writing_ code, you'll pro [[vs_home]] .The "Home" view for a Git repository in Visual Studio -image::images/vs-2.png[The Home view for a Git repository in Visual Studio] +image::images/vs-2.png[The ``Home'' view for a Git repository in Visual Studio] Visual Studio now has a powerful task-focused UI for Git. It includes a linear history view, a diff viewer, remote commands, and many other capabilities. From a1d76cf1dbd686e71fc598b19f01c7bed9198ee3 Mon Sep 17 00:00:00 2001 From: Kaartic Sivaraam Date: Sun, 5 Jul 2020 00:53:57 +0530 Subject: [PATCH 055/549] Change references to Git project's 'pu' branch to 'seen' The Git maintainer has renamed the 'pu' branch to 'seen' [1]. There are a few references to that 'pu' branch in the book. Correct them. [1]: https://public-inbox.org/git/xmqqimfid2l1.fsf@gitster.c.googlers.com/ --- book/05-distributed-git/sections/maintaining.asc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 8196ce91..016b2591 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -343,7 +343,7 @@ Then, when the codebase on that branch is stable and passes tests, you merge it ===== Large-Merging Workflows (((workflows, "merging (large)"))) -The Git project has four long-running branches: `master`, `next`, and `pu` (proposed updates) for new work, and `maint` for maintenance backports. +The Git project has four long-running branches: `master`, `next`, and `seen` (formerly 'pu' -- proposed updates) for new work, and `maint` for maintenance backports. When new work is introduced by contributors, it's collected into topic branches in the maintainer's repository in a manner similar to what we've described (see <>). At this point, the topics are evaluated to determine whether they're safe and ready for consumption or whether they need more work. If they're safe, they're merged into `next`, and that branch is pushed up so everyone can try the topics integrated together. @@ -352,10 +352,10 @@ If they're safe, they're merged into `next`, and that branch is pushed up so eve .Managing a complex series of parallel contributed topic branches image::images/large-merges-1.png[Managing a complex series of parallel contributed topic branches] -If the topics still need work, they're merged into `pu` instead. +If the topics still need work, they're merged into `seen` instead. When it's determined that they're totally stable, the topics are re-merged into `master`. -The `next` and `pu` branches are then rebuilt from the `master`. -This means `master` almost always moves forward, `next` is rebased occasionally, and `pu` is rebased even more often: +The `next` and `seen` branches are then rebuilt from the `master`. +This means `master` almost always moves forward, `next` is rebased occasionally, and `seen` is rebased even more often: .Merging contributed topic branches into long-term integration branches image::images/large-merges-2.png[Merging contributed topic branches into long-term integration branches] From cd4832c884fed4ef5b1471f1893a21e2e338d6fe Mon Sep 17 00:00:00 2001 From: Kaartic Sivaraam Date: Sun, 5 Jul 2020 00:54:49 +0530 Subject: [PATCH 056/549] Change reference of 'pu' to 'seen' in the SVG image a1d76cf (Change references to Git project's 'pu' branch to 'seen', 2020-07-05) changed the references of 'pu' to 'seen'. There's an SVG image which references 'pu'. Correct that too. --- images/large-merges-2.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/large-merges-2.svg b/images/large-merges-2.svg index d8f782c8..30288eca 100644 --- a/images/large-merges-2.svg +++ b/images/large-merges-2.svg @@ -52,7 +52,7 @@ - pu + seen From 72e4a37216a33d3ce1e3509414395b6688f831d8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 9 Jul 2020 10:58:36 +0200 Subject: [PATCH 057/549] Link to git command reference Visual Studio 2017 --- book/A-git-in-other-environments/sections/visualstudio.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 22a77f08..3594d296 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -22,4 +22,4 @@ image::images/vs-2.png[The ``Home'' view for a Git repository in Visual Studio] Visual Studio now has a powerful task-focused UI for Git. It includes a linear history view, a diff viewer, remote commands, and many other capabilities. -For complete documentation of this feature (which doesn't fit here), go to http://msdn.microsoft.com/en-us/library/hh850437.aspx[]. +For more on using Git within Visual Studio go to: https://docs.microsoft.com/en-us/azure/devops/repos/git/command-prompt?view=azure-devops[]. From eeca187b5b643e5e013d38711b9d6f6763ea9314 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 14 Jul 2020 11:52:27 +0200 Subject: [PATCH 058/549] Add note: how to set the pull.rebase variable From version 2.27 onward, git will give a warning when the pull.rebase variable is not set. This commit adds a note detailing how to configure the pull.rebase variable to get rid of this warning. --- book/02-git-basics/sections/remotes.asc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 21595910..f33eeee3 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -127,6 +127,19 @@ If your current branch is set up to track a remote branch (see the next section This may be an easier or more comfortable workflow for you; and by default, the `git clone` command automatically sets up your local `master` branch to track the remote `master` branch (or whatever the default branch is called) on the server you cloned from. Running `git pull` generally fetches data from the server you originally cloned from and automatically tries to merge it into the code you're currently working on. +[NOTE] +==== +From git version 2.27 onward: +`git pull` will give a warning if the pull.rebase variable is not set. +Git will keep warning you until you set the variable. + +If you want the default behavior of git (fast-forward if possible, else create a merge commit): +`git config --global pull.rebase "false"` + +If you want to rebase when pulling: +`git config --global pull.rebase "true"` +==== + [[_pushing_remotes]] ==== Pushing to Your Remotes From d81ce818da01fe46189b51e77f4cb46fb7eb1517 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 16 Jul 2020 12:18:47 +0200 Subject: [PATCH 059/549] Implement review feedback Co-authored-by: Ben Straub --- book/02-git-basics/sections/remotes.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index f33eeee3..4165b0a7 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -129,8 +129,7 @@ Running `git pull` generally fetches data from the server you originally cloned [NOTE] ==== -From git version 2.27 onward: -`git pull` will give a warning if the pull.rebase variable is not set. +From git version 2.27 onward, `git pull` will give a warning if the `pull.rebase` variable is not set. Git will keep warning you until you set the variable. If you want the default behavior of git (fast-forward if possible, else create a merge commit): From 3d25d7746e8b6d192f2ed0c4d7b54e1fcee49de7 Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Mon, 20 Jul 2020 09:00:54 +0200 Subject: [PATCH 060/549] removes trailing spaces --- book/07-git-tools/sections/submodules.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 442fb85a..a832bded 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -373,7 +373,7 @@ Submodule DbConnector c3f01dc..c87d55d: > better connection routine ---- -Git will by default try to update *all* of your submodules when you run `git submodule update --remote`. +Git will by default try to update *all* of your submodules when you run `git submodule update --remote`. If you have a lot of them, you may want to pass the name of just the submodule you want to try to update. ===== Pulling Upstream Changes from the Project Remote @@ -969,7 +969,7 @@ nothing to commit, working tree clean ---- Using the `--recurse-submodules` flag of `git checkout` can also be useful when you work on several branches in the superproject, each having your submodule pointing at different commits. -Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as ``modified'', and indicate ``new commits''. +Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as ``modified'', and indicate ``new commits''. That is because the submodule state is by default not carried over when switching branches. This can be really confusing, so it's a good idea to always `git checkout --recurse-submodules` when your project has submodules. From 8122f27dfcdebbfc4a61b0aa33a35356e162e900 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 20 Jul 2020 09:09:47 +0200 Subject: [PATCH 061/549] Update git auto-correct message This is the help message that git 2.25.1 gives. --- book/08-customizing-git/sections/config.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 9ec1cf0d..85ffccdf 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -175,7 +175,7 @@ If you mistype a command, it shows you something like this: $ git chekcout master git: 'chekcout' is not a git command. See 'git --help'. -Did you mean this? +The most similar command is checkout ---- From ddb6c61fd1181d3e6bcd6eb50fc92a3c7c2c4a94 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 22 Jul 2020 12:18:15 +0200 Subject: [PATCH 062/549] Change link to ssh key generation guide --- book/04-git-server/sections/generating-ssh-key.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index 6ed59b1f..d3429b32 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -54,4 +54,4 @@ mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local ---- -For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://help.github.com/articles/generating-ssh-keys[]. +For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[]. From 5f23ce2672962097ad5a4ba0eb798127eb658271 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 22 Jul 2020 12:29:06 +0200 Subject: [PATCH 063/549] Change link to GitHub docs --- TRANSLATING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TRANSLATING.md b/TRANSLATING.md index a818697f..2620528c 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -58,7 +58,7 @@ If there is no project for your language, you can start your own translation. Base your work on the second edition of the book, available [here](https://github.com/progit/progit2). To do so: 1. Pick the correct [ISO 639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language. - 1. Create a [GitHub organization](https://help.github.com/articles/creating-a-new-organization-from-scratch/), for example: `progit2-[your code]` on GitHub. + 1. Create a [GitHub organization](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch), for example: `progit2-[your code]` on GitHub. 1. Create a project ``progit2``. 1. Copy the structure of progit/progit2 (this project) in your project and start translating. From 8d8a0b328fd8bab7cc7d1691c9c480712eaa2c2e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:04:58 +0200 Subject: [PATCH 064/549] Rewrite overly long sentence --- book/03-git-branching/sections/rebasing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index 726f5fc7..6e47214b 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -235,4 +235,4 @@ Now, to the question of whether merging or rebasing is better: hopefully you'll Git is a powerful tool, and allows you to do many things to and with your history, but every team and every project is different. Now that you know how both of these things work, it's up to you to decide which one is best for your particular situation. -In general the way to get the best of both worlds is to rebase local changes you've made but haven't shared yet before you push them in order to clean up your story, but never rebase anything you've pushed somewhere. +You can get the best of both worlds: rebase local changes before pushing to clean up your work, but never rebase anything that you've pushed somewhere. \ No newline at end of file From c9da009d2c8cf95b836a00d6188e875cd52c5b01 Mon Sep 17 00:00:00 2001 From: Dustin Frank Date: Thu, 30 Jul 2020 11:34:45 +0200 Subject: [PATCH 065/549] Make commit name consistent --- book/07-git-tools/sections/rewriting-history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 68309b7f..c0403ce6 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -139,7 +139,7 @@ When you save and exit the editor, Git rewinds you back to the last commit in th [source,console] ---- $ git rebase -i HEAD~3 -Stopped at f7f3f6d... changed my name a bit +Stopped at f7f3f6d... Change my name a bit You can amend the commit now, with git commit --amend From 3ca66f2360b36afa18a03e20a052f55f0655af19 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 8 Aug 2020 14:52:11 +0200 Subject: [PATCH 066/549] Create section: your default branch name --- book/01-introduction/sections/first-time-setup.asc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 9e8c27c2..7179ce70 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -84,6 +84,18 @@ You may find, if you don't setup your editor like this, you get into a really co An example on a Windows system may include a prematurely terminated Git operation during a Git initiated edit. ==== +==== Your default branch name + +By default Git will create a branch called _master_ when you create a new repository with `git init`. +From Git version 2.28 onwards, you can set a different name for the initial branch. + +To set _main_ as the default branch name do: + +[source,console] +---- +$ git config --global init.defaultBranch main +---- + ==== Checking Your Settings If you want to check your configuration settings, you can use the `git config --list` command to list all the settings Git can find at that point: From bdcf56a26a0fa0b18f2a99ac74ef76fb357a03a2 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 09:09:56 +0200 Subject: [PATCH 067/549] Improve the text with the following changes: - Use the active voice where possible. - Use a clear title for the licensing section. - Break up a long sentence in the large rewrite section. - Remove the word please, when we actually require something from a contributor. - Use simpler English words - Remove newline --- CONTRIBUTING.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c977233c..91faeed2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,44 +1,44 @@ # Contributing to Pro Git (2nd Edition) -## Licensing +## Licensing your work to us -By opening a pull request to this repository, you agree to provide your work under the [project license](LICENSE.asc). +When you open a pull request, you agree to provide your work under the [project license](LICENSE.asc). Also, you agree to grant such license of your work as is required for the purposes of future print editions to @ben and @schacon. Should your changes appear in a printed edition, you'll be included in the [contributors list](book/contributors.asc). ## Signaling an Issue -Before signaling an issue, please check that there isn't already a similar one in the bug tracking system. +Search for similar issues, before creating a new issue. -Also, if this issue has been spotted on the git-scm.com site, please cross-check that it is still present in the pdf version. -The issue may have already been corrected, but the changes have not been deployed yet. +Also, if this issue has been spotted on the git-scm.com site, cross-check that the issue is present in the pdf version. +The issue may have already been corrected in the source files, but not yet deployed to the git-scm.com site. ## Small Corrections Errata and basic clarifications will be accepted if we agree that they improve the content. -You can also open an issue so we can figure out how or if it needs to be addressed. +You can also open an issue so that we can discuss how or if the issue needs to be addressed. If you've never done this before, the [flow guide](https://guides.github.com/introduction/flow/) might be useful. ## Large Rewrites Open an issue for discussion before you start. -These changes tend to be very subjective, often only clarifying things for some small percentage of people and it's rarely worth the time to accept them. -Professional copy editors have already reviewed this content multiple times so while you may have somewhat better taste and grammar than we do it's unlikely that your prose is going to be *so* much better that it's worth changing vast swaths of text. +A large rewrite tends to be very subjective, often only clarifying things for a small amount of readers. +Professional copy editors have already reviewed this content multiple times. +It's unlikely that your prose is going to be *so* much better that it's worth changing large portions of text. ## Figures -The images in this book were generated using [Sketch 3](https://www.sketchapp.com/), with the [included sketchbook file](diagram-source/progit.sketch). +The images in this book are generated using [Sketch 3](https://www.sketchapp.com/), with the [included sketchbook file](diagram-source/progit.sketch). -To add a figure: +To create a figure: 1. Add a page to the sketchbook. -Try to use the included symbols wherever possible. +Use the included symbols wherever possible. 2. Add a "slice" to your page. -Give it a name that matches the destination PNG filename, relative from the root of the source directory. -3. Make sure your slice is set to export at "800w". - +Name the slice so that it matches the destination PNG filename, relative from the root of the source directory. +3. Set your slice to export at "800w". ## Translations -If you would like to contribute to translating Pro Git into your language, take a look at [TRANSLATING.md](TRANSLATING.md). +If you want to contribute to translating Pro Git into your language, take a look at [TRANSLATING.md](TRANSLATING.md). From bfa96f0035abe6447a6d8910f8fcbf399a5de7d7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 10:46:09 +0200 Subject: [PATCH 068/549] Remove TFS files --- .../sections/client-tfs.asc | 416 ------------------ .../sections/import-tfs.asc | 60 --- 2 files changed, 476 deletions(-) delete mode 100644 book/09-git-and-other-scms/sections/client-tfs.asc delete mode 100644 book/09-git-and-other-scms/sections/import-tfs.asc diff --git a/book/09-git-and-other-scms/sections/client-tfs.asc b/book/09-git-and-other-scms/sections/client-tfs.asc deleted file mode 100644 index 8f205058..00000000 --- a/book/09-git-and-other-scms/sections/client-tfs.asc +++ /dev/null @@ -1,416 +0,0 @@ -==== Git and TFS - -(((Interoperation with other VCSs, TFS))) -(((TFS)))((("TFVC", see="TFS"))) -Git is becoming popular with Windows developers, and if you're writing code on Windows, there's a good chance you're using Microsoft's Team Foundation Server (TFS). -TFS is a collaboration suite that includes defect and work-item tracking, process support for Scrum and others, code review, and version control. -There's a bit of confusion ahead: *TFS* is the server, which supports controlling source code using both Git and their own custom VCS, which they've dubbed *TFVC* (Team Foundation Version Control). -Git support is a somewhat new feature for TFS (shipping with the 2013 version), so all of the tools that predate that refer to the version-control portion as ``TFS'', even though they're mostly working with TFVC. - -If you find yourself on a team that's using TFVC but you'd rather use Git as your version-control client, there's a project for you. - -===== Which Tool - -(((git-tf)))(((git-tfs))) -In fact, there are two: git-tf and git-tfs. - -Git-tfs (found at https://github.com/git-tfs/git-tfs[]) is a .NET project, and (as of this writing) it only runs on Windows. -To work with Git repositories, it uses the .NET bindings for libgit2, a library-oriented implementation of Git which is highly performant and allows a lot of flexibility with the guts of a Git repository. -Libgit2 is not a complete implementation of Git, so to cover the difference git-tfs will actually call the command-line Git client for some operations, so there are no artificial limits on what it can do with Git repositories. -Its support of TFVC features is very mature, since it uses the Visual Studio assemblies for operations with servers. -This does mean you'll need access to those assemblies, which means you need to install a recent version of Visual Studio (any edition since version 2010, including Express since version 2012), or the Visual Studio SDK. - -[CAUTION] -==== -Git-tf is End-of-Life (EOL), it will not get any updates. -It is also no longer supported by Microsoft. -==== - -Git-tf (whose home is at https://archive.codeplex.com/?p=gittf[]) is a Java project, and as such runs on any computer with a Java runtime environment. -It interfaces with Git repositories through JGit (a JVM implementation of Git), which means it has virtually no limitations in terms of Git functions. -However, its support for TFVC is limited as compared to git-tfs – it does not support branches, for instance. - -So each tool has pros and cons, and there are plenty of situations that favor one over the other. -We'll cover the basic usage of both of them in this book. - -[NOTE] -==== -You'll need access to a TFVC-based repository to follow along with these instructions. -These aren't as plentiful in the wild as Git or Subversion repositories, so you may need to create one of your own. -Codeplex (https://archive.codeplex.com/[]) or Visual Studio Online (https://visualstudio.microsoft.com[]) are both good choices for this. -==== - - -===== Getting Started: `git-tf` - -The first thing you do, just as with any Git project, is clone. -Here's what that looks like with `git-tf`: - -[source,console] ----- -$ git tf clone https://tfs.codeplex.com:443/tfs/TFS13 $/myproject/Main project_git ----- - -The first argument is the URL of a TFVC collection, the second is of the form `$/project/branch`, and the third is the path to the local Git repository that is to be created (this last one is optional). -Git-tf can only work with one branch at a time; if you want to make checkins on a different TFVC branch, you'll have to make a new clone from that branch. - -This creates a fully functional Git repository: - -[source,console] ----- -$ cd project_git -$ git log --all --oneline --decorate -512e75a (HEAD, tag: TFS_C35190, origin_tfs/tfs, master) Checkin message ----- - -This is called a _shallow_ clone, meaning that only the latest changeset has been downloaded. -TFVC isn't designed for each client to have a full copy of the history, so git-tf defaults to only getting the latest version, which is much faster. - -If you have some time, it's probably worth it to clone the entire project history, using the `--deep` option: - -[source,console] ----- -$ git tf clone https://tfs.codeplex.com:443/tfs/TFS13 $/myproject/Main \ - project_git --deep -Username: domain\user -Password: -Connecting to TFS... -Cloning $/myproject into /tmp/project_git: 100%, done. -Cloned 4 changesets. Cloned last changeset 35190 as d44b17a -$ cd project_git -$ git log --all --oneline --decorate -d44b17a (HEAD, tag: TFS_C35190, origin_tfs/tfs, master) Goodbye -126aa7b (tag: TFS_C35189) -8f77431 (tag: TFS_C35178) FIRST -0745a25 (tag: TFS_C35177) Created team project folder $/tfvctest via the \ - Team Project Creation Wizard ----- - -Notice the tags with names like `TFS_C35189`; this is a feature that helps you know which Git commits are associated with TFVC changesets. -This is a nice way to represent it, since you can see with a simple log command which of your commits is associated with a snapshot that also exists in TFVC. -They aren't necessary (and in fact you can turn them off with `git config git-tf.tag false`) – git-tf keeps the real commit-changeset mappings in the `.git/git-tf` file. - - -===== Getting Started: `git-tfs` - -Git-tfs cloning behaves a bit differently. -Observe: - -[source,powershell] ----- -PS> git tfs clone --with-branches \ - https://username.visualstudio.com/DefaultCollection \ - $/project/Trunk project_git -Initialized empty Git repository in C:/Users/ben/project_git/.git/ -C15 = b75da1aba1ffb359d00e85c52acb261e4586b0c9 -C16 = c403405f4989d73a2c3c119e79021cb2104ce44a -Tfs branches found: -- $/tfvc-test/featureA -The name of the local branch will be : featureA -C17 = d202b53f67bde32171d5078968c644e562f1c439 -C18 = 44cd729d8df868a8be20438fdeeefb961958b674 ----- - -Notice the `--with-branches` flag. -Git-tfs is capable of mapping TFVC branches to Git branches, and this flag tells it to set up a local Git branch for every TFVC branch. -This is highly recommended if you've ever branched or merged in TFS, but it won't work with a server older than TFS 2010 – before that release, ``branches'' were just folders, so git-tfs can't tell them from regular folders. - -Let's take a look at the resulting Git repository: - -[source,powershell] ----- -PS> git log --oneline --graph --decorate --all -* 44cd729 (tfs/featureA, featureA) Goodbye -* d202b53 Branched from $/tfvc-test/Trunk -* c403405 (HEAD, tfs/default, master) Hello -* b75da1a New project -PS> git log -1 -commit c403405f4989d73a2c3c119e79021cb2104ce44a -Author: Ben Straub -Date: Fri Aug 1 03:41:59 2014 +0000 - - Hello - - git-tfs-id: [https://username.visualstudio.com/DefaultCollection]$/myproject/Trunk;C16 ----- - -There are two local branches, `master` and `featureA`, which represent the initial starting point of the clone (`Trunk` in TFVC) and a child branch (`featureA` in TFVC). -You can also see that the `tfs` ``remote'' has a couple of refs too: `default` and `featureA`, which represent TFVC branches. -Git-tfs maps the branch you cloned from to `tfs/default`, and others get their own names. - -Another thing to notice is the `git-tfs-id:` lines in the commit messages. -Instead of tags, git-tfs uses these markers to relate TFVC changesets to Git commits. -This has the implication that your Git commits will have a different SHA-1 hash before and after they have been pushed to TFVC. - -===== Git-tf[s] Workflow - -[NOTE] -==== -Regardless of which tool you're using, you should set a couple of Git configuration values to avoid running into issues. - -[source,console] ----- -$ git config set --local core.ignorecase=true -$ git config set --local core.autocrlf=false ----- -==== - -The obvious next thing you're going to want to do is work on the project. -TFVC and TFS have several features that may add complexity to your workflow: - -. Feature branches that aren't represented in TFVC add a bit of complexity. - This has to do with the *very* different ways that TFVC and Git represent branches. -. Be aware that TFVC allows users to ``checkout'' files from the server, locking them so nobody else can edit them. - This obviously won't stop you from editing them in your local repository, but it could get in the way when it comes time to push your changes up to the TFVC server. -. TFS has the concept of ``gated'' checkins, where a TFS build-test cycle has to complete successfully before the checkin is allowed. - This uses the ``shelve'' function in TFVC, which we don't cover in detail here. - You can fake this in a manual fashion with git-tf, and git-tfs provides the `checkintool` command which is gate-aware. - -In the interest of brevity, what we'll cover here is the happy path, which sidesteps or avoids most of these issues. - -===== Workflow: `git-tf` - - -Let's say you've done some work, made a couple of Git commits on `master`, and you're ready to share your progress on the TFVC server. -Here's our Git repository: - -[source,console] ----- -$ git log --oneline --graph --decorate --all -* 4178a82 (HEAD, master) update code -* 9df2ae3 update readme -* d44b17a (tag: TFS_C35190, origin_tfs/tfs) Goodbye -* 126aa7b (tag: TFS_C35189) -* 8f77431 (tag: TFS_C35178) FIRST -* 0745a25 (tag: TFS_C35177) Created team project folder $/tfvctest via the \ - Team Project Creation Wizard ----- - -We want to take the snapshot that's in the `4178a82` commit and push it up to the TFVC server. -First things first: let's see if any of our teammates did anything since we last connected: - -[source,console] ----- -$ git tf fetch -Username: domain\user -Password: -Connecting to TFS... -Fetching $/myproject at latest changeset: 100%, done. -Downloaded changeset 35320 as commit 8ef06a8. Updated FETCH_HEAD. -$ git log --oneline --graph --decorate --all -* 8ef06a8 (tag: TFS_C35320, origin_tfs/tfs) just some text -| * 4178a82 (HEAD, master) update code -| * 9df2ae3 update readme -|/ -* d44b17a (tag: TFS_C35190) Goodbye -* 126aa7b (tag: TFS_C35189) -* 8f77431 (tag: TFS_C35178) FIRST -* 0745a25 (tag: TFS_C35177) Created team project folder $/tfvctest via the \ - Team Project Creation Wizard ----- - -Looks like someone else is working, too, and now we have divergent history. -This is where Git shines, but we have two choices of how to proceed: - -. Making a merge commit feels natural as a Git user (after all, that's what `git pull` does), and git-tf can do this for you with a simple `git tf pull`. - Be aware, however, that TFVC doesn't think this way, and if you push merge commits your history will start to look different on both sides, which can be confusing. - However, if you plan on submitting all of your changes as one changeset, this is probably the easiest choice. -. Rebasing makes our commit history linear, which means we have the option of converting each of our Git commits into a TFVC changeset. - Since this leaves the most options open, we recommend you do it this way; git-tf even makes it easy for you with `git tf pull --rebase`. - -The choice is yours. -For this example, we'll be rebasing: - -[source,console] ----- -$ git rebase FETCH_HEAD -First, rewinding head to replay your work on top of it... -Applying: update readme -Applying: update code -$ git log --oneline --graph --decorate --all -* 5a0e25e (HEAD, master) update code -* 6eb3eb5 update readme -* 8ef06a8 (tag: TFS_C35320, origin_tfs/tfs) just some text -* d44b17a (tag: TFS_C35190) Goodbye -* 126aa7b (tag: TFS_C35189) -* 8f77431 (tag: TFS_C35178) FIRST -* 0745a25 (tag: TFS_C35177) Created team project folder $/tfvctest via the \ - Team Project Creation Wizard ----- - -Now we're ready to make a checkin to the TFVC server. -Git-tf gives you the choice of making a single changeset that represents all the changes since the last one (`--shallow`, which is the default) and creating a new changeset for each Git commit (`--deep`). -For this example, we'll just create one changeset: - -[source,console] ----- -$ git tf checkin -m 'Updating readme and code' -Username: domain\user -Password: -Connecting to TFS... -Checking in to $/myproject: 100%, done. -Checked commit 5a0e25e in as changeset 35348 -$ git log --oneline --graph --decorate --all -* 5a0e25e (HEAD, tag: TFS_C35348, origin_tfs/tfs, master) update code -* 6eb3eb5 update readme -* 8ef06a8 (tag: TFS_C35320) just some text -* d44b17a (tag: TFS_C35190) Goodbye -* 126aa7b (tag: TFS_C35189) -* 8f77431 (tag: TFS_C35178) FIRST -* 0745a25 (tag: TFS_C35177) Created team project folder $/tfvctest via the \ - Team Project Creation Wizard ----- - -There's a new `TFS_C35348` tag, indicating that TFVC is storing the exact same snapshot as the `5a0e25e` commit. -It's important to note that not every Git commit needs to have an exact counterpart in TFVC; the `6eb3eb5` commit, for example, doesn't exist anywhere on the server. - -That's the main workflow. -There are a couple of other considerations you'll want to keep in mind: - -* There is no branching. - Git-tf can only create Git repositories from one TFVC branch at a time. -* Collaborate using either TFVC or Git, but not both. - Different git-tf clones of the same TFVC repository may have different commit SHA-1 hashes, which will cause no end of headaches. -* If your team's workflow includes collaborating in Git and syncing periodically with TFVC, only connect to TFVC with one of the Git repositories. - -===== Workflow: `git-tfs` - -Let's walk through the same scenario using git-tfs. -Here are the new commits we've made to the `master` branch in our Git repository: - -[source,powershell] ----- -PS> git log --oneline --graph --all --decorate -* c3bd3ae (HEAD, master) update code -* d85e5a2 update readme -| * 44cd729 (tfs/featureA, featureA) Goodbye -| * d202b53 Branched from $/tfvc-test/Trunk -|/ -* c403405 (tfs/default) Hello -* b75da1a New project ----- - -Now let's see if anyone else has done work while we were hacking away: - -[source,powershell] ----- -PS> git tfs fetch -C19 = aea74a0313de0a391940c999e51c5c15c381d91d -PS> git log --all --oneline --graph --decorate -* aea74a0 (tfs/default) update documentation -| * c3bd3ae (HEAD, master) update code -| * d85e5a2 update readme -|/ -| * 44cd729 (tfs/featureA, featureA) Goodbye -| * d202b53 Branched from $/tfvc-test/Trunk -|/ -* c403405 Hello -* b75da1a New project ----- - -Yes, it turns out our coworker has added a new TFVC changeset, which shows up as the new `aea74a0` commit, and the `tfs/default` remote branch has moved. - -As with git-tf, we have two fundamental options for how to resolve this divergent history: - -. Rebase to preserve a linear history. -. Merge to preserve what actually happened. - -In this case, we're going to do a ``deep'' checkin, where every Git commit becomes a TFVC changeset, so we want to rebase. - -[source,powershell] ----- -PS> git rebase tfs/default -First, rewinding head to replay your work on top of it... -Applying: update readme -Applying: update code -PS> git log --all --oneline --graph --decorate -* 10a75ac (HEAD, master) update code -* 5cec4ab update readme -* aea74a0 (tfs/default) update documentation -| * 44cd729 (tfs/featureA, featureA) Goodbye -| * d202b53 Branched from $/tfvc-test/Trunk -|/ -* c403405 Hello -* b75da1a New project ----- - -Now we're ready to complete our contribution by checking in our code to the TFVC server. -We'll use the `rcheckin` command here to create a TFVC changeset for each Git commit in the path from HEAD to the first `tfs` remote branch found (the `checkin` command would only create one changeset, sort of like squashing Git commits). - -[source,powershell] ----- -PS> git tfs rcheckin -Working with tfs remote: default -Fetching changes from TFS to minimize possibility of late conflict... -Starting checkin of 5cec4ab4 'update readme' - add README.md -C20 = 71a5ddce274c19f8fdc322b4f165d93d89121017 -Done with 5cec4ab4b213c354341f66c80cd650ab98dcf1ed, rebasing tail onto new TFS-commit... -Rebase done successfully. -Starting checkin of b1bf0f99 'update code' - edit .git\tfs\default\workspace\ConsoleApplication1/ConsoleApplication1/Program.cs -C21 = ff04e7c35dfbe6a8f94e782bf5e0031cee8d103b -Done with b1bf0f9977b2d48bad611ed4a03d3738df05ea5d, rebasing tail onto new TFS-commit... -Rebase done successfully. -No more to rcheckin. -PS> git log --all --oneline --graph --decorate -* ff04e7c (HEAD, tfs/default, master) update code -* 71a5ddc update readme -* aea74a0 update documentation -| * 44cd729 (tfs/featureA, featureA) Goodbye -| * d202b53 Branched from $/tfvc-test/Trunk -|/ -* c403405 Hello -* b75da1a New project ----- - -Notice how after every successful checkin to the TFVC server, git-tfs is rebasing the remaining work onto what it just did. -That's because it's adding the `git-tfs-id` field to the bottom of the commit messages, which changes the SHA-1 hashes. -This is exactly as designed, and there's nothing to worry about, but you should be aware that it's happening, especially if you're sharing Git commits with others. - -TFS has many features that integrate with its version control system, such as work items, designated reviewers, gated checkins, and so on. -It can be cumbersome to work with these features using only a command-line tool, but fortunately git-tfs lets you launch a graphical checkin tool very easily: - -[source,powershell] ----- -PS> git tfs checkintool -PS> git tfs ct ----- - -It looks a bit like this: - -.The git-tfs checkin tool -image::images/git-tfs-ct.png[The git-tfs checkin tool] - -This will look familiar to TFS users, as it's the same dialog that's launched from within Visual Studio. - -Git-tfs also lets you control TFVC branches from your Git repository. -As an example, let's create one: - -[source,powershell] ----- -PS> git tfs branch $/tfvc-test/featureBee -The name of the local branch will be : featureBee -C26 = 1d54865c397608c004a2cadce7296f5edc22a7e5 -PS> git log --oneline --graph --decorate --all -* 1d54865 (tfs/featureBee) Creation branch $/myproject/featureBee -* ff04e7c (HEAD, tfs/default, master) update code -* 71a5ddc update readme -* aea74a0 update documentation -| * 44cd729 (tfs/featureA, featureA) Goodbye -| * d202b53 Branched from $/tfvc-test/Trunk -|/ -* c403405 Hello -* b75da1a New project ----- - -Creating a branch in TFVC means adding a changeset where that branch now exists, and this is projected as a Git commit. -Note also that git-tfs *created* the `tfs/featureBee` remote branch, but `HEAD` is still pointing to `master`. -If you want to work on the newly-minted branch, you'll want to base your new commits on the `1d54865` commit, perhaps by creating a topic branch from that commit. - -===== Git and TFS Summary - -Git-tf and Git-tfs are both great tools for interfacing with a TFVC server. -They allow you to use the power of Git locally, avoid constantly having to round-trip to the central TFVC server, and make your life as a developer much easier, without forcing your entire team to migrate to Git. -If you're working on Windows (which is likely if your team is using TFS), you'll probably want to use git-tfs, since its feature set is more complete, but if you're working on another platform, you'll be using git-tf, which is more limited. -As with most of the tools in this chapter, you should choose one of these version-control systems to be canonical, and use the other one in a subordinate fashion – either Git or TFVC should be the center of collaboration, but not both. diff --git a/book/09-git-and-other-scms/sections/import-tfs.asc b/book/09-git-and-other-scms/sections/import-tfs.asc deleted file mode 100644 index 68a7f4cf..00000000 --- a/book/09-git-and-other-scms/sections/import-tfs.asc +++ /dev/null @@ -1,60 +0,0 @@ -[[_git_tfs]] -==== TFS - -(((TFS)))(((Importing, from TFS))) -If your team is converting their source control from TFVC to Git, you'll want the highest-fidelity conversion you can get. -This means that, while we covered both git-tfs and git-tf for the interop section, we'll only be covering git-tfs for this part, because git-tfs supports branches, and this is prohibitively difficult using git-tf. - -[NOTE] -==== -This is a one-way conversion. -The resulting Git repository won't be able to connect with the original TFVC project. -==== - -The first thing to do is map usernames. -TFVC is fairly liberal with what goes into the author field for changesets, but Git wants a human-readable name and email address. -You can get this information from the `tf` command-line client, like so: - -[source,powershell] ----- -PS> tf history $/myproject -recursive > AUTHORS_TMP ----- - -This grabs all of the changesets in the history of the project and put it in the AUTHORS_TMP file that we will process to extract the data of the 'User' column (the 2nd one). -Open the file and find at which characters start and end the column and replace, in the following command-line, the parameters `11-20` of the `cut` command with the ones found: - -[source,powershell] ----- -PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | sort | uniq > AUTHORS ----- - -The `cut` command keeps only the characters between 11 and 20 from each line. -The `tail` command skips the first two lines, which are field headers and ASCII-art underlines. -The result of all of this is piped to `sort` and `uniq` to eliminate duplicates, and saved to a file named `AUTHORS`. -The next step is manual; in order for git-tfs to make effective use of this file, each line must be in this format: - -[source,text] ----- -DOMAIN\username = User Name ----- - -The portion on the left is the ``User'' field from TFVC, and the portion on the right side of the equals sign is the user name that will be used for Git commits. - -Once you have this file, the next thing to do is make a full clone of the TFVC project you're interested in: - -[source,powershell] ----- -PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git ----- - -Next you'll want to clean the `git-tfs-id` sections from the bottom of the commit messages. -The following command will do that: - -[source,powershell] ----- -PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' '--' --all ----- - -That uses the `sed` command from the Git-bash environment to replace any line starting with ``git-tfs-id:'' with emptiness, which Git will then ignore. - -Once that's all done, you're ready to add a new remote, push all your branches up, and have your team start working from Git. From 68618b94ee0dbf7ff9eb79a94084b823c389e8e1 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 10:46:37 +0200 Subject: [PATCH 069/549] Remove references to TF/TFS content --- C-git-commands.asc | 2 +- ch09-git-and-other-systems.asc | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index fc6c8d5e..65077c19 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -568,7 +568,7 @@ The `git filter-branch` command is used to rewrite loads of commits according to In <> we explain the command and explore several different options such as `--commit-filter`, `--subdirectory-filter` and `--tree-filter`. -In <> and <> we use it to fix up imported external repositories. +In <> we use it to fix up imported external repositories. === Plumbing Commands diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index 43b0b359..7c4c9114 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -24,8 +24,6 @@ include::book/09-git-and-other-scms/sections/client-bzr.asc[] include::book/09-git-and-other-scms/sections/client-p4.asc[] -include::book/09-git-and-other-scms/sections/client-tfs.asc[] - [[_migrating]] === Migrating to Git @@ -42,8 +40,6 @@ include::book/09-git-and-other-scms/sections/import-bzr.asc[] include::book/09-git-and-other-scms/sections/import-p4.asc[] -include::book/09-git-and-other-scms/sections/import-tfs.asc[] - include::book/09-git-and-other-scms/sections/import-custom.asc[] === Summary From 235af48f1546137f2f7f03ca9923f435fef1b14c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 10:47:15 +0200 Subject: [PATCH 070/549] Manual edit: remove client-tfs + import-tfs --- status.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/status.json b/status.json index fc15757a..61a6f221 100644 --- a/status.json +++ b/status.json @@ -88,12 +88,10 @@ "sections/client-hg.asc": 0, "sections/client-p4.asc": 0, "sections/client-svn.asc": 0, - "sections/client-tfs.asc": 0, "sections/import-custom.asc": 0, "sections/import-hg.asc": 0, "sections/import-p4.asc": 0, - "sections/import-svn.asc": 0, - "sections/import-tfs.asc": 0 + "sections/import-svn.asc": 0 }, "10-git-internals": { "1-git-internals.asc": 0, From c94a2402195e709672b29990fc9d1473d2ca5a5c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 12:12:38 +0200 Subject: [PATCH 071/549] Rewrite rebase vs merge analogy Closes #351 --- book/03-git-branching/sections/rebasing.asc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index 6e47214b..ad10506a 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -228,8 +228,10 @@ So what if there was a messy series of merge commits? That's how it happened, and the repository should preserve that for posterity. The opposing point of view is that the commit history is the *story of how your project was made.* -You wouldn't publish the first draft of a book, and the manual for how to maintain your software deserves careful editing. -This is the camp that uses tools like `rebase` and `filter-branch` to tell the story in the way that's best for future readers. +You wouldn't publish the first draft of a book, so why show your messy work? +Remember, you are likely to need this history yourself, when fixing a bug, or figuring out why you made a particular change. +People in this camp clean up their commit(s) and commit messages, before the work is merged/rebased into the mainline branch. +They use tools like `rebase` and `filter-branch`, to tell the story in the way that's best for future readers. Now, to the question of whether merging or rebasing is better: hopefully you'll see that it's not that simple. Git is a powerful tool, and allows you to do many things to and with your history, but every team and every project is different. From ce1a0365d4601b273eab2c0f8aac01632f0776f0 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 12:40:54 +0200 Subject: [PATCH 072/549] Change /etc/gitconfig -> [path]/etc/gitconfig Closes #506 --- book/01-introduction/sections/first-time-setup.asc | 8 ++++---- book/08-customizing-git/sections/config.asc | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 9e8c27c2..a91688c2 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -8,7 +8,7 @@ You can also change them at any time by running through the commands again. Git comes with a tool called `git config` that lets you get and set configuration variables that control all aspects of how Git looks and operates.(((git commands, config))) These variables can be stored in three different places: -1. `/etc/gitconfig` file: Contains values applied to every user on the system and all their repositories. +1. `[path]/etc/gitconfig` file: Contains values applied to every user on the system and all their repositories. If you pass the option `--system` to `git config`, it reads and writes from this file specifically. Because this is a system configuration file, you would need administrative or superuser privilege to make changes to it. 2. `~/.gitconfig` or `~/.config/git/config` file: Values specific personally to you, the user. @@ -17,10 +17,10 @@ These variables can be stored in three different places: You can force Git to read from and write to this file with the `--local` option, but that is in fact the default. Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly. -Each level overrides values in the previous level, so values in `.git/config` trump those in `/etc/gitconfig`. +Each level overrides values in the previous level, so values in `.git/config` trump those in `[path]/etc/gitconfig`. On Windows systems, Git looks for the `.gitconfig` file in the `$HOME` directory (`C:\Users\$USER` for most people). -It also still looks for `/etc/gitconfig`, although it's relative to the MSys root, which is wherever you decide to install Git on your Windows system when you run the installer. +It also still looks for `[path]/etc/gitconfig`, although it's relative to the MSys root, which is wherever you decide to install Git on your Windows system when you run the installer. If you are using version 2.x or later of Git for Windows, there is also a system-level config file at `C:\Documents and Settings\All Users\Application Data\Git\config` on Windows XP, and in `C:\ProgramData\Git\config` on Windows Vista and newer. This config file can only be changed by `git config -f ` as an admin. @@ -100,7 +100,7 @@ color.diff=auto ... ---- -You may see keys more than once, because Git reads the same key from different files (`/etc/gitconfig` and `~/.gitconfig`, for example). +You may see keys more than once, because Git reads the same key from different files (`[path]/etc/gitconfig` and `~/.gitconfig`, for example). In this case, Git uses the last value for each unique key it sees. You can also check what Git thinks a specific key's value is by typing `git config `:(((git commands, config))) diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 85ffccdf..207c69da 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -14,7 +14,7 @@ $ git config --global user.email johndoe@example.com Now you'll learn a few of the more interesting options that you can set in this manner to customize your Git usage. First, a quick review: Git uses a series of configuration files to determine non-default behavior that you may want. -The first place Git looks for these values is in the system-wide `/etc/gitconfig` file, which contains settings that are applied to every user on the system and all of their repositories. +The first place Git looks for these values is in the system-wide `[path]/etc/gitconfig` file, which contains settings that are applied to every user on the system and all of their repositories. If you pass the option `--system` to `git config`, it reads and writes from this file specifically. The next place Git looks is the `~/.gitconfig` (or `~/.config/git/config`) file, which is specific to each user. @@ -24,7 +24,7 @@ Finally, Git looks for configuration values in the configuration file in the Git These values are specific to that single repository, and represent passing the `--local` option to `git config`. If you don't specify which level you want to work with, this is the default. -Each of these ``levels'' (system, global, local) overwrites values in the previous level, so values in `.git/config` trump those in `/etc/gitconfig`, for instance. +Each of these ``levels'' (system, global, local) overwrites values in the previous level, so values in `.git/config` trump those in `[path]/etc/gitconfig`, for instance. [NOTE] ==== From 1b63136780a4bb90ac54128bc74c45b0cccdaf44 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 13:19:49 +0200 Subject: [PATCH 073/549] Rewrite summary for contributing to a project Closes #692 --- book/05-distributed-git/sections/contributing.asc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 9ae2740e..5b4dff71 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -787,6 +787,11 @@ Result: OK ==== Summary -This section has covered a number of common workflows for dealing with several very different types of Git projects you're likely to encounter, and introduced a couple of new tools to help you manage this process. +We covered multiple workflows, and talked about the differences between working as part of a small team on closed-source projects vs contributing to a big public project. +You know to check for white-space errors before committing, and can write a great commit message. +You learned how to format patches, and e-mail them to a developer mailing list. +Dealing with merges was also covered in the context of the different workflows. +You are now well prepared to collaborate on any project. + Next, you'll see how to work the other side of the coin: maintaining a Git project. You'll learn how to be a benevolent dictator or integration manager. From 2929e7cc5f472c45c0428bb88a60e06c962e38ea Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 14:40:17 +0200 Subject: [PATCH 074/549] Create section: drop commit with git rebase -i Fixes #824 --- .../sections/rewriting-history.asc | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index c0403ce6..58456535 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -299,6 +299,34 @@ This changes the SHA-1s of the three most recent commits in your list, so make s Notice that the last commit (`f7f3f6d`) in the list is unchanged. Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. +==== Deleting a commit + +If you want to get rid of a commit, you can delete it using the `rebase -i` script. +In the list of commits, put the word ``drop'' before the commit you want to delete: + +[source,console] +---- +pick 461cb2a This commit is OK +drop 5aecc10 This commit is broken +---- + +[CAUTION] +==== +Do not delete/drop a commit that other commits depend on! +It's a bad idea to drop the first commit in the `rebase -i` script list. +The following commits depend on the first commit being present, as the root of all changes that follow. +==== + +Avoid doing this: +[source,console] +---- +drop 5aecc10 This commit is broken +pick c6be4c9 This commit is OK but depends on changes made in 5aecc10 +---- + +Git will complain about the broken state, and ask you to resolve the conflicts manually. +You can also just back out of the rebase by using `git rebase --abort`. + [NOTE] ==== Drew DeVault made a practical hands-on guide with exercises to learn how to use `git rebase`. From ce5fa2dba139e6d63defb24652679c75810feedf Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 9 Aug 2020 15:33:16 +0200 Subject: [PATCH 075/549] Remove git-tfs checkin tool image --- images/git-tfs-ct.png | Bin 25154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/git-tfs-ct.png diff --git a/images/git-tfs-ct.png b/images/git-tfs-ct.png deleted file mode 100644 index d081f27231f9fff7284376b9229a53c037d72b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25154 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 From 30d7ae410fb7d6b870de9bfbe9aed435443e6d5a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 11:58:02 +0200 Subject: [PATCH 076/549] Create pull request template --- .github/pull_request_template.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..602efe95 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ + + + + + +- [ ] I provide my work under the [project license](https://github.com/progit/progit2/blob/master/LICENSE.asc). +- [ ] I grant such license of my work as is required for the purposes of future print editions to [Ben Straub](https://github.com/ben) and [Scott Chacon](https://github.com/schacon). + +## Changes + +- + +## Context + From 058dc0072ba6d6d34f55eb6a8fd3e25061dd28c4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 12:28:05 +0200 Subject: [PATCH 077/549] Edit Tim Pope's commit guidelines for clarity - Clarify that it's the end user that will get confused with rebasing when the body and summary of the commit message are mushed together. - Edit the line that links to the original Tim Pope blog post, stating that we adapted it. We're no longer fully quoting him. Fixes #696 --- book/05-distributed-git/sections/contributing.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 9ae2740e..e8fd042f 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -60,7 +60,7 @@ Getting in the habit of creating quality commit messages makes using and collabo As a general rule, your messages should start with a single line that's no more than about 50 characters and that describes the changeset concisely, followed by a blank line, followed by a more detailed explanation. The Git project requires that the more detailed explanation include your motivation for the change and contrast its implementation with previous behavior -- this is a good guideline to follow. Write your commit message in the imperative: "Fix bug" and not "Fixed bug" or "Fixes bug." -Here is a https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[template originally written by Tim Pope]: +Here is a https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[template originally written by Tim Pope], and lightly adapted by us: [source,text] ---- @@ -70,7 +70,7 @@ More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. In some contexts, the first line is treated as the subject of an email and the rest of the text as the body. The blank line separating the summary from the body is critical (unless you omit -the body entirely); tools like rebase can get confused if you run the +the body entirely); tools like rebase will confuse you if you run the two together. Write your commit message in the imperative: "Fix bug" and not "Fixed bug" From 3680ec78658a80690f2750ef50b5ec5188de8ffa Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 8 Aug 2020 16:00:49 +0200 Subject: [PATCH 078/549] Create section: branch renaming --- .../sections/branch-management.asc | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index a1078974..6554b83f 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -73,3 +73,42 @@ $ git branch --no-merged master featureB ---- ==== + +==== Changing a branch name + +You can change a branch name with the `git branch -m` command. +If you want to collaborate with others, on the newly changed branch, you'll need to push it. + +[source,console] +---- +$ git branch -m bad-branch-name corrected-branch-name +$ git push -u origin corrected-branch-name +---- + +===== Changing the master branch name + +[WARNING] +==== +Changing the name of a branch like master/main/mainline/default will break the integrations, services, helper utilities and build/release scripts that your repository uses. +Read the entire section before making any changes. +Do not attempt this move without first consulting with your co-workers. +Check beforehand where the old branch name is used in your project by doing a thorough search. +==== + +Changing the name from _master_ to _main_ can be done with the `git branch -m` command. +After changing the name, you'll need to push the renamed branch so that others can see it too. +Other users with a clone/fork of your repository will need to change their default branch as well. + +[source,console] +---- +$ git branch -m master main +$ git push -u origin main +---- + +Things to update after pushing the new default branch: +* Project dependency update helper configuration files. +* Test runner configuration files. +* Build scripts. +* Release scripts. +* Repository configuration settings (like the default branch that is targeted for pull-requests, branch-protection measures, etc). +* References to the old branch in documentation. From c6e58ba34b9ef38cf1a9e82d8bcb0f4c1c3fe643 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 08:29:04 +0200 Subject: [PATCH 079/549] Apply suggestions from code review - Remove unnecessary comma - Explain what happens what the result is after changing your branch name and pushing the changed branch to the remote Co-authored-by: Ben Straub --- book/03-git-branching/sections/branch-management.asc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 6554b83f..d018e180 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -77,7 +77,7 @@ $ git branch --no-merged master ==== Changing a branch name You can change a branch name with the `git branch -m` command. -If you want to collaborate with others, on the newly changed branch, you'll need to push it. +If you want to collaborate with others on the newly changed branch, you'll need to push it. [source,console] ---- @@ -105,7 +105,8 @@ $ git branch -m master main $ git push -u origin main ---- -Things to update after pushing the new default branch: +That changes the branch name in your repo, and makes the new name available in the remote. +Now you have a few more tasks in front of you to complete the transition: * Project dependency update helper configuration files. * Test runner configuration files. * Build scripts. From 9af27d49a0c241a3ac03582af037998af9c9d681 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:15:59 +0200 Subject: [PATCH 080/549] Expand basic branch renaming section --- .../sections/branch-management.asc | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index d018e180..93759f87 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -76,13 +76,52 @@ $ git branch --no-merged master ==== Changing a branch name -You can change a branch name with the `git branch -m` command. -If you want to collaborate with others on the newly changed branch, you'll need to push it. +Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history? +You also want to change the branch name on the remote (GitHub, GitLab, other server). +How do you do this? + +Rename the branch locally with the `git branch --move` command: + +[source, console] +---- +$ git branch --move bad-branch-name corrected-branch-name +---- + +This replaces your bad-branch-name with corrected-branch-name, but this change is only local for now. +To let others see the corrected branch on the remote, push it: + +[source,console] +---- +$ git push --set-upstream origin corrected-branch-name +---- + +Now we'll take a brief look at where we are now: + +[source, console] +---- +$ git branch --all +* corrected-branch-name + main + remotes/origin/bad-branch-name + remotes/origin/corrected-branch-name + remotes/origin/main +---- + +Notice that you're on the branch corrected-branch-name. +The corrected branch is available on the remote. +However the bad branch is also still present on the remote. +You can delete the bad branch from the remote: [source,console] ---- -$ git branch -m bad-branch-name corrected-branch-name -$ git push -u origin corrected-branch-name +$ git push origin --delete bad-branch-name +---- + +Now the bad branch name is fully replaced with the corrected branch name. + +[CAUTION] +---- +Do not delete branches that are still in use by other collaborators, or that are used in a pull request. ---- ===== Changing the master branch name From c5377f41877047854657be7121d25187c1c4a79b Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:16:37 +0200 Subject: [PATCH 081/549] Expand renaming master branch section --- .../sections/branch-management.asc | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 93759f87..8fffaff5 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -134,17 +134,39 @@ Do not attempt this move without first consulting with your co-workers. Check beforehand where the old branch name is used in your project by doing a thorough search. ==== -Changing the name from _master_ to _main_ can be done with the `git branch -m` command. -After changing the name, you'll need to push the renamed branch so that others can see it too. -Other users with a clone/fork of your repository will need to change their default branch as well. +Rename your local _master_ branch into _main_ with the following command [source,console] ---- -$ git branch -m master main -$ git push -u origin main +$ git branch --move master main ---- -That changes the branch name in your repo, and makes the new name available in the remote. +There's no _master_ branch locally anymore, because it's renamed to the _main_ branch. + +To let others see the new _main_ branch, you need to push it to the remote. +This makes the renamed branch available on the remote. + +[source,console] +---- +$ git push --set-upstream origin main +---- + +Now we end up with the following state of the repository: + +[source,console] +---- +git branch --all +* main + remotes/origin/HEAD -> origin/master + remotes/origin/main + remotes/origin/master +---- + +Your local _master_ branch is replace with the _main_ branch. +Your _main_ branch is also available on the remote. +The remote still has a _master_ branch. +Other collaborators will continue to use the _master_ branch until you make some further changes. + Now you have a few more tasks in front of you to complete the transition: * Project dependency update helper configuration files. * Test runner configuration files. From 557fbf11c0d675165ba60168e443f03a9df9e931 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:23:32 +0200 Subject: [PATCH 082/549] Move caution to top of section - Warn about changing the mainline branch. --- book/03-git-branching/sections/branch-management.asc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 8fffaff5..f7398d0a 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -76,6 +76,12 @@ $ git branch --no-merged master ==== Changing a branch name +[CAUTION] +---- +Do not rename branches that are still in use by other collaborators. +Do not rename a branch like master/main/mainline without having read the section "Changing the master branch name". +---- + Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history? You also want to change the branch name on the remote (GitHub, GitLab, other server). How do you do this? @@ -119,11 +125,6 @@ $ git push origin --delete bad-branch-name Now the bad branch name is fully replaced with the corrected branch name. -[CAUTION] ----- -Do not delete branches that are still in use by other collaborators, or that are used in a pull request. ----- - ===== Changing the master branch name [WARNING] From ae00df22ffd1429f84cb753c66f7f076b6a0e084 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:24:36 +0200 Subject: [PATCH 083/549] Use . instead of ? --- book/03-git-branching/sections/branch-management.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index f7398d0a..fdd7f44f 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -82,7 +82,7 @@ Do not rename branches that are still in use by other collaborators. Do not rename a branch like master/main/mainline without having read the section "Changing the master branch name". ---- -Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history? +Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history. You also want to change the branch name on the remote (GitHub, GitLab, other server). How do you do this? From 6a6fb43294ffb90641d56197535be9c54dc07b09 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:39:12 +0200 Subject: [PATCH 084/549] Refine text further --- book/03-git-branching/sections/branch-management.asc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index fdd7f44f..44e39dc7 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -152,7 +152,7 @@ This makes the renamed branch available on the remote. $ git push --set-upstream origin main ---- -Now we end up with the following state of the repository: +Now we end up with the following state:: [source,console] ---- @@ -163,10 +163,10 @@ git branch --all remotes/origin/master ---- -Your local _master_ branch is replace with the _main_ branch. -Your _main_ branch is also available on the remote. -The remote still has a _master_ branch. -Other collaborators will continue to use the _master_ branch until you make some further changes. +Your local _master_ branch is gone, as it's replaced with the _main_ branch. +The _main_ branch is also available on the remote. +But the remote still has a _master_ branch. +Other collaborators will continue to use the _master_ branch as the base of their work, until you make some further changes. Now you have a few more tasks in front of you to complete the transition: * Project dependency update helper configuration files. From a4dee159b0efb1389fb8aaf5272f6dbb14db9c06 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 14:40:13 +0200 Subject: [PATCH 085/549] Expand master branch change section: - Add item to list - Explain how to remove the master branch --- book/03-git-branching/sections/branch-management.asc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 44e39dc7..6a5c9c56 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -175,3 +175,10 @@ Now you have a few more tasks in front of you to complete the transition: * Release scripts. * Repository configuration settings (like the default branch that is targeted for pull-requests, branch-protection measures, etc). * References to the old branch in documentation. +* Close/merge pull requests that target the old branch + +After you've done all these tasks, and are certain the main branch performs just as the _master_ branch, you can delete the _master_ branch: +[source, console] +---- +$ git push origin --delete master +---- From ac555056c61d9c64c7a69c4000ddaf8d649980dd Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 10 Aug 2020 15:08:28 +0200 Subject: [PATCH 086/549] Remove double : --- book/03-git-branching/sections/branch-management.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 6a5c9c56..7f33ee78 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -152,7 +152,7 @@ This makes the renamed branch available on the remote. $ git push --set-upstream origin main ---- -Now we end up with the following state:: +Now we end up with the following state: [source,console] ---- From f00c42e8d18d35282ffe8d6403610700f34c1eb7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 08:01:20 +0200 Subject: [PATCH 087/549] Rewrite into something nicer Co-authored-by: Ben Straub --- book/03-git-branching/sections/rebasing.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index ad10506a..8856f7d0 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -229,12 +229,12 @@ That's how it happened, and the repository should preserve that for posterity. The opposing point of view is that the commit history is the *story of how your project was made.* You wouldn't publish the first draft of a book, so why show your messy work? -Remember, you are likely to need this history yourself, when fixing a bug, or figuring out why you made a particular change. -People in this camp clean up their commit(s) and commit messages, before the work is merged/rebased into the mainline branch. +When you're working on a project, you may need a record of all your missteps and dead-end paths, but when it's time to show your work to the world, you may want to tell a more coherent story of how to get from A to B. +People in this camp use tools like rebase and filter-branch to rewrite their commits before they're merged into the mainline branch. They use tools like `rebase` and `filter-branch`, to tell the story in the way that's best for future readers. Now, to the question of whether merging or rebasing is better: hopefully you'll see that it's not that simple. Git is a powerful tool, and allows you to do many things to and with your history, but every team and every project is different. Now that you know how both of these things work, it's up to you to decide which one is best for your particular situation. -You can get the best of both worlds: rebase local changes before pushing to clean up your work, but never rebase anything that you've pushed somewhere. \ No newline at end of file +You can get the best of both worlds: rebase local changes before pushing to clean up your work, but never rebase anything that you've pushed somewhere. From 9c6127066ddd1f2289600f11d53860158d017c75 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 08:03:28 +0200 Subject: [PATCH 088/549] Improve start of sentence Co-authored-by: Ben Straub --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 5b4dff71..c42ab3ff 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -787,7 +787,7 @@ Result: OK ==== Summary -We covered multiple workflows, and talked about the differences between working as part of a small team on closed-source projects vs contributing to a big public project. +In this section, we covered multiple workflows, and talked about the differences between working as part of a small team on closed-source projects vs contributing to a big public project. You know to check for white-space errors before committing, and can write a great commit message. You learned how to format patches, and e-mail them to a developer mailing list. Dealing with merges was also covered in the context of the different workflows. From 3fa7295af6685f729e1f72ed417e3765ca9a2fd4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 08:37:14 +0200 Subject: [PATCH 089/549] Add second method to delete a commit Co-authored-by: Ben Straub --- book/07-git-tools/sections/rewriting-history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 58456535..b54b011c 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -302,7 +302,7 @@ Despite this commit being shown in the script, because it was marked as ``pick'' ==== Deleting a commit If you want to get rid of a commit, you can delete it using the `rebase -i` script. -In the list of commits, put the word ``drop'' before the commit you want to delete: +In the list of commits, put the word ``drop'' before the commit you want to delete (or just delete that line from the rebase script): [source,console] ---- From 1ab5006e53bce4c4ba561e9ad01ae9e4b4253544 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 08:43:16 +0200 Subject: [PATCH 090/549] Rewrite of proposed section by Ben Co-authored-by: Ben Straub --- .../sections/rewriting-history.asc | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index b54b011c..12cedbf9 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -310,22 +310,15 @@ pick 461cb2a This commit is OK drop 5aecc10 This commit is broken ---- -[CAUTION] -==== -Do not delete/drop a commit that other commits depend on! -It's a bad idea to drop the first commit in the `rebase -i` script list. -The following commits depend on the first commit being present, as the root of all changes that follow. -==== +Because of the way Git builds commit objects, deleting or altering a commit will cause the rewriting of all the commits that follow it. +The further back in your repo's history you go, the more commits will need to be recreated. +This can cause lots of merge conflicts if you have many commits later in the sequence that depend on the one you just deleted. -Avoid doing this: -[source,console] ----- -drop 5aecc10 This commit is broken -pick c6be4c9 This commit is OK but depends on changes made in 5aecc10 ----- +If you get partway through a rebase like this and decide it's not a good idea, you can always stop. +Type `git rebase --abort`, and your repo will be returned to the state it was in before you started the rebase. -Git will complain about the broken state, and ask you to resolve the conflicts manually. -You can also just back out of the rebase by using `git rebase --abort`. +If you finish a rebase and decide it's not what you want, you can use `git reflog` to recover an earlier version of your branch. +See <> for more information on the `reflog` command. [NOTE] ==== From 478009bd13352cb8415909fd97ca26fe3cc3f9ee Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 08:46:02 +0200 Subject: [PATCH 091/549] Improve the text flow Co-authored-by: Ben Straub --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index e8fd042f..7d443532 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -60,7 +60,7 @@ Getting in the habit of creating quality commit messages makes using and collabo As a general rule, your messages should start with a single line that's no more than about 50 characters and that describes the changeset concisely, followed by a blank line, followed by a more detailed explanation. The Git project requires that the more detailed explanation include your motivation for the change and contrast its implementation with previous behavior -- this is a good guideline to follow. Write your commit message in the imperative: "Fix bug" and not "Fixed bug" or "Fixes bug." -Here is a https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[template originally written by Tim Pope], and lightly adapted by us: +Here is a template you can follow, which we've lightly adapted from one https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[originally written by Tim Pope]: [source,text] ---- From 2d3e7bcc70a482f05e8f8aad145bf7b54f6346fb Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 09:02:45 +0200 Subject: [PATCH 092/549] Small flow improvement Co-authored-by: Ben Straub --- book/03-git-branching/sections/branch-management.asc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 7f33ee78..454cb1e2 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -130,9 +130,8 @@ Now the bad branch name is fully replaced with the corrected branch name. [WARNING] ==== Changing the name of a branch like master/main/mainline/default will break the integrations, services, helper utilities and build/release scripts that your repository uses. -Read the entire section before making any changes. -Do not attempt this move without first consulting with your co-workers. -Check beforehand where the old branch name is used in your project by doing a thorough search. +Before you do this, make sure you consult with your collaborators. +Also make sure you do a thorough search through your repo and update any references to the old branch name in your code or scripts. ==== Rename your local _master_ branch into _main_ with the following command From 4d067c0c1050aece73c34ff54aedba7712a21640 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 09:03:23 +0200 Subject: [PATCH 093/549] Improve text of bullet items Co-authored-by: Ben Straub --- .../03-git-branching/sections/branch-management.asc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 454cb1e2..a15e010d 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -168,13 +168,12 @@ But the remote still has a _master_ branch. Other collaborators will continue to use the _master_ branch as the base of their work, until you make some further changes. Now you have a few more tasks in front of you to complete the transition: -* Project dependency update helper configuration files. -* Test runner configuration files. -* Build scripts. -* Release scripts. -* Repository configuration settings (like the default branch that is targeted for pull-requests, branch-protection measures, etc). -* References to the old branch in documentation. -* Close/merge pull requests that target the old branch +* Any projects that depend on this one will need to update their code and/or configuration. +* Update any test-runner configuration files. +* Adjust build and release scripts. +* Redirect settings on your repo host for things like thee repo's default branch, merge rules, and other things that match branch names. +* Update references to the old branch in documentation. +* Close or merge any pull requests that target the old branch. After you've done all these tasks, and are certain the main branch performs just as the _master_ branch, you can delete the _master_ branch: [source, console] From 82d22c4629eea90e3ba564cbefabd6d2463eb2dd Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 16 Aug 2020 22:53:56 +0200 Subject: [PATCH 094/549] Add tip section with link to git-send-email.io --- book/05-distributed-git/sections/contributing.asc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 24147546..daeb278c 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -785,6 +785,11 @@ References: Result: OK ---- +[TIP] +==== +For help on confuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to [git-send-email.io](https://git-send-email.io/). +==== + ==== Summary In this section, we covered multiple workflows, and talked about the differences between working as part of a small team on closed-source projects vs contributing to a big public project. From 177ef599142b541467c7e3a769ab7f3b1ae6c69b Mon Sep 17 00:00:00 2001 From: Petr Kajzar Date: Mon, 17 Aug 2020 13:54:09 +0200 Subject: [PATCH 095/549] Fix unordered list to render properly An unordered list without a leading blank line renders only as an inline text. Adding a new blank line is enough to make it render properly as an unordered list, as intended. --- book/03-git-branching/sections/branch-management.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index a15e010d..d97e537c 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -168,6 +168,7 @@ But the remote still has a _master_ branch. Other collaborators will continue to use the _master_ branch as the base of their work, until you make some further changes. Now you have a few more tasks in front of you to complete the transition: + * Any projects that depend on this one will need to update their code and/or configuration. * Update any test-runner configuration files. * Adjust build and release scripts. From 3dae5dbde8beed8b057acb9e72b170fba6f7d8ec Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 21 Aug 2020 10:39:34 +0200 Subject: [PATCH 096/549] Update Git's detached HEAD help message --- book/02-git-basics/sections/tagging.asc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index 30c32393..92196f55 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -263,16 +263,22 @@ If you want to view the versions of files a tag is pointing to, you can do a `gi [source,console] ---- $ git checkout v2.0.0 -Note: checking out 'v2.0.0'. +Note: switching to 'v2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may -do so (now or later) by using -b with the checkout command again. Example: +do so (now or later) by using -c with the switch command. Example: - git checkout -b + git switch -c + +Or undo this operation with: + + git switch - + +Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final From 9067b80bca76a758c2da4a79e072777ff35e386c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 21 Aug 2020 19:44:16 +0200 Subject: [PATCH 097/549] Fix spelling --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index daeb278c..7eec6edd 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -787,7 +787,7 @@ Result: OK [TIP] ==== -For help on confuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to [git-send-email.io](https://git-send-email.io/). +For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to [git-send-email.io](https://git-send-email.io/). ==== ==== Summary From d44051d44de2c0d0a07fe72e2dc728c16f78774b Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 25 Aug 2020 20:39:44 +0200 Subject: [PATCH 098/549] Drop kindlegen dependency, drop .mobi build --- Gemfile | 1 - Rakefile | 10 +++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 165f6d01..de8b738a 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,3 @@ gem 'coderay' gem 'pygments.rb' gem 'thread_safe' gem 'epubcheck' -gem 'kindlegen' diff --git a/Rakefile b/Rakefile index e3a7442a..0aff12e4 100644 --- a/Rakefile +++ b/Rakefile @@ -20,9 +20,13 @@ namespace :book do `bundle exec asciidoctor-epub3 #{params} progit.asc` puts " -- Epub output at progit.epub" - puts "Converting to Mobi (kf8)..." - `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` - puts " -- Mobi output at progit.mobi" + # Commented out the .mobi file creation because the kindlegen dependency is not available. + # For more information on this see: #1496. + # This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again. + + # puts "Converting to Mobi (kf8)..." + # `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` + # puts " -- Mobi output at progit.mobi" puts "Converting to PDF... (this one takes a while)" `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` From d8e779bb7fb32ef30136f7dbdaa078e07e41eae1 Mon Sep 17 00:00:00 2001 From: Susan Stevens Date: Thu, 27 Aug 2020 20:48:14 -0500 Subject: [PATCH 099/549] Fix typo --- book/03-git-branching/sections/branch-management.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index a15e010d..5fc0436b 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -171,7 +171,7 @@ Now you have a few more tasks in front of you to complete the transition: * Any projects that depend on this one will need to update their code and/or configuration. * Update any test-runner configuration files. * Adjust build and release scripts. -* Redirect settings on your repo host for things like thee repo's default branch, merge rules, and other things that match branch names. +* Redirect settings on your repo host for things like the repo's default branch, merge rules, and other things that match branch names. * Update references to the old branch in documentation. * Close or merge any pull requests that target the old branch. From 0086204ac1545a314404fde2f3519d8e98650920 Mon Sep 17 00:00:00 2001 From: Tomas Fiers Date: Fri, 28 Aug 2020 18:38:41 +0200 Subject: [PATCH 100/549] Add ID to section `What is Git?` --- book/01-introduction/sections/what-is-git.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 08de9a19..931554a6 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -1,3 +1,4 @@ +[[_what_is_git]] === What is Git? So, what is Git in a nutshell? From ba8da219f1b4ca497a4484fc7c77e1e1efc9d512 Mon Sep 17 00:00:00 2001 From: Tomas Fiers Date: Fri, 28 Aug 2020 17:44:05 +0100 Subject: [PATCH 101/549] Link to more precise page in section 3.1 --- book/03-git-branching/sections/nutshell.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index cb89acc9..6199b027 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -3,13 +3,13 @@ To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. -As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. +As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. When you make a commit, Git stores a commit object that contains a pointer to the snapshot of the content you staged. This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. To visualize this, let's assume that you have a directory containing three files, and you stage them all and commit. -Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: +Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: [source,console] ---- From d163f0693a52b3b714abd85bf6d6b6d0e7db0dea Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 12:27:03 +0200 Subject: [PATCH 102/549] Add v before number for consistency Fixes #852 --- book/02-git-basics/sections/tagging.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index 30c32393..d1b3c243 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -276,7 +276,7 @@ do so (now or later) by using -b with the checkout command again. Example: HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final -$ git checkout 2.0-beta-0.1 +$ git checkout v2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... Add atlas.json and cover image ---- From 543a4981d6d510da3f28253d7e0ba5a63f21d75a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 15:00:09 +0200 Subject: [PATCH 103/549] Retire Eclipse and Egit content --- A-git-in-other-environments.asc | 2 -- .../sections/eclipse.asc | 10 ---------- images/egit.png | Bin 92536 -> 0 bytes status.json | 1 - 4 files changed, 13 deletions(-) delete mode 100644 book/A-git-in-other-environments/sections/eclipse.asc delete mode 100644 images/egit.png diff --git a/A-git-in-other-environments.asc b/A-git-in-other-environments.asc index 19f22e4b..32d7f616 100644 --- a/A-git-in-other-environments.asc +++ b/A-git-in-other-environments.asc @@ -13,8 +13,6 @@ include::book/A-git-in-other-environments/sections/visualstudio.asc[] include::book/A-git-in-other-environments/sections/visualstudiocode.asc[] -include::book/A-git-in-other-environments/sections/eclipse.asc[] - include::book/A-git-in-other-environments/sections/jetbrainsides.asc[] include::book/A-git-in-other-environments/sections/sublimetext.asc[] diff --git a/book/A-git-in-other-environments/sections/eclipse.asc b/book/A-git-in-other-environments/sections/eclipse.asc deleted file mode 100644 index ef678170..00000000 --- a/book/A-git-in-other-environments/sections/eclipse.asc +++ /dev/null @@ -1,10 +0,0 @@ -=== Git in Eclipse - -(((Eclipse))) -Eclipse ships with a plugin called Egit, which provides a fairly-complete interface to Git operations. -It's accessed by switching to the Git Perspective (Window > Open Perspective > Other…, and select "Git"). - -.Eclipse's EGit environment -image::images/egit.png[Eclipse's EGit environment] - -EGit comes with plenty of great documentation, which you can find by going to Help > Help Contents, and choosing the "EGit Documentation" node from the contents listing. diff --git a/images/egit.png b/images/egit.png deleted file mode 100644 index 27a7011a095de16e8030e82f6c215f9af638392d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92536 zcmW(*b99|e6VHvU#=No9SWVK{wrwbX(sE}2hv-KaY=(L7$&@Pp|j)_d7c~pCC{} zL&L|%$L;Oy^UL$l(9rAa3kdZ2{{Gh1*4EY4eSLksw6u72b@llPdU$;3@9z%`4BXn< zIypHR8yi15I$l{>iHwYVeS4dnoT#X%SX*0tdU_fi9qsMyO-M*+Zf-t1JDZuA2@MS` zDK2??18r<_V zLG5E(gYyUb7xx`Q(>3iwyN{ovo0n^69~w%EwLSBhe;aO3H{PBuPdCT%nswjf1o1lB}njqoLOFquu58neNZ0t*xc8iH7uw zoK$ILyVR;dZ5`0~;d{8JPKplRyV_~&z~(x-BCuc%}7<>a%s3pCu-+?VB; z86U7W_PNmZ>8B;e!lkHbmlRzLD*qEwm2THj9bvD?y;N%wkX&jXnBO=8>d1*W97+2d z{Mo+#Q5I+_Z5-$qojOqVdA0i49%CY<3gTtvGV@Q#_@y@6m3A-KIO4KpC+0?;a2V* zMxQpypKm*f9>oJ`9^T(jFp|3VqisJEEre41)wtyRS$o1un_oh}Jh}!0nlY<-@tn{r~g41WQg)sXfnOj!t zw@N6kCdFM=CYimyN95BF9Sy8G*_YlN02346uRS$06guSjGDd>Ls>+=_S0xjVDfb;} z!2o7hk|KgCZmZ`Vo-*1)pT|Fz5rnT1_Fx8aj0tRvjR}TuzGcJ3Kpmox?;1P`T)r|bSy~6w?Bag%QP9`sA!pG}nv#sz< zk$|D3XQ=sW#O6CSzZj_+dL1*d9`8RJNCmWD(3e7V^oojfnm0n|e#1OL&#&rZUgXcm z*9UkaUveb#{}pb>0mZz+D#Rtgh#-k!QN9yG;!Emv-9wcLy1ej~9!QdTmq) z2*7^S3VEZtp?VmnN1{^Oe<=@-VAVJF#bP_^8C5ej&J+s08^&K8Jw{YV=eLv;d@_bo zQ%LtB0Rf_+V3OMdY>b4Ez<2A`#Kwf!pdeG;08@;-IH8{3Gge52adns?AYL&cLMz?N45@v~Yk+N_w*(rYBRWZJyq!fnRgpTWCrQS3UG5VOY51#5~IB7-?BmmRz=Fb?ag?0*};UaZq0<`e=V$g+~ zB@xypAGB3>Sr7^C);A62@tJ zzdfetw|*fLxIb%K`g;fGy|DAjE_ilS@YGeE`gEtpOhXIziA*0#DlVmD!(?wp-g6&a zE+L=SXF@aYT$UzOthA&eT&=GvO1mQ&uV8HG|GM?@=%YV+`l_(RU5lSnOqDZmFv`Cd zyjUIaw;HKHI$KMxB?8_1b@NZhxIqUABNurJFsMT&Og|VE3$_O)?`NDX5qc^*J=<}z zM^XRv&dZ%S&;4*^l8j!LFX**Uq;y_*W%?ze>+wV_1g9FRT#~=N~c#I zSn^D{hFB~Y$4rDMyb@`WuQ4@5Wf)j9$U8Xr;6vlDHAv%?NIBa7pr_BibtJL4fyoGq z&v@`cB{UJR60usIsvfg>ba49SMRDO$bJ|Tx<=eo)2RLJt$!^-1is;#T8n7EicR1_t z%ly@OqOal=f9z1K~_G@tRkOe&ws2h~w`3{NeS}hzVx5xtYfgm3r6W3uL42Z zRp^5oRWhZ+&4tA-rq_?ao1%Jr=FDS}7T(l0kUiX#jL%LIW56SV6JOcX*?bW*k({Ec zc>2~5TQwnp^xLd3xsWD2UrogQigjhMXpixolVn(SK1v?KLjpzzOBy3v<3mJ z5fk#D00o({lJb2ee48E$rZlW-NfPYC{bH{%NevvzlGdPA-RR&13*5Lcb$CH<6Y@8S z;~o#InuPqQM1}iTjJCR^RqBF1Fv+)R!H)1MwjP;nG${`o>mA9G3q?Z1%WDQM4Y)|T z_>q88fVus~Slx_fQYCL>9d^rf?*TzDzOKc}p{n9>d45z*R{X@gGS{$Ln6Ok3u-`gl zo3VO*H#SJL8F>3!CfpFi_98IH=k=sHhxOiq z3oPP^OrZuW^moT^c;>Vk9tP6_0`(x+)DN5iZ7{JOaMs@J-_NVL3##+_6*MtLw4N74 zPwbhfeXRY|whP7iC%u2u+~xnS7-x>BwHaY?m~u08Fhl%3KxFoQ8lKS-A6x#{Nj6yZ zWWt@C7|~BFKklb+I6~jy=xLRm?_{d^K(sOMC&}-;#^LR(SD7~3QU{$oTH{tx>FsHB zE;Ke^-D8YRx)!sQ-zy|@9Y;{wyKX%&>%<%oLuXb*HCSr$_Y!A1b^*~~?i%)E{=HCj z#n4(cO@|pGWhAP9ew;K`c_r!V{9$^~jjNWo4b{gt@v8YEF-BL%Zt2bKCmQ?J^eoO- z81KujkIHu=QphljSXN>>aJhMk1nFn`h^|;j;GS>wy5MiLjyGRW)<3&nrq2$HWUOn} zUr>;TedjR({cj%&hNPuqi94d#PxXC;Z_kosVq(FJp#!my@_KwLmx6JB6Gsd}{0s18 z!U#rbwY<^jHD^NYaSK^p;Lc}3+$3mpgSY#n2J1r{<9@Xk**|75w8dJZ6lw^3*|=#~56xF77EWk-C$xWO@zm;H5R>GtJLs~1kK)ws?Pr&W*k zW8P@np}*8KLsC!wr!}F9laS6sis=}9VM7! zS7i+@1!sVMm}}iB=QIn=uyR_sW8@^)R99QjJ8WoHiGx(`gn-q;Zr)pYRMN?oFvw&6Gr6d;MEE zwQg60lFfOB`EN^z?MK%Cg2QmnPfmGgLmv!uGS>i-bpexveUfP1I2)nA99h@%ZeQc(AZGh9Z{J?qyt=W#0(Zu> zend@7a3X)6NsMom)Uy7gY)Wx4`t@2-Li z5I~)f8wA2byWgKKKkB#`L_15jd|sEjd_3dm4@$W3BiuR!lCQuP#CFP}kvD)&fr#8? z3*0}IF_8$_)l8q>&lT*PQwfSxA`O4r>8GOOEvg`)%OnN9kr>Hk8+tu4!zA>F~QvC?8tj z)io|@yos$M*ajYXSeNq#$NXJ0ds$|$EVnT^|5Nj}I^QCDQQ8=rb#_sn;l0J{TvR&9 znCv>${NT(UojI@!oae(f_+`#+&SN+rV=PQ4Y$mU-#z1fRS9zUtR{xmyCyR?=)AXc$ zGWS8I3l_KhziE84XWv_)?~%ORbY^z>T2aKqq0n&TkgFvAS@i4hf`0T*HLy?t&v63$ z)EKp56>8<&gmw*2I{*4Yqaj|+uu@YF&3+eaK)}6R2=a(`#Dp!up_fDP550y%o<4~F zQ;g{(>&H)`SuSCe*A`uHGE~cRd}Mf8ZqbdJq>4Dcpd0^ZdtTmgF{bd$TBy&BZF;bw)&U#?GTAr=)m!Yp_Gd5uF3tCL)^KTzJ77@2efc; z^>BL@VS4)HW@lauJ^p*%6@EbLk{+tM`QoJTq{^St-ilQ~VDWd>xy?0QPwhEAJrns1SjKht#27#btsFKdrd2es%#uVr^`PyGTj9? z`H%zK5kk*v2JZ+S?y^O12F>jkaIx&%(6Ue4!Ui&RMU#y@(c=RliM3=VRPdq1$js|b@}=oH;B&RRZ^kD*xLW2)u!@~cuJd3#48h{TTydbD zsczxJEONSmoj*z9k#>6L-uT@5Z>_l{w&`rS#jkey5vEiwD#7AAuCA$6W?J$i0{m$4 zRJ<_7=`kg^t$6u}gQa(>la_NscEm6ns*03q{m4@Ai)b5{pR%HN|I%m9P#@qZ^2Cf< z2t^=Bd93F00wd9 zp=(#c#!?)Zk`=4e`fj@FM@p{#sW@(8k0AYsye?g z%C%!=G7SwdqyI!z5Na}e{fl^4vFHa1#o-3H*8QV}Bp&Joz$pMlV5DgZEDoTJS#qjp zu3wBG{_a|D6Qjp0j_-WSXO?QzV&B5Ar5~=IdCoeP4GgvTC&#~arhBCk4chiQe<#l9 zW(hm@6198=tW=L~Kb4ng7DrG+veceh=wn8=Or`z(M!!UP{iA@BatpRE+O062dIm=$ zr~58YuH>rU3cRyA{x^%FDH~oi$Yxg`pt^qiozN9+pr;PP;XbDVv7CAPo+b6H!%LHc zOFyGARkZ%})WYkCeVg8Dv5S&U?tWCd8lQOBXR+t_+RRHg)!Nuv_#)GGItWc-;dI= z-1Mc5Z5bTk6AkPaaEy?zcShNNcYJAMnL){!@$?faO0cF8`j?2AE99ld15R!Lix6!< zLqhCe@$Y;C+4Kd;`|{z3ul(b${jK&V$&qZjAxzcvC`8Wo2+t>eW3j2PXV$pqkh0nh z3SZ<|Y7HkdGn!c|)eV%%m4_h@vbfc>QXG8VpnIr?w>LdOoEtIF2LaNhrjP(RQ9eG= zxy8gVvqQ?qU5Ng*zTVK9-%$B#bV>(*erhacJ>GEKV50`g8E(hjqE~0C z#Fed)OLF8JIwxzajD_!CNoZ6;l9qaK%t8S`<>(SYEIXr^k)6SjQfYYLz1Ssr@I5ef z@7@)vegfb6xB3#`mz;){gWZ8F(@26wXejbgWJ0e0a%n{n8R9QV6-SFI%8`Wyi z`^1k?rI;V@8`a@<@uHovuvy)h!HSPBndXkDH#*D?hxn0K8Ua_kQN%eX>I&k&lK?^~ zu49pYC_vY*n5b21&Y467!zHjhi7lRlbX#aqKpAU;e+hvDXiH_ z!h3V9pZTqkE7;8sU}n-jYWasuXfufRu0|x)puEf*dyl%!B_ZmvjxCpzGavqpKU3TD*dSU-sVIb*i903O;nSAj zqtY0rp$XP&53fMCYa_#WMnfyYQB)QbeB(nupq+690tF>;@d}0hc~>O0Xs}I3LIhmW z=|Dqr3MySo3PEIW9^SEHlv>n=V@7nlcsLC<@hVsMPiIl5q3fIFCn)B6B)l0HS&%Sw z;smGDW0g3e_;_A#Hy=RJ7!`nf|F%iwQ&>$s0@*q`@_i$^>IDl%<4$s#9DSeymtl;{ z%k)*Nq*8!#gNiJkuwKLtQ}w4qnq__0V?H`j7mT}A>7BW82TC+^awGDcCA8S8Vnl3d z_vE9Uae_f~3Te`#MGqKt`#uA%-OrqZ6G=kUi9Y?_z(%H~s$tjov|8~2z48)9(u}%o zK9&yJcb-?O%hkAns0ySU%n`?c;2tMhr;jbS?;ru=dKCQFcyirm=? z?E^z1CU~9~41U~~J47y2BvV4!JMAy#FD1>4eltCm<93JSFBX^|cDg$R9|WDF&9Gf) zzP-H@Y9S%Oq4|s}=+~i6H8lxWTr1#SmXBk1$bbbaK-2}v)4C3Q!w(EVe)q2hVxU$d zkqh=<+|f9wqRt@<4-ZSI-}LwDSeq!Nr4SS1|Ml3rA3ynPE7<&tL?Gchb9}}H`8o@1 zKXoWpj+2!39s@8`IFKX-Z=*vZfnUU$2k-Aq??r&1|4T^Yq?1w2FIp}QsMRV(&t%1R z0xwT%GkZtu_4_H!%l*W%ERH+cWjDFgyG0bi&h-$bS^5j=#W& zq@^1O2PO2ZdL689WJD1y#khoEim@M5n1@pkLN?=Ikb_Q`cle!%y8+e|yzM~5d7-9n zBv0a+R&c?H&0%(qu6Wvd zz=M<1P}BTaSR2aEh0<(63y{Zr1;FXU!HPyc)c}D!lyesIG8h;b=TntBc*CDa{26M}{`TW41w4C4`h5k&@9*7%M+j-AmqMM2 ziO}{M?^d60PZ5Ye8MduAo~_gq%Z&jyBqh%6&Q_h^Sb_7|5#N&xuN6dhv)KT&T7Ofm zO@+pXvB|F_RdS0QP-%A6q}geGZ?c5-33;3f4XeWUsu_Lc>t#v<*q0O2NVX&E=M1%A zLsJSQ9;!^qOcR5uClvtQQy~nV)k)B&f4~SD<%z1C8ZZ~k*Ob}Ps)EKw@P2GN8r!n;6V?MkW4@=!nu zuVIjzxzM!ED?Czw%{@l1Sg0S)iwxy?Xl}4>{o4~JhRv9-ImyB>=)Azm;?MPf5ConL zyTbhQt7t2RY}#)`qxIq>JVb{;6*%vb0<-srrDd3(AdjPbnAb7>Q4H&8o~ilPP3^gK z=5LOXvKD+oah`893M9oO(QU3hPrbO9Q@>fJ5fX^eDte%8&ky5TJqvatuny zPQpXyPQn9f<%p_W8&+QB0abM67}o+HE_;uIF%aARU|`slMADH})a!{_y-2#msPw{> z@#4@${%fj+v`QcI&y9`My66VW+o- zfBeX>3yxJZD58N>_*yhZ=}Hy~rwe#>vUY#FBQxPIe(!9i@o91!=909RP<-SLF>5cJ zT8uS`6yeUH%-&|43#BfY+R;yOz_?d9xhR}%1|AUV`Ze(b#j@fpyZ3A1!Q+xnzC+;> z#hQf>;v)bIsi=KEAC__m)ogu4XFJ>IC-s(sUoXe=Est;@$zcI?@>G1U)i5CV44acP ztIwJkb5l zbSs9?f@J(6EkGx^GFUQPTPX62!Jnr|gJWq~(Q-O=6r%UHpP&$s%vG6;2Jt{&D|Z8^ zZx;Xgb+pw}=W*aqsULg(2(@{mAS0Usll!)ZVseCC+?Xm|YO({@XJdxfA%5)EB6+cu zS_OismCEVCL($+L8w=yonL*BL^Po}^Q%4G2lw=VRjOgrSWC3pF=B34aG&UjpLe56T zv^6v6msxNH!ALib+SCdd*oHgfJi@H91*Sl!AIq?D+qENz%J-Mc zC&SCj60opu#W}toFX}@}`eO+~Kw$Q2=}n;BAB3yU4bEOlu-am25aF#srig4#rEEo2 zoALtxrJwh$K|_~O3@PrFv1ErD4|7y7MDLwzEf6TlFR)KQ3@o`Ql=EF#zh20+Wtf9E z+WGMf2J+Ja;kUpx@fLM3WenI8^G95W%5f|2XX}4wX7pA&v5Z2-~Z1 zdEyDnZ#LI-LZ&sNdcYuO6g!4g#Q{(&<*u2lUPDkg^N-Ki9C~msG8YQq^O;Ss9IW!~ zhfaz5Uy6fZ(Zm!qX|`W&s37X*gQ{PTI;(S2K_awHHH2j)PPCBZgR<0r(iz{&03K4}^!5T!Xw!7eqC&F6tH%q*OY|MwJ2%>Cn^+4F z_RCB(({u1{S_T3>w)-b3soR-^NCF82d!LD%32GJ?ISm)xS0hXZ|el?{cZWaWe_X&%xkxF?RR0(MbUb9KUz%Q>lK^CXOSi(W(o-3$yI zZX@WG)yX{>B^Svr{j+LJstXh9R(fTmw?q_~6ay6uZ?~gxI6lY0iwG`0$WqDCbSvVP zjm8&U@=ydylBJGxPp#2+ z`Hyh+vrKPXVYFRZgf2wb=Ly)3bsD^=iwqV`;kzU`D;bL#abi41o!G8WHod%$k)aI} zcu*@M?1LphaxKvYXqN#zm~x1OOTkDWeR`_mkj*BJ+ZSW_ ziE9usHi1_XuFcdhN4;NO|0%S{dvT9T&LzMJQhe~uqTu4f>EMvx)gy>ANDJI-c*&2A zK$d?d3mVeO4lugOKAApVZaL7iGXbZm{uh)-_nPkqseRu=hlC%bm+LBwa4ZRTlJIQa z`IIn*gk&0qBcJZ_aZUa&-qTmWD5ug(t1vdM5LRFm3sq|#0Rr6`4q3_rH-Xf!qU&*s zE{G~=?11s-%tmvQV_=H{UUWOl#OhmSk<|S%|CKO->ds~m{lD$4pLvRULT)B&tE55X z106U(dlipq%Ab3ybb?MCZt$kvK=i!9u^(;I^$K23X`sz5cHrc zvRZd^O!W54E8a|MC{cT1x|G91ENl$~XTKgOq}WuVsrM&e&{g6wm)*J&SJd8X!{Cf4 zI5uMmewMa=ph2y@JxKvoXTWR$Tktow(yB!)tQ6g7=&o{+>zjye$hrkvTo1jPNKB#V z=m>bc3tU};tIej&W%J>!{?ukWM8uod{Kc(9W)7^adJ0-<77oj-M{0136;nk;Re~rJ z|AN@7j=QmfR^QM1m;rFiSl^eEF5&=V;_Ie7xtUC+%bUH{nN}VnR>ZW|iPl!L5^;-) zwwd?VuX!FGBBUutS9Qhrrfb_BNTB3v6>5DNjoTaoZ0^8Nzh8+E<#+(peR|7wvT!F3 zb$VynEUZBONXWw|EQ$mxtM!h4(9;kTg6<5x{+9n!J_js2jn&if?(FPt?@WPs!Lnk! zpy3Xjjf)0`79-YxoWUL|Majjtz=h!fGnf}4vVvaHa3o;(f@zH-I$=M=&U6+=12Qmb zdN-dov`=xt6gn=v;MnYK2;_CWor4J*=gRMPf7}lG+yZT3BgS+7vb>xKZZ$LU=+;}< zRli!#v_1@(%{bb8v2sGAP4jribo-Cd&9x6 zw;lKnWjtc&|DaI{o?R=NK;i@_@(D z*UOOz^b^GA7_bxR$y?i^A$N}77nv5ARWSZ~ z^t_Uc;#pz=Dmc-0_xTz^{wfrx8if@|OOLp}-`6TdL1l9y%0w4yYF8KA6%@m5%fFYR?i4Wti=i(PoLIut< z36N=Tma{5hMpjuAVyAYD9M`8@LImO68nK?Jl(169F!Fo6AMecWg`V3|Rb@lY%w(6P z$9BSPdFTJ#{(N%B9&4k0G-;JT*rI8#IkR|Z1y9|Z75}N`lp5X7>8w9O%|E}Pxw@|F z#sZFx-bt2~{U>Pz&OB7KZV9H}{*;dz85Y*yNz9VM$y-X|I|AOOVTYuKRD|R*Z#!7# zF9U*AGfN{w`-V>RBu{M@Z+UONa}&{RVeQ;eMdv=F+U{?K(Ja1ppWAO&1AJZdC#mAK z0=(86pVq4`dP3lKxTv(qu$hqi$qQ8BJbG^bExbm8_r}Ehxk$(1Yin3W2B1Z|9Eyqh zr$1p?NfqQl<9?^t<2vJ6bGz$^WS2FUJ^I-Kk|c0FUpy|RAlCoY;c@`R6Y)}`^@F3vikIIm!#7TCDqLE3jJa=kGZucwVl{4Ldw+vmKXglkXe zY*J`I0?i{p2!#^h-pG(}aq{o_w_YAfoZCnwK&U9>!p1VOL@Vj%N4d%6&aau?Vkm>d zp_Qjig3-!lm%^IIx%KcVtM9&=&jWd#YuMcdj#k3hdJTAbKwBH zcRTj$(-Eyjo=-#z_TeTop!M;wthN68SZqk zLcZ~Vh@2jRm? zOzcGHQduFd|8%{#VSbptX}`#lW!KN{no)XrN=)t4es+3VOV$2G`hCUzGCksL*}=2G4^E^tT@ti%oNT zKBk5}rk?5ET`$>MIyUf(zTZx2aj_VsZ@P;4;1gJMF{j`H#*+iJL(;IJ$^FGr4^8xK zUM|MgSH9iMti|ZvhF42^v38bKfAfv;zB=SoNCPM%$z;hiQM$tNbxo(^b&G7q7@Dp z3OgS1>!W@1-@aS1c{Yqo7!cqW64uQ7hDvUPuDDe{K#5e`k!^2yegL1~KX|ce{~KM|Y8uqW5w>L>5dgWO&o1s?*oGagp6P z&}PY{=Bi#f!Kr={;E|`y1GS|B|4{=;ZYqG8tu4c5O)E0bJSjo2g>aX4uEK?8kVVUQRQ`e-*h_?2Op%(-FUzn{MA-or;WaUe6-v@O&v#>mXv z(-GzNk^)Eo?#u#4nm25q@64+gk=Vq<#4Xk8ythLTS8@g-sCKGtZu)J0eFoihB{`A; z5&~)fQqon9&CU)^{95oJ?B||4cg?XAwZcc@0bw*>9c-t@Tay2n@(UbG`iW{Y&|{4) zExFh6a_^K|?8N)U`BkvYYFhiaa7wztHK)$>+9MG?Sl<)L@hL&-EuR9n72#8zbP2V%3M#KVfKPE7oqnV z|D&P4RZZtFFmRxSgM}N0_RA&QqoLKIPAekxHL+-i>YFX{5)MfRUt^0p)F$uUbSe%P zvdqL|>KT;3i4>8Xrm$`^x`lyPb%;sn72MvD3?~bME*&cCr^Xq`36vB{5-`~js;!CX zC+TMY?*HaO;RbGs{|F`2x#0KGLWRv~pIatvHi1bv~viay#zOH+)Z zPb1lQ)Q{)B5F4wBhFEpgN7Y6gCS03mAwJ5!hBTkk-g$)x8S0>uhhxnvEoG3OCbTvu zVw@s%&xU#lOO%gyHhg2OQpky-++Gu_uB%O;tF{Rx#ow!s=|30O7(~R)$3F%ca74q? zlL#j%&mz%`fd3sgI5172(OZ06uN8F(_!I}7*Wkmryyn?Ct-Ij3?rrN}a9H5@*OoQM z%ktL+JzlxXmW#dxp;K&wnrj)zXOTnMrJ&1hJ^2Jx=^h=fP~^&^tLPi}taHaSvyQIC z8Ff30uA?vw0k3oIARpsF^V;QA4sIV=8^tLzFtqvMuExr=MWH(g?HE4q_bt#y`1-AF<1L&kbnE;}DHY$FW# z$3MRRxnF(}m`2Y)DMr?p(yoDu>XUbRxFIdPz{#6c^~7f?dLL|qrdRH@AT!$wHv=iO%bWLX>k(S-JVPsZL-m8;T}uMr25 ztJbB{Xsm0_#i!G4S;w^ddtK3o&CSQy>&Qv{pwL|C*0|H-ChtnN`}JOZQ&T3VSTzq~ zLMg&kc5Sx(de`))RFbVHXaCI_$6eP>UubEg`@sc-1A&u*O&*Ry=rYfH0y_3pDhC$=H0 zb^WgNU=QVVotu4-Md~5CwtB1MB&|(gVN$0thnvH`No9pYV*wmci?ZomfA>1QZ!g@c$cz?lSMenE9am>q)_` z(X(?)_xSyHZc+RBZE6k*xvV||{?g;ZKlYc;)bz>Ay`$A%n?!H9w{Cf!pPg^#Fs$l^ zFo>kgYRi`RPAbT4)$Tm9qk?C-dwcbl+Let9zupXP3?|OE#s=}L^(}3#*j$&|+W-C< z*Q-o0EQBUGD2g^x3_Bt=!kQ`=iX|2#%X&6lz~e@jS6kuk=pn~eRsp9Om{;RNX*U|K zz;aZ9E|8_c$Tan07cI}Zq^G>?J$9|qU^*b*5@9YgmEzWqFznUqH03%gL`}Stl_JrX z5rpV5Dv+eaHclG>#z`{+p!!t2q(NIUNqU`{B}Hi_Vs|I*7Nvc=Otsy!tGe38A##ms zjN1*Sswa&~J1T$MrTzvxqb3w+6#gr8j{}>*JH$G|!anFf4*@h8jYCwzBXZANV<2K7 zcqL-F^|9knTYQ2;hYe`yGt$yH<w=`U67(SOG&_ zErSWA92gi#ArH<{HaDtg%Fdts%EU{s5aVJ_OHz1shc3$@)KP0AQ);C@G}{A$AUF zJ&mg>$0&ERad|%V{Rmeou*~j zxyzV2VYo3u=;Y&b8;v()^H3?=*vJmUxH#UNb#)f?hwJwRQ4HjfS;#T2ZnM<{`9b>6;N|1$I*2R;xKwFiT!{sZa=MS45~ zGhw=Qy@Q5jXoAT>W3%6%`)gZzJnx5^O9!KNJ!yO6Bi99*+jbq7Wi7TdOFs>3aL9p$ z|2X`>v~b`*cOy}3CKL6YR%|7=l~&wNPWnQvSchIXE#`bROIoKF1=}5Si)~8wJq$4o z0O+Vndc*>->`E%85b>(THuAJNV_*gdvhi_Wl>jdxkj*4~dFFH0g>B1UKA;9iM~ymq z44e&G7E)*i0;EC8C_wU`ZB)(jjRzuOjcZ6n z=o^+(halkETmHF;QJ?z)?$g#_(daV-jYS12cg{lXOW(j*w8n&~H!EiT(v*Z3U?Jf1 zV29X$bA$U~{~ca@;wQ#Qk^)im*N7j-J5iJwt<5$B5XM)MR1sjJTFB#4``IZ6p2m^Yi}GAAu1RMgb%jn+Q}i!@^s;!?xyabVWE&Isrl8KW<1 zcNJsCvc$v~?%qEnR z+{p3L8q8y%LWu8|GtX^fpv@hX%kIWRSjSiu(BW5EoSJNN7g`Zi3R8(r{YDFZcBJ)y zJ99_ZPhw?N_RX?xkM8_%#6=pR7)MW?GqrV=i(%7Vd&FWD@J*&p`nu`+P=GxD7TVAa zGgl`HuwPH0VbIRK=BI%7!~F1z_FRgH=a&9$?42(dv!@aKCYQ^7=3JKLV4 z#lTg#|N4lMLXO@vQ*zVLj0!xmtY$Gm?rgfW@xC?Xw+ryTqzRlXwcq`4uZ@H*J%V7b zk%Eb%$T}26Jm7^Ojm-w#4^y#AG*4~C&PEnRie)}a2JTa^Jk0E<7}9Ao2Cxasfts>D zIcSSv{$VKbirka#cz}X=7CoO*axpa+CM@dIr)5=i46#X zlDVTQ|ASTB$Gin=#$(Q3O7E1>YUi8cd6L0*UJd%n&iqSSiHjpstDwh`N8*@83%si+ zuLs+XHMG&;r6(Ro-GS}=z_CcH6KX;iB`H#69;rK?7(qH-{U_7>0aN>xhnKdG2|}+D z!HN{`lJsUC?OCckj~OaqJrB7$9W_&@#Eucg^qutTYkq`4TL5<#~QJWqv}P!7Y( z0f44t+PLySZgUYaEYyRX+T2cvlVjqFvPXUyNdXw!u~dds#`(viT9);GT$OuU!)?<_ zKQP+q%QDCyvB%rFVBi*orE*+Mq%d!0F{^0!N`1MR z`FHe!nWpbj(yjB87Fs21NsUf$qxImZGUfnXNdJFjw4PHMCsBuJUZ~~oy_qO+FW$EH zxUtCMS`jA5rWshQ)FFXHT(FJl$=zOgBC!7XEZ7yjMd>SGWV~=MAM}hNo89UgnKsP8KX|>?=`~p!x#u_dK>wZ44oUD zZZva73kd{`MewgVf`^R!X&Lg!uM*)WWZZp5*cx$`^Kx?!$8y3W=i5Akmh#`gg`^d? zLmNx)6tdXX0t_Zvo<|JCV&+JcBD*_`46{ z-pblSmW7sT!`VO55Q(LwDerph-m{(6I%PB=P-&jZ=~!SH7ZrK~0)pIk29Zz=$@i;{ zp@i!r`++YG1>Wjwg}P}Ts13JI?9%LquQ=l6>Hk*}m1w&K!J7Z9fqOdS@>@<@l~yeA zuXNhN&3_10Igva>drj*ED-)xx>AG*BFf~z44bwYi$BTS0_!)-?F?xy`+I8tGP{6H3 z;~SId%rsBDVnT+K`tjyNe>Y$?YOS%1KBZ;a$hs^EbTu+|jA;3aW(#I9M*Ds)%6_$oZUgRs6spMe z1DD6}X#RiWL+o%<$CbyY5Ip#+Gd^#oRogob>{@HYlMTAFd#ES+<=Hp`U=AagrP zsu0*L9b}Sp;;I!de#6#S;vZ}@tn<+QW_MX;w&0RU0nZACqrJ#Zbf&sXXMjMQ)?YW6 z2ZD>JbJ}dR?=>`UB&T82#AHOxTkU?JUaLj!u=G$a+ ztNF`+)r2gR{nbsFc(rF{=(*FVBKpwwfgBI=XBk5Qp2+FP4ogW0s zX#q3l_z5#NF(6Oaejz@~j$U zx%IMqkgRU>TW4=95)cxQX99#LX5$Z<5*?jb@LC-a^hSJTE?U>YB05;edPk5{$mn#- zE*2{kc9>v~Ctp>-;>G5&h~*?K5)e|h93Zsqi5Ti%Ei9Z^INj4z$BO`OoGtrcRjM`< zp;szv-DiiESCBN6?FSVd`$-K#%GL#BPfU!C3L@sdLXQVon1eyrPc40tH#L5+etY$m zvC9QVt1p+_|Lj;#tu+_g*{=T=RK{E}^o{SYuO9#Mt#@~ny7tY+bRIrYT|4qBJWQPg zgaqW70f|xJ56~H%n3#CGeHdK2dbV`p)9!OeKgF&(25rZWoxU=C?a0-{t6y;A<2$~I z@A>p#McZ-v;0<>3ncBOD26vyod&xR@s{eh!V~~K5vc-(_y;+JRSjytPxw)mKrF)AL z;L?@qQ;VM{OFUoaf4lFJpeA?W_VkUft`?bgft{e^8_@FuxHNFxUVRcYoH=`{VKAwC z|7lI(v7Wa`KuFnoMtTM^K|uV&xjFRwoTX6_xYTvxtgSE8(f@V+`}^N6JzZFK@~Hdd z*!YzK?oQD34e0+tbg8ELT913^%fHqiw~obje{s5MIJ5d32?!}$uZtCr2C+g#Z#4+Hr@;jCy; z#jd*TwYLC|v_VMOT7b|(y_0>sVO)qQkQG~zpxJEEs{KTW4M{-2lww`tK*6iPLrDYIEA` z0Nfb?gSTR;#%{EKl3RcCE?|*>kn-9Bk{U@&@*Vu)lym%cr_%;NlNC(Y^xZ1&&iuZz zw)5B)Z9ya;Bp^>a%nN{MXUUIM&XJM%Dm$St5=6YVnCe@!uwCRR7AdbYAj@}_$IU|< zWWWqq_{IpKpj>0$1;CbVKO`U|AkVZGEB-Y*og^S6AWsDd&Hv8BckKbZhWc{B6Sy z#pk);zJ2Bp^?*)Pxmr z`XS!IDqnA9B4bOQP7)9jkf#B}2Sfsr2$TXn{Da2hiJ)R(@z7I2&|dGfo#^o((97e| zSX<)8ToMoxkf&OUwcf|;AYLOqibevmMI=G;Qo2}vZLpI?3{CMO;zh3wAi)wqs*tU5 zJwe>d03^bDI|wUcX>sn+I}Be6UOcqj<7u!nMT=)~0ZYV!)bQdNTMUqpI7t%Owzh^u zO6V_RsmWeB`k;aON5A~?_~A~l6I`slwx6}4)8)ltYi)7j1%$3oVbe%?j4m(Mu$BDm6Inr2rDMmyq-?%u zl}M$(#HA)&|3EHJ#Elp6;#n*fmj!qXRs;`(#*0|-Jld9;LG%G4lk1b7ODvY~=O{MF zBne6)WwRwH#efCB91Y?Fg~tkAM^n%?e`=8S?6F)L@!EVqV(AZmQheXr8zH0+P8lYD zsT!nip>9R%42_6K4~q)ghL-NqSP`(d6%p|4+E89RT8pLgumK2XLodutL{u?i zQ#43ilGcDauwHqFKCj&Lylc4PZKy4Sf|Xl7Bm}C0BUT2C&7Uj?IOa%E zy}jI0Y4<)qwCx~o7uS97P+~QmX)FJ4% zfhF2-X)t<_qxaV%90H;hwkV~tiN(c!lNQ0UvYaOt>CMHWxY}&9eIyVZy zJDtrReb@8Wk*pD*%&?CArN6k>(&FhZ0FIT8-xiA%@jbGBNGDl4E_ksT6di%SUdWF#p%K3tlmd5t^gF)Pm z;uqU?-lstzAkqOR6sy&WVA0c+%ME0?p}?j@QLYAr$C`We%P)^cSIrL5)~OgW=n1X2 z%Le)A`sUmxu1CK-dT7yV@e-Hm&Ch&U6iS&3tN^xl&v5;mOnP z>2t$1lQsX73$EYY`Of9py9;NFE{&hRd;OZZ_3Ftx=VsrpJX-ILrgZ^Xr)3zqN%etqu-RW|)?m3X(ajJfMab#O|QC(Go zB6!-?;ebfwPdRdr&NsTOl70E9`%l;_9Y+%7>6RvQQ_*m7|HwX2KX3quHo-_Y$YEof zcMd=qndeZn@{YY$)Tj&;iUBqn^z%wVz){?P85Sy7w3dq(YWUYuVRg zq4@^~Sx5yF;~w!Ku`DKBQ&xty+=GA^TE6LWUhqIb7A*#0M~sz%x;&^Pn7gdQDnnih ztODK@qVy{;3I$ck-(C$$`Gemc{NHjIU{Fr(*x{7x%z7cLZ|{!nc0J@xNK~BSvcqh& zS_58ZR0J&GLPmK@OZo6=i^0^pJ!U|zu<2zmrZ+p$CPZIbI9;0wYa~R6VXKsi_V-** zoiM|g$y;DBN&W+yf`34-npy9Z`0EY^};Qs>0`9FZ8wc{rN zqs7R#z;;n-1^uUx21#?YTrrrTH-FN3AWyOXP#WWeF5NCI@fK6N@aq&s=U+#piO6LEdm{1z`CX8Rzg7P?Z9KyfmR4e>nTvF*!P0>argnzQUp%3 z&1^DR>|)H+{`cCe^Ln{dDVE9%LX}i#l8a%pk#okXdTyI#YBPl*7Q?F{H9-O@+uPec z3pgNkWd&gHZodOGCox*Pc7qC3zdSZlGe~u0Y1HnlsIqWegJ>z@Pv%?np2c?_zhRP1 zyR)vqA9IMDTm?BWTJ8_v76J#BY=T5`EbX_=s7x70DkRJYgNga;gWrCA0Dt-orrE3G zedl_!Y-3hT+g9CKYweh)7}Qdjl^7FFjmU&zXt1a_KGQ>JfA70}xw(wkSret_W@qNO zIL1Eh#0-|1&#KQllpKz}{i^f)HL6@~!eEJh`|Qsk2Es5`;+2x8WG15vS<93Wu`23I z7{#Iip&DN4^2Mb&w5iF`D381F+5R)%=byP!U3I66Hdb}~)Q6`|SJl5?Sr+r@VJ^6T zdCGlk;%?6mw2Pl-9K19>@b38!X2-|Q)qP6?=RaY1?RXaO6obkfRYqxxXCSFbV5zjS z%2iXPN36LGQ}&MHeycgmb-2zR(wkV~sj9TnT+XJd%5>L!`IN1r^iXPUgSN@u>Y()x zNDE+3tzujj z?&@*7uT~9LyKl5s*JSF(BEsbt7Zv63QL*?|IvP`?)bTa z`yZVeKJFgLyIxp*0bKkVuxK=TCZ>IH-d zP|;t`rVVI#zWF{R1jhXYbu(+DOvA(ZV=}Ku-g< z6U-ePh{**f@sP_TCLxaH%OAWlh&u*@Et{LU7%;YC5PZNQFkmb|3P?8M5?D|GDFOyX z5g%}JL5N60h=4#6Z7y?WqS@Ka_ny`KGg|FARc$VYkj%`US$4yl2io1$T~*y(UB7ys zs(PNMa^l4#=gbb>b((j^=}XxlC$AtG&9u#=Qr3b)Y5muQ1#F{`JCT8=aA4a8nIe6rO0(Mv!NGCHm!6m#Pcg-;o z1oL1Snn_g)djNAC_no1 z&p#&^jfuP>wVvU7xYC-?yHFBB(!RFxYdbkNGAAdNS6GwArKx3WrPX(Gp~V`D020p9 z8$;&i;sppGC5nEQ$03-((i|%Ua*)w6P495+N})R0(pNj2p&pquYL#*9|4<4!z&*kw zk(la}8vybDmo0yQgOc_ZNZM^`CHUqHJEDR|T>W~t*p`jAZKDxs;4hXNnY8K3R~+O` zL~!0Vsp0H&g^2O-ISl83=nZWbxDz@Gwkmb`mx)oo?@W3~IGb@e#s-j>!z7+oUBfR^ z#%Yz;%aof6XE|NRp4?`>qM0 zL7m+4=Ume>u_<;a2^e(40t!Y4C;jNBNQWXe0J5_3cJ6Hq%Of1N&pfYz)srT5f2A_7 zVni_!;5e=?k|rqh8I!YBlg8Snc5{z1yL&V_>$OgmMsSdDCI#>vjD9RDguDE=dU55Ci{(0NJK`<%|Q0 zw=*S}j@mmM!*OEta${fy4-Uo=)4>6anEjw52l41=mysJZ^Fbjz!s9gL8y??0OT%#t z%_Oe-j3+KqfNjIqCnVuB5b=nabohs_JC&!vdr{CN%I^daGV@#wKQV#N=hqx&h{D%RtyeQysO!z_8fmn~ zEiJZ|Sw)Ke?$yY|rM`M~f@wl#(RDz+(Ao|;Nao`3MUUFy^D)GTCfhiXpmB9%v5XUm z3{Lm!zDDZ}E5EmsL@qgUskg4t>M=Pz`L@fddabui89KA92^M9qm2XQc*UQ_Qnxe0i zbcuL9ugAJp6V>vi6+T%sw36|9YFu|dQ9GJ#=^s*djmGrqOix9d17~()XdgHteemiB zll+>a4_#)Rbv*0n=(v84bnIWbfDVODkj);QPRHL@P;{nmdHeZ*Rfye0;sL@xTEFFUX(cKcFf~ur3j*vbKt;PhAWfl1eqDjmF({b@2}yxq6f)y;;Z#q|$Ex$T2)`J8m(=#5U1+ZWQtx%;%EPa12tjOv?uJ1bhmP2TH#)#wF39rebSP6H zcu;UUnlQsYX@HPPHX>Rjw2@HjL?WaH2EoqJ33zG!tPLQP?F<$z(FFy>U^+&l;SbqfDquJya(q>~BgJv}m zr3EsH2edsKiO>Z=(NTQZb>}cPay!RgujugJH}XqMOA$V7Z7_pKLA*JNN#1-AyJV#I z(C`7skamq^m&5i{zY1CJWlP!#5z^jr5K(Muz?}xoMr>KBJDcbyYf=Co9cbfP7S>~D zB<%|h@=p)}5ZHyH{DR}T_Z1ltKsMm`3vJ?uh_k80%KS(=CUff^tgVQURY2nXsvELC zP_h3LI0)(A#X-vRlH+2VcqM4OwyIWTOg~q@I9F2988&JCVzHBPt?x#11Gi!!_p7MF zkjbanT2*p-V_nK8=YH+?0LU-XE{eVv5}5zLh3_r;Xsiz%|3bpull_PFKmJ`J77mVy z;^Jas*-U_+q177e=W`xCRJW#=_qNUaxj@}o_B7>oTZ6escQ_(xCSiP`OlcU-8g2XZ ztPVE-!Y2Jw6wd!=n*{d+2I({X3uvzZ;z0m}&j5I^P|@0q03wNMH!io{{=dY^q_Q^v z0%R7vI)5r^ylLisgO$g}i+be%|0Dt86vF@KC_(g3tGn|*)4zoF3LpsxAF;7K00xYe z=8Acl!QC>}sOz25TCc-WfU z?Gp*u4ij)Zm>^q5q&)&is$LGsC_)dIb?Qj`2g}I57wY^OAp3@#?Y?R{aNgmn03%FH z!6E8Ls>Oz1=R>;=R8V#c;bbK61_TivuENOfF6Ri70k~0J+`K}6&FIqJa1a2_T!G}~ zf^SZkQwY@(q;7(gL%e}AMx)@~gc1o2N17ru{1aSJ=QBV)NY&zvdS3n4bg;W0fkQS9 zLiO?4@$F?LB{HxLAfP}dlcjIs#09w9mH9>p0VE*6-@(z9u=8|xIc(z~c|P)$xv9=8 zw%CG$7q&I#CE;bz^xKP2Jd(C(5q|*>Wg0J{^ zI64G5;{;snLJ%Nl{T&anS-h~IO@L6od$ZCXv+{PX)5RukiBkD?dJA;myLjsKrBM~Y z_YNQwP+wnER90p$>(S`@a7CTZ0NGu>qBq=WzIihpr#XYcLGd6mg2>vcI5hC?Z$JM8 ztELSgE}8<3D^WRcRR1WzArn>Q8@5?y0w5HS^UaGF_XZ0fR4{NwBsv@zW)s`jL-9d2 z4iYBf^G_b)@f;2WYyjlSn=7fwWeLxol@{0l!Ph6)n>XVioa=e%6tHGkpfgZv2Brp`!J`|8x`eJ+f}zyZQCa zn=LX37WlM4=Yxy>S+}QvKL98p4 zWir`DB94nKL?;IXI5-5J4LE+-pfNw)dFX>QljV z3fNPCh+QjFm~EmWC^)KIO#_J_BTz@!gD@cm8_k=4O~8YiMZr`cA{381a)5kwB1|0!n1| z9K?xArP4ip05~2%EaexJmY9%sw47+#cLRtw`te{Y`oIs^0d4}J^a~yx#m3u2vRknIJhWg%LrAIXDtvQ)#j3E zZ05KmYH&%_N#(3MI&R{h5((Onzn*dH-7hLa3S~6RIW?8Qh9_*<-RgDc6R!^gZF2!G4A zP+)vKG3rAO6UFjRo+R-+1Hx>hSX6LPo|l(!$tI^j=A_sA0|&jH_W^g#dj*ihxY*R# zs8~M0sTZ>R6jK--2)%HM%&%fBijFyBAnXc}QTl;Tx|jYLAiD}#_}72U*j`Vn38xhB zTwY=VK|Zh_VH@T}Y9;irfbHrg6yyqweFzC$>l1~toSfzYo3ud*4h{@(2wGmigL za*zX#2M#k>ynq7-0?4*L2)`yRt%kqe4CBCG1al7J@7^r$AqUYXCML@DgsMr->6i-u z1IS-)!Rezmxe>RG9enCDho1qm`{$R*>?$A)r{e_~yLseXpGk*A58kb|0#gAbfQ z2F19|>x?}>b_W`62M}jxXFFxZ-F2}jA!O3JwJ`iU7VL&}v2Z%w&Q*x5s6SNRdj$~4 zDm0LSZE@)^TV!92ocz#nI^psM{@}r%{#sKz0kWIA5!w<^q@ZIII^CNF zk39u|hGYytG@Ce50unPWc&76X(!G&43!x_l`)U4pp9Qo348FH#GwJc!*={!*e9(Gf z86rGKl%5|MgXMZefs%_?lR-{tWNgmmw1c0zyk!Rv9F&bprvy79h)a_gN!ug=XRL}F zpO!Jd?%c7;n9c{)D(S-hX*E6rhr@uy`L^GIve3 zwmdx@J2PC{|EaH-ZU+!LXz9Oajnb-Ob1!qvQ8^0p^6QZ=D^w-5V{8}I1&(c;J4 zPB7jES~|66o?vLUrE^~aL_4a~-?4T)m5nCUUaHV*=gX|g;@Wu2_YG!_qP2Inp)+gP zK}3T937cn0<&FK_3xl0i-xeveL6t&|edZwla{ywmY68G*oo}u2p7m(}_1R890+J*6zBN-BxCn*^F)c1b0Df;QX5fpnw0Z(txJq6O?6`C97hJ}@j zfGo1MANK+>5mgf?`dmBzM*$=;Ha0aiC3VM)J}r1-=?{WF{V7BHQ7pGmcNcf}D?lha zgi+nxFq+#zAarwgIS5=XfKV5A7njUrmxFW{7kKFILj`oVqKN5amr$1r^iUiKT|U#l zncS#**h%LnrlzJQ%JYz`1`1NQr_s?GA!s6%j+XU+H^M2Oz7?(=K-`ZV^El>#D3I*o z0Ru#cIJbUqj1+?65b=mpYz`}ABN00Pnf|Th>jazgf4i#5{*tuq0OEF>9TFZM9s++t z!gr^@5aR0Q<&eO@4@LbHDP)(UUyLjLeK>Xy?4x7AGkzcTZiAp~5VWaA zP@nzlQn`l#kRG-X5+9G=A#CI%0JMrLe@AE4%ME~{^9g5mW+&ua`Pkh8=sSLoZnzlkOL_*-iKU^gHVI0AT`48=wxn0aScF@w*@x7#@bj( zh57oRL_LOGC^kJ4T7E2(jAbpZJZzM-;i0%|eDmlt*xVYVBkqkAk`Z-VHCNH8(0Qd5 zyY=G_a@r)%IikMaqBIOAQM~sFKuE&c)4G&_H#E-= z3?urGX_;%>u81^6o#ngsr`c7b69*rbS4=E_|IJvLwc}~hCp<(-zHm>OIhrzbfAEC1 z4lIACz4o|2*K~NYiR$*@M4So>T-rb%SE)$+7)Md0SniEkJNPFQe5S^rIS?Bd#j}`$|1*et7H_Z~) zd#n8^pX3nc$#88RZ56r=b%NT7@n;Y8gHtWv<<$DjC(g%NS_hR_?-(g>yeWOh-8@6w zdaNnw4=uA*l8cW8YsuZS-S-+OK)_v3Ck{ za1~Y0CxHhe2BoP@Ydz<8{kB}IR?7=t3aS;bh^*@VgJH5>rL?cWB2lL`u4rl{6K(;X zOqTnAS~AS2mDV{D0GZHEiI<6o_{6%zE#E}HK%Xx<{!J+Hb z{A%uzm>wOs_0u+kum=d)6P6=0;3F+&2!xKOOIVoOSyIpeQoI*S$1BXsKZr=C5xEdMQji-f z51k3{&+~BzV>zAm;=~t_Tpa>D87wa!4cpc8Aurx*CsX2tIf-0g;`eXu6>`AKhe1B; zrs28md=U5mu0d!0_YfdxB0V)(&i`orZ-26n=0Q9e?ru=f_4$aPjyfl9P%?J&ad(0L zE}@}rZlNy0noBY9K5n5tZts%|{M+sPM+x1;=eKnsd_I`O$L&{T;N^lI6}}RBJ0d6e zlE0YL&C|z)h=h`b+LFOSv8DD|KSLCgODN10ULnfY6W%J6ib5{$-6GV*ClrQ{R-ow3EAwAyxM;l{lYVnj=Aow zs>!caD*2QwAZ-z$Urb2fRH0{zJg?4^h|;fA_rlMVM0nLGXh> z3JbG^0yg&R7b%RTD}TSe5E!zR_o%hNs7ZTkbjOSTY<=HPjp8+MW#wt2#H zJ%)pqL&SMc;`!a&Y}*cU3Eg}VPcJX8_pYNNu|Mtg-gO7h-%co(U2f*-u)clZW}XfX zULVQTb?-O`pnE&B{{HtcXJV$@*&YFuePuXj2M{m+e=dt30)Be8oqpOp@ze7ks3&ko zSASPmxRLx_{rw$TOhr%;OBUR4cw_Xl}dMT^&}?N++jKzVEU~$ci678 zx&`}4P2Y150Rqnc{ck`2@WVS7+q5|j1uZB};mG$Spdlw;&N!ji3%?oWb8vrf5RP~H zVcPj*KnGbzl8K9jr`j-3>DLA;m$R*IQ7CSgxz~cW$`A)XJco!t^lp9osVi|a`1}XA zNEcRsgM%aNbv}qigO&Md@nH@D{$ct3Znlx2ps)bfumGp>!(nFw0$c+eT-}axu6j^f zMpZEtN^YcTRN1fTl}PkMPrz+CCGoT9))5kAs1Ims z%0^X2?*?m<*rJqnCILOmxWD~*hra~jH<}G6hc||F-Y5R!Cn+kp#~m~#|hl7 z7cHP+;v4al;=@rJNT!uBP>=o8A+3A2xcaV9J@U?=s)HQFCDP5YN7^aMCc?q`ZkO|msnZxa=(p43G(tbl6kb>PQ2LIy))VO_?aIzgy-eD(WW z#eK123NRx;Fsk(Ji?^Cz&sJ6RovAeFvn1Tsbi>_fAsFOVO!*8%q<*cuE;jTX$He4# zpveQl=}e&QkEepK7q5$7&xym~DL4NPeTE#PZ5zy4?mU_Tyo1Fopos@GQapf%Se9Sj zOe#wNG&~qvOwI#9BRU9j$rm(DUm!t{*5`x{rDTVhP9hKcsRZsk#BcE)`6fHiY8t+%bHLw)S^gj=_cF&Qx$+uP4^ zBLFgBtvO)PrNyT|`d)0g73v9=beAUE5I`o!I-chBn$u{tddri+;VVdoi~z`O>m})g zc6229&TxZHsA#)TW(F(*AZI|nU^_sDAd{j3tyE!F=^Pr( zlI(VcbfIC!Q?tOY?>8aa*Vyf6QW>}Q>+_E1;MF5dQK9g%vN$b>4swE0zPH%m z6VC1(KqCM0m&L#Q4gPxos&Gb^w=|qrWaw<4YJPR;$A(ot9j{WSj31TuPu5lF^Y;fp zu9S_|n35lV|3cUE9jMR;Xmu&Y9lE5M&Yl&mwNw{HNCFfP>F06HFVr3&te;F%-PU*N zQ)oWw92gZ!Gq?WPhu9q+7^TxlZ zxTHv~H%;`+SB<6}BGoo&JWq3AAEdo5EM3(K&WIm}_OoEy?--ECHZ8Mw<*w?$Df8QGF3dDi?=+Xr0D;V?ymkV^ zs(Ova!RC)G!F*L{S&t=-=h>k5@|PTuQy z2)m~8<7}0ojf0FWTmL@lx2RqmQK?toO|JfZ(kl7;>pi zYF5d|XM<?hV30dt`Pu%|L1^K z-m)Sx+`6|KX-%0~#k$_e@<&^{nqDj}6t7$uy05Ltuh}1c5LX}^z`CT8R$8}o!QG%z zB{oXOqKYe|a@v68rNGvggw5DZncWCD?4-Z*AwPdkdQN^`?h(TCJt=zl{P^?dhYmky zJb&)??g#vu>zQ<45iP*W-RVl%5s6$J=HTEGRCVgQ*dfd($j9lRCXnM=9(a(-NEUi{ zxCOZRxL*tS@){6ANQ(WLQACGT9KsU_Ar}#6oX8SsBS71;43Mlc2hQIYk6tkejHy&o}=$k_G!e|2X?E6+#fn*HP}Z80R}@nwfjy{Lpp}%TZ3Bom=$1|i=s=sA`%+w*(jcje zYDvzh5mrp~Bxj@*Nw_IOnpVPnDf8pr6*fvn)}8A?F{$E~@IgwJv@U8u(#NO~_9eB~ zC4s7o@#W&Hnp&hz-nWfn z(Sv_kZ-zz@|97#SmvRd2`41l>Pr$eqdG*r8tCugs|K3$K{6&Y6r>+vG;NQhd7cXAA zboJ`Ri&rmQg6FPYI|O`AaU&4p@Q)vR+u9|P(|Nd0QmCCoB_?O(uXYYo2G3p^T60m+Iqs2tuA3cZfSN)Q< z57tfJ1`t$*He6IAV;$tK0z=kB0N-3wbtea*fr6svA10R~9E1iroju@0&=s6|HVE#| zItGOiy930pV^ENzDPLe4@-z{2evS+1VBgz?;DQ zDd=&CTZwpPTx00^-P zg`J~+e6y@J-G9+2!tERcbl2w=L&_EBZv5H~i^byN;`E;Sf2wpSzg1|(KloX9I}g9* z&Q=fB^BpP?L_whXzu7uayx(gqcU`E1M)`%ufT?z_r$CHvA+Tz;4HFj|eM_Df-=Y27wzHJ_asP@R40G)~#xFI#OP(TYf80-zGXSO(oe|M4HmxBPw zeSxT<;vM`Qtcdst{#-(5S}J~eQC!pmX!!}1dD>W8VG1*0kD<6DA^}zg+Q4)Q4ac+* zH3FcGNQQma;>QyLA*KF=9<$Xb+Ex|FExnEbn9KT?L8pY7Ct4{u(Z*A3)ovI1tw4jX zO@*Q+ol3D=<$^|>qJs|!4HTFxI2cfh;2Arq2k1hGH|8_W6o6SZi;)(Fal16 zynu>(gDoGOFd~gk$37(Q(unzK*kV&5v!c^!z&SJwW<;lk?WM9}No9R~S;@Y4IBU;A zSfETN&`Na4=%u@#zz%GqwDaKjGXR<^qm?#WuSh zIOuM3&N*^1&;D*3oE7YN?$9}RJj(dfa1J2?s+r_zy}SDQR@Vmd_}+%UZHVf-$i{gUfuHxJUC`;F@1kYYM_sSmP^+}mT{=yGRHy?8Ox z_o6qkxV{H~2dSlT?Mg+b#uA}SKEaw?NdfnCNzP#Td$IC5k{T3GZchNqeY{GM^vy7A za^2jE49cY2Qt3jqRV9s3<_)Rp@*0zu>qc7}o;07*m@0J9w^fn}q1W%ENTYC})rp(HB+R=$8t6>TR}S!+~}lv`_h_6dR@m^%22gMR2)aicY5P?;Eid$?yM zYH9H;u=Ed&VLh+q8vuzo?Qo9kWe<>tFBE_0cKa1C^%cK((XA@}69kA~@r#+X7rim- z0C^C5`+H%MSiys}d%-!kCdReWM=PjE}^6}xu zHv>=OAqO!T^CdOnLUrrVQ&#Vr!Lc1P=`HF$0Ufj}d#o2#e2czzc1F@McSjvJqw44{ zTaAMqiGmxGspEYQI4Mlb2Y)%r77l|d3$J0D-t zIGpoZ-eS$$K2Zoch(ec5!-^+sdfzTDw0HKHizY8A^DI+Ylc$x>C#M4T)T;?vA0&=f z0%-NzKK#ZBRdPuzI792^Z9p6Os(Td_sjw?s1vNuq#xp*;9kPFiC8cGw3zmdvcC6S z!%sI?f6BOH`pJ?u`0l28(Dai{#7cY|dwZf@byE4II`37=@^@9QXU|@Mg2q_2F8XBD z(s00)0B%5$zm~cZY4)Lq6>Ybt0PcJycd}2?G}Bc5vhZc@O7u9tSD#lLaY)MVZEKlo zH`hnd)}AZUYNx>O=K7Te!KrAie%aFrKyUvSd5@B_-jvM&D(Fd@Tsd7+c=}Q5gH%v^ z|K9eQbeK-q`-BGC<>Gl-$LTfjr@7lr%`cm|VCGiy-Sh`_x4c1q%=mH1v#ggrb6{p& zK%#?g>9pVxS^W$QT745M?}B-zDhXiCCr+&DACseib zk3g077(B|JxpglBJW4L&P94}oi^5|zn{+0?9u``YEmH&B({BJ}&>Y^Iy)@h1|6rI` zHJ{S{q~U4aOzTWj<;#1c=SGdSPd+sR+--f3&xP4R7onHLH@Y9QSMcRw*cMU2katY_1kaDBJef-$=a2$z4mH?)&~)G#Jmzc zN-ADUdjmjwAArpnY*Q7pptw_T`-%2PFcUlTtZbtC2zV9M{wV{*ivxrupy;Yx0E#Xq z%g$d)0hN)lpyYInAgAA=e&3UcR4v3CC|2MRCeX|5C`3k#v} zEXzY%!Rf;Z{tn)<)6ZS)IS3S>%C08Er^pEq^MtIZs*9;0Bf3BYDpNJl1^%+j3GiAK zOe>4z_M=kWsC$^OB#Op7D9%q4$Sx;(a%jA$=9nnwbd~@J8Nrq34~zT-w88{U^fql? zOm;a&K*7W%0!@5DHYmK5l*_^x2Mdn+`(sR(%+q_P&5N8iAbiBe@_^W4mKw*+ioX0G z@APM>BSxRyHY@biYCln}d9+pg2AgTUZJvB{2ZA`I`x6JquOcx7$Tq6)`3Pw?>k^LB z9{OX1-2@1>t@}+OX6T&JM3OUcNZXi-aHed|0(cWiP|z7+4X4MO<3^+j;S=Uz<&aXjEHJH+O#)f~nOq6>JSogkKE(L!yP<` zM@K>N0YNYj;JOtx$ko+xJ!O!qeGXgnfz#WF{4Z4PcumEi-iTEgpa$vH~I)%A%SayYoig!J}?Y8hL5fwfM zi%5+QSQ`mgMD8pW{1_;-aTAv9JWRnszu|kyK@#>zvlU!Z>$*|sTx=>(~$p2l$+vZUr9DayEv@!xDxC;zN zzoZa0Ipi4f)z4;!ha-Oq<=0}+0Su!)Vb(?{oXvwzh@O$mVzU|W0?*Zzy!9Zq^c(TE zPKJkvu*vrEV7YQ^K{nIw8JJ8qo3)WLJe-|F4M*w+NCyUP6hOh8k>3-f(evrKZ?NYe$I34!lw3~q zCzCt;QvC~6X|U)*I<8#}EcMefH$0Ot!Xqn=9NThYLS|`4m181DM+VQ;pXKk!adaiY z&&W6=DoV}pOV#+FW$+vw{Yhlk<+{=%c`ULk{LGE!L{~=^iQ~v5k(p=x8UC*DpF|2P zl!)Mcm@o_8S(J?{g9AeYHF>W7utpL0xM74mr;wA1+Vh6<&+vGtfhmVf{rLI^_BLmnL$^WCn_f zvLVCtFhA0IDUx|br~J}*OjL}l6A26=DU885naE(APhi@z@#hp7Fy#~W8gFa;-YF9AXmL)siZK)xHCZK@02NZ-I2r(l54W1xK6 zt9Wh$Na5>=oHb(zul!W4^0}psA99#eUQw}VEcF{rW!SzgnRz1OOFzFYM?Pf#0i}ph zu8^cwHcp>DBDq@8$!e6OX%~kTt7#V#N+Xo1MHP~lJW|o5j+<6GmGLNnSv0xAZj>5J zPH zNTuk5b>sK^BeDI5M*UPVA?JATmAZ6!CFgid(xE^SuWWJ3VQE!#<1mj*3eTVBcj;MV zUmh8rf0HwRXoOj-^MhqWW*ldE@R`iRd{}>viwYz77Fdo#ZLxBudxi6VVKF70_ zBAHh{X^xmCpG#nn!i%JG*W(bGzK2Qd=e?`hWs4IfhxiN<+oMrmIl^ap@EL4P?`mG@ z%Y1!Ol{4k5m^ax}%>Ic^NAxzS_M9NSn*o3D5Oi8z}Ub9_Y1dUDvwQ$Lgw_0PJdB5 z*1a+?n%HRVTD@vYyO+f@`>_N1etW zQkJUQnB?D;fAEUbdN0?KMs;U-uld^D5{uMKu8_nqd6lnMSd%&rWY8rw*Dm&Vq&7;_ zQ!HNP=<2b%g?D*N!#oz-ze{S;NtJwqTA45;RZn#<_K%y?Q-$g}KAD**QKt^5)tx9$ zKEXpE3)RItx@Ib@sYB|KHFPztM?KABYb=Xx-LGc{q&j}1((m=t(wa(zR2fUw7#628 zUzQphta?|7E`?NW9yOLp)gzTAlhPN)o0KZUYn6Lv4}t*V8692lbv?|EMn~&eo}s0m zWphX(7Z-|;3nujC1LrVuJa8^bhz8#K1R##%Mww!w+8UQB9e%zhAF>*BdG%_&=0?TS zO@J``PK95M2xr)Hkkm@k{d-S4#@rsi%vxdAepS)2MwT|UzpYXws@mG8EVE^*II{ne zTst4NwAiX)vkYy9IiaO*EsiA8TC)p!zD@7d9X+pZt)CaM*(HV(=Bw%^@lc(>5@Shj zoPq%9E9f0Q9YYF#KBS9w7&qqj&T61g{yXvzUYRnsgv>b9s4G;*=HKnm`SkYncJfKg z%r%K2qAuZ3?Qo^FsYRD(kuS{+a78@rx68_xnJfH4gEEzrH)Jli`c|AUT_5UP8q1$A zlV&gV=g;Sl>Y*T1e%^Fh+NPcFf_YB(+W@jWrwQbhAMG_R&&k%lP`9>7I!5Irw&u~A zDuO#vUTTt8%*lG6wAX2s2^Kjcqi$sK?&*j(8COmHEMEO&YVBP6m}MeMdDX;MBrYwK zsrhS(rp^S{Jytad%F=289cx&9mTR~r96wPpDls-1fp((UVphyiO%i2ti;f!$&g>U} zEcNB6jAc*xqUzDuT7CCZ$h4P-9mDyW$q7^;(YIwBk5F+>ZnfVCAlaHmrD?9cGvIN5 z{Yr@C(reXdqG>pP^^z)4BJZ9WQ1(hhY>q`g04qs{GL}?QJF8Wzl*c8pByx#DIg-Ef ze83bD12b94s2#MLDJg zP2PB4xvr$*s;OzFb6gGqqE23dJ5lE7goe{wXQ`3)89Gs(6C45{oB?YrxxBZtc4B!U zNAiWbZ9o|}u&QTi)=FQ$?e6OxQOF+|b9!eXKinV7W)R2aFJTJ~HxJVtHg@ z`O!!lL;D^3AY@*lNv*u3kSHUk<1+8EEb6)I`t-dFI^`Q)gpL=G{!GB$dHxR7>j$RnmEl zMQ!G-7b0U^tsd)8O6xj|Ij@k26;mpeB#<w;$t1B^A+~WDb|7=J z3qmG_dF=o~CZTake}6KMNoJtY6(*VE&tdTVN&YMpByloT+(a}?198M;uvx@l51Zu* z?}gmWl3Y0`2bL?7?9btJMMO;VU0E!YA=B|eDhp=9V=z$n{A@Wlf*ZqeW$`$!jNSML znQYs3yY$OEgvmO_hOY@9nM{H|;qWsaq7Bep41qwI>wC-F-9QP7U>e zTPRw?6|k5M;LW(U;t8hOJ_R*&@5k6K4vV=s~kO-s{pM4e5t$DV8H$EZT3n z2af-09*cj>sD_T?zgd45|20?EJ%jEh3J@MXKXOlJ{GX8@kY+SxmqNs`-Hcf6i|1p* zrVe`xkl5JR3$c7arP6TcP~;>M0C&P1lkSeu7$V>tdIq>Skn;A+Fs~N}hwq2m*}80k z0<-U(Id#L1*_lo9e!u^gk%(hOakx$K0Jm+pU9BvP&1&0lV!LI6y%h;*TIJ=Psk)R6 zX!#>4AjhvJN?7U_hb)bzQ#PIFZYnl9KRk{T*z#;!UYMLY`y z*e3?-zH`?rs%>X)a%-!r=sYr;MJBhnwE7b1u~Qm^FmfcGL~~K3d_9u#X5|L zZ%Vs>Om6FfCU19_+as;p^f0}FK|l-LZgNY*)~{@s+zzx-WRaKhFuO+R zATqhFZKd3KwQh1tI|v5)1l!czs}z!5Om5Rb)+r*mhsugXvx#A6g6-6ycW6g%D5+BR z3kPvHn{gx?G`}_rWO+klWoEG?aIMuPSQZa^T$ZNgSzs#+zexYn+_wL2vWkGHj$6k~$i`6#VU(dpS`nrL5?_n7)M3a%2u&O1k8ZYz^W^;ssxaQ)(3 zMy;exYf?-#EH2==rq6(c^+?%iavSdgVOo-(Rs2!BP0$LM;}CisJ8x!& z8>avmtOG-DhN2#{*#J@|0ZYTnZ*D(%FZBo4NoV=s~q4 z!rG-gCvEFp=zfb~#p8n8FG26Kd&2|MVr5d}eHs`yHh-IOx9cqcU8@twN$#3pupe~2 zp(&G@U2n67g{E7eO7iS>E1-g}-vVLptrzBeuHe;kMbvFw;}lFVpRpzogZ8NHWK%9J{;GrVcHWV_67gbHpa zh&uzYL*gPFj@cH7unCbA`X>sI3oX_|X_;#7Y7DNv<@;@TR-d)r$h|bb3`7$3?wQ+VxPx z0+n~2XFB~4&U{zanFYUevSq>1&1ZSIS(!o;c1hNZ(e%g03v>rE^;}x{ zmdWjrRpVpk#mowcX^lkUMd94*}BPkdhL5^JY2}p|UPt$}7pE zh(nNtju`g$P=yflu7G0xdw%x3KV1&uRxhdXb#u}xlI~cODCsu_>KrQiD!y-7jY+Li z##Bt$Mzd*@L$#;fy>V|F;o!nQ{&8j-LU2%+Doeg2ud+yzwXGm4LiHxyAW5ZQca)N` z3tdufa#?J(9DtGaYHJ(xT2p1Gzo_R>H#%1OU%j0|1D;7 zOPl^6Dl-*SD%B%Hj}Fjbb2`!bz-3zS+VdYOt_m%Ox) zA??&$iW)#m0tp+@{Ul9UM=2+w+B-vsB=WM<+?Vv_Ie3vUxy>-u#C4g^J0O$WYHJ)a zxt*E5@p73kxy5%exveaf+``vQZewfvAO~rxzFVaxc24=D-_vLov!(ArouWTOdP$mW zvy*Vf?k)aETgx7=i^-7I@R7-_$TERUZjVhOliL$dkG~4OV-0-I>-=Ut?%BN+-e!Iss0*mJ@D45Px$eBSHPXcTj{QXTxpW{0&t9ap}Yl}V+6Ub z)E@Z-vFinA(A*dA18Cyvnt0kL+6T!wk|qG@3?NIOf%FGZ%9R~4f{cqNQbCp&y3Mm7zTiDXyLCzA3&&Q+FZhua_R zDKyNVktYrmhD0@AlY^r80zSx;m&6zFG)H1E*av}W3nIC9LFJLyjrYKW-V=-jRv zLB^372R4l#l~of3(%Bcz2m{?SFP-O;1ho7_R=j=F0|9abMgr;Of|B^EWLnR)q+&J* zjF#2#7$C$gKT_nlmjK})Rg?01AhyiHre|q2>Go=JnX2>Q-3(PqkECBC`QPAPT6#s@ zfnFc9LZ`ZU({VaR_`gLn9fT19vM-?1y=gZ0 zwfM$l3Y|`P=R|iv-f)o*LvI@HOsC=ah6i0@svz_V9f!H&G#C@z4#VA@0)h_WbRrTm z>_IMNH}av=101$qdB-pj_Dk)Z_m;e6S6*yT-J2ZEM3LO}pwOD+}u7G>ub|rg77>Nt%%Eq%^T}MZWy- zk>MDFjRAu{8v_Od#@NCj^BIn1E(QchfCRh{HhiD}5&{lFhyzhV5DL_gjtF{OL3*~ocOjfLQ4Yhk;WPg-q#I&G!P`w>xFGE2 z*V&(pW6W3=4|N`7FX)1iZPS=IPw_Y;56dw#1u6x^S{M`ECPuuPW@MzX#vmhJO=0nB z{1yGpPrzrIURea?p?~>|^r(QxidUm{XaTzM0+PqWkSK11T8o=tD1{ZT#;3_=#j6Dr z7OxfvwiE|p3`BXh80g_vaY#~S+}-KZscN(4(+gZ%niICZ+Fb- zq{u*$t6DS_ed4#%K=z*gEfDlt7YmJK{Ivi5uN#bKG*5tw%oALu%i+P2hx-rk`1_)C zD&{MRf9G*|%yXu(u&rMamslBFB@xR2K9*W1EytsHJQ_o96zUd!>03(nK7-PsR=5W* zqQ5da4-{?;bs`iKGeWt@&IztX#iD@%K0X}U7o8#x*&b&@*m^yb{~Ilow?0AOS9%@2 zE=Axsms95b4~SPI1Htx@_F*xECwa7rgnUhQNd8yDMn&QUou|G>(fXdpP?MdQ<5KuW z4RIa?3dtnR{qw$_F{`#5-bxp1-+|mcAE+d`nP_~HWdal*NkjdV(lwZwhs@H)n{YnCUZR`xwH!zF0J`iwbq_Shf5Ya zH_|dOc~=%0v8FH%c)FDqhbHXXOOt%#D}C0#mE=Mg}k@QKzNWJt4v5x?as#c zbAR~i8b6=8sS-h8D9PuA`}g{l^q+rj1KBktd^#bkYJ~_%#}eHwJXVLo2GrZ%HKgoV zHUI*S2v3PFao=DdJgB{U%l-6)tg;;P@*URM{upR`ET&Oks+^NFh>Ox1F%Ci`rFP1@ zJLQrlQJf`~ELL0R9dwDvSMi{nrgEGvp~f=nfXdh3+vB&T8#JDUidHe0p3Z%qpD1%q z%G0qLZYPR?t@D%0f7ykUGdBB!EAxJFHzz8!C6q{c}GF~xFFqK&dW)#7cb^5J>)`MLvnM(u3V*uTX z$Fi!=uHz6MgcLt2Z>kTBeYNAl<81_~z{JVXZzP$2TtzADs zlcVNu6pmr_GEi9Zpsuk`|Dv|_TAyiBJgiytYEwF9#64yoO}Zz&T~XwegJ^$#yrlqo zU(1>wjoRgqUgaCOFZGP{cG=8XEv5SFw8S;h{=@f!=j|Wp!|oR;_UL`R6Wx7e$w|0T z)6`XB@CFxOF@Pzsy^ zJiTyR{*$Wu;k)&?%I(6<2P1BmJ>I4`_Vj*HbZ`+*Se!skA{4sxlls0L*9>cXJ1Lid$*6c#qE(FO78OGm*($eSQiz8g-^Q0{y?dt=(dke0-rT!=QKWVJ zzTn>d9c|ij>%&RcT}Nuc8YJDW0h-iRx)dkPb?HWJireYxyZ!WjL$j+dq}`aXb(CAU zC}-Z}JK%S&F}}^YSak0Q(8Xg!g<-csH$K$-Y+%VbQ~WsNPN3-7$-|$XH|An5WK#pl zy3ldomRL1$T+@EbdS71h?8Xlbu{2)hoqEhhJry6X_?=ehV@b1vg(+-+{3# zbIOOcUC^H3DabI$vtGlE>!!!o?tffYI{}r~GwjmtJMY@%H(wE4!eobThqbab*A6$0 zN6?lFAb_5l+83tBHoKT^_I5aiM+*H_Zbg%iXG=qK74^Mc;Q6<|1mhqCZF1Jc^Pth2 z-twI@TCW~>abu!vtXd(y(OEWDGUy{w*p$~1r@vk@X6qyG)%&a5%JjR1>e)}L>Y!(^ z$xvi||IQVo21s|4uyb}+m6N}eZjSHiTT|th0~z^R2TfW#G{Y|{=59>86?>{OAEw<{ zs77znjtSKkmSFqw#{?Ag#r~4OW6BXxAYh6h;7m#`m&@bfv`q@dc&ro<{tbm;Oj#{j zAQ13_m-5~c93*qpAm`y3q%h3&;3Iv(&FAfXyLO}^1NoPgt03UCNGQtsYj+YF(KwqJ z$W&t6OwUO7!*lWN(^REb`>e!%AqE45R~1T+=;=aZ3X7x@6^aX*TDzyutrZOxw0je! zsh-v(vxBA^9?xeAlB?{Rr1Q>B^4>FKGG3PhNQ|VH6TMzfd2OfcVJPZAWSdYwQ+^%&S3f{hU${_mz54;4#nm0Kk)18p@PISfzI78gdtU{)g=-b$eG(NDkd1TgpG zBQd)NhefNoB!X8~`Xgr;((# zdF92?AIW8@i7MMEH54TvUtV7BtPBfyoT%$t6q1z4mt~}wxG1Rm-%3ms&wpQJe z%*Gd*y&;u~&fLecvH0FTHROYzBD75qSXc#n}+m0Ddq% zg|pIWiiO@Z=ETTVIcypkAia8kKoC#XbW#+Jrmx5~sNf0$w=Dv6C)hO@?hf{M)a+it zQQWn6uG8nR913(1w)y!Ryq(PdPcU~6?OP&Jl!N5NI=@1<7wxl?J$}f_EtG{wBG4AH zoof#!dH-U-U@Y6`|Hz(I$iAIh=VI+g2J*|%Ib|OD4yKRhruI873%}E5t)yX(&bT1QZX0VHk!ZD7^ZE zzK}EzIjNX9#A7u1XaarXbC_CvxX<$#gd7)v#SlAgpIV{%G1X~Ni|Enwa64?;HHm-b zVbl({M4(T^@}GD(sgz>>!|mZ;NrGM84WMl;!yz=a2D}cuBdekvG_i`L`&Tvij3hTC zABn^DRRTBVqfMxQy~!1fl~^-U1gU}qrpfxt8m@RYTLu)8u=l4QfB9wZmtTJTDN3fV z18{2}!D!7MbKmxSQZlTTG$-79SUprbl=oVcw$G{_;pJee$*$G9 z`g9(Vx&AFNkbS2q6lc-60!)q6D)tT91#{5{B4V!yr4(HBI%p7yoEp^fej>f?&n`V`0*!IhWP%aDl9Oa0zO$fpp;+K z@G)`(X#5o%70^5`<6Y1zF^KacX7nN~e+}8(K+x+Q730W&>|HUHw1chwVfiLnEXyj5 zPx|^4CTpTmH8tMfUkMgs0!dZ@?qTUEt0OjNb(mz!-*SSNK9K#;8J{8dCN}~7i4XtX zY*G3spS^58jm(T)<#6zq zvJJ&-W&stHNX6yi4VDjxa{(v;PG>nvp?QzPY|LCH_b9W;DxQcAMKP`OXXN zQ}NYZ4bkZ?V+y*2$tXxaBF@N{X34E5)mE3HM%|ro)>oaPJ4bdayfJTyfm|%pW;z{h zo%^C>hYAgH>xCFdzpP)NQ=LO@`+J^gKQ?&s>PP29`zc~m0||#LhxKvy-STf^y6da) z+HA)I&9#C?MW^ZR%(d3GiS|A@RKA7^yPRkB7zYaq723LFk3wV9IwZ3X&B{F6-5zFBaX2qe06}wgG?iBp=%a8jA0TKG+FFytW z8T7^;WkB@u7I8t=8Az3ManfT@BtV(=h0GW<<{rPcI0JtJAli9>ZUAv>X(BT4BzPsDh&E^S#OJPY9zc`uZCJL499d7jCx&t z!!H``X|gI`_cL(oA4y9+HFlFeRpr*Nousq#5M_bbVr_~zCfy(8dCX)gHQE=D1( zRqq3`dhoKMVRElRZTsQ-$+E$7_B^}#_bDcGXp^`7S%xSRU3Q+iGorSoUQ*=jyFD1D zjcNBT&Wt`t={7di$e~1m6Gxi8di1@juCcV%P><0Pb7f1ILdw)A)Vd~m2J7)#;b5Eq z8A!fa+3R)ABx^5dHLM>QE^(gHt81qV?TYg5`!Uw>88zCfZs5N2Rl4D_AF&K z+y0AiYp+Y7-))EvvQm1`R|;zc`(r8X}Nu}XfXQfiMGj@WaqK>kEGtY{SXev2@Ae| zRrU(>x1jktlo;gnRjIR}_M57%sXFw7doAU*j-}kzRgWdjcE$6_;t$tSZVA%;)cbUy zV){m3R!W{QamO`bZ0_+V^;7lVzp8izW09hQQ5@p}-8>D2(-kjdm8mVe%e%(_23kpS znQ|LYnOJnqQa3WSG9j-Y3;w)&;QvuxIwE}$qhzd`%rhQ?(8*#%F`8V zsya1ZH_*D+N50eW(8uPaf#934Q)g^{wOKZsL6HAYWyIp`r+hZ$r~|;=BuBG_O)(_y zttmEZ9o*1p|&L?}t&t zBYD|c-!kPkwmGqRnx)*<;kVn_4CU6_Tv|Eg=`tyf`$Zcl=zacWx4nJZ)^~Q-=iMy@ zxy@c@pKD~k{^s*hLspCQ&VRVI(Rv5XuV^`bZ>Hjf+w*Q!w6sLKtD$mcg>u{2+U;$? zl-nCKC75#i?&21TS5rU!m;wSw_@xdnVxTz${}1aiV3rzQhZhL&8aiImN3#f%ZGzX^ zf#Op<9{=rhvG(oi7S@BVX;N(s6QRgCY)oD#Iu~!9KO75fLS^u6%jy1WS<;)9dDka3 z<0T!|0X-Vvwc<5kX5lxKgwXZNq~ZQpG?dvTzz6Z}uw%-k1dvUM(oig)(IhI}U!*okB~zk; z^kN&jXFM=TWgkk=kD_uYQzgYhetE7cDKc4vV-VBHbJ3P#!ZEOk5|#`3WvfAwTBLz2 zk+LwXUN+TVkc_taB-5Gz*F=uJu`0+FCE|5}Y*AQDdW@_=Tp}tbvrWz}HIO=-5uF|* zX%iJ#KZb^=^!~5DfDgB|os8T%$}R8FkG~wHs9$iZ2^kP~5JA~h!4iZ-zz@u_AG=KY z_9QEw1{R744z$R%2o+Oj3y8e#ziwtAxF{V{kd9b}FF2H66NN)DP#8nc<1=hOv?WOs zgnyQ1%h=&Bxab{|KFwhY-7yE2oQPn5Wf_K&&p-W0#gKC;2BkyW`k5ItwH{gvCLpax zN*HK_-aN!4*Tk6obsye9xiuPn!IWEy|3S4-9H)NJ6YT{SP6Odp3 z&s{wvm~x8=c3eg>6LsiNO!yP<8SHxMFi-Hmy>z!ixy1lC&S=9NcVr`* zD&z*ZvB+>pmZ0D_5rSN{>Q!`mL#<5su*y2L3@l z1Btoy7>6L3wAB^LEww_qy&-5Ef+6;N-W+y;%a z976X2rrZjaDYpc{57~i+&Yg_(EwjwF!rH?iADT{hd&3#0m!BR<(mayQ9woRtFXDt1 z9+%IY)y97Iddlr@^q$vIZV8h3-IUwkoaahyIpvl?(mQ|og-JEZ(EBiwt_G7a`k_5C zU#2Y>uDj6}x9>*PNTClZ=3vxYIRemIK3_GGEp0T{gMi<@)s**LAMwz ze|qNx&V_>X*l?PU#znd)cE{~6rR(nz?;F={9wP$3Hb^hLBPW~6`Kw;Q3Z}*W(ilLw zT}?D1{Q^Isc=UIF94oFyH_zhI)v!wX%J5LcBzBxH5@9HHcjoc-;BEBC1i$E z+sOyr6q5mY6x_3Fbnues3}akYJU)$Z$+I9FJYzv3wO_LLY^$jFBpQ)Jnil8|D78$h1@`)HtUt4S-k&d6|zG6~MZsA-k zHH;chMc0~3p;6?OFOKZf4S!c9)Nm?B2xK4=0K?_;IUO}pC>dV>XnJ{b2xe{1;nG_) zgM12&55zV_)qQlg!KBa+;de<}&171Z(6Bb6jG#^l&k0X$U?7-sd)@lQM8kU>OPRZ@ z;{{;)L6&>1)H2?e=alb`r<-0@+`mv7k}7w{lGUPk_euRT%br9rmbXP`g}P(4A|5q+ zJP`CsPJm^~Eij48bVHi8U%iHMYoCl?*Q4Bf#KUzf3l-G*$+vfeHhIry0!uGv@^Oww zu{j4757g|Sk)8lqDP&N(`%SaZvA+8j7nIE6EMjU44dld6KVAvV3}I4Dx?7H)k}me` z=_t27mW(ga?zzhNmhq>lc z=7oRm@;ZU3CMuKOrKVxPVRhOy?f(T@O`CSw+LCerb;E&);O9&cJmH?bdxW7l0$4}6 zHII~N9lgS;g?~3(adj>}v)T0{m~wkw8$`KHX{^z|sOW23q1+~P%*ZQR>S)sK^>(RX z%E6y{USwz+G~SWlo2y+CL-lywKugSG*W!fD+}6^szs`YqWn*2fq0RoS;u}MJucrBV z6x7<)Fi@W{epnIPJd@+RJQSsKsw?bg^^e-Uvni1MSfVfWydHg!(B9hS%^g2iRZk0O z&$RVnWVEc(kdox`hGflFDH+Ob?cIf&cSqdD8dbItQ*PtdidVnDF+s6Y-*0Rc*bLr_ zHmA0}_U_04n);ITEakRFZPF{sWxa~72)}rBi9+1#*d1@u*6iq3BqW9Dhn6X~)V&8g z+O&?0SxmXjUQ4;H!E>Ol$z?od_PJf!1b3yU6;p0KuGal+#+3KA%s?_9{q!CBaPX%` z-_e+LsgX2^9FP~uPmTjgb^%!!7M4(?rc>h~IR>n8WFFdtJ{tvlGP8u`kQ$SxvBpZy zify9AGqbN0RPJWBKe8RZ`nh`d~rNl3*?6*4kvK z$4I);^P+a{#$2`H?6~w{+VFIBmGq%>d}7N~O(>}Q`Iit9jglx#XI20CL7w#5g|=m) z4nH`kd<(ejfd-N-az1s)I_l`|*8FF%z0h7%liHeYfX1#8yF9om2JHL#@CA`j_}PXo z)>LBq4?QDOHD9aRrzOrw#j`^D5hL@v`k$_dS5vh$-=;O%oqg%r!%qu(hoUo! zJ$>os6q?Qso7Y67SKUdo9IqTnSDZKca*n$kBulxa7KesMYCAI+$}P+)2kL8=+WO8a zPMX#C3I>*Po(`RokA{h>J@VPQfz~|dx8}4)2lNb4_Z|)RdtS>PsxvzJJLU?!8B+Xr?_sjGZ=l>}Jdreg{gC|g%m72V zC0WX?nWfx*sPNg=Qf|k{Cm&T^$CTU5;xT%ea(nJ>{cMq9Gs-Oq|A{HLPVu}CQ*JYi zrvQ*m!iJfEHo4}8Wfp}EykdnWbT)TFPw%eeNxtk z4mJ=1*SCQrDcyZFEjbO+G37S(a15s09;=7kW3j5_%p?uk;vE3nVV^9&(kss{{UAz~ z-^$k%lR^8C4_rEl;TRap+#OZ<$a(W@$FotWs_V7bLUsHnVr1(^y(GCiA8( zA{VQ=e^--kHm^!(h@KU@&50XOZWn-bJLOY#J#!|lw%im(%*NL)WgjMHuN>Bo9o*6a zIsj{Nz(3$CXcY_HID!{}I>4E2dqY2Bh~;~Cz~?I9p4fFU;6Z(L?ARx0SJlrdg4kr4 zmtL7)vxMGwmU4^JPKb3=FdwYv)j_c9n#En3Se?OF*1OhE&TgkMarGoVk6&$%0@)Su z>Z1%OqK3CO9YK?sP}D?IxRx2nPDg>|^Bri66EG?Gc!8QLpttYc$E84WW(RN0X(pkj zIe^t3u|(B@DBx05DCiF120~A(aGt>Sz1vJDjmTn8uNG7zIY4v6A!$1)`TP*U1pz60 z4>iOkfer=Bp^%H{IF=K^U=oTx@I%2{ahcOQ01|XmKKvdA|29aEE7sw`JPVB~_wAY@ps8pD(VEEU5LhIp+1#-#dS z9Arhj8a)$%pNmA19NY-QHDo1h1q3s-(|%em$$}eL5SN2%BHO`!^9W ziH$vNnp}sZ`_n5-7uW?`{yMmIE%gi6WqOl?PORT~rG+h&9wngc#Qq&g|DMcjj0+Ic zAsb{C1Q6}tegoNenvpT$atU147P*wTL#l0iUQ86_Is+;D%BgWXll#>)KKS$=#()*w#~<1AL1|tF2GhYHR+b z#B3-PUY9xJ=5On-OS05GTCGt{^ZzI_$mc6VfNYm|vmN*l5_W(AyEiuwHtUKY1I7~) zay~p8g%NU!wJv%UMC9PFBoHR$iZ6wgW{XhxNAUe6av2gl$sCQ5Mxcp*^b!bGkKo`` zFp7iIL>TRK9*t?VnAl4F>dq@75EPywDGKBFcrrxu9kq^f%V9G0@WCjYV8X}S@UTpj zzky#n8bz#7ZYi4JVexs?{FWL>QKlv)Cgw^Wz;G)WV(FNJ-Wl82&HK*Q?wNG$zNbrM zn{>P$i^Tj)r^^VP)W>AQ3ZK?>hiwI3PMoS`$^|KibJ9;AZFT$6{7HqWUqbH$iSR z%=P!qvLVF>J+A|bYE(9yW~q- zOS#1dFOp(;_pd&M48?UWzgi*ZRtvKf&Q{5Ii@aL#`LKSZ@YEeRdNlkGV<3BzT`8yK zjozieJ^80gm~y+hfk^H>sJo^p-R3f??>$Ip zQ~0bSV!q7tZ_qnbrYJAb8NcqAKgAUJulySx@<3_TSQ_kc}Eh{zkr`Jz}6RQi}Yn z6UC89(HEiUlo*|vQs$W`oJS{^bSiQyD@=XB7)aztAk)7Da92Hoo|;s1q8Peoz@+$e z{`UA}kycL67Qi3H#kyEHD4dj67#vVB7~5<&#sDU@^_UGlYsXO3%3Txg-uZC-^m$| zZ@gdmykbt4=Xrf?CgbTP^X?__{7Z&Fm%;2{PcmzUHTUY;e;Az@SXz8l`-ADpZN)$A z=F{QyuwDPU@Y(l6x&2AcO;6`+XfRBk>Gt0C7`=JpB11gAai49sD}f8OW@n2~@ttQ# zUpIg$w+~V<<+f}vTEKyvOJ-kVjcX=de^`;mL?slM2A%fpccL2W+kN>jZ?s5VVG8Bt zM31uDsI9x9(2s1GenG)aZI>8p^NOnaI;JaXoI}az%)aaB%Vpk%u56`&#KvF)iM;}R z+u+r(m^Q;PbA7EBxO7`9-=zKABd>iRzhS@nw1EEO7)Xn%asn*P)7CNQc-gZ=RvRA4 zrY^fCNJ)2%T;h*X&kK)))l6ifd-O&FQD%lFRlTTa1)Zmrus8%(*SpyUqRd3Q|w=Y@9P)XUn}HyIF=*TQO}jxLR|~bvA=gwWu}JAs4F|xma3lU2$o~SX8g3S8a3L?6i1{FDn+R z=P8f(ALU}98RUtk@KxdS_9YW?v2-1E?XB7N+&*V(PE|@;p@{QvGXu%V)!yRZ{54Fu z)yEC{DYr5BEu={D&=;_cBjF~d6;(NMF~2=m|a^+xrMltgp`y7N2Gt*k%F~Z znS6k^eT{c*kZv;eL$R?_Z23lPb$a6^SsFf=T*5S~OQ>0M^~zsMT3g^+tu zEX@to?FEJ=3!#3jQFjrt9<%G?Apt$@#13XboeSIu2-!yhD?CeMsoaZePFlih-hw3L z9~PtYAzPJRpW*C}ON!G)leVt?O~M#!ilnKaL^zVu0J~Kif*^e8HabvmE{V}aOS07^ z!cMX!~+QESm(Xm9!RpA(P3mwatb55KjI?CofmsXZm>7#(QkN=jNUN@sRSGrkJ+M0}+4}`L!Glerge??pfQy-j z4jszO#7}~une&(hIA)CvXo_a^S{bR6KN3&~zd^MK(_qm}4o&&_=gkacMY);?mb;)> z2OOw@V#JaIi+nnz&fDFZPR z0$l%+ORO8sK;_sJDEtRdZYd0k^RYe#gEf*I-li=E6x8MMmk~ocI46XnXjsX7SWmgd zy@pRP>_-BRemnsP1n2{e3;bfejumKvT5~5@9wRO(y#eJ`uuQq7vCv~+m0L`e<>C6a ze2PzF-mQQU{2*{P0l8wzYe|I!liPh(EV@XT0*HCWJ?FnbFZT9iwJ@F(%^D8NP?XRSN7bG?#j^< ztaKEQz+H!NH|hN}7SN`c-h>)Sj}Be~qAdranE8r_VSoRg_~$DEG}usEn`$CeCcHmt z%VD=RIV@lJA4>8mU9328!quvqi7LE3b5HFuZ;( zye#}?bIR=uos|Gd#R;d44_pjyMNXZeIWq^3~VkLI(+{r7=1wnHMF? zuY=@EnjUisO(pd@MFnn!1E!vh_T|=S4wCH?6+-~k<8uca;vm12wB+SWQ&S)uW-;Y< z;(`y#E+s@Xysz)ed^g=(0H#*%=c&=Uj@CSn{Ns4KX}aS6`SYpiRD@44!dS*G#5Tb*j6^j*mV zGX0^^k)F_acaFoiIu)Joe^_|83#Te2yK274XDv)L64<@S;xC4h1}=(tv+e_hyD$x?26YZM6`t?G)wdYW_#YsMJLZSSi*Ou229 zmyEagXtH{|zP%;3cgQnRVQy-f)UHr&o9xH6=UU=>H62ST=rO3FaUo+o%n;krn&Uk0 zRqLFOYVBX^)xASb2V_5n=2p*;EX!Pft*`P2yiVD^@E6a5^`UZ)q)m}xaZQG1&ue3b zA25{LTh(`;xsBeaViBg?Cak60&S4+BtVy5f8lwsolM#hY`Z`Rxb?WPGyD;T8+2~bQ z>x~XcqoO=~nR06hv6xu$!bm%SP_#8Yr%#3alWrJFU$M~+15 za%b&FbDeh0kkSa}+W97Zx-KaLBjOKrY(MO=fwwwi6addh1H;sk7po_9d}R zKPK*N&8vDu2R$puF`hbeUc}vya(k?~22*aQ7|N}9^x2Kptdxx@x7SiISKG z*o1Km-wO6*j9mv>?ofjUK@-XGL zZ-4Xab(Gsey*CO|Zp&IecE#y6H|B15Q^%^c>Kl`(m~u-Kq$Rg1&Qot2E407gu}rzm z(0?GzoRxM=@5Pkc+`&)oyrZq-lWwOmW%h|G2UBi+6-)cqQf}Q&Lmj5vCU|BV=Xys> zH6M@1GL&2NCLN#Hd*FW})g(i4YxGsgtD6r&N8VewDas9V+vVxUcT3wk=M$#tMxVR2 zFkkomtAQ8bihKMYknZUM-rHy(5w$Imkr7}uYn-B|L)k|Cg9dMQE1D~-u20oNM}UE# zho-CjTdznY{9qHxZ6&7MdOwV6Uy!*b_0Md5XEO;HweMD>crJ{uQf?b-&Z-8`43e(6 z@U-B@Q0$>xOu4P6=~U5d%#I|zH{SBW)Z=8uaaYXZi`qUhFqB)~@I>!KZRs-QwhmKn zuho2`xQZ#az0Y%=PVAAJ!sOK+@vO3UD93ZopkgSuyyi!hllp0y2RTihmHm}=XIG_n zaS5Mu`}BY6ng=xu<(6)qcqar?ZkaOBwT|(n-KA}vvkc|-*5;JkF-g;rhv28&8gUWo zF}l!j3+Ud&;V%^hg^yEPmyvYrxea2s9 zx8xM2+}@J0l-nCD<<{c-;o#P$nkbbq$}2z?8jU}cyt0nZO--AOE@57ntYb*bIOqDA zTC?^CS;xp!ef6t!t*bS}dp%=*lT4a_{um_L=`G#gs~MW!a!pj1(d6{XyZetvWi*XtcAwPH`6$G;NTn$7JA7E<7WGF#p(q8?=O@#Elr@O+ zq$uw0mnUD5d`K0cn7l}ZnmZ=)VajbLI6=>ywyHPtY1A4ky|8Ny_)eQJb#xl$!1HRm`JdxSQp%)ERUD-AIu_V2)M#Zj4 zaLDhUqG>F?+c0_CB}^aChpyz{PfD@1EJ7eAqaFLiebZqmnyG)L8&^ z7TFh40os?;T@f>>0rXyU+s~+Wl8}?RKOz`|)O{dj69{%j$k6FUicz;iUGAN|`yqt) zQRKE=TWBB&j<}SRlyWKXbFY?0`R`}?)noDN9?nV)#pUvp^xJ75dr$jMpIqBV$-s-^ z5QTrMwO}{l_W!xPF%H6`XjVIxS@C3KX<3XS6bs(+Fh`c9+|s;IiWabxTg;oq^=|=- z-D1iuU?o}(hQ=`d#CD@29(=?+Sc?sjO{m5ZdYDg zxXg>rJp#SlyNf4~&Fm8kyF8DN~XpfJv_BvV0EzK&^)9jwaYM1c$6aRsOGhEot!eJ!r{e^ki z|IiM6!Y{ZTeCpg#wu%vlpU2K)4q4Vy>K#IH#7O{y&(wNl>Z@2ylv7 zKo=nCwV4&@(d_?Q4xSY@H4p-lPT)GxG(~@=!X*$0eMpFW6&vM4{iI`voH>mZUfWY}Id{+F7!+?HlU3OMu{#R_6gH`A$hFyzg z=vmDPzQ3ZvGUb*CDE-WAfl*QprWf;>O4!W#vkm;pL&JD98p3!?Aqjk@cw(e@TZ^QZ z<>i$XlJEzA1*N-R72^jqiX!QLIhevk@ut_P|7VN(<&u2Ia-FS%SA}7xnUQM~1EHWe zj{PK?eF-aS4;<1uSaVX&^3T~JH&-dqr?Kt@1%MYVfzAo0zvL|0eg6xCd2`FqSfPu-gQH8I*)If9ThjMQ365FQ;xD@um)v%*@wA<7` z8X}8ktI8#n+Lr5OiV@wD>o!MTH1OR9HJF^8pS!$K)vieuU)J#;X7-8Jm*n!QI8Yp8 z3e!(;d-W{^CRf*v-nx=fl4Esh6J?dIns}OTaVffzb{F4mmD8jyE2>*$xL&Q-w#ph6 zb=BU`N)4K5EKaRM*W|K4Dlv9OToW05jjw4}0Y}noh-uf>r^l6?OiC1Yr*%K9&sI3Z z!4H()ne?St7bV+=DYrTLddS-&zWE&T#MZNN+0I<)#+{ae#fgvAz~5>4IHD*9WP79# zlJsRni81Cz9E#p^Kg5*VJuz4!Uj^>t|FUekM|T!U;RLz&;$q#@>&8iyY>x(JUs^H& zH4>8av3SF@UNm;u&&HsMXlI_(5*q<|XT|u;WQ!w(^Qbv=ob6kjYLb~;mc74JJlNAo-+O z)2-0Yxb>n{%B|UDKQrd1+}>-ExDs%~z~%C8ya403C&d-5RSv1HvY__Jd_64U8nh`U zd+J#3V`LyhvgVlKN24vu13|(@m~vYeNVyd=lv^{V+@A6_xX4W@x4L3nlDDxl!_EMO z6*B|%$qeNdy(KFgQG7D_i{?FwN7aw7wXUVy$^$94C(ogas2XxE+^8!V+XPADyf@rM zlI~{t{L7xXd$%OUBk0W1ZrrLiq7$qfQf|3uLrmnS0KHw+&&!?z?~iXFRWXZ)J&qeQ zkgiP-Z#&q$P`LEDR=F*`N+T&;Qu$+$kPG_5@4qPq;X!wFR?7FUEFD@yflV=X#^tLl z&rL)wmR*hO4V7tynvyD^j}Im0y4m>b*U1W@l7Pm9o;kPkgkI57P^k4vhwB?#NvPKA zyONx8WFY)>r?V#Sr2HPn_A{KS%14bUHnX->H(XO*R+Gc%Pp6};Z)+6>jZNXrY`oe?TMUK%59upIXs8Cw$)}0ehV#Qs@x8F5?!6cU1j#qJL+JSa{EqATop^XZOt)U zah4tvDtyC3S9WYlxuqfGU?W4h70=gI%neKw)*N4^+|mzYwrwrtb|uvW=9Sg2{%QB$I{4a(0o_!8O-trXm`E<@63nI*l2&+b;6>SY#G|!I%Zj1>LR)3X%>)97Q{!9;`b+(pU`~ zx$;+0?7}5wIZao?QUsKM`vUu#&_Q`UCqGf0f?P zUs;aXY$sxwFhYan9Il*3lahu#yCYZi#Mya(2T8~G97mQxXS^d`W&QCX0{DUO+ARr({0)&h7Oi8dNbrN8J7yW59pZe|UJx!gVYtj)2B99K{f1H@ShVEWx@ew^T6YR<>QWmU2sx zIDG&smNL9vrf3EaodB+JxLKd$@RljJ{9wv0Q{`50Vk@(GW1|z|;^G|A|C5X*WCB zzQSN?g+gJyEuOVP&WZ!X3C!i3|f&k49Z&0t1C?3a<*kCEkRj)4es)6AfwZBWf^3 zv#Y7e=hM>9D?yT#GCH{@0WyxH!4(w`Zv60RWr;91KHR~z2y3gN8xea(N*0sG%VyL$gEVcS82dma9HlW-l%S&dN4_k_) zm*u9XmsN0AfqfF#oT32v0w!sOL$L{GOcoQHb;hKs5^voMlGA3a!$q(8$q%*9Afo3^ z6z8_SfRlSiENNC&F4waboj-V7xc5y+y5wF(!4GD)bHxbU!$ykXN4T5NQ``Yg}F8zr$7G(+!vOn&dib9A4%v zyF0VL(&(#xWu2E73VqfrXP20>u{|x$VHYVk-xclbBFl{Z{NgsFui|d`K$y{&;bbVc z!b!Q?B}}2O86Bj5tvuC;ii}D{cK@yKeoO@IUq=5SA)U*0hirm@x3yPf^2+%KCyHjpKyi>*x#K>Y=r zVZuBS+4H=)z-stAWRmG{Xl`wLRrrbp3e&56?X6|@ygM#OwK>f2#rRpp#yAK;+q7MB z9yHpsTXwr*^~&Mt8#VbuCPUf{Z+;g;xdls6Rf5NnHCAT-Xaxr;89ZzM=+3`1GC<)# zYq}xQlX$LXQZ?-Dn7%jEwlOD_0IYtGDYwzhGwloxQZ&9tk#=vc8ohnDg;j1DBweah zN>7(DsV2p$-jsL6VEIfX`*vGpO8WUWyBhn`x-V4i3zjcb5OD&{l9G4R=$)`rAV|6b z+@oJby%oHWAo1$S-FE=KH+*gvm!O_HgYCR|0jy)-whNqW`U3$U2u}*XA>IfS*4i^4 zs!iIIvyspzGgt7?@DSG-p{<0_jD;9Zrar}!LRNRD%%%ITy}Y-J&s4T8R|_ZiCL+$#_T9D z7+D*7n+(J@C~A?myISRoHRCU2W*?E!Br>3xe6ZZApVa%y+;ZUE<_4DZu!(_iz#3NH z5QQS}5wHmz3~N1Ks4Ny8t4|V6q{opqb+vFvzDEO4tfa_nRleF(ieivLVR=qHltlv8 z1+GrOE_VW?%8N7^POmCoq)Zof$_quuqTPpukLf0%68MsKM~1oJdxfwIYYG2773ndO z9#iDcYRq*QN$+VW;%M4e4D?E`tQK9I|q^$!c zHx8hEAtzh^$cf{twmuCCmS&|7AB{dq9mD$m{I|=++LiakN2=oEQJ_0}B}%eA0whJd z(?IswC#cVU6A1y!yuSq~UWL_vi`UAxMgaygd<;Ovq8|_9*wCfcGOd*)4Z>JnAi$5Xm9>pg3bs3?%J1dJys= zEjx~GvmC#IaicGVot=s+DZs6Z9dm`@{EkSa$4$rBfKD#$%6mK{WACj0o{Hh7;~^x>gh|1+s33CKXEO~!BS$IY2f zRQIOcgDHE(1dpig%iP(X(vhgwgw;_WWFGClU*yUiO!LHaPiBuDtn$5O2D10`MjevB z+=Ds49Vp}oFqek`zx>59G5eN_kv9Q>e#EPuB#)^tOOQNfDHY%I&~Soc8MS_f8VBu! z#Vauvm&?ODVbG1USG)|mvCs!F0Lcbxqx|1*CV}=%Gb*U$Z{KTU$}N5shV`r0@srbx6?KKa zwi;pF5uapUdCgdU)M*@3H7gVaHnXCW|29C3K?cGN74Rw4XF2Et2n49(hH@#uUkHjz zEzcmoo@zqTWVXh)z;R|z24i~KJE2) z``q{Q>HVYk^Ssaf-FNSE5(ei!@2!tww?j_O*~2*}d+oK>UhBKowk>yUD*ILkVBh$J z+ClnFH%_mR(;LM5A)FOGpin&7*g1hdnK?l4xQ;=X@bEEeAsaeVf@c*Iz+GC+1k7dZ z=3MM=fo5inQO;#8YBLL%rIw4axIEMy*HeX|9Kt&o`uUk@%>+o6MiFeVT;9VdCwOn6WcFe;Q7~s!>aC=@5v&}(yDBlBZ=Flui z{Xv@zL~o*bf`#d_NhuyF|~#T z7p;0Axan z^B{6^0Z^0F5Mdr7$zPE4mSK<(iW5i*aC9svTNn$4<9kwNh4ISN;75iEG30i~NriO0 zp8DWN^8_d>fI!D6$vwoH3l-s6*sZ0w$h=ShrrCh+OuBjb+7Bidfow|Bqf^om+v1G- z?`S_@xU+{v<1i~&O6K6S?foLO3I+s$JY#<6ecg-Oww{+ge;)rtpS}l{`G>)AXoJG` z!4a<|{eh5ME*v@_eEq!(`!|37;uoKNZVKmXUaV02IacNwp3jMGSf*L0*}7=iag%}z zXU<2IZrl7y@e zyQE@iMbu^-S#j~=kFX^jedI55`%1yG03*0EF4yjxzfH~hA47iLl8SM!DV}2?w_mDO zEUieImh-A%<&uo-6H69vyvH{0g}fZZ&kFY~UA$r0Cu=j79JZl58}|C=)#xK?-3HC0 zOu-iL|NPf~{h$9+or&nd6WEOL`(|R7dFAXd#>jt7UPX~lFe{s&bBT1ILs`Bp|7D!h|zW>d) z+hX>yM9-ce0 zx$Y0&@3{<{H^v?P@Qnxk<`{Cjt3TxSN7y=L*?!%HFJ0T3zLMO-P{^Si)(j8iHqaBB zce&*?Y$!w@`O9|639@+hJ}rjaS`WahJ&@Z9^8F$2%XhGl+l_C34tq|DKK=-{zOwGU zw|3nVaw{uacOFA-b(`N~WAn~hEny(H8R!OIJ)(MK9E5;L|MhoV{_DTzz(I|(=*2Cp za45Cwm>`$ho-KYR7VWMlR{ZL#q)!eh+?um**NMxNFn_W9#LIrM=Ge7)x)Ag0JFCT8 z|H1_4CBSFe(y_zu54l~tEawA#>1W%{+t$rzGK<(2FV(E8*!t0nd2g)6nGW`BJL$_; zQAh`wpOM|LcoBZVwhxI|WeXPXtj}AJ{oMSF9~wT8J-=<)^3O8%?{fY4(*B*a zbaUR;jTiPWeL3mXrHc#B7;LYR+|qRw%bhq*?f3K!H;G}mh0B)asrGzP_B|60cgCfM zArKaF``2<7a=SHq^Bb1D>WU@j8pZp)HstBCy-<>W z_D7)hz4EGZ^~TLdR&E=&Zb(qw01<*6 zy^vcR-QE8>^;N-VA6-}gU#UVLA>@_||NZy>L%qcL2#g%J?~OSl z>c7xYFnTgNXA);oV95%dV^#hC^|$_CClJf^#YZHY7H8zh)-B!zn=>+YHe@XRq;SPz z9P_q%Co5ucAmaZme$Xz~GwM(Q$R;I$V|)>XcR3xC6tW>h)lilc7;YBl$$k@D)pqLmwT1#Q*1ie*B+*M}McnbNHlr+?O%F$z_T*jU_A%2v6y%n`D})olQQ8L8Q(Tm%cU8F0mri`ihE;j1k;K)WGRI`Tqx9- z$DDrP^yGRVw;T+)WlSnuj)23%1{Z>RZ?hv~kzk{lGA0+Y2Xc$;ci7U8->73q5m0?{ z6cV1=G><^T@EC&*8W0_F>H9%$8CxU87!`3{Hv1{IGypa}L_I}) zTh<`$-3GxFOtAf7V<9sNhvTsq()c?I^u?iYX%BzGJ1gj}SOcIpU@iwweFhv%z-^AD z5APRzSC3Tc*FkO{+U`KzwI=cCA-4<%!Q}DxzmI^Xq9*m)vGY}wb7Ee0q&)w%A$u1b zk+`-T%v+F!c;~K_ImJ6|TB%a;#M?mt=>Zf*kn(Ug=72z8Fu1sypRm^|H2Kr}d-L|6 z6jYzdfq%&cH_HkbxyZU;tXtk=Y4X_Q`c5wCJ6|&b7ux~tG&py0`^9IcnBJua`(QyR zc2wMHxdCZ7!KQdL#@+((dOdlhvA!xJjti#bU^9n5Tn# z4MsAM+c3Napn5FimJ>Pw`@KEFJm~}(B4Pxr|C$@vQ@eD<(j$F+I$dkv$%nW1ArPNA z<%=r{o?Bdj^W9LgLm3B{l*6zxPg1@(Z? zkp-qmqZ3c3;Jm6-zId zEM0n@7aAIozxd58%Zj{$LmB5STj%E$omjd}ADvBvLBsy4{3S~^=D&W}nX&p6IZw7? zenyt-$F~n3`qIFaJ-keP1Lz|NfM3m%d?JvgD+M*RW*6&K+AfxSJ6CKz%&l2qcyy3krVf@Xcz1A9@6HQxM`$I2eh7i{G3FrSp8N94Dk$5! zWz!ccE^qpBb%lD;iOuvmW!rwuI%CYXZ!zTdlTSD7edQj5)vm^_Yo)Inpa08eADy{ej_zz$UeP|J z6-VcN^ZJpZ;g8T+(NbSuQeTYg;%J%u{XuCMFrkC`razbz9)8j=%I=6v2=`-O z7#tj~9P;ca)ZVHI)<$aQX@>C8nL!89ce|m+IAyX`J7iu08dW7NK#&pN-UxLQiQO>C_C0)(qL}Z(nGQL(iR1qHI!@ z&8k*THx6{!DvT zS#f&vAAV=3|2iUQOvsuMw@ zlV~s=zKZ?S1t7pfpk@$+wNiFmQi_xZ3Zz2t^vA*L-yBpOm0gnA5Oo*U`O0t)+UhvB*)jld5Y!Fp&$c<=a*62W%r$;rd@ z*kwFvf`HZ0pl?Xk+k}yRUx|L^pxgJlkTxFHuQBaC>_u7;k1nc7QC61EOFM>A@Zted zig`RpH(z4as7)LE!z~}kZ-1ISpY#~8Uj3S)pEv@+$-tORAc{+{5sX-X1Q+g>ofi6I z;`;4Ik{%qB_a!iK-B=I<^J8-RY=>flB1L=Pbl&|@(wnJ?HH5H+N6I@WfhS+DA%snw zhCAZ08=-Wc%`7I`BH&A$zUD=W=6KN<%oxCCC8SYJl8JQ3VFRK8lPHvPKQ9T~VZ_jJ z=+A^X6VSh*!_c2`Lx-V{Im5;c8#fMp;BOOf4g4MbV=4^A=Y~y~FqEl30ks}CbSUZq z)n%&PR-$mjp+m=w^YlIxeVf4c!<<0_M?69TsV-8XGN=sTt&hKM`1rk&u{qMs$7@uD zGj>UzKd>+%e}!c23=BukA6sA^u~%DuShDBj*ey_gQUT>-7eA2%ayQe|eYPHgepSHx zdv+vcR`@&fzy8n4|Hf7c7l!yxojP*l$PweGj2tobw<*Dq53J%p2r<1!g($3MFzM4L z1H8CwWBKAwOs-}6Lnr4Kt=o{7{psQAKUv0F7O(hR&TUw>AfxPT%^ zv(;Sy0&2{hCbcJ6LkXX+l38Q2rA|IygAsRNb1CJRrxfCrV2M#G%vMph$z@cOhKGk2 zu!i)K0>)f#K|i(5+n|>N5X?|9DiBELs>{#_R834)VWb=}mog0tS#{Xm`bVTH67USW zz?kMQ5YPOL1_|#&kh(s{;`S{YZ] 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 Date: Fri, 28 Aug 2020 16:21:56 +0200 Subject: [PATCH 104/549] Change link from gitlab-ce -> gitlab-foss - Project 'gitlab-org/gitlab-ce' was moved to 'gitlab-org/gitlab-foss'. --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 1984932f..b127e897 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -19,7 +19,7 @@ One nice touch Bitnami has included is the login screen (accessed by typing alt+ .The Bitnami GitLab virtual machine login screen image::images/bitnami.png[The Bitnami GitLab virtual machine login screen] -For anything else, follow the guidance in the GitLab Community Edition readme, which can be found at https://gitlab.com/gitlab-org/gitlab-ce/tree/master[]. +For anything else, follow the guidance in the GitLab Community Edition readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. There you'll find assistance for installing GitLab using Chef recipes, a virtual machine on Digital Ocean, and RPM and DEB packages (which, as of this writing, are in beta). There's also ``unofficial'' guidance on getting GitLab running with non-standard operating systems and databases, a fully-manual installation script, and many other topics. From fd1366cf7b591ff8b1d3411083f4c737133b80b7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:40:37 +0200 Subject: [PATCH 105/549] Update GitLab installation methods --- book/04-git-server/sections/gitlab.asc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index b127e897..8b07a7b9 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -19,9 +19,16 @@ One nice touch Bitnami has included is the login screen (accessed by typing alt+ .The Bitnami GitLab virtual machine login screen image::images/bitnami.png[The Bitnami GitLab virtual machine login screen] -For anything else, follow the guidance in the GitLab Community Edition readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. -There you'll find assistance for installing GitLab using Chef recipes, a virtual machine on Digital Ocean, and RPM and DEB packages (which, as of this writing, are in beta). -There's also ``unofficial'' guidance on getting GitLab running with non-standard operating systems and databases, a fully-manual installation script, and many other topics. +For anything else, follow the guidance in the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. + +GitLab strongly recommends installing GitLab on your server via the official Omnibus GitLab package. + +The other installation options are: + +* GitLab Helm chart, for use with Kubernetes. +* Dockerized GitLab packages for use with Docker. +* From the source files. +* Cloud provider such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. ==== Administration From 94267b2993f99d0359bedc8158c34aaf02cb84e9 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:42:10 +0200 Subject: [PATCH 106/549] Remove bitnami GitLab stuff --- book/04-git-server/sections/gitlab.asc | 8 -------- images/bitnami.png | Bin 3117 -> 0 bytes 2 files changed, 8 deletions(-) delete mode 100644 images/bitnami.png diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 8b07a7b9..f854f94c 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -11,14 +11,6 @@ This is a bit more complex than the GitWeb option and likely requires more maint GitLab is a database-backed web application, so its installation is a bit more involved than some other Git servers. Fortunately, this process is very well-documented and supported. -There are a few methods you can pursue to install GitLab. -To get something up and running quickly, you can download a virtual machine image or a one-click installer from https://bitnami.com/stack/gitlab[], and tweak the configuration to match your particular environment.(((bitnami))) -One nice touch Bitnami has included is the login screen (accessed by typing alt+→); it tells you the IP address and default username and password for the installed GitLab. - -[[bitnami]] -.The Bitnami GitLab virtual machine login screen -image::images/bitnami.png[The Bitnami GitLab virtual machine login screen] - For anything else, follow the guidance in the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. GitLab strongly recommends installing GitLab on your server via the official Omnibus GitLab package. diff --git a/images/bitnami.png b/images/bitnami.png deleted file mode 100644 index 9852e72764a9a55a1867a82c0a89ee4132351756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3117 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 HrQ81ju`=z# From f8cc0ad5c2984c3341afd9f918460eb7a1628eb9 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:42:48 +0200 Subject: [PATCH 107/549] Fix grammar --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index f854f94c..4b3440bf 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -2,7 +2,7 @@ (((serving repositories, GitLab)))(((GitLab))) GitWeb is pretty simplistic though. -If you're looking for a more modern, fully featured Git server, there are some several open source solutions out there that you can install instead. +If you're looking for a more modern, fully featured Git server, there are several open source solutions out there that you can install instead. As GitLab is one of the more popular ones, we'll cover installing and using it as an example. This is a bit more complex than the GitWeb option and likely requires more maintenance, but it is a much more fully featured option. From a3c6dcc6eff87aa7ffad537beb534ebe44f0f089 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:44:53 +0200 Subject: [PATCH 108/549] Simplify text --- book/04-git-server/sections/gitlab.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 4b3440bf..e1482395 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -2,9 +2,9 @@ (((serving repositories, GitLab)))(((GitLab))) GitWeb is pretty simplistic though. -If you're looking for a more modern, fully featured Git server, there are several open source solutions out there that you can install instead. -As GitLab is one of the more popular ones, we'll cover installing and using it as an example. -This is a bit more complex than the GitWeb option and likely requires more maintenance, but it is a much more fully featured option. +If you're looking for a modern, fully featured Git server, there are several open source solutions out there that you can install instead. +As GitLab is one of the popular ones, we'll cover installing and using it as an example. +This is harder than the GitWeb option and will require more maintenance, but it is a fully featured option. ==== Installation From d04997d7cbe7ffed9b9aa089360c42ef062c268c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:45:37 +0200 Subject: [PATCH 109/549] Remove fluff words --- book/04-git-server/sections/gitlab.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index e1482395..a02cbdf3 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -8,8 +8,8 @@ This is harder than the GitWeb option and will require more maintenance, but it ==== Installation -GitLab is a database-backed web application, so its installation is a bit more involved than some other Git servers. -Fortunately, this process is very well-documented and supported. +GitLab is a database-backed web application, so its installation is more involved than some other Git servers. +Fortunately, this process is well-documented and supported. For anything else, follow the guidance in the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. From 704187ac4cae84a2d579def5d83d5e449a239589 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:46:15 +0200 Subject: [PATCH 110/549] Change an -> the --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index a02cbdf3..9b0f4a06 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -25,7 +25,7 @@ The other installation options are: ==== Administration GitLab's administration interface is accessed over the web. -Simply point your browser to the hostname or IP address where GitLab is installed, and log in as an admin user. +Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the admin user. The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you will be prompted to change as soon as you enter it). Once logged in, click the ``Admin area'' icon in the menu at the top right. From ef862faa2bf8144300c35bd9ceb9a3e2903bf82f Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:47:11 +0200 Subject: [PATCH 111/549] Use active language --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 9b0f4a06..ac9015ec 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -26,7 +26,7 @@ The other installation options are: GitLab's administration interface is accessed over the web. Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the admin user. -The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you will be prompted to change as soon as you enter it). +The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you must change right away). Once logged in, click the ``Admin area'' icon in the menu at the top right. [[gitlab_menu]] From 994693229cfdaf21813996d7b49ebbeb2451a633 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:49:49 +0200 Subject: [PATCH 112/549] Use active voice --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index ac9015ec..076a172f 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -27,7 +27,7 @@ The other installation options are: GitLab's administration interface is accessed over the web. Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the admin user. The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you must change right away). -Once logged in, click the ``Admin area'' icon in the menu at the top right. +After you've logged in, click the ``Admin area'' icon in the menu at the top right. [[gitlab_menu]] .The ``Admin area'' item in the GitLab menu From 5e1f4158295488c81ddc2b1c9acea7da796a76ff Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:54:08 +0200 Subject: [PATCH 113/549] Simplify sentence --- book/04-git-server/sections/gitlab.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 076a172f..0fbcc9c6 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -35,8 +35,8 @@ image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu] ===== Users -Users in GitLab are accounts that correspond to people. -User accounts don't have a lot of complexity; mainly it's a collection of personal information attached to login data. +Everybody using your GitLab server must have an user account. +User accounts are quite simple, they mainly contain personal information attached to login data. Each user account comes with a *namespace*, which is a logical grouping of projects that belong to that user. If the user +jane+ had a project named +project+, that project's url would be `http://server/jane/project`. From 61239e80d0f91240eca60882b1a57c8e6e8c8431 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:54:36 +0200 Subject: [PATCH 114/549] Simplify sentence --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 0fbcc9c6..0c9ca524 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -37,7 +37,7 @@ image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu] Everybody using your GitLab server must have an user account. User accounts are quite simple, they mainly contain personal information attached to login data. -Each user account comes with a *namespace*, which is a logical grouping of projects that belong to that user. +Each user account has a *namespace*, which is a logical grouping of projects that belong to that user. If the user +jane+ had a project named +project+, that project's url would be `http://server/jane/project`. [[gitlab_users]] From 765189d85f0904f66da0ef23afbf03297b6ce373 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:55:26 +0200 Subject: [PATCH 115/549] Use active voice --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 0c9ca524..694061d7 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -44,7 +44,7 @@ If the user +jane+ had a project named +project+, that project's url would be `h .The GitLab user administration screen image::images/gitlab-users.png[The GitLab user administration screen] -Removing a user can be done in two ways. +You can remove a user account in two ways: ``Blocking'' a user prevents them from logging into the GitLab instance, but all of the data under that user's namespace will be preserved, and commits signed with that user's email address will still link back to their profile. ``Destroying'' a user, on the other hand, completely removes them from the database and filesystem. From a51424fa13f4610518ecb6d310a52370acd034b8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:56:41 +0200 Subject: [PATCH 116/549] Use active voice --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 694061d7..2fda70d4 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -49,7 +49,7 @@ You can remove a user account in two ways: ``Destroying'' a user, on the other hand, completely removes them from the database and filesystem. All projects and data in their namespace is removed, and any groups they own will also be removed. -This is obviously a much more permanent and destructive action, and its uses are rare. +This is obviously a much more permanent and destructive action, and you will rarely need it. [[_gitlab_groups_section]] ===== Groups From 9f80ac7cf2171f03926126406ec605913d212502 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:58:32 +0200 Subject: [PATCH 117/549] Replace assemblage -> collection --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 2fda70d4..30538506 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -54,7 +54,7 @@ This is obviously a much more permanent and destructive action, and you will rar [[_gitlab_groups_section]] ===== Groups -A GitLab group is an assemblage of projects, along with data about how users can access those projects. +A GitLab group is a collection of projects, along with data about how users can access those projects. Each group has a project namespace (the same way that users do), so if the group +training+ has a project +materials+, its url would be `http://server/training/materials`. [[gitlab_groups]] From 0c6a979f47c2b3491b0833335b51dfd8cb4d5e0f Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:05:52 +0200 Subject: [PATCH 118/549] Remove also words --- book/04-git-server/sections/gitlab.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 30538506..0499dcf3 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -69,9 +69,9 @@ The types of permissions are too numerous to list here, but GitLab has a helpful A GitLab project roughly corresponds to a single Git repository. Every project belongs to a single namespace, either a user or a group. -If the project belongs to a user, the owner of the project has direct control over who has access to the project; if the project belongs to a group, the group's user-level permissions will also take effect. +If the project belongs to a user, the owner of the project has direct control over who has access to the project; if the project belongs to a group, the group's user-level permissions will take effect. -Every project also has a visibility level, which controls who has read access to that project's pages and repository. +Every project has a visibility level, which controls who has read access to that project's pages and repository. If a project is _Private_, the project's owner must explicitly grant access to specific users. An _Internal_ project is visible to any logged-in user, and a _Public_ project is visible to anyone. Note that this controls both `git fetch` access as well as access to the web UI for that project. From d58de019093d8c873f4f5d8b3ca8ec349b1ef792 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:08:04 +0200 Subject: [PATCH 119/549] Use active voice --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 0499dcf3..7da54e3f 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -85,7 +85,7 @@ This is a great way to connect your Git repositories and GitLab instance to the ==== Basic Usage The first thing you'll want to do with GitLab is create a new project. -This is accomplished by clicking the ``+'' icon on the toolbar. +You can do this by clicking on the ``+'' icon on the toolbar. You'll be asked for the project's name, which namespace it should belong to, and what its visibility level should be. Most of what you specify here isn't permanent, and can be re-adjusted later through the settings interface. Click ``Create Project'', and you're done. From 7a7cc8acfe86652aba64ad54dbb9c90936d16896 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:09:00 +0200 Subject: [PATCH 120/549] Replace re-adjusted -> changed --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 7da54e3f..a6d4187a 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -87,7 +87,7 @@ This is a great way to connect your Git repositories and GitLab instance to the The first thing you'll want to do with GitLab is create a new project. You can do this by clicking on the ``+'' icon on the toolbar. You'll be asked for the project's name, which namespace it should belong to, and what its visibility level should be. -Most of what you specify here isn't permanent, and can be re-adjusted later through the settings interface. +Most of what you specify here isn't permanent, and can be changed later through the settings interface. Click ``Create Project'', and you're done. Once the project exists, you'll probably want to connect it with a local Git repository. From a96aa23c6ec89d7f7605803ce63516342a846393 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:11:47 +0200 Subject: [PATCH 121/549] Replace another -> each --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index a6d4187a..039abca1 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -112,7 +112,7 @@ Each project's home page shows recent activity, and links along the top will lea ==== Working Together -The simplest way of working together on a GitLab project is by giving another user direct push access to the Git repository. +The simplest way of working together on a GitLab project is by giving each user direct push access to the Git repository. You can add a user to a project by going to the ``Members'' section of that project's settings, and associating the new user with an access level (the different access levels are discussed a bit in <<_gitlab_groups_section>>). By giving a user an access level of ``Developer'' or above, that user can push commits and branches directly to the repository with impunity. From d031becc9057e62ef8ca0f9c378cd768e44bf995 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:12:33 +0200 Subject: [PATCH 122/549] Remove unncessary words --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 039abca1..9b923994 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -114,7 +114,7 @@ Each project's home page shows recent activity, and links along the top will lea The simplest way of working together on a GitLab project is by giving each user direct push access to the Git repository. You can add a user to a project by going to the ``Members'' section of that project's settings, and associating the new user with an access level (the different access levels are discussed a bit in <<_gitlab_groups_section>>). -By giving a user an access level of ``Developer'' or above, that user can push commits and branches directly to the repository with impunity. +By giving a user an access level of ``Developer'' or above, that user can push commits and branches directly to the repository. Another, more decoupled way of collaboration is by using merge requests. This feature enables any user that can see a project to contribute to it in a controlled way. From 32cfd2705c5db00c6d22fce3c1ce288fee57721f Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:13:31 +0200 Subject: [PATCH 123/549] Clarify whose fork/copy it is in the text --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 9b923994..179326bb 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -119,7 +119,7 @@ By giving a user an access level of ``Developer'' or above, that user can push c Another, more decoupled way of collaboration is by using merge requests. This feature enables any user that can see a project to contribute to it in a controlled way. Users with direct access can simply create a branch, push commits to it, and open a merge request from their branch back into `master` or any other branch. -Users who don't have push permissions for a repository can ``fork'' it (create their own copy), push commits to _that_ copy, and open a merge request from their fork back to the main project. +Users who don't have push permissions for a repository can ``fork'' it to create their own copy, push commits to _their_ copy, and open a merge request from their fork back to the main project. This model allows the owner to be in full control of what goes into the repository and when, while allowing contributions from untrusted users. Merge requests and issues are the main units of long-lived discussion in GitLab. From d8958d22c1260e25d4ac57bafcff9f5ffbb82cb6 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 17:19:15 +0200 Subject: [PATCH 124/549] Replace accomplished -> done --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 179326bb..48ddc832 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -127,4 +127,4 @@ Each merge request allows a line-by-line discussion of the proposed change (whic Both can be assigned to users, or organized into milestones. This section is focused mainly on the Git-related features of GitLab, but as a mature project, it provides many other features to help your team work together, such as project wikis and system maintenance tools. -One benefit to GitLab is that, once the server is set up and running, you'll rarely need to tweak a configuration file or access the server via SSH; most administration and general usage can be accomplished through the in-browser interface. +One benefit to GitLab is that, once the server is set up and running, you'll rarely need to tweak a configuration file or access the server via SSH; most administration and general usage can be done through the in-browser interface. From d4c73a2241b40c15b3e71a3ba3a20b535664df5a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 21:51:10 +0200 Subject: [PATCH 125/549] Fix sentence --- book/04-git-server/sections/gitlab.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 48ddc832..17d030f2 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -10,8 +10,7 @@ This is harder than the GitWeb option and will require more maintenance, but it GitLab is a database-backed web application, so its installation is more involved than some other Git servers. Fortunately, this process is well-documented and supported. - -For anything else, follow the guidance in the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. +For more information read the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. GitLab strongly recommends installing GitLab on your server via the official Omnibus GitLab package. From d926d592bb58d7cfefe7b0f56be365d66592e007 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 21:55:28 +0200 Subject: [PATCH 126/549] Move sentence to more logical place --- book/04-git-server/sections/gitlab.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 17d030f2..be32569a 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -10,8 +10,6 @@ This is harder than the GitWeb option and will require more maintenance, but it GitLab is a database-backed web application, so its installation is more involved than some other Git servers. Fortunately, this process is well-documented and supported. -For more information read the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. - GitLab strongly recommends installing GitLab on your server via the official Omnibus GitLab package. The other installation options are: @@ -21,6 +19,8 @@ The other installation options are: * From the source files. * Cloud provider such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. +For more information read the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. + ==== Administration GitLab's administration interface is accessed over the web. From 8c1af543c3db39fb0e215efc236d6ef90b692c35 Mon Sep 17 00:00:00 2001 From: Tomas Fiers Date: Fri, 28 Aug 2020 22:44:55 +0200 Subject: [PATCH 127/549] Update nutshell.asc --- book/03-git-branching/sections/nutshell.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 6199b027..3c668cc7 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -3,13 +3,13 @@ To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. -As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. +As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. When you make a commit, Git stores a commit object that contains a pointer to the snapshot of the content you staged. This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. To visualize this, let's assume that you have a directory containing three files, and you stage them all and commit. -Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: +Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: [source,console] ---- From ed86983a50116cc25f9a67e12a472781fe11bf67 Mon Sep 17 00:00:00 2001 From: Tomas Fiers Date: Fri, 28 Aug 2020 22:44:57 +0200 Subject: [PATCH 128/549] Update what-is-git.asc --- book/01-introduction/sections/what-is-git.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 931554a6..80f219ea 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -1,4 +1,4 @@ -[[_what_is_git]] +[[section__what_is_git]] === What is Git? So, what is Git in a nutshell? From 73d65ac4bcaad645ad8e8cb008fe885d223ddf52 Mon Sep 17 00:00:00 2001 From: Tomas Fiers Date: Fri, 28 Aug 2020 22:20:37 +0100 Subject: [PATCH 129/549] Rename section identifier to be consistent --- book/01-introduction/sections/what-is-git.asc | 2 +- book/03-git-branching/sections/nutshell.asc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 80f219ea..8ad20e86 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -1,4 +1,4 @@ -[[section__what_is_git]] +[[what_is_git_section]] === What is Git? So, what is Git in a nutshell? diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 3c668cc7..43461b17 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -3,13 +3,13 @@ To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. -As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. +As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. When you make a commit, Git stores a commit object that contains a pointer to the snapshot of the content you staged. This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. To visualize this, let's assume that you have a directory containing three files, and you stage them all and commit. -Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: +Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: [source,console] ---- From 80d4d20a6beb3ef5b557a1228c0be6d91b0069da Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 28 Aug 2020 23:33:03 +0200 Subject: [PATCH 130/549] Fix invalid style for listing caution block --- book/03-git-branching/sections/branch-management.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 6da716bf..929d1d95 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -77,10 +77,10 @@ $ git branch --no-merged master ==== Changing a branch name [CAUTION] ----- +==== Do not rename branches that are still in use by other collaborators. Do not rename a branch like master/main/mainline without having read the section "Changing the master branch name". ----- +==== Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history. You also want to change the branch name on the remote (GitHub, GitLab, other server). From ea872f883f857ffd5d3c39adaea28082253746cf Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 29 Aug 2020 12:09:17 +0200 Subject: [PATCH 131/549] Explain missing .mobi builds in readme - Add new sentence explaining missing .mobi builds. - Remove .mobi from list of output files - Remove .mobi from bundle exec rake book:build example --- README.asc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.asc b/README.asc index 5f932fb2..98b56846 100644 --- a/README.asc +++ b/README.asc @@ -15,7 +15,8 @@ See link:TRANSLATING.md[the translating document] for more information. == How To Generate the Book You can generate the e-book files manually with Asciidoctor. -If you run the following you _may_ actually get HTML, Epub, Mobi and PDF output files: +We used to be able to build .mobi files (Kindle), but cannot do so now, see #1496 for more information. +If you run the following you _may_ actually get HTML, Epub and PDF output files: ---- $ bundle install @@ -24,8 +25,6 @@ Converting to HTML... -- HTML output at progit.html Converting to EPub... -- Epub output at progit.epub -Converting to Mobi (kf8)... - -- Mobi output at progit.mobi Converting to PDF... -- PDF output at progit.pdf ---- From e3ad770bd60f20909c73a76fb25e81a97693edf4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 29 Aug 2020 12:21:04 +0200 Subject: [PATCH 132/549] Make link prettier --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index be32569a..b88024cb 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -19,7 +19,7 @@ The other installation options are: * From the source files. * Cloud provider such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. -For more information read the GitLab Community Edition (CE) readme, which can be found at https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[]. +For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme]. ==== Administration From da5d9a32f7f862b661f35405891df4c890b9aff0 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 29 Aug 2020 13:40:08 +0200 Subject: [PATCH 133/549] Add caution: don't amend pushed commits --- book/02-git-basics/sections/undoing.asc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 8d6403ac..c84ee48e 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -39,6 +39,12 @@ Effectively, it's as if the previous commit never happened, and it won't show up The obvious value to amending commits is to make minor improvements to your last commit, without cluttering your repository history with commit messages of the form, ``Oops, forgot to add a file'' or ``Darn, fixing a typo in last commit''. ==== +[CAUTION] +==== +Only amend commits that are still local and have not been pushed somewhere. +Amending previously pushed commits, and force pushing the branch will cause problems for your collaborators. +==== + [[_unstaging]] ==== Unstaging a Staged File From 4fa9c9a6d8ba1b1391ed88819ef3c8c125e396a5 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 6 Sep 2020 10:27:45 +0300 Subject: [PATCH 134/549] Update special block format --- book/03-git-branching/sections/branch-management.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 929d1d95..d70d4091 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -177,6 +177,7 @@ Now you have a few more tasks in front of you to complete the transition: * Close or merge any pull requests that target the old branch. After you've done all these tasks, and are certain the main branch performs just as the _master_ branch, you can delete the _master_ branch: + [source, console] ---- $ git push origin --delete master From c4f9122d3ee27d6cc9c2bb5b27e48bfb51f701dc Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 6 Sep 2020 10:29:06 +0300 Subject: [PATCH 135/549] Update changed commit message in text --- book/07-git-tools/sections/rewriting-history.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 12cedbf9..cbaee261 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -172,7 +172,7 @@ Each time, Git will stop, let you amend the commit, and continue when you're fin ==== Reordering Commits You can also use interactive rebases to reorder or remove commits entirely. -If you want to remove the ``added cat-file'' commit and change the order in which the other two commits are introduced, you can change the rebase script from this: +If you want to remove the ``Add cat-file'' commit and change the order in which the other two commits are introduced, you can change the rebase script from this: [source,console] ---- @@ -190,7 +190,7 @@ pick f7f3f6d Change my name a bit ---- When you save and exit the editor, Git rewinds your branch to the parent of these commits, applies `310154e` and then `f7f3f6d`, and then stops. -You effectively change the order of those commits and remove the ``added cat-file'' commit completely. +You effectively change the order of those commits and remove the ``Add cat-file'' commit completely. [[_squashing]] ==== Squashing Commits From 78eae3c65443eae9313b08a4c302e9503ce6b653 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 6 Sep 2020 10:36:21 +0300 Subject: [PATCH 136/549] Fix an article --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 602efe95..89a908a7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -15,7 +15,7 @@ List related issues. Provide the necessary context to understand the changes you made. -Are you fixing a issue with this pull-request? +Are you fixing an issue with this pull-request? Use the "Fixes" keyword, to close the issue automatically after your work is merged. Fixes #123 From fd1a924124dde6edfc2e8eea3f071a401992ac7e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 7 Sep 2020 17:58:16 +0200 Subject: [PATCH 137/549] Change CAUTION -> NOTE --- book/02-git-basics/sections/undoing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index c84ee48e..0fa50847 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -39,7 +39,7 @@ Effectively, it's as if the previous commit never happened, and it won't show up The obvious value to amending commits is to make minor improvements to your last commit, without cluttering your repository history with commit messages of the form, ``Oops, forgot to add a file'' or ``Darn, fixing a typo in last commit''. ==== -[CAUTION] +[NOTE] ==== Only amend commits that are still local and have not been pushed somewhere. Amending previously pushed commits, and force pushing the branch will cause problems for your collaborators. From bcbc27adbcbfca1c1fc67b3f039cdd566c48397c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 7 Sep 2020 18:12:35 +0200 Subject: [PATCH 138/549] Remove comma and add link to rebase_peril --- book/02-git-basics/sections/undoing.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 0fa50847..0589ea9e 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -42,7 +42,8 @@ The obvious value to amending commits is to make minor improvements to your last [NOTE] ==== Only amend commits that are still local and have not been pushed somewhere. -Amending previously pushed commits, and force pushing the branch will cause problems for your collaborators. +Amending previously pushed commits and force pushing the branch will cause problems for your collaborators. +For more on what happens when you do this and how to recover if you're on the receiving end read <<_rebase_peril>>. ==== [[_unstaging]] From edf81f0ce5d0f05e4e6551696b32115503ec65bc Mon Sep 17 00:00:00 2001 From: Vegar Vikan Date: Wed, 9 Sep 2020 17:02:34 +0200 Subject: [PATCH 139/549] Add note in Revision Selection about PowerShell I've been struggling with the revision selection syntax `HEAD@{...}` and finally found out it's because of curly braces special meaning in PowerShell. I noticed the NOTE on special handling of caret in cmd.exe on Windows. A similar note about curly braces in PowerShell would have saved me some time and I hope to save fellow developers some time by adding in such a note. Thanks to HonkingGoose for his minor changes. Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- .../07-git-tools/sections/revision-selection.asc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 9583b15e..77f92831 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -180,6 +180,22 @@ Running `git show HEAD@{2.months.ago}` will show you the matching commit only if If you have a UNIX or Linux background, you can think of the reflog as Git's version of shell history, which emphasizes that what's there is clearly relevant only for you and your ``session'', and has nothing to do with anyone else who might be working on the same machine. ==== +[NOTE] +.Escaping brackets in PowerShell +==== + +On Windows in `powershell.exe`, `{` and `}` are special characters and needs to be treated differently. +You can either escape them with a backtick ` or put the commit reference in quotes: + +[source,console] +---- +$ git show HEAD@{0} # will NOT work on Windows +$ git show HEAD@`{0`} # OK +$ git show "HEAD@{0}" # OK +---- + +==== + ==== Ancestry References The other main way to specify a commit is via its ancestry. From e16291cded087f73bf83c571aaf20613fabf99cd Mon Sep 17 00:00:00 2001 From: Vegar Vikan Date: Wed, 9 Sep 2020 17:48:38 +0200 Subject: [PATCH 140/549] Improve language Correct usage of braces vs brackets Rewrite first sentence to flow better, and to explain the braces situation a bit better. Remove "either" from the second sentence, as I think the sentence is better without that word. The "or" in the middle of the sentence makes it clear that there are two choices to deal with the bracket issue. So "either" is not really adding value. Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- book/07-git-tools/sections/revision-selection.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 77f92831..9c190c76 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -181,11 +181,11 @@ If you have a UNIX or Linux background, you can think of the reflog as Git's ver ==== [NOTE] -.Escaping brackets in PowerShell +.Escaping braces in PowerShell ==== -On Windows in `powershell.exe`, `{` and `}` are special characters and needs to be treated differently. -You can either escape them with a backtick ` or put the commit reference in quotes: +When using PowerShell on Windows, braces like `{` and `}` are special characters and must be escaped. +You can escape them with a backtick ` or put the commit reference in quotes: [source,console] ---- From b9129edfef00776559f9f30f8db46f227aba4c07 Mon Sep 17 00:00:00 2001 From: Vegar Vikan Date: Wed, 9 Sep 2020 18:13:24 +0200 Subject: [PATCH 141/549] Remove reference to Windows PowerShell on Linux requires the same escapeing of braces as on Windows Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- book/07-git-tools/sections/revision-selection.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 9c190c76..17b5ab60 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -184,12 +184,12 @@ If you have a UNIX or Linux background, you can think of the reflog as Git's ver .Escaping braces in PowerShell ==== -When using PowerShell on Windows, braces like `{` and `}` are special characters and must be escaped. +When using PowerShell, braces like `{` and `}` are special characters and must be escaped. You can escape them with a backtick ` or put the commit reference in quotes: [source,console] ---- -$ git show HEAD@{0} # will NOT work on Windows +$ git show HEAD@{0} # will NOT work $ git show HEAD@`{0`} # OK $ git show "HEAD@{0}" # OK ---- From 2ebbc765e41171e3787a73f7a70e684ef5b9c7a6 Mon Sep 17 00:00:00 2001 From: Junjie Yuan Date: Fri, 11 Sep 2020 18:41:42 +0800 Subject: [PATCH 142/549] add example for "git log -- path" Signed-off-by: Junjie Yuan --- book/02-git-basics/sections/viewing-history.asc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 0c3b796b..72a5117e 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -262,7 +262,12 @@ $ git log -S function_name The last really useful option to pass to `git log` as a filter is a path. If you specify a directory or file name, you can limit the log output to commits that introduced a change to those files. -This is always the last option and is generally preceded by double dashes (`--`) to separate the paths from the options. +This is always the last option and is generally preceded by double dashes (`--`) to separate the paths from the options: + +[source,console] +---- +$ git log -- path/to/file +---- In <> we'll list these and a few other common options for your reference. From 68bd8fbeef7ef86f86800af627167cb9187eb26c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 11 Sep 2020 21:59:16 +0200 Subject: [PATCH 143/549] Add tip: use verbose CLI flags for shared scripts --- book/08-customizing-git/sections/hooks.asc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/book/08-customizing-git/sections/hooks.asc b/book/08-customizing-git/sections/hooks.asc index fa80387a..a0140c01 100644 --- a/book/08-customizing-git/sections/hooks.asc +++ b/book/08-customizing-git/sections/hooks.asc @@ -124,3 +124,8 @@ The `post-receive` hook runs after the entire process is completed and can be us It takes the same stdin data as the `pre-receive` hook. Examples include emailing a list, notifying a continuous integration server, or updating a ticket-tracking system – you can even parse the commit messages to see if any tickets need to be opened, modified, or closed. This script can't stop the push process, but the client doesn't disconnect until it has completed, so be careful if you try to do anything that may take a long time. + +[TIP] +==== +If you're writing a script/hook that others will need to read, prefer the long versions of command-line flags; six months from now you'll thank us. +==== From 75a2a5a539bd4c229cbeb9a1ba8d6756d56ce962 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 29 Aug 2020 14:09:25 +0200 Subject: [PATCH 144/549] Create section git restore --- book/02-git-basics/sections/undoing.asc | 80 +++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 0589ea9e..6c07393b 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -146,3 +146,83 @@ If you would like to keep the changes you've made to that file but still need to Remember, anything that is _committed_ in Git can almost always be recovered. Even commits that were on branches that were deleted or commits that were overwritten with an `--amend` commit can be recovered (see <> for data recovery). However, anything you lose that was never committed is likely never to be seen again. + +[[undoing_git_restore]] +==== Undoing things with git restore + +Git version 2.25.0 introduced a new command: `git restore`. +It's basically a alternative to `git reset` which we just covered. +From Git version 2.25.0 onwards, Git will use `git restore` instead of `git reset` for many undo operations. + +Let's retrace our steps, and undo things with `git restore` instead of `git reset`. + +===== Unstaging a Staged File with git restore + +The next two sections demonstrate how to work with your staging area and working directory changes with `git restore`. +The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. +For example, let's say you've changed two files and want to commit them as two separate changes, but you accidentally type `git add *` and stage them both. +How can you unstage one of the two? +The `git status` command reminds you: + +[source,console] +---- +$ git add * +$ git status +On branch master +Changes to be committed: + (use "git restore --staged ..." to unstage) + modified: CONTRIBUTING.md + renamed: README.md -> README + +---- + +Right below the ``Changes to be committed'' text, it says use `git restore --staged ...` to unstage. +So, let's use that advice to unstage the `CONTRIBUTING.md` file: + +[source,console] +---- +$ git restore --staged CONTRIBUTING.md +$ git status +On branch master +Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +---- + +The `CONTRIBUTING.md` file is modified but once again unstaged. + +===== Unmodifying a Modified File with git restore + +What if you realize that you don't want to keep your changes to the `CONTRIBUTING.md` file? +How can you easily unmodify it -- revert it back to what it looked like when you last committed (or initially cloned, or however you got it into your working directory)? +Luckily, `git status` tells you how to do that, too. +In the last example output, the unstaged area looks like this: + +[source,console] +---- +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: CONTRIBUTING.md + +---- + +It tells you pretty explicitly how to discard the changes you've made. +Let's do what it says: + +[source,console] +---- +$ git restore CONTRIBUTING.md +$ git status +On branch master +Changes to be committed: + (use "git restore --staged ..." to unstage) + renamed: README.md -> README + +---- \ No newline at end of file From 2946b8a4348e2e3b747ea7bd394e0405a9760dab Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 12 Sep 2020 10:01:08 +0200 Subject: [PATCH 145/549] Add warning about `git restore --staged -- ` Warn readers not to throw away their local work without meaning to. This is basically a copy/paste and adaptation of the warning we give about `git checkout -- `. --- book/02-git-basics/sections/undoing.asc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 6c07393b..cd3b80c9 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -225,4 +225,11 @@ Changes to be committed: (use "git restore --staged ..." to unstage) renamed: README.md -> README ----- \ No newline at end of file +---- + +[IMPORTANT] +===== +It's important to understand that `git restore --staged ` is a dangerous command. +Any local changes you made to that file are gone -- Git just replaced that file with the most recently-committed version. +Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. +===== From e8fda6245158f50859871dbf92ad227551a4e779 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 12 Sep 2020 11:27:03 +0200 Subject: [PATCH 146/549] Create note for `git switch` Git 2.23 comes with the experimental command `git switch`. This commit adds a note with the most common operations that readers will want to use `git switch` for. --- book/03-git-branching/sections/nutshell.asc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 43461b17..3818d939 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -198,3 +198,12 @@ Let's see why you should do so. ==== It's typical to create a new branch and want to switch to that new branch at the same time -- this can be done in one operation with `git checkout -b `. ==== + +[NOTE] +==== +From Git version 2.23 onwards you can use `git switch` instead of `git checkout` to: + +- Switch to an existing branch: `git switch testing-branch`. +- Create a new branch and switch to it: `git switch -c new-branch`. The `-c` flag stands for create, you can also use the full flag: `--create`. +- Return to your previously checked out branch: `git switch -`. +==== From 1dd9de7b1289fbb518165ce2be93f30ba349762d Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 18 Sep 2020 11:17:20 +0200 Subject: [PATCH 147/549] Add tip to point to the official GitHub CLI tool The GitHub CLI lets you do your GitHub work from within the command line. GitHub has just released version 1.0, and so we can "recommend" it to our readers. --- book/06-github/sections/2-contributing.asc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index cfec4c79..e39d5d4e 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -49,6 +49,13 @@ This is basically the Integration Manager workflow covered in < Date: Fri, 2 Oct 2020 11:01:45 +0200 Subject: [PATCH 148/549] Fix warning about `git restore` command --- book/02-git-basics/sections/undoing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index cd3b80c9..957cefd7 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -229,7 +229,7 @@ Changes to be committed: [IMPORTANT] ===== -It's important to understand that `git restore --staged ` is a dangerous command. +It's important to understand that `git restore ` is a dangerous command. Any local changes you made to that file are gone -- Git just replaced that file with the most recently-committed version. Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. ===== From 61fa81e3f47859d123ad0b8887ff2d7a82288264 Mon Sep 17 00:00:00 2001 From: Sean Jacobs Date: Mon, 5 Oct 2020 23:02:14 +1100 Subject: [PATCH 149/549] removed `--add` from TextEdit core.editor config Removed the erroneous --add parameter from the example core.editor config used for TextEdit. --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 65077c19..7c8241df 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -62,7 +62,7 @@ Accompanying the configuration instructions in <>, |Scratch (Linux)|`git config --global core.editor "scratch-text-editor"` |Sublime Text (macOS) |`git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait"` |Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w"` (Also see note below) -|TextEdit (macOS)|`git config --global --add core.editor "open -W -n"` +|TextEdit (macOS)|`git config --global core.editor "open -W -n"` |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |UltraEdit (Windows 64-bit) | `git config --global core.editor Uedit32` From 7075934effa5d33c82c93aab0e58a0bb08149236 Mon Sep 17 00:00:00 2001 From: Ardavast Dayleryan Date: Sat, 17 Oct 2020 18:08:11 +0300 Subject: [PATCH 150/549] Fix typo in section 2.4 --- book/02-git-basics/sections/undoing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 957cefd7..dabc510b 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -151,7 +151,7 @@ However, anything you lose that was never committed is likely never to be seen a ==== Undoing things with git restore Git version 2.25.0 introduced a new command: `git restore`. -It's basically a alternative to `git reset` which we just covered. +It's basically an alternative to `git reset` which we just covered. From Git version 2.25.0 onwards, Git will use `git restore` instead of `git reset` for many undo operations. Let's retrace our steps, and undo things with `git restore` instead of `git reset`. From 11a5199d4109b86bd8c769beba0ee96b667810a2 Mon Sep 17 00:00:00 2001 From: "Stuart P. Bentley" Date: Tue, 20 Oct 2020 18:41:54 -0700 Subject: [PATCH 151/549] Add note that SHA-1 actually has been broken --- book/07-git-tools/sections/revision-selection.asc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 17b5ab60..4d216e28 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -84,6 +84,8 @@ Here's an example to give you an idea of what it would take to get a SHA-1 colli If all 6.5 billion humans on Earth were programming, and every second, each one was producing code that was the equivalent of the entire Linux kernel history (6.5 million Git objects) and pushing it into one enormous Git repository, it would take roughly 2 years until that repository contained enough objects to have a 50% probability of a single SHA-1 object collision. Thus, a SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. +That being said, with hundreds and thousands of dollars' worth of computing power dedicated to the task, https://shattered.io/[two files with the same SHA-1 hash were produced in 2017]. Git has code https://github.com/git/git/blob/master/sha1dc/sha1.c[specifically to protect against this scenario]. + ==== [[_branch_references]] From 252d639919337c589000f7421364ccbb8675ea5f Mon Sep 17 00:00:00 2001 From: "Stuart P. Bentley" Date: Thu, 22 Oct 2020 11:08:46 -0700 Subject: [PATCH 152/549] Update book/07-git-tools/sections/revision-selection.asc Co-authored-by: Ben Straub --- book/07-git-tools/sections/revision-selection.asc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 4d216e28..66ee0057 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -82,10 +82,13 @@ That's 1,200 times the number of grains of sand on the earth. Here's an example to give you an idea of what it would take to get a SHA-1 collision. If all 6.5 billion humans on Earth were programming, and every second, each one was producing code that was the equivalent of the entire Linux kernel history (6.5 million Git objects) and pushing it into one enormous Git repository, it would take roughly 2 years until that repository contained enough objects to have a 50% probability of a single SHA-1 object collision. -Thus, a SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. - -That being said, with hundreds and thousands of dollars' worth of computing power dedicated to the task, https://shattered.io/[two files with the same SHA-1 hash were produced in 2017]. Git has code https://github.com/git/git/blob/master/sha1dc/sha1.c[specifically to protect against this scenario]. +Thus, an organic SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. +[NOTE] +==== +There have been attempts to create a synthetic collision attack, including one documented at https://shattered.io/[]. +Git is moving towards using SHA256 as the default hashing algorithm, which is much more resilient to collision attacks, and has code in place to help mitigate this attack (although it cannot completely eliminate it). +==== ==== [[_branch_references]] From 796ef2fe64f918ecd8e40d4056d67f33dc17d75f Mon Sep 17 00:00:00 2001 From: "Stuart P. Bentley" Date: Fri, 23 Oct 2020 10:43:12 -0700 Subject: [PATCH 153/549] Update book/07-git-tools/sections/revision-selection.asc Co-authored-by: Ben Straub --- book/07-git-tools/sections/revision-selection.asc | 3 --- 1 file changed, 3 deletions(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 66ee0057..adb100ce 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -84,12 +84,9 @@ Here's an example to give you an idea of what it would take to get a SHA-1 colli If all 6.5 billion humans on Earth were programming, and every second, each one was producing code that was the equivalent of the entire Linux kernel history (6.5 million Git objects) and pushing it into one enormous Git repository, it would take roughly 2 years until that repository contained enough objects to have a 50% probability of a single SHA-1 object collision. Thus, an organic SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. -[NOTE] -==== There have been attempts to create a synthetic collision attack, including one documented at https://shattered.io/[]. Git is moving towards using SHA256 as the default hashing algorithm, which is much more resilient to collision attacks, and has code in place to help mitigate this attack (although it cannot completely eliminate it). ==== -==== [[_branch_references]] ==== Branch References From 1b95a959f620fdcb81d66d016f5ed6944fee3da1 Mon Sep 17 00:00:00 2001 From: "Stuart P. Bentley" Date: Fri, 23 Oct 2020 10:52:41 -0700 Subject: [PATCH 154/549] "Attempts to create" -> "It is possible" --- book/07-git-tools/sections/revision-selection.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index adb100ce..710b4863 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -84,7 +84,7 @@ Here's an example to give you an idea of what it would take to get a SHA-1 colli If all 6.5 billion humans on Earth were programming, and every second, each one was producing code that was the equivalent of the entire Linux kernel history (6.5 million Git objects) and pushing it into one enormous Git repository, it would take roughly 2 years until that repository contained enough objects to have a 50% probability of a single SHA-1 object collision. Thus, an organic SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. -There have been attempts to create a synthetic collision attack, including one documented at https://shattered.io/[]. +If you dedicate several thousands of dollars' worth of computing power to it, it is possible to synthesize two files with the same hash, as proven on https://shattered.io/[] in February 2017. Git is moving towards using SHA256 as the default hashing algorithm, which is much more resilient to collision attacks, and has code in place to help mitigate this attack (although it cannot completely eliminate it). ==== From 714da4b2ad20f12e94ec7d5715607445259ea2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Avila?= Date: Wed, 16 Sep 2020 21:18:38 +0200 Subject: [PATCH 155/549] Migrate to Asciidoctor 2.0.11 - Bump Asciidoctor from 1.5.6.2 to 2.0.11 - Change style to new specifications. - Pin dependencies - Fix unintended highlighting of text - Undo rake script on Markdown file - Undo rake script on Ruby file Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- C-git-commands.asc | 10 +-- Gemfile | 20 +++--- TRANSLATING.md | 2 +- .../sections/about-version-control.asc | 2 +- .../sections/first-time-setup.asc | 2 +- book/01-introduction/sections/help.asc | 2 +- book/01-introduction/sections/what-is-git.asc | 2 +- .../sections/recording-changes.asc | 12 ++-- book/02-git-basics/sections/remotes.asc | 6 +- book/02-git-basics/sections/tagging.asc | 6 +- book/02-git-basics/sections/undoing.asc | 6 +- .../sections/viewing-history.asc | 6 +- .../sections/basic-branching-and-merging.asc | 6 +- book/03-git-branching/sections/nutshell.asc | 2 +- book/03-git-branching/sections/rebasing.asc | 4 +- .../sections/remote-branches.asc | 18 ++--- book/03-git-branching/sections/workflows.asc | 4 +- book/04-git-server/sections/git-daemon.asc | 2 +- book/04-git-server/sections/gitlab.asc | 22 +++--- book/04-git-server/sections/protocols.asc | 2 +- book/04-git-server/sections/smart-http.asc | 2 +- .../sections/contributing.asc | 14 ++-- .../sections/distributed-workflows.asc | 2 +- .../sections/maintaining.asc | 6 +- .../sections/1-setting-up-account.asc | 24 +++---- book/06-github/sections/2-contributing.asc | 40 +++++------ book/06-github/sections/3-maintaining.asc | 70 +++++++++---------- .../sections/4-managing-organization.asc | 12 ++-- book/06-github/sections/5-scripting.asc | 22 +++--- .../sections/advanced-merging.asc | 32 ++++----- book/07-git-tools/sections/bundling.asc | 2 +- book/07-git-tools/sections/credentials.asc | 24 +++---- .../sections/interactive-staging.asc | 2 +- book/07-git-tools/sections/rerere.asc | 6 +- book/07-git-tools/sections/reset.asc | 18 ++--- .../sections/revision-selection.asc | 14 ++-- .../sections/rewriting-history.asc | 14 ++-- book/07-git-tools/sections/searching.asc | 4 +- .../sections/stashing-cleaning.asc | 6 +- book/07-git-tools/sections/submodules.asc | 30 ++++---- .../sections/attributes.asc | 24 +++---- book/08-customizing-git/sections/config.asc | 4 +- book/08-customizing-git/sections/policy.asc | 4 +- .../sections/client-hg.asc | 18 ++--- .../sections/client-p4.asc | 16 ++--- .../sections/client-svn.asc | 2 +- .../sections/import-custom.asc | 2 +- .../sections/import-svn.asc | 2 +- .../10-git-internals/sections/environment.asc | 18 ++--- .../10-git-internals/sections/maintenance.asc | 6 +- book/10-git-internals/sections/objects.asc | 4 +- book/10-git-internals/sections/packfiles.asc | 6 +- .../sections/plumbing-porcelain.asc | 2 +- book/10-git-internals/sections/refs.asc | 2 +- .../sections/transfer-protocols.asc | 10 +-- .../sections/guis.asc | 26 +++---- .../sections/visualstudio.asc | 2 +- book/B-embedding-git/sections/jgit.asc | 2 +- book/B-embedding-git/sections/libgit2.asc | 6 +- ch03-git-branching.asc | 2 +- ch09-git-and-other-systems.asc | 2 +- progit.asc | 3 +- 62 files changed, 321 insertions(+), 322 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 65077c19..9d0027f8 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -41,7 +41,7 @@ In <> we showed how to set up smudge an Finally, basically the entirety of <> is dedicated to the command. -[[_core_editor]] +[[ch_core_editor]] ==== git config core.editor commands Accompanying the configuration instructions in <>, many editors can be set as follows: @@ -97,7 +97,7 @@ To take a directory and turn it into a new Git repository so you can start versi We first introduce this in <>, where we show creating a brand new repository to start working with. -We talk briefly about how you can change the default branch name from ``master'' in <>. +We talk briefly about how you can change the default branch name from "`master`" in <>. We use this command to create an empty bare repository for a server in <>. @@ -127,7 +127,7 @@ For the basic workflow of staging content and committing it to your history, the ==== git add -The `git add` command adds content from the working directory into the staging area (or ``index'') for the next commit. +The `git add` command adds content from the working directory into the staging area (or "`index`") for the next commit. When the `git commit` command is run, by default it only looks at this staging area, so `git add` is used to craft what exactly you would like your next commit snapshot to look like. This command is an incredibly important command in Git and is mentioned or used dozens of times in this book. @@ -367,7 +367,7 @@ This can help you be very specific about what work you wish to share. ==== git remote The `git remote` command is a management tool for your record of remote repositories. -It allows you to save long URLs as short handles, such as ``origin'' so you don't have to type them out all the time. +It allows you to save long URLs as short handles, such as "`origin`" so you don't have to type them out all the time. You can have several of these and the `git remote` command is used to add, change and delete them. This command is covered in detail in <>, including listing, adding, removing and renaming them. @@ -543,7 +543,7 @@ If you're administering a Git repository or need to fix something in a big way, ==== git gc -The `git gc` command runs ``garbage collection'' on your repository, removing unnecessary files in your database and packing up the remaining files into a more efficient format. +The `git gc` command runs "`garbage collection`" on your repository, removing unnecessary files in your database and packing up the remaining files into a more efficient format. This command normally runs in the background for you, though you can manually run it if you wish. We go over some examples of this in <>. diff --git a/Gemfile b/Gemfile index de8b738a..3321641d 100644 --- a/Gemfile +++ b/Gemfile @@ -1,15 +1,15 @@ source 'https://rubygems.org' -gem 'rake' -gem 'asciidoctor', '1.5.6.2' +gem 'rake', ' 13.0.1' +gem 'asciidoctor', '2.0.11' -gem 'json' -gem 'awesome_print' +gem 'json', '2.3.1' +gem 'awesome_print', '1.8.0' -gem 'asciidoctor-epub3', '~> 1.5.0.alpha.9' -gem 'asciidoctor-pdf', '~> 1.5.0.beta.8' +gem 'asciidoctor-epub3', '1.5.0.alpha.18' +gem 'asciidoctor-pdf', '1.5.3' -gem 'coderay' -gem 'pygments.rb' -gem 'thread_safe' -gem 'epubcheck' +gem 'coderay', '1.1.3' +gem 'pygments.rb', '1.2.1' +gem 'thread_safe', '0.3.6' +gem 'epubcheck', '3.0.1' diff --git a/TRANSLATING.md b/TRANSLATING.md index 2620528c..bc25e368 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -59,7 +59,7 @@ If there is no project for your language, you can start your own translation. Base your work on the second edition of the book, available [here](https://github.com/progit/progit2). To do so: 1. Pick the correct [ISO 639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language. 1. Create a [GitHub organization](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch), for example: `progit2-[your code]` on GitHub. - 1. Create a project ``progit2``. + 1. Create a project `progit2`. 1. Copy the structure of progit/progit2 (this project) in your project and start translating. ### Updating the status of your translation diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 630ee234..c4859fce 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -1,7 +1,7 @@ === About Version Control (((version control))) -What is ``version control'', and why should you care? +What is "`version control`", and why should you care? Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer. diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 0f70a3dc..4f5e29eb 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -75,7 +75,7 @@ $ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -m [NOTE] ==== Vim, Emacs and Notepad++ are popular text editors often used by developers on Unix-based systems like Linux and macOS or a Windows system. -If you are using another editor, or a 32-bit version, please find specific instructions for how to set up your favorite editor with Git in <>. +If you are using another editor, or a 32-bit version, please find specific instructions for how to set up your favorite editor with Git in <>. ==== [WARNING] diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index d5331d83..731ea5ff 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -21,7 +21,7 @@ These commands are nice because you can access them anywhere, even offline. If the manpages and this book aren't enough and you need in-person help, you can try the `#git` or `#github` channel on the Freenode IRC server, which can be found at https://freenode.net[]. These channels are regularly filled with hundreds of people who are all very knowledgeable about Git and are often willing to help.(((IRC))) -In addition, if you don't need the full-blown manpage help, but just need a quick refresher on the available options for a Git command, you can ask for the more concise ``help'' output with the `-h` option, as in: +In addition, if you don't need the full-blown manpage help, but just need a quick refresher on the available options for a Git command, you can ask for the more concise "`help`" output with the `-h` option, as in: [source,console] ---- diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 8ad20e86..23769b95 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -92,7 +92,7 @@ The working tree is a single checkout of one version of the project. These files are pulled out of the compressed database in the Git directory and placed on disk for you to use or modify. The staging area is a file, generally contained in your Git directory, that stores information about what will go into your next commit. -Its technical name in Git parlance is the ``index'', but the phrase ``staging area'' works just as well. +Its technical name in Git parlance is the "`index`", but the phrase "`staging area`" works just as well. The Git directory is where Git stores the metadata and object database for your project. This is the most important part of Git, and it is what is copied when you _clone_ a repository from another computer. diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index eb53cd8e..9187bdab 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -53,7 +53,7 @@ Untracked files: nothing added to commit but untracked files present (use "git add" to track) ---- -You can see that your new `README` file is untracked, because it's under the ``Untracked files'' heading in your status output. +You can see that your new `README` file is untracked, because it's under the "`Untracked files`" heading in your status output. Untracked basically means that Git sees a file you didn't have in the previous snapshot (commit); Git won't start including it in your commit snapshots until you explicitly tell it to do so. It does this so you don't accidentally begin including generated binary files or other files that you did not mean to include. You do want to start including `README`, so let's start tracking the file. @@ -83,7 +83,7 @@ Changes to be committed: ---- -You can tell that it's staged because it's under the ``Changes to be committed'' heading. +You can tell that it's staged because it's under the "`Changes to be committed`" heading. If you commit at this point, the version of the file at the time you ran `git add` is what will be in the subsequent historical snapshot. You may recall that when you ran `git init` earlier, you then ran `git add ` -- that was to begin tracking files in your directory.(((git commands, init)))(((git commands, add))) The `git add` command takes a path name for either a file or a directory; if it's a directory, the command adds all the files in that directory recursively. @@ -111,10 +111,10 @@ Changes not staged for commit: ---- -The `CONTRIBUTING.md` file appears under a section named ``Changes not staged for commit'' -- which means that a file that is tracked has been modified in the working directory but not yet staged. +The `CONTRIBUTING.md` file appears under a section named "`Changes not staged for commit`" -- which means that a file that is tracked has been modified in the working directory but not yet staged. To stage it, you run the `git add` command. `git add` is a multipurpose command -- you use it to begin tracking new files, to stage files, and to do other things like marking merge-conflicted files as resolved. -It may be helpful to think of it more as ``add precisely this content to the next commit'' rather than ``add this file to the project''.(((git commands, add))) +It may be helpful to think of it more as "`add precisely this content to the next commit`" rather than "`add this file to the project`".(((git commands, add))) Let's run `git add` now to stage the `CONTRIBUTING.md` file, and then run `git status` again: [source,console] @@ -212,7 +212,7 @@ $ cat .gitignore *~ ---- -The first line tells Git to ignore any files ending in ``.o'' or ``.a'' -- object and archive files that may be the product of building your code. +The first line tells Git to ignore any files ending in "`.o`" or "`.a`" -- object and archive files that may be the product of building your code. The second line tells Git to ignore all files whose names end with a tilde (`~`), which is used by many text editors such as Emacs to mark temporary files. You may also include a log, tmp, or pid directory; automatically generated documentation; and so on. Setting up a `.gitignore` file for your new repository before you get going is generally a good idea so you don't accidentally commit files that you really don't want in your Git repository. @@ -509,7 +509,7 @@ This is convenient, but be careful; sometimes this flag will cause you to includ To remove a file from Git, you have to remove it from your tracked files (more accurately, remove it from your staging area) and then commit. The `git rm` command does that, and also removes the file from your working directory so you don't see it as an untracked file the next time around. -If you simply remove the file from your working directory, it shows up under the ``Changes not staged for commit'' (that is, _unstaged_) area of your `git status` output: +If you simply remove the file from your working directory, it shows up under the "`Changes not staged for commit`" (that is, _unstaged_) area of your `git status` output: [source,console] ---- diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 4165b0a7..b785ce4b 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -11,8 +11,8 @@ In this section, we'll cover some of these remote-management skills. [NOTE] .Remote repositories can be on your local machine. ==== -It is entirely possible that you can be working with a ``remote'' repository that is, in fact, on the same host you are. -The word ``remote'' does not necessarily imply that the repository is somewhere else on the network or Internet, only that it is elsewhere. +It is entirely possible that you can be working with a "`remote`" repository that is, in fact, on the same host you are. +The word "`remote`" does not necessarily imply that the repository is somewhere else on the network or Internet, only that it is elsewhere. Working with such a remote repository would still involve all the standard pushing, pulling and fetching operations as with any other remote. ==== @@ -118,7 +118,7 @@ $ git fetch The command goes out to that remote project and pulls down all the data from that remote project that you don't have yet. After you do this, you should have references to all the branches from that remote, which you can merge in or inspect at any time. -If you clone a repository, the command automatically adds that remote repository under the name ``origin''. +If you clone a repository, the command automatically adds that remote repository under the name "`origin`". So, `git fetch origin` fetches any new work that has been pushed to that server since you cloned (or last fetched from) it. It's important to note that the `git fetch` command only downloads the data to your local repository -- it doesn't automatically merge it with any of your work or modify what you're currently working on. You have to merge it manually into your work when you're ready. diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index bb67429a..34604c57 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -147,7 +147,7 @@ a6b4c97498bd301d84096da251c98a07c7723e65 Create write support 8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme ---- -Now, suppose you forgot to tag the project at v1.2, which was at the ``Update rakefile'' commit. +Now, suppose you forgot to tag the project at v1.2, which was at the "`Update rakefile`" commit. You can add it after the fact. To tag that commit, you specify the commit checksum (or part of it) at the end of the command: @@ -258,7 +258,7 @@ $ git push origin --delete ==== Checking out Tags -If you want to view the versions of files a tag is pointing to, you can do a `git checkout` of that tag, although this puts your repository in ``detached HEAD'' state, which has some ill side effects: +If you want to view the versions of files a tag is pointing to, you can do a `git checkout` of that tag, although this puts your repository in "`detached HEAD`" state, which has some ill side effects: [source,console] ---- @@ -287,7 +287,7 @@ Previous HEAD position was 99ada87... Merge pull request #89 from schacon/append HEAD is now at df3f601... Add atlas.json and cover image ---- -In ``detached HEAD'' state, if you make changes and then create a commit, the tag will stay the same, but your new commit won't belong to any branch and will be unreachable, except by the exact commit hash. +In "`detached HEAD`" state, if you make changes and then create a commit, the tag will stay the same, but your new commit won't belong to any branch and will be unreachable, except by the exact commit hash. Thus, if you need to make changes -- say you're fixing a bug on an older version, for instance -- you will generally want to create a branch: [source,console] diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index dabc510b..80859d5a 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -36,7 +36,7 @@ You end up with a single commit -- the second commit replaces the results of the It's important to understand that when you're amending your last commit, you're not so much fixing it as _replacing_ it entirely with a new, improved commit that pushes the old commit out of the way and puts the new commit in its place. Effectively, it's as if the previous commit never happened, and it won't show up in your repository history. -The obvious value to amending commits is to make minor improvements to your last commit, without cluttering your repository history with commit messages of the form, ``Oops, forgot to add a file'' or ``Darn, fixing a typo in last commit''. +The obvious value to amending commits is to make minor improvements to your last commit, without cluttering your repository history with commit messages of the form, "`Oops, forgot to add a file`" or "`Darn, fixing a typo in last commit`". ==== [NOTE] @@ -67,7 +67,7 @@ Changes to be committed: modified: CONTRIBUTING.md ---- -Right below the ``Changes to be committed'' text, it says use `git reset HEAD ...` to unstage. +Right below the "`Changes to be committed`" text, it says use `git reset HEAD ...` to unstage. So, let's use that advice to unstage the `CONTRIBUTING.md` file: [source,console] @@ -176,7 +176,7 @@ Changes to be committed: ---- -Right below the ``Changes to be committed'' text, it says use `git restore --staged ...` to unstage. +Right below the "`Changes to be committed`" text, it says use `git restore --staged ...` to unstage. So, let's use that advice to unstage the `CONTRIBUTING.md` file: [source,console] diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 72a5117e..cfddeead 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -4,7 +4,7 @@ After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has happened. The most basic and powerful tool to do this is the `git log` command. -These examples use a very simple project called ``simplegit''. +These examples use a very simple project called "`simplegit`". To get the project, run: [source,console] @@ -218,7 +218,7 @@ Those are only some simple output-formatting options to `git log` -- there are m | `--name-only` | Show the list of files modified after the commit information. | `--name-status` | Show the list of files affected with added/modified/deleted information as well. | `--abbrev-commit` | Show only the first few characters of the SHA-1 checksum instead of all 40. -| `--relative-date` | Display the date in a relative format (for example, ``2 weeks ago'') instead of using the full date format. +| `--relative-date` | Display the date in a relative format (for example, "`2 weeks ago`") instead of using the full date format. | `--graph` | Display an ASCII graph of the branch and merge history beside the log output. | `--pretty` | Show commits in an alternate format. Option values include oneline, short, full, fuller, and format (where you specify your own format). | `--oneline` | Shorthand for `--pretty=oneline --abbrev-commit` used together. @@ -252,7 +252,7 @@ of the `--grep` patterns; however, adding the `--all-match` option further limit just those commits that match _all_ `--grep` patterns. ==== -Another really helpful filter is the `-S` option (colloquially referred to as Git's ``pickaxe'' option), which takes a string and shows only those commits that changed the number of occurrences of that string. +Another really helpful filter is the `-S` option (colloquially referred to as Git's "`pickaxe`" option), which takes a string and shows only those commits that changed the number of occurrences of that string. For instance, if you wanted to find the last commit that added or removed a reference to a specific function, you could call: [source,console] diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index 49f44614..a1aa0179 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -104,9 +104,9 @@ Fast-forward 1 file changed, 2 insertions(+) ---- -You'll notice the phrase ``fast-forward'' in that merge. +You'll notice the phrase "`fast-forward`" in that merge. Because the commit `C4` pointed to by the branch `hotfix` you merged in was directly ahead of the commit `C2` you're on, Git simply moves the pointer forward. -To phrase that another way, when you try to merge one commit with a commit that can be reached by following the first commit's history, Git simplifies things by moving the pointer forward because there is no divergent work to merge together -- this is called a ``fast-forward.'' +To phrase that another way, when you try to merge one commit with a commit that can be reached by following the first commit's history, Git simplifies things by moving the pointer forward because there is no divergent work to merge together -- this is called a "`fast-forward.`" Your change is now in the snapshot of the commit pointed to by the `master` branch, and you can deploy the fix. @@ -265,7 +265,7 @@ Normal merge conflict for 'index.html': Hit return to start merge resolution tool (opendiff): ---- -If you want to use a merge tool other than the default (Git chose `opendiff` in this case because the command was run on a Mac), you can see all the supported tools listed at the top after ``one of the following tools.'' +If you want to use a merge tool other than the default (Git chose `opendiff` in this case because the command was run on a Mac), you can see all the supported tools listed at the top after "`one of the following tools.`" Just type the name of the tool you'd rather use. [NOTE] diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 3818d939..e4e983a1 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -37,7 +37,7 @@ Every time you commit, the `master` branch pointer moves forward automatically. [NOTE] ==== -The ``master'' branch in Git is not a special branch.(((master))) +The "`master`" branch in Git is not a special branch.(((master))) It is exactly like any other branch. The only reason nearly every repository has one is that the `git init` command creates it by default and most people don't bother to change it. ==== diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index 8856f7d0..dfc18dc5 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -80,7 +80,7 @@ You can take the changes on `client` that aren't on `server` (`C8` and `C9`) and $ git rebase --onto master server client ---- -This basically says, ``Take the `client` branch, figure out the patches since it diverged from the `server` branch, and replay these patches in the `client` branch as if it was based directly off the `master` branch instead.'' +This basically says, "`Take the `client` branch, figure out the patches since it diverged from the `server` branch, and replay these patches in the `client` branch as if it was based directly off the `master` branch instead.`" It's a bit complex, but the result is pretty cool. .Rebasing a topic branch off another topic branch @@ -184,7 +184,7 @@ If you *do* find yourself in a situation like this, Git has some further magic t If someone on your team force pushes changes that overwrite work that you've based work on, your challenge is to figure out what is yours and what they've rewritten. It turns out that in addition to the commit SHA-1 checksum, Git also calculates a checksum that is based just on the patch introduced with the commit. -This is called a ``patch-id''. +This is called a "`patch-id`". If you pull down work that was rewritten and rebase it on top of the new commits from your partner, Git can often successfully figure out what is uniquely yours and apply them back on top of the new branch. diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 4062663c..6885f322 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -20,10 +20,10 @@ If you clone from this, Git's `clone` command automatically names it `origin` fo Git also gives you your own local `master` branch starting at the same place as origin's `master` branch, so you have something to work from. [NOTE] -.``origin'' is not special +."`origin`" is not special ==== -Just like the branch name ``master'' does not have any special meaning in Git, neither does ``origin''. -While ``master'' is the default name for a starting branch when you run `git init` which is the only reason it's widely used, ``origin'' is the default name for a remote when you run `git clone`. +Just like the branch name "`master`" does not have any special meaning in Git, neither does "`origin`". +While "`master`" is the default name for a starting branch when you run `git init` which is the only reason it's widely used, "`origin`" is the default name for a remote when you run `git clone`. If you run `git clone -o booyah` instead, then you will have `booyah/master` as your default remote branch.(((origin))) ==== @@ -37,7 +37,7 @@ Also, as long as you stay out of contact with your `origin` server, your `origin image::images/remote-branches-2.png[Local and remote work can diverge] To synchronize your work with a given remote, you run a `git fetch ` command (in our case, `git fetch origin`). -This command looks up which server ``origin'' is (in this case, it's `git.ourcompany.com`), fetches any data from it that you don't yet have, and updates your local database, moving your `origin/master` pointer to its new, more up-to-date position. +This command looks up which server "`origin`" is (in this case, it's `git.ourcompany.com`), fetches any data from it that you don't yet have, and updates your local database, moving your `origin/master` pointer to its new, more up-to-date position. .`git fetch` updates your remote-tracking branches image::images/remote-branches-3.png[`git fetch` updates your remote references] @@ -80,9 +80,9 @@ To https://github.com/schacon/simplegit ---- This is a bit of a shortcut. -Git automatically expands the `serverfix` branchname out to `refs/heads/serverfix:refs/heads/serverfix`, which means, ``Take my `serverfix` local branch and push it to update the remote's `serverfix` branch.'' +Git automatically expands the `serverfix` branchname out to `refs/heads/serverfix:refs/heads/serverfix`, which means, "`Take my `serverfix` local branch and push it to update the remote's `serverfix` branch.`" We'll go over the `refs/heads/` part in detail in <>, but you can generally leave it off. -You can also do `git push origin serverfix:serverfix`, which does the same thing -- it says, ``Take my serverfix and make it the remote's serverfix.'' +You can also do `git push origin serverfix:serverfix`, which does the same thing -- it says, "`Take my serverfix and make it the remote's serverfix.`" You can use this format to push a local branch into a remote branch that is named differently. If you didn't want it to be called `serverfix` on the remote, you could instead run `git push origin serverfix:awesomebranch` to push your local `serverfix` branch to the `awesomebranch` branch on the remote project. @@ -92,7 +92,7 @@ If you didn't want it to be called `serverfix` on the remote, you could instead If you're using an HTTPS URL to push over, the Git server will ask you for your username and password for authentication. By default it will prompt you on the terminal for this information so the server can tell if you're allowed to push. -If you don't want to type it every single time you push, you can set up a ``credential cache''. +If you don't want to type it every single time you push, you can set up a "`credential cache`". The simplest is just to keep it in memory for a few minutes, which you can easily set up by running `git config --global credential.helper cache`. For more information on the various credential caching options available, see <>. @@ -130,7 +130,7 @@ This gives you a local branch that you can work on that starts where `origin/ser ==== Tracking Branches (((branches, tracking)))(((branches, upstream))) -Checking out a local branch from a remote-tracking branch automatically creates what is called a ``tracking branch'' (and the branch it tracks is called an ``upstream branch''). +Checking out a local branch from a remote-tracking branch automatically creates what is called a "`tracking branch`" (and the branch it tracks is called an "`upstream branch`"). Tracking branches are local branches that have a direct relationship to a remote branch. If you're on a tracking branch and type `git pull`, Git automatically knows which server to fetch from and which branch to merge in. @@ -194,7 +194,7 @@ $ git branch -vv testing 5ea463a Try something new ---- -So here we can see that our `iss53` branch is tracking `origin/iss53` and is ``ahead'' by two, meaning that we have two commits locally that are not pushed to the server. +So here we can see that our `iss53` branch is tracking `origin/iss53` and is "`ahead`" by two, meaning that we have two commits locally that are not pushed to the server. We can also see that our `master` branch is tracking `origin/master` and is up to date. Next we can see that our `serverfix` branch is tracking the `server-fix-good` branch on our `teamone` server and is ahead by three and behind by one, meaning that there is one commit on the server we haven't merged in yet and three commits locally that we haven't pushed. Finally we can see that our `testing` branch is not tracking any remote branch. diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index 0c238701..b2063a82 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -22,8 +22,8 @@ image::images/lr-branches-1.png[A linear view of progressive-stability branching It's generally easier to think about them as work silos, where sets of commits graduate to a more stable silo when they're fully tested. [[lrbranch_b]] -.A ``silo'' view of progressive-stability branching -image::images/lr-branches-2.png[A ``silo'' view of progressive-stability branching] +.A "`silo`" view of progressive-stability branching +image::images/lr-branches-2.png[A "`silo`" view of progressive-stability branching] You can keep doing this for several levels of stability. Some larger projects also have a `proposed` or `pu` (proposed updates) branch that has integrated branches that may not be ready to go into the `next` or `master` branch. diff --git a/book/04-git-server/sections/git-daemon.asc b/book/04-git-server/sections/git-daemon.asc index 1bc42577..1fe17237 100644 --- a/book/04-git-server/sections/git-daemon.asc +++ b/book/04-git-server/sections/git-daemon.asc @@ -1,7 +1,7 @@ === Git Daemon (((serving repositories, git protocol))) -Next we'll set up a daemon serving repositories using the ``Git'' protocol. +Next we'll set up a daemon serving repositories using the "`Git`" protocol. This is a common choice for fast, unauthenticated access to your Git data. Remember that since this is not an authenticated service, anything you serve over this protocol is public within its network. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index b88024cb..d81f60b4 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -26,11 +26,11 @@ For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/m GitLab's administration interface is accessed over the web. Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the admin user. The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you must change right away). -After you've logged in, click the ``Admin area'' icon in the menu at the top right. +After you've logged in, click the "`Admin area`" icon in the menu at the top right. [[gitlab_menu]] -.The ``Admin area'' item in the GitLab menu -image::images/gitlab-menu.png[The ``Admin area'' item in the GitLab menu] +.The "`Admin area`" item in the GitLab menu +image::images/gitlab-menu.png[The `"Admin area`" item in the GitLab menu] ===== Users @@ -44,9 +44,9 @@ If the user +jane+ had a project named +project+, that project's url would be `h image::images/gitlab-users.png[The GitLab user administration screen] You can remove a user account in two ways: -``Blocking'' a user prevents them from logging into the GitLab instance, but all of the data under that user's namespace will be preserved, and commits signed with that user's email address will still link back to their profile. +"`Blocking`" a user prevents them from logging into the GitLab instance, but all of the data under that user's namespace will be preserved, and commits signed with that user's email address will still link back to their profile. -``Destroying'' a user, on the other hand, completely removes them from the database and filesystem. +"`Destroying`" a user, on the other hand, completely removes them from the database and filesystem. All projects and data in their namespace is removed, and any groups they own will also be removed. This is obviously a much more permanent and destructive action, and you will rarely need it. @@ -61,7 +61,7 @@ Each group has a project namespace (the same way that users do), so if the group image::images/gitlab-groups.png[The GitLab group administration screen] Each group is associated with a number of users, each of which has a level of permissions for the group's projects and the group itself. -These range from ``Guest'' (issues and chat only) to ``Owner'' (full control of the group, its members, and its projects). +These range from "`Guest`" (issues and chat only) to "`Owner`" (full control of the group, its members, and its projects). The types of permissions are too numerous to list here, but GitLab has a helpful link on the administration screen. ===== Projects @@ -84,10 +84,10 @@ This is a great way to connect your Git repositories and GitLab instance to the ==== Basic Usage The first thing you'll want to do with GitLab is create a new project. -You can do this by clicking on the ``+'' icon on the toolbar. +You can do this by clicking on the "`+`" icon on the toolbar. You'll be asked for the project's name, which namespace it should belong to, and what its visibility level should be. Most of what you specify here isn't permanent, and can be changed later through the settings interface. -Click ``Create Project'', and you're done. +Click "`Create Project`", and you're done. Once the project exists, you'll probably want to connect it with a local Git repository. Each project is accessible over HTTPS or SSH, either of which can be used to configure a Git remote. @@ -112,13 +112,13 @@ Each project's home page shows recent activity, and links along the top will lea ==== Working Together The simplest way of working together on a GitLab project is by giving each user direct push access to the Git repository. -You can add a user to a project by going to the ``Members'' section of that project's settings, and associating the new user with an access level (the different access levels are discussed a bit in <<_gitlab_groups_section>>). -By giving a user an access level of ``Developer'' or above, that user can push commits and branches directly to the repository. +You can add a user to a project by going to the "`Members`" section of that project's settings, and associating the new user with an access level (the different access levels are discussed a bit in <<_gitlab_groups_section>>). +By giving a user an access level of "`Developer`" or above, that user can push commits and branches directly to the repository. Another, more decoupled way of collaboration is by using merge requests. This feature enables any user that can see a project to contribute to it in a controlled way. Users with direct access can simply create a branch, push commits to it, and open a merge request from their branch back into `master` or any other branch. -Users who don't have push permissions for a repository can ``fork'' it to create their own copy, push commits to _their_ copy, and open a merge request from their fork back to the main project. +Users who don't have push permissions for a repository can "`fork`" it to create their own copy, push commits to _their_ copy, and open a merge request from their fork back to the main project. This model allows the owner to be in full control of what goes into the repository and when, while allowing contributions from untrusted users. Merge requests and issues are the main units of long-lived discussion in GitLab. diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index 99d232a7..be0f46e6 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -61,7 +61,7 @@ A local repository is fast only if you have fast access to the data. A repository on NFS is often slower than the repository over SSH on the same server, allowing Git to run off local disks on each system. Finally, this protocol does not protect the repository against accidental damage. -Every user has full shell access to the ``remote'' directory, and there is nothing preventing them from changing or removing internal Git files and corrupting the repository. +Every user has full shell access to the "`remote`" directory, and there is nothing preventing them from changing or removing internal Git files and corrupting the repository. ==== The HTTP Protocols diff --git a/book/04-git-server/sections/smart-http.asc b/book/04-git-server/sections/smart-http.asc index 60bdd309..3e6cc877 100644 --- a/book/04-git-server/sections/smart-http.asc +++ b/book/04-git-server/sections/smart-http.asc @@ -50,7 +50,7 @@ Finally you'll want to tell Apache to allow requests to `git-http-backend` and m ---- That will require you to create a `.htpasswd` file containing the passwords of all the valid users. -Here is an example of adding a ``schacon'' user to the file: +Here is an example of adding a "`schacon`" user to the file: [source,console] ---- diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 7eec6edd..7ca87003 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -103,7 +103,7 @@ In short, do as we say, not as we do. (((contributing, private small team))) The simplest setup you're likely to encounter is a private project with one or two other developers. -``Private,'' in this context, means closed-source -- not accessible to the outside world. +"`Private,`" in this context, means closed-source -- not accessible to the outside world. You and the other developers all have push access to the repository. In this environment, you can follow a workflow similar to what you might do when using Subversion or another centralized system. @@ -330,7 +330,7 @@ image::images/small-team-flow.png[General sequence of events for a simple multip In this next scenario, you'll look at contributor roles in a larger private group. You'll learn how to work in an environment where small groups collaborate on features, after which those team-based contributions are integrated by another party. -Let's say that John and Jessica are working together on one feature (call this ``featureA''), while Jessica and a third developer, Josie, are working on a second (say, ``featureB''). +Let's say that John and Jessica are working together on one feature (call this "`featureA`"), while Jessica and a third developer, Josie, are working on a second (say, "`featureB`"). In this case, the company is using a type of integration-manager workflow where the work of the individual groups is integrated only by certain engineers, and the `master` branch of the main repo can be updated only by those engineers. In this scenario, all work is done in team-based branches and pulled together by the integrators later. @@ -391,7 +391,7 @@ Jessica's repository now looks like this: .Jessica's initial commit history image::images/managed-team-1.png[Jessica's initial commit history] -She's ready to push her work, but gets an email from Josie that a branch with some initial ``featureB'' work on it was already pushed to the server as the `featureBee` branch. +She's ready to push her work, but gets an email from Josie that a branch with some initial "`featureB`" work on it was already pushed to the server as the `featureBee` branch. Jessica needs to merge those changes with her own before she can push her work to the server. Jessica first fetches Josie's changes with `git fetch`: @@ -414,7 +414,7 @@ Merge made by the 'recursive' strategy. 1 files changed, 4 insertions(+), 0 deletions(-) ---- -At this point, Jessica wants to push all of this merged ``featureB'' work back to the server, but she doesn't want to simply push her own `featureB` branch. +At this point, Jessica wants to push all of this merged "`featureB`" work back to the server, but she doesn't want to simply push her own `featureB` branch. Rather, since Josie has already started an upstream `featureBee` branch, Jessica wants to push to _that_ branch, which she does with: [source,console] @@ -525,7 +525,7 @@ $ git commit You may want to use `rebase -i` to squash your work down to a single commit, or rearrange the work in the commits to make the patch easier for the maintainer to review -- see <> for more information about interactive rebasing. ==== -When your branch work is finished and you're ready to contribute it back to the maintainers, go to the original project page and click the ``Fork'' button, creating your own writable fork of the project. +When your branch work is finished and you're ready to contribute it back to the maintainers, go to the original project page and click the "`Fork`" button, creating your own writable fork of the project. You then need to add this repository URL as a new remote of your local repository; in this example, let's call it `myfork`: [source,console] @@ -547,7 +547,7 @@ $ git push -u myfork featureA (((git commands, request-pull))) Once your work has been pushed to your fork of the repository, you need to notify the maintainers of the original project that you have work you'd like them to merge. -This is often called a _pull request_, and you typically generate such a request either via the website -- GitHub has its own ``Pull Request'' mechanism that we'll go over in <> -- or you can run the `git request-pull` command and email the subsequent output to the project maintainer manually. +This is often called a _pull request_, and you typically generate such a request either via the website -- GitHub has its own "`Pull Request`" mechanism that we'll go over in <> -- or you can run the `git request-pull` command and email the subsequent output to the project maintainer manually. The `git request-pull` command takes the base branch into which you want your topic branch pulled and the Git repository URL you want them to pull from, and produces a summary of all the changes you're asking to be pulled. For instance, if Jessica wants to send John a pull request, and she's done two commits on the topic branch she just pushed, she can run this: @@ -706,7 +706,7 @@ You can also edit these patch files to add more information for the email list t If you add text between the `---` line and the beginning of the patch (the `diff --git` line), the developers can read it, but that content is ignored by the patching process. To email this to a mailing list, you can either paste the file into your email program or send it via a command-line program. -Pasting the text often causes formatting issues, especially with ``smarter'' clients that don't preserve newlines and other whitespace appropriately. +Pasting the text often causes formatting issues, especially with "`smarter`" clients that don't preserve newlines and other whitespace appropriately. Luckily, Git provides a tool to help you send properly formatted patches via IMAP, which may be easier for you. We'll demonstrate how to send a patch via Gmail, which happens to be the email agent we know best; you can read detailed instructions for a number of mail programs at the end of the aforementioned `Documentation/SubmittingPatches` file in the Git source code. diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 3ee8a99e..657692c3 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -38,7 +38,7 @@ With Git's branching model, it's possible for hundreds of developers to successf (((workflows, integration manager))) Because Git allows you to have multiple remote repositories, it's possible to have a workflow where each developer has write access to their own public repository and read access to everyone else's. -This scenario often includes a canonical repository that represents the ``official'' project. +This scenario often includes a canonical repository that represents the "`official`" project. To contribute to that project, you create your own public clone of the project and push your changes to it. Then, you can send a request to the maintainer of the main project to pull in your changes. The maintainer can then add your repository as a remote, test your changes locally, merge them into their branch, and push back to their repository. diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 016b2591..b5762aaa 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -49,7 +49,7 @@ $ git apply /tmp/patch-ruby-client.patch This modifies the files in your working directory. It's almost identical to running a `patch -p1` command to apply the patch, although it's more paranoid and accepts fewer fuzzy matches than patch. It also handles file adds, deletes, and renames if they're described in the `git diff` format, which `patch` won't do. -Finally, `git apply` is an ``apply all or abort all'' model where either everything is applied or nothing is, whereas `patch` can partially apply patchfiles, leaving your working directory in a weird state. +Finally, `git apply` is an "`apply all or abort all`" model where either everything is applied or nothing is, whereas `patch` can partially apply patchfiles, leaving your working directory in a weird state. `git apply` is overall much more conservative than `patch`. It won't create a commit for you -- after running it, you must stage and commit the changes introduced manually. @@ -405,9 +405,9 @@ Now you can remove your topic branch and drop the commits you didn't want to pul ===== Rerere (((git commands, rerere)))(((rerere))) -If you're doing lots of merging and rebasing, or you're maintaining a long-lived topic branch, Git has a feature called ``rerere'' that can help. +If you're doing lots of merging and rebasing, or you're maintaining a long-lived topic branch, Git has a feature called "`rerere`" that can help. -Rerere stands for ``reuse recorded resolution'' -- it's a way of shortcutting manual conflict resolution. +Rerere stands for "`reuse recorded resolution`" -- it's a way of shortcutting manual conflict resolution. When rerere is enabled, Git will keep a set of pre- and post-images from successful merges, and if it notices that there's a conflict that looks exactly like one you've already fixed, it'll just use the fix from last time, without bothering you with it. This feature comes in two parts: a configuration setting and a command. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 6596aef9..6380420d 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -2,7 +2,7 @@ (((GitHub, user accounts))) The first thing you need to do is set up a free user account. -Simply visit https://github.com[], choose a user name that isn't already taken, provide an email address and a password, and click the big green ``Sign up for GitHub'' button. +Simply visit https://github.com[], choose a user name that isn't already taken, provide an email address and a password, and click the big green "`Sign up for GitHub`" button. .The GitHub sign-up form image::images/signup.png[The GitHub sign-up form] @@ -32,15 +32,15 @@ If you'd like to use SSH remotes, you'll need to configure a public key. If you don't already have one, see <>. Open up your account settings using the link at the top-right of the window: -.The ``Account settings'' link -image::images/account-settings.png[The ``Account settings'' link] +.The "`Account settings`" link +image::images/account-settings.png[The "`Account settings`" link] -Then select the ``SSH keys'' section along the left-hand side. +Then select the "`SSH keys`" section along the left-hand side. -.The ``SSH keys'' link -image::images/ssh-keys.png[The ``SSH keys'' link] +.The "`SSH keys`" link. +image::images/ssh-keys.png[The "`SSH keys`" link] -From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click ``Add key''. +From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click "`Add key`". [NOTE] ==== @@ -52,10 +52,10 @@ You can name each of your keys (e.g. "My Laptop" or "Work Account") so that if y ==== Your Avatar Next, if you wish, you can replace the avatar that is generated for you with an image of your choosing. -First go to the ``Profile'' tab (above the SSH Keys tab) and click ``Upload new picture''. +First go to the "`Profile`" tab (above the SSH Keys tab) and click "`Upload new picture`". -.The ``Profile'' link -image::images/your-profile.png[The ``Profile'' link] +.The "`Profile`" link +image::images/your-profile.png[The "`Profile`" link] We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. @@ -83,7 +83,7 @@ If GitHub sees any of these in commit messages in any repository on the site, it ==== Two Factor Authentication -Finally, for extra security, you should definitely set up Two-factor Authentication or ``2FA''. +Finally, for extra security, you should definitely set up Two-factor Authentication or "`2FA`". Two-factor Authentication is an authentication mechanism that is becoming more and more popular recently to mitigate the risk of your account being compromised if your password is stolen somehow. Turning it on will make GitHub ask you for two different methods of authentication, so that if one of them is compromised, an attacker will not be able to access your account. @@ -92,6 +92,6 @@ You can find the Two-factor Authentication setup under the Security tab of your .2FA in the Security Tab image::images/2fa-1.png[2FA in the Security Tab] -If you click on the ``Set up two-factor authentication'' button, it will take you to a configuration page where you can choose to use a phone app to generate your secondary code (a ``time based one-time password''), or you can have GitHub send you a code via SMS each time you need to log in. +If you click on the "`Set up two-factor authentication`" button, it will take you to a configuration page where you can choose to use a phone app to generate your secondary code (a "`time based one-time password`"), or you can have GitHub send you a code via SMS each time you need to log in. After you choose which method you prefer and follow the instructions for setting up 2FA, your account will then be a little more secure and you will have to provide a code in addition to your password whenever you log into GitHub. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index e39d5d4e..67f1e2e6 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -5,23 +5,23 @@ Now that our account is set up, let's walk through some details that could be us ==== Forking Projects (((forking))) -If you want to contribute to an existing project to which you don't have push access, you can ``fork'' the project. -When you ``fork'' a project, GitHub will make a copy of the project that is entirely yours; it lives in your namespace, and you can push to it. +If you want to contribute to an existing project to which you don't have push access, you can "`fork`" the project. +When you "`fork`" a project, GitHub will make a copy of the project that is entirely yours; it lives in your namespace, and you can push to it. [NOTE] ==== -Historically, the term ``fork'' has been somewhat negative in context, meaning that someone took an open source project in a different direction, sometimes creating a competing project and splitting the contributors. -In GitHub, a ``fork'' is simply the same project in your own namespace, allowing you to make changes to a project publicly as a way to contribute in a more open manner. +Historically, the term "`fork`" has been somewhat negative in context, meaning that someone took an open source project in a different direction, sometimes creating a competing project and splitting the contributors. +In GitHub, a "`fork`" is simply the same project in your own namespace, allowing you to make changes to a project publicly as a way to contribute in a more open manner. ==== This way, projects don't have to worry about adding users as collaborators to give them push access. People can fork a project, push to it, and contribute their changes back to the original repository by creating what's called a Pull Request, which we'll cover next. This opens up a discussion thread with code review, and the owner and the contributor can then communicate about the change until the owner is happy with it, at which point the owner can merge it in. -To fork a project, visit the project page and click the ``Fork'' button at the top-right of the page. +To fork a project, visit the project page and click the "`Fork`" button at the top-right of the page. -.The ``Fork'' button -image::images/forkbutton.png[The ``Fork'' button] +.The "`Fork`" button +image::images/forkbutton.png[The "`Fork`" button] After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. @@ -68,7 +68,7 @@ We think it's much nicer to wait 3 seconds instead of 1 in between each state ch So let's improve the program and submit it back to the project as a proposed change. First, we click the 'Fork' button as mentioned earlier to get our own copy of the project. -Our user name here is ``tonychacon'' so our copy of this project is at `https://github.com/tonychacon/blink` and that's where we can edit it. +Our user name here is "`tonychacon`" so our copy of this project is at `https://github.com/tonychacon/blink` and that's where we can edit it. We will clone it locally, create a topic branch, make the code change and finally push that change back up to GitHub. [source,console] @@ -123,7 +123,7 @@ To https://github.com/tonychacon/blink Now if we go back to our fork on GitHub, we can see that GitHub noticed that we pushed a new topic branch up and presents us with a big green button to check out our changes and open a Pull Request to the original project. -You can alternatively go to the ``Branches'' page at `https://github.com///branches` to locate your branch and open a new Pull Request from there. +You can alternatively go to the "`Branches`" page at `https://github.com///branches` to locate your branch and open a new Pull Request from there. .Pull Request button image::images/blink-02-pr.png[Pull Request button] @@ -132,7 +132,7 @@ image::images/blink-02-pr.png[Pull Request button] If we click that green button, we'll see a screen that asks us to give our Pull Request a title and description. It is almost always worthwhile to put some effort into this, since a good description helps the owner of the original project determine what you were trying to do, whether your proposed changes are correct, and whether accepting the changes would improve the original project. -We also see a list of the commits in our topic branch that are ``ahead'' of the `master` branch (in this case, just the one) and a unified diff of all the changes that will be made should this branch get merged by the project owner. +We also see a list of the commits in our topic branch that are "`ahead`" of the `master` branch (in this case, just the one) and a unified diff of all the changes that will be made should this branch get merged by the project owner. .Pull Request creation page image::images/blink-03-pull-request-open.png[Pull Request creation] @@ -182,13 +182,13 @@ Adding commits to an existing Pull Request doesn't trigger a notification, so on .Pull Request final image::images/blink-06-final.png[PR final] -An interesting thing to notice is that if you click on the ``Files Changed'' tab on this Pull Request, you'll get the ``unified'' diff -- that is, the total aggregate difference that would be introduced to your main branch if this topic branch was merged in. +An interesting thing to notice is that if you click on the "`Files Changed`" tab on this Pull Request, you'll get the "`unified`" diff -- that is, the total aggregate difference that would be introduced to your main branch if this topic branch was merged in. In `git diff` terms, it basically automatically shows you `git diff master...` for the branch this Pull Request is based on. See <> for more about this type of diff. The other thing you'll notice is that GitHub checks to see if the Pull Request merges cleanly and provides a button to do the merge for you on the server. This button only shows up if you have write access to the repository and a trivial merge is possible. -If you click it GitHub will perform a ``non-fast-forward'' merge, meaning that even if the merge *could* be a fast-forward, it will still create a merge commit. +If you click it GitHub will perform a "`non-fast-forward`" merge, meaning that even if the merge *could* be a fast-forward, it will still create a merge commit. If you would prefer, you can simply pull the branch down and merge it locally. If you merge this branch into the `master` branch and push it to GitHub, the Pull Request will automatically be closed. @@ -220,7 +220,7 @@ When code is proposed with a Pull Request and the maintainers or community sugge For instance, if you go back and look again at <<_pr_final>>, you'll notice that the contributor did not rebase his commit and send another Pull Request. Instead they added new commits and pushed them to the existing branch. This way if you go back and look at this Pull Request in the future, you can easily find all of the context of why decisions were made. -Pushing the ``Merge'' button on the site purposefully creates a merge commit that references the Pull Request so that it's easy to go back and research the original conversation if necessary. +Pushing the "`Merge`" button on the site purposefully creates a merge commit that references the Pull Request so that it's easy to go back and research the original conversation if necessary. ===== Keeping up with Upstream @@ -241,7 +241,7 @@ What matters is the history and the final merge, so rebasing isn't getting you m If you want to merge in the target branch to make your Pull Request mergeable, you would add the original repository as a new remote, fetch from it, merge the main branch of that repository into your topic branch, fix any issues and finally push it back up to the same branch you opened the Pull Request on. -For example, let's say that in the ``tonychacon'' example we were using before, the original author made a change that would create a conflict in the Pull Request. +For example, let's say that in the "`tonychacon`" example we were using before, the original author made a change that would create a conflict in the Pull Request. Let's go through those steps. [source,console] @@ -298,13 +298,13 @@ Instead, push the rebased branch to a new branch on GitHub and open a brand new ===== References -Your next question may be ``How do I reference the old Pull Request?''. +Your next question may be "`How do I reference the old Pull Request?`". It turns out there are many, many ways to reference other things almost anywhere you can write in GitHub. Let's start with how to cross-reference another Pull Request or an Issue. All Pull Requests and Issues are assigned numbers and they are unique within the project. -For example, you can't have Pull Request #3 _and_ Issue #3. -If you want to reference any Pull Request or Issue from any other one, you can simply put `#` in any comment or description. +For example, you can't have Pull Request +#3+ _and_ Issue +#3+. +If you want to reference any Pull Request or Issue from any other one, you can simply put `+#+` in any comment or description. You can also be more specific if the Issue or Pull request lives somewhere else; write `username#` if you're referring to an Issue or Pull Request in a fork of the repository you're in, or `username/repo#` to reference something in another repository. Let's look at an example. @@ -339,7 +339,7 @@ Again, you can reference commits in forks or other repositories in the same way ==== GitHub Flavored Markdown Linking to other Issues is just the beginning of interesting things you can do with almost any text box on GitHub. -In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called ``GitHub Flavored Markdown''. +In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called "`GitHub Flavored Markdown`". Markdown is like writing in plain text but which is rendered richly. See <<_example_markdown>> for an example of how comments or text can be written and then rendered using Markdown. @@ -392,7 +392,7 @@ You can also add code snippets to comments. This is especially useful if you want to present something that you _could_ try to do before actually implementing it as a commit on your branch. This is also often used to add example code of what is not working or what this Pull Request could implement. -To add a snippet of code you have to ``fence'' it in backticks. +To add a snippet of code you have to "`fence`" it in backticks. [source,text] ---- @@ -484,7 +484,7 @@ In addition to adding Markdown image links to comments, which can be difficult t .Drag and drop images to upload them and auto-embed them image::images/markdown-08-drag-drop.png[Drag and drop images] -If you look at <<_md_drag>>, you can see a small ``Parsed as Markdown'' hint above the text area. +If you look at <<_md_drag>>, you can see a small "`Parsed as Markdown`" hint above the text area. Clicking on that will give you a full cheat sheet of everything you can do with Markdown on GitHub. [[_fetch_and_push_on_different_repositories]] diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index cc7637e1..8767ec31 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -6,22 +6,22 @@ Now that we're comfortable contributing to a project, let's look at the other si ==== Creating a New Repository Let's create a new repository to share our project code with. -Start by clicking the ``New repository'' button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. +Start by clicking the "`New repository`" button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. -.The ``Your repositories'' area -image::images/newrepo.png[The ``Your repositories'' area] +.The "`Your repositories`" area +image::images/newrepo.png[The "`Your repositories`" area] [[_new_repo_dropdown]] -.The ``New repository'' dropdown -image::images/new-repo.png[The ``new repository'' dropdown] +.The "`New repository`" dropdown +image::images/new-repo.png[The "`new repository`" dropdown] -This takes you to the ``new repository'' form: +This takes you to the "`new repository`" form: -.The ``new repository'' form -image::images/newrepoform.png[The ``new repository'' form] +.The "`new repository`" form +image::images/newrepoform.png[The "`new repository`" form] All you really have to do here is provide a project name; the rest of the fields are completely optional. -For now, just click the ``Create Repository'' button, and boom – you have a new repository on GitHub, named `/`. +For now, just click the "`Create Repository`" button, and boom – you have a new repository on GitHub, named `/`. Since you have no code there yet, GitHub will show you instructions for how to create a brand-new Git repository, or connect an existing Git project. We won't belabor this here; if you need a refresher, check out <>. @@ -39,19 +39,19 @@ The HTTPS one is also exactly the same URL they would paste into a browser to vi ==== Adding Collaborators -If you're working with other people who you want to give commit access to, you need to add them as ``collaborators''. +If you're working with other people who you want to give commit access to, you need to add them as "`collaborators`". If Ben, Jeff, and Louise all sign up for accounts on GitHub, and you want to give them push access to your repository, you can add them to your project. -Doing so will give them ``push'' access, which means they have both read and write access to the project and Git repository. +Doing so will give them "`push`" access, which means they have both read and write access to the project and Git repository. -Click the ``Settings'' link at the bottom of the right-hand sidebar. +Click the "`Settings`" link at the bottom of the right-hand sidebar. .The repository settings link image::images/reposettingslink.png[The repository settings link] -Then select ``Collaborators'' from the menu on the left-hand side. -Then, just type a username into the box, and click ``Add collaborator.'' +Then select "`Collaborators`" from the menu on the left-hand side. +Then, just type a username into the box, and click "`Add collaborator.`" You can repeat this as many times as you like to grant access to everyone you like. -If you need to revoke access, just click the ``X'' on the right-hand side of their row. +If you need to revoke access, just click the "`X`" on the right-hand side of their row. .Repository collaborators image::images/collaborators.png[The repository collaborators box] @@ -63,7 +63,7 @@ Now that you have a project with some code in it and maybe even a few collaborat Pull Requests can either come from a branch in a fork of your repository or they can come from another branch in the same repository. The only difference is that the ones in a fork are often from people where you can't push to their branch and they can't push to yours, whereas with internal Pull Requests generally both parties can access the branch. -For these examples, let's assume you are ``tonychacon'' and you've created a new Arduino code project named ``fade''. +For these examples, let's assume you are "`tonychacon`" and you've created a new Arduino code project named "`fade`". [[_email_notifications]] ===== Email Notifications @@ -105,8 +105,8 @@ image::images/maint-03-email-resp.png[Email response] Once the code is in a place you like and want to merge it in, you can either pull the code down and merge it locally, either with the `git pull ` syntax we saw earlier, or by adding the fork as a remote and fetching and merging. -If the merge is trivial, you can also just hit the ``Merge'' button on the GitHub site. -This will do a ``non-fast-forward'' merge, creating a merge commit even if a fast-forward merge was possible. +If the merge is trivial, you can also just hit the "`Merge`" button on the GitHub site. +This will do a "`non-fast-forward`" merge, creating a merge commit even if a fast-forward merge was possible. This means that no matter what, every time you hit the merge button, a merge commit is created. As you can see in <<_merge_button>>, GitHub gives you all of this information if you click the hint link. @@ -125,10 +125,10 @@ This is a bit of an advanced trick and we'll go over the details of this a bit m GitHub actually advertises the Pull Request branches for a repository as sort of pseudo-branches on the server. By default you don't get them when you clone, but they are there in an obscured way and you can access them pretty easily. -To demonstrate this, we're going to use a low-level command (often referred to as a ``plumbing'' command, which we'll read about more in <>) called `ls-remote`. +To demonstrate this, we're going to use a low-level command (often referred to as a "`plumbing`" command, which we'll read about more in <>) called `ls-remote`. This command is generally not used in day-to-day Git operations but it's useful to show us what references are present on the server. -If we run this command against the ``blink'' repository we were using earlier, we will get a list of all the branches and tags and other references in the repository. +If we run this command against the "`blink`" repository we were using earlier, we will get a list of all the branches and tags and other references in the repository. [source,console] ---- @@ -161,7 +161,7 @@ From https://github.com/libgit2/libgit2 * branch refs/pull/958/head -> FETCH_HEAD ---- -This tells Git, ``Connect to the `origin` remote, and download the ref named `refs/pull/958/head`.'' +This tells Git, "`Connect to the `origin` remote, and download the ref named `refs/pull/958/head`.`" Git happily obeys, and downloads everything you need to construct that ref, and puts a pointer to the commit you want under `.git/FETCH_HEAD`. You can follow that up with `git merge FETCH_HEAD` into a branch you want to test it in, but that merge commit message looks a bit weird. Also, if you're reviewing a *lot* of pull requests, this gets tedious. @@ -177,7 +177,7 @@ It should look a bit like this: fetch = +refs/heads/*:refs/remotes/origin/* ---- -That line that begins with `fetch =` is a ``refspec.'' +That line that begins with `fetch =` is a "`refspec.`" It's a way of mapping names on the remote with names in your local `.git` directory. This particular one tells Git, "the things on the remote that are under `refs/heads` should go in my local repository under `refs/remotes/origin`." You can modify this section to add another refspec: @@ -190,7 +190,7 @@ You can modify this section to add another refspec: fetch = +refs/pull/*/head:refs/remotes/origin/pr/* ---- -That last line tells Git, ``All the refs that look like `refs/pull/123/head` should be stored locally like `refs/remotes/origin/pr/123`.'' +That last line tells Git, "`All the refs that look like `refs/pull/123/head` should be stored locally like `refs/remotes/origin/pr/123`.`" Now, if you save that file, and do a `git fetch`: [source,console] @@ -215,7 +215,7 @@ Switched to a new branch 'pr/2' ---- The eagle-eyed among you would note the `head` on the end of the remote portion of the refspec. -There's also a `refs/pull/#/merge` ref on the GitHub side, which represents the commit that would result if you push the ``merge'' button on the site. +There's also a `refs/pull/#/merge` ref on the GitHub side, which represents the commit that would result if you push the "`merge`" button on the site. This can allow you to test the merge before even hitting the button. @@ -227,7 +227,7 @@ In fact, you can even target another Pull Request. If you see a Pull Request that is moving in the right direction and you have an idea for a change that depends on it or you're not sure is a good idea, or you just don't have push access to the target branch, you can open a Pull Request directly to it. When you go to open a Pull Request, there is a box at the top of the page that specifies which branch you're requesting to pull to and which you're requesting to pull from. -If you hit the ``Edit'' button at the right of that box you can change not only the branches but also which fork. +If you hit the "`Edit`" button at the right of that box you can change not only the branches but also which fork. [[_pr_targets]] .Manually change the Pull Request target fork and branch @@ -250,22 +250,22 @@ Once you post a comment with a user mention, that user will be notified. This means that this can be a really effective way of pulling people into conversations rather than making them poll. Very often in Pull Requests on GitHub people will pull in other people on their teams or in their company to review an Issue or Pull Request. -If someone gets mentioned on a Pull Request or Issue, they will be ``subscribed'' to it and will continue getting notifications any time some activity occurs on it. +If someone gets mentioned on a Pull Request or Issue, they will be "`subscribed`" to it and will continue getting notifications any time some activity occurs on it. You will also be subscribed to something if you opened it, if you're watching the repository or if you comment on something. -If you no longer wish to receive notifications, there is an ``Unsubscribe'' button on the page you can click to stop receiving updates on it. +If you no longer wish to receive notifications, there is an "`Unsubscribe`" button on the page you can click to stop receiving updates on it. .Unsubscribe from an Issue or Pull Request image::images/maint-06-unsubscribe.png[Unsubscribe] ===== The Notifications Page -When we mention ``notifications'' here with respect to GitHub, we mean a specific way that GitHub tries to get in touch with you when events happen and there are a few different ways you can configure them. -If you go to the ``Notification center'' tab from the settings page, you can see some of the options you have. +When we mention "`notifications`" here with respect to GitHub, we mean a specific way that GitHub tries to get in touch with you when events happen and there are a few different ways you can configure them. +If you go to the "`Notification center`" tab from the settings page, you can see some of the options you have. .Notification center options image::images/maint-07-notifications.png[Notification center] -The two choices are to get notifications over ``Email'' and over ``Web'' and you can choose either, neither or both for when you actively participate in things and for activity on repositories you are watching. +The two choices are to get notifications over "`Email`" and over "`Web`" and you can choose either, neither or both for when you actively participate in things and for activity on repositories you are watching. ====== Web Notifications @@ -310,10 +310,10 @@ X-GitHub-Recipient-Address: tchacon@example.com There are a couple of interesting things here. If you want to highlight or re-route emails to this particular project or even Pull Request, the information in `Message-ID` gives you all the data in `///` format. -If this were an issue, for example, the `` field would have been ``issues'' rather than ``pull''. +If this were an issue, for example, the `` field would have been "`issues`" rather than "`pull`". -The `List-Post` and `List-Unsubscribe` fields mean that if you have a mail client that understands those, you can easily post to the list or ``Unsubscribe'' from the thread. -That would be essentially the same as clicking the ``mute'' button on the web version of the notification or ``Unsubscribe'' on the Issue or Pull Request page itself. +The `List-Post` and `List-Unsubscribe` fields mean that if you have a mail client that understands those, you can easily post to the list or "`Unsubscribe`" from the thread. +That would be essentially the same as clicking the "`mute`" button on the web version of the notification or "`Unsubscribe`" on the Issue or Pull Request page itself. It's also worth noting that if you have both email and web notifications enabled and you read the email version of the notification, the web version will be marked as read as well if you have images allowed in your mail client. @@ -356,7 +356,7 @@ Generally there are not a lot of administrative things you can do with a single ===== Changing the Default Branch -If you are using a branch other than ``master'' as your default branch that you want people to open Pull Requests on or see by default, you can change that in your repository's settings page under the ``Options'' tab. +If you are using a branch other than "`master`" as your default branch that you want people to open Pull Requests on or see by default, you can change that in your repository's settings page under the "`Options`" tab. [[_default_branch]] .Change the default branch for a project @@ -366,7 +366,7 @@ Simply change the default branch in the dropdown and that will be the default fo ===== Transferring a Project -If you would like to transfer a project to another user or an organization in GitHub, there is a ``Transfer ownership'' option at the bottom of the same ``Options'' tab of your repository settings page that allows you to do this. +If you would like to transfer a project to another user or an organization in GitHub, there is a "`Transfer ownership`" option at the bottom of the same "`Options`" tab of your repository settings page that allows you to do this. [[_transfer_project]] .Transfer a project to another GitHub user or Organization diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index e919b334..35cc312d 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -5,14 +5,14 @@ In addition to single-user accounts, GitHub has what are called Organizations. Like personal accounts, Organizational accounts have a namespace where all their projects exist, but many other things are different. These accounts represent a group of people with shared ownership of projects, and there are many tools to manage subgroups of those people. -Normally these accounts are used for Open Source groups (such as ``perl'' or ``rails'') or companies (such as ``google'' or ``twitter''). +Normally these accounts are used for Open Source groups (such as "`perl`" or "`rails`") or companies (such as "`google`" or "`twitter`"). ==== Organization Basics -An organization is pretty easy to create; just click on the ``+'' icon at the top-right of any GitHub page, and select ``New organization'' from the menu. +An organization is pretty easy to create; just click on the "`+`" icon at the top-right of any GitHub page, and select "`New organization`" from the menu. -.The ``New organization'' menu item -image::images/neworg.png[The ``New organization'' menu item] +.The "`New organization`" menu item +image::images/neworg.png[The "`New organization`" menu item] First you'll need to name your organization and provide an email address for a main point of contact for the group. Then you can invite other users to be co-owners of the account if you want to. @@ -22,7 +22,7 @@ Like personal accounts, organizations are free if everything you plan to store t As an owner in an organization, when you fork a repository, you'll have the choice of forking it to your organization's namespace. When you create new repositories you can create them either under your personal account or under any of the organizations that you are an owner in. -You also automatically ``watch'' any new repository created under these organizations. +You also automatically "`watch`" any new repository created under these organizations. Just like in <<_personal_avatar>>, you can upload an avatar for your organization to personalize it a bit. Also just like personal accounts, you have a landing page for the organization that lists all of your repositories and can be viewed by other people. @@ -46,7 +46,7 @@ image::images/orgs-01-page.png[The Organization page] To manage your Teams, you can click on the Teams sidebar on the right hand side of the page in <<_org_page>>. This will bring you to a page you can use to add members to the team, add repositories to the team or manage the settings and access control levels for the team. Each team can have read only, read/write or administrative access to the repositories. -You can change that level by clicking the ``Settings'' button in <<_team_page>>. +You can change that level by clicking the "`Settings`" button in <<_team_page>>. [[_team_page]] .The Team page diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 669e2d3c..3ab8516a 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -13,7 +13,7 @@ The Hooks and Services section of GitHub repository administration is the easies First we'll take a look at Services. Both the Hooks and Services integrations can be found in the Settings section of your repository, where we previously looked at adding Collaborators and changing the default branch of your project. -Under the ``Webhooks and Services'' tab you will see something like <<_services_hooks>>. +Under the "`Webhooks and Services`" tab you will see something like <<_services_hooks>>. [[_services_hooks]] .Services and Hooks configuration section @@ -22,13 +22,13 @@ image::images/scripting-01-services.png[Services and hooks] There are dozens of services you can choose from, most of them integrations into other commercial and open source systems. Most of them are for Continuous Integration services, bug and issue trackers, chat room systems and documentation systems. We'll walk through setting up a very simple one, the Email hook. -If you choose ``email'' from the ``Add Service'' dropdown, you'll get a configuration screen like <<_service_config>>. +If you choose "`email`" from the "`Add Service`" dropdown, you'll get a configuration screen like <<_service_config>>. [[_service_config]] .Email service configuration image::images/scripting-02-email-service.png[Email service] -In this case, if we hit the ``Add service'' button, the email address we specified will get an email every time someone pushes to the repository. +In this case, if we hit the "`Add service`" button, the email address we specified will get an email every time someone pushes to the repository. Services can listen for lots of different types of events, but most only listen for push events and then do something with that data. If there is a system you are using that you would like to integrate with GitHub, you should check here to see if there is an existing service integration available. @@ -42,7 +42,7 @@ You specify a URL and GitHub will post an HTTP payload to that URL on any event Generally the way this works is you can setup a small web service to listen for a GitHub hook payload and then do something with the data when it is received. -To enable a hook, you click the ``Add webhook'' button in <<_services_hooks>>. +To enable a hook, you click the "`Add webhook`" button in <<_services_hooks>>. This will bring you to a page that looks like <<_web_hook>>. [[_web_hook]] @@ -50,7 +50,7 @@ This will bring you to a page that looks like <<_web_hook>>. image::images/scripting-03-webhook.png[Web hook] The configuration for a web hook is pretty simple. -In most cases you simply enter a URL and a secret key and hit ``Add webhook''. +In most cases you simply enter a URL and a secret key and hit "`Add webhook`". There are a few options for which events you want GitHub to send you a payload for -- the default is to only get a payload for the `push` event, when someone pushes new code to any branch of your repository. Let's see a small example of a web service you may set up to handle a web hook. @@ -123,7 +123,7 @@ In this section we'll learn how to authenticate and connect to the API, how to c The most basic thing you can do is a simple GET request on an endpoint that doesn't require authentication. This could be a user or read-only information on an open source project. -For example, if we want to know more about a user named ``schacon'', we can run something like this: +For example, if we want to know more about a user named "`schacon`", we can run something like this: [source,javascript] ---- @@ -172,10 +172,10 @@ However, if you want to do an action on the website such as comment on an Issue There are several ways to authenticate. You can use basic authentication with just your username and password, but generally it's a better idea to use a personal access token. -You can generate this from the ``Applications'' tab of your settings page. +You can generate this from the "`Applications`" tab of your settings page. [[_access_token]] -.Generate your access token from the ``Applications'' tab of your settings page +.Generate your access token from the "`Applications`" tab of your settings page image::images/scripting-05-access-token.png[Access Token] It will ask you which scopes you want for this token and a description. @@ -279,8 +279,8 @@ end Hopefully this is fairly simple to follow. In this web hook handler we look through each commit that was just pushed, we look for the string 'Signed-off-by' in the commit message and finally we POST via HTTP to the `/repos///statuses/` API endpoint with the status. -In this case you can send a state ('success', 'failure', 'error'), a description of what happened, a target URL the user can go to for more information and a ``context'' in case there are multiple statuses for a single commit. -For example, a testing service may provide a status and a validation service like this may also provide a status -- the ``context'' field is how they're differentiated. +In this case you can send a state ('success', 'failure', 'error'), a description of what happened, a target URL the user can go to for more information and a "`context`" in case there are multiple statuses for a single commit. +For example, a testing service may provide a status and a validation service like this may also provide a status -- the "`context`" field is how they're differentiated. If someone opens a new Pull Request on GitHub and this hook is set up, you may see something like <<_commit_status>>. @@ -288,7 +288,7 @@ If someone opens a new Pull Request on GitHub and this hook is set up, you may s .Commit status via the API image::images/scripting-07-status.png[Commit status] -You can now see a little green check mark next to the commit that has a ``Signed-off-by'' string in the message and a red cross through the one where the author forgot to sign off. +You can now see a little green check mark next to the commit that has a "`Signed-off-by`" string in the message and a red cross through the one where the author forgot to sign off. You can also see that the Pull Request takes the status of the last commit on the branch and warns you if it is a failure. This is really useful if you're using this API for test results so you don't accidentally merge something where the last commit is failing tests. diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index 79fa865a..e27cb077 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -36,7 +36,7 @@ hello() ---- In our repository, we create a new branch named `whitespace` and proceed to change all the Unix line endings to DOS line endings, essentially changing every line of the file, but just with whitespace. -Then we change the line ``hello world'' to ``hello mundo''. +Then we change the line "`hello world`" to "`hello mundo`". [source,console] ---- @@ -168,8 +168,8 @@ Then we want to get copies of my version of the file, their version (from the br Then we want to fix up either their side or our side and re-try the merge again for just this single file. Getting the three file versions is actually pretty easy. -Git stores all of these versions in the index under ``stages'' which each have numbers associated with them. -Stage 1 is the common ancestor, stage 2 is your version and stage 3 is from the `MERGE_HEAD`, the version you're merging in (``theirs''). +Git stores all of these versions in the index under "`stages`" which each have numbers associated with them. +Stage 1 is the common ancestor, stage 2 is your version and stage 3 is from the `MERGE_HEAD`, the version you're merging in ("`theirs`"). You can extract a copy of each of these versions of the conflicted file with the `git show` command and a special syntax. @@ -362,7 +362,7 @@ This will re-checkout the file again and replace the merge conflict markers. This can be useful if you want to reset the markers and try to resolve them again. You can pass `--conflict` either `diff3` or `merge` (which is the default). -If you pass it `diff3`, Git will use a slightly different version of conflict markers, not only giving you the ``ours'' and ``theirs'' versions, but also the ``base'' version inline to give you more context. +If you pass it `diff3`, Git will use a slightly different version of conflict markers, not only giving you the "`ours`" and "`theirs`" versions, but also the "`base`" version inline to give you more context. [source,console] ---- @@ -406,7 +406,7 @@ Another useful tool when resolving merge conflicts is `git log`. This can help you get context on what may have contributed to the conflicts. Reviewing a little bit of history to remember why two lines of development were touching the same area of code can be really helpful sometimes. -To get a full list of all of the unique commits that were included in either branch involved in this merge, we can use the ``triple dot'' syntax that we learned in <>. +To get a full list of all of the unique commits that were included in either branch involved in this merge, we can use the "`triple dot`" syntax that we learned in <>. [source,console] ---- @@ -462,8 +462,8 @@ index 0399cd5,59727f0..0000000 hello() ---- -The format is called ``Combined Diff'' and gives you two columns of data next to each line. -The first column shows you if that line is different (added or removed) between the ``ours'' branch and the file in your working directory and the second column does the same between the ``theirs'' branch and your working directory copy. +The format is called "`Combined Diff`" and gives you two columns of data next to each line. +The first column shows you if that line is different (added or removed) between the "`ours`" branch and the file in your working directory and the second column does the same between the "`theirs`" branch and your working directory copy. So in that example you can see that the `<<<<<<<` and `>>>>>>>` lines are in the working copy but were not in either side of the merge. This makes sense because the merge tool stuck them in there for our context, but we're expected to remove them. @@ -490,7 +490,7 @@ index 0399cd5,59727f0..0000000 hello() ---- -This shows us that ``hola world'' was in our side but not in the working copy, that ``hello mundo'' was in their side but not in the working copy and finally that ``hola mundo'' was not in either side but is now in the working copy. +This shows us that "`hola world`" was in our side but not in the working copy, that "`hello mundo`" was in their side but not in the working copy and finally that "`hola mundo`" was not in either side but is now in the working copy. This can be useful to review before committing the resolution. You can also get this from the `git log` for any merge to see how something was resolved after the fact. @@ -563,7 +563,7 @@ This approach also won't work if any other commits have been created since the m ===== Reverse the commit If moving the branch pointers around isn't going to work for you, Git gives you the option of making a new commit which undoes all the changes from an existing one. -Git calls this operation a ``revert'', and in this particular scenario, you'd invoke it like this: +Git calls this operation a "`revert`", and in this particular scenario, you'd invoke it like this: [source,console] ---- @@ -571,7 +571,7 @@ $ git revert -m 1 HEAD [master b1d8379] Revert "Merge branch 'topic'" ---- -The `-m 1` flag indicates which parent is the ``mainline'' and should be kept. +The `-m 1` flag indicates which parent is the "`mainline`" and should be kept. When you invoke a merge into `HEAD` (`git merge topic`), the new commit has two parents: the first one is `HEAD` (`C6`), and the second is the tip of the branch being merged in (`C4`). In this case, we want to undo all the changes introduced by merging in parent #2 (`C4`), while keeping all the content from parent #1 (`C6`). @@ -612,13 +612,13 @@ In this example, `M` and `^M` cancel out. ==== Other Types of Merges -So far we've covered the normal merge of two branches, normally handled with what is called the ``recursive'' strategy of merging. +So far we've covered the normal merge of two branches, normally handled with what is called the "`recursive`" strategy of merging. There are other ways to merge branches together however. Let's cover a few of them quickly. ===== Our or Theirs Preference -First of all, there is another useful thing we can do with the normal ``recursive'' mode of merging. +First of all, there is another useful thing we can do with the normal "`recursive`" mode of merging. We've already seen the `ignore-all-space` and `ignore-space-change` options which are passed with a `-X` but we can also tell Git to favor one side or the other when it sees a conflict. By default, when Git sees a conflict between two branches being merged, it will add merge conflict markers into your code and mark the file as conflicted and let you resolve it. @@ -628,7 +628,7 @@ If Git sees this, it will not add conflict markers. Any differences that are mergeable, it will merge. Any differences that conflict, it will simply choose the side you specify in whole, including binary files. -If we go back to the ``hello world'' example we were using before, we can see that merging in our branch causes conflicts. +If we go back to the "`hello world`" example we were using before, we can see that merging in our branch causes conflicts. [source,console] ---- @@ -652,13 +652,13 @@ Merge made by the 'recursive' strategy. create mode 100644 test.sh ---- -In that case, instead of getting conflict markers in the file with ``hello mundo'' on one side and ``hola world'' on the other, it will simply pick ``hola world''. +In that case, instead of getting conflict markers in the file with "`hello mundo`" on one side and "`hola world`" on the other, it will simply pick "`hola world`". However, all the other non-conflicting changes on that branch are merged successfully in. This option can also be passed to the `git merge-file` command we saw earlier by running something like `git merge-file --ours` for individual file merges. -If you want to do something like this but not have Git even try to merge changes from the other side in, there is a more draconian option, which is the ``ours'' merge _strategy_. -This is different from the ``ours'' recursive merge _option_. +If you want to do something like this but not have Git even try to merge changes from the other side in, there is a more draconian option, which is the "`ours`" merge _strategy_. +This is different from the "`ours`" recursive merge _option_. This will basically do a fake merge. It will record a new merge commit with both branches as parents, but it will not even look at the branch you're merging in. diff --git a/book/07-git-tools/sections/bundling.asc b/book/07-git-tools/sections/bundling.asc index 3f1c8212..f0752173 100644 --- a/book/07-git-tools/sections/bundling.asc +++ b/book/07-git-tools/sections/bundling.asc @@ -3,7 +3,7 @@ Though we've covered the common ways to transfer Git data over a network (HTTP, SSH, etc), there is actually one more way to do so that is not commonly used but can actually be quite useful. -Git is capable of ``bundling'' its data into a single file. +Git is capable of "`bundling`" its data into a single file. This can be useful in various scenarios. Maybe your network is down and you want to send changes to your co-workers. Perhaps you're working somewhere offsite and don't have access to the local network for security reasons. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 408f5b40..b87d1a2a 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -12,15 +12,15 @@ Git has a few options provided in the box: * The default is not to cache at all. Every connection will prompt you for your username and password. -* The ``cache'' mode keeps credentials in memory for a certain period of time. +* The "`cache`" mode keeps credentials in memory for a certain period of time. None of the passwords are ever stored on disk, and they are purged from the cache after 15 minutes. -* The ``store'' mode saves the credentials to a plain-text file on disk, and they never expire. +* The "`store`" mode saves the credentials to a plain-text file on disk, and they never expire. This means that until you change your password for the Git host, you won't ever have to type in your credentials again. The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. -* If you're using a Mac, Git comes with an ``osxkeychain'' mode, which caches credentials in the secure keychain that's attached to your system account. +* If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, you can install a helper called ``Git Credential Manager for Windows.'' - This is similar to the ``osxkeychain'' helper described above, but uses the Windows Credential Store to control sensitive information. +* If you're using Windows, you can install a helper called "`Git Credential Manager for Windows.`" + This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. It can be found at https://github.com/Microsoft/Git-Credential-Manager-for-Windows[]. You can choose one of these methods by setting a Git configuration value: @@ -31,9 +31,9 @@ $ git config --global credential.helper cache ---- Some of these helpers have options. -The ``store'' helper can take a `--file ` argument, which customizes where the plain-text file is saved (the default is `~/.git-credentials`). -The ``cache'' helper accepts the `--timeout ` option, which changes the amount of time its daemon is kept running (the default is ``900'', or 15 minutes). -Here's an example of how you'd configure the ``store'' helper with a custom file name: +The "`store`" helper can take a `--file ` argument, which customizes where the plain-text file is saved (the default is `~/.git-credentials`). +The "`cache`" helper accepts the `--timeout ` option, which changes the amount of time its daemon is kept running (the default is "`900`", or 15 minutes). +Here's an example of how you'd configure the "`store`" helper with a custom file name: [source,console] ---- @@ -59,7 +59,7 @@ Git's root command for the credential-helper system is `git credential`, which t This might be easier to understand with an example. Let's say that a credential helper has been configured, and the helper has stored credentials for `mygithost`. -Here's a session that uses the ``fill'' command, which is invoked when Git is trying to find credentials for a host: +Here's a session that uses the "`fill`" command, which is invoked when Git is trying to find credentials for a host: [source,console] ---- @@ -103,7 +103,7 @@ There are several forms it can take: |====== So the helpers described above are actually named `git-credential-cache`, `git-credential-store`, and so on, and we can configure them to take command-line arguments. -The general form for this is ``git-credential-foo [args] .'' +The general form for this is "`git-credential-foo [args] .`" The stdin/stdout protocol is the same as git-credential, but they use a slightly different set of actions: * `get` is a request for a username/password pair. @@ -132,7 +132,7 @@ username=bob <3> password=s3cre7 ---- -<1> Here we tell `git-credential-store` to save some credentials: the username ``bob'' and the password ``s3cre7'' are to be used when `https://mygithost` is accessed. +<1> Here we tell `git-credential-store` to save some credentials: the username "`bob`" and the password "`s3cre7`" are to be used when `https://mygithost` is accessed. <2> Now we'll retrieve those credentials. We provide the parts of the connection we already know (`https://mygithost`), and an empty line. <3> `git-credential-store` replies with the username and password we stored above. @@ -191,7 +191,7 @@ username=bob password=s3cre7 ---- -Since its name starts with ``git-'', we can use the simple syntax for the configuration value: +Since its name starts with "`git-`", we can use the simple syntax for the configuration value: [source,console] ---- diff --git a/book/07-git-tools/sections/interactive-staging.asc b/book/07-git-tools/sections/interactive-staging.asc index affa704b..1f7a5635 100644 --- a/book/07-git-tools/sections/interactive-staging.asc +++ b/book/07-git-tools/sections/interactive-staging.asc @@ -24,7 +24,7 @@ What now> You can see that this command shows you a much different view of your staging area than you're probably used to -- basically, the same information you get with `git status` but a bit more succinct and informative. It lists the changes you've staged on the left and unstaged changes on the right. -After this comes a ``Commands'' section, which allows you to do a number of things like staging and unstaging files, staging parts of files, adding untracked files, and displaying diffs of what has been staged. +After this comes a "`Commands`" section, which allows you to do a number of things like staging and unstaging files, staging parts of files, adding untracked files, and displaying diffs of what has been staged. ==== Staging and Unstaging Files diff --git a/book/07-git-tools/sections/rerere.asc b/book/07-git-tools/sections/rerere.asc index 648a9120..35a65d14 100644 --- a/book/07-git-tools/sections/rerere.asc +++ b/book/07-git-tools/sections/rerere.asc @@ -2,7 +2,7 @@ === Rerere The `git rerere` functionality is a bit of a hidden feature. -The name stands for ``reuse recorded resolution'' and, as the name implies, it allows you to ask Git to remember how you've resolved a hunk conflict so that the next time it sees the same conflict, Git can resolve it for you automatically. +The name stands for "`reuse recorded resolution`" and, as the name implies, it allows you to ask Git to remember how you've resolved a hunk conflict so that the next time it sees the same conflict, Git can resolve it for you automatically. There are a number of scenarios in which this functionality might be really handy. One of the examples that is mentioned in the documentation is when you want to make sure a long-lived topic branch will ultimately merge cleanly, but you don't want to have a bunch of intermediate merge commits cluttering up your commit history. @@ -36,7 +36,7 @@ def hello end ---- -In one branch we change the word ``hello'' to ``hola'', then in another branch we change the ``world'' to ``mundo'', just like before. +In one branch we change the word "`hello`" to "`hola`", then in another branch we change the "`world`" to "`mundo`", just like before. image::images/rerere1.png[] @@ -129,7 +129,7 @@ $ git rerere diff end ---- -So that basically says, when Git sees a hunk conflict in a `hello.rb` file that has ``hello mundo'' on one side and ``hola world'' on the other, it will resolve it to ``hola mundo''. +So that basically says, when Git sees a hunk conflict in a `hello.rb` file that has "`hello mundo`" on one side and "`hola world`" on the other, it will resolve it to "`hola mundo`". Now we can mark it as resolved and commit it: diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index 759cb5ef..05735f31 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -9,7 +9,7 @@ For this, we recommend a simple metaphor. ==== The Three Trees An easier way to think about `reset` and `checkout` is through the mental frame of Git being a content manager of three different trees. -By ``tree'' here, we really mean ``collection of files'', not specifically the data structure. +By "`tree`" here, we really mean "`collection of files`", not specifically the data structure. There are a few cases where the index doesn't exactly act like a tree, but for our purposes it is easier to think about it this way for now. Git as a system manages and manipulates three trees in its normal operation: @@ -46,13 +46,13 @@ $ git ls-tree -r HEAD 040000 tree 99f1a6d12cb4b6f19... lib ---- -The Git `cat-file` and `ls-tree` commands are ``plumbing'' commands that are used for lower level things and not really used in day-to-day work, but they help us see what's going on here. +The Git `cat-file` and `ls-tree` commands are "`plumbing`" commands that are used for lower level things and not really used in day-to-day work, but they help us see what's going on here. [[_the_index]] ===== The Index The _index_ is your *proposed next commit*. -We've also been referring to this concept as Git's ``Staging Area'' as this is what Git looks at when you run `git commit`. +We've also been referring to this concept as Git's "`Staging Area`" as this is what Git looks at when you run `git commit`. Git populates this index with a list of all the file contents that were last checked out into your working directory and what they looked like when they were originally checked out. You then replace some of those files with new versions of them, and `git commit` converts that into the tree for a new commit. @@ -71,7 +71,7 @@ The index is not technically a tree structure -- it's actually implemented as a ===== The Working Directory -Finally, you have your _working directory_ (also commonly referred to as the ``working tree''). +Finally, you have your _working directory_ (also commonly referred to as the "`working tree`"). The other two trees store their content in an efficient but inconvenient manner, inside the `.git` folder. The working directory unpacks them into actual files, which makes it much easier for you to edit them. Think of the working directory as a *sandbox*, where you can try changes out before committing them to your staging area (index) and then to history. @@ -118,12 +118,12 @@ Let's call this *v2* of the file, and indicate it in red. image::images/reset-ex4.png[] -If we run `git status` right now, we'll see the file in red as ``Changes not staged for commit'', because that entry differs between the index and the working directory. +If we run `git status` right now, we'll see the file in red as "`Changes not staged for commit`", because that entry differs between the index and the working directory. Next we run `git add` on it to stage it into our index. image::images/reset-ex5.png[] -At this point, if we run `git status`, we will see the file in green under ``Changes to be committed'' because the index and HEAD differ -- that is, our proposed next commit is now different from our last commit. +At this point, if we run `git status`, we will see the file in green under "`Changes to be committed`" because the index and HEAD differ -- that is, our proposed next commit is now different from our last commit. Finally, we run `git commit` to finalize the commit. image::images/reset-ex6.png[] @@ -222,7 +222,7 @@ image::images/reset-path2.png[] This is why the output of the `git status` command suggests that you run this to unstage a file (see <> for more on this). -We could just as easily not let Git assume we meant ``pull the data from HEAD'' by specifying a specific commit to pull that file version from. +We could just as easily not let Git assume we meant "`pull the data from HEAD`" by specifying a specific commit to pull that file version from. We would just run something like `git reset eb43bf file.txt`. image::images/reset-path3.png[] @@ -237,7 +237,7 @@ So you can selectively unstage or revert content. Let's look at how to do something interesting with this newfound power -- squashing commits. -Say you have a series of commits with messages like ``oops.'', ``WIP'' and ``forgot this file''. +Say you have a series of commits with messages like "`oops.`", "`WIP`" and "`forgot this file`". You can use `reset` to quickly and easily squash them into a single commit that makes you look really smart. <<_squashing>> shows another way to do this, but in this example it's simpler to use `reset`. @@ -296,7 +296,7 @@ Also, like `git reset` and `git add`, `checkout` will accept a `--patch` option Hopefully now you understand and feel more comfortable with the `reset` command, but are probably still a little confused about how exactly it differs from `checkout` and could not possibly remember all the rules of the different invocations. Here's a cheat-sheet for which commands affect which trees. -The ``HEAD'' column reads ``REF'' if that command moves the reference (branch) that HEAD points to, and ``HEAD'' if it moves HEAD itself. +The "`HEAD`" column reads "`REF`" if that command moves the reference (branch) that HEAD points to, and "`HEAD`" if it moves HEAD itself. Pay especial attention to the 'WD Safe?' column -- if it says *NO*, take a second to think before running that command. [options="header", cols="3,1,1,1,1"] diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 710b4863..5d1b96fb 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -114,7 +114,7 @@ ca82a6dff817ec66f44342007202690a93763949 [[_git_reflog]] ==== RefLog Shortnames -One of the things Git does in the background while you're working away is keep a ``reflog'' -- a log of where your HEAD and branch references have been for the last few months. +One of the things Git does in the background while you're working away is keep a "`reflog`" -- a log of where your HEAD and branch references have been for the last few months. You can see your reflog by using `git reflog`: @@ -179,7 +179,7 @@ Running `git show HEAD@{2.months.ago}` will show you the matching commit only if [TIP] .Think of the reflog as Git's version of shell history ==== -If you have a UNIX or Linux background, you can think of the reflog as Git's version of shell history, which emphasizes that what's there is clearly relevant only for you and your ``session'', and has nothing to do with anyone else who might be working on the same machine. +If you have a UNIX or Linux background, you can think of the reflog as Git's version of shell history, which emphasizes that what's there is clearly relevant only for you and your "`session`", and has nothing to do with anyone else who might be working on the same machine. ==== [NOTE] @@ -217,7 +217,7 @@ $ git log --pretty=format:'%h %s' --graph * 9b29157 Add open3_detach to gemspec file list ---- -Then, you can see the previous commit by specifying `HEAD^`, which means ``the parent of HEAD'': +Then, you can see the previous commit by specifying `HEAD^`, which means "`the parent of HEAD`": [source,console] ---- @@ -246,7 +246,7 @@ $ git show "HEAD^" # OK ==== -You can also specify a number after the `^` to identify _which_ parent you want; for example, `d921970^2` means ``the second parent of d921970.'' +You can also specify a number after the `^` to identify _which_ parent you want; for example, `d921970^2` means "`the second parent of d921970.`" This syntax is useful only for merge commits, which have more than one parent -- the _first_ parent of a merge commit is from the branch you were on when you merged (frequently `master`), while the _second_ parent of a merge commit is from the branch that was merged (say, `topic`): [source,console] @@ -269,7 +269,7 @@ Date: Wed Dec 10 22:22:03 2008 +0000 The other main ancestry specification is the `~` (tilde). This also refers to the first parent, so `HEAD~` and `HEAD^` are equivalent. The difference becomes apparent when you specify a number. -`HEAD~2` means ``the first parent of the first parent,'' or ``the grandparent'' -- it traverses the first parents the number of times you specify. +`HEAD~2` means "`the first parent of the first parent,`" or "`the grandparent`" -- it traverses the first parents the number of times you specify. For example, in the history listed earlier, `HEAD~3` would be: [source,console] @@ -300,7 +300,7 @@ You can also combine these syntaxes -- you can get the second parent of the prev ==== Commit Ranges Now that you can specify individual commits, let's see how to specify ranges of commits. -This is particularly useful for managing your branches -- if you have a lot of branches, you can use range specifications to answer questions such as, ``What work is on this branch that I haven't yet merged into my main branch?'' +This is particularly useful for managing your branches -- if you have a lot of branches, you can use range specifications to answer questions such as, "`What work is on this branch that I haven't yet merged into my main branch?`" ===== Double Dot @@ -313,7 +313,7 @@ For example, say you have a commit history that looks like <>. image::images/double-dot.png[Example history for range selection] Say you want to see what is in your `experiment` branch that hasn't yet been merged into your `master` branch. -You can ask Git to show you a log of just those commits with `master..experiment` -- that means ``all commits reachable from `experiment` that aren't reachable from `master`.'' +You can ask Git to show you a log of just those commits with `master..experiment` -- that means "`all commits reachable from `experiment` that aren't reachable from `master`.`" For the sake of brevity and clarity in these examples, the letters of the commit objects from the diagram are used in place of the actual log output in the order that they would display: [source,console] diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index cbaee261..1c54ce25 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -172,7 +172,7 @@ Each time, Git will stop, let you amend the commit, and continue when you're fin ==== Reordering Commits You can also use interactive rebases to reorder or remove commits entirely. -If you want to remove the ``Add cat-file'' commit and change the order in which the other two commits are introduced, you can change the rebase script from this: +If you want to remove the "`Add cat-file`" commit and change the order in which the other two commits are introduced, you can change the rebase script from this: [source,console] ---- @@ -190,7 +190,7 @@ pick f7f3f6d Change my name a bit ---- When you save and exit the editor, Git rewinds your branch to the parent of these commits, applies `310154e` and then `f7f3f6d`, and then stops. -You effectively change the order of those commits and remove the ``Add cat-file'' commit completely. +You effectively change the order of those commits and remove the "`Add cat-file`" commit completely. [[_squashing]] ==== Squashing Commits @@ -226,7 +226,7 @@ The script puts helpful instructions in the rebase message: # Note that empty commits are commented out ---- -If, instead of ``pick'' or ``edit'', you specify ``squash'', Git applies both that change and the change directly before it and makes you merge the commit messages together. +If, instead of "`pick`" or "`edit`", you specify "`squash`", Git applies both that change and the change directly before it and makes you merge the commit messages together. So, if you want to make a single commit from these three commits, you make the script look like this: [source,console] @@ -259,8 +259,8 @@ When you save that, you have a single commit that introduces the changes of all Splitting a commit undoes a commit and then partially stages and commits as many times as commits you want to end up with. For example, suppose you want to split the middle commit of your three commits. -Instead of ``Update README formatting and add blame'', you want to split it into two commits: ``Update README formatting'' for the first, and ``Add blame'' for the second. -You can do that in the `rebase -i` script by changing the instruction on the commit you want to split to ``edit'': +Instead of "`Update README formatting and add blame`", you want to split it into two commits: "`Update README formatting`" for the first, and "`Add blame`" for the second. +You can do that in the `rebase -i` script by changing the instruction on the commit you want to split to "`edit`": [source,console] ---- @@ -297,12 +297,12 @@ f7f3f6d Change my name a bit This changes the SHA-1s of the three most recent commits in your list, so make sure no changed commit shows up in that list that you've already pushed to a shared repository. Notice that the last commit (`f7f3f6d`) in the list is unchanged. -Despite this commit being shown in the script, because it was marked as ``pick'' and was applied prior to any rebase changes, Git leaves the commit unmodified. +Despite this commit being shown in the script, because it was marked as "`pick`" and was applied prior to any rebase changes, Git leaves the commit unmodified. ==== Deleting a commit If you want to get rid of a commit, you can delete it using the `rebase -i` script. -In the list of commits, put the word ``drop'' before the commit you want to delete (or just delete that line from the rebase script): +In the list of commits, put the word "`drop`" before the commit you want to delete (or just delete that line from the rebase script): [source,console] ---- diff --git a/book/07-git-tools/sections/searching.asc b/book/07-git-tools/sections/searching.asc index dd025e43..8caf1230 100644 --- a/book/07-git-tools/sections/searching.asc +++ b/book/07-git-tools/sections/searching.asc @@ -60,7 +60,7 @@ date.c: /* gmtime_r() in match_digit() may have clobbered it */ As you can see, the `gmtime_r` routine is called from both the `match_multi_number` and `match_digit` functions in the `date.c` file (the third match displayed represents just the string appearing in a comment). You can also search for complex combinations of strings with the `--and` flag, which ensures that multiple matches must occur in the same line of text. -For instance, let's look for any lines that define a constant whose name contains _either_ of the substrings ``LINK'' or ``BUF_MAX'', specifically in an older version of the Git codebase represented by the tag `v1.8.0` (we'll throw in the `--break` and `--heading` options which help split up the output into a more readable format): +For instance, let's look for any lines that define a constant whose name contains _either_ of the substrings "`LINK`" or "`BUF_MAX`", specifically in an older version of the Git codebase represented by the tag `v1.8.0` (we'll throw in the `--break` and `--heading` options which help split up the output into a more readable format): [source,console] ---- @@ -96,7 +96,7 @@ As we saw in the above example, we looked for terms in an older version of the G Perhaps you're looking not for _where_ a term exists, but _when_ it existed or was introduced. The `git log` command has a number of powerful tools for finding specific commits by the content of their messages or even the content of the diff they introduce. -If, for example, we want to find out when the `ZLIB_BUF_MAX` constant was originally introduced, we can use the `-S` option (colloquially referred to as the Git ``pickaxe'' option) to tell Git to show us only those commits that changed the number of occurrences of that string. +If, for example, we want to find out when the `ZLIB_BUF_MAX` constant was originally introduced, we can use the `-S` option (colloquially referred to as the Git "`pickaxe`" option) to tell Git to show us only those commits that changed the number of occurrences of that string. [source,console] ---- diff --git a/book/07-git-tools/sections/stashing-cleaning.asc b/book/07-git-tools/sections/stashing-cleaning.asc index f307e88d..f15b7c0c 100644 --- a/book/07-git-tools/sections/stashing-cleaning.asc +++ b/book/07-git-tools/sections/stashing-cleaning.asc @@ -236,9 +236,9 @@ A safer option is to run `git stash --all` to remove everything but save it in a Assuming you do want to remove cruft files or clean your working directory, you can do so with `git clean`. To remove all the untracked files in your working directory, you can run `git clean -f -d`, which removes any files and also any subdirectories that become empty as a result. -The `-f` means 'force' or ``really do this,'' and is required if the Git configuration variable `clean.requireForce` is not explicitly set to false. +The `-f` means 'force' or "`really do this,`" and is required if the Git configuration variable `clean.requireForce` is not explicitly set to false. -If you ever want to see what it would do, you can run the command with the `--dry-run` (or `-n`) option, which means ``do a dry run and tell me what you _would_ have removed''. +If you ever want to see what it would do, you can run the command with the `--dry-run` (or `-n`) option, which means "`do a dry run and tell me what you _would_ have removed`". [source,console] ---- @@ -269,7 +269,7 @@ Would remove tmp/ ---- If you don't know what the `git clean` command is going to do, always run it with a `-n` first to double check before changing the `-n` to a `-f` and doing it for real. -The other way you can be careful about the process is to run it with the `-i` or ``interactive'' flag. +The other way you can be careful about the process is to run it with the `-i` or "`interactive`" flag. This will run the clean command in an interactive mode. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index a832bded..0d034d64 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -23,7 +23,7 @@ We'll walk through developing a simple project that has been split up into a mai Let's start by adding an existing Git repository as a submodule of the repository that we're working on. To add a new submodule you use the `git submodule add` command with the absolute or relative URL of the project you would like to start tracking. -In this example, we'll add a library called ``DbConnector''. +In this example, we'll add a library called "`DbConnector`". [source,console] ---- @@ -36,7 +36,7 @@ Unpacking objects: 100% (11/11), done. Checking connectivity... done. ---- -By default, submodules will add the subproject into a directory named the same as the repository, in this case ``DbConnector''. +By default, submodules will add the subproject into a directory named the same as the repository, in this case "`DbConnector`". You can add a different path at the end of the command if you want it to go elsewhere. If you run `git status` at this point, you'll notice a few things. @@ -234,7 +234,7 @@ Fast-forward ---- Now if you go back into the main project and run `git diff --submodule` you can see that the submodule was updated and get a list of commits that were added to it. -If you don't want to type `--submodule` every time you run `git diff`, you can set it as the default format by setting the `diff.submodule` config value to ``log''. +If you don't want to type `--submodule` every time you run `git diff`, you can set it as the default format by setting the `diff.submodule` config value to "`log`". [source,console] ---- @@ -264,7 +264,7 @@ Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0 This command will by default assume that you want to update the checkout to the `master` branch of the submodule repository. You can, however, set this to something different if you want. -For example, if you want to have the DbConnector submodule track that repository's ``stable'' branch, you can set it in either your `.gitmodules` file (so everyone else also tracks it), or just in your local `.git/config` file. +For example, if you want to have the DbConnector submodule track that repository's "`stable`" branch, you can set it in either your `.gitmodules` file (so everyone else also tracks it), or just in your local `.git/config` file. Let's set it in the `.gitmodules` file: [source,console] @@ -283,7 +283,7 @@ Submodule path 'DbConnector': checked out 'c87d55d4c6d4b05ee34fbc8cb6f7bf4585ae6 If you leave off the `-f .gitmodules` it will only make the change for you, but it probably makes more sense to track that information with the repository so everyone else does as well. -When we run `git status` at this point, Git will show us that we have ``new commits'' on the submodule. +When we run `git status` at this point, Git will show us that we have "`new commits`" on the submodule. [source,console] ---- @@ -417,7 +417,7 @@ no changes added to commit (use "git add" and/or "git commit -a") By default, the `git pull` command recursively fetches submodules changes, as we can see in the output of the first command above. However, it does not *update* the submodules. -This is shown by the output of the `git status` command, which shows the submodule is ``modified'', and has ``new commits''. +This is shown by the output of the `git status` command, which shows the submodule is "`modified`", and has "`new commits`". What's more, the brackets showing the new commits point left (<), indicating that these commits are recorded in MainProject but are not present in the local DbConnector checkout. To finalize the update, you need to run `git submodule update`: @@ -459,7 +459,7 @@ Otherwise you would probably instead be using a simpler dependency management sy So now let's go through an example of making changes to the submodule at the same time as the main project and committing and publishing those changes at the same time. -So far, when we've run the `git submodule update` command to fetch changes from the submodule repositories, Git would get the changes and update the files in the subdirectory but will leave the sub-repository in what's called a ``detached HEAD'' state. +So far, when we've run the `git submodule update` command to fetch changes from the submodule repositories, Git would get the changes and update the files in the subdirectory but will leave the sub-repository in what's called a "`detached HEAD`" state. This means that there is no local working branch (like `master`, for example) tracking changes. With no working branch tracking changes, that means even if you commit changes to the submodule, those changes will quite possibly be lost the next time you run `git submodule update`. You have to do some extra steps if you want changes in a submodule to be tracked. @@ -478,7 +478,7 @@ $ git checkout stable Switched to branch 'stable' ---- -Let's try updating our submodule with the ``merge'' option. +Let's try updating our submodule with the "`merge`" option. To specify it manually, we can just add the `--merge` option to our `update` call. Here we'll see that there was a change on the server for this submodule and it gets merged in. @@ -585,8 +585,8 @@ If we commit in the main project and push it up without pushing the submodule ch Those changes will only exist on our local copy. In order to make sure this doesn't happen, you can ask Git to check that all your submodules have been pushed properly before pushing the main project. -The `git push` command takes the `--recurse-submodules` argument which can be set to either ``check'' or ``on-demand''. -The ``check'' option will make `push` simply fail if any of the committed submodule changes haven't been pushed. +The `git push` command takes the `--recurse-submodules` argument which can be set to either "`check`" or "`on-demand`". +The "`check`" option will make `push` simply fail if any of the committed submodule changes haven't been pushed. [source,console] ---- @@ -610,7 +610,7 @@ As you can see, it also gives us some helpful advice on what we might want to do The simple option is to go into each submodule and manually push to the remotes to make sure they're externally available and then try this push again. If you want the check behavior to happen for all pushes, you can make this behavior the default by doing `git config push.recurseSubmodules check`. -The other option is to use the ``on-demand'' value, which will try to do this for you. +The other option is to use the "`on-demand`" value, which will try to do this for you. [source,console] ---- @@ -663,7 +663,7 @@ Automatic merge failed; fix conflicts and then commit the result. ---- So basically what has happened here is that Git has figured out that the two branches record points in the submodule's history that are divergent and need to be merged. -It explains it as ``merge following commits not found'', which is confusing but we'll explain why that is in a bit. +It explains it as "`merge following commits not found`", which is confusing but we'll explain why that is in a bit. To solve the problem, you need to figure out what state the submodule should be in. Strangely, Git doesn't really give you much information to help out here, not even the SHA-1s of the commits of both sides of the history. @@ -688,7 +688,7 @@ This is what you'll have to merge in and resolve. You can either just try the merge with the SHA-1 directly, or you can create a branch for it and then try to merge that in. We would suggest the latter, even if only to make a nicer merge commit message. -So, we will go into our submodule directory, create a branch named ``try-merge'' based on that second SHA-1 from `git diff`, and manually merge. +So, we will go into our submodule directory, create a branch named "`try-merge`" based on that second SHA-1 from `git diff`, and manually merge. [source,console] ---- @@ -744,7 +744,7 @@ Interestingly, there is another case that Git handles. If a merge commit exists in the submodule directory that contains *both* commits in its history, Git will suggest it to you as a possible solution. It sees that at some point in the submodule project, someone merged branches containing these two commits, so maybe you'll want that one. -This is why the error message from before was ``merge following commits not found'', because it could not do *this*. +This is why the error message from before was "`merge following commits not found`", because it could not do *this*. It's confusing because who would expect it to *try* to do this? If it does find a single acceptable merge commit, you'll see something like this: @@ -969,7 +969,7 @@ nothing to commit, working tree clean ---- Using the `--recurse-submodules` flag of `git checkout` can also be useful when you work on several branches in the superproject, each having your submodule pointing at different commits. -Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as ``modified'', and indicate ``new commits''. +Indeed, if you switch between branches that record the submodule at different commits, upon executing `git status` the submodule will appear as "`modified`", and indicate "`new commits`". That is because the submodule state is by default not carried over when switching branches. This can be really confusing, so it's a good idea to always `git checkout --recurse-submodules` when your project has submodules. diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 6438920a..c4ec16b8 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -58,8 +58,8 @@ Put the following line in your `.gitattributes` file: *.docx diff=word ---- -This tells Git that any file that matches this pattern (`.docx`) should use the ``word'' filter when you try to view a diff that contains changes. -What is the ``word'' filter? +This tells Git that any file that matches this pattern (`.docx`) should use the "`word`" filter when you try to view a diff that contains changes. +What is the "`word`" filter? You have to set it up. Here you'll configure Git to use the `docx2txt` program to convert Word documents into readable text files, which it will then diff properly. @@ -82,7 +82,7 @@ Finally, you can configure Git to use this script: $ git config diff.word.textconv docx2txt ---- -Now Git knows that if it tries to do a diff between two snapshots, and any of the files end in `.docx`, it should run those files through the ``word'' filter, which is defined as the `docx2txt` program. +Now Git knows that if it tries to do a diff between two snapshots, and any of the files end in `.docx`, it should run those files through the "`word`" filter, which is defined as the `docx2txt` program. This effectively makes nice text-based versions of your Word files before attempting to diff them. Here's an example: Chapter 1 of this book was converted to Word format and committed in a Git repository. @@ -106,7 +106,7 @@ index 0b013ca..ba25db5 100644 Many people's version-control method of choice is to copy files into another directory (perhaps a time-stamped directory, if they're clever). This approach is very common because it is so simple, but it is also incredibly error prone. It is easy to forget which directory you're in and accidentally write to the wrong file or copy over files you don't mean to. ---- -Git successfully and succinctly tells us that we added the string ``Testing: 1, 2, 3.'', which is correct. +Git successfully and succinctly tells us that we added the string "`Testing: 1, 2, 3.`", which is correct. It's not perfect – formatting changes wouldn't show up here – but it certainly works. Another interesting problem you can solve this way involves diffing image files. @@ -192,27 +192,27 @@ However, that result is of limited use. If you've used keyword substitution in CVS or Subversion, you can include a datestamp – the SHA-1 isn't all that helpful, because it's fairly random and you can't tell if one SHA-1 is older or newer than another just by looking at them. It turns out that you can write your own filters for doing substitutions in files on commit/checkout. -These are called ``clean'' and ``smudge'' filters. -In the `.gitattributes` file, you can set a filter for particular paths and then set up scripts that will process files just before they're checked out (``smudge'', see <>) and just before they're staged (``clean'', see <>). +These are called "`clean`" and "`smudge`" filters. +In the `.gitattributes` file, you can set a filter for particular paths and then set up scripts that will process files just before they're checked out ("`smudge`", see <>) and just before they're staged ("`clean`", see <>). These filters can be set to do all sorts of fun things. [[filters_a]] -.The ``smudge'' filter is run on checkout -image::images/smudge.png[The ``smudge'' filter is run on checkout] +.The "`smudge`" filter is run on checkout +image::images/smudge.png[The "`smudge`" filter is run on checkout] [[filters_b]] -.The ``clean'' filter is run when files are staged -image::images/clean.png[The ``clean'' filter is run when files are staged] +.The "`clean`" filter is run when files are staged +image::images/clean.png[The "`clean`" filter is run when files are staged] The original commit message for this feature gives a simple example of running all your C source code through the `indent` program before committing. -You can set it up by setting the filter attribute in your `.gitattributes` file to filter `*.c` files with the ``indent'' filter: +You can set it up by setting the filter attribute in your `.gitattributes` file to filter `*.c` files with the "`indent`" filter: [source,ini] ---- *.c filter=indent ---- -Then, tell Git what the ``indent'' filter does on smudge and clean: +Then, tell Git what the "`indent`" filter does on smudge and clean: [source,console] ---- diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 207c69da..2c5e7356 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -24,7 +24,7 @@ Finally, Git looks for configuration values in the configuration file in the Git These values are specific to that single repository, and represent passing the `--local` option to `git config`. If you don't specify which level you want to work with, this is the default. -Each of these ``levels'' (system, global, local) overwrites values in the previous level, so values in `.git/config` trump those in `[path]/etc/gitconfig`, for instance. +Each of these "`levels`" (system, global, local) overwrites values in the previous level, so values in `.git/config` trump those in `[path]/etc/gitconfig`, for instance. [NOTE] ==== @@ -190,7 +190,7 @@ Continuing under the assumption that you meant 'checkout' in 0.1 seconds automatically... ---- -Note that ``0.1 seconds'' business. +Note that "`0.1 seconds`" business. `help.autocorrect` is actually an integer which represents tenths of a second. So if you set it to 50, Git will give you 5 seconds to change your mind before executing the autocorrected command. diff --git a/book/08-customizing-git/sections/policy.asc b/book/08-customizing-git/sections/policy.asc index a20d40d8..852a0c03 100644 --- a/book/08-customizing-git/sections/policy.asc +++ b/book/08-customizing-git/sections/policy.asc @@ -18,7 +18,7 @@ The `update` hook runs once per branch being pushed and takes three arguments: * The new revision being pushed You also have access to the user doing the pushing if the push is being run over SSH. -If you've allowed everyone to connect with a single user (like ``git'') via public-key authentication, you may have to give that user a shell wrapper that determines which user is connecting based on the public key, and set an environment variable accordingly. +If you've allowed everyone to connect with a single user (like "`git`") via public-key authentication, you may have to give that user a shell wrapper that determines which user is connecting based on the public key, and set an environment variable accordingly. Here we'll assume the connecting user is in the `$USER` environment variable, so your update script begins by gathering all the information you need: [source,ruby] @@ -41,7 +41,7 @@ Don't judge – it's easier to demonstrate this way. ===== Enforcing a Specific Commit-Message Format Your first challenge is to enforce that each commit message adheres to a particular format. -Just to have a target, assume that each message has to include a string that looks like ``ref: 1234'' because you want each commit to link to a work item in your ticketing system. +Just to have a target, assume that each message has to include a string that looks like "`ref: 1234`" because you want each commit to link to a work item in your ticketing system. You must look at each commit being pushed up, see if that string is in the commit message, and, if the string is absent from any of the commits, exit non-zero so the push is rejected. You can get a list of the SHA-1 values of all the commits that are being pushed by taking the `$newrev` and `$oldrev` values and passing them to a Git plumbing command called `git rev-list`. diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index 1c0770c9..a992e1b6 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -47,7 +47,7 @@ $ hg clone http://selenic.com/repo/hello /tmp/hello ===== Getting Started -Now that we have a suitable ``server-side'' repository, we can go through a typical workflow. +Now that we have a suitable "`server-side`" repository, we can go through a typical workflow. As you'll see, these two systems are similar enough that there isn't much friction. As always with Git, first we clone: @@ -93,7 +93,7 @@ $ tree .git/refs Git-remote-hg is trying to make things more idiomatically Git-esque, but under the hood it's managing the conceptual mapping between two slightly different systems. The `refs/hg` directory is where the actual remote refs are stored. -For example, the `refs/hg/origin/branches/default` is a Git ref file that contains the SHA-1 starting with ``ac7955c'', which is the commit that `master` points to. +For example, the `refs/hg/origin/branches/default` is a Git ref file that contains the SHA-1 starting with "`ac7955c`", which is the commit that `master` points to. So the `refs/hg` directory is kind of like a fake `refs/remotes/origin`, but it has the added distinction between bookmarks and branches. The `notes/hg` file is the starting point for how git-remote-hg maps Git commit hashes to Mercurial changeset IDs. @@ -121,7 +121,7 @@ $ git cat-file -p ac9117f So `refs/notes/hg` points to a tree, which in the Git object database is a list of other objects with names. `git ls-tree` outputs the mode, type, object hash, and filename for items inside a tree. -Once we dig down to one of the tree items, we find that inside it is a blob named ``ac9117f'' (the SHA-1 hash of the commit pointed to by `master`), with contents ``0a04b98'' (which is the ID of the Mercurial changeset at the tip of the `default` branch). +Once we dig down to one of the tree items, we find that inside it is a blob named "`ac9117f`" (the SHA-1 hash of the commit pointed to by `master`), with contents "`0a04b98`" (which is the ID of the Mercurial changeset at the tip of the `default` branch). The good news is that we mostly don't have to worry about all of this. The typical workflow won't be very different from working with a Git remote. @@ -171,7 +171,7 @@ $ git log --oneline --graph --decorate --all * 65bb417 Create a standard 'hello, world' program ---- -Since we used the `--all` flag, we see the ``notes'' refs that are used internally by git-remote-hg, but we can ignore them. +Since we used the `--all` flag, we see the "`notes`" refs that are used internally by git-remote-hg, but we can ignore them. The rest is what we expected; `origin/master` has advanced by one commit, and our history has now diverged. Unlike the other systems we work with in this chapter, Mercurial is capable of handling merges, so we're not going to do anything fancy. @@ -233,9 +233,9 @@ The changeset numbered _2_ was made by Mercurial, and the changesets numbered _3 ===== Branches and Bookmarks Git has only one kind of branch: a reference that moves when commits are made. -In Mercurial, this kind of a reference is called a ``bookmark,'' and it behaves in much the same way as a Git branch. +In Mercurial, this kind of a reference is called a "`bookmark,`" and it behaves in much the same way as a Git branch. -Mercurial's concept of a ``branch'' is more heavyweight. +Mercurial's concept of a "`branch`" is more heavyweight. The branch that a changeset is made on is recorded _with the changeset_, which means it will always be in the repository history. Here's an example of a commit that was made on the `develop` branch: @@ -250,7 +250,7 @@ date: Thu Aug 14 20:06:38 2014 -0700 summary: More documentation ---- -Note the line that begins with ``branch''. +Note the line that begins with "`branch`". Git can't really replicate this (and doesn't need to; both types of branch can be represented as a Git ref), but git-remote-hg needs to understand the difference, because Mercurial cares. Creating Mercurial bookmarks is as easy as creating Git branches. @@ -298,7 +298,7 @@ o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm Note the new `[featureA]` tag on revision 5. These act exactly like Git branches on the Git side, with one exception: you can't delete a bookmark from the Git side (this is a limitation of remote helpers). -You can work on a ``heavyweight'' Mercurial branch also: just put a branch in the `branches` namespace: +You can work on a "`heavyweight`" Mercurial branch also: just put a branch in the `branches` namespace: [source,console] ---- @@ -344,7 +344,7 @@ o changeset: 5:bd5ac26f11f9 [...] ---- -The branch name ``permanent'' was recorded with the changeset marked _7_. +The branch name "`permanent`" was recorded with the changeset marked _7_. From the Git side, working with either of these branch styles is the same: just checkout, commit, fetch, merge, pull, and push as you normally would. One thing you should know is that Mercurial doesn't support rewriting history, only adding to it. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index 61ae65c7..2cd03461 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -8,7 +8,7 @@ As such, it's designed with the constraints of its day; it assumes you're always To be sure, its features and constraints are well-suited to several specific problems, but there are lots of projects using Perforce where Git would actually work better. There are two options if you'd like to mix your use of Perforce and Git. -The first one we'll cover is the ``Git Fusion'' bridge from the makers of Perforce, which lets you expose subtrees of your Perforce depot as read-write Git repositories. +The first one we'll cover is the "`Git Fusion`" bridge from the makers of Perforce, which lets you expose subtrees of your Perforce depot as read-write Git repositories. The second is git-p4, a client-side bridge that lets you use Git as a Perforce client, without requiring any reconfiguration of the Perforce server. [[_p4_git_fusion]] @@ -30,7 +30,7 @@ image::images/git-fusion-boot.png[The Git Fusion virtual machine boot screen] You should take note of the IP address that's shown here, we'll be using it later on. Next, we'll create a Perforce user. -Select the ``Login'' option at the bottom and press enter (or SSH to the machine), and log in as `root`. +Select the "`Login`" option at the bottom and press enter (or SSH to the machine), and log in as `root`. Then use these commands to create a user: [source,console] @@ -186,7 +186,7 @@ Note that the email addresses and full names should be unique, unless you want a Perforce Git Fusion is a two-way bridge between Perforce and Git version control. Let's have a look at how it feels to work from the Git side. -We'll assume we've mapped in the ``Jam'' project using a configuration file as shown above, which we can clone like this: +We'll assume we've mapped in the "`Jam`" project using a configuration file as shown above, which we can clone like this: [source,console] ---- @@ -297,7 +297,7 @@ At top right, we have a visual graph of how different revisions of the file are The rest of the view is given to the details view for the selected revision (`2` in this case). One thing to notice is that the graph looks exactly like the one in Git's history. -Perforce didn't have a named branch to store the `1` and `2` commits, so it made an ``anonymous'' branch in the `.git-fusion` directory to hold it. +Perforce didn't have a named branch to store the `1` and `2` commits, so it made an "`anonymous`" branch in the `.git-fusion` directory to hold it. This will also happen for named Git branches that don't correspond to a named Perforce branch (and you can later map them to a Perforce branch using the configuration file). Most of this happens behind the scenes, but the end result is that one person on a team can be using Git, another can be using Perforce, and neither of them will know about the other's choice. @@ -350,7 +350,7 @@ Initialized empty Git repository in /private/tmp/www-shallow/.git/ Doing initial import of //depot/www/live/ from revision #head into refs/remotes/p4/master ---- -This creates what in Git terms is a ``shallow'' clone; only the very latest Perforce revision is imported into Git; remember, Perforce isn't designed to give every revision to every user. +This creates what in Git terms is a "`shallow`" clone; only the very latest Perforce revision is imported into Git; remember, Perforce isn't designed to give every revision to every user. This is enough to use Git as a Perforce client, but for other purposes it's not enough. Once it's finished, we have a fully-functional Git repository: @@ -362,7 +362,7 @@ $ git log --oneline --all --graph --decorate * 70eaf78 (HEAD, p4/master, p4/HEAD, master) Initial import of //depot/www/live/ from the state at revision #head ---- -Note how there's a ``p4'' remote for the Perforce server, but everything else looks like a standard clone. +Note how there's a "`p4`" remote for the Perforce server, but everything else looks like a standard clone. Actually, that's a bit misleading; there isn't actually a remote there. [source,console] @@ -638,7 +638,7 @@ $ cd project; git log --oneline --all --graph --decorate * 2b83451 Project init ---- -Note the ``@all'' specifier in the depot path; that tells git-p4 to clone not just the latest changeset for that subtree, but all changesets that have ever touched those paths. +Note the "`@all`" specifier in the depot path; that tells git-p4 to clone not just the latest changeset for that subtree, but all changesets that have ever touched those paths. This is closer to Git's concept of a clone, but if you're working on a project with a long history, it could take a while. The `--detect-branches` flag tells git-p4 to use Perforce's branch specs to map the branches to Git refs. @@ -653,7 +653,7 @@ $ git config git-p4.branchList main:dev $ git clone --detect-branches //depot/project@all . ---- -Setting the `git-p4.branchList` configuration variable to `main:dev` tells git-p4 that ``main'' and ``dev'' are both branches, and the second one is a child of the first one. +Setting the `git-p4.branchList` configuration variable to `main:dev` tells git-p4 that "`main`" and "`dev`" are both branches, and the second one is a child of the first one. If we now `git checkout -b dev p4/project/dev` and make some commits, git-p4 is smart enough to target the right branch when we do `git p4 submit`. Unfortunately, git-p4 can't mix shallow clones and multiple branches; if you have a huge project and want to work on more than one branch, you'll have to `git p4 clone` once for each branch you want to submit to. diff --git a/book/09-git-and-other-scms/sections/client-svn.asc b/book/09-git-and-other-scms/sections/client-svn.asc index 5ee30720..cb50aa59 100644 --- a/book/09-git-and-other-scms/sections/client-svn.asc +++ b/book/09-git-and-other-scms/sections/client-svn.asc @@ -370,7 +370,7 @@ $ git branch opera remotes/origin/opera ---- Now, if you want to merge your `opera` branch into `trunk` (your `master` branch), you can do so with a normal `git merge`. -But you need to provide a descriptive commit message (via `-m`), or the merge will say ``Merge branch opera'' instead of something useful. +But you need to provide a descriptive commit message (via `-m`), or the merge will say "`Merge branch opera`" instead of something useful. Remember that although you're using `git merge` to do this operation, and the merge likely will be much easier than it would be in Subversion (because Git will automatically detect the appropriate merge base for you), this isn't a normal Git merge commit. You have to push this data back to a Subversion server that can't handle a commit that tracks more than one parent; so, after you push it up, it will look like a single commit that squashed in all the work of another branch under a single commit. diff --git a/book/09-git-and-other-scms/sections/import-custom.asc b/book/09-git-and-other-scms/sections/import-custom.asc index 14bc9c00..e3e58ff5 100644 --- a/book/09-git-and-other-scms/sections/import-custom.asc +++ b/book/09-git-and-other-scms/sections/import-custom.asc @@ -55,7 +55,7 @@ end ---- You run `print_export` inside each directory, which takes the manifest and mark of the previous snapshot and returns the manifest and mark of this one; that way, you can link them properly. -``Mark'' is the `fast-import` term for an identifier you give to a commit; as you create commits, you give each one a mark that you can use to link to it from other commits. +"`Mark`" is the `fast-import` term for an identifier you give to a commit; as you create commits, you give each one a mark that you can use to link to it from other commits. So, the first thing to do in your `print_export` method is generate a mark from the directory name: [source,ruby] diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index becb37df..df306b3f 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -105,7 +105,7 @@ $ for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git ---- It may happen that you'll see some extra branches which are suffixed by `@xxx` (where xxx is a number), while in Subversion you only see one branch. -This is actually a Subversion feature called ``peg-revisions'', which is something that Git simply has no syntactical counterpart for. +This is actually a Subversion feature called "`peg-revisions`", which is something that Git simply has no syntactical counterpart for. Hence, `git svn` simply adds the svn version number to the branch name just in the same way as you would have written it in svn to address the peg-revision of that branch. If you do not care anymore about the peg-revisions, simply remove them: diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index eefc93e4..fc7e51d1 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -51,11 +51,11 @@ If you happen to have a lot of projects with large files that have the exact sam ==== Pathspecs -A ``pathspec'' refers to how you specify paths to things in Git, including the use of wildcards. +A "`pathspec`" refers to how you specify paths to things in Git, including the use of wildcards. These are used in the `.gitignore` file, but also on the command-line (`git add *.c`). *`GIT_GLOB_PATHSPECS`* and *`GIT_NOGLOB_PATHSPECS`* control the default behavior of wildcards in pathspecs. -If `GIT_GLOB_PATHSPECS` is set to 1, wildcard characters act as wildcards (which is the default); if `GIT_NOGLOB_PATHSPECS` is set to 1, wildcard characters only match themselves, meaning something like `*.c` would only match a file _named_ ``*.c'', rather than any file whose name ends with `.c`. +If `GIT_GLOB_PATHSPECS` is set to 1, wildcard characters act as wildcards (which is the default); if `GIT_NOGLOB_PATHSPECS` is set to 1, wildcard characters only match themselves, meaning something like `*.c` would only match a file _named_ "`*.c`", rather than any file whose name ends with `.c`. You can override this in individual cases by starting the pathspec with `:(glob)` or `:(literal)`, as in `:(glob)*.c`. *`GIT_LITERAL_PATHSPECS`* disables both of the above behaviors; no wildcard characters will work, and the override prefixes are disabled as well. @@ -67,17 +67,17 @@ You can override this in individual cases by starting the pathspec with `:(glob) The final creation of a Git commit object is usually done by `git-commit-tree`, which uses these environment variables as its primary source of information, falling back to configuration values only if these aren't present. -*`GIT_AUTHOR_NAME`* is the human-readable name in the ``author'' field. +*`GIT_AUTHOR_NAME`* is the human-readable name in the "`author`" field. -*`GIT_AUTHOR_EMAIL`* is the email for the ``author'' field. +*`GIT_AUTHOR_EMAIL`* is the email for the "`author`" field. -*`GIT_AUTHOR_DATE`* is the timestamp used for the ``author'' field. +*`GIT_AUTHOR_DATE`* is the timestamp used for the "`author`" field. -*`GIT_COMMITTER_NAME`* sets the human name for the ``committer'' field. +*`GIT_COMMITTER_NAME`* sets the human name for the "`committer`" field. -*`GIT_COMMITTER_EMAIL`* is the email address for the ``committer'' field. +*`GIT_COMMITTER_EMAIL`* is the email address for the "`committer`" field. -*`GIT_COMMITTER_DATE`* is used for the timestamp in the ``committer'' field. +*`GIT_COMMITTER_DATE`* is used for the timestamp in the "`committer`" field. *`EMAIL`* is the fallback email address in case the `user.email` configuration value isn't set. If _this_ isn't set, Git falls back to the system user and host names. @@ -128,7 +128,7 @@ Want to _really_ know what Git is up to? Git has a fairly complete set of traces embedded, and all you need to do is turn them on. The possible values of these variables are as follows: -* ``true'', ``1'', or ``2'' – the trace category is written to stderr. +* "`true`", "`1`", or "`2`" – the trace category is written to stderr. * An absolute path starting with `/` – the trace output will be written to that file. *`GIT_TRACE`* controls general traces, which don't fit into any specific category. diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index b28cf131..1cdfcd52 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -6,10 +6,10 @@ This section will cover some of these scenarios. [[_git_gc]] ==== Maintenance -Occasionally, Git automatically runs a command called ``auto gc''. +Occasionally, Git automatically runs a command called "`auto gc`". Most of the time, this command does nothing. However, if there are too many loose objects (objects not in a packfile) or too many packfiles, Git launches a full-fledged `git gc` command. -The ``gc'' stands for garbage collect, and the command does a number of things: it gathers up all the loose objects and places them in packfiles, it consolidates packfiles into one big packfile, and it removes objects that aren't reachable from any commit and are a few months old. +The "`gc`" stands for garbage collect, and the command does a number of things: it gathers up all the loose objects and places them in packfiles, it consolidates packfiles into one big packfile, and it removes objects that aren't reachable from any commit and are a few months old. You can run auto gc manually as follows: @@ -168,7 +168,7 @@ dangling tree aea790b9a58f6cf6f2804eeac9f0abbe9631e4c9 dangling blob 7108f7ecb345ee9d0084193f147cdad4d2998293 ---- -In this case, you can see your missing commit after the string ``dangling commit''. +In this case, you can see your missing commit after the string "`dangling commit`". You can recover it the same way, by adding a branch that points to that SHA-1. [[_removing_objects]] diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 916b4e7f..04e37f1c 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -219,7 +219,7 @@ $ git cat-file -p 0155eb4229851634a0f03eb265b69f5a2d56f341 100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt ---- -Notice that this tree has both file entries and also that the `test.txt` SHA-1 is the ``version 2'' SHA-1 from earlier (`1f7a7a`). +Notice that this tree has both file entries and also that the `test.txt` SHA-1 is the "`version 2`" SHA-1 from earlier (`1f7a7a`). Just for fun, you'll add the first tree as a subdirectory into this one. You can read trees into your staging area by calling `git read-tree`. In this case, you can read an existing tree into your staging area as a subtree by using the `--prefix` option with this command: @@ -354,7 +354,7 @@ image::images/data-model-3.png[All the reachable objects in your Git directory] We mentioned earlier that there is a header stored with every object you commit to your Git object database. Let's take a minute to see how Git stores its objects. -You'll see how to store a blob object -- in this case, the string ``what is up, doc?'' -- interactively in the Ruby scripting language. +You'll see how to store a blob object -- in this case, the string "`what is up, doc?`" -- interactively in the Ruby scripting language. You can start up interactive Ruby mode with the `irb` command: diff --git a/book/10-git-internals/sections/packfiles.asc b/book/10-git-internals/sections/packfiles.asc index b1229c08..d77b8c65 100644 --- a/book/10-git-internals/sections/packfiles.asc +++ b/book/10-git-internals/sections/packfiles.asc @@ -85,8 +85,8 @@ You have two nearly identical 22K objects on your disk (each compressed to appro Wouldn't it be nice if Git could store one of them in full but then the second object only as the delta between it and the first? It turns out that it can. -The initial format in which Git saves objects on disk is called a ``loose'' object format. -However, occasionally Git packs up several of these objects into a single binary file called a ``packfile'' in order to save space and be more efficient. +The initial format in which Git saves objects on disk is called a "`loose`" object format. +However, occasionally Git packs up several of these objects into a single binary file called a "`packfile`" in order to save space and be more efficient. Git does this if you have too many loose objects around, if you run the `git gc` command manually, or if you push to a remote server. To see what happens, you can manually ask Git to pack up the objects by calling the `git gc` command: @@ -112,7 +112,7 @@ $ find .git/objects -type f .git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.pack ---- -The objects that remain are the blobs that aren't pointed to by any commit -- in this case, the ``what is up, doc?'' example and the ``test content'' example blobs you created earlier. +The objects that remain are the blobs that aren't pointed to by any commit -- in this case, the "`what is up, doc?`" example and the "`test content`" example blobs you created earlier. Because you never added them to any commits, they're considered dangling and aren't packed up in your new packfile. The other files are your new packfile and an index. diff --git a/book/10-git-internals/sections/plumbing-porcelain.asc b/book/10-git-internals/sections/plumbing-porcelain.asc index e7a26a15..53b40955 100644 --- a/book/10-git-internals/sections/plumbing-porcelain.asc +++ b/book/10-git-internals/sections/plumbing-porcelain.asc @@ -3,7 +3,7 @@ This book covers primarily how to use Git with 30 or so subcommands such as `checkout`, `branch`, `remote`, and so on. But because Git was initially a toolkit for a version control system rather than a full user-friendly VCS, it has a number of subcommands that do low-level work and were designed to be chained together UNIX-style or called from scripts. -These commands are generally referred to as Git's ``plumbing'' commands, while the more user-friendly commands are called ``porcelain'' commands. +These commands are generally referred to as Git's "`plumbing`" commands, while the more user-friendly commands are called "`porcelain`" commands. As you will have noticed by now, this book's first nine chapters deal almost exclusively with porcelain commands. But in this chapter, you'll be dealing mostly with the lower-level plumbing commands, because they give you access to the inner workings of Git, and help demonstrate how and why Git does what it does. diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index 0f794b33..cac0ff0c 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -4,7 +4,7 @@ If you were interested in seeing the history of your repository reachable from commit, say, `1a410e`, you could run something like `git log 1a410e` to display that history, but you would still have to remember that `1a410e` is the commit you want to use as the starting point for that history. Instead, it would be easier if you had a file in which you could store that SHA-1 value under a simple name so you could use that simple name rather than the raw SHA-1 value. -In Git, these simple names are called ``references'' or ``refs''; you can find the files that contain those SHA-1 values in the `.git/refs` directory. +In Git, these simple names are called "`references`" or "`refs`"; you can find the files that contain those SHA-1 values in the `.git/refs` directory. In the current project, this directory contains no files, but it does contain a simple structure: [source,console] diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index 9b9e6dec..2a127ab6 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -1,12 +1,12 @@ === Transfer Protocols -Git can transfer data between two repositories in two major ways: the ``dumb'' protocol and the ``smart'' protocol. +Git can transfer data between two repositories in two major ways: the "`dumb`" protocol and the "`smart`" protocol. This section will quickly cover how these two main protocols operate. ==== The Dumb Protocol If you're setting up a repository to be served read-only over HTTP, the dumb protocol is likely what will be used. -This protocol is called ``dumb'' because it requires no Git-specific code on the server side during the transport process; the fetch process is a series of HTTP `GET` requests, where the client can assume the layout of the Git repository on the server. +This protocol is called "`dumb`" because it requires no Git-specific code on the server side during the transport process; the fetch process is a series of HTTP `GET` requests, where the client can assume the layout of the Git repository on the server. [NOTE] ==== @@ -243,9 +243,9 @@ After `fetch-pack` connects, `upload-pack` sends back something like this: This is very similar to what `receive-pack` responds with, but the capabilities are different. In addition, it sends back what HEAD points to (`symref=HEAD:refs/heads/master`) so the client knows what to check out if this is a clone. -At this point, the `fetch-pack` process looks at what objects it has and responds with the objects that it needs by sending ``want'' and then the SHA-1 it wants. -It sends all the objects it already has with ``have'' and then the SHA-1. -At the end of this list, it writes ``done'' to initiate the `upload-pack` process to begin sending the packfile of the data it needs: +At this point, the `fetch-pack` process looks at what objects it has and responds with the objects that it needs by sending "`want`" and then the SHA-1 it wants. +It sends all the objects it already has with "`have`" and then the SHA-1. +At the end of this list, it writes "`done`" to initiate the `upload-pack` process to begin sending the packfile of the data it needs: [source] ---- diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index eae5e369..156ed6af 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -7,7 +7,7 @@ But plain text isn't the best choice for all tasks; sometimes a visual represent It's important to note that different interfaces are tailored for different workflows. Some clients expose only a carefully curated subset of Git functionality, in order to support a specific way of working that the author considers effective. -When viewed in this light, none of these tools can be called ``better'' than any of the others, they're simply more fit for their intended purpose. +When viewed in this light, none of these tools can be called "`better`" than any of the others, they're simply more fit for their intended purpose. Also note that there's nothing these graphical clients can do that the command-line client can't; the command-line is still where you'll have the most power and control when working with your repositories. ==== `gitk` and `git-gui` @@ -59,9 +59,9 @@ At top right is the diff view, which shows the changes for the currently-selecte You can stage individual hunks (or individual lines) by right-clicking in this area. At the bottom right is the message and action area. -Type your message into the text box and click ``Commit'' to do something similar to `git commit`. -You can also choose to amend the last commit by choosing the ``Amend'' radio button, which will update the ``Staged Changes'' area with the contents of the last commit. -Then you can simply stage or unstage some changes, alter the commit message, and click ``Commit'' again to replace the old commit with a new one. +Type your message into the text box and click "`Commit`" to do something similar to `git commit`. +You can also choose to amend the last commit by choosing the "`Amend`" radio button, which will update the "`Staged Changes`" area with the contents of the last commit. +Then you can simply stage or unstage some changes, alter the commit message, and click "`Commit`" again to replace the old commit with a new one. `gitk` and `git-gui` are examples of task-oriented tools. Each of them is tailored for a specific purpose (viewing history and creating commits, respectively), and omit the features not necessary for that task. @@ -80,13 +80,13 @@ image::images/github_mac.png[GitHub for macOS] image::images/github_win.png[GitHub for Windows] They are designed to look and work very much alike, so we'll treat them like a single product in this chapter. -We won't be doing a detailed rundown of these tools (they have their own documentation), but a quick tour of the ``changes'' view (which is where you'll spend most of your time) is in order. +We won't be doing a detailed rundown of these tools (they have their own documentation), but a quick tour of the "`changes`" view (which is where you'll spend most of your time) is in order. -* On the left is the list of repositories the client is tracking; you can add a repository (either by cloning or attaching locally) by clicking the ``+'' icon at the top of this area. +* On the left is the list of repositories the client is tracking; you can add a repository (either by cloning or attaching locally) by clicking the "`+`" icon at the top of this area. * In the center is a commit-input area, which lets you input a commit message, and select which files should be included. On Windows, the commit history is displayed directly below this; on macOS, it's on a separate tab. * On the right is a diff view, which shows what's changed in your working directory, or which changes were included in the selected commit. -* The last thing to notice is the ``Sync'' button at the top-right, which is the primary way you interact over the network. +* The last thing to notice is the "`Sync`" button at the top-right, which is the primary way you interact over the network. [NOTE] ==== @@ -99,7 +99,7 @@ While they're designed to highlight GitHub's service and recommended workflow, t GitHub for Windows can be downloaded from https://windows.github.com[], and GitHub for macOS from https://mac.github.com[]. When the applications are first run, they walk you through all the first-time Git setup, such as configuring your name and email address, and both set up sane defaults for many common configuration options, such as credential caches and CRLF behavior. -Both are ``evergreen'' – updates are downloaded and installed in the background while the applications are open. +Both are "`evergreen`" – updates are downloaded and installed in the background while the applications are open. This helpfully includes a bundled version of Git, which means you probably won't have to worry about manually updating it again. On Windows, the client includes a shortcut to launch PowerShell with Posh-git, which we'll talk more about later in this chapter. @@ -110,14 +110,14 @@ If you already have a local repository, just drag its directory from the Finder ===== Recommended Workflow Once it's installed and configured, you can use the GitHub client for many common Git tasks. -The intended workflow for this tool is sometimes called the ``GitHub Flow.'' +The intended workflow for this tool is sometimes called the "`GitHub Flow.`" We cover this in more detail in <>, but the general gist is that (a) you'll be committing to a branch, and (b) you'll be syncing up with a remote repository fairly regularly. Branch management is one of the areas where the two tools diverge. On macOS, there's a button at the top of the window for creating a new branch: -.``Create Branch'' button on macOS -image::images/branch_widget_mac.png[``Create Branch'' button on macOS] +."`Create Branch`" button on macOS +image::images/branch_widget_mac.png["`Create Branch`" button on macOS] On Windows, this is done by typing the new branch's name in the branch-switching widget: @@ -126,9 +126,9 @@ image::images/branch_widget_win.png[Creating a branch on Windows] Once your branch is created, making new commits is fairly straightforward. Make some changes in your working directory, and when you switch to the GitHub client window, it will show you which files changed. -Enter a commit message, select the files you'd like to include, and click the ``Commit'' button (ctrl-enter or ⌘-enter). +Enter a commit message, select the files you'd like to include, and click the "`Commit`" button (ctrl-enter or ⌘-enter). -The main way you interact with other repositories over the network is through the ``Sync'' feature. +The main way you interact with other repositories over the network is through the "`Sync`" feature. Git internally has separate operations for pushing, fetching, merging, and rebasing, but the GitHub clients collapse all of these into one multi-step feature. Here's what happens when you click the Sync button: diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 3594d296..c0ba8e58 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -18,7 +18,7 @@ This is a hub for performing Git actions; when you're _writing_ code, you'll pro [[vs_home]] .The "Home" view for a Git repository in Visual Studio -image::images/vs-2.png[The ``Home'' view for a Git repository in Visual Studio] +image::images/vs-2.png[The "`Home`" view for a Git repository in Visual Studio] Visual Studio now has a powerful task-focused UI for Git. It includes a linear history view, a diff viewer, remote commands, and many other capabilities. diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index b8c79499..9e416173 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -93,7 +93,7 @@ There's quite a bit going on here, so let's go through it one section at a time. The first line gets a pointer to the `master` reference. JGit automatically grabs the _actual_ `master` ref, which lives at `refs/heads/master`, and returns an object that lets you fetch information about the reference. You can get the name (`.getName()`), and either the target object of a direct reference (`.getObjectId()`) or the reference pointed to by a symbolic ref (`.getTarget()`). -Ref objects are also used to represent tag refs and objects, so you can ask if the tag is ``peeled,'' meaning that it points to the final target of a (potentially long) string of tag objects. +Ref objects are also used to represent tag refs and objects, so you can ask if the tag is "`peeled,`" meaning that it points to the final target of a (potentially long) string of tag objects. The second line gets the target of the `master` reference, which is returned as an ObjectId instance. ObjectId represents the SHA-1 hash of an object, which might or might not exist in Git's object database. diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 00139ca2..9edca885 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -37,7 +37,7 @@ There's also the `git_repository_open_ext` which includes options for searching, The second chunk of code uses rev-parse syntax (see <> for more on this) to get the commit that HEAD eventually points to. The type returned is a `git_object` pointer, which represents something that exists in the Git object database for a repository. -`git_object` is actually a ``parent'' type for several different kinds of objects; the memory layout for each of the ``child'' types is the same as for `git_object`, so you can safely cast to the right one. +`git_object` is actually a "`parent`" type for several different kinds of objects; the memory layout for each of the "`child`" types is the same as for `git_object`, so you can safely cast to the right one. In this case, `git_object_type(commit)` would return `GIT_OBJ_COMMIT`, so it's safe to cast to a `git_commit` pointer. The next chunk shows how to access the commit's properties. @@ -111,7 +111,7 @@ If you're not a rubyist, we touch on some other bindings in <<_libgit2_bindings> ==== Advanced Functionality Libgit2 has a couple of capabilities that are outside the scope of core Git. -One example is pluggability: Libgit2 allows you to provide custom ``backends'' for several types of operation, so you can store things in a different way than stock Git does. +One example is pluggability: Libgit2 allows you to provide custom "`backends`" for several types of operation, so you can store things in a different way than stock Git does. Libgit2 allows custom backends for configuration, ref storage, and the object database, among other things. Let's take a look at how this works. @@ -135,7 +135,7 @@ error = git_repository_set_odb(repo, odb); // <4> _Note that errors are captured, but not handled. We hope your code is better than ours._ -<1> Initialize an empty object database (ODB) ``frontend,'' which will act as a container for the ``backends'' which are the ones doing the real work. +<1> Initialize an empty object database (ODB) "`frontend,`" which will act as a container for the "`backends`" which are the ones doing the real work. <2> Initialize a custom ODB backend. <3> Add the backend to the frontend. <4> Open a repository, and set it to use our ODB to look up objects. diff --git a/ch03-git-branching.asc b/ch03-git-branching.asc index d1528f22..60d1a193 100644 --- a/ch03-git-branching.asc +++ b/ch03-git-branching.asc @@ -6,7 +6,7 @@ Nearly every VCS has some form of branching support. Branching means you diverge from the main line of development and continue to do work without messing with that main line. In many VCS tools, this is a somewhat expensive process, often requiring you to create a new copy of your source code directory, which can take a long time for large projects. -Some people refer to Git's branching model as its ``killer feature,'' and it certainly sets Git apart in the VCS community. +Some people refer to Git's branching model as its "`killer feature,`" and it certainly sets Git apart in the VCS community. Why is it so special? The way Git branches is incredibly lightweight, making branching operations nearly instantaneous, and switching back and forth between branches generally just as fast. Unlike many other VCSs, Git encourages workflows that branch and merge often, even multiple times in a day. diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index 7c4c9114..ac6a1589 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -13,7 +13,7 @@ The second part of this chapter covers how to migrate your project into Git from (((Git as a client))) Git provides such a nice experience for developers that many people have figured out how to use it on their workstation, even if the rest of their team is using an entirely different VCS. -There are a number of these adapters, called ``bridges,'' available. +There are a number of these adapters, called "`bridges,`" available. Here we'll cover the ones you're most likely to run into in the wild. include::book/09-git-and-other-scms/sections/client-svn.asc[] diff --git a/progit.asc b/progit.asc index 30d0c5ea..8c85ad17 100644 --- a/progit.asc +++ b/progit.asc @@ -1,5 +1,4 @@ -Pro Git -======= += Pro Git Scott Chacon; Ben Straub :doctype: book :docinfo: From 978bffdeaaecab754942064903ee68b2e9a30220 Mon Sep 17 00:00:00 2001 From: Pessimist Date: Fri, 6 Nov 2020 08:58:37 +0800 Subject: [PATCH 156/549] `git restore` introduced in v2.23.0 --- book/02-git-basics/sections/undoing.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index dabc510b..ef563223 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -150,9 +150,9 @@ However, anything you lose that was never committed is likely never to be seen a [[undoing_git_restore]] ==== Undoing things with git restore -Git version 2.25.0 introduced a new command: `git restore`. +Git version 2.23.0 introduced a new command: `git restore`. It's basically an alternative to `git reset` which we just covered. -From Git version 2.25.0 onwards, Git will use `git restore` instead of `git reset` for many undo operations. +From Git version 2.23.0 onwards, Git will use `git restore` instead of `git reset` for many undo operations. Let's retrace our steps, and undo things with `git restore` instead of `git reset`. From 2e063f4d800b73089029c8308c722a2113238807 Mon Sep 17 00:00:00 2001 From: Marat Radchenko Date: Sun, 1 Mar 2020 13:15:34 +0300 Subject: [PATCH 157/549] Stop adding negative leveloffset for EPUB asciidoctor-epub3 1.5.0-alpha-14 now handles whole book as a single document. Negative leveloffset 1. Breaks appendix because appendix subsections are not allowed to be higher that level 3. When leveloffset is applied to them, they become level 2 and are no longer children of appendix and instead become standalone chapters 2. Transforms progit into a multi-part book instead of multi-chapter book, what is wrong After removal of negative offset, epub is structurally equivalent to other formats. --- progit.asc | 2 -- 1 file changed, 2 deletions(-) diff --git a/progit.asc b/progit.asc index 8c85ad17..26e41bab 100644 --- a/progit.asc +++ b/progit.asc @@ -8,8 +8,6 @@ Scott Chacon; Ben Straub :front-cover-image: image:book/cover.png[width=1050,height=1600] :icons: font -ifdef::ebook-format[:leveloffset: -1] - include::book/license.asc[] include::book/preface_schacon.asc[] From 835fac04dae929e92c36e032f9486286a7abba38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Nov 2020 06:15:13 +0000 Subject: [PATCH 158/549] Update asciidoctor-epub3 requirement Updates the requirements on [asciidoctor-epub3](https://github.com/asciidoctor/asciidoctor-epub3) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-epub3/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-epub3/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-epub3/compare/v1.5.0.alpha.18...v1.5.0.alpha.19) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3321641d..9d174518 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ gem 'asciidoctor', '2.0.11' gem 'json', '2.3.1' gem 'awesome_print', '1.8.0' -gem 'asciidoctor-epub3', '1.5.0.alpha.18' +gem 'asciidoctor-epub3', '1.5.0.alpha.19' gem 'asciidoctor-pdf', '1.5.3' gem 'coderay', '1.1.3' From dff4b7cfefe32b33c44a965517fd43c415bc7e9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2020 05:43:02 +0000 Subject: [PATCH 159/549] Update asciidoctor requirement from 2.0.11 to 2.0.12 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.11...v2.0.12) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3321641d..86626079 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', ' 13.0.1' -gem 'asciidoctor', '2.0.11' +gem 'asciidoctor', '2.0.12' gem 'json', '2.3.1' gem 'awesome_print', '1.8.0' From 682a40c1d761177c066f470e8e272327460bea2f Mon Sep 17 00:00:00 2001 From: Sean Jacobs Date: Thu, 12 Nov 2020 22:38:33 +1100 Subject: [PATCH 160/549] updated TextEdit config with long form options Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 7c8241df..ee937661 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -62,7 +62,7 @@ Accompanying the configuration instructions in <>, |Scratch (Linux)|`git config --global core.editor "scratch-text-editor"` |Sublime Text (macOS) |`git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait"` |Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w"` (Also see note below) -|TextEdit (macOS)|`git config --global core.editor "open -W -n"` +|TextEdit (macOS)|`git config --global core.editor "open --wait-apps --new -e"` |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |UltraEdit (Windows 64-bit) | `git config --global core.editor Uedit32` From c766b27e9be7d15105cedae8037aa83cd70e7810 Mon Sep 17 00:00:00 2001 From: Mikhail Menshikov Date: Mon, 16 Nov 2020 13:11:16 +0300 Subject: [PATCH 161/549] Escape tilde to fix HEAD~~~ presented as HEAD~ --- book/07-git-tools/sections/revision-selection.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 5d1b96fb..a32f0adf 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -282,7 +282,7 @@ Date: Fri Nov 7 13:47:59 2008 -0500 Ignore *.gem ---- -This can also be written `HEAD~~~`, which again is the first parent of the first parent of the first parent: +This can also be written `HEAD\~~~`, which again is the first parent of the first parent of the first parent: [source,console] ---- From a1eab5d6a8f6b5085ad8b5ceb63ef0c100c5efcc Mon Sep 17 00:00:00 2001 From: "Y. E" Date: Sun, 22 Nov 2020 01:18:04 +0200 Subject: [PATCH 162/549] Fix formatting issue Asciidoctor documentation suggests solution to properly render a possessive monospaced phrase by using unconstrained formatting. However, this approach does not work when one more monospaced phrase follows in the same paragraph. The simplest workaround was suggested by the Asciidoctor project lead: Dan Allen. --- book/07-git-tools/sections/advanced-merging.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index e27cb077..1fdf6d58 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -580,7 +580,7 @@ The history with the revert commit looks like this: .History after `git revert -m 1` image::images/undomerge-revert.png[History after `git revert -m 1`] -The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in `HEAD`'s history. +The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in `HEAD`’s history. Git will get confused if you try to merge `topic` into `master` again: [source,console] From c6c44943769259dac9f94cb0c38c0562a619e876 Mon Sep 17 00:00:00 2001 From: Jean-Noel Avila Date: Tue, 24 Nov 2020 15:08:43 +0100 Subject: [PATCH 163/549] Introduce test of html and epub This is an indirect way of checking the structure of the book, the asciidoc syntax and the external links. --- Gemfile | 3 ++- Rakefile | 11 +++++++++++ book/03-git-branching/sections/workflows.asc | 2 +- book/04-git-server/sections/gitlab.asc | 2 +- book/06-github/sections/1-setting-up-account.asc | 6 +++--- book/06-github/sections/2-contributing.asc | 4 ++-- book/06-github/sections/3-maintaining.asc | 8 ++++---- book/08-customizing-git/sections/attributes.asc | 6 +++--- book/10-git-internals/sections/environment.asc | 4 ++-- .../sections/visualstudio.asc | 2 +- book/B-embedding-git/sections/dulwich.asc | 2 +- 11 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Gemfile b/Gemfile index 86626079..f925fcbd 100644 --- a/Gemfile +++ b/Gemfile @@ -12,4 +12,5 @@ gem 'asciidoctor-pdf', '1.5.3' gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' gem 'thread_safe', '0.3.6' -gem 'epubcheck', '3.0.1' +gem 'epubcheck-ruby' +gem 'html-proofer' diff --git a/Rakefile b/Rakefile index 0aff12e4..63c1dbd8 100644 --- a/Rakefile +++ b/Rakefile @@ -1,4 +1,11 @@ namespace :book do + def exec_or_raise(command) + puts `#{command}` + if (! $?.success?) + raise "'#{command}' failed" + end + end + desc 'build basic book formats' task :build do @@ -16,10 +23,14 @@ namespace :book do `bundle exec asciidoctor #{params} -a data-uri progit.asc` puts " -- HTML output at progit.html" + exec_or_raise('htmlproofer --check-html progit.html') + puts "Converting to EPub..." `bundle exec asciidoctor-epub3 #{params} progit.asc` puts " -- Epub output at progit.epub" + exec_or_raise('epubcheck progit.epub') + # Commented out the .mobi file creation because the kindlegen dependency is not available. # For more information on this see: #1496. # This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again. diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index b2063a82..9442b568 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -23,7 +23,7 @@ It's generally easier to think about them as work silos, where sets of commits g [[lrbranch_b]] .A "`silo`" view of progressive-stability branching -image::images/lr-branches-2.png[A "`silo`" view of progressive-stability branching] +image::images/lr-branches-2.png[A “silo” view of progressive-stability branching'] You can keep doing this for several levels of stability. Some larger projects also have a `proposed` or `pu` (proposed updates) branch that has integrated branches that may not be ready to go into the `next` or `master` branch. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index d81f60b4..ae2edc3a 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -30,7 +30,7 @@ After you've logged in, click the "`Admin area`" icon in the menu at the top rig [[gitlab_menu]] .The "`Admin area`" item in the GitLab menu -image::images/gitlab-menu.png[The `"Admin area`" item in the GitLab menu] +image::images/gitlab-menu.png[The “Admin area” item in the GitLab menu] ===== Users diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 6380420d..76a12a12 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -33,12 +33,12 @@ If you don't already have one, see <>. Open up your account settings using the link at the top-right of the window: .The "`Account settings`" link -image::images/account-settings.png[The "`Account settings`" link] +image::images/account-settings.png[The “Account settings” link] Then select the "`SSH keys`" section along the left-hand side. .The "`SSH keys`" link. -image::images/ssh-keys.png[The "`SSH keys`" link] +image::images/ssh-keys.png[The “SSH keys” link] From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click "`Add key`". @@ -55,7 +55,7 @@ Next, if you wish, you can replace the avatar that is generated for you with an First go to the "`Profile`" tab (above the SSH Keys tab) and click "`Upload new picture`". .The "`Profile`" link -image::images/your-profile.png[The "`Profile`" link] +image::images/your-profile.png[The “Profile” link] We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 67f1e2e6..e7aa71e9 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -21,7 +21,7 @@ This opens up a discussion thread with code review, and the owner and the contri To fork a project, visit the project page and click the "`Fork`" button at the top-right of the page. .The "`Fork`" button -image::images/forkbutton.png[The "`Fork`" button] +image::images/forkbutton.png[The “Fork” button] After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. @@ -123,7 +123,7 @@ To https://github.com/tonychacon/blink Now if we go back to our fork on GitHub, we can see that GitHub noticed that we pushed a new topic branch up and presents us with a big green button to check out our changes and open a Pull Request to the original project. -You can alternatively go to the "`Branches`" page at `https://github.com///branches` to locate your branch and open a new Pull Request from there. +You can alternatively go to the "`Branches`" page at `\https://github.com///branches` to locate your branch and open a new Pull Request from there. .Pull Request button image::images/blink-02-pr.png[Pull Request button] diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index 8767ec31..a73a545c 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -9,16 +9,16 @@ Let's create a new repository to share our project code with. Start by clicking the "`New repository`" button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. .The "`Your repositories`" area -image::images/newrepo.png[The "`Your repositories`" area] +image::images/newrepo.png[The “Your repositories” area] [[_new_repo_dropdown]] .The "`New repository`" dropdown -image::images/new-repo.png[The "`new repository`" dropdown] +image::images/new-repo.png[The “new repository” dropdown] This takes you to the "`new repository`" form: .The "`new repository`" form -image::images/newrepoform.png[The "`new repository`" form] +image::images/newrepoform.png[The “new repository” form] All you really have to do here is provide a project name; the rest of the fields are completely optional. For now, just click the "`Create Repository`" button, and boom – you have a new repository on GitHub, named `/`. @@ -27,7 +27,7 @@ Since you have no code there yet, GitHub will show you instructions for how to c We won't belabor this here; if you need a refresher, check out <>. Now that your project is hosted on GitHub, you can give the URL to anyone you want to share your project with. -Every project on GitHub is accessible over HTTPS as `https://github.com//`, and over SSH as `git@github.com:/`. +Every project on GitHub is accessible over HTTPS as `\https://github.com//`, and over SSH as `\git@github.com:/`. Git can fetch from and push to both of these URLs, but they are access-controlled based on the credentials of the user connecting to them. [NOTE] diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index c4ec16b8..2c3000a2 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -198,14 +198,14 @@ These filters can be set to do all sorts of fun things. [[filters_a]] .The "`smudge`" filter is run on checkout -image::images/smudge.png[The "`smudge`" filter is run on checkout] +image::images/smudge.png[The “smudge” filter is run on checkout] [[filters_b]] .The "`clean`" filter is run when files are staged -image::images/clean.png[The "`clean`" filter is run when files are staged] +image::images/clean.png[The “clean” filter is run when files are staged] The original commit message for this feature gives a simple example of running all your C source code through the `indent` program before committing. -You can set it up by setting the filter attribute in your `.gitattributes` file to filter `*.c` files with the "`indent`" filter: +You can set it up by setting the filter attribute in your `.gitattributes` file to filter `\*.c` files with the "`indent`" filter: [source,ini] ---- diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index fc7e51d1..1eab01fe 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -55,8 +55,8 @@ A "`pathspec`" refers to how you specify paths to things in Git, including the u These are used in the `.gitignore` file, but also on the command-line (`git add *.c`). *`GIT_GLOB_PATHSPECS`* and *`GIT_NOGLOB_PATHSPECS`* control the default behavior of wildcards in pathspecs. -If `GIT_GLOB_PATHSPECS` is set to 1, wildcard characters act as wildcards (which is the default); if `GIT_NOGLOB_PATHSPECS` is set to 1, wildcard characters only match themselves, meaning something like `*.c` would only match a file _named_ "`*.c`", rather than any file whose name ends with `.c`. -You can override this in individual cases by starting the pathspec with `:(glob)` or `:(literal)`, as in `:(glob)*.c`. +If `GIT_GLOB_PATHSPECS` is set to 1, wildcard characters act as wildcards (which is the default); if `GIT_NOGLOB_PATHSPECS` is set to 1, wildcard characters only match themselves, meaning something like `\*.c` would only match a file _named_ "`\*.c`", rather than any file whose name ends with `.c`. +You can override this in individual cases by starting the pathspec with `:(glob)` or `:(literal)`, as in `:(glob)\*.c`. *`GIT_LITERAL_PATHSPECS`* disables both of the above behaviors; no wildcard characters will work, and the override prefixes are disabled as well. diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index c0ba8e58..c369e513 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -18,7 +18,7 @@ This is a hub for performing Git actions; when you're _writing_ code, you'll pro [[vs_home]] .The "Home" view for a Git repository in Visual Studio -image::images/vs-2.png[The "`Home`" view for a Git repository in Visual Studio] +image::images/vs-2.png[The “Home” view for a Git repository in Visual Studio] Visual Studio now has a powerful task-focused UI for Git. It includes a linear history view, a diff viewer, remote commands, and many other capabilities. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 73e052bd..49bef77d 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -40,5 +40,5 @@ porcelain.log('.', max_entries=1) ==== Further Reading - * The official API documentation is available at https://www.dulwich.io/apidocs/dulwich.html[]. + * The official API documentation is available at https://www.dulwich.io/docs/api/ * Official tutorial at https://www.dulwich.io/docs/tutorial[] has many examples of how to do specific tasks with Dulwich. From 27dee631f4feec60b1f7a9f9d7e84af50341c0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Avila?= Date: Tue, 24 Nov 2020 19:21:45 +0100 Subject: [PATCH 164/549] Update Gemfile Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- Gemfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index f925fcbd..0a386382 100644 --- a/Gemfile +++ b/Gemfile @@ -12,5 +12,5 @@ gem 'asciidoctor-pdf', '1.5.3' gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby' -gem 'html-proofer' +gem 'epubcheck-ruby', '4.2.4.0' +gem 'html-proofer', '3.17.2' From ed8b8caa56dbb5b37ab24fb86a2101fc2a74602a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Avila?= Date: Tue, 24 Nov 2020 22:29:08 +0100 Subject: [PATCH 165/549] Finish fixing errors --- book/06-github/sections/4-managing-organization.asc | 2 +- book/09-git-and-other-scms/sections/client-svn.asc | 2 +- book/A-git-in-other-environments/sections/guis.asc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index 35cc312d..cdb2447a 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -12,7 +12,7 @@ Normally these accounts are used for Open Source groups (such as "`perl`" or "`r An organization is pretty easy to create; just click on the "`+`" icon at the top-right of any GitHub page, and select "`New organization`" from the menu. .The "`New organization`" menu item -image::images/neworg.png[The "`New organization`" menu item] +image::images/neworg.png[The “New organization” menu item] First you'll need to name your organization and provide an email address for a main point of contact for the group. Then you can invite other users to be co-owners of the account if you want to. diff --git a/book/09-git-and-other-scms/sections/client-svn.asc b/book/09-git-and-other-scms/sections/client-svn.asc index cb50aa59..502e4998 100644 --- a/book/09-git-and-other-scms/sections/client-svn.asc +++ b/book/09-git-and-other-scms/sections/client-svn.asc @@ -78,7 +78,7 @@ Subversion has to clone one revision at a time and then push it back into anothe Now that you have a Subversion repository to which you have write access, you can go through a typical workflow. You'll start with the `git svn clone` command, which imports an entire Subversion repository into a local Git repository. -Remember that if you're importing from a real hosted Subversion repository, you should replace the `file:///tmp/test-svn` here with the URL of your Subversion repository: +Remember that if you're importing from a real hosted Subversion repository, you should replace the `\file:///tmp/test-svn` here with the URL of your Subversion repository: [source,console] ---- diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index 156ed6af..c4d06d1e 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -117,7 +117,7 @@ Branch management is one of the areas where the two tools diverge. On macOS, there's a button at the top of the window for creating a new branch: ."`Create Branch`" button on macOS -image::images/branch_widget_mac.png["`Create Branch`" button on macOS] +image::images/branch_widget_mac.png[“Create Branch” button on macOS] On Windows, this is done by typing the new branch's name in the branch-switching widget: From 2979f59468073587f7d69670e6d047c5092ac433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Avila?= Date: Wed, 25 Nov 2020 22:21:07 +0100 Subject: [PATCH 166/549] Remove a remaining trailing quote --- book/03-git-branching/sections/workflows.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index 9442b568..9e6f3922 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -23,7 +23,7 @@ It's generally easier to think about them as work silos, where sets of commits g [[lrbranch_b]] .A "`silo`" view of progressive-stability branching -image::images/lr-branches-2.png[A “silo” view of progressive-stability branching'] +image::images/lr-branches-2.png[A “silo” view of progressive-stability branching] You can keep doing this for several levels of stability. Some larger projects also have a `proposed` or `pu` (proposed updates) branch that has integrated branches that may not be ready to go into the `next` or `master` branch. From 1a7c941584e824de15d875e10cbf1252638e6d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-No=C3=ABl=20Avila?= Date: Wed, 25 Nov 2020 22:25:27 +0100 Subject: [PATCH 167/549] convert autolink into url macro This allows to add the final period. --- book/B-embedding-git/sections/dulwich.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 49bef77d..90ff4a05 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -40,5 +40,5 @@ porcelain.log('.', max_entries=1) ==== Further Reading - * The official API documentation is available at https://www.dulwich.io/docs/api/ + * The official API documentation is available at https://www.dulwich.io/docs/api/[]. * Official tutorial at https://www.dulwich.io/docs/tutorial[] has many examples of how to do specific tasks with Dulwich. From 447dcbe33d3d3c6064fba2f707fe1555d8732412 Mon Sep 17 00:00:00 2001 From: Tiffany Date: Sun, 29 Nov 2020 12:03:58 -0600 Subject: [PATCH 168/549] Fix typo --- book/07-git-tools/sections/rewriting-history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 1c54ce25..71095e5e 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -56,7 +56,7 @@ $ git commit --amend --no-edit ==== Changing Multiple Commit Messages To modify a commit that is farther back in your history, you must move to more complex tools. -Git doesn't have a modify-history tool, but you can use the rebase tool to rebase a series of commits onto the HEAD they were originally based on instead of moving them to another one. +Git doesn't have a modify-history tool, but you can use the rebase tool to rebase a series of commits onto the HEAD that were originally based on instead of moving them to another one. With the interactive rebase tool, you can then stop after each commit you want to modify and change the message, add files, or do whatever you wish. You can run rebase interactively by adding the `-i` option to `git rebase`. You must indicate how far back you want to rewrite commits by telling the command which commit to rebase onto. From a9f5595562ea12d94b3628ccc8ce9228308cce41 Mon Sep 17 00:00:00 2001 From: Tiffany Date: Sun, 29 Nov 2020 12:15:37 -0600 Subject: [PATCH 169/549] Update with suggested wording change from my comment --- book/07-git-tools/sections/rewriting-history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 71095e5e..95806d38 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -56,7 +56,7 @@ $ git commit --amend --no-edit ==== Changing Multiple Commit Messages To modify a commit that is farther back in your history, you must move to more complex tools. -Git doesn't have a modify-history tool, but you can use the rebase tool to rebase a series of commits onto the HEAD that were originally based on instead of moving them to another one. +Git doesn't have a modify-history tool, but you can use the rebase tool to rebase a series of commits onto the HEAD that they were originally based on instead of moving them to another one. With the interactive rebase tool, you can then stop after each commit you want to modify and change the message, add files, or do whatever you wish. You can run rebase interactively by adding the `-i` option to `git rebase`. You must indicate how far back you want to rewrite commits by telling the command which commit to rebase onto. From 55de727b0f0ee707fe1f5cab6b5cbc4dd0ee1b3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Nov 2020 06:13:06 +0000 Subject: [PATCH 170/549] Update html-proofer requirement from 3.17.2 to 3.17.3 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.17.2...v3.17.3) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0a386382..a0cb5c22 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' -gem 'html-proofer', '3.17.2' +gem 'html-proofer', '3.17.3' From 651a5ba8d95b89e51488fcdb0d1cf9d6aed9d0ef Mon Sep 17 00:00:00 2001 From: Doug Richardson Date: Mon, 30 Nov 2020 14:57:46 -0800 Subject: [PATCH 171/549] Use -L option in curl command to follow redirect returned by www.kernel.org. --- book/10-git-internals/sections/maintenance.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index 1cdfcd52..de4a30d8 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -192,7 +192,7 @@ First, add a large object to your history: [source,console] ---- -$ curl https://www.kernel.org/pub/software/scm/git/git-2.1.0.tar.gz > git.tgz +$ curl -L https://www.kernel.org/pub/software/scm/git/git-2.1.0.tar.gz > git.tgz $ git add git.tgz $ git commit -m 'Add git tarball' [master 7b30847] Add git tarball From 946d128dd5a7d887ef4a0a3e2151349231f0fe66 Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Wed, 16 Dec 2020 08:27:45 +0100 Subject: [PATCH 172/549] fetch original repository before use --- book/06-github/sections/2-contributing.asc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index e7aa71e9..3f4a24cc 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -521,14 +521,16 @@ You can automate this work with a bit of configuration: [source,console] ---- $ git remote add progit https://github.com/progit/progit2.git <1> -$ git branch --set-upstream-to=progit/master master <2> -$ git config --local remote.pushDefault origin <3> +$ git fetch progit <2> +$ git branch --set-upstream-to=progit/master master <3> +$ git config --local remote.pushDefault origin <4> ---- <1> Add the source repository and give it a name. Here, I have chosen to call it `progit`. -<2> Set your `master` branch to fetch from the `progit` remote. -<3> Define the default push repository to `origin`. +<2> Get a reference on progit's branches, in particular `master`. +<3> Set your `master` branch to fetch from the `progit` remote. +<4> Define the default push repository to `origin`. Once this is done, the workflow becomes much simpler: From d62cf1ce931efca7417854219e5d362901f4f460 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Dec 2020 05:38:09 +0000 Subject: [PATCH 173/549] Update json requirement from 2.3.1 to 2.4.1 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.3.1...v2.4.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a0cb5c22..c0d40270 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', ' 13.0.1' gem 'asciidoctor', '2.0.12' -gem 'json', '2.3.1' +gem 'json', '2.4.1' gem 'awesome_print', '1.8.0' gem 'asciidoctor-epub3', '1.5.0.alpha.18' From b1d59849aacd859e466dc5271dfed5e90ac9e0b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Dec 2020 05:38:12 +0000 Subject: [PATCH 174/549] Update html-proofer requirement from 3.17.3 to 3.18.2 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.17.3...v3.18.2) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a0cb5c22..899fb807 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' -gem 'html-proofer', '3.17.3' +gem 'html-proofer', '3.18.2' From 8247a309a6489f3a353874b0ff573d345abf713e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 22 Dec 2020 13:42:10 +0100 Subject: [PATCH 175/549] check for github-actions updates with Dependabot --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 06bca5cd..8a7e6462 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,6 +6,12 @@ updates: schedule: interval: "daily" # Checks on Monday trough Friday. + # Maintain GitHub Action runners + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" # Checks on Monday trough Friday. + # Set default reviewer and labels reviewers: - "ben" From 88c1d7c85b0bfbb2e3a966d9b599fd564528231f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Dec 2020 05:39:43 +0000 Subject: [PATCH 176/549] Update json requirement from 2.4.1 to 2.5.1 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.4.1...v2.5.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a7512480..da541c66 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', ' 13.0.1' gem 'asciidoctor', '2.0.12' -gem 'json', '2.4.1' +gem 'json', '2.5.1' gem 'awesome_print', '1.8.0' gem 'asciidoctor-epub3', '1.5.0.alpha.19' From 0f9fb059f7da9df2259534734bafc29acc1b9eed Mon Sep 17 00:00:00 2001 From: Max Coplan Date: Wed, 23 Dec 2020 17:51:34 -0500 Subject: [PATCH 177/549] Make wording in refs.asc clearer When reading this line I was very confused. It didn't sound like it made sense. So I checked out a remote ref, ran `cat .git/HEAD`, and lo and behold it did "point" to the same thing that the remote branch pointed to. I played around with it a little bit more and realized the difference between checking out a local and remote reference is that checking out a local reference sets `.git/HEAD` to a SYMBOLIC ref, while checking out a remote reference sets it to the exact commit. I think the current language is *technically* correct, because "Git won't point HEAD at one" means it won't point HEAD to the remote reference itself (since "one" means the remote reference, not the commit). So I'm not saying the current wording is bad, just that it confused me, so it might confuse others --- book/10-git-internals/sections/refs.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index cac0ff0c..bf6a6788 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -205,5 +205,5 @@ ca82a6dff817ec66f44342007202690a93763949 ---- Remote references differ from branches (`refs/heads` references) mainly in that they're considered read-only. -You can `git checkout` to one, but Git won't point HEAD at one, so you'll never update it with a `commit` command. +You can `git checkout` to one, but Git won't symolically reference HEAD to one, so you'll never update it with a `commit` command. Git manages them as bookmarks to the last known state of where those branches were on those servers. From 68efb4232fe0b756856e2dbf8e12a4180ceb6921 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Dec 2020 15:48:59 +0000 Subject: [PATCH 178/549] Update rake requirement from 13.0.1 to 13.0.3 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.0.1...v13.0.3) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index da541c66..b3577b41 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rake', ' 13.0.1' +gem 'rake', '13.0.3' gem 'asciidoctor', '2.0.12' gem 'json', '2.5.1' From a36a5dc902bb995bc44ec34867b0881c04f967cc Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 28 Dec 2020 21:08:40 +0100 Subject: [PATCH 179/549] fix typo --- book/10-git-internals/sections/refs.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index bf6a6788..8ad1524d 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -205,5 +205,5 @@ ca82a6dff817ec66f44342007202690a93763949 ---- Remote references differ from branches (`refs/heads` references) mainly in that they're considered read-only. -You can `git checkout` to one, but Git won't symolically reference HEAD to one, so you'll never update it with a `commit` command. +You can `git checkout` to one, but Git won't symbolically reference HEAD to one, so you'll never update it with a `commit` command. Git manages them as bookmarks to the last known state of where those branches were on those servers. From 27c2c933971e6f63a7e87d68dde50247f3150c1c Mon Sep 17 00:00:00 2001 From: Sherry Hietala <7719743+SherryHietala@users.noreply.github.com> Date: Wed, 30 Dec 2020 02:50:57 -0800 Subject: [PATCH 180/549] Correct redundant phrase in Getting a Git Repository "VCS systems" is a redundant acronym phrase (like "ATM machines"). --- book/02-git-basics/sections/getting-a-repository.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/getting-a-repository.asc b/book/02-git-basics/sections/getting-a-repository.asc index c7bc8e8a..3b69efd0 100644 --- a/book/02-git-basics/sections/getting-a-repository.asc +++ b/book/02-git-basics/sections/getting-a-repository.asc @@ -57,7 +57,7 @@ At this point, you have a Git repository with tracked files and an initial commi ==== Cloning an Existing Repository If you want to get a copy of an existing Git repository -- for example, a project you'd like to contribute to -- the command you need is `git clone`. -If you're familiar with other VCS systems such as Subversion, you'll notice that the command is "clone" and not "checkout". +If you're familiar with other VCSs such as Subversion, you'll notice that the command is "clone" and not "checkout". This is an important distinction -- instead of getting just a working copy, Git receives a full copy of nearly all data that the server has. Every version of every file for the history of the project is pulled down by default when you run `git clone`. In fact, if your server disk gets corrupted, you can often use nearly any of the clones on any client to set the server back to the state it was in when it was cloned (you may lose some server-side hooks and such, but all the versioned data would be there -- see <> for more details). From 4c479b77c829364f5b4d251964050a68658ca85d Mon Sep 17 00:00:00 2001 From: Sherry Hietala <7719743+SherryHietala@users.noreply.github.com> Date: Wed, 30 Dec 2020 02:55:00 -0800 Subject: [PATCH 181/549] Correct redundant phrase in Recording Changes to the Repository "VCS systems" is a redundant acronym phrase (like "ATM machines"). --- book/02-git-basics/sections/recording-changes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 70b362cd..54388f93 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -579,7 +579,7 @@ This command removes all files whose names end with a `~`. ==== Moving Files (((files, moving))) -Unlike many other VCS systems, Git doesn't explicitly track file movement. +Unlike many other VCSs, Git doesn't explicitly track file movement. If you rename a file in Git, no metadata is stored in Git that tells it you renamed the file. However, Git is pretty smart about figuring that out after the fact -- we'll deal with detecting file movement a bit later. From 94cff246363d7c9a5816f718058a1a25916cb9ca Mon Sep 17 00:00:00 2001 From: Sherry Hietala <7719743+SherryHietala@users.noreply.github.com> Date: Wed, 30 Dec 2020 03:02:36 -0800 Subject: [PATCH 182/549] Correct redundant phrase in About Version Control "VCS systems" is a redundant acronym phrase (like "ATM machines"). --- book/01-introduction/sections/about-version-control.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index c4859fce..6970b8bc 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -44,7 +44,7 @@ However, this setup also has some serious downsides. The most obvious is the single point of failure that the centralized server represents. If that server goes down for an hour, then during that hour nobody can collaborate at all or save versioned changes to anything they're working on. If the hard disk the central database is on becomes corrupted, and proper backups haven't been kept, you lose absolutely everything -- the entire history of the project except whatever single snapshots people happen to have on their local machines. -Local VCS systems suffer from this same problem -- whenever you have the entire history of the project in a single place, you risk losing everything. +Local VCSs suffer from this same problem -- whenever you have the entire history of the project in a single place, you risk losing everything. ==== Distributed Version Control Systems From 4f457aeb962012cd76b71d55d278b9850db3a027 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Jan 2021 06:08:32 +0000 Subject: [PATCH 183/549] Update html-proofer requirement from 3.18.2 to 3.18.5 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.18.2...v3.18.5) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b3577b41..cc3b49f2 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' -gem 'html-proofer', '3.18.2' +gem 'html-proofer', '3.18.5' From 03eeb0f5ed2b3cd268b57e6b560cfe84ca621d61 Mon Sep 17 00:00:00 2001 From: ugultopu Date: Thu, 7 Jan 2021 14:28:44 -0500 Subject: [PATCH 184/549] Fix irregular capitalization --- book/07-git-tools/sections/reset.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index 05735f31..bb4c01b5 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -131,7 +131,7 @@ image::images/reset-ex6.png[] Now `git status` will give us no output, because all three trees are the same again. Switching branches or cloning goes through a similar process. -When you checkout a branch, it changes *HEAD* to point to the new branch ref, populates your *index* with the snapshot of that commit, then copies the contents of the *index* into your *working Directory*. +When you checkout a branch, it changes *HEAD* to point to the new branch ref, populates your *index* with the snapshot of that commit, then copies the contents of the *index* into your *working directory*. ==== The Role of Reset From b1d398edd03f0f34edd74b774c94db56ac505aee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jan 2021 05:59:39 +0000 Subject: [PATCH 185/549] Update asciidoctor-pdf requirement from 1.5.3 to 1.5.4 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v1.5.3...v1.5.4) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b3577b41..b85b856b 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.5.1' gem 'awesome_print', '1.8.0' gem 'asciidoctor-epub3', '1.5.0.alpha.19' -gem 'asciidoctor-pdf', '1.5.3' +gem 'asciidoctor-pdf', '1.5.4' gem 'coderay', '1.1.3' gem 'pygments.rb', '1.2.1' From 5d2d545ee55b6ee758692bea59d48b72536c3536 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 19:54:19 +0000 Subject: [PATCH 186/549] Update pygments.rb requirement from 1.2.1 to 2.0.0 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v1.2.1...v2.0.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 017e591b..405429c6 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'asciidoctor-epub3', '1.5.0.alpha.19' gem 'asciidoctor-pdf', '1.5.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '1.2.1' +gem 'pygments.rb', '2.0.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' gem 'html-proofer', '3.18.5' From abcdca02b20fa3319586e4788e0a76481cb4b32a Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sat, 23 Jan 2021 15:38:11 +0300 Subject: [PATCH 187/549] Exclude dependabot from contributors list --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 63c1dbd8..bfd5f68b 100644 --- a/Rakefile +++ b/Rakefile @@ -17,7 +17,7 @@ namespace :book do date_string = Time.now.strftime("%Y-%m-%d") params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" puts "Generating contributors list" - `git shortlog -s | grep -v -E "(Straub|Chacon)" | cut -f 2- | column -c 120 > book/contributors.txt` + `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` puts "Converting to HTML..." `bundle exec asciidoctor #{params} -a data-uri progit.asc` From 4a2d96130848f636af7b127bd4090e8fc09540b2 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Tue, 26 Jan 2021 13:50:11 +0700 Subject: [PATCH 188/549] Fix typo in "Inspecting a Remote" As per #1565: master branch on the remote -> local Signed-off-by: Bagas Sanjaya --- book/02-git-basics/sections/remotes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index b785ce4b..0003b8fb 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -179,7 +179,7 @@ $ git remote show origin ---- It lists the URL for the remote repository as well as the tracking branch information. -The command helpfully tells you that if you're on the `master` branch and you run `git pull`, it will automatically merge in the `master` branch on the remote after it fetches all the remote references. +The command helpfully tells you that if you're on the `master` branch and you run `git pull`, it will automatically merge in the `master` branch on the local after it fetches all the remote references. It also lists all the remote references it has pulled down. That is a simple example you're likely to encounter. From e1ede97cd0804fe0ec86fc9ce05c347b541d56d3 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Tue, 26 Jan 2021 13:56:53 +0700 Subject: [PATCH 189/549] Fix typo on working directory (tree) As per #1559: nothing to commit, working directory -> tree Signed-off-by: Bagas Sanjaya --- book/02-git-basics/sections/recording-changes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 54388f93..d8a586ec 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -27,7 +27,7 @@ If you run this command directly after a clone, you should see something like th $ git status On branch master Your branch is up-to-date with 'origin/master'. -nothing to commit, working directory clean +nothing to commit, working tree clean ---- This means you have a clean working directory; in other words, none of your tracked files are modified. From 39c44e35648e577c7c2164969cca9a7b25991f20 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Wed, 27 Jan 2021 15:00:37 +0700 Subject: [PATCH 190/549] Apply suggestion from @ben Conveying idea that on local repo, pulling by `git pull` will merge in any changes that have happened on the remote side. Co-authored-by: Ben Straub --- book/02-git-basics/sections/remotes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 0003b8fb..85ab6c84 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -179,7 +179,7 @@ $ git remote show origin ---- It lists the URL for the remote repository as well as the tracking branch information. -The command helpfully tells you that if you're on the `master` branch and you run `git pull`, it will automatically merge in the `master` branch on the local after it fetches all the remote references. +The command helpfully tells you that if you're on the `master` branch and you run `git pull`, it will automatically merge the remote's `master` branch into the local one after it has been fetched. It also lists all the remote references it has pulled down. That is a simple example you're likely to encounter. From 77c74e3084c8dda6fccd0a03c27b76e9baaeb90c Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sat, 23 Jan 2021 19:36:47 +0700 Subject: [PATCH 191/549] Move referenced build variables to book namespace This preliminary commit move build-related variables from :build task out to :book namespace. Such variables will be referenced by each generating tasks. Signed-off-by: Bagas Sanjaya --- Rakefile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Rakefile b/Rakefile index bfd5f68b..bc8ef920 100644 --- a/Rakefile +++ b/Rakefile @@ -6,16 +6,18 @@ namespace :book do end end + # Variables referenced for build + version_string = ENV['TRAVIS_TAG'] || `git describe --tags`.chomp + if version_string.empty? + version_string = '0' + end + date_string = Time.now.strftime("%Y-%m-%d") + params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" + desc 'build basic book formats' task :build do begin - version_string = ENV['TRAVIS_TAG'] || `git describe --tags`.chomp - if version_string.empty? - version_string = '0' - end - date_string = Time.now.strftime("%Y-%m-%d") - params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" puts "Generating contributors list" `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` From ad94f148d7ee2f346271c4aa18bc0b46f5d21582 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sat, 23 Jan 2021 19:44:10 +0700 Subject: [PATCH 192/549] Split book generating tasks into each own tasks For each formats, including currently unsupported Mobi format, extract from :build task. Signed-off-by: Bagas Sanjaya --- Rakefile | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index bc8ef920..89847ee5 100644 --- a/Rakefile +++ b/Rakefile @@ -21,18 +21,31 @@ namespace :book do puts "Generating contributors list" `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` + + + end + end + + desc 'build HTML format' + task :build_html do puts "Converting to HTML..." `bundle exec asciidoctor #{params} -a data-uri progit.asc` puts " -- HTML output at progit.html" exec_or_raise('htmlproofer --check-html progit.html') + end + desc 'build Epub format' + task :build_epub do puts "Converting to EPub..." `bundle exec asciidoctor-epub3 #{params} progit.asc` puts " -- Epub output at progit.epub" exec_or_raise('epubcheck progit.epub') + end + desc 'build Mobi format' + task :build_mobi do # Commented out the .mobi file creation because the kindlegen dependency is not available. # For more information on this see: #1496. # This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again. @@ -41,12 +54,20 @@ namespace :book do # `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` # puts " -- Mobi output at progit.mobi" + # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these + # lines below + puts "Converting to Mobi isn't supported yet." + puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496." + exit(127) + end + + desc 'build PDF format' + task :build_pdf do puts "Converting to PDF... (this one takes a while)" `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` puts " -- PDF output at progit.pdf" - - end end + end task :default => "book:build" From a3fdc199d4d4cb6eca9df9032bcc6de2e6e7f818 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sun, 24 Jan 2021 16:37:46 +0700 Subject: [PATCH 193/549] Make generating contributors.txt a file task This file task is required to build books. Signed-off-by: Bagas Sanjaya --- Rakefile | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Rakefile b/Rakefile index 89847ee5..6d7948b2 100644 --- a/Rakefile +++ b/Rakefile @@ -18,16 +18,19 @@ namespace :book do task :build do begin - puts "Generating contributors list" - `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` - end end + desc 'generate contributors list' + file 'book/contributors.txt' do + puts "Generating contributors list" + `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` + end + desc 'build HTML format' - task :build_html do + task :build_html => 'book/contributors.txt' do puts "Converting to HTML..." `bundle exec asciidoctor #{params} -a data-uri progit.asc` puts " -- HTML output at progit.html" @@ -36,7 +39,7 @@ namespace :book do end desc 'build Epub format' - task :build_epub do + task :build_epub => 'book/contributors.txt' do puts "Converting to EPub..." `bundle exec asciidoctor-epub3 #{params} progit.asc` puts " -- Epub output at progit.epub" @@ -45,7 +48,7 @@ namespace :book do end desc 'build Mobi format' - task :build_mobi do + task :build_mobi => 'book/contributors.txt' do # Commented out the .mobi file creation because the kindlegen dependency is not available. # For more information on this see: #1496. # This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again. @@ -62,7 +65,7 @@ namespace :book do end desc 'build PDF format' - task :build_pdf do + task :build_pdf => 'book/contributors.txt' do puts "Converting to PDF... (this one takes a while)" `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` puts " -- PDF output at progit.pdf" From 7bb9d48c525066f7e5fa01937bf2e281f5b14900 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sun, 24 Jan 2021 17:45:51 +0700 Subject: [PATCH 194/549] Require dependency tasks for default :build task The default task is now empty, so we can simply list its dependency tasks. Signed-off-by: Bagas Sanjaya --- Rakefile | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Rakefile b/Rakefile index 6d7948b2..0e8ccbba 100644 --- a/Rakefile +++ b/Rakefile @@ -15,13 +15,7 @@ namespace :book do params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" desc 'build basic book formats' - task :build do - - begin - - - end - end + task :build => [:build_html, :build_epub, :build_pdf] desc 'generate contributors list' file 'book/contributors.txt' do From 732ae561641e8ff6b1bf8e5c0d79b20373839200 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Mon, 25 Jan 2021 17:10:30 +0700 Subject: [PATCH 195/549] Add :clean task Clean all generated artifacts (contributors list and book formats). Signed-off-by: Bagas Sanjaya --- Rakefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Rakefile b/Rakefile index 0e8ccbba..a756085e 100644 --- a/Rakefile +++ b/Rakefile @@ -65,6 +65,22 @@ namespace :book do puts " -- PDF output at progit.pdf" end + desc 'Clean all generated files' + task :clean do + begin + puts "Removing generated files" + + FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.pdf'].each do |file| + rm file + + # Rescue if file not found + rescue Errno::ENOENT => e + puts e.message + puts "Error removing files (ignored)" + end + end + end + end task :default => "book:build" From 6e4a261f2ce19cc052755ba1c0a0681ee85b8a4b Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Mon, 25 Jan 2021 19:06:04 +0700 Subject: [PATCH 196/549] Add :check task As suggested by @jnavila. Check only HTML and epub books. As before this refactor, default book:build task also check them. Signed-off-by: Bagas Sanjaya --- Rakefile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index a756085e..9a4194ec 100644 --- a/Rakefile +++ b/Rakefile @@ -15,7 +15,7 @@ namespace :book do params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" desc 'build basic book formats' - task :build => [:build_html, :build_epub, :build_pdf] + task :build => [:build_html, :build_epub, :build_pdf, :check] desc 'generate contributors list' file 'book/contributors.txt' do @@ -29,7 +29,6 @@ namespace :book do `bundle exec asciidoctor #{params} -a data-uri progit.asc` puts " -- HTML output at progit.html" - exec_or_raise('htmlproofer --check-html progit.html') end desc 'build Epub format' @@ -38,7 +37,6 @@ namespace :book do `bundle exec asciidoctor-epub3 #{params} progit.asc` puts " -- Epub output at progit.epub" - exec_or_raise('epubcheck progit.epub') end desc 'build Mobi format' @@ -65,6 +63,16 @@ namespace :book do puts " -- PDF output at progit.pdf" end + desc 'Check generated books' + task :check => [:build_html, :build_epub] do + begin + puts "Checking generated books" + + exec_or_raise('htmlproofer --check-html progit.html') + exec_or_raise('epubcheck progit.epub') + end + end + desc 'Clean all generated files' task :clean do begin From 1374429aa3c493439bb021135f7fb0f21acf09b2 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Tue, 26 Jan 2021 17:51:59 +0700 Subject: [PATCH 197/549] Invoke :check task inside :build Instead of invoking :check as dependency, explicitly invoke it inside the body of :build. As suggested by @jnavila, any errors raised from :check should not cause FTBFS, thus ignore them. Signed-off-by: Bagas Sanjaya --- Rakefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 9a4194ec..6ad22c17 100644 --- a/Rakefile +++ b/Rakefile @@ -15,7 +15,17 @@ namespace :book do params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" desc 'build basic book formats' - task :build => [:build_html, :build_epub, :build_pdf, :check] + task :build => [:build_html, :build_epub, :build_pdf] do + begin + # Run check + Rake::Task["book:check"].invoke + + # Rescue to ignore checking errors + rescue => e + puts e.message + puts "Error when checking books (ignored)" + end + end desc 'generate contributors list' file 'book/contributors.txt' do From c15bddd7b5bb19260de16fea7f221e89ae250371 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Wed, 27 Jan 2021 15:24:05 +0700 Subject: [PATCH 198/549] Add :ci task As suggested by @jnavila. Similar to :build, but don't ignore any errors. Signed-off-by: Bagas Sanjaya --- Rakefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Rakefile b/Rakefile index 6ad22c17..e556a7fe 100644 --- a/Rakefile +++ b/Rakefile @@ -27,6 +27,14 @@ namespace :book do end end + desc 'build basic book formats (for ci)' + task :ci => [:build_html, :build_epub, :build_pdf] do + begin + # Run check, but don't ignore any errors + Rake::Task["book:check"].invoke + end + end + desc 'generate contributors list' file 'book/contributors.txt' do puts "Generating contributors list" From 41b342017edb68f66b0f98b175b3e407dd9cadd5 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Mon, 25 Jan 2021 19:38:47 +0700 Subject: [PATCH 199/549] Update README for generating single book format Signed-off-by: Bagas Sanjaya --- README.asc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.asc b/README.asc index 98b56846..4eeda7cf 100644 --- a/README.asc +++ b/README.asc @@ -29,6 +29,26 @@ Converting to PDF... -- PDF output at progit.pdf ---- +If you only want to generate only one of supported formats (HTML, Epub, or PDF), do one of the following: + +To generate HTML book: + +---- +$ bundle exec rake book:build_html +---- + +To generate Epub book: + +---- +$ bundle exec rake book:build_epub +---- + +To generate PDF book: + +---- +$ bundle exec rake book:build_pdf +---- + == Signaling an Issue Before signaling an issue, please check that there isn't already a similar one in the bug tracking system. From 676945da514d51e49c9ca25de1cc6af3aee3f779 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Thu, 28 Jan 2021 19:41:29 +0700 Subject: [PATCH 200/549] Pass username to git credential-read-only snippet The username parameter is now required. Signed-off-by: Bagas Sanjaya --- book/07-git-tools/sections/credentials.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index b87d1a2a..2553734f 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -184,6 +184,7 @@ Here's what an interactive session looks like: $ git credential-read-only --file=/mnt/shared/creds get protocol=https host=mygithost +username=bob protocol=https host=mygithost From 569179fe8cfc3e886d51010a5afd891f0cb924d5 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Thu, 28 Jan 2021 19:43:04 +0700 Subject: [PATCH 201/549] Update 4th code listing explanation The program prints the results if the protocol, host, and username match. Signed-off-by: Bagas Sanjaya --- book/07-git-tools/sections/credentials.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 2553734f..820e9356 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -174,7 +174,7 @@ include::../git-credential-read-only[] <3> This loop reads from stdin until the first blank line is reached. The inputs are stored in the `known` hash for later reference. <4> This loop reads the contents of the storage file, looking for matches. - If the protocol and host from `known` match this line, the program prints the results to stdout and exits. + If the protocol, host, and username from `known` match this line, the program prints the results to stdout and exits. We'll save our helper as `git-credential-read-only`, put it somewhere in our `PATH` and mark it executable. Here's what an interactive session looks like: From fa62984519b0866dfb9cc173fdda82fa22f5efb8 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Fri, 29 Jan 2021 15:06:40 +0700 Subject: [PATCH 202/549] Apply suggestions from code review Apply suggestions from @HonkingGoose: - README rewording - FIXME line fitting on Rakefile Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- README.asc | 9 +++++---- Rakefile | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.asc b/README.asc index 4eeda7cf..53ed6f75 100644 --- a/README.asc +++ b/README.asc @@ -29,21 +29,22 @@ Converting to PDF... -- PDF output at progit.pdf ---- -If you only want to generate only one of supported formats (HTML, Epub, or PDF), do one of the following: +You can generate just one of the supported formats (HTML, EPUB, or PDF). +Use one of the following commands: -To generate HTML book: +To generate the HTML book: ---- $ bundle exec rake book:build_html ---- -To generate Epub book: +To generate the EPUB book: ---- $ bundle exec rake book:build_epub ---- -To generate PDF book: +To generate the PDF book: ---- $ bundle exec rake book:build_pdf diff --git a/Rakefile b/Rakefile index e556a7fe..dc7e26a6 100644 --- a/Rakefile +++ b/Rakefile @@ -67,8 +67,7 @@ namespace :book do # `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` # puts " -- Mobi output at progit.mobi" - # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these - # lines below + # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these lines below puts "Converting to Mobi isn't supported yet." puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496." exit(127) From 6fba41057d08008bceed05c1acee51e8461ed722 Mon Sep 17 00:00:00 2001 From: Sergey Kuznetsov Date: Mon, 1 Feb 2021 22:47:05 -0800 Subject: [PATCH 203/549] Fix a index for @{u} and @{upstream} in remote-branches.asc --- book/03-git-branching/sections/remote-branches.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 6885f322..0701dbf9 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -179,7 +179,7 @@ Branch serverfix set up to track remote branch serverfix from origin. .Upstream shorthand ==== When you have a tracking branch set up, you can reference its upstream branch with the `@{upstream}` or `@{u}` shorthand. -So if you're on the `master` branch and it's tracking `origin/master`, you can say something like `git merge @{u}` instead of `git merge origin/master` if you wish.(((+++@{u}+++)))(((+++@{upstream}+++))) +So if you're on the `master` branch and it's tracking `origin/master`, you can say something like `git merge @{u}` instead of `git merge origin/master` if you wish.(((@{u})))(((@{upstream}))) ==== If you want to see what tracking branches you have set up, you can use the `-vv` option to `git branch`. From 3524055eeb52ad7c58099ada22a92da3494aa13a Mon Sep 17 00:00:00 2001 From: leerg Date: Fri, 5 Feb 2021 11:01:46 +0300 Subject: [PATCH 204/549] Split of two dashes Two dashes were connected in one. Fixed --- book/02-git-basics/sections/undoing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 82ae2b88..6d63e9b1 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -136,7 +136,7 @@ You can see that the changes have been reverted. [IMPORTANT] ===== -It's important to understand that `git checkout -- ` is a dangerous command. +It's important to understand that `git checkout \-- ` is a dangerous command. Any local changes you made to that file are gone -- Git just replaced that file with the most recently-committed version. Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. ===== From 15579fe8042e1eb818479d497aaf6eaae4f34266 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sun, 7 Feb 2021 14:59:31 +0700 Subject: [PATCH 205/549] Wrap rescue inside :clean inside begin/end block As per code review, @jnavila reported an error that requires begin/end block for multiline rescue body. Signed-off-by: Bagas Sanjaya --- Rakefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index e556a7fe..490171d1 100644 --- a/Rakefile +++ b/Rakefile @@ -101,8 +101,10 @@ namespace :book do # Rescue if file not found rescue Errno::ENOENT => e - puts e.message - puts "Error removing files (ignored)" + begin + puts e.message + puts "Error removing files (ignored)" + end end end end From 8339e2095bbe327dfbc0686143ff66f0166d6c3d Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sun, 7 Feb 2021 15:12:09 +0700 Subject: [PATCH 206/549] Remove useless begin/end block As per code review by @jnavila Signed-off-by: Bagas Sanjaya --- Rakefile | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Rakefile b/Rakefile index 490171d1..39fd8d16 100644 --- a/Rakefile +++ b/Rakefile @@ -29,10 +29,8 @@ namespace :book do desc 'build basic book formats (for ci)' task :ci => [:build_html, :build_epub, :build_pdf] do - begin - # Run check, but don't ignore any errors - Rake::Task["book:check"].invoke - end + # Run check, but don't ignore any errors + Rake::Task["book:check"].invoke end desc 'generate contributors list' @@ -83,12 +81,10 @@ namespace :book do desc 'Check generated books' task :check => [:build_html, :build_epub] do - begin - puts "Checking generated books" + puts "Checking generated books" - exec_or_raise('htmlproofer --check-html progit.html') - exec_or_raise('epubcheck progit.epub') - end + exec_or_raise('htmlproofer --check-html progit.html') + exec_or_raise('epubcheck progit.epub') end desc 'Clean all generated files' From f564a8717b0959672f2bde64a59b05c639a159e8 Mon Sep 17 00:00:00 2001 From: Noelle Leigh Date: Mon, 8 Feb 2021 19:31:48 -0500 Subject: [PATCH 207/549] Fix lingering Markdown for git-send-email.io The link to git-send-email.io wasn't using AsciiDoc syntax, so it didn't get linkified properly. --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 7ca87003..9ffcf2b5 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -787,7 +787,7 @@ Result: OK [TIP] ==== -For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to [git-send-email.io](https://git-send-email.io/). +For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to https://git-send-email.io/[git-send-email.io]. ==== ==== Summary From 1b18b58b92023f56dfe518cd2e04df7f76d9d3c4 Mon Sep 17 00:00:00 2001 From: Noelle Leigh Date: Mon, 8 Feb 2021 19:37:54 -0500 Subject: [PATCH 208/549] Set to open in new tab --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 9ffcf2b5..c74d2af2 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -787,7 +787,7 @@ Result: OK [TIP] ==== -For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to https://git-send-email.io/[git-send-email.io]. +For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to https://git-send-email.io[git-send-email.io^]. ==== ==== Summary From 238458041ff9c547ce88e967379f2c03a4c32ddb Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Sun, 7 Feb 2021 15:39:26 +0700 Subject: [PATCH 209/549] Use single quotes for non-interpolated strings As requested by @jnavila in code review. Signed-off-by: Bagas Sanjaya --- Rakefile | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Rakefile b/Rakefile index 39fd8d16..333c048b 100644 --- a/Rakefile +++ b/Rakefile @@ -11,7 +11,7 @@ namespace :book do if version_string.empty? version_string = '0' end - date_string = Time.now.strftime("%Y-%m-%d") + date_string = Time.now.strftime('%Y-%m-%d') params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" desc 'build basic book formats' @@ -23,7 +23,7 @@ namespace :book do # Rescue to ignore checking errors rescue => e puts e.message - puts "Error when checking books (ignored)" + puts 'Error when checking books (ignored)' end end @@ -35,23 +35,23 @@ namespace :book do desc 'generate contributors list' file 'book/contributors.txt' do - puts "Generating contributors list" + puts 'Generating contributors list' `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` end desc 'build HTML format' task :build_html => 'book/contributors.txt' do - puts "Converting to HTML..." + puts 'Converting to HTML...' `bundle exec asciidoctor #{params} -a data-uri progit.asc` - puts " -- HTML output at progit.html" + puts ' -- HTML output at progit.html' end desc 'build Epub format' task :build_epub => 'book/contributors.txt' do - puts "Converting to EPub..." + puts 'Converting to EPub...' `bundle exec asciidoctor-epub3 #{params} progit.asc` - puts " -- Epub output at progit.epub" + puts ' -- Epub output at progit.epub' end @@ -67,21 +67,21 @@ namespace :book do # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these # lines below - puts "Converting to Mobi isn't supported yet." - puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496." + puts 'Converting to Mobi is not supported yet.' + puts 'For more information see issue #1496 at https://github.com/progit/progit2/issues/1496.' exit(127) end desc 'build PDF format' task :build_pdf => 'book/contributors.txt' do - puts "Converting to PDF... (this one takes a while)" + puts 'Converting to PDF... (this one takes a while)' `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` - puts " -- PDF output at progit.pdf" + puts ' -- PDF output at progit.pdf' end desc 'Check generated books' task :check => [:build_html, :build_epub] do - puts "Checking generated books" + puts 'Checking generated books' exec_or_raise('htmlproofer --check-html progit.html') exec_or_raise('epubcheck progit.epub') @@ -90,7 +90,7 @@ namespace :book do desc 'Clean all generated files' task :clean do begin - puts "Removing generated files" + puts 'Removing generated files' FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.pdf'].each do |file| rm file @@ -99,7 +99,7 @@ namespace :book do rescue Errno::ENOENT => e begin puts e.message - puts "Error removing files (ignored)" + puts 'Error removing files (ignored)' end end end From 75e3f15637e6a3f0ddad88921f48bdabde28c899 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 9 Feb 2021 13:41:51 +0100 Subject: [PATCH 210/549] redirect bugs not for ProGit2 with config.yml file This config.yml file adds extra links on the issue select screen on GitHub. This way we can redirect bug reports that are not for the ProGit 2 project in a visual way, instead of relying on users reading a wall of Markdown commented text. --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ---- .github/ISSUE_TEMPLATE/config.yml | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1cae9e97..3424017a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -13,10 +13,6 @@ assignees: '' - - - - **Which version of the book is affected?** diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..c5977951 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,16 @@ +contact_links: + - name: Translation bug + url: https://github.com/progit/progit2/blob/master/TRANSLATING.md + about: Refer to this table to find out where to report translation bugs. + + - name: Report bugs for git-scm.com site + url: https://github.com/git/git-scm.com/issues/ + about: Please report problems with the git-scm.com site here. + + - name: Bug is about Git program itself + url: https://git-scm.com/community + about: Please report problems with the Git program here. + + - name: Bug is about Git for Windows + url: https://github.com/git-for-windows/git/issues + about: Please report problems with Git for Windows here. From 36519b7827907f4a6cd3835cf5c6235bfff3504f Mon Sep 17 00:00:00 2001 From: Bohdan Pylypenko <49116723+BPylypenko@users.noreply.github.com> Date: Tue, 9 Feb 2021 16:51:26 +0200 Subject: [PATCH 211/549] notice that `git restore ` restores staged version --- book/02-git-basics/sections/undoing.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 6d63e9b1..0c815dde 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -137,7 +137,7 @@ You can see that the changes have been reverted. [IMPORTANT] ===== It's important to understand that `git checkout \-- ` is a dangerous command. -Any local changes you made to that file are gone -- Git just replaced that file with the most recently-committed version. +Any local changes you made to that file are gone -- Git just replaced that file with the last staged or committed version. Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. ===== @@ -230,6 +230,6 @@ Changes to be committed: [IMPORTANT] ===== It's important to understand that `git restore ` is a dangerous command. -Any local changes you made to that file are gone -- Git just replaced that file with the most recently-committed version. +Any local changes you made to that file are gone -- Git just replaced that file with the last staged or committed version. Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. ===== From ae9f953033cea45b9a2c9c424659769399a26770 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Wed, 10 Feb 2021 14:45:18 +0700 Subject: [PATCH 212/549] Prepend header containing commit hash to generated contributors list In order to check contributors list by commit hash, the hash have to be added to the list. Signed-off-by: Bagas Sanjaya --- Rakefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 333c048b..ff4a3d11 100644 --- a/Rakefile +++ b/Rakefile @@ -13,6 +13,7 @@ namespace :book do end date_string = Time.now.strftime('%Y-%m-%d') params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" + header_hash = `git rev-parse --short HEAD`.strip desc 'build basic book formats' task :build => [:build_html, :build_epub, :build_pdf] do @@ -36,7 +37,8 @@ namespace :book do desc 'generate contributors list' file 'book/contributors.txt' do puts 'Generating contributors list' - `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 > book/contributors.txt` + `echo "Contributors as of #{header_hash}:\n" > book/contributors.txt` + `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 >> book/contributors.txt` end desc 'build HTML format' From 920b942b9066d8bef40b3e66b7531d0b63a95f3e Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Wed, 10 Feb 2021 14:49:34 +0700 Subject: [PATCH 213/549] Check contributors list by comparing current HEAD against stored commit hash As requested by @jnavila in code review. Compare current HEAD commit hash against the hash stored in the header of contributors list. If these match, go on. If not, refresh (rm and generate contributors list again). Signed-off-by: Bagas Sanjaya --- Rakefile | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Rakefile b/Rakefile index ff4a3d11..c0ee3269 100644 --- a/Rakefile +++ b/Rakefile @@ -15,6 +15,27 @@ namespace :book do params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" header_hash = `git rev-parse --short HEAD`.strip + # Check contributors list + # This checks commit hash stored in the header of list against current HEAD + def check_contrib + if File.exist?('book/contributors.txt') + current_head_hash = `git rev-parse --short HEAD`.strip + header = `head -n 1 book/contributors.txt`.strip + # Match regex, then coerce resulting array to string by join + header_hash = header.scan(/[a-f0-9]{7,}/).join + + if header_hash == current_head_hash + puts "Hash on header of contributors list (#{header_hash}) matches the current HEAD (#{current_head_hash})" + else + puts "Hash on header of contributors list (#{header_hash}) does not match the current HEAD (#{current_head_hash}), refreshing" + `rm book/contributors.txt` + # Reenable and invoke task again + Rake::Task["book/contributors.txt"].reenable + Rake::Task["book/contributors.txt"].invoke + end + end + end + desc 'build basic book formats' task :build => [:build_html, :build_epub, :build_pdf] do begin @@ -43,6 +64,8 @@ namespace :book do desc 'build HTML format' task :build_html => 'book/contributors.txt' do + check_contrib() + puts 'Converting to HTML...' `bundle exec asciidoctor #{params} -a data-uri progit.asc` puts ' -- HTML output at progit.html' @@ -51,6 +74,8 @@ namespace :book do desc 'build Epub format' task :build_epub => 'book/contributors.txt' do + check_contrib() + puts 'Converting to EPub...' `bundle exec asciidoctor-epub3 #{params} progit.asc` puts ' -- Epub output at progit.epub' @@ -76,6 +101,8 @@ namespace :book do desc 'build PDF format' task :build_pdf => 'book/contributors.txt' do + check_contrib() + puts 'Converting to PDF... (this one takes a while)' `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` puts ' -- PDF output at progit.pdf' From d39b86ef7222ff1f52cec1ff487a67229ddf2787 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Wed, 10 Feb 2021 15:02:07 +0700 Subject: [PATCH 214/549] Use single quotes for invoking tasks As to be consistent with other non-interpolated strings. Signed-off-by: Bagas Sanjaya --- Rakefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Rakefile b/Rakefile index c0ee3269..00d8158e 100644 --- a/Rakefile +++ b/Rakefile @@ -30,8 +30,8 @@ namespace :book do puts "Hash on header of contributors list (#{header_hash}) does not match the current HEAD (#{current_head_hash}), refreshing" `rm book/contributors.txt` # Reenable and invoke task again - Rake::Task["book/contributors.txt"].reenable - Rake::Task["book/contributors.txt"].invoke + Rake::Task['book/contributors.txt'].reenable + Rake::Task['book/contributors.txt'].invoke end end end @@ -40,7 +40,7 @@ namespace :book do task :build => [:build_html, :build_epub, :build_pdf] do begin # Run check - Rake::Task["book:check"].invoke + Rake::Task['book:check'].invoke # Rescue to ignore checking errors rescue => e @@ -52,7 +52,7 @@ namespace :book do desc 'build basic book formats (for ci)' task :ci => [:build_html, :build_epub, :build_pdf] do # Run check, but don't ignore any errors - Rake::Task["book:check"].invoke + Rake::Task['book:check'].invoke end desc 'generate contributors list' From e65a45ce069e60c7d09a8696ba32b6cc03753711 Mon Sep 17 00:00:00 2001 From: Bagas Sanjaya Date: Thu, 11 Feb 2021 14:06:27 +0700 Subject: [PATCH 215/549] Delete remaining conflict resolution marker line That line cause FTBFS on CI. It was forgotten to be deleted on previous commit, due to hurry. Signed-off-by: Bagas Sanjaya --- Rakefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Rakefile b/Rakefile index c86bef89..3be04e0b 100644 --- a/Rakefile +++ b/Rakefile @@ -95,7 +95,6 @@ namespace :book do # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these lines below puts "Converting to Mobi isn't supported yet." puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496." ->>>>>>> fork/build-task-refactor exit(127) end From df423f2f33dcc607fe6d5a815c5c0acf7cc16bc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Feb 2021 05:45:50 +0000 Subject: [PATCH 216/549] Update pygments.rb requirement from 2.0.0 to 2.1.0 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.0.0...v2.1.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 405429c6..211d769e 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'asciidoctor-epub3', '1.5.0.alpha.19' gem 'asciidoctor-pdf', '1.5.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.0.0' +gem 'pygments.rb', '2.1.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' gem 'html-proofer', '3.18.5' From 22e92084248285afe4bfbc0ee42956be41abdc76 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 14 Feb 2021 22:57:17 +0300 Subject: [PATCH 217/549] Update branch name highlight --- .../sections/branch-management.asc | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index d70d4091..5dcad611 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -82,7 +82,7 @@ Do not rename branches that are still in use by other collaborators. Do not rename a branch like master/main/mainline without having read the section "Changing the master branch name". ==== -Suppose you have a branch that is called _bad-branch-name_ and you want to change it to _corrected-branch-name_, while keeping all history. +Suppose you have a branch that is called `bad-branch-name` and you want to change it to `corrected-branch-name`, while keeping all history. You also want to change the branch name on the remote (GitHub, GitLab, other server). How do you do this? @@ -93,7 +93,7 @@ Rename the branch locally with the `git branch --move` command: $ git branch --move bad-branch-name corrected-branch-name ---- -This replaces your bad-branch-name with corrected-branch-name, but this change is only local for now. +This replaces your `bad-branch-name` with `corrected-branch-name`, but this change is only local for now. To let others see the corrected branch on the remote, push it: [source,console] @@ -113,10 +113,8 @@ $ git branch --all remotes/origin/main ---- -Notice that you're on the branch corrected-branch-name. -The corrected branch is available on the remote. -However the bad branch is also still present on the remote. -You can delete the bad branch from the remote: +Notice that you're on the branch `corrected-branch-name` and it's available on the remote. +However, the branch with the bad name is also still present there but you can delete it by executing the following command: [source,console] ---- @@ -131,19 +129,19 @@ Now the bad branch name is fully replaced with the corrected branch name. ==== Changing the name of a branch like master/main/mainline/default will break the integrations, services, helper utilities and build/release scripts that your repository uses. Before you do this, make sure you consult with your collaborators. -Also make sure you do a thorough search through your repo and update any references to the old branch name in your code or scripts. +Also, make sure you do a thorough search through your repo and update any references to the old branch name in your code and scripts. ==== -Rename your local _master_ branch into _main_ with the following command +Rename your local `master` branch into `main` with the following command: [source,console] ---- $ git branch --move master main ---- -There's no _master_ branch locally anymore, because it's renamed to the _main_ branch. +There's no local `master` branch anymore, because it's renamed to the `main` branch. -To let others see the new _main_ branch, you need to push it to the remote. +To let others see the new `main` branch, you need to push it to the remote. This makes the renamed branch available on the remote. [source,console] @@ -162,10 +160,10 @@ git branch --all remotes/origin/master ---- -Your local _master_ branch is gone, as it's replaced with the _main_ branch. -The _main_ branch is also available on the remote. -But the remote still has a _master_ branch. -Other collaborators will continue to use the _master_ branch as the base of their work, until you make some further changes. +Your local `master` branch is gone, as it's replaced with the `main` branch. +The `main` branch is present on the remote. +However, the old `master` branch is still present on the remote. +Other collaborators will continue to use the `master` branch as the base of their work, until you make some further changes. Now you have a few more tasks in front of you to complete the transition: @@ -176,7 +174,7 @@ Now you have a few more tasks in front of you to complete the transition: * Update references to the old branch in documentation. * Close or merge any pull requests that target the old branch. -After you've done all these tasks, and are certain the main branch performs just as the _master_ branch, you can delete the _master_ branch: +After you've done all these tasks, and are certain the `main` branch performs just as the `master` branch, you can delete the `master` branch: [source, console] ---- From b1d67681970c96d50ad707e586ec25e484ca1efa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Feb 2021 05:43:19 +0000 Subject: [PATCH 218/549] Update html-proofer requirement from 3.18.5 to 3.18.6 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.18.5...v3.18.6) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 211d769e..22324e23 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.1.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' -gem 'html-proofer', '3.18.5' +gem 'html-proofer', '3.18.6' From 991f10bc0e5efbebabde3d2fdce14be6469f57f0 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:45:47 +0100 Subject: [PATCH 219/549] fix whitespace --- .github/ISSUE_TEMPLATE/bug_report.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3424017a..db0f40b3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,7 +4,6 @@ about: Create a report to help us improve title: '' labels: '' assignees: '' - --- From 0117eb42c029a6fef01ce60091066372d3db3f68 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:53:05 +0100 Subject: [PATCH 220/549] use consistent quote marks --- .github/ISSUE_TEMPLATE/bug_report.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index db0f40b3..1658307d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,9 +1,9 @@ --- name: Bug report about: Create a report to help us improve -title: '' -labels: '' -assignees: '' +title: "" +labels: "" +assignees: "" --- From ff15ae9808d9ebc69ea469db3b70ad21f361438a Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:46:48 +0100 Subject: [PATCH 221/549] prevent blank issues on GitHub --- .github/ISSUE_TEMPLATE/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c5977951..d4fe1b2e 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,3 +1,4 @@ +blank_issues_enabled: false contact_links: - name: Translation bug url: https://github.com/progit/progit2/blob/master/TRANSLATING.md From 8189236a64cbb43946d50ab06f7415a500dca4d8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:47:09 +0100 Subject: [PATCH 222/549] draft feature template --- .github/ISSUE_TEMPLATE/feature_request.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..ffbff53b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,15 @@ +--- +name: Feature request +about: Suggest an idea for the ProGit2 book or repository +title: "" +labels: "" +assignees: "" +--- + +**Give a general overview of your idea.** + +**Explain what problem you're trying to solve.** + +**Have you thought about other solutions?** + +**Do you want to help with this feature request?** From f9ddcf1ac775dff78d1da21102f3bc2ab8e6cf28 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 27 Feb 2021 11:31:17 +0100 Subject: [PATCH 223/549] automatically label bug issues --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1658307d..aeae6117 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,7 +2,7 @@ name: Bug report about: Create a report to help us improve title: "" -labels: "" +labels: "bug" assignees: "" --- From ca4f21b2a7717de96bf6df0d1b32842139e52454 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 27 Feb 2021 11:31:48 +0100 Subject: [PATCH 224/549] automatically label feature requests --- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index ffbff53b..66af0c46 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -2,7 +2,7 @@ name: Feature request about: Suggest an idea for the ProGit2 book or repository title: "" -labels: "" +labels: "enhancement" assignees: "" --- From b428ba3a857f2dee1460391319016bc409b5b9b1 Mon Sep 17 00:00:00 2001 From: Sergey Kuznetsov Date: Sun, 28 Feb 2021 17:59:15 -0800 Subject: [PATCH 225/549] Index must be only in pdf ## Changes * Fixed include directive * Used level 1 for Index section see https://docs.asciidoctor.org/asciidoc/latest/sections/ * Deleted unused file `book/index.asc` --- book/index.asc | 1 - index.asc | 2 +- progit.asc | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 book/index.asc diff --git a/book/index.asc b/book/index.asc deleted file mode 100644 index 9b0c1cfa..00000000 --- a/book/index.asc +++ /dev/null @@ -1 +0,0 @@ -== Index diff --git a/index.asc b/index.asc index 2df4a6b1..9618359a 100644 --- a/index.asc +++ b/index.asc @@ -1,3 +1,3 @@ [#index] [index] -= Index +== Index diff --git a/progit.asc b/progit.asc index 26e41bab..9774d00c 100644 --- a/progit.asc +++ b/progit.asc @@ -46,4 +46,4 @@ include::B-embedding-git-in-your-applications.asc[] include::C-git-commands.asc[] -ifndef::ebook-format[include::index.asc[]] +ifdef::backend-pdf[include::index.asc[]] From 3e638aefc5fbfacdff98a4ba436859f8e701292e Mon Sep 17 00:00:00 2001 From: Billy Griffin <5091167+billygriffin@users.noreply.github.com> Date: Tue, 2 Mar 2021 09:30:00 -0700 Subject: [PATCH 226/549] Remove GitHub Desktop from installing instructions --- book/01-introduction/sections/installing.asc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index b400cfc7..10cb23f6 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -65,12 +65,6 @@ Note that this is a project called Git for Windows, which is separate from Git i To get an automated installation you can use the https://chocolatey.org/packages/git[Git Chocolatey package]. Note that the Chocolatey package is community maintained. -Another easy way to get Git installed is by installing GitHub Desktop. -The installer includes a command line version of Git as well as the GUI. -It also works well with PowerShell, and sets up solid credential caching and sane CRLF settings.(((PowerShell)))(((CRLF)))(((credential caching))) -We'll learn more about those things a little later, but suffice it to say they're things you want. -You can download this from the https://desktop.github.com[GitHub Desktop website]. - ==== Installing from Source Some people may instead find it useful to install Git from source, because you'll get the most recent version. From a7ce7239650255464876a8b1bcfc7e12b617f612 Mon Sep 17 00:00:00 2001 From: Billy Griffin <5091167+billygriffin@users.noreply.github.com> Date: Thu, 4 Mar 2021 19:15:59 -0700 Subject: [PATCH 227/549] Remove GitHub Desktop macOS section as well --- book/01-introduction/sections/installing.asc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 10cb23f6..bd509397 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -51,10 +51,6 @@ A macOS Git installer is maintained and available for download at the Git websit .Git macOS Installer image::images/git-osx-installer.png[Git macOS installer] -You can also install it as part of the GitHub for macOS install. -Their GUI Git tool has an option to install command line tools as well. -You can download that tool from the GitHub for macOS website, at https://desktop.github.com[]. - ==== Installing on Windows There are also a few ways to install Git on Windows.(((Windows, installing))) From 691e86f76c755f5798eb14b43b67a79eb8d2de4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Mar 2021 05:23:49 +0000 Subject: [PATCH 228/549] Update html-proofer requirement from 3.18.6 to 3.18.8 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.18.6...v3.18.8) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 22324e23..d7942a4d 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.1.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' -gem 'html-proofer', '3.18.6' +gem 'html-proofer', '3.18.8' From e29aa8dc54fbcb332e918230432865224c9c03ce Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 6 Mar 2021 11:19:52 +0100 Subject: [PATCH 229/549] update link to AsciiDoc quick reference --- README.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.asc b/README.asc index 53ed6f75..09daac23 100644 --- a/README.asc +++ b/README.asc @@ -7,7 +7,7 @@ You can find this book online at: https://git-scm.com/book Like the first edition, the second edition of Pro Git is open source under a Creative Commons license. A couple of things have changed since open sourcing the first edition. -For one, we've moved from Markdown to the amazing AsciiDoc format for the text of the book; here's an https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[AsciiDoc quick reference]. +For one, we've moved from Markdown to the amazing AsciiDoc format for the text of the book; here's an https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/[AsciiDoc quick reference]. We've also moved to keeping the translations in separate repositories rather than subdirectories of the English repository. See link:TRANSLATING.md[the translating document] for more information. From f6e43a86a743aaca163892eb3e02d75a0a0c73b4 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:27:25 +0100 Subject: [PATCH 230/549] improve wording on issue select screen --- .github/ISSUE_TEMPLATE/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c5977951..047e7cb8 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -5,12 +5,12 @@ contact_links: - name: Report bugs for git-scm.com site url: https://github.com/git/git-scm.com/issues/ - about: Please report problems with the git-scm.com site here. + about: Please report problems with the git-scm.com site there. - name: Bug is about Git program itself url: https://git-scm.com/community - about: Please report problems with the Git program here. + about: Please report problems with the Git program there. - name: Bug is about Git for Windows url: https://github.com/git-for-windows/git/issues - about: Please report problems with Git for Windows here. + about: Please report problems with Git for Windows there. From 18c7ca404ce48421736e6116e499fab270cffcf9 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 28 Feb 2021 16:07:18 +0300 Subject: [PATCH 231/549] Use generic link to Dulwich website --- book/B-embedding-git/sections/dulwich.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 90ff4a05..9a238699 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -40,5 +40,4 @@ porcelain.log('.', max_entries=1) ==== Further Reading - * The official API documentation is available at https://www.dulwich.io/docs/api/[]. - * Official tutorial at https://www.dulwich.io/docs/tutorial[] has many examples of how to do specific tasks with Dulwich. +The API documentation, tutorial, and many examples of how to do specific tasks with Dulwich are available on the official website https://www.dulwich.io[]. From 44ad85a406d06cc85c22a0669c07b7873a342956 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 05:44:17 +0000 Subject: [PATCH 232/549] Update awesome_print requirement from 1.8.0 to 1.9.2 Updates the requirements on [awesome_print](https://github.com/awesome-print/awesome_print) to permit the latest version. - [Release notes](https://github.com/awesome-print/awesome_print/releases) - [Changelog](https://github.com/awesome-print/awesome_print/blob/master/CHANGELOG.md) - [Commits](https://github.com/awesome-print/awesome_print/compare/v1.8.0...v1.9.2) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index d7942a4d..9241d622 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ gem 'rake', '13.0.3' gem 'asciidoctor', '2.0.12' gem 'json', '2.5.1' -gem 'awesome_print', '1.8.0' +gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.0.alpha.19' gem 'asciidoctor-pdf', '1.5.4' From 812dcfc01ea7cecdf33e9a9bcf288cd5ccd42e15 Mon Sep 17 00:00:00 2001 From: Matt Trzcinski Date: Wed, 10 Mar 2021 12:37:36 -0500 Subject: [PATCH 233/549] Clarify tree object example not a continuation of previous examples --- book/10-git-internals/sections/objects.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 04e37f1c..114621f5 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -126,7 +126,7 @@ The next type of Git object we'll examine is the _tree_, which solves the proble Git stores content in a manner similar to a UNIX filesystem, but a bit simplified. All the content is stored as tree and blob objects, with trees corresponding to UNIX directory entries and blobs corresponding more or less to inodes or file contents. A single tree object contains one or more entries, each of which is the SHA-1 hash of a blob or subtree with its associated mode, type, and filename. -For example, the most recent tree in a project may look something like this: +For example, a repository (different from the one created in the previous section) may have a tree that looks something like: [source,console] ---- From 3e4e2b763409440711acf69bbb277dc1a6415a9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Mar 2021 05:14:40 +0000 Subject: [PATCH 234/549] Update pygments.rb requirement from 2.1.0 to 2.2.0 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.1.0...v2.2.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9241d622..81622656 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'asciidoctor-epub3', '1.5.0.alpha.19' gem 'asciidoctor-pdf', '1.5.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.1.0' +gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.4.0' gem 'html-proofer', '3.18.8' From 0788608efc51b231a6225367c19caec621d3cc75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Mar 2021 05:27:35 +0000 Subject: [PATCH 235/549] Update epubcheck-ruby requirement from 4.2.4.0 to 4.2.5.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Release notes](https://github.com/takahashim/epubcheck-ruby/releases) - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v4.2.4.0...v4.2.5.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 81622656..befa313e 100644 --- a/Gemfile +++ b/Gemfile @@ -12,5 +12,5 @@ gem 'asciidoctor-pdf', '1.5.4' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '4.2.4.0' +gem 'epubcheck-ruby', '4.2.5.0' gem 'html-proofer', '3.18.8' From acc6163602e328af6cddc7ddd14281c81086c598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 05:42:15 +0000 Subject: [PATCH 236/549] Update asciidoctor requirement from 2.0.12 to 2.0.13 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.12...v2.0.13) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index befa313e..f41a343e 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.3' -gem 'asciidoctor', '2.0.12' +gem 'asciidoctor', '2.0.13' gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' From e4869138288fa4bd6277042d23fe96d955f426f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 05:42:24 +0000 Subject: [PATCH 237/549] Update html-proofer requirement from 3.18.8 to 3.19.0 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.18.8...v3.19.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index befa313e..f4b41471 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.5.0' -gem 'html-proofer', '3.18.8' +gem 'html-proofer', '3.19.0' From 9708d1e2af64334b44561e3fdb996be857d4b056 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 05:57:59 +0000 Subject: [PATCH 238/549] Update html-proofer requirement from 3.19.0 to 3.19.1 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.19.0...v3.19.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 84aee3e8..d782508d 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.5.0' -gem 'html-proofer', '3.19.0' +gem 'html-proofer', '3.19.1' From 5a96ac1686a08fb593cdc7b58b5610fc25d85657 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Apr 2021 05:18:51 +0000 Subject: [PATCH 239/549] Update asciidoctor requirement from 2.0.13 to 2.0.14 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.13...v2.0.14) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 84aee3e8..a35ea9a0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.3' -gem 'asciidoctor', '2.0.13' +gem 'asciidoctor', '2.0.14' gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' From 3fc93ba36a24f3001bc876f60cd913e011e1eeed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Apr 2021 05:23:52 +0000 Subject: [PATCH 240/549] Update asciidoctor requirement from 2.0.14 to 2.0.15 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.14...v2.0.15) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a35ea9a0..828d554f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.3' -gem 'asciidoctor', '2.0.14' +gem 'asciidoctor', '2.0.15' gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' From 256528e21a72d824233bc5fe057077359ef39f88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 05:04:02 +0000 Subject: [PATCH 241/549] Update asciidoctor-pdf requirement from 1.5.4 to 1.6.0 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v1.5.4...v1.6.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 828d554f..959c4270 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.0.alpha.19' -gem 'asciidoctor-pdf', '1.5.4' +gem 'asciidoctor-pdf', '1.6.0' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' From a259bd67535c0455cb5cd6b4ec0c8dd26092bef3 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 21 May 2021 12:13:29 +0200 Subject: [PATCH 242/549] Update feature_request.md --- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 66af0c46..7e5c0a0b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,5 +1,5 @@ --- -name: Feature request +name: Enhancement idea about: Suggest an idea for the ProGit2 book or repository title: "" labels: "enhancement" From e521be53f092b16d70e02eb3836af9edfabf56ae Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 21 May 2021 12:15:20 +0200 Subject: [PATCH 243/549] rename file, adjust text in template --- .../ISSUE_TEMPLATE/{feature_request.md => enhancement_idea.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/ISSUE_TEMPLATE/{feature_request.md => enhancement_idea.md} (84%) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/enhancement_idea.md similarity index 84% rename from .github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/enhancement_idea.md index 7e5c0a0b..c1a8a0b3 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/enhancement_idea.md @@ -12,4 +12,4 @@ assignees: "" **Have you thought about other solutions?** -**Do you want to help with this feature request?** +**Do you want to help with this enhancement idea?** From 989c9b8ab0ddebe8ee87d466ba6c2322d0599291 Mon Sep 17 00:00:00 2001 From: Pratik Nadagouda <30607258+prnadago@users.noreply.github.com> Date: Wed, 26 May 2021 16:35:59 -0700 Subject: [PATCH 244/549] Simplify Git in Visual Studio page Removed paragraphs and replaced with bulleted list, removed screenshots, updated link to Visual Studio docs. --- .../sections/visualstudio.asc | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index c369e513..47532946 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -1,25 +1,20 @@ === Git in Visual Studio (((Visual Studio))) -Starting with Visual Studio 2013 Update 1, Visual Studio users have a Git client built directly into their IDE. -Visual Studio has had source-control integration features for quite some time, but they were oriented towards centralized, file-locking systems, and Git was not a good match for this workflow. -Visual Studio 2013's Git support has been separated from this older feature, and the result is a much better fit between Studio and Git. +Visual Studio has Git tooling built directly into the IDE, starting with Visual Studio 2019 version 16.8. -To locate the feature, open a project that's controlled by Git (or just `git init` an existing project), and select View > Team Explorer from the menu. -You'll see the "Connect" view, which looks a bit like this: +The tooling supports the following Git functionality: -.Connecting to a Git repository from Team Explorer -image::images/vs-1.png[Connecting to a Git repository from Team Explorer] +* Create or clone a repository. +* Open and browse history of a repository. +* Create and checkout branches and tags. +* Stash, stage, and commit changes. +* Fetch, pull, push, or sync commits. +* Merge and rebase branches. +* Resolve merge conflicts. +* View diffs. +* ... and more! -Visual Studio remembers all of the projects you've opened that are Git-controlled, and they're available in the list at the bottom. -If you don't see the one you want there, click the "Add" link and type in the path to the working directory. -Double clicking on one of the local Git repositories leads you to the Home view, which looks like <>. -This is a hub for performing Git actions; when you're _writing_ code, you'll probably spend most of your time in the "Changes" view, but when it comes time to pull down changes made by your teammates, you'll use the "Unsynced Commits" and "Branches" views. +Learn about it by reading the official documentation: https://docs.microsoft.com/visualstudio/version-control -[[vs_home]] -.The "Home" view for a Git repository in Visual Studio -image::images/vs-2.png[The “Home” view for a Git repository in Visual Studio] -Visual Studio now has a powerful task-focused UI for Git. -It includes a linear history view, a diff viewer, remote commands, and many other capabilities. -For more on using Git within Visual Studio go to: https://docs.microsoft.com/en-us/azure/devops/repos/git/command-prompt?view=azure-devops[]. From f0a40415961c86301a23a498de78d69e5b8103fe Mon Sep 17 00:00:00 2001 From: Pratik Nadagouda <30607258+prnadago@users.noreply.github.com> Date: Wed, 26 May 2021 16:50:27 -0700 Subject: [PATCH 245/549] Delete outdated images for Git in Visual Studio --- images/vs-1.png | Bin 8738 -> 0 bytes images/vs-2.png | Bin 4045 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/vs-1.png delete mode 100644 images/vs-2.png diff --git a/images/vs-1.png b/images/vs-1.png deleted file mode 100644 index 312cde3b5af293c1aaa950b5fd4769fa78b72507..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8738 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 dU2SIe3Q|350{9Ebn_ diff --git a/images/vs-2.png b/images/vs-2.png deleted file mode 100644 index 78d404c26a4e2a7378f3c9cf14c1e9169db5118f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4045 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 Us64Fj!6zDIYHVp#ZRnEtFT;Qo3IG5A From a8466723a636078e2040a1a4d96be5650cb3b70e Mon Sep 17 00:00:00 2001 From: Pratik Nadagouda <30607258+prnadago@users.noreply.github.com> Date: Thu, 27 May 2021 09:25:53 -0700 Subject: [PATCH 246/549] Update book/A-git-in-other-environments/sections/visualstudio.asc Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- book/A-git-in-other-environments/sections/visualstudio.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index 47532946..bfd30785 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -15,6 +15,5 @@ The tooling supports the following Git functionality: * View diffs. * ... and more! -Learn about it by reading the official documentation: https://docs.microsoft.com/visualstudio/version-control - +Read the https://docs.microsoft.com/visualstudio/version-control[official documentation^] to learn more. From 2c8979c97a66b86cf101d3171f4fce41ab4ea8a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 14:19:36 +0000 Subject: [PATCH 247/549] Update asciidoctor-epub3 requirement from 1.5.0.alpha.19 to 1.5.1 Updates the requirements on [asciidoctor-epub3](https://github.com/asciidoctor/asciidoctor-epub3) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-epub3/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-epub3/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-epub3/compare/v1.5.0.alpha.19...v1.5.1) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 959c4270..bf410d71 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ gem 'asciidoctor', '2.0.15' gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' -gem 'asciidoctor-epub3', '1.5.0.alpha.19' +gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '1.6.0' gem 'coderay', '1.1.3' From e4ac72260eb6452926aa5c344cece22bc553eebe Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 15 Jun 2021 16:50:23 +0200 Subject: [PATCH 248/549] Enable .mobi (Kindle) format again --- Rakefile | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Rakefile b/Rakefile index 3be04e0b..09167299 100644 --- a/Rakefile +++ b/Rakefile @@ -84,18 +84,9 @@ namespace :book do desc 'build Mobi format' task :build_mobi => 'book/contributors.txt' do - # Commented out the .mobi file creation because the kindlegen dependency is not available. - # For more information on this see: #1496. - # This is a (hopefully) temporary fix until upstream asciidoctor-epub3 is fixed and we can offer .mobi files again. - - # puts "Converting to Mobi (kf8)..." - # `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` - # puts " -- Mobi output at progit.mobi" - - # FIXME: If asciidoctor-epub3 supports Mobi again, uncomment these lines below - puts "Converting to Mobi isn't supported yet." - puts "For more information see issue #1496 at https://github.com/progit/progit2/issues/1496." - exit(127) + puts "Converting to Mobi (kf8)..." + `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` + puts " -- Mobi output at progit.mobi" end desc 'build PDF format' From bdeca5250878a93685712b73b09eee28fa352dd2 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 15 Jun 2021 16:58:01 +0200 Subject: [PATCH 249/549] Put references to Mobi files back in README --- README.asc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.asc b/README.asc index 53ed6f75..6558c663 100644 --- a/README.asc +++ b/README.asc @@ -15,8 +15,7 @@ See link:TRANSLATING.md[the translating document] for more information. == How To Generate the Book You can generate the e-book files manually with Asciidoctor. -We used to be able to build .mobi files (Kindle), but cannot do so now, see #1496 for more information. -If you run the following you _may_ actually get HTML, Epub and PDF output files: +If you run the following you _may_ actually get HTML, Epub, Mobi and PDF output files: ---- $ bundle install @@ -25,11 +24,13 @@ Converting to HTML... -- HTML output at progit.html Converting to EPub... -- Epub output at progit.epub +Converting to Mobi (kf8)... + -- Mobi output at progit.mobi Converting to PDF... -- PDF output at progit.pdf ---- -You can generate just one of the supported formats (HTML, EPUB, or PDF). +You can generate just one of the supported formats (HTML, EPUB, mobi, or PDF). Use one of the following commands: To generate the HTML book: @@ -44,6 +45,12 @@ To generate the EPUB book: $ bundle exec rake book:build_epub ---- +To generate the mobi book: + +---- +$ bundle exec rake book:build_mobi +---- + To generate the PDF book: ---- From 2ddf197e2f5f561eb8092bd0279cf476e665b379 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Tue, 15 Jun 2021 22:50:55 +0200 Subject: [PATCH 250/549] Fix broken .mobi build --- Rakefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index 09167299..e9446dbc 100644 --- a/Rakefile +++ b/Rakefile @@ -37,7 +37,7 @@ namespace :book do end desc 'build basic book formats' - task :build => [:build_html, :build_epub, :build_pdf] do + task :build => [:build_html, :build_epub, :build_mobi, :build_pdf] do begin # Run check Rake::Task['book:check'].invoke @@ -50,7 +50,7 @@ namespace :book do end desc 'build basic book formats (for ci)' - task :ci => [:build_html, :build_epub, :build_pdf] do + task :ci => [:build_html, :build_epub, :build_mobi, :build_pdf] do # Run check, but don't ignore any errors Rake::Task['book:check'].invoke end @@ -84,6 +84,8 @@ namespace :book do desc 'build Mobi format' task :build_mobi => 'book/contributors.txt' do + check_contrib() + puts "Converting to Mobi (kf8)..." `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` puts " -- Mobi output at progit.mobi" @@ -111,7 +113,7 @@ namespace :book do begin puts 'Removing generated files' - FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.pdf'].each do |file| + FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.mobi', 'progit.pdf'].each do |file| rm file # Rescue if file not found From d285543f917d367f12d9cc943dc284c607de6274 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 16 Jun 2021 15:57:32 -0700 Subject: [PATCH 251/549] Update book/10-git-internals/sections/objects.asc --- book/10-git-internals/sections/objects.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 114621f5..c04a695d 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -126,7 +126,7 @@ The next type of Git object we'll examine is the _tree_, which solves the proble Git stores content in a manner similar to a UNIX filesystem, but a bit simplified. All the content is stored as tree and blob objects, with trees corresponding to UNIX directory entries and blobs corresponding more or less to inodes or file contents. A single tree object contains one or more entries, each of which is the SHA-1 hash of a blob or subtree with its associated mode, type, and filename. -For example, a repository (different from the one created in the previous section) may have a tree that looks something like: +For example, let's say you have a project where the most-recent tree looks something like: [source,console] ---- From 2ff914fb27a192d56afb21f932b57ca3a1f51886 Mon Sep 17 00:00:00 2001 From: Patrice Krakow Date: Fri, 18 Jun 2021 11:05:38 +0200 Subject: [PATCH 252/549] bash.asc | Warn about the version of the source code --- book/A-git-in-other-environments/sections/bash.asc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index ad383947..aa8392c7 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -5,6 +5,9 @@ If you're a Bash user, you can tap into some of your shell's features to make yo Git actually ships with plugins for several shells, but it's not turned on by default. First, you need to get a copy of the `contrib/completion/git-completion.bash` file out of the Git source code. +Make sure to get it from the version of the source code that corresponds to the version of Git your are using. +You can find the version of Git you are using with the command `git version`. +You can then select the corresponding tag on the Git source code, using `git checkout tags/vX.Y.Z`, where `vX.Y.Z` corresponds to the version of Git you are using. Copy it somewhere handy, like your home directory, and add this to your `.bashrc`: [source,console] From dd71165b0204146e1b7adef25411eea537f1c641 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 20 Jun 2021 17:08:32 +0200 Subject: [PATCH 253/549] update git add -h output, based on git version 2.32.0 --- book/01-introduction/sections/help.asc | 34 ++++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index 731ea5ff..1a10a306 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -28,21 +28,23 @@ In addition, if you don't need the full-blown manpage help, but just need a quic $ git add -h usage: git add [] [--] ... - -n, --dry-run dry run - -v, --verbose be verbose - - -i, --interactive interactive picking - -p, --patch select hunks interactively - -e, --edit edit current diff and apply - -f, --force allow adding otherwise ignored files - -u, --update update tracked files - --renormalize renormalize EOL of tracked files (implies -u) - -N, --intent-to-add record only the fact that the path will be added later - -A, --all add changes from all tracked and untracked files - --ignore-removal ignore paths removed in the working tree (same as --no-all) - --refresh don't add, only refresh the index - --ignore-errors just skip files which cannot be added because of errors - --ignore-missing check if - even missing - files are ignored in dry run - --chmod (+|-)x override the executable bit of the listed files + -n, --dry-run dry run + -v, --verbose be verbose + + -i, --interactive interactive picking + -p, --patch select hunks interactively + -e, --edit edit current diff and apply + -f, --force allow adding otherwise ignored files + -u, --update update tracked files + --renormalize renormalize EOL of tracked files (implies -u) + -N, --intent-to-add record only the fact that the path will be added later + -A, --all add changes from all tracked and untracked files + --ignore-removal ignore paths removed in the working tree (same as --no-all) + --refresh don't add, only refresh the index + --ignore-errors just skip files which cannot be added because of errors + --ignore-missing check if - even missing - files are ignored in dry run + --chmod (+|-)x override the executable bit of the listed files + --pathspec-from-file read pathspec from file + --pathspec-file-nul with --pathspec-from-file, pathspec elements are separated with NUL character ---- From 9c91b2b4827aa6e7bd1b6b90ea914c4eb4c701f4 Mon Sep 17 00:00:00 2001 From: Robert Theis <943135+rmtheis@users.noreply.github.com> Date: Thu, 24 Jun 2021 12:20:55 -0500 Subject: [PATCH 254/549] Update signing.asc --- book/07-git-tools/sections/signing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index 8143ab66..57292adb 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -36,7 +36,7 @@ Now Git will use your key by default to sign tags and commits if you want. ==== Signing Tags -If you have a GPG private key setup, you can now use it to sign new tags. +If you have a GPG private key set up, you can now use it to sign new tags. All you have to do is use `-s` instead of `-a`: [source,console] From 2c816cb1423f9ce8430b0f9cfcebe0618d04b042 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 18:01:31 +0000 Subject: [PATCH 255/549] Update html-proofer requirement from 3.19.1 to 3.19.2 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.19.1...v3.19.2) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 1150c18f..965cc72a 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.5.0' -gem 'html-proofer', '3.19.1' +gem 'html-proofer', '3.19.2' From f594b0c52736085ff034ad1b032b3860615d7590 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sat, 26 Jun 2021 21:41:52 -0600 Subject: [PATCH 256/549] Create ci.yml --- .github/workflows/ci.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..5790c15e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,20 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Run tests + run: bundle exec rake book:build From b8fedcb050f6c6345308fc91924d8f5c378dd4bc Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sat, 26 Jun 2021 21:58:09 -0600 Subject: [PATCH 257/549] Create tag-on-merge.yml --- .github/workflows/tag-on-merge.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/tag-on-merge.yml diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml new file mode 100644 index 00000000..901996cb --- /dev/null +++ b/.github/workflows/tag-on-merge.yml @@ -0,0 +1,22 @@ +name: Tag on merge to master + +on: + push: + branches: [ master ] + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Compute tag name + id: compute-tag + run: | + echo Computing next tag number + LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) + echo "::set-output name=tagname::$(($LASTPATCH+1))" + - name: Create Tag + uses: negz/create-tag@v1 + with: + version: ${{ steps.compute-tag.outputs.tagname }} + token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From ab68c8f0dca757e76684ccd1f6546a67b69635bf Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 06:42:04 -0600 Subject: [PATCH 258/549] Add release-on-tag workflow --- .github/workflows/ci.yml | 2 +- .github/workflows/release-on-tag.yml | 30 ++++++++++++++++++++++++++++ .github/workflows/tag-on-merge.yml | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release-on-tag.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5790c15e..dbc04f53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,5 +16,5 @@ jobs: with: ruby-version: 2.7 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: Run tests + - name: Run build run: bundle exec rake book:build diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml new file mode 100644 index 00000000..c8efa2ad --- /dev/null +++ b/.github/workflows/release-on-tag.yml @@ -0,0 +1,30 @@ +name: Tag on merge to master + +on: + push: + tags: [ '*' ] + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - name: Run build + run: bundle exec rake book:build + + - name: Grab tag name + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Create release + uses: ncipollo/release-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ env.RELEASE_VERSION }} + artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index 901996cb..651e0ec7 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -9,12 +9,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - name: Compute tag name id: compute-tag run: | echo Computing next tag number LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) echo "::set-output name=tagname::$(($LASTPATCH+1))" + - name: Create Tag uses: negz/create-tag@v1 with: From b0bbdb3ac58abae93b3522a54a256b5f8b154404 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 06:46:53 -0600 Subject: [PATCH 259/549] Adjust whitespace --- .github/workflows/release-on-tag.yml | 4 ++-- .github/workflows/tag-on-merge.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml index c8efa2ad..a7349efd 100644 --- a/.github/workflows/release-on-tag.yml +++ b/.github/workflows/release-on-tag.yml @@ -15,13 +15,13 @@ jobs: with: ruby-version: 2.7 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - + - name: Run build run: bundle exec rake book:build - name: Grab tag name run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - + - name: Create release uses: ncipollo/release-action@v1 with: diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index 651e0ec7..fb2ddfa7 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -16,9 +16,9 @@ jobs: echo Computing next tag number LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) echo "::set-output name=tagname::$(($LASTPATCH+1))" - + - name: Create Tag uses: negz/create-tag@v1 with: version: ${{ steps.compute-tag.outputs.tagname }} - token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + token: ${{ secrets.GITHUB_TOKEN }} From 41abef539094ee0bce1f3cfd1a0333be201760b9 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 06:48:23 -0600 Subject: [PATCH 260/549] Names are hard --- .github/workflows/ci.yml | 4 +++- .github/workflows/release-on-tag.yml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dbc04f53..5628e6a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,10 +11,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: 2.7 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: Run build + + - name: Build book run: bundle exec rake book:build diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml index a7349efd..30914511 100644 --- a/.github/workflows/release-on-tag.yml +++ b/.github/workflows/release-on-tag.yml @@ -16,7 +16,7 @@ jobs: ruby-version: 2.7 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: Run build + - name: Build book run: bundle exec rake book:build - name: Grab tag name From d6e24367cdce2f3f18c669fa88f9057da2554061 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 06:51:12 -0600 Subject: [PATCH 261/549] Tags should be 2.1.xxx --- .github/workflows/tag-on-merge.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index fb2ddfa7..51b6dc09 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -15,7 +15,8 @@ jobs: run: | echo Computing next tag number LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) - echo "::set-output name=tagname::$(($LASTPATCH+1))" + PATCH=$(($LASTPATCH+1)) + echo "::set-output name=tagname::2.1.${PATCH})" - name: Create Tag uses: negz/create-tag@v1 From 4ddfc991305f7f1f1583b127eae7d1bb284ee23a Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:35:17 -0600 Subject: [PATCH 262/549] Names are still hard --- .github/workflows/{ci.yml => pr-build.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{ci.yml => pr-build.yml} (94%) diff --git a/.github/workflows/ci.yml b/.github/workflows/pr-build.yml similarity index 94% rename from .github/workflows/ci.yml rename to .github/workflows/pr-build.yml index 5628e6a1..e94bb222 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/pr-build.yml @@ -1,4 +1,4 @@ -name: CI +name: Pull Request Build on: push: From 331e79433ee108751b3c35b42cbfc2f30959a143 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:35:30 -0600 Subject: [PATCH 263/549] Only run on PRs --- .github/workflows/pr-build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index e94bb222..592c3f21 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -1,8 +1,6 @@ name: Pull Request Build on: - push: - branches: [ master ] pull_request: branches: [ master ] From f84882cab0ee3f4875864abd89b7680fa65937b5 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:36:03 -0600 Subject: [PATCH 264/549] Yup, names are still hard --- .github/workflows/release-on-tag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml index 30914511..654059a5 100644 --- a/.github/workflows/release-on-tag.yml +++ b/.github/workflows/release-on-tag.yml @@ -1,4 +1,4 @@ -name: Tag on merge to master +name: Release on tag on: push: From 8c6ae5bc67980c2747cdc0aed5699a95c63246e5 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:36:34 -0600 Subject: [PATCH 265/549] Update .github/workflows/tag-on-merge.yml Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- .github/workflows/tag-on-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index 51b6dc09..4d33f04b 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -18,7 +18,7 @@ jobs: PATCH=$(($LASTPATCH+1)) echo "::set-output name=tagname::2.1.${PATCH})" - - name: Create Tag + - name: Create tag uses: negz/create-tag@v1 with: version: ${{ steps.compute-tag.outputs.tagname }} From c347bccfa4c354f5623296089f449c09247f3b10 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:53:53 -0600 Subject: [PATCH 266/549] A different tagging action --- .github/workflows/tag-on-merge.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index 4d33f04b..8678812b 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -18,8 +18,14 @@ jobs: PATCH=$(($LASTPATCH+1)) echo "::set-output name=tagname::2.1.${PATCH})" - - name: Create tag - uses: negz/create-tag@v1 + - name: Create Tag + uses: actions/github-script@v3 with: - version: ${{ steps.compute-tag.outputs.tagname }} - token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ github.token }} + script: | + github.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "refs/tags/${{ steps.compute-tag.outputs.tagname }}", + sha: context.sha + }) From ca8a4293bfe7cf087ec830c770d5493b623d86d4 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 08:55:14 -0600 Subject: [PATCH 267/549] wups --- .github/workflows/tag-on-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index 8678812b..c0669240 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -16,7 +16,7 @@ jobs: echo Computing next tag number LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) PATCH=$(($LASTPATCH+1)) - echo "::set-output name=tagname::2.1.${PATCH})" + echo "::set-output name=tagname::2.1.${PATCH}" - name: Create Tag uses: actions/github-script@v3 From 223491938747adaa002164eb32c9f67df82b144d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 27 Jun 2021 09:06:27 -0600 Subject: [PATCH 268/549] We'll be needing all of these --- .github/workflows/tag-on-merge.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/tag-on-merge.yml index c0669240..768d10e8 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/tag-on-merge.yml @@ -9,6 +9,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + with: + fetch-depth: 0 - name: Compute tag name id: compute-tag From 8932eb6d358acc21ee1f4694da42f9cb492ab8b2 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 06:20:11 -0700 Subject: [PATCH 269/549] Move release-generation into push-to-master workflow --- ...{tag-on-merge.yml => release-on-merge.yml} | 7 +++++ .github/workflows/release-on-tag.yml | 30 ------------------- 2 files changed, 7 insertions(+), 30 deletions(-) rename .github/workflows/{tag-on-merge.yml => release-on-merge.yml} (75%) delete mode 100644 .github/workflows/release-on-tag.yml diff --git a/.github/workflows/tag-on-merge.yml b/.github/workflows/release-on-merge.yml similarity index 75% rename from .github/workflows/tag-on-merge.yml rename to .github/workflows/release-on-merge.yml index 768d10e8..af2a32eb 100644 --- a/.github/workflows/tag-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -31,3 +31,10 @@ jobs: ref: "refs/tags/${{ steps.compute-tag.outputs.tagname }}", sha: context.sha }) + + - name: Create release + uses: ncipollo/release-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.compute-tag.outputs.tagname }} + artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml deleted file mode 100644 index 654059a5..00000000 --- a/.github/workflows/release-on-tag.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Release on tag - -on: - push: - tags: [ '*' ] - -jobs: - tag: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Set up Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 2.7 - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - - name: Build book - run: bundle exec rake book:build - - - name: Grab tag name - run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - - - name: Create release - uses: ncipollo/release-action@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - name: ${{ env.RELEASE_VERSION }} - artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' From cca8c1f17f3bbaee73559b97e5f4a177e19480e4 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 06:21:01 -0700 Subject: [PATCH 270/549] namesssss --- .github/workflows/release-on-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index af2a32eb..016d0733 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -1,4 +1,4 @@ -name: Tag on merge to master +name: Release on push to master on: push: From a360becbb94766397fe69bfc65772b5ab08fedc7 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 06:22:29 -0700 Subject: [PATCH 271/549] Let's try this --- .github/workflows/release-on-merge.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 016d0733..4e305c1b 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -5,7 +5,7 @@ on: branches: [ master ] jobs: - tag: + release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -21,16 +21,9 @@ jobs: echo "::set-output name=tagname::2.1.${PATCH}" - name: Create Tag - uses: actions/github-script@v3 - with: - github-token: ${{ github.token }} - script: | - github.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref: "refs/tags/${{ steps.compute-tag.outputs.tagname }}", - sha: context.sha - }) + run: | + git tag ${{ steps.compute-tag.outputs.tagname }} + git push origin ${{ steps.compute-tag.outputs.tagname }} - name: Create release uses: ncipollo/release-action@v1 From a1296a6810b918a02ee7a7606052d71133fcc79b Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 06:32:27 -0700 Subject: [PATCH 272/549] Wait this action can create tags too --- .github/workflows/release-on-merge.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 4e305c1b..b8a43efe 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -20,14 +20,10 @@ jobs: PATCH=$(($LASTPATCH+1)) echo "::set-output name=tagname::2.1.${PATCH}" - - name: Create Tag - run: | - git tag ${{ steps.compute-tag.outputs.tagname }} - git push origin ${{ steps.compute-tag.outputs.tagname }} - - name: Create release uses: ncipollo/release-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: ${{ steps.compute-tag.outputs.tagname }} + tag: ${{ steps.compute-tag.outputs.tagname }} + commit: master artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' From 68d21bca89052a59db2e485bd27e76bb771587cd Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 06:33:56 -0700 Subject: [PATCH 273/549] duh --- .github/workflows/release-on-merge.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index b8a43efe..1496f42b 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -20,6 +20,15 @@ jobs: PATCH=$(($LASTPATCH+1)) echo "::set-output name=tagname::2.1.${PATCH}" + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.7 + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - name: Build release assets + run: bundle exec rake book:build + - name: Create release uses: ncipollo/release-action@v1 with: From 692c7a040989ceda96fbe30fa9101cc5ad807f7b Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 07:59:26 -0700 Subject: [PATCH 274/549] Remove now-unused files --- .travis.yml | 34 ---------------------------------- script/tag_on_master | 19 ------------------- 2 files changed, 53 deletions(-) delete mode 100644 .travis.yml delete mode 100755 script/tag_on_master diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c28bea16..00000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: ruby -git: - depth: false -cache: bundler -before_install: -- bundle install -after_success: -- script/tag_on_master -script: bundle exec rake book:build -env: - secure: "O+YCTDgLfCYAJjjOv2sApDRV5NJe6pkhiYIkORFuf2flO8HE72fEtDRpSWh1vulnIH6AjRK2jH7C8qA3MVbUO8D0io+Ha+vnbMXIp1JPCptcJNEkJrW13VTR66SWOzsgLp3mCrIC+YdE2JoYWGcnDsRMQwdnrWnxBzSOd22ZKzU=" - -before_deploy: bundle install && bundle exec rake book:build -deploy: - provider: releases - file: - - progit.epub - - progit.mobi - - progit.pdf - - progit.html - skip_cleanup: true - on: - tags: true - api-key: - secure: "l3XdupX6dT48IoTieJXrd7Yx8+KhiR2QYrNrDzT6RKxA7UyXGSP/axsVerg7OjKfIHWZgDJRVzcc2RswE+Xjw9sOY8r2h2q9uCwj8G0EqtFbtgGK0La5LB0euh0tNJN8GLFj1OdSZGY7dWWK88GXeHCua2WSify0V79R4ClIM+s=" -branches: - only: - - master - - /^2\.1(\.\d+)+$/ - -notifications: - email: - on_success: never - on_failure: always diff --git a/script/tag_on_master b/script/tag_on_master deleted file mode 100755 index 6757a299..00000000 --- a/script/tag_on_master +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# This is for running on Travis. It automatically tags any merge to Master as a release in the 2.1.x series. -if [[ $TRAVIS_PULL_REQUEST != 'false' || "$TRAVIS_BRANCH" != 'master' ]]; then - # Don't run on pull requests - echo 'This only runs on a merge to master.' - exit 0 -fi - -# Compute the next tag number -LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) -PATCH=$(($LASTPATCH+1)) -echo $PATCH - -# Create a tag -curl -H "Authorization: token $GITHUB_KEY" \ - -X POST \ - -d "{\"ref\":\"refs/tags/2.1.$PATCH\", \"sha\":\"$TRAVIS_COMMIT\"}" \ - https://api.github.com/repos/progit/progit2/git/refs From 63129f6e982c649f6e9de003bc2b9260edceaee3 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 07:59:34 -0700 Subject: [PATCH 275/549] Clean up documentation --- Rakefile | 2 +- TRANSLATING.md | 17 +++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/Rakefile b/Rakefile index e9446dbc..0b0fd661 100644 --- a/Rakefile +++ b/Rakefile @@ -7,7 +7,7 @@ namespace :book do end # Variables referenced for build - version_string = ENV['TRAVIS_TAG'] || `git describe --tags`.chomp + version_string = `git describe --tags`.chomp if version_string.empty? version_string = '0' end diff --git a/TRANSLATING.md b/TRANSLATING.md index bc25e368..78ac783b 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -72,22 +72,11 @@ On https://git-scm.com, the translations are divided into three categories. Once | Partial translations available in | up to chapter 6 has been translated. | | Full translation available in |the book is (almost) fully translated. | -## Continuous integration with Travis CI +## Continuous integration with GitHub Actions -Travis CI is a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) service that integrates with GitHub. Travis CI is used to ensure that a pull-request doesn't break the build or compilation. Travis CI can also provide compiled versions of the book. +GitHub Actions is a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) service that integrates with GitHub. GitHub Actions is used to ensure that a pull-request doesn't break the build or compilation. GitHub Actions can also provide compiled versions of the book. -Setting up Travis CI requires administrative control over the repository. - -### Registering for Travis continuous integration - -1. Register a Travis account [here](https://travis-ci.org/). -1. Register your project in Travis. -Please refer to the [Travis documentation](https://docs.travis-ci.com/) for more information. - -### Setting up your repository for continuous integration - -Travis CI works by scanning your project's root directory for a file named `.travis.yml` and following the 'recipe' that it contains. The good news is: there's already a working `.travis.yml` file in the Pro Git 2 source [here](https://raw.githubusercontent.com/progit/progit2-pub/master/travis.yml). -Copy that file, and put it in your working directory. Commit the .yml file and push it to your translation repository; that should fire up a compilation and a check of the book's contents. +If you keep the `.github` directory from the root repository, you should get the GitHub Action CI setup for free. ## Setting up a publication chain for e-books From a72f948f671ae798bcfdbb50aa1e3d39580aef79 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Mon, 28 Jun 2021 08:13:05 -0700 Subject: [PATCH 276/549] Accuracy --- TRANSLATING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TRANSLATING.md b/TRANSLATING.md index 78ac783b..67985e4d 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -76,7 +76,9 @@ On https://git-scm.com, the translations are divided into three categories. Once GitHub Actions is a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) service that integrates with GitHub. GitHub Actions is used to ensure that a pull-request doesn't break the build or compilation. GitHub Actions can also provide compiled versions of the book. -If you keep the `.github` directory from the root repository, you should get the GitHub Action CI setup for free. +The configuration for GitHub Actions is contained in the `.github/workflows` directory, and if you bring in the `master` branch of the root repository you'll get them for free. +However, if you created your translation repo by _forking_ the root repo, there's an extra step you must complete (if you did not fork, you can skip this part). +GitHub assumes that forks will be used to contribute to the repo from which they were forked, so you'll have to visit the "Actions" tab on your forked repo, and click the "I understand my workflows" button to allow the actions to run. ## Setting up a publication chain for e-books From 29223ba33d73f62bb9060127158589532b86e095 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 28 Jun 2021 17:26:35 +0200 Subject: [PATCH 277/549] Migrate from master to main --- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/pull_request_template.md | 2 +- .github/workflows/pr-build.yml | 2 +- .github/workflows/release-on-merge.yml | 6 +++--- TRANSLATING.md | 2 +- atlas.json | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index cca18ef1..77477ed6 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: false contact_links: - name: Translation bug - url: https://github.com/progit/progit2/blob/master/TRANSLATING.md + url: https://github.com/progit/progit2/blob/main/TRANSLATING.md about: Refer to this table to find out where to report translation bugs. - name: Report bugs for git-scm.com site diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 89a908a7..fde92545 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,7 +3,7 @@ -- [ ] I provide my work under the [project license](https://github.com/progit/progit2/blob/master/LICENSE.asc). +- [ ] I provide my work under the [project license](https://github.com/progit/progit2/blob/main/LICENSE.asc). - [ ] I grant such license of my work as is required for the purposes of future print editions to [Ben Straub](https://github.com/ben) and [Scott Chacon](https://github.com/schacon). ## Changes diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 592c3f21..7f86d60e 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -2,7 +2,7 @@ name: Pull Request Build on: pull_request: - branches: [ master ] + branches: [ main ] jobs: build: diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 1496f42b..25ae215b 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -1,8 +1,8 @@ -name: Release on push to master +name: Release on push to main on: push: - branches: [ master ] + branches: [ main ] jobs: release: @@ -34,5 +34,5 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ steps.compute-tag.outputs.tagname }} - commit: master + commit: main artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' diff --git a/TRANSLATING.md b/TRANSLATING.md index 67985e4d..7966ebcd 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -76,7 +76,7 @@ On https://git-scm.com, the translations are divided into three categories. Once GitHub Actions is a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) service that integrates with GitHub. GitHub Actions is used to ensure that a pull-request doesn't break the build or compilation. GitHub Actions can also provide compiled versions of the book. -The configuration for GitHub Actions is contained in the `.github/workflows` directory, and if you bring in the `master` branch of the root repository you'll get them for free. +The configuration for GitHub Actions is contained in the `.github/workflows` directory, and if you bring in the `main` branch of the root repository you'll get them for free. However, if you created your translation repo by _forking_ the root repo, there's an extra step you must complete (if you did not fork, you can skip this part). GitHub assumes that forks will be used to contribute to the repo from which they were forked, so you'll have to visit the "Actions" tab on your forked repo, and click the "I understand my workflows" button to allow the actions to run. diff --git a/atlas.json b/atlas.json index d66a60a3..b75c8d65 100644 --- a/atlas.json +++ b/atlas.json @@ -1,5 +1,5 @@ { - "branch": "master", + "branch": "main", "files": [ "book/cover.html", "LICENSE.asc", From 0a6a5110b82c7b8ae44eae1e9277ebff4eedca2f Mon Sep 17 00:00:00 2001 From: Marat Radchenko Date: Tue, 29 Jun 2021 18:37:13 +0300 Subject: [PATCH 278/549] resolves #1671 install Kindlegen so .mobi output can be produced --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index 965cc72a..f93d4e45 100644 --- a/Gemfile +++ b/Gemfile @@ -14,3 +14,4 @@ gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.5.0' gem 'html-proofer', '3.19.2' +gem 'kindlegen', '3.1.1' From d6d46fe3a9604143fa55ece1161e700d3ef6964c Mon Sep 17 00:00:00 2001 From: Marat Radchenko Date: Tue, 29 Jun 2021 18:38:19 +0300 Subject: [PATCH 279/549] Use "sh" instead of backticks in Rakefile Benefits: 1. Command is printed to stdout, so it is clear what is being executed 2. Whole build will fail if any command fails --- Rakefile | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/Rakefile b/Rakefile index 0b0fd661..d32493c3 100644 --- a/Rakefile +++ b/Rakefile @@ -1,10 +1,4 @@ namespace :book do - def exec_or_raise(command) - puts `#{command}` - if (! $?.success?) - raise "'#{command}' failed" - end - end # Variables referenced for build version_string = `git describe --tags`.chomp @@ -28,7 +22,7 @@ namespace :book do puts "Hash on header of contributors list (#{header_hash}) matches the current HEAD (#{current_head_hash})" else puts "Hash on header of contributors list (#{header_hash}) does not match the current HEAD (#{current_head_hash}), refreshing" - `rm book/contributors.txt` + sh "rm book/contributors.txt" # Reenable and invoke task again Rake::Task['book/contributors.txt'].reenable Rake::Task['book/contributors.txt'].invoke @@ -58,8 +52,8 @@ namespace :book do desc 'generate contributors list' file 'book/contributors.txt' do puts 'Generating contributors list' - `echo "Contributors as of #{header_hash}:\n" > book/contributors.txt` - `git shortlog -s | grep -v -E "(Straub|Chacon|dependabot)" | cut -f 2- | column -c 120 >> book/contributors.txt` + sh "echo 'Contributors as of #{header_hash}:\n' > book/contributors.txt" + sh "git shortlog -s | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" end desc 'build HTML format' @@ -67,7 +61,7 @@ namespace :book do check_contrib() puts 'Converting to HTML...' - `bundle exec asciidoctor #{params} -a data-uri progit.asc` + sh "bundle exec asciidoctor #{params} -a data-uri progit.asc" puts ' -- HTML output at progit.html' end @@ -77,7 +71,7 @@ namespace :book do check_contrib() puts 'Converting to EPub...' - `bundle exec asciidoctor-epub3 #{params} progit.asc` + sh "bundle exec asciidoctor-epub3 #{params} progit.asc" puts ' -- Epub output at progit.epub' end @@ -87,7 +81,7 @@ namespace :book do check_contrib() puts "Converting to Mobi (kf8)..." - `bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc` + sh "bundle exec asciidoctor-epub3 #{params} -a ebook-format=kf8 progit.asc" puts " -- Mobi output at progit.mobi" end @@ -96,7 +90,7 @@ namespace :book do check_contrib() puts 'Converting to PDF... (this one takes a while)' - `bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null` + sh "bundle exec asciidoctor-pdf #{params} progit.asc 2>/dev/null" puts ' -- PDF output at progit.pdf' end @@ -104,8 +98,8 @@ namespace :book do task :check => [:build_html, :build_epub] do puts 'Checking generated books' - exec_or_raise('htmlproofer --check-html progit.html') - exec_or_raise('epubcheck progit.epub') + sh "htmlproofer --check-html progit.html" + sh "epubcheck progit.epub" end desc 'Clean all generated files' From cfb79e6a6e434bfa390940d63228cad905bc76e9 Mon Sep 17 00:00:00 2001 From: Bob Kline Date: Mon, 5 Jul 2021 18:12:58 -0400 Subject: [PATCH 280/549] Correct description of Linux kernel maintenance history Fixes #1675. --- book/01-introduction/sections/history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/history.asc b/book/01-introduction/sections/history.asc index dd1d096f..508fbe56 100644 --- a/book/01-introduction/sections/history.asc +++ b/book/01-introduction/sections/history.asc @@ -3,7 +3,7 @@ As with many great things in life, Git began with a bit of creative destruction and fiery controversy. The Linux kernel is an open source software project of fairly large scope.(((Linux))) -For most of the lifetime of the Linux kernel maintenance (1991–2002), changes to the software were passed around as patches and archived files. +During the early years of the Linux kernel maintenance (1991–2002), changes to the software were passed around as patches and archived files. In 2002, the Linux kernel project began using a proprietary DVCS called BitKeeper.(((BitKeeper))) In 2005, the relationship between the community that developed the Linux kernel and the commercial company that developed BitKeeper broke down, and the tool's free-of-charge status was revoked. From 33df1d7a5d7e543824e417f71414ed9780e19fb0 Mon Sep 17 00:00:00 2001 From: Bob Kline Date: Tue, 6 Jul 2021 08:57:08 -0400 Subject: [PATCH 281/549] Fix descriptions of untracked files --- book/02-git-basics/sections/recording-changes.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index d8a586ec..f863e1ee 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -4,7 +4,7 @@ At this point, you should have a _bona fide_ Git repository on your local machin Typically, you'll want to start making changes and committing snapshots of those changes into your repository each time the project reaches a state you want to record. Remember that each file in your working directory can be in one of two states: _tracked_ or _untracked_. -Tracked files are files that were in the last snapshot; they can be unmodified, modified, or staged. +Tracked files are files that were in the last snapshot, as well as any newly staged files; they can be unmodified, modified, or staged. In short, tracked files are files that Git knows about. Untracked files are everything else -- any files in your working directory that were not in your last snapshot and are not in your staging area. @@ -54,7 +54,7 @@ nothing added to commit but untracked files present (use "git add" to track) ---- You can see that your new `README` file is untracked, because it's under the "`Untracked files`" heading in your status output. -Untracked basically means that Git sees a file you didn't have in the previous snapshot (commit); Git won't start including it in your commit snapshots until you explicitly tell it to do so. +Untracked basically means that Git sees a file you didn't have in the previous snapshot (commit), and which hasn't yet been staged; Git won't start including it in your commit snapshots until you explicitly tell it to do so. It does this so you don't accidentally begin including generated binary files or other files that you did not mean to include. You do want to start including `README`, so let's start tracking the file. From f806e2e4924fbadab112e079adaa93e237793442 Mon Sep 17 00:00:00 2001 From: jliljekrantz Date: Wed, 7 Jul 2021 07:31:33 +0200 Subject: [PATCH 282/549] Correct spelling error --- book/04-git-server/sections/gitlab.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index ae2edc3a..51cfeb3e 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -34,7 +34,7 @@ image::images/gitlab-menu.png[The “Admin area” item in the GitLab menu] ===== Users -Everybody using your GitLab server must have an user account. +Everybody using your GitLab server must have a user account. User accounts are quite simple, they mainly contain personal information attached to login data. Each user account has a *namespace*, which is a logical grouping of projects that belong to that user. If the user +jane+ had a project named +project+, that project's url would be `http://server/jane/project`. From d68fc10ff467f37a1bcc9d9bafc33643b0db4a36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jul 2021 18:01:42 +0000 Subject: [PATCH 283/549] Update rake requirement from 13.0.3 to 13.0.6 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.0.3...v13.0.6) --- updated-dependencies: - dependency-name: rake dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index f93d4e45..0e0d5471 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rake', '13.0.3' +gem 'rake', '13.0.6' gem 'asciidoctor', '2.0.15' gem 'json', '2.5.1' From da5130a12ed5570c1fcbb411ef2b07e573a863a3 Mon Sep 17 00:00:00 2001 From: Patrice Krakow Date: Tue, 13 Jul 2021 15:29:24 +0200 Subject: [PATCH 284/549] Update book/A-git-in-other-environments/sections/bash.asc Co-authored-by: Ben Straub --- book/A-git-in-other-environments/sections/bash.asc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index aa8392c7..629d2945 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -4,11 +4,9 @@ If you're a Bash user, you can tap into some of your shell's features to make your experience with Git a lot friendlier. Git actually ships with plugins for several shells, but it's not turned on by default. -First, you need to get a copy of the `contrib/completion/git-completion.bash` file out of the Git source code. -Make sure to get it from the version of the source code that corresponds to the version of Git your are using. -You can find the version of Git you are using with the command `git version`. -You can then select the corresponding tag on the Git source code, using `git checkout tags/vX.Y.Z`, where `vX.Y.Z` corresponds to the version of Git you are using. -Copy it somewhere handy, like your home directory, and add this to your `.bashrc`: +First, you need to get a copy of the completions file from the source code of the Git release you're using. +Check your version by typing `git version`, then use `git checkout tags/vX.Y.Z`, where `vX.Y.Z` corresponds to the version of Git you are using. +Copy the `contrib/completion/git-completion.bash` file somewhere handy, like your home directory, and add this to your `.bashrc`: [source,console] ---- From 54e7f1542dc798d6d899c5d8e2577efd0cf2806c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 15 Jul 2021 20:28:54 +0200 Subject: [PATCH 285/549] Migrate templates to forms --- .github/ISSUE_TEMPLATE/bug_report.md | 59 --------- .github/ISSUE_TEMPLATE/bug_report.yml | 134 ++++++++++++++++++++ .github/ISSUE_TEMPLATE/enhancement_idea.md | 15 --- .github/ISSUE_TEMPLATE/enhancement_idea.yml | 34 +++++ 4 files changed, 168 insertions(+), 74 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/enhancement_idea.md create mode 100644 .github/ISSUE_TEMPLATE/enhancement_idea.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index aeae6117..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "" -labels: "bug" -assignees: "" ---- - - - - - - - - -**Which version of the book is affected?** - - - -**Describe the bug:** - - -**Steps to reproduce:** - - - - - - -**Expected behavior:** - - -**Screenshots:** - - -**Additional context:** - - - -**Desktop:** - - -- Operating system: -- Browser/application: -- Browser/application version: - -**Smartphone:** - - -- Device: -- OS: -- Browser/application: -- Browser/application version: - -**E-book reader:** - - -- Device: -- Software Update: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..fe419300 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,134 @@ +name: Bug report +description: Create a report to help us improve +labels: ["bug"] +body: + - type: checkboxes + attributes: + label: There's no existing/similar bug report. + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + validations: + required: true + + - type: checkboxes + attributes: + label: This report is about a single actionable bug. + description: Please create one issue per bug, split up your bug reports if needed. + options: + - label: I'm reporting a single actionable bug + validations: + required: true + + - type: checkboxes + attributes: + label: This report is about the ProGit book, version 2, English language. + description: Bug reports about translations or the first version of the book are not accepted. + options: + - label: This bug is not about a translation or old version + validations: + required: true + + - type: checkboxes + attributes: + label: Bug covers book website/pdf + description: This bug is about the book as found on the [website](https://www.git-scm.com/book/en/v2) or the PDF. + options: + - label: I confirm the bug is about the book as found on the website/pdf + validations: + required: false + + - type: checkboxes + attributes: + label: Problem is present in the Pro Git book on the website? + description: If you found an issue in the pdf/epub/mobi files, you've checked if the problem is also present in the Pro Git book on the [website](https://www.git-scm.com/book/en/v2). + options: + - label: This bug also affects the Pro Git book as published on the website. + validations: + required: false + + - type: dropdown + attributes: + label: Which version of the book is affected? + description: | + It's important for us to know if the problem is in the source or in the tooling that creates the pdf/epub/mobi files. + Therefore, please select which versions are affected. + options: + - "Source files" + - "Tooling" + - "Source files and tooling" + - "I don't know" + validations: + required: true + + - type: textarea + attributes: + label: "Describe the bug:" + description: A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + attributes: + label: "Steps to reproduce:" + description: Please write the steps needed to reproduce the bug here. + placeholder: Provide a ordered list of steps to reproduce. + value: | + 1. Go to '...' + 2. Click on '...' + 3. 'Scroll down to '...' + 4. See error + validations: + required: true + + - type: textarea + attributes: + label: "Expected behavior:" + description: A clear and concise description of what you expected to happen. + placeholder: I expected ... to happen. + validations: + required: true + + - type: textarea + attributes: + label: "Screenshots:" + description: If applicable, add screenshots to help explain your problem. + placeholder: "Tip: you can drag your screenshot into this field, or you can copy/paste." + validations: + required: false + + - type: textarea + attributes: + label: "Additional context:" + description: | + Add any other context about the problem here. + You can also put references to similar bugs here. + placeholder: "Example: this bug also affect issues #1 and #2." + validations: + required: false + + - type: input + attributes: + label: Device + description: Tell us what kind of device you're using to access the content. + placeholder: mobile device / desktop / laptop / e-book reader + validations: + required: false + + - type: input + attributes: + label: Operating system + description: If the problem is with the book or the published files, we need to know what operating system you run on your device. + placeholder: | + Windows 10 Home Edition + validations: + required: false + + - type: input + attributes: + label: Browser/application + version + description: What browser/application are you using? We also need the version number of the browser/application. + placeholder: | + Google Chrome 91.0.4472.164 + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/enhancement_idea.md b/.github/ISSUE_TEMPLATE/enhancement_idea.md deleted file mode 100644 index c1a8a0b3..00000000 --- a/.github/ISSUE_TEMPLATE/enhancement_idea.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: Enhancement idea -about: Suggest an idea for the ProGit2 book or repository -title: "" -labels: "enhancement" -assignees: "" ---- - -**Give a general overview of your idea.** - -**Explain what problem you're trying to solve.** - -**Have you thought about other solutions?** - -**Do you want to help with this enhancement idea?** diff --git a/.github/ISSUE_TEMPLATE/enhancement_idea.yml b/.github/ISSUE_TEMPLATE/enhancement_idea.yml new file mode 100644 index 00000000..f0b19c19 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement_idea.yml @@ -0,0 +1,34 @@ +name: Enhancement idea +description: Suggest an idea for the ProGit2 book or repository +labels: ["enhancement"] +body: + - type: textarea + attributes: + label: General overview of your idea. + description: Give a general overview of your idea. + validations: + required: true + + - type: textarea + attributes: + label: What problem will this solve? + description: Explain what problem you're trying to solve. + validations: + required: true + + - type: textarea + attributes: + label: Have you thought about other solutions? + description: Describe any alternative solutions to the problem. + validations: + required: false + + - type: dropdown + attributes: + label: Do you want to help with this enhancement idea? + options: + - "Yes" + - "Maybe" + - "No" + validations: + required: true From af1e089228bcd3387ea9e2fc2a8f4f02741bd1a8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 16 Jul 2021 11:48:46 +0200 Subject: [PATCH 286/549] Allow blank issues for now --- .github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 77477ed6..e8a3cd74 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: Translation bug url: https://github.com/progit/progit2/blob/main/TRANSLATING.md From 68dfaeef078d4da433eee5b6d998bad0f4f78c81 Mon Sep 17 00:00:00 2001 From: Daniel Knittl-Frank Date: Tue, 20 Jul 2021 19:28:00 +0200 Subject: [PATCH 287/549] Point readers to Libera Chat IRC The #git channel on Freenode does not have an active user base anymore. Match the recommended IRC network of . --- book/01-introduction/sections/help.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index 1a10a306..5c4392df 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -18,7 +18,7 @@ $ git help config ---- These commands are nice because you can access them anywhere, even offline. -If the manpages and this book aren't enough and you need in-person help, you can try the `#git` or `#github` channel on the Freenode IRC server, which can be found at https://freenode.net[]. +If the manpages and this book aren't enough and you need in-person help, you can try the `#git`, `#github`, or `#gitlab` channels on the Libera Chat IRC server, which can be found at https://libera.chat/[]. These channels are regularly filled with hundreds of people who are all very knowledgeable about Git and are often willing to help.(((IRC))) In addition, if you don't need the full-blown manpage help, but just need a quick refresher on the available options for a Git command, you can ask for the more concise "`help`" output with the `-h` option, as in: From 84e96499b5e140f3e8100b7f18d58f2b55f6d6b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 18:01:11 +0000 Subject: [PATCH 288/549] Update epubcheck-ruby requirement from 4.2.5.0 to 4.2.6.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Release notes](https://github.com/takahashim/epubcheck-ruby/releases) - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v4.2.5.0...v4.2.6.0) --- updated-dependencies: - dependency-name: epubcheck-ruby dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0e0d5471..16727aaf 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,6 @@ gem 'asciidoctor-pdf', '1.6.0' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '4.2.5.0' +gem 'epubcheck-ruby', '4.2.6.0' gem 'html-proofer', '3.19.2' gem 'kindlegen', '3.1.1' From affff69b5d64b1ff1aa6c1f4f14bc676f3007b5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Aug 2021 18:01:40 +0000 Subject: [PATCH 289/549] Update asciidoctor requirement from 2.0.15 to 2.0.16 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.15...v2.0.16) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 16727aaf..197961cf 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' -gem 'asciidoctor', '2.0.15' +gem 'asciidoctor', '2.0.16' gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' From 9dcf039f533207fa910c6fc72a0c62a9262c1f75 Mon Sep 17 00:00:00 2001 From: Artem Leshchev Date: Mon, 9 Aug 2021 20:04:36 +0300 Subject: [PATCH 290/549] Fix quotes in "Rewriting history" section This is the only place in the book where this type of quotes were used. Also, grave in the Noto Serif font included with EPUB version of book is combining, so this two words were rendered incorrectly. --- book/07-git-tools/sections/rewriting-history.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 95806d38..5e8d8d61 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -124,7 +124,7 @@ It will start at the commit you specify on the command line (`HEAD~3`) and repla It lists the oldest at the top, rather than the newest, because that's the first one it will replay. You need to edit the script so that it stops at the commit you want to edit. -To do so, change the word `pick' to the word `edit' for each of the commits you want the script to stop after. +To do so, change the word "`pick`" to the word "`edit`" for each of the commits you want the script to stop after. For example, to modify only the third commit message, you change the file to look like this: [source,console] From 40af1096e2f7c559c51e47cef92690f2d74c643c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 9 Aug 2021 19:51:01 +0200 Subject: [PATCH 291/549] Use proper required checkboxes syntax --- .github/ISSUE_TEMPLATE/bug_report.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index fe419300..6660cdf8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -8,8 +8,7 @@ body: description: Please search to see if an issue already exists for the bug you encountered. options: - label: I have searched the existing issues - validations: - required: true + required: true - type: checkboxes attributes: @@ -17,8 +16,7 @@ body: description: Please create one issue per bug, split up your bug reports if needed. options: - label: I'm reporting a single actionable bug - validations: - required: true + required: true - type: checkboxes attributes: @@ -26,8 +24,7 @@ body: description: Bug reports about translations or the first version of the book are not accepted. options: - label: This bug is not about a translation or old version - validations: - required: true + required: true - type: checkboxes attributes: From 0be43dd08a524b2dc668c6d557de67726cc351f4 Mon Sep 17 00:00:00 2001 From: Ed Flanagan Date: Wed, 11 Aug 2021 00:26:31 -0700 Subject: [PATCH 292/549] Add '--nofork' flag to vim example in Appendix C The -f/--nofork flag is suggested to be used "... when Vim is executed by a program that will wait for the edit session to finish...." However, this flag is used when Vim has the GUI version, effectively no-op'ing when non-GUI Vim. This mirrors the existing "--nofork" flag for the Windows `gvim` example. --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index db01461f..ba2ea1f1 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -66,7 +66,7 @@ Accompanying the configuration instructions in <>, |Textmate |`git config --global core.editor "mate -w"` |Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) |UltraEdit (Windows 64-bit) | `git config --global core.editor Uedit32` -|Vim |`git config --global core.editor "vim"` +|Vim |`git config --global core.editor "vim --nofork"` |Visual Studio Code |`git config --global core.editor "code --wait"` |VSCodium (Free/Libre Open Source Software Binaries of VSCode) | `git config --global core.editor "codium --wait"` |WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` From 647287db2b408a4259635e1c22d6ececb800e923 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 25 Aug 2021 11:31:43 +0200 Subject: [PATCH 293/549] Create SECURITY.md --- SECURITY.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..35d2e58e --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +## Reporting a security issue + +If you find any security issue or vulnerability, please email us at INSERT EMAIL HERE with your report. + +Do not open a issue on the `progit/progit2` repository or discuss the vulnerability in public. From 36f3bb5257bed9cfc2c577be4cdfeb7b8ad4f21e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 25 Aug 2021 21:16:03 +0200 Subject: [PATCH 294/549] Use ben's email adress --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 35d2e58e..95a3da23 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,5 @@ ## Reporting a security issue -If you find any security issue or vulnerability, please email us at INSERT EMAIL HERE with your report. +If you find any security issue or vulnerability, please email ben@straub.cc with your report. Do not open a issue on the `progit/progit2` repository or discuss the vulnerability in public. From 6e496b9b0bdeb8139ac4eed6e7d22e46b8aedcac Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 26 Aug 2021 14:43:34 +0000 Subject: [PATCH 295/549] Use same style as zsh documentation Both the zsh manpage, and the documentation at: https://zsh.sourceforge.io/Doc/Release/User-Contributions.html#Version-Control-Information which is linked in the progit book talk about single quoted '${vcs_info_msg_0_}' instead of trying to escape the \$ Their syntax is less confusing if anyone ends up searching for more information in the documentation. --- book/A-git-in-other-environments/sections/zsh.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 8c44533a..5395d262 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -28,8 +28,8 @@ autoload -Uz vcs_info precmd_vcs_info() { vcs_info } precmd_functions+=( precmd_vcs_info ) setopt prompt_subst -RPROMPT=\$vcs_info_msg_0_ -# PROMPT=\$vcs_info_msg_0_'%# ' +RPROMPT='${vcs_info_msg_0_}' +# PROMPT='${vcs_info_msg_0_}%# ' zstyle ':vcs_info:git:*' formats '%b' ---- From aacd15ee65fdbdd80a6df1162dd36d1121f27651 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 18:01:25 +0000 Subject: [PATCH 296/549] Update asciidoctor-pdf requirement from 1.6.0 to 1.6.1 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v1.6.0...v1.6.1) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 197961cf..b1ac7fbb 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.5.1' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '1.6.0' +gem 'asciidoctor-pdf', '1.6.1' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' From 6105167dcd2e642622fdc343c803fadb3d5705bc Mon Sep 17 00:00:00 2001 From: Matt Cooper Date: Tue, 5 Oct 2021 09:55:49 -0400 Subject: [PATCH 297/549] Modernize recommendation for credential store GCM for Windows (along with GCM for macOS/Linux) has been replaced with the cross-platform GCM Core. --- book/07-git-tools/sections/credentials.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 820e9356..82f66f33 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,9 +19,9 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, you can install a helper called "`Git Credential Manager for Windows.`" - This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can be found at https://github.com/Microsoft/Git-Credential-Manager-for-Windows[]. +* If you're using Windows, macOS, or Linux, you can install a helper called "`Git Credential Manager Core.`" + This uses platform-native data stores to control sensitive information. + It can be found at https://github.com/microsoft/Git-Credential-Manager-Core[]. You can choose one of these methods by setting a Git configuration value: From 5d1d0e49bad2dcad98bcc2f84f5809f839cadd0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Oct 2021 18:01:18 +0000 Subject: [PATCH 298/549] Update json requirement from 2.5.1 to 2.6.0 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Commits](https://github.com/flori/json/commits) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b1ac7fbb..b0287790 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' gem 'asciidoctor', '2.0.16' -gem 'json', '2.5.1' +gem 'json', '2.6.0' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' From 7375d4d1d3e609d9c9edf51351db9afb1b49f55c Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Fri, 15 Oct 2021 10:56:06 +0000 Subject: [PATCH 299/549] Add mailto: property to email address --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 95a3da23..f1ed9cb6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,5 @@ ## Reporting a security issue -If you find any security issue or vulnerability, please email ben@straub.cc with your report. +If you find any security issue or vulnerability, please email [ben@straub.cc](mailto:ben@straub.cc) with your report. Do not open a issue on the `progit/progit2` repository or discuss the vulnerability in public. From 9604a85f232d8f1a15cee305d7123e3224b549a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Oct 2021 18:01:56 +0000 Subject: [PATCH 300/549] Update json requirement from 2.6.0 to 2.6.1 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.6.0...v2.6.1) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b0287790..e6e09271 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' gem 'asciidoctor', '2.0.16' -gem 'json', '2.6.0' +gem 'json', '2.6.1' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' From 093d4f261f3ec12d7765bedf46ba498f5f286fdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Auerbach?= <12082310+jo3rn@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:06:25 +0100 Subject: [PATCH 301/549] Update message to be equal with later mentions "Modify repo.rb a bit" gets used later on in the log outputs for that commit --- book/10-git-internals/sections/maintenance.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index de4a30d8..e27f58be 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -68,7 +68,7 @@ First, let's review where your repository is at this point: [source,console] ---- $ git log --pretty=oneline -ab1afef80fac8e34258ff41fc1b867c702daa24b Modify repo a bit +ab1afef80fac8e34258ff41fc1b867c702daa24b Modify repo.rb a bit 484a59275031909e19aadb7c92262719cfcdf19a Create repo.rb 1a410efbd13591db07496601ebc7a059dd55cfe9 Third commit cac0cab538b970a37ea1e769cbbde608743bc96d Second commit From 180ac29850473c063b06036dae15ffea9654bdf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Dec 2021 18:01:43 +0000 Subject: [PATCH 302/549] Update html-proofer requirement from 3.19.2 to 3.19.3 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.19.2...v3.19.3) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e6e09271..fda906bc 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '3.19.2' +gem 'html-proofer', '3.19.3' gem 'kindlegen', '3.1.1' From de876cc0b1c4518b5df1dc5c07a43fdf78194f16 Mon Sep 17 00:00:00 2001 From: Mavaddat Javid Date: Mon, 17 Jan 2022 11:46:21 -0800 Subject: [PATCH 303/549] Update instructions for Windows GCM [Microsoft/Git-Credential-Manager-for-Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows) was archived on 2020 Sep 30 and it is no longer being maintained. > The cross-platform [Git Credential Manager Core (GCM Core)](https://aka.ms/gcmcore) is the official replacement. --- book/07-git-tools/sections/credentials.asc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 820e9356..d4a8557e 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,9 +19,8 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, you can install a helper called "`Git Credential Manager for Windows.`" - This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can be found at https://github.com/Microsoft/Git-Credential-Manager-for-Windows[]. +* If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/GitCredentialManager/git-credential-manager/releases/latest[the latest GCM] as a standalone service. + This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#windows[GCM Install Instructions] for more information. You can choose one of these methods by setting a Git configuration value: From 7648f3112caccc0752a9becb78f74cc1faf25450 Mon Sep 17 00:00:00 2001 From: Matt Cooper Date: Thu, 27 Jan 2022 09:33:01 -0500 Subject: [PATCH 304/549] update name/link --- book/07-git-tools/sections/credentials.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 82f66f33..f8782f2f 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,9 +19,9 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, macOS, or Linux, you can install a helper called "`Git Credential Manager Core.`" +* If you're using Windows, macOS, or Linux, you can install a helper called "`Git Credential Manager.`" This uses platform-native data stores to control sensitive information. - It can be found at https://github.com/microsoft/Git-Credential-Manager-Core[]. + It can be found at https://github.com/GitCredentialManager/git-credential-manager[]. You can choose one of these methods by setting a Git configuration value: From 147f57ef92b702b9e60cee2c2822bcf6e1273460 Mon Sep 17 00:00:00 2001 From: Matt Cooper Date: Fri, 28 Jan 2022 08:44:57 -0500 Subject: [PATCH 305/549] respond to an accessibility suggestion --- book/07-git-tools/sections/credentials.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index f8782f2f..cc849302 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,9 +19,8 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, macOS, or Linux, you can install a helper called "`Git Credential Manager.`" +* If you're using Windows, macOS, or Linux, you can install a helper called https://github.com/GitCredentialManager/git-credential-manager["`Git Credential Manager`"]. This uses platform-native data stores to control sensitive information. - It can be found at https://github.com/GitCredentialManager/git-credential-manager[]. You can choose one of these methods by setting a Git configuration value: From 2af8f742c69c8cfac44ce56e1b51701948be93bc Mon Sep 17 00:00:00 2001 From: noureddin Date: Sun, 6 Feb 2022 17:53:32 +0200 Subject: [PATCH 306/549] add id to h4. default branch name --- book/01-introduction/sections/first-time-setup.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 4f5e29eb..a68ad27b 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -84,6 +84,7 @@ You may find, if you don't setup your editor like this, you get into a really co An example on a Windows system may include a prematurely terminated Git operation during a Git initiated edit. ==== +[[_default_branch]] ==== Your default branch name By default Git will create a branch called _master_ when you create a new repository with `git init`. From 1b64de1eb4023847fe371289ec2ca58ede6902be Mon Sep 17 00:00:00 2001 From: noureddin Date: Sun, 6 Feb 2022 18:19:07 +0200 Subject: [PATCH 307/549] add note on that master is always the default A note that default branch name is likely different. A different branch name would be very confusing to a beginner, especially when the book asserts that the default is master. --- book/02-git-basics/sections/recording-changes.asc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index f863e1ee..568a431e 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -36,6 +36,15 @@ Finally, the command tells you which branch you're on and informs you that it ha For now, that branch is always `master`, which is the default; you won't worry about it here. <> will go over branches and references in detail. +[NOTE] +==== +GitHub changed the default branch name from `master` to `main` in mid-2020, and other Git hosts followed suit. +So you may find that the default branch name in some newly created repositories is `main` and not `master`. +In addition, the default branch name can be changed (as you have seen in <>), so you may see a different name for the default branch. + +However, Git itself still uses `master` as the default, so we will use it throughout the book. +==== + Let's say you add a new file to your project, a simple `README` file. If the file didn't exist before, and you run `git status`, you see your untracked file like so: From 6947123182671f68bbb1a4681823ac0908772590 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 18:15:00 +0000 Subject: [PATCH 308/549] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pr-build.yml | 2 +- .github/workflows/release-on-merge.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 7f86d60e..f9c12549 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -8,7 +8,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 25ae215b..83b19363 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -8,7 +8,7 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 From 380cfa2d378a05d26f3b0d95df0a710c2bb07717 Mon Sep 17 00:00:00 2001 From: OliverSieweke Date: Sun, 27 Mar 2022 19:47:52 +0200 Subject: [PATCH 309/549] Remove specific minimum version Rephrased the version note to merely recommend a recent 2 version without singling out a specific version. --- book/01-introduction/sections/installing.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index bd509397..21ac044a 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -6,9 +6,9 @@ You can either install it as a package or via another installer, or download the [NOTE] ==== -This book was written using Git version *2.8.0*. -Though most of the commands we use should work even in ancient versions of Git, some of them might not or might act slightly differently if you're using an older version. -Since Git is quite excellent at preserving backwards compatibility, any version after 2.8 should work just fine. +This book was written using Git version 2. +Since Git is quite excellent at preserving backwards compatibility, any recent version should work just fine. +Though most of the commands we use should work even in ancient versions of Git, some of them might not or might act slightly differently. ==== ==== Installing on Linux From 51401930b947bf8fcd5248e1b26d8f752bd4e21e Mon Sep 17 00:00:00 2001 From: Rory Date: Fri, 1 Apr 2022 16:14:58 +0100 Subject: [PATCH 310/549] Fix add/rm subcommand code highlighting --- book/02-git-basics/sections/recording-changes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index f863e1ee..f40b80fb 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -617,4 +617,4 @@ $ git add README Git figures out that it's a rename implicitly, so it doesn't matter if you rename a file that way or with the `mv` command. The only real difference is that `git mv` is one command instead of three -- it's a convenience function. -More importantly, you can use any tool you like to rename a file, and address the add/rm later, before you commit. +More importantly, you can use any tool you like to rename a file, and address the `add`/`rm` later, before you commit. From ce02ecd0d1a6f55cfc77dfa0a52d711b8a6efff5 Mon Sep 17 00:00:00 2001 From: Kaartic Sivaraam Date: Tue, 3 May 2022 17:20:10 +0530 Subject: [PATCH 311/549] ch-10: avoid unnecessary mention update-index's --add The book clearly mentions that --add needs to be passed to 'git update-index' only when the file is new to the index. When the second version of 'test.txt' is added, the index know about the file already. So, avoid passing the '--add' when adding the second version of 'test.txt' --- book/10-git-internals/sections/objects.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index c04a695d..5660a0ca 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -202,7 +202,7 @@ You'll now create a new tree with the second version of `test.txt` and a new fil [source,console] ---- $ echo 'new file' > new.txt -$ git update-index --add --cacheinfo 100644 \ +$ git update-index --cacheinfo 100644 \ 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt $ git update-index --add new.txt ---- From 6096af39e79e3ca4b2e9cf63a5693fe1c4daee1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 May 2022 18:02:17 +0000 Subject: [PATCH 312/549] Update json requirement from 2.6.1 to 2.6.2 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.6.1...v2.6.2) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index fda906bc..e283dce8 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' gem 'asciidoctor', '2.0.16' -gem 'json', '2.6.1' +gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' From 525ddde5176f32e4ccfdf92976abd80b1b6629ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 May 2022 12:49:37 +0000 Subject: [PATCH 313/549] Update asciidoctor requirement from 2.0.16 to 2.0.17 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.16...v2.0.17) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e283dce8..349fac30 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' -gem 'asciidoctor', '2.0.16' +gem 'asciidoctor', '2.0.17' gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' From 54539b844e2c6cccca061a477dfc51404b4d34ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 May 2022 18:01:43 +0000 Subject: [PATCH 314/549] Update html-proofer requirement from 3.19.3 to 3.19.4 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.19.3...v3.19.4) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e283dce8..b698a31d 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.2.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '3.19.3' +gem 'html-proofer', '3.19.4' gem 'kindlegen', '3.1.1' From c200c2eb86908b908733f6c22a30c38e6a67bebe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 May 2022 14:49:25 +0000 Subject: [PATCH 315/549] Update pygments.rb requirement from 2.2.0 to 2.3.0 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.2.0...v2.3.0) --- updated-dependencies: - dependency-name: pygments.rb dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b698a31d..d0cecec8 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '1.6.1' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.2.0' +gem 'pygments.rb', '2.3.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' gem 'html-proofer', '3.19.4' From ec760b2b6db4cb6712f8ca54f0881cde54d2a1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solt=20Budav=C3=A1ri?= <3123434+solt87@users.noreply.github.com> Date: Wed, 25 May 2022 22:13:15 +0000 Subject: [PATCH 316/549] Add missing definite article. --- book/07-git-tools/sections/revision-selection.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index a32f0adf..d2aa1776 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -147,7 +147,7 @@ For instance, to see where your `master` branch was yesterday, you can type: $ git show master@{yesterday} ---- -That would show you where tip of your `master` branch was yesterday. +That would show you where the tip of your `master` branch was yesterday. This technique only works for data that's still in your reflog, so you can't use it to look for commits older than a few months. To see reflog information formatted like the `git log` output, you can run `git log -g`: From 65b4464cfd6305cac4c952f8a6ca8a5d72a243ff Mon Sep 17 00:00:00 2001 From: Philippe Blain Date: Wed, 8 Jun 2022 13:32:14 -0400 Subject: [PATCH 317/549] Submodules: update 'git submodule update --remote' behaviour Since f0a96e8d4c (submodule: fall back to remote's HEAD for missing remote..branch, 2020-06-24), which went into Git 2.28, 'git submodule upadte --remote' does not default to using the 'master' branch of the remote repository, but rather the remote repository's HEAD branch. Tweak the wording to reflect this behaviour change. --- book/07-git-tools/sections/submodules.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index ea22f995..bf313560 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -262,7 +262,7 @@ From https://github.com/chaconinc/DbConnector Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644' ---- -This command will by default assume that you want to update the checkout to the `master` branch of the submodule repository. +This command will by default assume that you want to update the checkout to the default branch of the remote submodule repository (the one pointed to by `HEAD` on the remote). You can, however, set this to something different if you want. For example, if you want to have the DbConnector submodule track that repository's ``stable'' branch, you can set it in either your `.gitmodules` file (so everyone else also tracks it), or just in your local `.git/config` file. Let's set it in the `.gitmodules` file: From 827ef106d788abc4899cb6baf646686a3c42ef85 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 12 Jun 2022 15:10:13 +0300 Subject: [PATCH 318/549] Fix typo in console example --- book/03-git-branching/sections/branch-management.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 5dcad611..45db820b 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -153,7 +153,7 @@ Now we end up with the following state: [source,console] ---- -git branch --all +$ git branch --all * main remotes/origin/HEAD -> origin/master remotes/origin/main From ccb045aa00eaefa1390feabd96a3e636eb2611d8 Mon Sep 17 00:00:00 2001 From: Mitsuru Kariya Date: Thu, 16 Jun 2022 02:56:05 +0900 Subject: [PATCH 319/549] Fix user.signingkey example Since the value of user.signingkey is passed unchanged to gpg's --local-user parameter, the fingerprint needs to be suffixed with an exclamation mark (!). If a fingerprint is specified without an exclamation mark, it is simply ignored. --- book/07-git-tools/sections/signing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index 57292adb..3c668a8b 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -29,7 +29,7 @@ Once you have a private key to sign with, you can configure Git to use it for si [source,console] ---- -$ git config --global user.signingkey 0A46826A +$ git config --global user.signingkey 0A46826A! ---- Now Git will use your key by default to sign tags and commits if you want. From 1619cd7e9edacd596e4fb94bcf161277f7e45801 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Sat, 16 Jul 2022 18:15:09 +0100 Subject: [PATCH 320/549] Remove unnecessary dig at MS Word --- book/08-customizing-git/sections/attributes.asc | 1 - 1 file changed, 1 deletion(-) diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 2c3000a2..378fb99c 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -37,7 +37,6 @@ You can also use the Git attributes functionality to effectively diff binary fil You do this by telling Git how to convert your binary data to a text format that can be compared via the normal diff. First, you'll use this technique to solve one of the most annoying problems known to humanity: version-controlling Microsoft Word documents. -Everyone knows that Word is the most horrific editor around, but oddly, everyone still uses it. If you want to version-control Word documents, you can stick them in a Git repository and commit every once in a while; but what good does that do? If you run `git diff` normally, you only see something like this: From e389976b68a18684c4d1a755c869360a0414ad4a Mon Sep 17 00:00:00 2001 From: Alex Povel Date: Thu, 14 Jul 2022 15:57:19 +0200 Subject: [PATCH 321/549] Use unconstrained formatting pairs for possessive monospace See also: https://docs.asciidoctor.org/asciidoc/latest/text/troubleshoot-unconstrained-formatting/#unconstrained-edge-cases https://docs.asciidoctor.org/asciidoc/latest/text/quotation-marks-and-apostrophes/#possessive-monospace https://docs.asciidoctor.org/asciidoc/latest/text/#unconstrained Fixes #1644 --- book/08-customizing-git/sections/attributes.asc | 2 +- book/B-embedding-git/sections/libgit2.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 2c3000a2..6d58ba03 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -298,7 +298,7 @@ Now, when you run `git archive` to create a tarball of your project, that direct ===== `export-subst` -When exporting files for deployment you can apply `git log`'s formatting and keyword-expansion processing to selected portions of files marked with the `export-subst` attribute. +When exporting files for deployment you can apply ``git log```'s formatting and keyword-expansion processing to selected portions of files marked with the ``export-subst`` attribute. For instance, if you want to include a file named `LAST_COMMIT` in your project, and have metadata about the last commit automatically injected into it when `git archive` runs, you can for example set up your `.gitattributes` and `LAST_COMMIT` files like this: diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 9edca885..6b6c60ea 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -172,7 +172,7 @@ int git_odb_backend_mine(git_odb_backend **backend_out, /*…*/) } ---- -The subtlest constraint here is that `my_backend_struct`'s first member must be a `git_odb_backend` structure; this ensures that the memory layout is what the Libgit2 code expects it to be. +The subtlest constraint here is that ``my_backend_struct```'s first member must be a ``git_odb_backend`` structure; this ensures that the memory layout is what the Libgit2 code expects it to be. The rest of it is arbitrary; this structure can be as large or small as you need it to be. The initialization function allocates some memory for the structure, sets up the custom context, and then fills in the members of the `parent` structure that it supports. From 2d6cd78b5903e009c2a16aec4113d8b9feebc0fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Solt=20Budav=C3=A1ri?= <3123434+solt87@users.noreply.github.com> Date: Sun, 17 Jul 2022 12:04:08 +0000 Subject: [PATCH 322/549] Mark up "input" as in-line code When mentioning the `core.autocrlf` value `true`, the text marks it up as in-line code. This patch applies the same markup to the `input` value of the same setting. --- book/08-customizing-git/sections/config.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 2c5e7356..e3158059 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -402,7 +402,7 @@ $ git config --global core.autocrlf true ---- If you're on a Linux or macOS system that uses LF line endings, then you don't want Git to automatically convert them when you check out files; however, if a file with CRLF endings accidentally gets introduced, then you may want Git to fix it. -You can tell Git to convert CRLF to LF on commit but not the other way around by setting `core.autocrlf` to input: +You can tell Git to convert CRLF to LF on commit but not the other way around by setting `core.autocrlf` to `input`: [source,console] ---- From d9d0b4f96dc85f3e39bf0ec56e20711358ee24f4 Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sun, 17 Oct 2021 21:05:04 +0300 Subject: [PATCH 323/549] Fix minor issues --- book/04-git-server/sections/hosted.asc | 2 +- book/06-github/sections/3-maintaining.asc | 2 +- book/07-git-tools/sections/credentials.asc | 2 +- book/07-git-tools/sections/submodules.asc | 10 +++++----- book/07-git-tools/sections/subtree-merges.asc | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index c3ca6bc1..b70204ea 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -2,7 +2,7 @@ If you don't want to go through all of the work involved in setting up your own Git server, you have several options for hosting your Git projects on an external dedicated hosting site. Doing so offers a number of advantages: a hosting site is generally quick to set up and easy to start projects on, and no server maintenance or monitoring is involved. -Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code – it's generally easier for the open source community to find and help you with. +Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code -- it's generally easier for the open source community to find and help you with. These days, you have a huge number of hosting options to choose from, each with different advantages and disadvantages. To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[]. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index a73a545c..354e27fc 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -21,7 +21,7 @@ This takes you to the "`new repository`" form: image::images/newrepoform.png[The “new repository” form] All you really have to do here is provide a project name; the rest of the fields are completely optional. -For now, just click the "`Create Repository`" button, and boom – you have a new repository on GitHub, named `/`. +For now, just click the "`Create Repository`" button, and boom -- you have a new repository on GitHub, named `/`. Since you have no code there yet, GitHub will show you instructions for how to create a brand-new Git repository, or connect an existing Git project. We won't belabor this here; if you need a refresher, check out <>. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index cc849302..99f7b6be 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -4,7 +4,7 @@ (((credentials))) (((git commands, credential))) If you use the SSH transport for connecting to remotes, it's possible for you to have a key without a passphrase, which allows you to securely transfer data without typing in your username and password. -However, this isn't possible with the HTTP protocols – every connection needs a username and password. +However, this isn't possible with the HTTP protocols -- every connection needs a username and password. This gets even harder for systems with two-factor authentication, where the token you use for a password is randomly generated and unpronounceable. Fortunately, Git has a credentials system that can help with this. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 0d034d64..8fd0ab6e 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -415,7 +415,7 @@ Submodules changed but not updated: no changes added to commit (use "git add" and/or "git commit -a") ---- -By default, the `git pull` command recursively fetches submodules changes, as we can see in the output of the first command above. +By default, the `git pull` command recursively fetches submodules changes, as we can see in the output of the first command above. However, it does not *update* the submodules. This is shown by the output of the `git status` command, which shows the submodule is "`modified`", and has "`new commits`". What's more, the brackets showing the new commits point left (<), indicating that these commits are recorded in MainProject but are not present in the local DbConnector checkout. @@ -500,7 +500,7 @@ Submodule path 'DbConnector': merged in '92c7337b30ef9e0893e758dac2459d07362ab5e ---- If we go into the DbConnector directory, we have the new changes already merged into our local `stable` branch. -Now let's see what happens when we make our own local change to the library and someone else pushes another change upstream at the same time. +Now let's see what happens when we make our own local change to the library and someone else pushes another change to the upstream at the same time. [source,console] ---- @@ -608,7 +608,7 @@ to push them to a remote. As you can see, it also gives us some helpful advice on what we might want to do next. The simple option is to go into each submodule and manually push to the remotes to make sure they're externally available and then try this push again. -If you want the check behavior to happen for all pushes, you can make this behavior the default by doing `git config push.recurseSubmodules check`. +If you want the "`check`" behavior to happen for all pushes, you can make this behavior the default by doing `git config push.recurseSubmodules check`. The other option is to use the "`on-demand`" value, which will try to do this for you. @@ -973,7 +973,7 @@ Indeed, if you switch between branches that record the submodule at different co That is because the submodule state is by default not carried over when switching branches. This can be really confusing, so it's a good idea to always `git checkout --recurse-submodules` when your project has submodules. -For older Git versions that do not have the `--recurse-submodules` flag, after the checkout you can use `git submodule update --init --recursive` to put the submodules in the right state. +For older Git versions that do not have the `--recurse-submodules` flag, after the checkout you can use `git submodule update --init --recursive` to put the submodules in the right state. Luckily, you can tell Git (>=2.14) to always use the `--recurse-submodules` flag by setting the configuration option `submodule.recurse`: `git config submodule.recurse true`. As noted above, this will also make Git recurse into submodules for every command that has a `--recurse-submodules` option (except `git clone`). @@ -1008,7 +1008,7 @@ Checking connectivity... done. ---- Now suppose you did that in a branch. -If you try to switch back to a branch where those files are still in the actual tree rather than a submodule – you get this error: +If you try to switch back to a branch where those files are still in the actual tree rather than a submodule -- you get this error: [source,console] ---- diff --git a/book/07-git-tools/sections/subtree-merges.asc b/book/07-git-tools/sections/subtree-merges.asc index 2659ec54..24bfa3ae 100644 --- a/book/07-git-tools/sections/subtree-merges.asc +++ b/book/07-git-tools/sections/subtree-merges.asc @@ -57,7 +57,7 @@ We just switched back to your `master` branch, and we pull the `rack_branch` bra $ git read-tree --prefix=rack/ -u rack_branch ---- -When we commit, it looks like we have all the Rack files under that subdirectory – as though we copied them in from a tarball. +When we commit, it looks like we have all the Rack files under that subdirectory -- as though we copied them in from a tarball. What gets interesting is that we can fairly easily merge changes from one of the branches to the other. So, if the Rack project updates, we can pull in upstream changes by switching to that branch and pulling: @@ -80,14 +80,14 @@ Automatic merge went well; stopped before committing as requested ---- All the changes from the Rack project are merged in and ready to be committed locally. -You can also do the opposite – make changes in the `rack` subdirectory of your `master` branch and then merge them into your `rack_branch` branch later to submit them to the maintainers or push them upstream. +You can also do the opposite -- make changes in the `rack` subdirectory of your `master` branch and then merge them into your `rack_branch` branch later to submit them to the maintainers or push them upstream. This gives us a way to have a workflow somewhat similar to the submodule workflow without using submodules (which we will cover in <>). We can keep branches with other related projects in our repository and subtree merge them into our project occasionally. It is nice in some ways, for example all the code is committed to a single place. However, it has other drawbacks in that it's a bit more complex and easier to make mistakes in reintegrating changes or accidentally pushing a branch into an unrelated repository. -Another slightly weird thing is that to get a diff between what you have in your `rack` subdirectory and the code in your `rack_branch` branch – to see if you need to merge them – you can't use the normal `diff` command. +Another slightly weird thing is that to get a diff between what you have in your `rack` subdirectory and the code in your `rack_branch` branch -- to see if you need to merge them -- you can't use the normal `diff` command. Instead, you must run `git diff-tree` with the branch you want to compare to: [source,console] From d6b8aabf409b05ea9bf791a549633597c14f67c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Aug 2022 18:02:16 +0000 Subject: [PATCH 324/549] Update html-proofer requirement from 3.19.4 to 4.3.2 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v3.19.4...v4.3.2) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index cbc32771..ed6f5351 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '3.19.4' +gem 'html-proofer', '4.3.2' gem 'kindlegen', '3.1.1' From 8de1de71592b5f476fb843336d0c31a01ed4296c Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 5 Aug 2022 13:05:54 -0700 Subject: [PATCH 325/549] Fix htmlproofer invocation --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index d32493c3..61aa55a2 100644 --- a/Rakefile +++ b/Rakefile @@ -98,7 +98,7 @@ namespace :book do task :check => [:build_html, :build_epub] do puts 'Checking generated books' - sh "htmlproofer --check-html progit.html" + sh "htmlproofer progit.html" sh "epubcheck progit.epub" end From 0c338b79afc82d661b4a2b3cc57f0ced191a7fc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 18:01:28 +0000 Subject: [PATCH 326/549] Update html-proofer requirement from 4.3.2 to 4.4.0 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v4.3.2...v4.4.0) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ed6f5351..1ab37963 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '4.3.2' +gem 'html-proofer', '4.4.0' gem 'kindlegen', '3.1.1' From d9a34da2c2958cff87b66eebf6f3013ee940e054 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:02:55 +0000 Subject: [PATCH 327/549] Update asciidoctor-pdf requirement from 1.6.1 to 2.3.0 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v1.6.1...v2.3.0) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 1ab37963..11edede9 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '1.6.1' +gem 'asciidoctor-pdf', '2.3.0' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' From eb831663b241d765dc152b828472b52b122990e9 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 29 Aug 2022 10:17:18 +0200 Subject: [PATCH 328/549] Use caret shorthand to open links in new tab --- .../sections/about-version-control.asc | 2 +- book/01-introduction/sections/help.asc | 2 +- book/01-introduction/sections/installing.asc | 14 +++++++------- .../02-git-basics/sections/recording-changes.asc | 2 +- .../sections/generating-ssh-key.asc | 2 +- book/04-git-server/sections/gitlab.asc | 2 +- book/04-git-server/sections/hosted.asc | 2 +- book/04-git-server/sections/protocols.asc | 4 ++-- book/04-git-server/sections/smart-http.asc | 2 +- .../05-distributed-git/sections/contributing.asc | 4 ++-- .../sections/distributed-workflows.asc | 2 +- book/05-distributed-git/sections/maintaining.asc | 2 +- book/06-github/sections/1-setting-up-account.asc | 4 ++-- book/06-github/sections/2-contributing.asc | 4 ++-- book/06-github/sections/5-scripting.asc | 6 +++--- book/07-git-tools/sections/credentials.asc | 2 +- .../07-git-tools/sections/revision-selection.asc | 2 +- book/07-git-tools/sections/rewriting-history.asc | 4 ++-- book/08-customizing-git/sections/attributes.asc | 2 +- book/08-customizing-git/sections/config.asc | 4 ++-- .../sections/client-bzr.asc | 10 +++++----- .../09-git-and-other-scms/sections/client-hg.asc | 6 +++--- .../09-git-and-other-scms/sections/client-p4.asc | 6 +++--- .../sections/import-bzr.asc | 2 +- .../sections/import-svn.asc | 2 +- book/10-git-internals/sections/refs.asc | 2 +- .../sections/guis.asc | 6 +++--- .../sections/jetbrainsides.asc | 2 +- .../sections/powershell.asc | 14 +++++++------- .../sections/sublimetext.asc | 4 ++-- .../sections/visualstudio.asc | 1 - .../sections/visualstudiocode.asc | 4 ++-- .../A-git-in-other-environments/sections/zsh.asc | 6 +++--- book/B-embedding-git/sections/dulwich.asc | 4 ++-- book/B-embedding-git/sections/go-git.asc | 10 +++++----- book/B-embedding-git/sections/jgit.asc | 10 +++++----- book/B-embedding-git/sections/libgit2.asc | 16 ++++++++-------- 37 files changed, 86 insertions(+), 87 deletions(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 6970b8bc..573febdb 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -23,7 +23,7 @@ To deal with this issue, programmers long ago developed local VCSs that had a si image::images/local.png[Local version control diagram] One of the most popular VCS tools was a system called RCS, which is still distributed with many computers today. -https://www.gnu.org/software/rcs/[RCS] works by keeping patch sets (that is, the differences between files) in a special format on disk; it can then re-create what any file looked like at any point in time by adding up all the patches. +https://www.gnu.org/software/rcs/[RCS^] works by keeping patch sets (that is, the differences between files) in a special format on disk; it can then re-create what any file looked like at any point in time by adding up all the patches. ==== Centralized Version Control Systems diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index 5c4392df..e1fb4d7e 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -18,7 +18,7 @@ $ git help config ---- These commands are nice because you can access them anywhere, even offline. -If the manpages and this book aren't enough and you need in-person help, you can try the `#git`, `#github`, or `#gitlab` channels on the Libera Chat IRC server, which can be found at https://libera.chat/[]. +If the manpages and this book aren't enough and you need in-person help, you can try the `#git`, `#github`, or `#gitlab` channels on the Libera Chat IRC server, which can be found at https://libera.chat/[^]. These channels are regularly filled with hundreds of people who are all very knowledgeable about Git and are often willing to help.(((IRC))) In addition, if you don't need the full-blown manpage help, but just need a quick refresher on the available options for a Git command, you can ask for the more concise "`help`" output with the `-h` option, as in: diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index bd509397..8fd88cc7 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -29,7 +29,7 @@ If you're on a Debian-based distribution, such as Ubuntu, try `apt`: $ sudo apt install git-all ---- -For more options, there are instructions for installing on several different Unix distributions on the Git website, at https://git-scm.com/download/linux[]. +For more options, there are instructions for installing on several different Unix distributions on the Git website, at https://git-scm.com/download/linux[^]. ==== Installing on macOS @@ -46,7 +46,7 @@ $ git --version If you don't have it installed already, it will prompt you to install it. If you want a more up to date version, you can also install it via a binary installer. -A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[]. +A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[^]. .Git macOS Installer image::images/git-osx-installer.png[Git macOS installer] @@ -55,10 +55,10 @@ image::images/git-osx-installer.png[Git macOS installer] There are also a few ways to install Git on Windows.(((Windows, installing))) The most official build is available for download on the Git website. -Just go to https://git-scm.com/download/win[] and the download will start automatically. -Note that this is a project called Git for Windows, which is separate from Git itself; for more information on it, go to https://gitforwindows.org[]. +Just go to https://git-scm.com/download/win[^] and the download will start automatically. +Note that this is a project called Git for Windows, which is separate from Git itself; for more information on it, go to https://gitforwindows.org[^]. -To get an automated installation you can use the https://chocolatey.org/packages/git[Git Chocolatey package]. +To get an automated installation you can use the https://chocolatey.org/packages/git[Git Chocolatey package^]. Note that the Chocolatey package is community maintained. ==== Installing from Source @@ -87,7 +87,7 @@ $ sudo apt-get install asciidoc xmlto docbook2x [NOTE] ==== -Users of RHEL and RHEL-derivatives like CentOS and Scientific Linux will have to https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F[enable the EPEL repository] to download the `docbook2X` package. +Users of RHEL and RHEL-derivatives like CentOS and Scientific Linux will have to https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F[enable the EPEL repository^] to download the `docbook2X` package. ==== If you're using a Debian-based distribution (Debian/Ubuntu/Ubuntu-derivatives), you also need the `install-info` package: @@ -114,7 +114,7 @@ $ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi due to binary name differences. When you have all the necessary dependencies, you can go ahead and grab the latest tagged release tarball from several places. -You can get it via the kernel.org site, at https://www.kernel.org/pub/software/scm/git[], or the mirror on the GitHub website, at https://github.com/git/git/releases[]. +You can get it via the kernel.org site, at https://www.kernel.org/pub/software/scm/git[], or the mirror on the GitHub website, at https://github.com/git/git/releases[^]. It's generally a little clearer what the latest version is on the GitHub page, but the kernel.org page also has release signatures if you want to verify your download. Then, compile and install: diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index f40b80fb..eb9c1339 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -254,7 +254,7 @@ doc/**/*.pdf [TIP] ==== -GitHub maintains a fairly comprehensive list of good `.gitignore` file examples for dozens of projects and languages at https://github.com/github/gitignore[] if you want a starting point for your project. +GitHub maintains a fairly comprehensive list of good `.gitignore` file examples for dozens of projects and languages at https://github.com/github/gitignore[^] if you want a starting point for your project. ==== [NOTE] diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index d3429b32..bb4e326c 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -54,4 +54,4 @@ mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local ---- -For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[]. +For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^]. diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 51cfeb3e..ae3c6cb2 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -19,7 +19,7 @@ The other installation options are: * From the source files. * Cloud provider such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. -For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme]. +For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme^]. ==== Administration diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index c3ca6bc1..96f55cc4 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -5,6 +5,6 @@ Doing so offers a number of advantages: a hosting site is generally quick to set Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code – it's generally easier for the open source community to find and help you with. These days, you have a huge number of hosting options to choose from, each with different advantages and disadvantages. -To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[]. +To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[^]. We'll cover using GitHub in detail in <>, as it is the largest Git host out there and you may need to interact with projects hosted on it in any case, but there are dozens more to choose from should you not want to set up your own Git server. diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index be0f46e6..58e370ca 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -7,7 +7,7 @@ Here we'll discuss what they are and in what basic circumstances you would want (((protocols, local))) The most basic is the _Local protocol_, in which the remote repository is in another directory on the same host. -This is often used if everyone on your team has access to a shared filesystem such as an https://en.wikipedia.org/wiki/Network_File_System[NFS] mount, or in the less likely case that everyone logs in to the same computer. +This is often used if everyone on your team has access to a shared filesystem such as an https://en.wikipedia.org/wiki/Network_File_System[NFS^] mount, or in the less likely case that everyone logs in to the same computer. The latter wouldn't be ideal, because all your code repository instances would reside on the same computer, making a catastrophic loss much more likely. If you have a shared mounted filesystem, then you can clone, push to, and pull from a local file-based repository. @@ -82,7 +82,7 @@ Instead of having to set up different URLs for these things, you can now use a s If you try to push and the repository requires authentication (which it normally should), the server can prompt for a username and password. The same goes for read access. -In fact, for services like GitHub, the URL you use to view the repository online (for example, https://github.com/schacon/simplegit[]) is the same URL you can use to clone and, if you have access, push over. +In fact, for services like GitHub, the URL you use to view the repository online (for example, https://github.com/schacon/simplegit[^]) is the same URL you can use to clone and, if you have access, push over. ===== Dumb HTTP diff --git a/book/04-git-server/sections/smart-http.asc b/book/04-git-server/sections/smart-http.asc index 3e6cc877..2d7b2bd0 100644 --- a/book/04-git-server/sections/smart-http.asc +++ b/book/04-git-server/sections/smart-http.asc @@ -68,5 +68,5 @@ You can do this with nearly any CGI-capable web server, so go with the one that [NOTE] ==== -For more information on configuring authentication in Apache, check out the Apache docs here: https://httpd.apache.org/docs/current/howto/auth.html[] +For more information on configuring authentication in Apache, check out the Apache docs here: https://httpd.apache.org/docs/current/howto/auth.html[^] ==== diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index c74d2af2..de739a16 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -60,7 +60,7 @@ Getting in the habit of creating quality commit messages makes using and collabo As a general rule, your messages should start with a single line that's no more than about 50 characters and that describes the changeset concisely, followed by a blank line, followed by a more detailed explanation. The Git project requires that the more detailed explanation include your motivation for the change and contrast its implementation with previous behavior -- this is a good guideline to follow. Write your commit message in the imperative: "Fix bug" and not "Fixed bug" or "Fixes bug." -Here is a template you can follow, which we've lightly adapted from one https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[originally written by Tim Pope]: +Here is a template you can follow, which we've lightly adapted from one https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[originally written by Tim Pope^]: [source,text] ---- @@ -154,7 +154,7 @@ To jessica@githost:simplegit.git The last line of the output above shows a useful return message from the push operation. The basic format is `.. fromref -> toref`, where `oldref` means the old reference, `newref` means the new reference, `fromref` is the name of the local reference being pushed, and `toref` is the name of the remote reference being updated. You'll see similar output like this below in the discussions, so having a basic idea of the meaning will help in understanding the various states of the repositories. -More details are available in the documentation for https://git-scm.com/docs/git-push[git-push]. +More details are available in the documentation for https://git-scm.com/docs/git-push[git-push^]. Continuing with this example, shortly afterwards, John makes some changes, commits them to his local repository, and tries to push them to the same server: diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 657692c3..b61289dc 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -92,7 +92,7 @@ Martin Fowler has made a guide "Patterns for Managing Source Code Branches". This guide covers all the common Git workflows, and explains how/when to use them. There's also a section comparing high and low integration frequencies. -https://martinfowler.com/articles/branching-patterns.html +https://martinfowler.com/articles/branching-patterns.html[^] ==== ==== Workflows Summary diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index b5762aaa..7a1eb973 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -364,7 +364,7 @@ When a topic branch has finally been merged into `master`, it's removed from the The Git project also has a `maint` branch that is forked off from the last release to provide backported patches in case a maintenance release is required. Thus, when you clone the Git repository, you have four branches that you can check out to evaluate the project in different stages of development, depending on how cutting edge you want to be or how you want to contribute; and the maintainer has a structured workflow to help them vet new contributions. The Git project's workflow is specialized. -To clearly understand this you could check out the https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide]. +To clearly understand this you could check out the https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide^]. [[_rebase_cherry_pick]] ===== Rebasing and Cherry-Picking Workflows diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 76a12a12..e85e0936 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -2,7 +2,7 @@ (((GitHub, user accounts))) The first thing you need to do is set up a free user account. -Simply visit https://github.com[], choose a user name that isn't already taken, provide an email address and a password, and click the big green "`Sign up for GitHub`" button. +Simply visit https://github.com[^], choose a user name that isn't already taken, provide an email address and a password, and click the big green "`Sign up for GitHub`" button. .The GitHub sign-up form image::images/signup.png[The GitHub sign-up form] @@ -16,7 +16,7 @@ Go ahead and do this; it's pretty important (as we'll see later). GitHub provides almost all of its functionality with free accounts, except some advanced features. GitHub's paid plans include advanced tools and features as well as increased limits for free services, but we won't be covering those in this book. -To get more information about available plans and their comparison, visit https://github.com/pricing[]. +To get more information about available plans and their comparison, visit https://github.com/pricing[^]. ==== Clicking the Octocat logo at the top-left of the screen will take you to your dashboard page. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 3f4a24cc..05ff420e 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -53,7 +53,7 @@ Let's walk through an example of proposing a change to an open source project ho ==== You can use the official *GitHub CLI* tool instead of the GitHub web interface for most things. The tool can be used on Windows, MacOS, and Linux systems. -Go to the https://cli.github.com/[GitHub CLI homepage] for installation instructions and the manual. +Go to the https://cli.github.com/[GitHub CLI homepage^] for installation instructions and the manual. ==== ===== Creating a Pull Request @@ -472,7 +472,7 @@ Not that this is incredibly useful, but it does add an element of fun and emotio There are actually quite a number of web services that make use of emoji characters these days. A great cheat sheet to reference to find emoji that expresses what you want to say can be found at: -https://www.webfx.com/tools/emoji-cheat-sheet/ +https://www.webfx.com/tools/emoji-cheat-sheet/[^] ==== ===== Images diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 3ab8516a..9a9f40bf 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -107,7 +107,7 @@ image::images/scripting-04-webhook-debug.png[Webhook debug] The other great feature of this is that you can redeliver any of the payloads to test your service easily. -For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://developer.github.com/webhooks/[]. +For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://developer.github.com/webhooks/[^]. ==== The GitHub API @@ -296,7 +296,7 @@ This is really useful if you're using this API for test results so you don't acc Though we've been doing nearly everything through `curl` and simple HTTP requests in these examples, several open-source libraries exist that make this API available in a more idiomatic way. At the time of this writing, the supported languages include Go, Objective-C, Ruby, and .NET. -Check out https://github.com/octokit[] for more information on these, as they handle much of the HTTP for you. +Check out https://github.com/octokit[^] for more information on these, as they handle much of the HTTP for you. Hopefully these tools can help you customize and modify GitHub to work better for your specific workflows. -For complete documentation on the entire API as well as guides for common tasks, check out https://developer.github.com[]. +For complete documentation on the entire API as well as guides for common tasks, check out https://developer.github.com[^]. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index cc849302..4f2f9fd4 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,7 +19,7 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, macOS, or Linux, you can install a helper called https://github.com/GitCredentialManager/git-credential-manager["`Git Credential Manager`"]. +* If you're using Windows, macOS, or Linux, you can install a helper called https://github.com/GitCredentialManager/git-credential-manager["`Git Credential Manager`"^]. This uses platform-native data stores to control sensitive information. You can choose one of these methods by setting a Git configuration value: diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index d2aa1776..62bd076e 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -84,7 +84,7 @@ Here's an example to give you an idea of what it would take to get a SHA-1 colli If all 6.5 billion humans on Earth were programming, and every second, each one was producing code that was the equivalent of the entire Linux kernel history (6.5 million Git objects) and pushing it into one enormous Git repository, it would take roughly 2 years until that repository contained enough objects to have a 50% probability of a single SHA-1 object collision. Thus, an organic SHA-1 collision is less likely than every member of your programming team being attacked and killed by wolves in unrelated incidents on the same night. -If you dedicate several thousands of dollars' worth of computing power to it, it is possible to synthesize two files with the same hash, as proven on https://shattered.io/[] in February 2017. +If you dedicate several thousands of dollars' worth of computing power to it, it is possible to synthesize two files with the same hash, as proven on https://shattered.io/[^] in February 2017. Git is moving towards using SHA256 as the default hashing algorithm, which is much more resilient to collision attacks, and has code in place to help mitigate this attack (although it cannot completely eliminate it). ==== diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 5e8d8d61..5ce98575 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -323,7 +323,7 @@ See <> for more information on the `reflog` c [NOTE] ==== Drew DeVault made a practical hands-on guide with exercises to learn how to use `git rebase`. -You can find it at: https://git-rebase.io/[] +You can find it at: https://git-rebase.io/[^] ==== ==== The Nuclear Option: filter-branch @@ -337,7 +337,7 @@ You'll learn a few of the common uses so you can get an idea of some of the thin ==== `git filter-branch` has many pitfalls, and is no longer the recommended way to rewrite history. Instead, consider using `git-filter-repo`, which is a Python script that does a better job for most applications where you would normally turn to `filter-branch`. -Its documentation and source code can be found at https://github.com/newren/git-filter-repo[]. +Its documentation and source code can be found at https://github.com/newren/git-filter-repo[^]. ==== [[_removing_file_every_commit]] diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index f9a061e2..cbcad363 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -62,7 +62,7 @@ What is the "`word`" filter? You have to set it up. Here you'll configure Git to use the `docx2txt` program to convert Word documents into readable text files, which it will then diff properly. -First, you'll need to install `docx2txt`; you can download it from https://sourceforge.net/projects/docx2txt[]. +First, you'll need to install `docx2txt`; you can download it from https://sourceforge.net/projects/docx2txt[^]. Follow the instructions in the `INSTALL` file to put it somewhere your shell can find it. Next, you'll write a wrapper script to convert output to the format Git expects. Create a file that's somewhere in your path called `docx2txt`, and add these contents: diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index e3158059..25e0bbf1 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -45,7 +45,7 @@ $ man git-config ---- This command lists all the available options in quite a bit of detail. -You can also find this reference material at https://git-scm.com/docs/git-config[]. +You can also find this reference material at https://git-scm.com/docs/git-config[^]. ===== `core.editor` @@ -248,7 +248,7 @@ We'll demonstrate setting up the Perforce Visual Merge Tool (P4Merge) to do your If you want to try this out, P4Merge works on all major platforms, so you should be able to do so. We'll use path names in the examples that work on macOS and Linux systems; for Windows, you'll have to change `/usr/local/bin` to an executable path in your environment. -To begin, https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools[download P4Merge from Perforce]. +To begin, https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools[download P4Merge from Perforce^]. Next, you'll set up external wrapper scripts to run your commands. We'll use the macOS path for the executable; in other systems, it will be where your `p4merge` binary is installed. Set up a merge wrapper script named `extMerge` that calls your binary with all the arguments provided: diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index be99b709..84115324 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -1,14 +1,14 @@ ==== Git and Bazaar -Among the DVCS, another famous one is http://bazaar.canonical.com[Bazaar]. -Bazaar is free and open source, and is part of the https://www.gnu.org[GNU Project]. +Among the DVCS, another famous one is http://bazaar.canonical.com[Bazaar^]. +Bazaar is free and open source, and is part of the https://www.gnu.org[GNU Project^]. It behaves very differently from Git. Sometimes, to do the same thing as with Git, you have to use a different keyword, and some keywords that are common don't have the same meaning. In particular, the branch management is very different and may cause confusion, especially when someone comes from Git's universe. Nevertheless, it is possible to work on a Bazaar repository from a Git one. There are many projects that allow you to use Git as a Bazaar client. -Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[]. +Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[^]. To install it, you just have to download the file git-remote-bzr in a folder contained in your `$PATH`: [source,console] @@ -85,11 +85,11 @@ The solution is to create the `.git/info/exclude` file either as a symbolic link We'll see later on how to solve this question. Bazaar uses the same model as Git to ignore files, but also has two features which don't have an equivalent into Git. -The complete description may be found in http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[the documentation]. +The complete description may be found in http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[the documentation^]. The two features are: 1. "!!" allows you to ignore certain file patterns even if they're specified using a "!" rule. -2. "RE:" at the beginning of a line allows you to specify a https://docs.python.org/3/library/re.html[Python regular expression] (Git only allows shell globs). +2. "RE:" at the beginning of a line allows you to specify a https://docs.python.org/3/library/re.html[Python regular expression^] (Git only allows shell globs). As a consequence, there are two different situations to consider: diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index a992e1b6..d6afbfd6 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -8,7 +8,7 @@ Apart from Git, the most popular is Mercurial, and the two are very similar in m The good news, if you prefer Git's client-side behavior but are working with a project whose source code is controlled with Mercurial, is that there's a way to use Git as a client for a Mercurial-hosted repository. Since the way Git talks to server repositories is through remotes, it should come as no surprise that this bridge is implemented as a remote helper. -The project's name is git-remote-hg, and it can be found at https://github.com/felipec/git-remote-hg[]. +The project's name is git-remote-hg, and it can be found at https://github.com/felipec/git-remote-hg[^]. ===== git-remote-hg @@ -31,10 +31,10 @@ If you have Python installed, this is as simple as: $ pip install mercurial ---- -If you don't have Python installed, visit https://www.python.org/[] and get it first. +If you don't have Python installed, visit https://www.python.org/[^] and get it first. The last thing you'll need is the Mercurial client. -Go to https://www.mercurial-scm.org/[] and install it if you haven't already. +Go to https://www.mercurial-scm.org/[^] and install it if you haven't already. Now you're ready to rock. All you need is a Mercurial repository you can push to. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index 2cd03461..d9e43506 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -15,12 +15,12 @@ The second is git-p4, a client-side bridge that lets you use Git as a Perforce c ===== Git Fusion (((Perforce, Git Fusion))) -Perforce provides a product called Git Fusion (available at http://www.perforce.com/git-fusion[]), which synchronizes a Perforce server with Git repositories on the server side. +Perforce provides a product called Git Fusion (available at http://www.perforce.com/git-fusion[^]), which synchronizes a Perforce server with Git repositories on the server side. ====== Setting Up For our examples, we'll be using the easiest installation method for Git Fusion, which is downloading a virtual machine that runs the Perforce daemon and Git Fusion. -You can get the virtual machine image from http://www.perforce.com/downloads/Perforce/20-User[], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). +You can get the virtual machine image from http://www.perforce.com/downloads/Perforce/20-User[^], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). Upon first starting the machine, it asks you to customize the password for three Linux users (`root`, `perforce`, and `git`), and provide an instance name, which can be used to distinguish this installation from others on the same network. When that has all completed, you'll see this: @@ -323,7 +323,7 @@ Git-p4 isn't as flexible or complete a solution as Git Fusion, but it does allow [NOTE] ====== You'll need the `p4` tool somewhere in your `PATH` to work with git-p4. -As of this writing, it is freely available at http://www.perforce.com/downloads/Perforce/20-User[]. +As of this writing, it is freely available at http://www.perforce.com/downloads/Perforce/20-User[^]. ====== ====== Setting Up diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index a214ad6f..d237fdb1 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -53,7 +53,7 @@ ImportError: No module named fastimport $ pip install fastimport ---- -If it is not available, you can download it at address https://pypi.python.org/pypi/fastimport/. +If it is not available, you can download it at address https://pypi.python.org/pypi/fastimport/[^]. In the second case (on Windows), `bzr-fastimport` is automatically installed with the standalone version and the default installation (let all the checkboxes checked). So in this case you have nothing to do. diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index df306b3f..d01fb95c 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -33,7 +33,7 @@ Then, redirect that output into your `users.txt` file so you can add the equival [NOTE] ==== If you're trying this on a Windows machine, this is the point where you'll run into trouble. -Microsoft have provided some good advice and samples at https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[]. +Microsoft have provided some good advice and samples at https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[^]. ==== You can provide this file to `git svn` to help it map the author data more accurately. diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index 8ad1524d..aa713b83 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -74,7 +74,7 @@ Usually the HEAD file is a symbolic reference to the branch you're currently on. By symbolic reference, we mean that unlike a normal reference, it contains a pointer to another reference. However in some rare cases the HEAD file may contain the SHA-1 value of a git object. -This happens when you checkout a tag, commit, or remote branch, which puts your repository in https://git-scm.com/docs/git-checkout#_detached_head["detached HEAD"] state. +This happens when you checkout a tag, commit, or remote branch, which puts your repository in https://git-scm.com/docs/git-checkout#_detached_head["detached HEAD"^] state. If you look at the file, you'll normally see something like this: diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index c4d06d1e..c73c12d6 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -96,7 +96,7 @@ While they're designed to highlight GitHub's service and recommended workflow, t ===== Installation -GitHub for Windows can be downloaded from https://windows.github.com[], and GitHub for macOS from https://mac.github.com[]. +GitHub for Windows can be downloaded from https://windows.github.com[^], and GitHub for macOS from https://mac.github.com[^]. When the applications are first run, they walk you through all the first-time Git setup, such as configuring your name and email address, and both set up sane defaults for many common configuration options, such as credential caches and CRLF behavior. Both are "`evergreen`" – updates are downloaded and installed in the background while the applications are open. @@ -148,5 +148,5 @@ However, if your workflow is different, or you want more control over how and wh ==== Other GUIs There are a number of other graphical Git clients, and they run the gamut from specialized, single-purpose tools all the way to apps that try to expose everything Git can do. -The official Git website has a curated list of the most popular clients at https://git-scm.com/downloads/guis[]. -A more comprehensive list is available on the Git wiki site, at https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces[]. +The official Git website has a curated list of the most popular clients at https://git-scm.com/downloads/guis[^]. +A more comprehensive list is available on the Git wiki site, at https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces[^]. diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index d6040ca7..94f881df 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -7,4 +7,4 @@ It provides a dedicated view in the IDE to work with Git and GitHub Pull Request image::images/jb.png[Version Control ToolWindow in JetBrains IDEs] The integration relies on the command-line git client, and requires one to be installed. -The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[]. +The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 66f7c3cc..bc4741b0 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -5,7 +5,7 @@ (((posh-git))) The legacy command-line terminal on Windows (`cmd.exe`) isn't really capable of a customized Git experience, but if you're using PowerShell, you're in luck. This also works if you're running PowerShell Core on Linux or macOS. -A package called posh-git (https://github.com/dahlbyk/posh-git[]) provides powerful tab-completion facilities, as well as an enhanced prompt to help you stay on top of your repository status. +A package called posh-git (https://github.com/dahlbyk/posh-git[^]) provides powerful tab-completion facilities, as well as an enhanced prompt to help you stay on top of your repository status. It looks like this: .PowerShell with Posh-git @@ -21,9 +21,9 @@ With `RemoteSigned`, only scripts having the `ZoneIdentifier` set to `Internet` If you're an administrator and want to set it for all users on that machine, use `-Scope LocalMachine`. If you're a normal user, without administrative rights, you can use `-Scope CurrentUser` to set it only for you. -More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[]. +More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[^]. -More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[]. +More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[^]. To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the next command: @@ -36,7 +36,7 @@ To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the ne If you have at least PowerShell 5 or PowerShell 4 with PackageManagement installed, you can use the package manager to install posh-git for you. -More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[]. +More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[^]. [source,powershell] ---- @@ -71,7 +71,7 @@ E. g. one for the console and a separate one for the ISE. ===== From Source -Just download a posh-git release from https://github.com/dahlbyk/posh-git/releases[], and uncompress it. +Just download a posh-git release from https://github.com/dahlbyk/posh-git/releases[^], and uncompress it. Then import the module using the full path to the `posh-git.psd1` file: [source,powershell] @@ -82,5 +82,5 @@ Then import the module using the full path to the `posh-git.psd1` file: This will add the proper line to your `profile.ps1` file, and posh-git will be active the next time you open PowerShell. -For a description of the Git status summary information displayed in the prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] -For more details on how to customize your posh-git prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[]. +For a description of the Git status summary information displayed in the prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[^] +For more details on how to customize your posh-git prompt see: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[^]. diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index eb774347..2c4b9bbd 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -9,6 +9,6 @@ The features are: * In the status bar, you can see the current git branch and how many modifications you have made. * All changes to a file are now visible via markers in the gutter. * You can use part of the Sublime Merge git client functionality from within Sublime Text. - This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[]. + This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[^]. -The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[]. +The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index bfd30785..fe5f03d2 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -16,4 +16,3 @@ The tooling supports the following Git functionality: * ... and more! Read the https://docs.microsoft.com/visualstudio/version-control[official documentation^] to learn more. - diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 1a53cb17..8abda833 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -16,6 +16,6 @@ The main features are: ** Resolve merge conflicts. ** View diffs. * With an extension, you can also handle GitHub Pull Requests: - https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[]. + https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[^]. -The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[]. +The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[^]. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 5395d262..1999ca8b 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -40,13 +40,13 @@ It looks a bit like this: .Customized `zsh` prompt image::images/zsh-prompt.png[Customized `zsh` prompt] -For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[]. +For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. -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. +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. `git-prompt.sh` is compatible with both Bash and Zsh. Zsh is powerful enough that there are entire frameworks dedicated to making it better. -One of them is called "oh-my-zsh", and it can be found at https://github.com/robbyrussell/oh-my-zsh[]. +One of them is called "oh-my-zsh", and it can be found at https://github.com/robbyrussell/oh-my-zsh[^]. oh-my-zsh's plugin system comes with powerful git tab-completion, and it has a variety of prompt "themes", many of which display version-control data. <> is just one example of what can be done with this system. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 9a238699..75f722d7 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -2,7 +2,7 @@ (((Dulwich)))(((Python))) There is also a pure-Python Git implementation - Dulwich. -The project is hosted under https://www.dulwich.io/ +The project is hosted under https://www.dulwich.io/[^]. It aims to provide an interface to git repositories (both local and remote) that doesn't call out to git directly but instead uses pure Python. It has an optional C extensions though, that significantly improve the performance. @@ -40,4 +40,4 @@ porcelain.log('.', max_entries=1) ==== Further Reading -The API documentation, tutorial, and many examples of how to do specific tasks with Dulwich are available on the official website https://www.dulwich.io[]. +The API documentation, tutorial, and many examples of how to do specific tasks with Dulwich are available on the official website https://www.dulwich.io[^]. diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index 3335802b..a477cf1b 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -5,7 +5,7 @@ In case you want to integrate Git into a service written in Golang, there also i This implementation does not have any native dependencies and thus is not prone to manual memory management errors. It is also transparent for the standard Golang performance analysis tooling like CPU, Memory profilers, race detector, etc. -go-git is focused on extensibility, compatibility and supports most of the plumbing APIs, which is documented at https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[]. +go-git is focused on extensibility, compatibility and supports most of the plumbing APIs, which is documented at https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md[^]. Here is a basic example of using Go APIs: @@ -51,12 +51,12 @@ r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ ---- Pluggable storage provides many interesting options. -For instance, https://github.com/go-git/go-git/tree/master/_examples/storage[] allows you to store references, objects, and configuration in an Aerospike database. +For instance, https://github.com/go-git/go-git/tree/master/_examples/storage[^] allows you to store references, objects, and configuration in an Aerospike database. Another feature is a flexible filesystem abstraction. -Using https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#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. +Using https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#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. -Another advanced use-case includes a fine-tunable HTTP client, such as the one found at https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[]. +Another advanced use-case includes a fine-tunable HTTP client, such as the one found at https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go[^]. [source, go] ---- @@ -80,4 +80,4 @@ r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ==== Further Reading A full treatment of go-git's capabilities is outside the scope of this book. -If you want more information on go-git, there's API documentation at https://pkg.go.dev/github.com/go-git/go-git/v5[], and a set of usage examples at https://github.com/go-git/go-git/tree/master/_examples[]. +If you want more information on go-git, there's API documentation at https://pkg.go.dev/github.com/go-git/go-git/v5[^], and a set of usage examples at https://github.com/go-git/go-git/tree/master/_examples[^]. diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index 9e416173..acebb6f2 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -3,7 +3,7 @@ (((jgit)))(((Java))) If you want to use Git from within a Java program, there is a fully featured Git library called JGit. JGit is a relatively full-featured implementation of Git written natively in Java, and is widely used in the Java community. -The JGit project is under the Eclipse umbrella, and its home can be found at https://www.eclipse.org/jgit/[]. +The JGit project is under the Eclipse umbrella, and its home can be found at https://www.eclipse.org/jgit/[^]. ==== Getting Set Up @@ -19,10 +19,10 @@ Probably the easiest is to use Maven – the integration is accomplished by addi ---- -The `version` will most likely have advanced by the time you read this; check https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit[] for updated repository information. +The `version` will most likely have advanced by the time you read this; check https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit[^] for updated repository information. Once this step is done, Maven will automatically acquire and use the JGit libraries that you'll need. -If you would rather manage the binary dependencies yourself, pre-built JGit binaries are available from https://www.eclipse.org/jgit/download[]. +If you would rather manage the binary dependencies yourself, pre-built JGit binaries are available from https://www.eclipse.org/jgit/download[^]. You can build them into your project by running a command like this: [source,console] @@ -155,6 +155,6 @@ Many other commands are available through the Git class, including but not limit This is only a small sampling of JGit's full capabilities. If you're interested and want to learn more, here's where to look for information and inspiration: -* The official JGit API documentation can be found at https://www.eclipse.org/jgit/documentation[]. +* The official JGit API documentation can be found at https://www.eclipse.org/jgit/documentation[^]. These are standard Javadoc, so your favorite JVM IDE will be able to install them locally, as well. -* The JGit Cookbook at https://github.com/centic9/jgit-cookbook[] has many examples of how to do specific tasks with JGit. +* The JGit Cookbook at https://github.com/centic9/jgit-cookbook[^] has many examples of how to do specific tasks with JGit. diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 6b6c60ea..2e006fdc 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -3,7 +3,7 @@ (((libgit2)))((("C"))) Another option at your disposal is to use Libgit2. Libgit2 is a dependency-free implementation of Git, with a focus on having a nice API for use within other programs. -You can find it at https://libgit2.org[]. +You can find it at https://libgit2.org[^]. First, let's take a look at what the C API looks like. Here's a whirlwind tour: @@ -54,7 +54,7 @@ From this sample, a couple of patterns have started to emerge: (((Ruby))) That last one means it isn't very probable that you'll be writing C when using Libgit2. Fortunately, there are a number of language-specific bindings available that make it fairly easy to work with Git repositories from your specific language and environment. -Let's take a look at the above example written using the Ruby bindings for Libgit2, which are named Rugged, and can be found at https://github.com/libgit2/rugged[]. +Let's take a look at the above example written using the Ruby bindings for Libgit2, which are named Rugged, and can be found at https://github.com/libgit2/rugged[^]. [source,ruby] ---- @@ -115,7 +115,7 @@ One example is pluggability: Libgit2 allows you to provide custom "`backends`" f Libgit2 allows custom backends for configuration, ref storage, and the object database, among other things. Let's take a look at how this works. -The code below is borrowed from the set of backend examples provided by the Libgit2 team (which can be found at https://github.com/libgit2/libgit2-backends[]). +The code below is borrowed from the set of backend examples provided by the Libgit2 team (which can be found at https://github.com/libgit2/libgit2-backends[^]). Here's how a custom backend for the object database is set up: [source,c] @@ -183,13 +183,13 @@ Take a look at the `include/git2/sys/odb_backend.h` file in the Libgit2 source f Libgit2 has bindings for many languages. Here we show a small example using a few of the more complete bindings packages as of this writing; libraries exist for many other languages, including C++, Go, Node.js, Erlang, and the JVM, all in various stages of maturity. -The official collection of bindings can be found by browsing the repositories at https://github.com/libgit2[]. +The official collection of bindings can be found by browsing the repositories at https://github.com/libgit2[^]. The code we'll write will return the commit message from the commit eventually pointed to by HEAD (sort of like `git log -1`). ===== LibGit2Sharp (((.NET)))(((C#)))(((Mono))) -If you're writing a .NET or Mono application, LibGit2Sharp (https://github.com/libgit2/libgit2sharp[]) is what you're looking for. +If you're writing a .NET or Mono application, LibGit2Sharp (https://github.com/libgit2/libgit2sharp[^]) is what you're looking for. The bindings are written in C#, and great care has been taken to wrap the raw Libgit2 calls with native-feeling CLR APIs. Here's what our example program looks like: @@ -204,7 +204,7 @@ For desktop Windows applications, there's even a NuGet package that will help yo (((Apple)))(((Objective-C)))(((Cocoa))) If your application is running on an Apple platform, you're likely using Objective-C as your implementation language. -Objective-Git (https://github.com/libgit2/objective-git[]) is the name of the Libgit2 bindings for that environment. +Objective-Git (https://github.com/libgit2/objective-git[^]) is the name of the Libgit2 bindings for that environment. The example program looks like this: [source,objc] @@ -219,7 +219,7 @@ Objective-git is fully interoperable with Swift, so don't fear if you've left Ob ===== pygit2 (((Python))) -The bindings for Libgit2 in Python are called Pygit2, and can be found at https://www.pygit2.org[]. +The bindings for Libgit2 in Python are called Pygit2, and can be found at https://www.pygit2.org[^]. Our example program: [source,python] @@ -233,5 +233,5 @@ pygit2.Repository("/path/to/repo") # open repository ==== Further Reading Of course, a full treatment of Libgit2's capabilities is outside the scope of this book. -If you want more information on Libgit2 itself, there's API documentation at https://libgit2.github.com/libgit2[], and a set of guides at https://libgit2.github.com/docs[]. +If you want more information on Libgit2 itself, there's API documentation at https://libgit2.github.com/libgit2[^], and a set of guides at https://libgit2.github.com/docs[^]. For the other bindings, check the bundled README and tests; there are often small tutorials and pointers to further reading there. From 0d07c901921eb47a73979b3cca10b2b92dadbb74 Mon Sep 17 00:00:00 2001 From: slavos1 Date: Fri, 9 Sep 2022 21:06:32 +1000 Subject: [PATCH 329/549] Fix missing contributors in GH Actions runs #1040 --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 61aa55a2..c32b9e3a 100644 --- a/Rakefile +++ b/Rakefile @@ -53,7 +53,7 @@ namespace :book do file 'book/contributors.txt' do puts 'Generating contributors list' sh "echo 'Contributors as of #{header_hash}:\n' > book/contributors.txt" - sh "git shortlog -s | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" + sh "git shortlog -s HEAD | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" end desc 'build HTML format' From 05675be96891dd40aacf5a955bba35f20b9a8c3d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Tue, 13 Sep 2022 13:58:36 -0400 Subject: [PATCH 330/549] Update remote-branches.asc typo fix. --- book/03-git-branching/sections/remote-branches.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 0701dbf9..6e6670d5 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -234,5 +234,5 @@ To https://github.com/schacon/simplegit - [deleted] serverfix ---- -Basically all this does is remove the pointer from the server. +Basically all this does is to remove the pointer from the server. The Git server will generally keep the data there for a while until a garbage collection runs, so if it was accidentally deleted, it's often easy to recover. From 5ffc265c3962aa25114b74d6e0dc6e7b014ade28 Mon Sep 17 00:00:00 2001 From: Mavaddat Javid Date: Wed, 14 Sep 2022 22:59:12 -0700 Subject: [PATCH 331/549] split line 23 into two --- book/07-git-tools/sections/credentials.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index d4a8557e..1ce19c79 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -20,7 +20,8 @@ Git has a few options provided in the box: * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. * If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/GitCredentialManager/git-credential-manager/releases/latest[the latest GCM] as a standalone service. - This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#windows[GCM Install Instructions] for more information. + This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. + It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#windows[GCM Install Instructions] for more information. You can choose one of these methods by setting a Git configuration value: From 0d7603ddb10de844485298f4b44d52453ab3a243 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 18:03:36 +0000 Subject: [PATCH 332/549] Update asciidoctor-pdf requirement from 2.3.0 to 2.3.2 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.0...v2.3.2) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 11edede9..7c029d37 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.0' +gem 'asciidoctor-pdf', '2.3.2' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' From 32915348ebd61189adf3238d96102984b529baa6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 18:02:49 +0000 Subject: [PATCH 333/549] Update html-proofer requirement from 4.4.0 to 4.4.1 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v4.4.0...v4.4.1) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7c029d37..0175f486 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '4.4.0' +gem 'html-proofer', '4.4.1' gem 'kindlegen', '3.1.1' From d575121bc0e9ccb121445738db61c98c47d03ea7 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Tue, 27 Sep 2022 13:28:58 +0200 Subject: [PATCH 334/549] Update snapshots.svg I had an issue using this graphic in a paper together with Latex and the SVG package. Because somehow the style="" did not work there. I looked into the deltas.svg file and updated this. Maybe it's useful for you, too. --- images/snapshots.svg | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/images/snapshots.svg b/images/snapshots.svg index f4af9c32..446fb751 100644 --- a/images/snapshots.svg +++ b/images/snapshots.svg @@ -18,25 +18,17 @@ - - - Version 1 - - - - Version 2 - - - - Version 3 - - - - Version 4 - - - - Version 5 + + + Version 1 + + Version 2 + + Version 3 + + Version 4 + + Version 5 From 70b01a6243900c8513e1c9304ff2fc75aac74ffe Mon Sep 17 00:00:00 2001 From: applecuckoo <113647417+applecuckoo@users.noreply.github.com> Date: Mon, 3 Oct 2022 17:59:48 +1300 Subject: [PATCH 335/549] Add CITATION.cff It's a CFF file, feel free to make any modifications. --- CITATION.cff | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..b311dcdd --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,29 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + +cff-version: 1.2.0 +title: Pro Git +message: >- + If you use this software, please cite it using the + metadata from this file. +type: software +authors: + - given-names: Scott + family-names: Chacon + email: schacon@gmail.com + - given-names: Ben + family-names: Straub + email: ben@straub.cc +identifiers: + - type: url + value: 'https://git-scm.com/book/en/v2' + description: Pro Git website +repository-code: 'https://github.com/progit/progit2' +url: 'https://git-scm.com/book/en/v2' +keywords: + - git + - book + - asciidoc + - pro-git +license: CC-BY-NC-SA-3.0 +version: '2' From c4bdd2af162291b47a2023f2df65bb5480951cb2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 18:02:03 +0000 Subject: [PATCH 336/549] Update asciidoctor requirement from 2.0.17 to 2.0.18 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.17...v2.0.18) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0175f486..12ce3a71 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' -gem 'asciidoctor', '2.0.17' +gem 'asciidoctor', '2.0.18' gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' From 09d29a07811b429c8cd5236814001a5f5e523e5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 18:03:52 +0000 Subject: [PATCH 337/549] Update asciidoctor-pdf requirement from 2.3.2 to 2.3.3 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.2...v2.3.3) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 12ce3a71..e72544de 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.2' +gem 'asciidoctor-pdf', '2.3.3' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' From c16233b46d32f3d4d3647be7109221113dc5b461 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 18:02:45 +0000 Subject: [PATCH 338/549] Update asciidoctor-pdf requirement from 2.3.3 to 2.3.4 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.3...v2.3.4) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e72544de..60c316aa 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.6.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.3' +gem 'asciidoctor-pdf', '2.3.4' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.0' From 6f029545fdb673fd747393b605b58732e3d97edc Mon Sep 17 00:00:00 2001 From: Richard Hoyle <638442+rahrah@users.noreply.github.com> Date: Fri, 25 Nov 2022 20:24:33 +0000 Subject: [PATCH 339/549] Fix clash with named anchor ID Rename the anchor ID [[_default_branch]] to [[_new_default_branch]], updating the reference to it. Fixes asciidoctor build warnings due to pre-existing [[_default_branch]] anchor ID of the same name. --- book/01-introduction/sections/first-time-setup.asc | 2 +- book/02-git-basics/sections/recording-changes.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index a68ad27b..f8913a26 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -84,7 +84,7 @@ You may find, if you don't setup your editor like this, you get into a really co An example on a Windows system may include a prematurely terminated Git operation during a Git initiated edit. ==== -[[_default_branch]] +[[_new_default_branch]] ==== Your default branch name By default Git will create a branch called _master_ when you create a new repository with `git init`. diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 53fa4cc7..f344bb8b 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -40,7 +40,7 @@ For now, that branch is always `master`, which is the default; you won't worry a ==== GitHub changed the default branch name from `master` to `main` in mid-2020, and other Git hosts followed suit. So you may find that the default branch name in some newly created repositories is `main` and not `master`. -In addition, the default branch name can be changed (as you have seen in <>), so you may see a different name for the default branch. +In addition, the default branch name can be changed (as you have seen in <>), so you may see a different name for the default branch. However, Git itself still uses `master` as the default, so we will use it throughout the book. ==== From c8850240ad4985b1adf84f262eae2a10f9c92d87 Mon Sep 17 00:00:00 2001 From: Miguel Bernabeu Date: Thu, 1 Dec 2022 23:23:18 +0100 Subject: [PATCH 340/549] Mention includes in configuration section When a user belongs to several organizations they may have different identities or settings for the repos belonging to each organization. Conditional include allow to apply those configuration settings to each group without defining them on each repo individually. A big problem with the feature is its discoverability. A brief mention in the configuration section to check out the details in the documentation can dramatically raise awareness. --- book/08-customizing-git/sections/config.asc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 25e0bbf1..2311dd91 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -47,6 +47,11 @@ $ man git-config This command lists all the available options in quite a bit of detail. You can also find this reference material at https://git-scm.com/docs/git-config[^]. +[NOTE] +==== +For advanced use cases you may want to look up "Conditional includes" in the documentation mentioned above. +==== + ===== `core.editor` ((($EDITOR)))((($VISUAL, see $EDITOR))) From 5f30c941b8e9ef03f7040c73fd4c007adc67495d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:00:36 +0000 Subject: [PATCH 341/549] Update json requirement from 2.6.2 to 2.6.3 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.6.2...v2.6.3) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 60c316aa..f33ef918 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' gem 'asciidoctor', '2.0.18' -gem 'json', '2.6.2' +gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' gem 'asciidoctor-epub3', '1.5.1' From cd94590d5aa0028e3141f9a60c29bea385ee0b46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:00:43 +0000 Subject: [PATCH 342/549] Update pygments.rb requirement from 2.3.0 to 2.3.1 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.3.0...v2.3.1) --- updated-dependencies: - dependency-name: pygments.rb dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 60c316aa..276b82c8 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '2.3.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.3.0' +gem 'pygments.rb', '2.3.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' gem 'html-proofer', '4.4.1' From f2b31a56e0707bd747fba7ac9b0fb71c4bcdd049 Mon Sep 17 00:00:00 2001 From: Marat Radchenko Date: Sun, 18 Dec 2022 22:32:42 +0300 Subject: [PATCH 343/549] Add FB2 output --- .github/workflows/release-on-merge.yml | 2 +- .gitignore | 1 + Gemfile | 1 + Rakefile | 16 +++++++++++++--- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 83b19363..ccff2b5e 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -35,4 +35,4 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ steps.compute-tag.outputs.tagname }} commit: main - artifacts: './progit.epub,./progit.mobi,./progit.pdf,./progit.html' + artifacts: './progit.epub,./progit.fb2.zip,./progit.mobi,./progit.pdf,./progit.html' diff --git a/.gitignore b/.gitignore index 424a30e5..aa9b3a0a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ progit.html progit.pdf progit.pdfmarks progit.epub +progit.fb2.zip progit-kf8.epub progit.mobi contributors.txt \ No newline at end of file diff --git a/Gemfile b/Gemfile index 99b02f2e..b4d9d1a1 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ gem 'asciidoctor', '2.0.18' gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' +gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '2.3.4' diff --git a/Rakefile b/Rakefile index c32b9e3a..6e99799f 100644 --- a/Rakefile +++ b/Rakefile @@ -31,7 +31,7 @@ namespace :book do end desc 'build basic book formats' - task :build => [:build_html, :build_epub, :build_mobi, :build_pdf] do + task :build => [:build_html, :build_epub, :build_fb2, :build_mobi, :build_pdf] do begin # Run check Rake::Task['book:check'].invoke @@ -44,7 +44,7 @@ namespace :book do end desc 'build basic book formats (for ci)' - task :ci => [:build_html, :build_epub, :build_mobi, :build_pdf] do + task :ci => [:build_html, :build_epub, :build_fb2, :build_mobi, :build_pdf] do # Run check, but don't ignore any errors Rake::Task['book:check'].invoke end @@ -76,6 +76,16 @@ namespace :book do end + desc 'build FB2 format' + task :build_fb2 => 'book/contributors.txt' do + check_contrib() + + puts 'Converting to FB2...' + sh "bundle exec asciidoctor-fb2 #{params} progit.asc" + puts ' -- FB2 output at progit.fb2.zip' + + end + desc 'build Mobi format' task :build_mobi => 'book/contributors.txt' do check_contrib() @@ -107,7 +117,7 @@ namespace :book do begin puts 'Removing generated files' - FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.mobi', 'progit.pdf'].each do |file| + FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.fb2', 'progit.mobi', 'progit.pdf'].each do |file| rm file # Rescue if file not found From bd456f13c70236d8c21f702aaa153e2545454389 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Thu, 29 Dec 2022 21:38:48 +0100 Subject: [PATCH 344/549] Fix typo --- .github/dependabot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8a7e6462..6adcdcdb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,13 +4,13 @@ updates: - package-ecosystem: "bundler" directory: "/" schedule: - interval: "daily" # Checks on Monday trough Friday. + interval: "daily" # Checks on Monday through Friday. # Maintain GitHub Action runners - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" # Checks on Monday trough Friday. + interval: "daily" # Checks on Monday through Friday. # Set default reviewer and labels reviewers: From 53e80b59350afd7b3005f13cbe23616f9504cb4d Mon Sep 17 00:00:00 2001 From: Junyeong Yim Date: Thu, 5 Jan 2023 00:19:55 +0900 Subject: [PATCH 345/549] Update changed links Detail ====== - Some links are changed - http://bazaar.canonical.com -> http://bazaar.canonical.com - https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F -> https://docs.fedoraproject.org/en-US/epel/#how_can_i_use_these_extra_packages --- book/01-introduction/sections/installing.asc | 2 +- book/09-git-and-other-scms/sections/client-bzr.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index ab8443ee..f6861594 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -87,7 +87,7 @@ $ sudo apt-get install asciidoc xmlto docbook2x [NOTE] ==== -Users of RHEL and RHEL-derivatives like CentOS and Scientific Linux will have to https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F[enable the EPEL repository^] to download the `docbook2X` package. +Users of RHEL and RHEL-derivatives like CentOS and Scientific Linux will have to https://docs.fedoraproject.org/en-US/epel/#how_can_i_use_these_extra_packages[enable the EPEL repository^] to download the `docbook2X` package. ==== If you're using a Debian-based distribution (Debian/Ubuntu/Ubuntu-derivatives), you also need the `install-info` package: diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index 84115324..19566f3b 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -1,6 +1,6 @@ ==== Git and Bazaar -Among the DVCS, another famous one is http://bazaar.canonical.com[Bazaar^]. +Among the DVCS, another famous one is https://bazaar.canonical.com[Bazaar^]. Bazaar is free and open source, and is part of the https://www.gnu.org[GNU Project^]. It behaves very differently from Git. Sometimes, to do the same thing as with Git, you have to use a different keyword, and some keywords that are common don't have the same meaning. From 9c3dd4fbfa84d72b7c12c4caae71fb87e3993e2f Mon Sep 17 00:00:00 2001 From: Dexter Morganov Date: Sat, 28 Jan 2023 11:52:34 +0200 Subject: [PATCH 346/549] Fix invalid file name on cleanup --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 6e99799f..c772d699 100644 --- a/Rakefile +++ b/Rakefile @@ -117,7 +117,7 @@ namespace :book do begin puts 'Removing generated files' - FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.fb2', 'progit.mobi', 'progit.pdf'].each do |file| + FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.fb2.zip', 'progit.mobi', 'progit.pdf'].each do |file| rm file # Rescue if file not found From 6dd5437c3f6132cf4f1047ecae7a740cdbb55964 Mon Sep 17 00:00:00 2001 From: Fady Nagh Date: Sun, 29 Jan 2023 11:04:17 +0200 Subject: [PATCH 347/549] Add The rust based editor Helix to git config core.editor commands in Git Commands - Setup and Config --- C-git-commands.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/C-git-commands.asc b/C-git-commands.asc index ba2ea1f1..1181ca24 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -55,6 +55,7 @@ Accompanying the configuration instructions in <>, |Emacs |`git config --global core.editor emacs` |Gedit (Linux) |`git config --global core.editor "gedit --wait --new-window"` |Gvim (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'"` (Also see note below) +|Helix |`git config --global core.editor "helix"` |Kate (Linux) |`git config --global core.editor "kate"` |nano |`git config --global core.editor "nano -w"` |Notepad (Windows 64-bit) |`git config core.editor notepad` From fd57b62dc4c175fd207bcd750f4e4b0a5b844e7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 18:56:46 +0000 Subject: [PATCH 348/549] Update html-proofer requirement from 4.4.1 to 5.0.5 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v4.4.1...v5.0.5) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b4d9d1a1..3916c626 100644 --- a/Gemfile +++ b/Gemfile @@ -14,5 +14,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '4.2.6.0' -gem 'html-proofer', '4.4.1' +gem 'html-proofer', '5.0.5' gem 'kindlegen', '3.1.1' From a86d8c593bc8e2c29c73ee73d7be515097a6798b Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 9 Mar 2023 10:56:26 -0800 Subject: [PATCH 349/549] Use Ruby 3.1 for GHA builds --- .github/workflows/pr-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index f9c12549..944c2b6e 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 + ruby-version: 3.1 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Build book From 10f605f690019413ba3f160351d593428c0556d0 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 9 Mar 2023 11:21:03 -0800 Subject: [PATCH 350/549] Fix some html-proofer warnings --- book/07-git-tools/sections/credentials.asc | 4 ++-- book/09-git-and-other-scms/sections/client-p4.asc | 4 ++-- book/A-git-in-other-environments/sections/zsh.asc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index eabf741b..f0a42890 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -20,8 +20,8 @@ Git has a few options provided in the box: * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. * If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/GitCredentialManager/git-credential-manager/releases/latest[the latest GCM] as a standalone service. - This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#windows[GCM Install Instructions] for more information. + This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. + It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#readme[GCM Install Instructions] for more information. You can choose one of these methods by setting a Git configuration value: diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index d9e43506..b12f190a 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -15,12 +15,12 @@ The second is git-p4, a client-side bridge that lets you use Git as a Perforce c ===== Git Fusion (((Perforce, Git Fusion))) -Perforce provides a product called Git Fusion (available at http://www.perforce.com/git-fusion[^]), which synchronizes a Perforce server with Git repositories on the server side. +Perforce provides a product called Git Fusion (available at https://www.perforce.com/git-fusion[^]), which synchronizes a Perforce server with Git repositories on the server side. ====== Setting Up For our examples, we'll be using the easiest installation method for Git Fusion, which is downloading a virtual machine that runs the Perforce daemon and Git Fusion. -You can get the virtual machine image from http://www.perforce.com/downloads/Perforce/20-User[^], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). +You can get the virtual machine image from https://www.perforce.com/downloads/Perforce/20-User[^], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). Upon first starting the machine, it asks you to customize the password for three Linux users (`root`, `perforce`, and `git`), and provide an instance name, which can be used to distinguish this installation from others on the same network. When that has all completed, you'll see this: diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 1999ca8b..1227c1ba 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -40,7 +40,7 @@ It looks a bit like this: .Customized `zsh` prompt image::images/zsh-prompt.png[Customized `zsh` prompt] -For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. +For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at https://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. 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. `git-prompt.sh` is compatible with both Bash and Zsh. From b2d2c67951fb5dee5cbf5351048ad58165feabc5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Mar 2023 19:36:37 +0000 Subject: [PATCH 351/549] Update epubcheck-ruby requirement from 4.2.6.0 to 5.0.0.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Release notes](https://github.com/takahashim/epubcheck-ruby/releases) - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v4.2.6.0...v5.0.0.0) --- updated-dependencies: - dependency-name: epubcheck-ruby dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3916c626..0ce7a111 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,6 @@ gem 'asciidoctor-pdf', '2.3.4' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.1' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '4.2.6.0' +gem 'epubcheck-ruby', '5.0.0.0' gem 'html-proofer', '5.0.5' gem 'kindlegen', '3.1.1' From 9f582dfa2b7e8cd5df1321e3b00c6372e176df6c Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 9 Mar 2023 13:39:58 -0800 Subject: [PATCH 352/549] Ruby 3.1 for GHA --- .github/workflows/release-on-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index ccff2b5e..9b3100f2 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -23,7 +23,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 + ruby-version: 3.1 bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Build release assets From 66526b19b118752f1476c3a93a3c2b68399011fc Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 10 Mar 2023 21:19:10 +0100 Subject: [PATCH 353/549] Update URLs in CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91faeed2..ba00b375 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,7 @@ The issue may have already been corrected in the source files, but not yet deplo Errata and basic clarifications will be accepted if we agree that they improve the content. You can also open an issue so that we can discuss how or if the issue needs to be addressed. -If you've never done this before, the [flow guide](https://guides.github.com/introduction/flow/) might be useful. +If you've never done this before, the [flow guide](https://docs.github.com/en/get-started/quickstart/github-flow) might be useful. ## Large Rewrites @@ -29,7 +29,7 @@ It's unlikely that your prose is going to be *so* much better that it's worth ch ## Figures -The images in this book are generated using [Sketch 3](https://www.sketchapp.com/), with the [included sketchbook file](diagram-source/progit.sketch). +The images in this book are generated using [Sketch 3](https://www.sketch.com/), with the [included sketchbook file](diagram-source/progit.sketch). To create a figure: From 6125817547d7137f84ae195255cd950bbbbaee0d Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 10 Mar 2023 21:23:49 +0100 Subject: [PATCH 354/549] Update URLs and fix closing bracket in TRANSLATING --- TRANSLATING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TRANSLATING.md b/TRANSLATING.md index 7966ebcd..6c8b3aad 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -10,7 +10,7 @@ The following are guidelines to help you on your way: * Before you begin, read the whole Git Pro book in English, so that you're aware of the content, and are familiar with the style used. * Ensure you have a good working knowledge of git, so that explaining the technical terms is doable. * Stick to a common style and format for the translation. -* Be sure to read and understand the basics of [Asciidoc formatting](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/). Not following the asciidoc syntax can lead to problems with building/compilation of the pdf, epub and html files needed for the book. +* Be sure to read and understand the basics of [Asciidoc formatting](https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/). Not following the asciidoc syntax can lead to problems with building/compilation of the pdf, epub and html files needed for the book. ## Translating the book to another language @@ -58,7 +58,7 @@ If there is no project for your language, you can start your own translation. Base your work on the second edition of the book, available [here](https://github.com/progit/progit2). To do so: 1. Pick the correct [ISO 639 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language. - 1. Create a [GitHub organization](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch), for example: `progit2-[your code]` on GitHub. + 1. Create a [GitHub organization](https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch), for example: `progit2-[your code]` on GitHub. 1. Create a project `progit2`. 1. Copy the structure of progit/progit2 (this project) in your project and start translating. @@ -88,10 +88,10 @@ This is a technical task, please ping @jnavila to get started with epub publicat Translating the book is the first step. Once this is finished, you could consider translating the user interface of Git itself. -This task requires a more technical knowledge of the tool than the book. Hopefully, after having translated the full book content, you can understand the terms used in the application. If you feel technically up to the task, the repo is [here](https://github.com/git-l10n/git-po) and you just have to follow the [guide](https://github.com/git-l10n/git-po/blob/master/po/README). +This task requires a more technical knowledge of the tool than the book. Hopefully, after having translated the full book content, you can understand the terms used in the application. If you feel technically up to the task, the repo is [here](https://github.com/git-l10n/git-po) and you just have to follow the [guide](https://github.com/git-l10n/git-po/blob/master/po/README.md). Beware though that - * you'll need to use more specific tools to manage localization po files (such as editing them with [poedit](https://poedit.net/) and merging them. You might need to compile git in order to check your work. + * you'll need to use more specific tools to manage localization po files (such as editing them with [poedit](https://poedit.net/)) and merging them. You might need to compile git in order to check your work. * a basic knowledge of how translating applications works is required, which is significantly different from translating books. * the core Git project uses more stringent [procedures](https://github.com/git-l10n/git-po/blob/master/Documentation/SubmittingPatches) to accept contributions, be sure to abide by them. From 934a7c66afffdc19b0184ba3a26e187ac5f26827 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 10 Mar 2023 14:52:12 -0800 Subject: [PATCH 355/549] Compute the tag just before we use it --- .github/workflows/release-on-merge.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 9b3100f2..de83b58b 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -12,14 +12,6 @@ jobs: with: fetch-depth: 0 - - name: Compute tag name - id: compute-tag - run: | - echo Computing next tag number - LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) - PATCH=$(($LASTPATCH+1)) - echo "::set-output name=tagname::2.1.${PATCH}" - - name: Set up Ruby uses: ruby/setup-ruby@v1 with: @@ -29,6 +21,14 @@ jobs: - name: Build release assets run: bundle exec rake book:build + - name: Compute tag name + id: compute-tag + run: | + echo Computing next tag number + LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) + PATCH=$(($LASTPATCH+1)) + echo "{tagname}={2.1.${PATCH}}" >> $GITHUB_OUTPUT + - name: Create release uses: ncipollo/release-action@v1 with: From b17162787ac62bf301b3a5cb865c6b2346f66257 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 10 Mar 2023 17:13:25 -0800 Subject: [PATCH 356/549] wups fix output --- .github/workflows/release-on-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index de83b58b..23713e54 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -27,7 +27,7 @@ jobs: echo Computing next tag number LASTPATCH=$(git describe --tags | cut -d- -f1 | cut -d. -f3) PATCH=$(($LASTPATCH+1)) - echo "{tagname}={2.1.${PATCH}}" >> $GITHUB_OUTPUT + echo "tagname=2.1.${PATCH}" >> $GITHUB_OUTPUT - name: Create release uses: ncipollo/release-action@v1 From f43e1046057ebc26b508012d4e28725ec0692cff Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 10 Mar 2023 17:19:35 -0800 Subject: [PATCH 357/549] Empty commit to force a release From d8f8809f86a29f5f9c527db9850bcf6133c2802f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volker=20Wei=C3=9Fmann?= Date: Sun, 12 Mar 2023 14:14:03 +0100 Subject: [PATCH 358/549] Added warning about the insecurity of git:// --- book/01-introduction/sections/installing.asc | 2 +- book/02-git-basics/sections/viewing-history.asc | 2 +- book/04-git-server/sections/gitweb.asc | 2 +- book/04-git-server/sections/protocols.asc | 10 ++++++---- book/05-distributed-git/sections/contributing.asc | 2 +- book/05-distributed-git/sections/maintaining.asc | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index f6861594..ef7e6ad6 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -133,5 +133,5 @@ After this is done, you can also get Git via Git itself for updates: [source,console] ---- -$ git clone git://git.kernel.org/pub/scm/git/git.git +$ git clone https://git.kernel.org/pub/scm/git/git.git ---- diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index cfddeead..2818cca3 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -191,7 +191,7 @@ This option adds a nice little ASCII graph showing your branch and merge history ---- $ git log --pretty=format:"%h %s" --graph * 2d3acf9 Ignore errors from SIGCHLD on trap -* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit +* 5e3ee11 Merge branch 'master' of https://github.com/dustin/grit.git |\ | * 420eac9 Add method for getting the current branch * | 30e367c Timeout code and tests diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index c8d2df55..bbd62c77 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -36,7 +36,7 @@ First, you need to get the Git source code, which GitWeb comes with, and generat [source,console] ---- -$ git clone git://git.kernel.org/pub/scm/git/git.git +$ git clone https://git.kernel.org/pub/scm/git/git.git $ cd git/ $ make GITWEB_PROJECTROOT="/srv/git" prefix=/usr gitweb SUBDIR gitweb diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index 58e370ca..f26339c0 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -181,7 +181,7 @@ If you want to allow anonymous read-only access to your projects and also want t (((protocols, git))) Finally, we have the Git protocol. -This is a special daemon that comes packaged with Git; it listens on a dedicated port (9418) that provides a service similar to the SSH protocol, but with absolutely no authentication. +This is a special daemon that comes packaged with Git; it listens on a dedicated port (9418) that provides a service similar to the SSH protocol, but with absolutely no authentication or cryptography. In order for a repository to be served over the Git protocol, you must create a `git-daemon-export-ok` file -- the daemon won't serve a repository without that file in it -- but, other than that, there is no security. Either the Git repository is available for everyone to clone, or it isn't. This means that there is generally no pushing over this protocol. @@ -196,9 +196,11 @@ It uses the same data-transfer mechanism as the SSH protocol but without the enc ===== The Cons -The downside of the Git protocol is the lack of authentication. -It's generally undesirable for the Git protocol to be the only access to your project. -Generally, you'll pair it with SSH or HTTPS access for the few developers who have push (write) access and have everyone else use `git://` for read-only access. +Due to the lack of TLS or other cryptography, cloning over git:// might lead to an arbitrary code execution vulnerability and should therefore be avoided unless you know what you are doing: +If you run `git clone git://example.com/project.git` an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. If you then compile/run the code you just cloned, you will execute the malicious code. +Running `git clone http://example.com/project.git` should be avoided for the same reason. Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong ssh key fingerprint. + +It also has no authentication, i.e. anyone can clone the repo (although this is often exactly what you want). It's also probably the most difficult protocol to set up. It must run its own daemon, which requires `xinetd` or `systemd` configuration or the like, which isn't always a walk in the park. It also requires firewall access to port 9418, which isn't a standard port that corporate firewalls always allow. diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index de739a16..657f1443 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -561,7 +561,7 @@ Jessica Smith (1): are available in the git repository at: - git://githost/simplegit.git featureA + https://githost/simplegit.git featureA Jessica Smith (2): Add limit to log function diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 7a1eb973..7dd0cee9 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -191,7 +191,7 @@ For instance, if Jessica sends you an email saying that she has a great new feat [source,console] ---- -$ git remote add jessica git://github.com/jessica/myproject.git +$ git remote add jessica https://github.com/jessica/myproject.git $ git fetch jessica $ git checkout -b rubyclient jessica/ruby-client ---- From f3c73a020766967c379fb8c58043f5d4c3c0b053 Mon Sep 17 00:00:00 2001 From: Volker-Weissmann <39418860+Volker-Weissmann@users.noreply.github.com> Date: Sun, 12 Mar 2023 17:58:49 +0100 Subject: [PATCH 359/549] Update book/04-git-server/sections/protocols.asc Co-authored-by: Ben Straub --- book/04-git-server/sections/protocols.asc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index f26339c0..96695845 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -196,9 +196,12 @@ It uses the same data-transfer mechanism as the SSH protocol but without the enc ===== The Cons -Due to the lack of TLS or other cryptography, cloning over git:// might lead to an arbitrary code execution vulnerability and should therefore be avoided unless you know what you are doing: -If you run `git clone git://example.com/project.git` an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. If you then compile/run the code you just cloned, you will execute the malicious code. -Running `git clone http://example.com/project.git` should be avoided for the same reason. Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong ssh key fingerprint. +Due to the lack of TLS or other cryptography, cloning over `git://` might lead to an arbitrary code execution vulnerability, and should therefore be avoided unless you know what you are doing. + +* If you run `git clone git://example.com/project.git`, an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. If you then compile/run the code you just cloned, you will execute the malicious code. + Running `git clone http://example.com/project.git` should be avoided for the same reason. +* Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). + Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong ssh key fingerprint. It also has no authentication, i.e. anyone can clone the repo (although this is often exactly what you want). It's also probably the most difficult protocol to set up. From d7ce3b7949ce31e613a6a52f87906d78a7c8d845 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 13 Mar 2023 00:44:23 +0100 Subject: [PATCH 360/549] Change file permissions to 0644 Git can track files as executables (0755) or as non-executables (0644). These PDF files don't need executable permissions. --- book/06-github/callouts/1.pdf | Bin book/06-github/callouts/10.pdf | Bin book/06-github/callouts/2.pdf | Bin book/06-github/callouts/3.pdf | Bin book/06-github/callouts/4.pdf | Bin book/06-github/callouts/5.pdf | Bin book/06-github/callouts/6.pdf | Bin book/06-github/callouts/7.pdf | Bin book/06-github/callouts/8.pdf | Bin book/06-github/callouts/9.pdf | Bin book/07-git-tools/callouts/1.pdf | Bin book/07-git-tools/callouts/10.pdf | Bin book/07-git-tools/callouts/2.pdf | Bin book/07-git-tools/callouts/3.pdf | Bin book/07-git-tools/callouts/4.pdf | Bin book/07-git-tools/callouts/5.pdf | Bin book/07-git-tools/callouts/6.pdf | Bin book/07-git-tools/callouts/7.pdf | Bin book/07-git-tools/callouts/8.pdf | Bin book/07-git-tools/callouts/9.pdf | Bin book/B-embedding-git/callouts/1.pdf | Bin book/B-embedding-git/callouts/10.pdf | Bin book/B-embedding-git/callouts/2.pdf | Bin book/B-embedding-git/callouts/3.pdf | Bin book/B-embedding-git/callouts/4.pdf | Bin book/B-embedding-git/callouts/5.pdf | Bin book/B-embedding-git/callouts/6.pdf | Bin book/B-embedding-git/callouts/7.pdf | Bin book/B-embedding-git/callouts/8.pdf | Bin book/B-embedding-git/callouts/9.pdf | Bin callouts/1.pdf | Bin callouts/10.pdf | Bin callouts/2.pdf | Bin callouts/3.pdf | Bin callouts/4.pdf | Bin callouts/5.pdf | Bin callouts/6.pdf | Bin callouts/7.pdf | Bin callouts/8.pdf | Bin callouts/9.pdf | Bin 40 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 book/06-github/callouts/1.pdf mode change 100755 => 100644 book/06-github/callouts/10.pdf mode change 100755 => 100644 book/06-github/callouts/2.pdf mode change 100755 => 100644 book/06-github/callouts/3.pdf mode change 100755 => 100644 book/06-github/callouts/4.pdf mode change 100755 => 100644 book/06-github/callouts/5.pdf mode change 100755 => 100644 book/06-github/callouts/6.pdf mode change 100755 => 100644 book/06-github/callouts/7.pdf mode change 100755 => 100644 book/06-github/callouts/8.pdf mode change 100755 => 100644 book/06-github/callouts/9.pdf mode change 100755 => 100644 book/07-git-tools/callouts/1.pdf mode change 100755 => 100644 book/07-git-tools/callouts/10.pdf mode change 100755 => 100644 book/07-git-tools/callouts/2.pdf mode change 100755 => 100644 book/07-git-tools/callouts/3.pdf mode change 100755 => 100644 book/07-git-tools/callouts/4.pdf mode change 100755 => 100644 book/07-git-tools/callouts/5.pdf mode change 100755 => 100644 book/07-git-tools/callouts/6.pdf mode change 100755 => 100644 book/07-git-tools/callouts/7.pdf mode change 100755 => 100644 book/07-git-tools/callouts/8.pdf mode change 100755 => 100644 book/07-git-tools/callouts/9.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/1.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/10.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/2.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/3.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/4.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/5.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/6.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/7.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/8.pdf mode change 100755 => 100644 book/B-embedding-git/callouts/9.pdf mode change 100755 => 100644 callouts/1.pdf mode change 100755 => 100644 callouts/10.pdf mode change 100755 => 100644 callouts/2.pdf mode change 100755 => 100644 callouts/3.pdf mode change 100755 => 100644 callouts/4.pdf mode change 100755 => 100644 callouts/5.pdf mode change 100755 => 100644 callouts/6.pdf mode change 100755 => 100644 callouts/7.pdf mode change 100755 => 100644 callouts/8.pdf mode change 100755 => 100644 callouts/9.pdf diff --git a/book/06-github/callouts/1.pdf b/book/06-github/callouts/1.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/10.pdf b/book/06-github/callouts/10.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/2.pdf b/book/06-github/callouts/2.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/3.pdf b/book/06-github/callouts/3.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/4.pdf b/book/06-github/callouts/4.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/5.pdf b/book/06-github/callouts/5.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/6.pdf b/book/06-github/callouts/6.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/7.pdf b/book/06-github/callouts/7.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/8.pdf b/book/06-github/callouts/8.pdf old mode 100755 new mode 100644 diff --git a/book/06-github/callouts/9.pdf b/book/06-github/callouts/9.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/1.pdf b/book/07-git-tools/callouts/1.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/10.pdf b/book/07-git-tools/callouts/10.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/2.pdf b/book/07-git-tools/callouts/2.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/3.pdf b/book/07-git-tools/callouts/3.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/4.pdf b/book/07-git-tools/callouts/4.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/5.pdf b/book/07-git-tools/callouts/5.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/6.pdf b/book/07-git-tools/callouts/6.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/7.pdf b/book/07-git-tools/callouts/7.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/8.pdf b/book/07-git-tools/callouts/8.pdf old mode 100755 new mode 100644 diff --git a/book/07-git-tools/callouts/9.pdf b/book/07-git-tools/callouts/9.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/1.pdf b/book/B-embedding-git/callouts/1.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/10.pdf b/book/B-embedding-git/callouts/10.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/2.pdf b/book/B-embedding-git/callouts/2.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/3.pdf b/book/B-embedding-git/callouts/3.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/4.pdf b/book/B-embedding-git/callouts/4.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/5.pdf b/book/B-embedding-git/callouts/5.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/6.pdf b/book/B-embedding-git/callouts/6.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/7.pdf b/book/B-embedding-git/callouts/7.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/8.pdf b/book/B-embedding-git/callouts/8.pdf old mode 100755 new mode 100644 diff --git a/book/B-embedding-git/callouts/9.pdf b/book/B-embedding-git/callouts/9.pdf old mode 100755 new mode 100644 diff --git a/callouts/1.pdf b/callouts/1.pdf old mode 100755 new mode 100644 diff --git a/callouts/10.pdf b/callouts/10.pdf old mode 100755 new mode 100644 diff --git a/callouts/2.pdf b/callouts/2.pdf old mode 100755 new mode 100644 diff --git a/callouts/3.pdf b/callouts/3.pdf old mode 100755 new mode 100644 diff --git a/callouts/4.pdf b/callouts/4.pdf old mode 100755 new mode 100644 diff --git a/callouts/5.pdf b/callouts/5.pdf old mode 100755 new mode 100644 diff --git a/callouts/6.pdf b/callouts/6.pdf old mode 100755 new mode 100644 diff --git a/callouts/7.pdf b/callouts/7.pdf old mode 100755 new mode 100644 diff --git a/callouts/8.pdf b/callouts/8.pdf old mode 100755 new mode 100644 diff --git a/callouts/9.pdf b/callouts/9.pdf old mode 100755 new mode 100644 From a8281da5474197e37fd65f07678c40b6484a4571 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:56:41 +0000 Subject: [PATCH 361/549] Update html-proofer requirement from 5.0.5 to 5.0.6 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v5.0.5...v5.0.6) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0ce7a111..322c4031 100644 --- a/Gemfile +++ b/Gemfile @@ -14,5 +14,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.0.0.0' -gem 'html-proofer', '5.0.5' +gem 'html-proofer', '5.0.6' gem 'kindlegen', '3.1.1' From 7cb9da7bd5e989fe9696ff41ad53acf0aa057ced Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Wed, 15 Mar 2023 23:49:01 +0100 Subject: [PATCH 362/549] Use caret shorthand and tags URL --- book/01-introduction/sections/installing.asc | 2 +- book/06-github/sections/2-contributing.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index ef7e6ad6..09f481b4 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -114,7 +114,7 @@ $ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi due to binary name differences. When you have all the necessary dependencies, you can go ahead and grab the latest tagged release tarball from several places. -You can get it via the kernel.org site, at https://www.kernel.org/pub/software/scm/git[], or the mirror on the GitHub website, at https://github.com/git/git/releases[^]. +You can get it via the kernel.org site, at https://www.kernel.org/pub/software/scm/git[^], or the mirror on the GitHub website, at https://github.com/git/git/tags[^]. It's generally a little clearer what the latest version is on the GitHub page, but the kernel.org page also has release signatures if you want to verify your download. Then, compile and install: diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 05ff420e..9aab8031 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -58,7 +58,7 @@ Go to the https://cli.github.com/[GitHub CLI homepage^] for installation instruc ===== Creating a Pull Request -Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at https://github.com/schacon/blink[]. +Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at https://github.com/schacon/blink[^]. .The project we want to contribute to image::images/blink-01-start.png[The project we want to contribute to] From 714c9c727c5c77b3decbd3487dcceea84de9d0d5 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sat, 25 Mar 2023 15:37:15 +0100 Subject: [PATCH 363/549] Use lowercase --- book/01-introduction/sections/history.asc | 2 +- book/04-git-server/sections/protocols.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/01-introduction/sections/history.asc b/book/01-introduction/sections/history.asc index 508fbe56..b564c56b 100644 --- a/book/01-introduction/sections/history.asc +++ b/book/01-introduction/sections/history.asc @@ -17,4 +17,4 @@ Some of the goals of the new system were as follows: * Able to handle large projects like the Linux kernel efficiently (speed and data size) Since its birth in 2005, Git has evolved and matured to be easy to use and yet retain these initial qualities. -It's amazingly fast, it's very efficient with large projects, and it has an incredible branching system for non-linear development (See <>). +It's amazingly fast, it's very efficient with large projects, and it has an incredible branching system for non-linear development (see <>). diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index 96695845..08ad0f32 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -90,7 +90,7 @@ In fact, for services like GitHub, the URL you use to view the repository online If the server does not respond with a Git HTTP smart service, the Git client will try to fall back to the simpler _Dumb_ HTTP protocol. The Dumb protocol expects the bare Git repository to be served like normal files from the web server. The beauty of Dumb HTTP is the simplicity of setting it up. -Basically, all you have to do is put a bare Git repository under your HTTP document root and set up a specific `post-update` hook, and you're done (See <>). +Basically, all you have to do is put a bare Git repository under your HTTP document root and set up a specific `post-update` hook, and you're done (see <>). At that point, anyone who can access the web server under which you put the repository can also clone your repository. To allow read access to your repository over HTTP, do something like this: From 08529aebdd27084cbc3e80b46dc3806de7659474 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sat, 25 Mar 2023 15:45:49 +0100 Subject: [PATCH 364/549] Sync image alt descriptions with captions --- .../sections/about-version-control.asc | 6 ++-- book/01-introduction/sections/installing.asc | 2 +- book/01-introduction/sections/what-is-git.asc | 2 +- book/03-git-branching/sections/rebasing.asc | 6 ++-- .../sections/remote-branches.asc | 6 ++-- .../sections/maintaining.asc | 2 +- .../sections/1-setting-up-account.asc | 6 ++-- book/06-github/sections/2-contributing.asc | 36 +++++++++---------- book/06-github/sections/3-maintaining.asc | 24 ++++++------- book/06-github/sections/5-scripting.asc | 14 ++++---- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 573febdb..98a8f883 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -19,7 +19,7 @@ It is easy to forget which directory you're in and accidentally write to the wro To deal with this issue, programmers long ago developed local VCSs that had a simple database that kept all the changes to files under revision control. -.Local version control +.Local version control diagram image::images/local.png[Local version control diagram] One of the most popular VCS tools was a system called RCS, which is still distributed with many computers today. @@ -33,7 +33,7 @@ To deal with this problem, Centralized Version Control Systems (CVCSs) were deve These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place. (((CVS)))(((Subversion)))(((Perforce))) For many years, this has been the standard for version control. -.Centralized version control +.Centralized version control diagram image::images/centralized.png[Centralized version control diagram] This setup offers many advantages, especially over local VCSs. @@ -54,7 +54,7 @@ In a DVCS (such as Git, Mercurial, Bazaar or Darcs), clients don't just check ou Thus, if any server dies, and these systems were collaborating via that server, any of the client repositories can be copied back up to the server to restore it. Every clone is really a full backup of all the data. -.Distributed version control +.Distributed version control diagram image::images/distributed.png[Distributed version control diagram] Furthermore, many of these systems deal pretty well with having several remote repositories they can work with, so you can collaborate with different groups of people in different ways simultaneously within the same project. diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 09f481b4..6b6f831a 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -48,7 +48,7 @@ If you don't have it installed already, it will prompt you to install it. If you want a more up to date version, you can also install it via a binary installer. A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[^]. -.Git macOS Installer +.Git macOS installer image::images/git-osx-installer.png[Git macOS installer] ==== Installing on Windows diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 23769b95..8953b9d4 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -86,7 +86,7 @@ Git has three main states that your files can reside in: _modified_, _staged_, a This leads us to the three main sections of a Git project: the working tree, the staging area, and the Git directory. .Working tree, staging area, and Git directory -image::images/areas.png["Working tree, staging area, and Git directory."] +image::images/areas.png["Working tree, staging area, and Git directory"] The working tree is a single checkout of one version of the project. These files are pulled out of the compressed database in the Git directory and placed on disk for you to use or modify. diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index dfc18dc5..354ae133 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -151,20 +151,20 @@ Suppose you clone from a central server and then do some work off that. Your commit history looks like this: .Clone a repository, and base some work on it -image::images/perils-of-rebasing-1.png["Clone a repository, and base some work on it."] +image::images/perils-of-rebasing-1.png["Clone a repository, and base some work on it"] Now, someone else does more work that includes a merge, and pushes that work to the central server. You fetch it and merge the new remote branch into your work, making your history look something like this: .Fetch more commits, and merge them into your work -image::images/perils-of-rebasing-2.png["Fetch more commits, and merge them into your work."] +image::images/perils-of-rebasing-2.png["Fetch more commits, and merge them into your work"] Next, the person who pushed the merged work decides to go back and rebase their work instead; they do a `git push --force` to overwrite the history on the server. You then fetch from that server, bringing down the new commits. [[_pre_merge_rebase_work]] .Someone pushes rebased commits, abandoning commits you've based your work on -image::images/perils-of-rebasing-3.png["Someone pushes rebased commits, abandoning commits you've based your work on."] +image::images/perils-of-rebasing-3.png["Someone pushes rebased commits, abandoning commits you've based your work on"] Now you're both in a pickle. If you do a `git pull`, you'll create a merge commit which includes both lines of history, and your repository will look like this: diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 6e6670d5..723aa7b6 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -28,7 +28,7 @@ If you run `git clone -o booyah` instead, then you will have `booyah/master` as ==== .Server and local repositories after cloning -image::images/remote-branches-1.png[Server and local repositories after cloning.] +image::images/remote-branches-1.png[Server and local repositories after cloning] If you do some work on your local `master` branch, and, in the meantime, someone else pushes to `git.ourcompany.com` and updates its `master` branch, then your histories move forward differently. Also, as long as you stay out of contact with your `origin` server, your `origin/master` pointer doesn't move. @@ -40,7 +40,7 @@ To synchronize your work with a given remote, you run a `git fetch ` com This command looks up which server "`origin`" is (in this case, it's `git.ourcompany.com`), fetches any data from it that you don't yet have, and updates your local database, moving your `origin/master` pointer to its new, more up-to-date position. .`git fetch` updates your remote-tracking branches -image::images/remote-branches-3.png[`git fetch` updates your remote references] +image::images/remote-branches-3.png[`git fetch` updates your remote-tracking branches] To demonstrate having multiple remote servers and what remote branches for those remote projects look like, let's assume you have another internal Git server that is used only for development by one of your sprint teams. This server is at `git.team1.ourcompany.com`. @@ -54,7 +54,7 @@ Now, you can run `git fetch teamone` to fetch everything the remote `teamone` se Because that server has a subset of the data your `origin` server has right now, Git fetches no data but sets a remote-tracking branch called `teamone/master` to point to the commit that `teamone` has as its `master` branch. .Remote-tracking branch for `teamone/master` -image::images/remote-branches-5.png[Remote tracking branch for `teamone/master`] +image::images/remote-branches-5.png[Remote-tracking branch for `teamone/master`] [[_pushing_branches]] ==== Pushing diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 7dd0cee9..9596de5d 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -334,7 +334,7 @@ image::images/merging-workflows-4.png[After a topic branch merge] [[merwf_e]] .After a project release -image::images/merging-workflows-5.png[After a topic branch release] +image::images/merging-workflows-5.png[After a project release] This way, when people clone your project's repository, they can either check out `master` to build the latest stable version and keep up to date on that easily, or they can check out `develop`, which is the more cutting-edge content. You can also extend this concept by having an `integrate` branch where all the work is merged together. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index e85e0936..1b447b4c 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -37,7 +37,7 @@ image::images/account-settings.png[The “Account settings” link] Then select the "`SSH keys`" section along the left-hand side. -.The "`SSH keys`" link. +.The "`SSH keys`" link image::images/ssh-keys.png[The “SSH keys” link] From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click "`Add key`". @@ -59,7 +59,7 @@ image::images/your-profile.png[The “Profile” link] We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. -.Crop your avatar +.Crop your uploaded avatar image::images/avatar-crop.png[Crop your uploaded avatar] Now anywhere you interact on the site, people will see your avatar next to your username. @@ -72,7 +72,7 @@ The way that GitHub maps your Git commits to your user is by email address. If you use multiple email addresses in your commits and you want GitHub to link them up properly, you need to add all the email addresses you have used to the Emails section of the admin section. [[_add_email_addresses]] -.Add email addresses +.Add all your email addresses image::images/email-settings.png[Add all your email addresses] In <<_add_email_addresses>> we can see some of the different states that are possible. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 9aab8031..1c5928a6 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -135,7 +135,7 @@ It is almost always worthwhile to put some effort into this, since a good descri We also see a list of the commits in our topic branch that are "`ahead`" of the `master` branch (in this case, just the one) and a unified diff of all the changes that will be made should this branch get merged by the project owner. .Pull Request creation page -image::images/blink-03-pull-request-open.png[Pull Request creation] +image::images/blink-03-pull-request-open.png[Pull Request creation page] When you hit the 'Create pull request' button on this screen, the owner of the project you forked will get a notification that someone is suggesting a change and will link to a page that has all of this information on it. @@ -154,14 +154,14 @@ Where this conversation may take place over email in the workflows presented in The project owner can review the unified diff and leave a comment by clicking on any of the lines. .Comment on a specific line of code in a Pull Request -image::images/blink-04-pr-comment.png[PR line comment] +image::images/blink-04-pr-comment.png[Comment on a specific line of code in a Pull Request] Once the maintainer makes this comment, the person who opened the Pull Request (and indeed, anyone else watching the repository) will get a notification. We'll go over customizing this later, but if he had email notifications turned on, Tony would get an email like this: [[_email_notification]] .Comments sent as email notifications -image::images/blink-04-email.png[Email notification] +image::images/blink-04-email.png[Comments sent as email notifications] Anyone can also leave general comments on the Pull Request. In <<_pr_discussion>> we can see an example of the project owner both commenting on a line of code and then leaving a general comment in the discussion section. @@ -169,7 +169,7 @@ You can see that the code comments are brought into the conversation as well. [[_pr_discussion]] .Pull Request discussion page -image::images/blink-05-general-comment.png[PR discussion page] +image::images/blink-05-general-comment.png[Pull Request discussion page] Now the contributor can see what they need to do in order to get their change accepted. Luckily this is very straightforward. @@ -180,7 +180,7 @@ Adding commits to an existing Pull Request doesn't trigger a notification, so on [[_pr_final]] .Pull Request final -image::images/blink-06-final.png[PR final] +image::images/blink-06-final.png[Pull Request final] An interesting thing to notice is that if you click on the "`Files Changed`" tab on this Pull Request, you'll get the "`unified`" diff -- that is, the total aggregate difference that would be introduced to your main branch if this topic branch was merged in. In `git diff` terms, it basically automatically shows you `git diff master...` for the branch this Pull Request is based on. @@ -229,7 +229,7 @@ GitHub will test this for you and let you know at the bottom of every Pull Reque [[_pr_fail]] .Pull Request does not merge cleanly -image::images/pr-01-fail.png[PR merge failure] +image::images/pr-01-fail.png[Pull Request does not merge cleanly] If you see something like <<_pr_fail>>, you'll want to fix your branch so that it turns green and the maintainer doesn't have to do extra work. @@ -287,7 +287,7 @@ Once you do that, the Pull Request will be automatically updated and re-checked [[_pr_merge_fix]] .Pull Request now merges cleanly -image::images/pr-02-merge-fix.png[PR fixed] +image::images/pr-02-merge-fix.png[Pull Request now merges cleanly] One of the great things about Git is that you can do that continuously. If you have a very long-running project, you can easily merge from the target branch over and over again and only have to deal with conflicts that have arisen since the last time that you merged, making the process very manageable. @@ -314,13 +314,13 @@ We can fill out the description just like <<_pr_references>>. [[_pr_references]] .Cross references in a Pull Request -image::images/mentions-01-syntax.png[PR references] +image::images/mentions-01-syntax.png[Cross references in a Pull Request] When we submit this pull request, we'll see all of that rendered like <<_pr_references_render>>. [[_pr_references_render]] .Cross references rendered in a Pull Request -image::images/mentions-02-render.png[PR references rendered] +image::images/mentions-02-render.png[Cross references rendered in a Pull Request] Notice that the full GitHub URL we put in there was shortened to just the information needed. @@ -330,7 +330,7 @@ The link will look something like <<_pr_closed>>. [[_pr_closed]] .Link back to the new Pull Request in the closed Pull Request timeline -image::images/mentions-03-closed.png[PR closed] +image::images/mentions-03-closed.png[Link back to the new Pull Request in the closed Pull Request timeline] In addition to issue numbers, you can also reference a specific commit by SHA-1. You have to specify a full 40 character SHA-1, but if GitHub sees that in a comment, it will link directly to the commit. @@ -346,7 +346,7 @@ See <<_example_markdown>> for an example of how comments or text can be written [[_example_markdown]] .An example of GitHub Flavored Markdown as written and as rendered -image::images/markdown-01-example.png[Example Markdown] +image::images/markdown-01-example.png[An example of GitHub Flavored Markdown as written and as rendered] The GitHub flavor of Markdown adds more things you can do beyond the basic Markdown syntax. These can all be really useful when creating useful Pull Request or Issue comments or descriptions. @@ -370,7 +370,7 @@ If we include this in the description of our Pull Request or Issue, we'll see it [[_eg_task_lists]] .Task lists rendered in a Markdown comment -image::images/markdown-02-tasks.png[Example Task List] +image::images/markdown-02-tasks.png[Task lists rendered in a Markdown comment] This is often used in Pull Requests to indicate what all you would like to get done on the branch before the Pull Request will be ready to merge. The really cool part is that you can simply click the checkboxes to update the comment -- you don't have to edit the Markdown directly to check tasks off. @@ -382,7 +382,7 @@ You can see an example of this in <<_task_list_progress>>. [[_task_list_progress]] .Task list summary in the Pull Request list -image::images/markdown-03-task-summary.png[Example Task List] +image::images/markdown-03-task-summary.png[Task list summary in the Pull Request list] These are incredibly useful when you open a Pull Request early and use it to track your progress through the implementation of the feature. @@ -409,7 +409,7 @@ In the case of the above example, it would end up rendering like <<_md_code>>. [[_md_code]] .Rendered fenced code example -image::images/markdown-04-fenced-code.png[Rendered fenced code] +image::images/markdown-04-fenced-code.png[Rendered fenced code example] ===== Quoting @@ -431,7 +431,7 @@ Once rendered, the comment will look like <<_md_quote>>. [[_md_quote]] .Rendered quoting example -image::images/markdown-05-quote.png[Rendered quoting] +image::images/markdown-05-quote.png[Rendered quoting example] ===== Emoji @@ -442,7 +442,7 @@ If you are typing a comment and you start with a `:` character, an autocompleter [[_md_emoji_auto]] .Emoji autocompleter in action -image::images/markdown-06-emoji-complete.png[Emoji autocompleter] +image::images/markdown-06-emoji-complete.png[Emoji autocompleter in action] Emojis take the form of `::` anywhere in the comment. For instance, you could write something like this: @@ -462,7 +462,7 @@ When rendered, it would look something like <<_md_emoji>>. [[_md_emoji]] .Heavy emoji commenting -image::images/markdown-07-emoji.png[Emoji] +image::images/markdown-07-emoji.png[Heavy emoji commenting] Not that this is incredibly useful, but it does add an element of fun and emotion to a medium that is otherwise hard to convey emotion in. @@ -482,7 +482,7 @@ In addition to adding Markdown image links to comments, which can be difficult t [[_md_drag]] .Drag and drop images to upload them and auto-embed them -image::images/markdown-08-drag-drop.png[Drag and drop images] +image::images/markdown-08-drag-drop.png[Drag and drop images to upload them and auto-embed them] If you look at <<_md_drag>>, you can see a small "`Parsed as Markdown`" hint above the text area. Clicking on that will give you a full cheat sheet of everything you can do with Markdown on GitHub. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index 354e27fc..b5c76927 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -13,7 +13,7 @@ image::images/newrepo.png[The “Your repositories” area] [[_new_repo_dropdown]] .The "`New repository`" dropdown -image::images/new-repo.png[The “new repository” dropdown] +image::images/new-repo.png[The “New repository” dropdown] This takes you to the "`new repository`" form: @@ -53,7 +53,7 @@ Then, just type a username into the box, and click "`Add collaborator.`" You can repeat this as many times as you like to grant access to everyone you like. If you need to revoke access, just click the "`X`" on the right-hand side of their row. -.Repository collaborators +.The repository collaborators box image::images/collaborators.png[The repository collaborators box] ==== Managing Pull Requests @@ -73,7 +73,7 @@ You should get an email notifying you about the new Pull Request and it should l [[_email_pr]] .Email notification of a new Pull Request -image::images/maint-01-email.png[Pull Request email notification] +image::images/maint-01-email.png[Email notification of a new Pull Request] There are a few things to notice about this email. It will give you a small diffstat -- a list of files that have changed in the Pull Request and by how much. @@ -101,7 +101,7 @@ Every time someone else comments on the Pull Request you will continue to get em They will each have a link to the Pull Request where the activity is happening and you can also directly respond to the email to comment on the Pull Request thread. .Responses to emails are included in the thread -image::images/maint-03-email-resp.png[Email response] +image::images/maint-03-email-resp.png[Responses to emails are included in the thread] Once the code is in a place you like and want to merge it in, you can either pull the code down and merge it locally, either with the `git pull ` syntax we saw earlier, or by adding the fork as a remote and fetching and merging. @@ -112,7 +112,7 @@ As you can see in <<_merge_button>>, GitHub gives you all of this information if [[_merge_button]] .Merge button and instructions for merging a Pull Request manually -image::images/maint-02-merge.png[Merge button] +image::images/maint-02-merge.png[Merge button and instructions for merging a Pull Request manually] If you decide you don't want to merge it, you can also just close the Pull Request and the person who opened it will be notified. @@ -231,7 +231,7 @@ If you hit the "`Edit`" button at the right of that box you can change not only [[_pr_targets]] .Manually change the Pull Request target fork and branch -image::images/maint-04-target.png[PR targets] +image::images/maint-04-target.png[Manually change the Pull Request target fork and branch] Here you can fairly easily specify to merge your new branch into another Pull Request or another fork of the project. @@ -242,7 +242,7 @@ GitHub also has a pretty nice notifications system built in that can come in han In any comment you can start typing a `@` character and it will begin to autocomplete with the names and usernames of people who are collaborators or contributors in the project. .Start typing @ to mention someone -image::images/maint-05-mentions.png[Mentions] +image::images/maint-05-mentions.png[Start typing @ to mention someone] You can also mention a user who is not in that dropdown, but often the autocompleter can make it faster. @@ -255,7 +255,7 @@ You will also be subscribed to something if you opened it, if you're watching th If you no longer wish to receive notifications, there is an "`Unsubscribe`" button on the page you can click to stop receiving updates on it. .Unsubscribe from an Issue or Pull Request -image::images/maint-06-unsubscribe.png[Unsubscribe] +image::images/maint-06-unsubscribe.png[Unsubscribe from an Issue or Pull Request] ===== The Notifications Page @@ -263,7 +263,7 @@ When we mention "`notifications`" here with respect to GitHub, we mean a specifi If you go to the "`Notification center`" tab from the settings page, you can see some of the options you have. .Notification center options -image::images/maint-07-notifications.png[Notification center] +image::images/maint-07-notifications.png[Notification center options] The two choices are to get notifications over "`Email`" and over "`Web`" and you can choose either, neither or both for when you actively participate in things and for activity on repositories you are watching. @@ -345,7 +345,7 @@ If you have a file named `CONTRIBUTING` with any file extension, GitHub will sho [[_contrib_file]] .Opening a Pull Request when a CONTRIBUTING file exists -image::images/maint-09-contrib.png[Contributing notice] +image::images/maint-09-contrib.png[Opening a Pull Request when a CONTRIBUTING file exists] The idea here is that you can specify specific things you want or don't want in a Pull Request sent to your project. This way people may actually read the guidelines before opening the Pull Request. @@ -360,7 +360,7 @@ If you are using a branch other than "`master`" as your default branch that you [[_default_branch]] .Change the default branch for a project -image::images/maint-10-default-branch.png[Default branch] +image::images/maint-10-default-branch.png[Change the default branch for a project] Simply change the default branch in the dropdown and that will be the default for all major operations from then on, including which branch is checked out by default when someone clones the repository. @@ -370,7 +370,7 @@ If you would like to transfer a project to another user or an organization in Gi [[_transfer_project]] .Transfer a project to another GitHub user or Organization -image::images/maint-11-transfer.png[Transfer] +image::images/maint-11-transfer.png[Transfer a project to another GitHub user or Organization] This is helpful if you are abandoning a project and someone wants to take it over, or if your project is getting bigger and want to move it into an organization. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 9a9f40bf..143d20e3 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -17,7 +17,7 @@ Under the "`Webhooks and Services`" tab you will see something like <<_services_ [[_services_hooks]] .Services and Hooks configuration section -image::images/scripting-01-services.png[Services and hooks] +image::images/scripting-01-services.png[Services and Hooks configuration section] There are dozens of services you can choose from, most of them integrations into other commercial and open source systems. Most of them are for Continuous Integration services, bug and issue trackers, chat room systems and documentation systems. @@ -26,7 +26,7 @@ If you choose "`email`" from the "`Add Service`" dropdown, you'll get a configur [[_service_config]] .Email service configuration -image::images/scripting-02-email-service.png[Email service] +image::images/scripting-02-email-service.png[Email service configuration] In this case, if we hit the "`Add service`" button, the email address we specified will get an email every time someone pushes to the repository. Services can listen for lots of different types of events, but most only listen for push events and then do something with that data. @@ -47,7 +47,7 @@ This will bring you to a page that looks like <<_web_hook>>. [[_web_hook]] .Web hook configuration -image::images/scripting-03-webhook.png[Web hook] +image::images/scripting-03-webhook.png[Web hook configuration] The configuration for a web hook is pretty simple. In most cases you simply enter a URL and a secret key and hit "`Add webhook`". @@ -103,7 +103,7 @@ This makes it incredibly easy to test and debug your hooks. [[_web_hook_debug]] .Web hook debugging information -image::images/scripting-04-webhook-debug.png[Webhook debug] +image::images/scripting-04-webhook-debug.png[Web hook debugging information] The other great feature of this is that you can redeliver any of the payloads to test your service easily. @@ -176,7 +176,7 @@ You can generate this from the "`Applications`" tab of your settings page. [[_access_token]] .Generate your access token from the "`Applications`" tab of your settings page -image::images/scripting-05-access-token.png[Access Token] +image::images/scripting-05-access-token.png[Generate your access token from the “Applications” tab of your settings page] It will ask you which scopes you want for this token and a description. Make sure to use a good description so you feel comfortable removing the token when your script or application is no longer used. @@ -219,7 +219,7 @@ Now if you go to that issue, you can see the comment that we just successfully p [[_api_comment]] .A comment posted from the GitHub API -image::images/scripting-06-comment.png[API Comment] +image::images/scripting-06-comment.png[A comment posted from the GitHub API] You can use the API to do just about anything you can do on the website -- creating and setting milestones, assigning people to Issues and Pull Requests, creating and changing labels, accessing commit data, creating new commits and branches, opening, closing or merging Pull Requests, creating and editing teams, commenting on lines of code in a Pull Request, searching the site and on and on. @@ -286,7 +286,7 @@ If someone opens a new Pull Request on GitHub and this hook is set up, you may s [[_commit_status]] .Commit status via the API -image::images/scripting-07-status.png[Commit status] +image::images/scripting-07-status.png[Commit status via the API] You can now see a little green check mark next to the commit that has a "`Signed-off-by`" string in the message and a red cross through the one where the author forgot to sign off. You can also see that the Pull Request takes the status of the last commit on the branch and warns you if it is a failure. From 74a4d27be76e8cc4c4a2c2a7890ac637f4c1e349 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sat, 25 Mar 2023 17:23:06 +0100 Subject: [PATCH 365/549] Update URLs --- book/01-introduction/sections/installing.asc | 2 +- book/04-git-server/sections/generating-ssh-key.asc | 2 +- book/04-git-server/sections/hosted.asc | 2 +- book/06-github/sections/5-scripting.asc | 4 ++-- book/07-git-tools/sections/credentials.asc | 4 ++-- book/08-customizing-git/sections/config.asc | 2 +- book/09-git-and-other-scms/sections/import-bzr.asc | 2 +- book/09-git-and-other-scms/sections/import-svn.asc | 2 +- book/A-git-in-other-environments/sections/guis.asc | 4 ++-- book/A-git-in-other-environments/sections/powershell.asc | 6 +++--- book/A-git-in-other-environments/sections/sublimetext.asc | 2 +- book/A-git-in-other-environments/sections/visualstudio.asc | 2 +- .../sections/visualstudiocode.asc | 2 +- book/A-git-in-other-environments/sections/zsh.asc | 4 ++-- 14 files changed, 20 insertions(+), 20 deletions(-) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 09f481b4..5e80ecfc 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -58,7 +58,7 @@ The most official build is available for download on the Git website. Just go to https://git-scm.com/download/win[^] and the download will start automatically. Note that this is a project called Git for Windows, which is separate from Git itself; for more information on it, go to https://gitforwindows.org[^]. -To get an automated installation you can use the https://chocolatey.org/packages/git[Git Chocolatey package^]. +To get an automated installation you can use the https://community.chocolatey.org/packages/git[Git Chocolatey package^]. Note that the Chocolatey package is community maintained. ==== Installing from Source diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index bb4e326c..d1a61daf 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -54,4 +54,4 @@ mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local ---- -For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^]. +For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^]. diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index c199f3b6..54eb7933 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -5,6 +5,6 @@ Doing so offers a number of advantages: a hosting site is generally quick to set Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code -- it's generally easier for the open source community to find and help you with. These days, you have a huge number of hosting options to choose from, each with different advantages and disadvantages. -To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://git.wiki.kernel.org/index.php/GitHosting[^]. +To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitHosting.html[^]. We'll cover using GitHub in detail in <>, as it is the largest Git host out there and you may need to interact with projects hosted on it in any case, but there are dozens more to choose from should you not want to set up your own Git server. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 9a9f40bf..ef727cd6 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -107,7 +107,7 @@ image::images/scripting-04-webhook-debug.png[Webhook debug] The other great feature of this is that you can redeliver any of the payloads to test your service easily. -For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://developer.github.com/webhooks/[^]. +For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://docs.github.com/en/webhooks-and-events/webhooks/about-webhooks[^]. ==== The GitHub API @@ -299,4 +299,4 @@ At the time of this writing, the supported languages include Go, Objective-C, Ru Check out https://github.com/octokit[^] for more information on these, as they handle much of the HTTP for you. Hopefully these tools can help you customize and modify GitHub to work better for your specific workflows. -For complete documentation on the entire API as well as guides for common tasks, check out https://developer.github.com[^]. +For complete documentation on the entire API as well as guides for common tasks, check out https://docs.github.com/[^]. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index f0a42890..1cea5eb2 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -19,9 +19,9 @@ Git has a few options provided in the box: The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. * If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/GitCredentialManager/git-credential-manager/releases/latest[the latest GCM] as a standalone service. +* If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/git-ecosystem/git-credential-manager/releases/latest[the latest GCM] as a standalone service. This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can also serve credentials to WSL1 or WSL2. See https://github.com/GitCredentialManager/git-credential-manager#readme[GCM Install Instructions] for more information. + It can also serve credentials to WSL1 or WSL2. See https://github.com/git-ecosystem/git-credential-manager#readme[GCM Install Instructions] for more information. You can choose one of these methods by setting a Git configuration value: diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 2311dd91..c08c470f 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -253,7 +253,7 @@ We'll demonstrate setting up the Perforce Visual Merge Tool (P4Merge) to do your If you want to try this out, P4Merge works on all major platforms, so you should be able to do so. We'll use path names in the examples that work on macOS and Linux systems; for Windows, you'll have to change `/usr/local/bin` to an executable path in your environment. -To begin, https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools[download P4Merge from Perforce^]. +To begin, https://www.perforce.com/products/helix-core-apps/merge-diff-tool-p4merge[download P4Merge from Perforce^]. Next, you'll set up external wrapper scripts to run your commands. We'll use the macOS path for the executable; in other systems, it will be where your `p4merge` binary is installed. Set up a merge wrapper script named `extMerge` that calls your binary with all the arguments provided: diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index d237fdb1..6cd9d836 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -53,7 +53,7 @@ ImportError: No module named fastimport $ pip install fastimport ---- -If it is not available, you can download it at address https://pypi.python.org/pypi/fastimport/[^]. +If it is not available, you can download it at address https://pypi.org/project/fastimport/[^]. In the second case (on Windows), `bzr-fastimport` is automatically installed with the standalone version and the default installation (let all the checkboxes checked). So in this case you have nothing to do. diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index d01fb95c..1786d795 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -33,7 +33,7 @@ Then, redirect that output into your `users.txt` file so you can add the equival [NOTE] ==== If you're trying this on a Windows machine, this is the point where you'll run into trouble. -Microsoft have provided some good advice and samples at https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[^]. +Microsoft have provided some good advice and samples at https://learn.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[^]. ==== You can provide this file to `git svn` to help it map the author data more accurately. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index c73c12d6..f7a8aca7 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -96,7 +96,7 @@ While they're designed to highlight GitHub's service and recommended workflow, t ===== Installation -GitHub for Windows can be downloaded from https://windows.github.com[^], and GitHub for macOS from https://mac.github.com[^]. +GitHub for Windows and macOS can be downloaded from https://desktop.github.com/[^]. When the applications are first run, they walk you through all the first-time Git setup, such as configuring your name and email address, and both set up sane defaults for many common configuration options, such as credential caches and CRLF behavior. Both are "`evergreen`" – updates are downloaded and installed in the background while the applications are open. @@ -149,4 +149,4 @@ However, if your workflow is different, or you want more control over how and wh There are a number of other graphical Git clients, and they run the gamut from specialized, single-purpose tools all the way to apps that try to expose everything Git can do. The official Git website has a curated list of the most popular clients at https://git-scm.com/downloads/guis[^]. -A more comprehensive list is available on the Git wiki site, at https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces[^]. +A more comprehensive list is available on the Git wiki site, at https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces[^]. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index bc4741b0..3cc32aba 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -21,9 +21,9 @@ With `RemoteSigned`, only scripts having the `ZoneIdentifier` set to `Internet` If you're an administrator and want to set it for all users on that machine, use `-Scope LocalMachine`. If you're a normal user, without administrative rights, you can use `-Scope CurrentUser` to set it only for you. -More about PowerShell Scopes: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[^]. +More about PowerShell Scopes: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes[^]. -More about PowerShell ExecutionPolicy: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[^]. +More about PowerShell ExecutionPolicy: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy[^]. To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the next command: @@ -36,7 +36,7 @@ To set the value of `ExecutionPolicy` to `RemoteSigned` for all users use the ne If you have at least PowerShell 5 or PowerShell 4 with PackageManagement installed, you can use the package manager to install posh-git for you. -More information about PowerShell Gallery: https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview[^]. +More information about PowerShell Gallery: https://learn.microsoft.com/en-us/powershell/scripting/gallery/overview[^]. [source,powershell] ---- diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index 2c4b9bbd..ca7128ce 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -11,4 +11,4 @@ The features are: * You can use part of the Sublime Merge git client functionality from within Sublime Text. This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[^]. -The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/3/git_integration.html[^]. +The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/git_integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index fe5f03d2..f46d575d 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -15,4 +15,4 @@ The tooling supports the following Git functionality: * View diffs. * ... and more! -Read the https://docs.microsoft.com/visualstudio/version-control[official documentation^] to learn more. +Read the https://learn.microsoft.com/en-us/visualstudio/version-control/[official documentation^] to learn more. diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 8abda833..af21d8c0 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -18,4 +18,4 @@ The main features are: * With an extension, you can also handle GitHub Pull Requests: https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[^]. -The official documentation can be found here: https://code.visualstudio.com/Docs/editor/versioncontrol[^]. +The official documentation can be found here: https://code.visualstudio.com/docs/sourcecontrol/overview[^]. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 1227c1ba..0b18c07c 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -40,13 +40,13 @@ It looks a bit like this: .Customized `zsh` prompt image::images/zsh-prompt.png[Customized `zsh` prompt] -For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at https://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[^]. +For more information on `vcs_info`, check out its documentation in the `zshcontrib(1)` manual page, or online at https://zsh.sourceforge.io/Doc/Release/User-Contributions.html#Version-Control-Information[^]. 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. `git-prompt.sh` is compatible with both Bash and Zsh. Zsh is powerful enough that there are entire frameworks dedicated to making it better. -One of them is called "oh-my-zsh", and it can be found at https://github.com/robbyrussell/oh-my-zsh[^]. +One of them is called "oh-my-zsh", and it can be found at https://github.com/ohmyzsh/ohmyzsh[^]. oh-my-zsh's plugin system comes with powerful git tab-completion, and it has a variety of prompt "themes", many of which display version-control data. <> is just one example of what can be done with this system. From b709edcea6818d0356e34ac86056cd68845da55d Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 30 Mar 2023 20:49:13 +0200 Subject: [PATCH 366/549] Fix some spellings Changes: - Add some ending dots. - Use macOS spelling. - Capitalize URL occurrences. --- C-git-commands.asc | 2 +- book/01-introduction/sections/installing.asc | 2 +- book/02-git-basics/sections/viewing-history.asc | 6 +++--- .../sections/basic-branching-and-merging.asc | 2 +- book/04-git-server/sections/gitlab.asc | 4 ++-- book/04-git-server/sections/gitweb.asc | 2 +- book/04-git-server/sections/smart-http.asc | 2 +- book/06-github/sections/2-contributing.asc | 2 +- book/07-git-tools/sections/credentials.asc | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 1181ca24..551b8a9f 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -51,7 +51,7 @@ Accompanying the configuration instructions in <>, |============================== |Editor | Configuration command |Atom |`git config --global core.editor "atom --wait"` -|BBEdit (Mac, with command line tools) |`git config --global core.editor "bbedit -w"` +|BBEdit (macOS, with command line tools) |`git config --global core.editor "bbedit -w"` |Emacs |`git config --global core.editor emacs` |Gedit (Linux) |`git config --global core.editor "gedit --wait --new-window"` |Gvim (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'"` (Also see note below) diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 14820874..d4f6dcbd 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -34,7 +34,7 @@ For more options, there are instructions for installing on several different Uni ==== Installing on macOS (((macOS, installing))) -There are several ways to install Git on a Mac. +There are several ways to install Git on macOS. The easiest is probably to install the Xcode Command Line Tools.(((Xcode))) On Mavericks (10.9) or above you can do this simply by trying to run `git` from the Terminal the very first time. diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 2818cca3..3a32c767 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -276,13 +276,13 @@ In <> we'll list these and a few other common options for your re [cols="2,4",options="header"] |================================ | Option | Description -| `-` | Show only the last n commits +| `-` | Show only the last n commits. | `--since`, `--after` | Limit the commits to those made after the specified date. | `--until`, `--before` | Limit the commits to those made before the specified date. | `--author` | Only show commits in which the author entry matches the specified string. | `--committer` | Only show commits in which the committer entry matches the specified string. -| `--grep` | Only show commits with a commit message containing the string -| `-S` | Only show commits adding or removing code matching the string +| `--grep` | Only show commits with a commit message containing the string. +| `-S` | Only show commits adding or removing code matching the string. |================================ For example, if you want to see which commits modifying test files in the Git source code history were committed by Junio Hamano in the month of October 2008 and are not merge commits, you can run something like this:(((log filtering))) diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index a1aa0179..a894b670 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -265,7 +265,7 @@ Normal merge conflict for 'index.html': Hit return to start merge resolution tool (opendiff): ---- -If you want to use a merge tool other than the default (Git chose `opendiff` in this case because the command was run on a Mac), you can see all the supported tools listed at the top after "`one of the following tools.`" +If you want to use a merge tool other than the default (Git chose `opendiff` in this case because the command was run on macOS), you can see all the supported tools listed at the top after "`one of the following tools.`" Just type the name of the tool you'd rather use. [NOTE] diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index ae3c6cb2..e6ce8905 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -37,7 +37,7 @@ image::images/gitlab-menu.png[The “Admin area” item in the GitLab menu] Everybody using your GitLab server must have a user account. User accounts are quite simple, they mainly contain personal information attached to login data. Each user account has a *namespace*, which is a logical grouping of projects that belong to that user. -If the user +jane+ had a project named +project+, that project's url would be `http://server/jane/project`. +If the user +jane+ had a project named +project+, that project's URL would be `http://server/jane/project`. [[gitlab_users]] .The GitLab user administration screen @@ -54,7 +54,7 @@ This is obviously a much more permanent and destructive action, and you will rar ===== Groups A GitLab group is a collection of projects, along with data about how users can access those projects. -Each group has a project namespace (the same way that users do), so if the group +training+ has a project +materials+, its url would be `http://server/training/materials`. +Each group has a project namespace (the same way that users do), so if the group +training+ has a project +materials+, its URL would be `http://server/training/materials`. [[gitlab_groups]] .The GitLab group administration screen diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index bbd62c77..1565dc49 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -10,7 +10,7 @@ image::images/git-instaweb.png[The GitWeb web-based user interface] If you want to check out what GitWeb would look like for your project, Git comes with a command to fire up a temporary instance if you have a lightweight web server on your system like `lighttpd` or `webrick`. On Linux machines, `lighttpd` is often installed, so you may be able to get it to run by typing `git instaweb` in your project directory. -If you're running a Mac, Leopard comes preinstalled with Ruby, so `webrick` may be your best bet. +If you're running macOS, Leopard comes preinstalled with Ruby, so `webrick` may be your best bet. To start `instaweb` with a non-lighttpd handler, you can run it with the `--httpd` option.(((git commands, instaweb))) [source,console] diff --git a/book/04-git-server/sections/smart-http.asc b/book/04-git-server/sections/smart-http.asc index 2d7b2bd0..753d34cd 100644 --- a/book/04-git-server/sections/smart-http.asc +++ b/book/04-git-server/sections/smart-http.asc @@ -68,5 +68,5 @@ You can do this with nearly any CGI-capable web server, so go with the one that [NOTE] ==== -For more information on configuring authentication in Apache, check out the Apache docs here: https://httpd.apache.org/docs/current/howto/auth.html[^] +For more information on configuring authentication in Apache, check out the Apache docs here: https://httpd.apache.org/docs/current/howto/auth.html[^]. ==== diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 1c5928a6..30d39415 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -52,7 +52,7 @@ Let's walk through an example of proposing a change to an open source project ho [TIP] ==== You can use the official *GitHub CLI* tool instead of the GitHub web interface for most things. -The tool can be used on Windows, MacOS, and Linux systems. +The tool can be used on Windows, macOS, and Linux systems. Go to the https://cli.github.com/[GitHub CLI homepage^] for installation instructions and the manual. ==== diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 1cea5eb2..e143d32d 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -17,7 +17,7 @@ Git has a few options provided in the box: * The "`store`" mode saves the credentials to a plain-text file on disk, and they never expire. This means that until you change your password for the Git host, you won't ever have to type in your credentials again. The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. -* If you're using a Mac, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. +* If you're using macOS, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. * If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/git-ecosystem/git-credential-manager/releases/latest[the latest GCM] as a standalone service. This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. From 157f2c6a01d0e1c6833ff4c63a0c79b4685883e7 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 30 Mar 2023 21:16:56 +0200 Subject: [PATCH 367/549] Sync apostrophe character --- book/07-git-tools/sections/advanced-merging.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index 1fdf6d58..f8dfb4d9 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -580,8 +580,8 @@ The history with the revert commit looks like this: .History after `git revert -m 1` image::images/undomerge-revert.png[History after `git revert -m 1`] -The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in `HEAD`’s history. -Git will get confused if you try to merge `topic` into `master` again: +The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in ``HEAD```'s history. +Git will get confused if you try to merge ``topic`` into ``master`` again: [source,console] ---- From abccc6c5921710cc21e33be780d5085095cc1aa7 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Wed, 5 Apr 2023 20:53:24 +0200 Subject: [PATCH 368/549] Fix some grammar typos --- book/04-git-server/sections/gitlab.asc | 2 +- book/05-distributed-git/sections/contributing.asc | 2 +- book/06-github/sections/3-maintaining.asc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index e6ce8905..27148ccb 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -17,7 +17,7 @@ The other installation options are: * GitLab Helm chart, for use with Kubernetes. * Dockerized GitLab packages for use with Docker. * From the source files. -* Cloud provider such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. +* Cloud providers such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme^]. diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 657f1443..2c6b0851 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -253,7 +253,7 @@ Date: Fri May 29 16:01:27 2009 -0700 Remove invalid default value ---- -The `issue54..origin/master` syntax is a log filter that asks Git to display only those commits that are on the latter branch (in this case `origin/master`) that are not on the first branch (in this case `issue54`). +The `issue54..origin/master` syntax is a log filter that asks Git to display only those commits that are on the latter branch (in this case `origin/master`) and that are not on the first branch (in this case `issue54`). We'll go over this syntax in detail in <>. From the above output, we can see that there is a single commit that John has made that Jessica has not merged into her local work. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index b5c76927..9a3d3ee1 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -310,7 +310,7 @@ X-GitHub-Recipient-Address: tchacon@example.com There are a couple of interesting things here. If you want to highlight or re-route emails to this particular project or even Pull Request, the information in `Message-ID` gives you all the data in `///` format. -If this were an issue, for example, the `` field would have been "`issues`" rather than "`pull`". +If this was an issue, for example, the `` field would have been "`issues`" rather than "`pull`". The `List-Post` and `List-Unsubscribe` fields mean that if you have a mail client that understands those, you can easily post to the list or "`Unsubscribe`" from the thread. That would be essentially the same as clicking the "`mute`" button on the web version of the notification or "`Unsubscribe`" on the Issue or Pull Request page itself. From 22d79cc780d75301e6ca72b4f550c1e5dc98f596 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Wed, 5 Apr 2023 21:01:30 +0200 Subject: [PATCH 369/549] Fix whitespace - One sentence per line. - List indentation synced. - Normal space compared to character U+00a0 is similar but more common. - Some doubled new lines synced and removed. - Few double whitespaces synced. --- B-embedding-git-in-your-applications.asc | 1 - C-git-commands.asc | 5 ----- .../sections/about-version-control.asc | 2 +- book/01-introduction/sections/help.asc | 1 - book/01-introduction/sections/history.asc | 10 +++++----- .../sections/recording-changes.asc | 10 +++++----- .../sections/branch-management.asc | 2 +- book/03-git-branching/sections/nutshell.asc | 3 ++- book/04-git-server/sections/protocols.asc | 5 +++-- book/06-github/sections/2-contributing.asc | 4 +--- book/06-github/sections/3-maintaining.asc | 1 - book/06-github/sections/5-scripting.asc | 1 - book/07-git-tools/sections/bundling.asc | 2 +- book/07-git-tools/sections/credentials.asc | 3 ++- book/07-git-tools/sections/submodules.asc | 2 +- book/08-customizing-git/sections/config.asc | 1 + .../sections/client-hg.asc | 19 +++++++++---------- .../sections/client-p4.asc | 12 ++++++------ .../sections/import-custom.asc | 1 - .../10-git-internals/sections/environment.asc | 7 ------- book/10-git-internals/sections/objects.asc | 3 +-- .../sections/guis.asc | 1 - .../sections/powershell.asc | 2 +- .../sections/sublimetext.asc | 3 ++- book/B-embedding-git/sections/dulwich.asc | 1 - book/contributors.asc | 1 - book/preface_schacon.asc | 1 - 27 files changed, 42 insertions(+), 62 deletions(-) diff --git a/B-embedding-git-in-your-applications.asc b/B-embedding-git-in-your-applications.asc index 782e177d..f3e60297 100644 --- a/B-embedding-git-in-your-applications.asc +++ b/B-embedding-git-in-your-applications.asc @@ -17,4 +17,3 @@ include::book/B-embedding-git/sections/jgit.asc[] include::book/B-embedding-git/sections/go-git.asc[] include::book/B-embedding-git/sections/dulwich.asc[] - diff --git a/C-git-commands.asc b/C-git-commands.asc index 551b8a9f..bd3dd186 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -86,7 +86,6 @@ While we're giving a rough overview of most of the more popular ones in this app We introduced the `git help` command in <> and showed you how to use it to find more information about the `git shell` in <>. - === Getting and Creating Projects There are two ways to get a Git repository. @@ -121,7 +120,6 @@ Finally, in <> we learn the `--recurse-submo Though it's used in many other places through the book, these are the ones that are somewhat unique or where it is used in ways that are a little different. - === Basic Snapshotting For the basic workflow of staging content and committing it to your history, there are only a few basic commands. @@ -314,7 +312,6 @@ This command is introduced and covered in detail in <>. - === Sharing and Updating Projects There are not very many commands in Git that access the network, nearly all of the commands operate on the local database. @@ -416,7 +413,6 @@ It's a way to get a description of a commit that is as unambiguous as a commit S We use `git describe` in <> and <> to get a string to name our release file after. - === Debugging Git has a couple of commands that are used to help debug an issue in your code. @@ -571,7 +567,6 @@ In <> we explain the command and exp In <> we use it to fix up imported external repositories. - === Plumbing Commands There were also quite a number of lower level plumbing commands that we encountered in the book. diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 98a8f883..5db49fb1 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -30,7 +30,7 @@ https://www.gnu.org/software/rcs/[RCS^] works by keeping patch sets (that is, th (((version control,centralized))) The next major issue that people encounter is that they need to collaborate with developers on other systems. To deal with this problem, Centralized Version Control Systems (CVCSs) were developed. -These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place. (((CVS)))(((Subversion)))(((Perforce))) +These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place.(((CVS)))(((Subversion)))(((Perforce))) For many years, this has been the standard for version control. .Centralized version control diagram diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index e1fb4d7e..ce553409 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -47,4 +47,3 @@ usage: git add [] [--] ... --pathspec-from-file read pathspec from file --pathspec-file-nul with --pathspec-from-file, pathspec elements are separated with NUL character ---- - diff --git a/book/01-introduction/sections/history.asc b/book/01-introduction/sections/history.asc index b564c56b..7ab05fd3 100644 --- a/book/01-introduction/sections/history.asc +++ b/book/01-introduction/sections/history.asc @@ -10,11 +10,11 @@ In 2005, the relationship between the community that developed the Linux kernel This prompted the Linux development community (and in particular Linus Torvalds, the creator of Linux) to develop their own tool based on some of the lessons they learned while using BitKeeper.(((Linus Torvalds))) Some of the goals of the new system were as follows: -* Speed -* Simple design -* Strong support for non-linear development (thousands of parallel branches) -* Fully distributed -* Able to handle large projects like the Linux kernel efficiently (speed and data size) +* Speed +* Simple design +* Strong support for non-linear development (thousands of parallel branches) +* Fully distributed +* Able to handle large projects like the Linux kernel efficiently (speed and data size) Since its birth in 2005, Git has evolved and matured to be easy to use and yet retain these initial qualities. It's amazingly fast, it's very efficient with large projects, and it has an incredible branching system for non-linear development (see <>). diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index f344bb8b..8bcd785f 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -228,11 +228,11 @@ Setting up a `.gitignore` file for your new repository before you get going is g The rules for the patterns you can put in the `.gitignore` file are as follows: -* Blank lines or lines starting with `#` are ignored. -* Standard glob patterns work, and will be applied recursively throughout the entire working tree. -* You can start patterns with a forward slash (`/`) to avoid recursivity. -* You can end patterns with a forward slash (`/`) to specify a directory. -* You can negate a pattern by starting it with an exclamation point (`!`). +* Blank lines or lines starting with `#` are ignored. +* Standard glob patterns work, and will be applied recursively throughout the entire working tree. +* You can start patterns with a forward slash (`/`) to avoid recursivity. +* You can end patterns with a forward slash (`/`) to specify a directory. +* You can negate a pattern by starting it with an exclamation point (`!`). Glob patterns are like simplified regular expressions that shells use. An asterisk (`\*`) matches zero or more characters; `[abc]` matches any character inside the brackets (in this case a, b, or c); a question mark (`?`) matches a single character; and brackets enclosing characters separated by a hyphen (`[0-9]`) matches any character between them (in this case 0 through 9). diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 45db820b..30f7d1bf 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -64,7 +64,7 @@ If you really do want to delete the branch and lose that work, you can force it ==== The options described above, `--merged` and `--no-merged` will, if not given a commit or branch name as an argument, show you what is, respectively, merged or not merged into your _current_ branch. -You can always provide an additional argument to ask about the merge state with respect to some other branch without checking that other branch out first, as in, what is not merged into the `master` branch? +You can always provide an additional argument to ask about the merge state with respect to some other branch without checking that other branch out first, as in, what is not merged into the `master` branch? [source,console] ---- $ git checkout testing diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index e4e983a1..94ba37ff 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -204,6 +204,7 @@ It's typical to create a new branch and want to switch to that new branch at the From Git version 2.23 onwards you can use `git switch` instead of `git checkout` to: - Switch to an existing branch: `git switch testing-branch`. -- Create a new branch and switch to it: `git switch -c new-branch`. The `-c` flag stands for create, you can also use the full flag: `--create`. +- Create a new branch and switch to it: `git switch -c new-branch`. + The `-c` flag stands for create, you can also use the full flag: `--create`. - Return to your previously checked out branch: `git switch -`. ==== diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index 08ad0f32..fd108870 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -198,9 +198,10 @@ It uses the same data-transfer mechanism as the SSH protocol but without the enc Due to the lack of TLS or other cryptography, cloning over `git://` might lead to an arbitrary code execution vulnerability, and should therefore be avoided unless you know what you are doing. -* If you run `git clone git://example.com/project.git`, an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. If you then compile/run the code you just cloned, you will execute the malicious code. +* If you run `git clone git://example.com/project.git`, an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. + If you then compile/run the code you just cloned, you will execute the malicious code. Running `git clone http://example.com/project.git` should be avoided for the same reason. -* Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). +* Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong ssh key fingerprint. It also has no authentication, i.e. anyone can clone the repo (although this is often exactly what you want). diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 30d39415..5f7f4517 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -25,7 +25,6 @@ image::images/forkbutton.png[The “Fork” button] After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. - [[ch06-github_flow]] ==== The GitHub Flow @@ -339,7 +338,7 @@ Again, you can reference commits in forks or other repositories in the same way ==== GitHub Flavored Markdown Linking to other Issues is just the beginning of interesting things you can do with almost any text box on GitHub. -In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called "`GitHub Flavored Markdown`". +In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called "`GitHub Flavored Markdown`". Markdown is like writing in plain text but which is rendered richly. See <<_example_markdown>> for an example of how comments or text can be written and then rendered using Markdown. @@ -466,7 +465,6 @@ image::images/markdown-07-emoji.png[Heavy emoji commenting] Not that this is incredibly useful, but it does add an element of fun and emotion to a medium that is otherwise hard to convey emotion in. - [NOTE] ==== There are actually quite a number of web services that make use of emoji characters these days. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index b5c76927..da0e923d 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -218,7 +218,6 @@ The eagle-eyed among you would note the `head` on the end of the remote portion There's also a `refs/pull/#/merge` ref on the GitHub side, which represents the commit that would result if you push the "`merge`" button on the site. This can allow you to test the merge before even hitting the button. - ===== Pull Requests on Pull Requests Not only can you open Pull Requests that target the main or `master` branch, you can actually open a Pull Request targeting any branch in the network. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 3bd1d2e4..c755afa1 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -165,7 +165,6 @@ hs_err_pid* } ---- - ==== Commenting on an Issue However, if you want to do an action on the website such as comment on an Issue or Pull Request or if you want to view or interact with private content, you'll need to authenticate. diff --git a/book/07-git-tools/sections/bundling.asc b/book/07-git-tools/sections/bundling.asc index f0752173..79cb1b8a 100644 --- a/book/07-git-tools/sections/bundling.asc +++ b/book/07-git-tools/sections/bundling.asc @@ -80,7 +80,7 @@ b1ec324 First commit First we need to determine the range of commits we want to include in the bundle. Unlike the network protocols which figure out the minimum set of data to transfer over the network for us, we'll have to figure this out manually. - Now, you could just do the same thing and bundle the entire repository, which will work, but it's better to just bundle up the difference - just the three commits we just made locally. +Now, you could just do the same thing and bundle the entire repository, which will work, but it's better to just bundle up the difference - just the three commits we just made locally. In order to do that, you'll have to calculate the difference. As we described in <>, you can specify a range of commits in a number of ways. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index e143d32d..38b746a8 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -21,7 +21,8 @@ Git has a few options provided in the box: This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. * If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/git-ecosystem/git-credential-manager/releases/latest[the latest GCM] as a standalone service. This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can also serve credentials to WSL1 or WSL2. See https://github.com/git-ecosystem/git-credential-manager#readme[GCM Install Instructions] for more information. + It can also serve credentials to WSL1 or WSL2. + See https://github.com/git-ecosystem/git-credential-manager#readme[GCM Install Instructions] for more information. You can choose one of these methods by setting a Git configuration value: diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 35f9e5f2..ad3a9053 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -434,7 +434,7 @@ nothing to commit, working tree clean Note that to be on the safe side, you should run `git submodule update` with the `--init` flag in case the MainProject commits you just pulled added new submodules, and with the `--recursive` flag if any submodules have nested submodules. -If you want to automate this process, you can add the `--recurse-submodules` flag to the `git pull` command (since Git 2.14). +If you want to automate this process, you can add the `--recurse-submodules` flag to the `git pull` command (since Git 2.14). This will make Git run `git submodule update` right after the pull, putting the submodules in the correct state. Moreover, if you want to make Git always pull with `--recurse-submodules`, you can set the configuration option `submodule.recurse` to true (this works for `git pull` since Git 2.15). This option will make Git use the `--recurse-submodules` flag for all commands that support it (except `clone`). diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index c08c470f..7d5262b7 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -302,6 +302,7 @@ $ git config --global mergetool.extMerge.cmd \ $ git config --global mergetool.extMerge.trustExitCode false $ git config --global diff.external extDiff ---- + or you can edit your `~/.gitconfig` file to add these lines: [source,ini] diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index d6afbfd6..3de7ff29 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -74,18 +74,18 @@ Let's take a look at what's actually in the `.git` directory: $ tree .git/refs .git/refs ├── heads -│   └── master +│ └── master ├── hg -│   └── origin -│   ├── bookmarks -│   │   └── master -│   └── branches -│   └── default +│ └── origin +│ ├── bookmarks +│ │ └── master +│ └── branches +│ └── default ├── notes -│   └── hg +│ └── hg ├── remotes -│   └── origin -│   └── HEAD +│ └── origin +│ └── HEAD └── tags 9 directories, 5 files @@ -390,7 +390,6 @@ o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm Changesets _8_, _9_, and _10_ have been created and belong to the `permanent` branch, but the old changesets are still there. This can be *very* confusing for your teammates who are using Mercurial, so try to avoid it. - ===== Mercurial Summary Git and Mercurial are similar enough that working across the boundary is fairly painless. diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index b12f190a..3e5bafe7 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -83,15 +83,15 @@ The file structure looks like this: $ tree . ├── objects -│   ├── repos -│   │   └── [...] -│   └── trees -│   └── [...] +│ ├── repos +│ │ └── [...] +│ └── trees +│ └── [...] │ ├── p4gf_config ├── repos -│   └── Talkhouse -│   └── p4gf_config +│ └── Talkhouse +│ └── p4gf_config └── users └── p4gf_usermap diff --git a/book/09-git-and-other-scms/sections/import-custom.asc b/book/09-git-and-other-scms/sections/import-custom.asc index e3e58ff5..1da24a2d 100644 --- a/book/09-git-and-other-scms/sections/import-custom.asc +++ b/book/09-git-and-other-scms/sections/import-custom.asc @@ -204,7 +204,6 @@ $stdout.binmode That's it. Here's the script in its entirety: - [source,ruby] ---- #!/usr/bin/env ruby diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index 1eab01fe..847a160f 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -4,7 +4,6 @@ Git always runs inside a `bash` shell, and uses a number of shell environment va Occasionally, it comes in handy to know what these are, and how they can be used to make Git behave the way you want it to. This isn't an exhaustive list of all the environment variables Git pays attention to, but we'll cover the most useful. - ==== Global Behavior Some of Git's general behavior as a computer program depends on environment variables. @@ -27,7 +26,6 @@ If this is unset, `PAGER` will be used as a fallback. *`GIT_EDITOR`* is the editor Git will launch when the user needs to edit some text (a commit message, for example). If unset, `EDITOR` will be used. - ==== Repository Locations Git uses several environment variables to determine how it interfaces with the current repository. @@ -48,7 +46,6 @@ If `--git-dir` or `GIT_DIR` is specified but none of `--work-tree`, `GIT_WORK_TR *`GIT_ALTERNATE_OBJECT_DIRECTORIES`* is a colon-separated list (formatted like `/dir/one:/dir/two:…`) which tells Git where to check for objects if they aren't in `GIT_OBJECT_DIRECTORY`. If you happen to have a lot of projects with large files that have the exact same contents, this can be used to avoid storing too many copies of them. - ==== Pathspecs A "`pathspec`" refers to how you specify paths to things in Git, including the use of wildcards. @@ -62,7 +59,6 @@ You can override this in individual cases by starting the pathspec with `:(glob) *`GIT_ICASE_PATHSPECS`* sets all pathspecs to work in a case-insensitive manner. - ==== Committing The final creation of a Git commit object is usually done by `git-commit-tree`, which uses these environment variables as its primary source of information, falling back to configuration values only if these aren't present. @@ -82,7 +78,6 @@ The final creation of a Git commit object is usually done by `git-commit-tree`, *`EMAIL`* is the fallback email address in case the `user.email` configuration value isn't set. If _this_ isn't set, Git falls back to the system user and host names. - ==== Networking Git uses the `curl` library to do network operations over HTTP, so *`GIT_CURL_VERBOSE`* tells Git to emit all the messages generated by that library. @@ -91,14 +86,12 @@ This is similar to doing `curl -v` on the command line. *`GIT_SSL_NO_VERIFY`* tells Git not to verify SSL certificates. This can sometimes be necessary if you're using a self-signed certificate to serve Git repositories over HTTPS, or you're in the middle of setting up a Git server but haven't installed a full certificate yet. - If the data rate of an HTTP operation is lower than *`GIT_HTTP_LOW_SPEED_LIMIT`* bytes per second for longer than *`GIT_HTTP_LOW_SPEED_TIME`* seconds, Git will abort that operation. These values override the `http.lowSpeedLimit` and `http.lowSpeedTime` configuration values. *`GIT_HTTP_USER_AGENT`* sets the user-agent string used by Git when communicating over HTTP. The default is a value like `git/2.0.0`. - ==== Diffing and Merging *`GIT_DIFF_OPTS`* is a bit of a misnomer. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 5660a0ca..40e1984c 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -257,7 +257,6 @@ $ echo 'First commit' | git commit-tree d8329f fdf4fc3344e67ab068f836878b6c4951e3b15f3d ---- - [NOTE] ==== You will get a different hash value because of different creation time and author data. @@ -366,7 +365,7 @@ $ irb ---- Git first constructs a header which starts by identifying the type of object -- in this case, a blob. -To that first part of the header, Git adds a space followed by the size in bytes of the content, and adding a final null byte: +To that first part of the header, Git adds a space followed by the size in bytes of the content, and adding a final null byte: [source,console] ---- diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index f7a8aca7..cfe3b91b 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -144,7 +144,6 @@ These tools are very well-suited for the workflow they're designed for. Developers and non-developers alike can be collaborating on a project within minutes, and many of the best practices for this kind of workflow are baked into the tools. However, if your workflow is different, or you want more control over how and when network operations are done, we recommend you use another client or the command line. - ==== Other GUIs There are a number of other graphical Git clients, and they run the gamut from specialized, single-purpose tools all the way to apps that try to expose everything Git can do. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 3cc32aba..b6092e3f 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -61,7 +61,7 @@ To include git information in your prompt, the posh-git module needs to be impor To have posh-git imported every time PowerShell starts, execute the `Add-PoshGitToProfile` command which will add the import statement into your `$profile` script. This script is executed everytime you open a new PowerShell console. Keep in mind, that there are multiple `$profile` scripts. -E. g. one for the console and a separate one for the ISE. +E.g. one for the console and a separate one for the ISE. [source,powershell] ---- diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index ca7128ce..29a84e06 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -9,6 +9,7 @@ The features are: * In the status bar, you can see the current git branch and how many modifications you have made. * All changes to a file are now visible via markers in the gutter. * You can use part of the Sublime Merge git client functionality from within Sublime Text. - This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[^]. + This requires that Sublime Merge is installed. + See: https://www.sublimemerge.com/[^]. The official documentation for Sublime Text can be found here: https://www.sublimetext.com/docs/git_integration.html[^]. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 75f722d7..9e84b433 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -37,7 +37,6 @@ porcelain.log('.', max_entries=1) #Date: Sat Apr 29 2017 23:57:34 +0000 ---- - ==== Further Reading The API documentation, tutorial, and many examples of how to do specific tasks with Dulwich are available on the official website https://www.dulwich.io[^]. diff --git a/book/contributors.asc b/book/contributors.asc index 8bfa48a7..32acb1e0 100644 --- a/book/contributors.asc +++ b/book/contributors.asc @@ -9,4 +9,3 @@ Thank you everyone for helping make this a better book for everyone. ---- include::contributors.txt[] ---- - diff --git a/book/preface_schacon.asc b/book/preface_schacon.asc index 29d78e5e..bf31c08c 100644 --- a/book/preface_schacon.asc +++ b/book/preface_schacon.asc @@ -33,4 +33,3 @@ It's been amazing to watch Git grow over the past few years from a relatively ob I'm happy that Pro Git has done so well and has also been able to be one of the few technical books on the market that is both quite successful and fully open source. I hope you enjoy this updated edition of Pro Git. - From dcb0cbdcf70c9f7c32a439cab88482c46430ae70 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 7 Apr 2023 08:49:43 -0700 Subject: [PATCH 370/549] empty commit to force release From 2ff9461fbb5b81c61a9d0b20358e03924220e16a Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sat, 8 Apr 2023 00:51:08 +0200 Subject: [PATCH 371/549] Fix closing bracket --- book/07-git-tools/sections/revision-selection.asc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 62bd076e..95e8e830 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -74,10 +74,8 @@ If you try to check out that object again at some point, you'll always get the d However, you should be aware of how ridiculously unlikely this scenario is. The SHA-1 digest is 20 bytes or 160 bits. -The number of randomly hashed objects needed to ensure a 50% probability of a single collision is about 2^80^ -(the formula for determining collision probability is `p = (n(n-1)/2) * (1/2^160))`. 2^80^ -is 1.2 x 10^24^ -or 1 million billion billion. +The number of randomly hashed objects needed to ensure a 50% probability of a single collision is about 2^80^ (the formula for determining collision probability is `p = (n(n-1)/2) * (1/2^160)`). +2^80^ is 1.2 x 10^24^ or 1 million billion billion. That's 1,200 times the number of grains of sand on the earth. Here's an example to give you an idea of what it would take to get a SHA-1 collision. From 767d6c4689fd0a9209d6f388adae51c003b8ecaf Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 10 Apr 2023 17:09:57 +0200 Subject: [PATCH 372/549] Add image captions in Rerere section --- book/07-git-tools/sections/rerere.asc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/book/07-git-tools/sections/rerere.asc b/book/07-git-tools/sections/rerere.asc index 35a65d14..dd3e60ea 100644 --- a/book/07-git-tools/sections/rerere.asc +++ b/book/07-git-tools/sections/rerere.asc @@ -38,7 +38,8 @@ end In one branch we change the word "`hello`" to "`hola`", then in another branch we change the "`world`" to "`mundo`", just like before. -image::images/rerere1.png[] +.Two branches changing the same part of the same file differently +image::images/rerere1.png[Two branches changing the same part of the same file differently] When we merge the two branches together, we'll get a merge conflict: @@ -143,7 +144,8 @@ Recorded resolution for 'hello.rb'. You can see that it "Recorded resolution for FILE". -image::images/rerere2.png[] +.Recorded resolution for FILE +image::images/rerere2.png[Recorded resolution for FILE] Now, let's undo that merge and then rebase it on top of our `master` branch instead. We can move our branch back by using `git reset` as we saw in <>. @@ -205,7 +207,8 @@ index a440db6,54336ba..0000000 end ---- -image::images/rerere3.png[] +.Automatically resolved merge conflict using previous resolution +image::images/rerere3.png[Automatically resolved merge conflict using previous resolution] You can also recreate the conflicted file state with `git checkout`: From ecb17c6ff779a5bfa5bdda248f86b774d3061ef1 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 10 Apr 2023 17:58:40 +0200 Subject: [PATCH 373/549] Capitalize Git --- TRANSLATING.md | 2 +- book/02-git-basics/sections/remotes.asc | 4 ++-- book/09-git-and-other-scms/sections/import-bzr.asc | 2 +- book/10-git-internals/sections/refs.asc | 2 +- book/A-git-in-other-environments/sections/jetbrainsides.asc | 2 +- book/A-git-in-other-environments/sections/powershell.asc | 2 +- book/A-git-in-other-environments/sections/sublimetext.asc | 6 +++--- .../sections/visualstudiocode.asc | 4 ++-- book/A-git-in-other-environments/sections/zsh.asc | 2 +- book/B-embedding-git/sections/dulwich.asc | 4 ++-- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/TRANSLATING.md b/TRANSLATING.md index 6c8b3aad..1c867092 100644 --- a/TRANSLATING.md +++ b/TRANSLATING.md @@ -8,7 +8,7 @@ Pro Git is a book about a technical tool, therefore translating it is difficult The following are guidelines to help you on your way: * Before you begin, read the whole Git Pro book in English, so that you're aware of the content, and are familiar with the style used. -* Ensure you have a good working knowledge of git, so that explaining the technical terms is doable. +* Ensure you have a good working knowledge of Git, so that explaining the technical terms is doable. * Stick to a common style and format for the translation. * Be sure to read and understand the basics of [Asciidoc formatting](https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/). Not following the asciidoc syntax can lead to problems with building/compilation of the pdf, epub and html files needed for the book. diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 85ab6c84..2deb8fba 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -129,10 +129,10 @@ Running `git pull` generally fetches data from the server you originally cloned [NOTE] ==== -From git version 2.27 onward, `git pull` will give a warning if the `pull.rebase` variable is not set. +From Git version 2.27 onward, `git pull` will give a warning if the `pull.rebase` variable is not set. Git will keep warning you until you set the variable. -If you want the default behavior of git (fast-forward if possible, else create a merge commit): +If you want the default behavior of Git (fast-forward if possible, else create a merge commit): `git config --global pull.rebase "false"` If you want to rebase when pulling: diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index 6cd9d836..6931a380 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -98,7 +98,7 @@ $ git init git-repo $ cd git-repo ---- -Pull the `master` branch into git: +Pull the `master` branch into Git: [source,console] ---- diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index aa713b83..c8319084 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -73,7 +73,7 @@ The answer is the HEAD file. Usually the HEAD file is a symbolic reference to the branch you're currently on. By symbolic reference, we mean that unlike a normal reference, it contains a pointer to another reference. -However in some rare cases the HEAD file may contain the SHA-1 value of a git object. +However in some rare cases the HEAD file may contain the SHA-1 value of a Git object. This happens when you checkout a tag, commit, or remote branch, which puts your repository in https://git-scm.com/docs/git-checkout#_detached_head["detached HEAD"^] state. If you look at the file, you'll normally see something like this: diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index 94f881df..b7d1f5b1 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -6,5 +6,5 @@ It provides a dedicated view in the IDE to work with Git and GitHub Pull Request .Version Control ToolWindow in JetBrains IDEs image::images/jb.png[Version Control ToolWindow in JetBrains IDEs] -The integration relies on the command-line git client, and requires one to be installed. +The integration relies on the command-line Git client, and requires one to be installed. The official documentation is available at https://www.jetbrains.com/help/idea/using-git-integration.html[^]. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index b6092e3f..e51fe0d5 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -57,7 +57,7 @@ This happens, because the modules that ship with Windows PowerShell are signed w ===== Update PowerShell Prompt -To include git information in your prompt, the posh-git module needs to be imported. +To include Git information in your prompt, the posh-git module needs to be imported. To have posh-git imported every time PowerShell starts, execute the `Add-PoshGitToProfile` command which will add the import statement into your `$profile` script. This script is executed everytime you open a new PowerShell console. Keep in mind, that there are multiple `$profile` scripts. diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index 29a84e06..f72b05b8 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -1,14 +1,14 @@ === Git in Sublime Text -From version 3.2 onwards, Sublime Text has git integration in the editor. +From version 3.2 onwards, Sublime Text has Git integration in the editor. The features are: * The sidebar will show the git status of files and folders with a badge/icon. * Files and folders that are in your .gitignore file will be faded out in the sidebar. -* In the status bar, you can see the current git branch and how many modifications you have made. +* In the status bar, you can see the current Git branch and how many modifications you have made. * All changes to a file are now visible via markers in the gutter. -* You can use part of the Sublime Merge git client functionality from within Sublime Text. +* You can use part of the Sublime Merge Git client functionality from within Sublime Text. This requires that Sublime Merge is installed. See: https://www.sublimemerge.com/[^]. diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index af21d8c0..d4de8b37 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -1,7 +1,7 @@ === Git in Visual Studio Code -Visual Studio Code has git support built in. -You will need to have git version 2.0.0 (or newer) installed. +Visual Studio Code has Git support built in. +You will need to have Git version 2.0.0 (or newer) installed. The main features are: diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 0b18c07c..4e18f904 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -47,7 +47,7 @@ Instead of `vcs_info`, you might prefer the prompt customization script that shi Zsh is powerful enough that there are entire frameworks dedicated to making it better. One of them is called "oh-my-zsh", and it can be found at https://github.com/ohmyzsh/ohmyzsh[^]. -oh-my-zsh's plugin system comes with powerful git tab-completion, and it has a variety of prompt "themes", many of which display version-control data. +oh-my-zsh's plugin system comes with powerful Git tab-completion, and it has a variety of prompt "themes", many of which display version-control data. <> is just one example of what can be done with this system. [[oh_my_zsh_git]] diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index 9e84b433..62cab950 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -3,10 +3,10 @@ (((Dulwich)))(((Python))) There is also a pure-Python Git implementation - Dulwich. The project is hosted under https://www.dulwich.io/[^]. -It aims to provide an interface to git repositories (both local and remote) that doesn't call out to git directly but instead uses pure Python. +It aims to provide an interface to Git repositories (both local and remote) that doesn't call out to Git directly but instead uses pure Python. It has an optional C extensions though, that significantly improve the performance. -Dulwich follows git design and separate two basic levels of API: plumbing and porcelain. +Dulwich follows Git design and separate two basic levels of API: plumbing and porcelain. Here is an example of using the lower level API to access the commit message of the last commit: From 8b0f83402aab7394ce9d3a9892909be4def435ba Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 10 Apr 2023 20:48:54 +0200 Subject: [PATCH 374/549] Add image captions in Reset Demystified section --- book/07-git-tools/sections/reset.asc | 54 ++++++++++++++++++---------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index bb4c01b5..e8fb3055 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -92,23 +92,27 @@ $ tree Git's typical workflow is to record snapshots of your project in successively better states, by manipulating these three trees. -image::images/reset-workflow.png[] +.Git's typical workflow +image::images/reset-workflow.png[Git's typical workflow] Let's visualize this process: say you go into a new directory with a single file in it. We'll call this *v1* of the file, and we'll indicate it in blue. Now we run `git init`, which will create a Git repository with a HEAD reference which points to the unborn `master` branch. -image::images/reset-ex1.png[] +.Newly-initialized Git repository with unstaged file in the working directory +image::images/reset-ex1.png[Newly-initialized Git repository with unstaged file in the working directory] At this point, only the working directory tree has any content. Now we want to commit this file, so we use `git add` to take content in the working directory and copy it to the index. -image::images/reset-ex2.png[] +.File is copied to index on `git add` +image::images/reset-ex2.png[File is copied to index on `git add`] Then we run `git commit`, which takes the contents of the index and saves it as a permanent snapshot, creates a commit object which points to that snapshot, and updates `master` to point to that commit. -image::images/reset-ex3.png[] +.The `git commit` step +image::images/reset-ex3.png[The `git commit` step] If we run `git status`, we'll see no changes, because all three trees are the same. @@ -116,17 +120,20 @@ Now we want to make a change to that file and commit it. We'll go through the same process; first, we change the file in our working directory. Let's call this *v2* of the file, and indicate it in red. -image::images/reset-ex4.png[] +.Git repository with changed file in the working directory +image::images/reset-ex4.png[Git repository with changed file in the working directory] If we run `git status` right now, we'll see the file in red as "`Changes not staged for commit`", because that entry differs between the index and the working directory. Next we run `git add` on it to stage it into our index. -image::images/reset-ex5.png[] +.Staging change to index +image::images/reset-ex5.png[Staging change to index] At this point, if we run `git status`, we will see the file in green under "`Changes to be committed`" because the index and HEAD differ -- that is, our proposed next commit is now different from our last commit. Finally, we run `git commit` to finalize the commit. -image::images/reset-ex6.png[] +.The `git commit` step with changed file +image::images/reset-ex6.png[The `git commit` step with changed file] Now `git status` will give us no output, because all three trees are the same again. @@ -140,7 +147,8 @@ The `reset` command makes more sense when viewed in this context. For the purposes of these examples, let's say that we've modified `file.txt` again and committed it a third time. So now our history looks like this: -image::images/reset-start.png[] +.Git repository with three commits +image::images/reset-start.png[Git repository with three commits] Let's now walk through exactly what `reset` does when you call it. It directly manipulates these three trees in a simple and predictable way. @@ -152,7 +160,8 @@ The first thing `reset` will do is move what HEAD points to. This isn't the same as changing HEAD itself (which is what `checkout` does); `reset` moves the branch that HEAD is pointing to. This means if HEAD is set to the `master` branch (i.e. you're currently on the `master` branch), running `git reset 9e5e6a4` will start by making `master` point to `9e5e6a4`. -image::images/reset-soft.png[] +.Soft reset +image::images/reset-soft.png[Soft reset] No matter what form of `reset` with a commit you invoke, this is the first thing it will always try to do. With `reset --soft`, it will simply stop there. @@ -168,7 +177,8 @@ Note that if you run `git status` now you'll see in green the difference between The next thing `reset` will do is to update the index with the contents of whatever snapshot HEAD now points to. -image::images/reset-mixed.png[] +.Mixed reset +image::images/reset-mixed.png[Mixed reset] If you specify the `--mixed` option, `reset` will stop at this point. This is also the default, so if you specify no option at all (just `git reset HEAD~` in this case), this is where the command will stop. @@ -181,7 +191,8 @@ You rolled back to before you ran all your `git add` and `git commit` commands. The third thing that `reset` will do is to make the working directory look like the index. If you use the `--hard` option, it will continue to this stage. -image::images/reset-hard.png[] +.Hard reset +image::images/reset-hard.png[Hard reset] So let's think about what just happened. You undid your last commit, the `git add` and `git commit` commands, *and* all the work you did in your working directory. @@ -213,19 +224,22 @@ This form (since you did not specify a commit SHA-1 or branch, and you didn't sp So it essentially just copies `file.txt` from HEAD to the index. -image::images/reset-path1.png[] +.Mixed reset with a path +image::images/reset-path1.png[Mixed reset with a path] This has the practical effect of _unstaging_ the file. If we look at the diagram for that command and think about what `git add` does, they are exact opposites. -image::images/reset-path2.png[] +.Staging file to index +image::images/reset-path2.png[Staging file to index] This is why the output of the `git status` command suggests that you run this to unstage a file (see <> for more on this). We could just as easily not let Git assume we meant "`pull the data from HEAD`" by specifying a specific commit to pull that file version from. We would just run something like `git reset eb43bf file.txt`. -image::images/reset-path3.png[] +.Soft reset with a path to a specific commit +image::images/reset-path3.png[Soft reset with a path to a specific commit] This effectively does the same thing as if we had reverted the content of the file to *v1* in the working directory, ran `git add` on it, then reverted it back to *v3* again (without actually going through all those steps). If we run `git commit` now, it will record a change that reverts that file back to *v1*, even though we never actually had it in our working directory again. @@ -244,15 +258,18 @@ You can use `reset` to quickly and easily squash them into a single commit that Let's say you have a project where the first commit has one file, the second commit added a new file and changed the first, and the third commit changed the first file again. The second commit was a work in progress and you want to squash it down. -image::images/reset-squash-r1.png[] +.Git repository +image::images/reset-squash-r1.png[Git repository] You can run `git reset --soft HEAD~2` to move the HEAD branch back to an older commit (the most recent commit you want to keep): -image::images/reset-squash-r2.png[] +.Moving HEAD with soft reset +image::images/reset-squash-r2.png[Moving HEAD with soft reset] And then simply run `git commit` again: -image::images/reset-squash-r3.png[] +.Git repository with squashed commit +image::images/reset-squash-r3.png[Git repository with squashed commit] Now you can see that your reachable history, the history you would push, now looks like you had one commit with `file-a.txt` v1, then a second that both modified `file-a.txt` to v3 and added `file-b.txt`. The commit with the v2 version of the file is no longer in the history. @@ -281,7 +298,8 @@ HEAD will now point to `master`. So, in both cases we're moving HEAD to point to commit A, but _how_ we do so is very different. `reset` will move the branch HEAD points to, `checkout` moves HEAD itself. -image::images/reset-checkout.png[] +.`git checkout` and `git reset` +image::images/reset-checkout.png[`git checkout` and `git reset`] ===== With Paths From 5c2cc3f8b3e4c933507e0bd42786353d705593c3 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Tue, 11 Apr 2023 18:07:50 +0200 Subject: [PATCH 375/549] Add cross reference for changing master --- book/03-git-branching/sections/branch-management.asc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 30f7d1bf..ae81e89a 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -79,7 +79,7 @@ $ git branch --no-merged master [CAUTION] ==== Do not rename branches that are still in use by other collaborators. -Do not rename a branch like master/main/mainline without having read the section "Changing the master branch name". +Do not rename a branch like master/main/mainline without having read the section <<_changing_master>>. ==== Suppose you have a branch that is called `bad-branch-name` and you want to change it to `corrected-branch-name`, while keeping all history. @@ -123,6 +123,7 @@ $ git push origin --delete bad-branch-name Now the bad branch name is fully replaced with the corrected branch name. +[[_changing_master]] ===== Changing the master branch name [WARNING] From 32f21b2d88da93427e15ca17fadbc17b31ac1f80 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 10 Apr 2023 16:45:32 +0200 Subject: [PATCH 376/549] Add more text formatting --- .../sections/viewing-history.asc | 10 ++++----- book/03-git-branching/sections/rebasing.asc | 22 +++++++++---------- .../sections/maintaining.asc | 6 ++--- book/06-github/sections/2-contributing.asc | 2 +- book/06-github/sections/3-maintaining.asc | 2 +- book/07-git-tools/sections/credentials.asc | 2 +- book/07-git-tools/sections/reset.asc | 8 +++---- .../sections/rewriting-history.asc | 2 +- .../sections/stashing-cleaning.asc | 6 ++--- book/07-git-tools/sections/submodules.asc | 12 +++++----- book/08-customizing-git/sections/hooks.asc | 4 ++-- .../sections/client-bzr.asc | 8 +++---- .../sections/client-hg.asc | 2 +- .../sections/client-p4.asc | 2 +- .../10-git-internals/sections/maintenance.asc | 4 ++-- book/10-git-internals/sections/objects.asc | 2 +- .../sections/transfer-protocols.asc | 2 +- .../sections/guis.asc | 2 +- .../sections/sublimetext.asc | 4 ++-- .../sections/zsh.asc | 2 +- book/B-embedding-git/sections/jgit.asc | 2 +- 21 files changed, 53 insertions(+), 53 deletions(-) diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 3a32c767..e3f069e7 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -170,7 +170,7 @@ a11bef0 - Scott Chacon, 6 years ago : Initial commit | `%p` | Abbreviated parent hashes | `%an` | Author name | `%ae` | Author email -| `%ad` | Author date (format respects the --date=option) +| `%ad` | Author date (format respects the `--date=option`) | `%ar` | Author date, relative | `%cn` | Committer name | `%ce` | Committer email @@ -205,7 +205,7 @@ $ git log --pretty=format:"%h %s" --graph This type of output will become more interesting as we go through branching and merging in the next chapter. Those are only some simple output-formatting options to `git log` -- there are many more. -<> lists the options we've covered so far, as well as some other common formatting options that may be useful, along with how they change the output of the log command. +<> lists the options we've covered so far, as well as some other common formatting options that may be useful, along with how they change the output of the `log` command. [[log_options]] .Common options to `git log` @@ -214,13 +214,13 @@ Those are only some simple output-formatting options to `git log` -- there are m | Option | Description | `-p` | Show the patch introduced with each commit. | `--stat` | Show statistics for files modified in each commit. -| `--shortstat` | Display only the changed/insertions/deletions line from the --stat command. +| `--shortstat` | Display only the changed/insertions/deletions line from the `--stat` command. | `--name-only` | Show the list of files modified after the commit information. | `--name-status` | Show the list of files affected with added/modified/deleted information as well. | `--abbrev-commit` | Show only the first few characters of the SHA-1 checksum instead of all 40. | `--relative-date` | Display the date in a relative format (for example, "`2 weeks ago`") instead of using the full date format. | `--graph` | Display an ASCII graph of the branch and merge history beside the log output. -| `--pretty` | Show commits in an alternate format. Option values include oneline, short, full, fuller, and format (where you specify your own format). +| `--pretty` | Show commits in an alternate format. Option values include `oneline`, `short`, `full`, `fuller`, and `format` (where you specify your own format). | `--oneline` | Shorthand for `--pretty=oneline --abbrev-commit` used together. |================================ @@ -305,5 +305,5 @@ Of the nearly 40,000 commits in the Git source code history, this command shows .Preventing the display of merge commits ==== Depending on the workflow used in your repository, it's possible that a sizable percentage of the commits in your log history are just merge commits, which typically aren't very informative. -To prevent the display of merge commits cluttering up your log history, simply add the log option `--no-merges`. +To prevent the display of merge commits cluttering up your log history, simply add the `log` option `--no-merges`. ==== diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index 354ae133..c6653524 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -66,7 +66,7 @@ You can also have your rebase replay on something other than the rebase target b Take a history like <>, for example. You branched a topic branch (`server`) to add some server-side functionality to your project, and made a commit. Then, you branched off that to make the client-side changes (`client`) and committed a few times. -Finally, you went back to your server branch and did a few more commits. +Finally, you went back to your `server` branch and did a few more commits. [[rbdiag_e]] .A history with a topic branch off another topic branch @@ -95,10 +95,10 @@ $ git merge client ---- [[rbdiag_g]] -.Fast-forwarding your `master` branch to include the client branch changes -image::images/interesting-rebase-3.png[Fast-forwarding your `master` branch to include the client branch changes] +.Fast-forwarding your `master` branch to include the `client` branch changes +image::images/interesting-rebase-3.png[Fast-forwarding your `master` branch to include the `client` branch changes] -Let's say you decide to pull in your server branch as well. +Let's say you decide to pull in your `server` branch as well. You can rebase the `server` branch onto the `master` branch without having to check it out first by running `git rebase ` -- which checks out the topic branch (in this case, `server`) for you and replays it onto the base branch (`master`): [source,console] @@ -109,8 +109,8 @@ $ git rebase master server This replays your `server` work on top of your `master` work, as shown in <>. [[rbdiag_h]] -.Rebasing your server branch on top of your `master` branch -image::images/interesting-rebase-4.png[Rebasing your server branch on top of your `master` branch] +.Rebasing your `server` branch on top of your `master` branch +image::images/interesting-rebase-4.png[Rebasing your `server` branch on top of your `master` branch] Then, you can fast-forward the base branch (`master`): @@ -190,9 +190,9 @@ If you pull down work that was rewritten and rebase it on top of the new commits For instance, in the previous scenario, if instead of doing a merge when we're at <<_pre_merge_rebase_work>> we run `git rebase teamone/master`, Git will: -* Determine what work is unique to our branch (C2, C3, C4, C6, C7) -* Determine which are not merge commits (C2, C3, C4) -* Determine which have not been rewritten into the target branch (just C2 and C3, since C4 is the same patch as C4') +* Determine what work is unique to our branch (`C2`, `C3`, `C4`, `C6`, `C7`) +* Determine which are not merge commits (`C2`, `C3`, `C4`) +* Determine which have not been rewritten into the target branch (just `C2` and `C3`, since `C4` is the same patch as `C4'`) * Apply those commits to the top of `teamone/master` So instead of the result we see in <<_merge_rebase_work>>, we would end up with something more like <<_rebase_rebase_work>>. @@ -202,7 +202,7 @@ So instead of the result we see in <<_merge_rebase_work>>, we would end up with image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work] This only works if `C4` and `C4'` that your partner made are almost exactly the same patch. -Otherwise the rebase won't be able to tell that it's a duplicate and will add another C4-like patch (which will probably fail to apply cleanly, since the changes would already be at least somewhat there). +Otherwise the rebase won't be able to tell that it's a duplicate and will add another `C4`-like patch (which will probably fail to apply cleanly, since the changes would already be at least somewhat there). You can also simplify this by running a `git pull --rebase` instead of a normal `git pull`. Or you could do it manually with a `git fetch` followed by a `git rebase teamone/master` in this case. @@ -230,7 +230,7 @@ That's how it happened, and the repository should preserve that for posterity. The opposing point of view is that the commit history is the *story of how your project was made.* You wouldn't publish the first draft of a book, so why show your messy work? When you're working on a project, you may need a record of all your missteps and dead-end paths, but when it's time to show your work to the world, you may want to tell a more coherent story of how to get from A to B. -People in this camp use tools like rebase and filter-branch to rewrite their commits before they're merged into the mainline branch. +People in this camp use tools like `rebase` and `filter-branch` to rewrite their commits before they're merged into the mainline branch. They use tools like `rebase` and `filter-branch`, to tell the story in the way that's best for future readers. Now, to the question of whether merging or rebasing is better: hopefully you'll see that it's not that simple. diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index 9596de5d..c377bb68 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -35,7 +35,7 @@ Now you're ready to add the contributed work that you received into this topic b If you receive a patch over email that you need to integrate into your project, you need to apply the patch in your topic branch to evaluate it. There are two ways to apply an emailed patch: with `git apply` or with `git am`. -===== Applying a Patch with apply +===== Applying a Patch with `apply` (((git commands, apply))) If you received the patch from someone who generated it with `git diff` or some variation of the Unix `diff` command (which is not recommended; see the next section), you can apply it with the `git apply` command. @@ -533,7 +533,7 @@ You now have a nice tarball and a zip archive of your project release that you c (((git commands, shortlog))) It's time to email your mailing list of people who want to know what's happening in your project. A nice way of quickly getting a sort of changelog of what has been added to your project since your last release or email is to use the `git shortlog` command. -It summarizes all the commits in the range you give it; for example, the following gives you a summary of all the commits since your last release, if your last release was named v1.0.1: +It summarizes all the commits in the range you give it; for example, the following gives you a summary of all the commits since your last release, if your last release was named `v1.0.1`: [source,console] ---- @@ -553,4 +553,4 @@ Tom Preston-Werner (4): Regenerated gemspec for version 1.0.2 ---- -You get a clean summary of all the commits since v1.0.1, grouped by author, that you can email to your list. +You get a clean summary of all the commits since `v1.0.1`, grouped by author, that you can email to your list. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 5f7f4517..1dffbd9a 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -42,7 +42,7 @@ Here's how it generally works: 5. Open a Pull Request on GitHub. 6. Discuss, and optionally continue committing. 7. The project owner merges or closes the Pull Request. -8. Sync the updated master back to your fork. +8. Sync the updated `master` back to your fork. This is basically the Integration Manager workflow covered in <>, but instead of using email to communicate and review changes, teams use GitHub's web based tools. diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index a7891303..2505e86a 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -324,7 +324,7 @@ There are a couple of special files that GitHub will notice if they are present The first is the `README` file, which can be of nearly any format that GitHub recognizes as prose. For example, it could be `README`, `README.md`, `README.asciidoc`, etc. -If GitHub sees a README file in your source, it will render it on the landing page of the project. +If GitHub sees a `README` file in your source, it will render it on the landing page of the project. Many teams use this file to hold all the relevant project information for someone who might be new to the repository or project. This generally includes things like: diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 38b746a8..7c7bc6ed 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -116,7 +116,7 @@ For the `get` action, however, Git is very interested in what the helper has to If the helper doesn't know anything useful, it can simply exit with no output, but if it does know, it should augment the provided information with the information it has stored. The output is treated like a series of assignment statements; anything provided will replace what Git already knows. -Here's the same example from above, but skipping git-credential and going straight for git-credential-store: +Here's the same example from above, but skipping `git-credential` and going straight for `git-credential-store`: [source,console] ---- diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index bb4c01b5..99187b98 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -162,7 +162,7 @@ When you run `git commit`, Git creates a new commit and moves the branch that HE When you `reset` back to `HEAD~` (the parent of HEAD), you are moving the branch back to where it was, without changing the index or working directory. You could now update the index and run `git commit` again to accomplish what `git commit --amend` would have done (see <<_git_amend>>). -===== Step 2: Updating the Index (--mixed) +===== Step 2: Updating the Index (`--mixed`) Note that if you run `git status` now you'll see in green the difference between the index and what the new HEAD is. @@ -176,7 +176,7 @@ This is also the default, so if you specify no option at all (just `git reset HE Now take another second to look at that diagram and realize what happened: it still undid your last `commit`, but also _unstaged_ everything. You rolled back to before you ran all your `git add` and `git commit` commands. -===== Step 3: Updating the Working Directory (--hard) +===== Step 3: Updating the Working Directory (`--hard`) The third thing that `reset` will do is to make the working directory look like the index. If you use the `--hard` option, it will continue to this stage. @@ -254,8 +254,8 @@ And then simply run `git commit` again: image::images/reset-squash-r3.png[] -Now you can see that your reachable history, the history you would push, now looks like you had one commit with `file-a.txt` v1, then a second that both modified `file-a.txt` to v3 and added `file-b.txt`. -The commit with the v2 version of the file is no longer in the history. +Now you can see that your reachable history, the history you would push, now looks like you had one commit with `file-a.txt` *v1*, then a second that both modified `file-a.txt` to *v3* and added `file-b.txt`. +The commit with the *v2* version of the file is no longer in the history. ==== Check It Out diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 5ce98575..7fbb06d7 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -166,7 +166,7 @@ $ git rebase --continue ---- This command will apply the other two commits automatically, and then you're done. -If you change pick to edit on more lines, you can repeat these steps for each commit you change to edit. +If you change `pick` to `edit` on more lines, you can repeat these steps for each commit you change to `edit`. Each time, Git will stop, let you amend the commit, and continue when you're finished. ==== Reordering Commits diff --git a/book/07-git-tools/sections/stashing-cleaning.asc b/book/07-git-tools/sections/stashing-cleaning.asc index f15b7c0c..7337895c 100644 --- a/book/07-git-tools/sections/stashing-cleaning.asc +++ b/book/07-git-tools/sections/stashing-cleaning.asc @@ -114,7 +114,7 @@ Changes not staged for commit: modified: lib/simplegit.rb ---- -The apply option only tries to apply the stashed work -- you continue to have it on your stack. +The `apply` option only tries to apply the stashed work -- you continue to have it on your stack. To remove it, you can run `git stash drop` with the name of the stash to remove: [source,console] @@ -249,7 +249,7 @@ Would remove tmp/ By default, the `git clean` command will only remove untracked files that are not ignored. Any file that matches a pattern in your `.gitignore` or other ignore files will not be removed. -If you want to remove those files too, such as to remove all `.o` files generated from a build so you can do a fully clean build, you can add a `-x` to the clean command. +If you want to remove those files too, such as to remove all `.o` files generated from a build so you can do a fully clean build, you can add a `-x` to the `clean` command. [source,console] ---- @@ -271,7 +271,7 @@ Would remove tmp/ If you don't know what the `git clean` command is going to do, always run it with a `-n` first to double check before changing the `-n` to a `-f` and doing it for real. The other way you can be careful about the process is to run it with the `-i` or "`interactive`" flag. -This will run the clean command in an interactive mode. +This will run the `clean` command in an interactive mode. [source,console] ---- diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index ad3a9053..47096120 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -264,7 +264,7 @@ Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0 This command will by default assume that you want to update the checkout to the default branch of the remote submodule repository (the one pointed to by `HEAD` on the remote). You can, however, set this to something different if you want. -For example, if you want to have the DbConnector submodule track that repository's "`stable`" branch, you can set it in either your `.gitmodules` file (so everyone else also tracks it), or just in your local `.git/config` file. +For example, if you want to have the `DbConnector` submodule track that repository's "`stable`" branch, you can set it in either your `.gitmodules` file (so everyone else also tracks it), or just in your local `.git/config` file. Let's set it in the `.gitmodules` file: [source,console] @@ -418,7 +418,7 @@ no changes added to commit (use "git add" and/or "git commit -a") By default, the `git pull` command recursively fetches submodules changes, as we can see in the output of the first command above. However, it does not *update* the submodules. This is shown by the output of the `git status` command, which shows the submodule is "`modified`", and has "`new commits`". -What's more, the brackets showing the new commits point left (<), indicating that these commits are recorded in MainProject but are not present in the local DbConnector checkout. +What's more, the brackets showing the new commits point left (<), indicating that these commits are recorded in MainProject but are not present in the local `DbConnector` checkout. To finalize the update, you need to run `git submodule update`: [source,console] @@ -436,7 +436,7 @@ Note that to be on the safe side, you should run `git submodule update` with the If you want to automate this process, you can add the `--recurse-submodules` flag to the `git pull` command (since Git 2.14). This will make Git run `git submodule update` right after the pull, putting the submodules in the correct state. -Moreover, if you want to make Git always pull with `--recurse-submodules`, you can set the configuration option `submodule.recurse` to true (this works for `git pull` since Git 2.15). +Moreover, if you want to make Git always pull with `--recurse-submodules`, you can set the configuration option `submodule.recurse` to `true` (this works for `git pull` since Git 2.15). This option will make Git use the `--recurse-submodules` flag for all commands that support it (except `clone`). There is a special situation that can happen when pulling superproject updates: it could be that the upstream repository has changed the URL of the submodule in the `.gitmodules` file in one of the commits you pull. @@ -499,7 +499,7 @@ Fast-forward Submodule path 'DbConnector': merged in '92c7337b30ef9e0893e758dac2459d07362ab5ea' ---- -If we go into the DbConnector directory, we have the new changes already merged into our local `stable` branch. +If we go into the `DbConnector` directory, we have the new changes already merged into our local `stable` branch. Now let's see what happens when we make our own local change to the library and someone else pushes another change to the upstream at the same time. [source,console] @@ -532,7 +532,7 @@ Submodule path 'DbConnector': checked out '5d60ef9bbebf5a0c1c1050f242ceeb54ad58d If this happens, don't worry, you can simply go back into the directory and check out your branch again (which will still contain your work) and merge or rebase `origin/stable` (or whatever remote branch you want) manually. -If you haven't committed your changes in your submodule and you run a submodule update that would cause issues, Git will fetch the changes but not overwrite unsaved work in your submodule directory. +If you haven't committed your changes in your submodule and you run a `submodule update` that would cause issues, Git will fetch the changes but not overwrite unsaved work in your submodule directory. [source,console] ---- @@ -632,7 +632,7 @@ To https://github.com/chaconinc/MainProject 3d6d338..9a377d1 master -> master ---- -As you can see there, Git went into the DbConnector module and pushed it before pushing the main project. +As you can see there, Git went into the `DbConnector` module and pushed it before pushing the main project. If that submodule push fails for some reason, the main project push will also fail. You can make this behavior the default by doing `git config push.recurseSubmodules on-demand`. diff --git a/book/08-customizing-git/sections/hooks.asc b/book/08-customizing-git/sections/hooks.asc index a0140c01..f447d633 100644 --- a/book/08-customizing-git/sections/hooks.asc +++ b/book/08-customizing-git/sections/hooks.asc @@ -114,9 +114,9 @@ You can use this hook to do things like make sure none of the updated references ===== `update` The `update` script is very similar to the `pre-receive` script, except that it's run once for each branch the pusher is trying to update. -If the pusher is trying to push to multiple branches, `pre-receive` runs only once, whereas update runs once per branch they're pushing to. +If the pusher is trying to push to multiple branches, `pre-receive` runs only once, whereas `update` runs once per branch they're pushing to. Instead of reading from stdin, this script takes three arguments: the name of the reference (branch), the SHA-1 that reference pointed to before the push, and the SHA-1 the user is trying to push. -If the update script exits non-zero, only that reference is rejected; other references can still be updated. +If the `update` script exits non-zero, only that reference is rejected; other references can still be updated. ===== `post-receive` diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc index 19566f3b..1194590c 100644 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ b/book/09-git-and-other-scms/sections/client-bzr.asc @@ -9,7 +9,7 @@ Nevertheless, it is possible to work on a Bazaar repository from a Git one. There are many projects that allow you to use Git as a Bazaar client. Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[^]. -To install it, you just have to download the file git-remote-bzr in a folder contained in your `$PATH`: +To install it, you just have to download the file `git-remote-bzr` in a folder contained in your `$PATH`: [source,console] ---- @@ -128,9 +128,9 @@ $ git push origin master Git's remote-helpers framework has some limitations that apply. In particular, these commands don't work: -* git push origin :branch-to-delete (Bazaar can't accept ref deletions in this way) -* git push origin old:new (it will push `old`) -* git push --dry-run origin branch (it will push) +* `git push origin :branch-to-delete` (Bazaar can't accept ref deletions in this way) +* `git push origin old:new` (it will push `old`) +* `git push --dry-run origin branch` (it will push) ===== Summary diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index 3de7ff29..4f794568 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -65,7 +65,7 @@ You'll notice that working with a Mercurial repository uses the standard `git cl That's because git-remote-hg is working at a fairly low level, using a similar mechanism to how Git's HTTP/S protocol is implemented (remote helpers). Since Git and Mercurial are both designed for every client to have a full copy of the repository history, this command makes a full clone, including all the project's history, and does it fairly quickly. -The log command shows two commits, the latest of which is pointed to by a whole slew of refs. +The `log` command shows two commits, the latest of which is pointed to by a whole slew of refs. It turns out some of these aren't actually there. Let's take a look at what's actually in the `.git` directory: diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index 3e5bafe7..e60d45cd 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -557,7 +557,7 @@ $ git log --oneline --all --graph --decorate * 70eaf78 Initial import of //depot/www/live/ from the state at revision #head ---- -The Git and Perforce history diverge after 775a46f. +The Git and Perforce history diverge after `775a46f`. The Git side has two commits, then a merge commit with the Perforce head, then another commit. We're going to try to submit these on top of a single changeset on the Perforce side. Let's see what would happen if we tried to submit now: diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index e27f58be..d4e53081 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -11,7 +11,7 @@ Most of the time, this command does nothing. However, if there are too many loose objects (objects not in a packfile) or too many packfiles, Git launches a full-fledged `git gc` command. The "`gc`" stands for garbage collect, and the command does a number of things: it gathers up all the loose objects and places them in packfiles, it consolidates packfiles into one big packfile, and it removes objects that aren't reachable from any commit and are a few months old. -You can run auto gc manually as follows: +You can run `auto gc` manually as follows: [source,console] ---- @@ -19,7 +19,7 @@ $ git gc --auto ---- Again, this generally does nothing. -You must have around 7,000 loose objects or more than 50 packfiles for Git to fire up a real gc command. +You must have around 7,000 loose objects or more than 50 packfiles for Git to fire up a real `gc` command. You can modify these limits with the `gc.auto` and `gc.autopacklimit` config settings, respectively. The other thing `gc` will do is pack up your references into a single file. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 40e1984c..3182d9f9 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -150,7 +150,7 @@ $ git cat-file -p 99f1a6d12cb4b6f19c8655fca46c3ecf317074e0 Depending on what shell you use, you may encounter errors when using the `master^{tree}` syntax. In CMD on Windows, the `^` character is used for escaping, so you have to double it to avoid this: `git cat-file -p master^^{tree}`. -When using PowerShell, parameters using {} characters have to be quoted to avoid the parameter being parsed incorrectly: `git cat-file -p 'master^{tree}'`. +When using PowerShell, parameters using `{}` characters have to be quoted to avoid the parameter being parsed incorrectly: `git cat-file -p 'master^{tree}'`. If you're using ZSH, the `^` character is used for globbing, so you have to enclose the whole expression in quotes: `git cat-file -p "master^{tree}"`. ==== diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index 2a127ab6..44e6a39a 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -174,7 +174,7 @@ For instance, if you're updating the `master` branch and adding an `experiment` Git sends a line for each reference you're updating with the line's length, the old SHA-1, the new SHA-1, and the reference that is being updated. The first line also has the client's capabilities. -The SHA-1 value of all '0's means that nothing was there before – because you're adding the experiment reference. +The SHA-1 value of all '0's means that nothing was there before – because you're adding the `experiment` reference. If you were deleting a reference, you would see the opposite: all '0's on the right side. Next, the client sends a packfile of all the objects the server doesn't have yet. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index cfe3b91b..3c2b6290 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -28,7 +28,7 @@ $ gitk [git log options] ---- Gitk accepts many command-line options, most of which are passed through to the underlying `git log` action. -Probably one of the most useful is the `--all` flag, which tells gitk to show commits reachable from _any_ ref, not just HEAD. +Probably one of the most useful is the `--all` flag, which tells `gitk` to show commits reachable from _any_ ref, not just HEAD. Gitk's interface looks like this: .The `gitk` history viewer diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index f72b05b8..b303fca9 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -4,8 +4,8 @@ From version 3.2 onwards, Sublime Text has Git integration in the editor. The features are: -* The sidebar will show the git status of files and folders with a badge/icon. -* Files and folders that are in your .gitignore file will be faded out in the sidebar. +* The sidebar will show the `git status` of files and folders with a badge/icon. +* Files and folders that are in your `.gitignore` file will be faded out in the sidebar. * In the status bar, you can see the current Git branch and how many modifications you have made. * All changes to a file are now visible via markers in the gutter. * You can use part of the Sublime Merge Git client functionality from within Sublime Text. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 4e18f904..c0578a95 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -34,7 +34,7 @@ zstyle ':vcs_info:git:*' formats '%b' ---- This results in a display of the current branch on the right-hand side of the terminal window, whenever your shell is inside a Git repository. -The left side is supported as well, of course; just uncomment the assignment to PROMPT. +The left side is supported as well, of course; just uncomment the assignment to `PROMPT`. It looks a bit like this: .Customized `zsh` prompt diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index acebb6f2..fc042563 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -8,7 +8,7 @@ The JGit project is under the Eclipse umbrella, and its home can be found at htt ==== Getting Set Up There are a number of ways to connect your project with JGit and start writing code against it. -Probably the easiest is to use Maven – the integration is accomplished by adding the following snippet to the `` tag in your pom.xml file: +Probably the easiest is to use Maven – the integration is accomplished by adding the following snippet to the `` tag in your `pom.xml` file: [source,xml] ---- From d7fdc7a7f3ec301c92646214b77cc581f3fed705 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 13 Apr 2023 23:18:52 +0200 Subject: [PATCH 377/549] Add more text formatting --- book/08-customizing-git/sections/hooks.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/08-customizing-git/sections/hooks.asc b/book/08-customizing-git/sections/hooks.asc index f447d633..285ba4ff 100644 --- a/book/08-customizing-git/sections/hooks.asc +++ b/book/08-customizing-git/sections/hooks.asc @@ -15,7 +15,7 @@ When you initialize a new repository with `git init`, Git populates the hooks di All the examples are written as shell scripts, with some Perl thrown in, but any properly named executable scripts will work fine – you can write them in Ruby or Python or whatever language you are familiar with. If you want to use the bundled hook scripts, you'll have to rename them; their file names all end with `.sample`. -To enable a hook script, put a file in the `hooks` subdirectory of your .git directory that is named appropriately (without any extension) and is executable. +To enable a hook script, put a file in the `hooks` subdirectory of your `.git` directory that is named appropriately (without any extension) and is executable. From that point forward, it should be called. We'll cover most of the major hook filenames here. From f141f8d870b83e0fe5c71e796c59fd08372cc713 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 14 Apr 2023 17:35:40 +0200 Subject: [PATCH 378/549] Add missing status sections --- status.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/status.json b/status.json index 10f979bb..68b368c6 100644 --- a/status.json +++ b/status.json @@ -85,9 +85,11 @@ }, "09-git-and-other-scms": { "1-git-and-other-scms.asc": 0, + "sections/client-bzr.asc": 0, "sections/client-hg.asc": 0, "sections/client-p4.asc": 0, "sections/client-svn.asc": 0, + "sections/import-bzr.asc": 0, "sections/import-custom.asc": 0, "sections/import-hg.asc": 0, "sections/import-p4.asc": 0, @@ -108,13 +110,18 @@ "1-git-other-environments.asc": 0, "sections/bash.asc": 0, "sections/guis.asc": 0, + "sections/jetbrainsides.asc": 0, "sections/powershell.asc": 0, + "sections/sublimetext.asc": 0, "sections/visualstudio.asc": 0, + "sections/visualstudiocode.asc": 0, "sections/zsh.asc": 0 }, "B-embedding-git": { "1-embedding-git.asc": 0, "sections/command-line.asc": 0, + "sections/dulwich.asc": 0, + "sections/go-git.asc": 0, "sections/jgit.asc": 0, "sections/libgit2.asc": 0 }, From a4dedb890991cd64997cd00c0aa5c817cade8897 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Tue, 18 Apr 2023 14:43:48 +0200 Subject: [PATCH 379/549] Add image captions in Replace section --- book/07-git-tools/sections/replace.asc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/book/07-git-tools/sections/replace.asc b/book/07-git-tools/sections/replace.asc index 5da498f3..fd7c8ecd 100644 --- a/book/07-git-tools/sections/replace.asc +++ b/book/07-git-tools/sections/replace.asc @@ -29,7 +29,8 @@ We want to break this up into two lines of history. One line goes from commit one to commit four - that will be the historical one. The second line will just be commits four and five - that will be the recent history. -image::images/replace1.png[] +.Example Git history +image::images/replace1.png[Example Git history] Well, creating the historical history is easy, we can just put a branch in the history and then push that branch to the `master` branch of a new remote repository. @@ -44,7 +45,8 @@ c6e1e95 (history) Fourth commit c1822cf First commit ---- -image::images/replace2.png[] +.Creating a new `history` branch +image::images/replace2.png[Creating a new `history` branch] Now we can push the new `history` branch to the `master` branch of our new repository: @@ -97,7 +99,8 @@ On occasions when we're doing weirder things like this, they allow us to do real You can read more about plumbing commands in <>. ===== -image::images/replace3.png[] +.Creating a base commit using `commit-tree` +image::images/replace3.png[Creating a base commit using `commit-tree`] OK, so now that we have a base commit, we can rebase the rest of our history on top of that with `git rebase --onto`. The `--onto` argument will be the SHA-1 we just got back from `commit-tree` and the rebase point will be the third commit (the parent of the first commit we want to keep, `9c68fdc`): @@ -110,7 +113,8 @@ Applying: fourth commit Applying: fifth commit ---- -image::images/replace4.png[] +.Rebasing the history on top of the base commit +image::images/replace4.png[Rebasing the history on top of the base commit] OK, so now we've re-written our recent history on top of a throw away base commit that now has instructions in it on how to reconstitute the entire history if we wanted to. We can push that new history to a new project and now when people clone that repository, they will only see the most recent two commits and then a base commit with instructions. @@ -172,7 +176,8 @@ c1822cf First commit Cool, right? Without having to change all the SHA-1s upstream, we were able to replace one commit in our history with an entirely different commit and all the normal tools (`bisect`, `blame`, etc) will work how we would expect them to. -image::images/replace5.png[] +.Combining the commits with `git replace` +image::images/replace5.png[Combining the commits with `git replace`] Interestingly, it still shows `81a708d` as the SHA-1, even though it's actually using the `c6e1e95` commit data that we replaced it with. Even if you run a command like `cat-file`, it will show you the replaced data: From 94a4371bb512347e0f61d9e56157c7d051d27f14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 18:56:43 +0000 Subject: [PATCH 380/549] Update pygments.rb requirement from 2.3.1 to 2.4.0 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.3.1...v2.4.0) --- updated-dependencies: - dependency-name: pygments.rb dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 322c4031..03eb56fb 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '2.3.4' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.3.1' +gem 'pygments.rb', '2.4.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.0.0.0' gem 'html-proofer', '5.0.6' From 56150b901ed1361a32fd2f15cfc5e6ac1fb3ad57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 18:56:52 +0000 Subject: [PATCH 381/549] Update html-proofer requirement from 5.0.6 to 5.0.7 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v5.0.6...v5.0.7) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 322c4031..56c1196d 100644 --- a/Gemfile +++ b/Gemfile @@ -14,5 +14,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.3.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.0.0.0' -gem 'html-proofer', '5.0.6' +gem 'html-proofer', '5.0.7' gem 'kindlegen', '3.1.1' From 22098aee1efcc8ac2a277761dc064a46b58aa06a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:04:49 +0000 Subject: [PATCH 382/549] Update asciidoctor-pdf requirement from 2.3.4 to 2.3.7 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.4...v2.3.7) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 01bfbff5..3ad8ee01 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.4' +gem 'asciidoctor-pdf', '2.3.7' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.0' From 4cf9290b72c4c0867a826145d3bbb75c99ad90ae Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Tue, 25 Apr 2023 10:45:22 -0700 Subject: [PATCH 383/549] Fix misspelled License page heading --- book/license.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/license.asc b/book/license.asc index 490603e1..090996ab 100644 --- a/book/license.asc +++ b/book/license.asc @@ -1,4 +1,4 @@ [preface] -== Licence +== License include::../LICENSE.asc[] From 186753a7738464615aac5f863ac2d77be551adb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Bardaj=C3=AD=20Puig?= Date: Thu, 27 Apr 2023 11:10:47 +0100 Subject: [PATCH 384/549] Update ssh env vars description --- book/10-git-internals/sections/environment.asc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index 847a160f..c3d58430 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -209,8 +209,11 @@ nothing to commit, working directory clean *`GIT_SSH`*, if specified, is a program that is invoked instead of `ssh` when Git tries to connect to an SSH host. It is invoked like `$GIT_SSH [username@]host [-p ] `. -Note that this isn't the easiest way to customize how `ssh` is invoked; it won't support extra command-line parameters, so you'd have to write a wrapper script and set `GIT_SSH` to point to it. -It's probably easier just to use the `~/.ssh/config` file for that. +Note that this isn't the easiest way to customize how `ssh` is invoked; it won't support extra command-line parameters. +To support extra command-line parameters, you can use *`GIT_SSH_COMMAND`*, write a wrapper script and set `GIT_SSH` to point to it or use the `~/.ssh/config` file. + +*`GIT_SSH_COMMAND`* sets the SSH command used when Git tries to connect to an SSH host. +The command is interpreted by the shell, and extra command-line arguments can be used with `ssh`, such as `GIT_SSH_COMMAND="ssh -i ~/.ssh/my_key" git clone git@example.com:my/repo`. *`GIT_ASKPASS`* is an override for the `core.askpass` configuration value. This is the program invoked whenever Git needs to ask the user for credentials, which can expect a text prompt as a command-line argument, and should return the answer on `stdout` (see <> for more on this subsystem). From b6cd0eb0d69c1329b6e78684e984f743320cd70e Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Wed, 19 Apr 2023 20:00:57 +0200 Subject: [PATCH 385/549] Improve contributors list - Add sort to contributors list as in the progit2-pub Rakefile. --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 6e99799f..96dc87e8 100644 --- a/Rakefile +++ b/Rakefile @@ -53,7 +53,7 @@ namespace :book do file 'book/contributors.txt' do puts 'Generating contributors list' sh "echo 'Contributors as of #{header_hash}:\n' > book/contributors.txt" - sh "git shortlog -s HEAD | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | column -c 120 >> book/contributors.txt" + sh "git shortlog -s HEAD | grep -v -E '(Straub|Chacon|dependabot)' | cut -f 2- | sort | column -c 120 >> book/contributors.txt" end desc 'build HTML format' From 3a8462f527aabc49157c9cb65af39f418b662662 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 5 May 2023 08:13:24 +0200 Subject: [PATCH 386/549] Fix grammar and letter case --- book/04-git-server/sections/protocols.asc | 2 +- book/06-github/sections/1-setting-up-account.asc | 2 +- book/07-git-tools/sections/advanced-merging.asc | 2 +- book/09-git-and-other-scms/sections/import-hg.asc | 2 +- book/09-git-and-other-scms/sections/import-svn.asc | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index fd108870..ff226d1e 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -202,7 +202,7 @@ Due to the lack of TLS or other cryptography, cloning over `git://` might lead t If you then compile/run the code you just cloned, you will execute the malicious code. Running `git clone http://example.com/project.git` should be avoided for the same reason. * Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). - Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong ssh key fingerprint. + Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong SSH key fingerprint. It also has no authentication, i.e. anyone can clone the repo (although this is often exactly what you want). It's also probably the most difficult protocol to set up. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 1b447b4c..2ab023ec 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -64,7 +64,7 @@ image::images/avatar-crop.png[Crop your uploaded avatar] Now anywhere you interact on the site, people will see your avatar next to your username. -If you happen to have uploaded an avatar to the popular Gravatar service (often used for Wordpress accounts), that avatar will be used by default and you don't need to do this step. +If you happen to have uploaded an avatar to the popular Gravatar service (often used for WordPress accounts), that avatar will be used by default and you don't need to do this step. ==== Your Email Addresses diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index f8dfb4d9..7ace27bc 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -164,7 +164,7 @@ What we really need to do is run the file we're trying to merge in through a `do So how would we do that? First, we get into the merge conflict state. -Then we want to get copies of my version of the file, their version (from the branch we're merging in) and the common version (from where both sides branched off). +Then we want to get copies of our version of the file, their version (from the branch we're merging in) and the common version (from where both sides branched off). Then we want to fix up either their side or our side and re-try the merge again for just this single file. Getting the three file versions is actually pretty easy. diff --git a/book/09-git-and-other-scms/sections/import-hg.asc b/book/09-git-and-other-scms/sections/import-hg.asc index 132fa8c0..b6d1e194 100644 --- a/book/09-git-and-other-scms/sections/import-hg.asc +++ b/book/09-git-and-other-scms/sections/import-hg.asc @@ -39,7 +39,7 @@ Joe Smith In this example, the same person (Bob) has created changesets under four different names, one of which actually looks correct, and one of which would be completely invalid for a Git commit. Hg-fast-export lets us fix this by turning each line into a rule: `""=""`, mapping an `` to an ``. -Inside the `` and `` strings, all escape sequences understood by the python `string_escape` encoding are supported. +Inside the `` and `` strings, all escape sequences understood by the Python `string_escape` encoding are supported. If the author mapping file does not contain a matching ``, that author will be sent on to Git unmodified. If all the usernames look fine, we won't need this file at all. In this example, we want our file to look like this: diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index 1786d795..5ed4e8f5 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -106,7 +106,7 @@ $ for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git It may happen that you'll see some extra branches which are suffixed by `@xxx` (where xxx is a number), while in Subversion you only see one branch. This is actually a Subversion feature called "`peg-revisions`", which is something that Git simply has no syntactical counterpart for. -Hence, `git svn` simply adds the svn version number to the branch name just in the same way as you would have written it in svn to address the peg-revision of that branch. +Hence, `git svn` simply adds the SVN version number to the branch name just in the same way as you would have written it in SVN to address the peg-revision of that branch. If you do not care anymore about the peg-revisions, simply remove them: [source,console] From 2483bec91082fb9d5490cc1424d480caf0d123d4 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 5 May 2023 08:15:48 +0200 Subject: [PATCH 387/549] Fix one sentence per line --- book/01-introduction/sections/first-time-setup.asc | 3 +-- book/02-git-basics/sections/viewing-history.asc | 5 +---- book/09-git-and-other-scms/sections/import-custom.asc | 2 +- book/10-git-internals/sections/environment.asc | 8 ++++---- book/dedication.asc | 3 +-- book/introduction.asc | 3 +-- 6 files changed, 9 insertions(+), 15 deletions(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index f8913a26..5d092ea6 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -21,8 +21,7 @@ Each level overrides values in the previous level, so values in `.git/config` tr On Windows systems, Git looks for the `.gitconfig` file in the `$HOME` directory (`C:\Users\$USER` for most people). It also still looks for `[path]/etc/gitconfig`, although it's relative to the MSys root, which is wherever you decide to install Git on your Windows system when you run the installer. -If you are using version 2.x or later of Git for Windows, there is also a system-level config file at -`C:\Documents and Settings\All Users\Application Data\Git\config` on Windows XP, and in `C:\ProgramData\Git\config` on Windows Vista and newer. +If you are using version 2.x or later of Git for Windows, there is also a system-level config file at `C:\Documents and Settings\All Users\Application Data\Git\config` on Windows XP, and in `C:\ProgramData\Git\config` on Windows Vista and newer. This config file can only be changed by `git config -f ` as an admin. You can view all of your settings and where they are coming from using: diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index e3f069e7..440c7f25 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -246,10 +246,7 @@ The `--author` option allows you to filter on a specific author, and the `--grep [NOTE] ==== -You can specify more than one instance of both the `--author` and `--grep` search criteria, which -will limit the commit output to commits that match _any_ of the `--author` patterns and _any_ -of the `--grep` patterns; however, adding the `--all-match` option further limits the output to -just those commits that match _all_ `--grep` patterns. +You can specify more than one instance of both the `--author` and `--grep` search criteria, which will limit the commit output to commits that match _any_ of the `--author` patterns and _any_ of the `--grep` patterns; however, adding the `--all-match` option further limits the output to just those commits that match _all_ `--grep` patterns. ==== Another really helpful filter is the `-S` option (colloquially referred to as Git's "`pickaxe`" option), which takes a string and shows only those commits that changed the number of occurrences of that string. diff --git a/book/09-git-and-other-scms/sections/import-custom.asc b/book/09-git-and-other-scms/sections/import-custom.asc index 1da24a2d..726f3d8f 100644 --- a/book/09-git-and-other-scms/sections/import-custom.asc +++ b/book/09-git-and-other-scms/sections/import-custom.asc @@ -155,7 +155,7 @@ Dir.glob("**/*").each do |file| end ---- -Note: Because many systems think of their revisions as changes from one commit to another, fast-import can also take commands with each commit to specify which files have been added, removed, or modified and what the new contents are. +Note: Because many systems think of their revisions as changes from one commit to another, fast-import can also take commands with each commit to specify which files have been added, removed, or modified and what the new contents are. You could calculate the differences between snapshots and provide only this data, but doing so is more complex – you may as well give Git all the data and let it figure it out. If this is better suited to your data, check the `fast-import` man page for details about how to provide your data in this manner. diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index 847a160f..992af741 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -9,16 +9,16 @@ This isn't an exhaustive list of all the environment variables Git pays attentio Some of Git's general behavior as a computer program depends on environment variables. *`GIT_EXEC_PATH`* determines where Git looks for its sub-programs (like `git-commit`, `git-diff`, and others). - You can check the current setting by running `git --exec-path`. +You can check the current setting by running `git --exec-path`. *`HOME`* isn't usually considered customizable (too many other things depend on it), but it's where Git looks for the global configuration file. - If you want a truly portable Git installation, complete with global configuration, you can override `HOME` in the portable Git's shell profile. +If you want a truly portable Git installation, complete with global configuration, you can override `HOME` in the portable Git's shell profile. *`PREFIX`* is similar, but for the system-wide configuration. - Git looks for this file at `$PREFIX/etc/gitconfig`. +Git looks for this file at `$PREFIX/etc/gitconfig`. *`GIT_CONFIG_NOSYSTEM`*, if set, disables the use of the system-wide configuration file. - This is useful if your system config is interfering with your commands, but you don't have access to change or remove it. +This is useful if your system config is interfering with your commands, but you don't have access to change or remove it. *`GIT_PAGER`* controls the program used to display multi-page output on the command line. If this is unset, `PAGER` will be used as a fallback. diff --git a/book/dedication.asc b/book/dedication.asc index d7d826b8..0c75ccb4 100644 --- a/book/dedication.asc +++ b/book/dedication.asc @@ -4,5 +4,4 @@ _To my wife, Becky, without whom this adventure never would have begun. — Ben_ _This edition is dedicated to my girls. -To my wife Jessica who has supported me for all of these years and to my daughter Josephine, -who will support me when I'm too old to know what's going on. — Scott_ +To my wife Jessica who has supported me for all of these years and to my daughter Josephine, who will support me when I'm too old to know what's going on. — Scott_ diff --git a/book/introduction.asc b/book/introduction.asc index b2981600..23b261dc 100644 --- a/book/introduction.asc +++ b/book/introduction.asc @@ -40,8 +40,7 @@ A lot of organizations still use SVN and are not about to change, but by this po We also cover how to import projects from several different systems in case you do convince everyone to make the plunge. *Chapter 10* delves into the murky yet beautiful depths of Git internals. -Now that you know all about Git and can wield it with power and grace, you can move on to discuss how Git stores its objects, -what the object model is, details of packfiles, server protocols, and more. +Now that you know all about Git and can wield it with power and grace, you can move on to discuss how Git stores its objects, what the object model is, details of packfiles, server protocols, and more. Throughout the book, we will refer to sections of this chapter in case you feel like diving deep at that point; but if you are like us and want to dive into the technical details, you may want to read Chapter 10 first. We leave that up to you. From aefb07eece61e71c414f18c517bcc2cbdd1e4bb6 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 5 May 2023 08:19:33 +0200 Subject: [PATCH 388/549] Sync commit messages --- book/03-git-branching/sections/nutshell.asc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 94ba37ff..2bffd5dd 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -110,7 +110,7 @@ Well, let's do another commit: [source,console] ---- $ vim test.rb -$ git commit -a -m 'made a change' +$ git commit -a -m 'Make a change' ---- .The HEAD branch moves forward when a commit is made @@ -157,7 +157,7 @@ Let's make a few changes and commit again: [source,console] ---- $ vim test.rb -$ git commit -a -m 'made other changes' +$ git commit -a -m 'Make other changes' ---- Now your project history has diverged (see <>). @@ -175,12 +175,12 @@ If you run `git log --oneline --decorate --graph --all` it will print out the hi [source,console] ---- $ git log --oneline --decorate --graph --all -* c2b9e (HEAD, master) Made other changes -| * 87ab2 (testing) Made a change +* c2b9e (HEAD, master) Make other changes +| * 87ab2 (testing) Make a change |/ * f30ab Add feature #32 - ability to add new formats to the central interface * 34ac2 Fix bug #1328 - stack overflow under certain conditions -* 98ca9 initial commit of my project +* 98ca9 Initial commit of my project ---- Because a branch in Git is actually a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy. From f1964cac29930756e030a65804f4f2172970d281 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 5 May 2023 08:24:10 +0200 Subject: [PATCH 389/549] Add new option --sparse to git add help output --- book/01-introduction/sections/help.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index ce553409..68d76a4c 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -43,6 +43,7 @@ usage: git add [] [--] ... --refresh don't add, only refresh the index --ignore-errors just skip files which cannot be added because of errors --ignore-missing check if - even missing - files are ignored in dry run + --sparse allow updating entries outside of the sparse-checkout cone --chmod (+|-)x override the executable bit of the listed files --pathspec-from-file read pathspec from file --pathspec-file-nul with --pathspec-from-file, pathspec elements are separated with NUL character From fabdd35c6e2001b9ac2e684157084b10909e4ac9 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 11 May 2023 20:13:10 +0200 Subject: [PATCH 390/549] Fix placement of hidden index terms --- book/09-git-and-other-scms/sections/import-bzr.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc index 6931a380..8c6a56fb 100644 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ b/book/09-git-and-other-scms/sections/import-bzr.asc @@ -1,6 +1,6 @@ ==== Bazaar -(((Bazaar)))(((Importing, from Bazaar))) +(((Bazaar)))(((Importing, from Bazaar))) Bazaar is a DVCS tool much like Git, and as a result it's pretty straightforward to convert a Bazaar repository into a Git one. To accomplish this, you'll need to import the `bzr-fastimport` plugin. From ec5e060fdfa5777e289bbe87438d248400cdb200 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 12 May 2023 14:32:38 +0200 Subject: [PATCH 391/549] Fix the next version calculation Version written in the book was one tag behind the one on the PDF at GitHub releases. Next tag needed to be calculated here. --- Rakefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 6e99799f..eb488b98 100644 --- a/Rakefile +++ b/Rakefile @@ -1,9 +1,12 @@ namespace :book do # Variables referenced for build - version_string = `git describe --tags`.chomp + version_string = `git describe --tags --abbrev=0`.chomp if version_string.empty? version_string = '0' + else + versions = version_string.split('.') + version_string = versions[0] + '.' + versions[1] + '.' + versions[2].to_i.next.to_s end date_string = Time.now.strftime('%Y-%m-%d') params = "--attribute revnumber='#{version_string}' --attribute revdate='#{date_string}'" From 7f69764cadf5f6859c00ec1e1e92ad44e3437fc5 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 12 May 2023 14:48:00 +0200 Subject: [PATCH 392/549] Fix link to Perforce tools --- book/09-git-and-other-scms/sections/client-p4.asc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index e60d45cd..16708c11 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -15,12 +15,12 @@ The second is git-p4, a client-side bridge that lets you use Git as a Perforce c ===== Git Fusion (((Perforce, Git Fusion))) -Perforce provides a product called Git Fusion (available at https://www.perforce.com/git-fusion[^]), which synchronizes a Perforce server with Git repositories on the server side. +Perforce provides a product called Git Fusion (available at https://www.perforce.com/manuals/git-fusion/[^]), which synchronizes a Perforce server with Git repositories on the server side. ====== Setting Up For our examples, we'll be using the easiest installation method for Git Fusion, which is downloading a virtual machine that runs the Perforce daemon and Git Fusion. -You can get the virtual machine image from https://www.perforce.com/downloads/Perforce/20-User[^], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). +You can get the virtual machine image from https://www.perforce.com/downloads[^], and once it's finished downloading, import it into your favorite virtualization software (we'll use VirtualBox). Upon first starting the machine, it asks you to customize the password for three Linux users (`root`, `perforce`, and `git`), and provide an instance name, which can be used to distinguish this installation from others on the same network. When that has all completed, you'll see this: @@ -323,7 +323,7 @@ Git-p4 isn't as flexible or complete a solution as Git Fusion, but it does allow [NOTE] ====== You'll need the `p4` tool somewhere in your `PATH` to work with git-p4. -As of this writing, it is freely available at http://www.perforce.com/downloads/Perforce/20-User[^]. +As of this writing, it is freely available at https://www.perforce.com/downloads/helix-command-line-client-p4[^]. ====== ====== Setting Up From fe8a33dc221fd3318f7095222dbf2ec42b6ed172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Otto=20Kek=C3=A4l=C3=A4inen?= Date: Sat, 25 Mar 2023 22:17:57 -0700 Subject: [PATCH 393/549] Add tip about commit.gpgsign to automate all commits being signed --- book/07-git-tools/sections/signing.asc | 1 + 1 file changed, 1 insertion(+) diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index 3c668a8b..0e74b981 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -199,5 +199,6 @@ Merge made by the 'recursive' strategy. ==== Everyone Must Sign Signing tags and commits is great, but if you decide to use this in your normal workflow, you'll have to make sure that everyone on your team understands how to do so. +This can be achieved by asking everyone working with the repository to run `git config --local commit.gpgsign true` to automatically have all of their commits in the repository signed by default. If you don't, you'll end up spending a lot of time helping people figure out how to rewrite their commits with signed versions. Make sure you understand GPG and the benefits of signing things before adopting this as part of your standard workflow. From d98cbc5073f794aef32f48060ce93bf146a0d094 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 18:56:43 +0000 Subject: [PATCH 394/549] Update asciidoctor requirement from 2.0.18 to 2.0.20 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.18...v2.0.20) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 01bfbff5..b2a0a030 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.0.6' -gem 'asciidoctor', '2.0.18' +gem 'asciidoctor', '2.0.20' gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' From fc67ecf8014b013efec4447c22921240e367052d Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 19 May 2023 21:06:27 +0200 Subject: [PATCH 395/549] Add progit-kf8.epub to clean step --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index a0acfe08..8b808d38 100644 --- a/Rakefile +++ b/Rakefile @@ -117,7 +117,7 @@ namespace :book do begin puts 'Removing generated files' - FileList['book/contributors.txt', 'progit.html', 'progit.epub', 'progit.fb2.zip', 'progit.mobi', 'progit.pdf'].each do |file| + FileList['book/contributors.txt', 'progit.html', 'progit-kf8.epub', 'progit.epub', 'progit.fb2.zip', 'progit.mobi', 'progit.pdf'].each do |file| rm file # Rescue if file not found From 1c191b409081f5b7523c24453c92bbebe6eea519 Mon Sep 17 00:00:00 2001 From: bermudi Date: Thu, 8 Jun 2023 11:37:56 -0600 Subject: [PATCH 396/549] Update gitlab admin user and password info The information about admin user and password for a new gitlab installation was outdated, I have changed the information to reflect changes in the self hosted version of Gitlab. --- book/04-git-server/sections/gitlab.asc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 27148ccb..bb6025e8 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -24,8 +24,7 @@ For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/m ==== Administration GitLab's administration interface is accessed over the web. -Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the admin user. -The default username is `admin@local.host`, and the default password is `5iveL!fe` (which you must change right away). +Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the `root` user. The password will depend on your installation type but by default, Omnibus GitLab automatically generates a password for and stores it to /etc/gitlab/initial_root_password for at least 24 hours. Follow the documentation for more details. After you've logged in, click the "`Admin area`" icon in the menu at the top right. [[gitlab_menu]] From 429ca068d268b89989ac9de59d73120aab61af28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 18:56:37 +0000 Subject: [PATCH 397/549] Update epubcheck-ruby requirement from 5.0.0.0 to 5.0.1.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v5.0.0.0...v5.0.1.0) --- updated-dependencies: - dependency-name: epubcheck-ruby dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a1a00513..e5319079 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,6 @@ gem 'asciidoctor-pdf', '2.3.7' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.0' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '5.0.0.0' +gem 'epubcheck-ruby', '5.0.1.0' gem 'html-proofer', '5.0.7' gem 'kindlegen', '3.1.1' From a9c8603ad57a8e498d215f5c5ed8ce3c20b1d79d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jun 2023 18:17:20 +0000 Subject: [PATCH 398/549] Update asciidoctor-pdf requirement from 2.3.7 to 2.3.9 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.7...v2.3.9) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e5319079..ecb3aac6 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.7' +gem 'asciidoctor-pdf', '2.3.9' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.0' From a5f2d74009bc1c687fb8e30066d02df1ff23f91d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 18:47:14 +0000 Subject: [PATCH 399/549] Update html-proofer requirement from 5.0.7 to 5.0.8 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v5.0.7...v5.0.8) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e5319079..216768ac 100644 --- a/Gemfile +++ b/Gemfile @@ -14,5 +14,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.0' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.0.1.0' -gem 'html-proofer', '5.0.7' +gem 'html-proofer', '5.0.8' gem 'kindlegen', '3.1.1' From 658e155c689f1753622f77079ee0320187db5633 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:21:50 +0000 Subject: [PATCH 400/549] Update epubcheck-ruby requirement from 5.0.1.0 to 5.1.0.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v5.0.1.0...v5.1.0.0) --- updated-dependencies: - dependency-name: epubcheck-ruby dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 216768ac..42ea9585 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,6 @@ gem 'asciidoctor-pdf', '2.3.7' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.0' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '5.0.1.0' +gem 'epubcheck-ruby', '5.1.0.0' gem 'html-proofer', '5.0.8' gem 'kindlegen', '3.1.1' From 8efcf72bfb4f1a01036a27a48bb0d0db8979151a Mon Sep 17 00:00:00 2001 From: Andrei Korshikov Date: Fri, 11 Aug 2023 14:57:53 +0600 Subject: [PATCH 401/549] Fix #1893: git commit should be able to wait for kate editor Kate editor must be started with "--block" option so git commit can patiently wait for the editor to close the commit message file. --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index bd3dd186..79c49754 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -56,7 +56,7 @@ Accompanying the configuration instructions in <>, |Gedit (Linux) |`git config --global core.editor "gedit --wait --new-window"` |Gvim (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'"` (Also see note below) |Helix |`git config --global core.editor "helix"` -|Kate (Linux) |`git config --global core.editor "kate"` +|Kate (Linux) |`git config --global core.editor "kate --block"` |nano |`git config --global core.editor "nano -w"` |Notepad (Windows 64-bit) |`git config core.editor notepad` |Notepad++ (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"` (Also see note below) From a315cb54ffc4a6097493c588ecc53f9ae6dd1375 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 18:16:32 +0000 Subject: [PATCH 402/549] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pr-build.yml | 2 +- .github/workflows/release-on-merge.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 944c2b6e..f7fed92b 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -8,7 +8,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/release-on-merge.yml b/.github/workflows/release-on-merge.yml index 23713e54..c0ece187 100644 --- a/.github/workflows/release-on-merge.yml +++ b/.github/workflows/release-on-merge.yml @@ -8,7 +8,7 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 From b80c85f618eab08818aa12cf4b561eab3c4dba36 Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Fri, 15 Sep 2023 21:50:29 +0200 Subject: [PATCH 403/549] Bazaar is dead --- .../sections/client-bzr.asc | 138 --------------- .../sections/import-bzr.asc | 157 ------------------ ch09-git-and-other-systems.asc | 4 - 3 files changed, 299 deletions(-) delete mode 100644 book/09-git-and-other-scms/sections/client-bzr.asc delete mode 100644 book/09-git-and-other-scms/sections/import-bzr.asc diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc deleted file mode 100644 index 1194590c..00000000 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ /dev/null @@ -1,138 +0,0 @@ -==== Git and Bazaar - -Among the DVCS, another famous one is https://bazaar.canonical.com[Bazaar^]. -Bazaar is free and open source, and is part of the https://www.gnu.org[GNU Project^]. -It behaves very differently from Git. -Sometimes, to do the same thing as with Git, you have to use a different keyword, and some keywords that are common don't have the same meaning. -In particular, the branch management is very different and may cause confusion, especially when someone comes from Git's universe. -Nevertheless, it is possible to work on a Bazaar repository from a Git one. - -There are many projects that allow you to use Git as a Bazaar client. -Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[^]. -To install it, you just have to download the file `git-remote-bzr` in a folder contained in your `$PATH`: - -[source,console] ----- -$ wget https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr -O ~/bin/git-remote-bzr -$ chmod +x ~/bin/git-remote-bzr ----- - -You also need to have Bazaar installed. -That's all! - -===== Create a Git repository from a Bazaar repository - -It is simple to use. -It is enough to clone a Bazaar repository prefixing it by `bzr::`. -Since Git and Bazaar both do full clones to your machine, it's possible to attach a Git clone to your local Bazaar clone, but it isn't recommended. -It's much easier to attach your Git clone directly to the same place your Bazaar clone is attached to -- the central repository. - -Let's suppose that you worked with a remote repository which is at address `bzr+ssh://developer@mybazaarserver:myproject`. -Then you must clone it in the following way: - -[source,console] ----- -$ git clone bzr::bzr+ssh://developer@mybazaarserver:myproject myProject-Git -$ cd myProject-Git ----- - -At this point, your Git repository is created but it is not compacted for optimal disk use. -That's why you should also clean and compact your Git repository, especially if it is a big one: - -[source,console] ----- -$ git gc --aggressive ----- - -===== Bazaar branches - -Bazaar only allows you to clone branches, but a repository may contain several branches, and `git-remote-bzr` can clone both. -For example, to clone a branch: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk ----- - -And to clone the whole repository: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacs ----- - -The second command clones all the branches contained in the emacs repository; nevertheless, it is possible to point out some branches: - -[source,console] ----- -$ git config remote-bzr.branches 'trunk, xwindow' ----- - -Some remote repositories don't allow you to list their branches, in which case you have to manually specify them, and even though you could specify the configuration in the cloning command, you may find this easier: - -[source,console] ----- -$ git init emacs -$ git remote add origin bzr::bzr://bzr.savannah.gnu.org/emacs -$ git config remote-bzr.branches 'trunk, xwindow' -$ git fetch ----- - -===== Ignore what is ignored with .bzrignore - -Since you are working on a project managed with Bazaar, you shouldn't create a `.gitignore` file because you _may_ accidentally set it under version control and the other people working with Bazaar would be disturbed. -The solution is to create the `.git/info/exclude` file either as a symbolic link or as a regular file. -We'll see later on how to solve this question. - -Bazaar uses the same model as Git to ignore files, but also has two features which don't have an equivalent into Git. -The complete description may be found in http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[the documentation^]. -The two features are: - -1. "!!" allows you to ignore certain file patterns even if they're specified using a "!" rule. -2. "RE:" at the beginning of a line allows you to specify a https://docs.python.org/3/library/re.html[Python regular expression^] (Git only allows shell globs). - -As a consequence, there are two different situations to consider: - -1. If the `.bzrignore` file does not contain any of these two specific prefixes, then you can simply make a symbolic link to it in the repository: `ln -s .bzrignore .git/info/exclude`. -2. Otherwise, you must create the `.git/info/exclude` file and adapt it to ignore exactly the same files in `.bzrignore`. - -Whatever the case is, you will have to remain vigilant against any change of `.bzrignore` to make sure that the `.git/info/exclude` file always reflects `.bzrignore`. -Indeed, if the `.bzrignore` file were to change and contained one or more lines starting with "!!" or "RE:", Git not being able to interpret these lines, you'll have to adapt your `.git/info/exclude` file to ignore the same files as the ones ignored with `.bzrignore`. -Moreover, if the `.git/info/exclude` file was a symbolic link, you'll have to first delete the symbolic link, copy `.bzrignore` to `.git/info/exclude` and then adapt the latter. -However, be careful with its creation because with Git it is impossible to re-include a file if a parent directory of that file is excluded. - -===== Fetch the changes of the remote repository - -To fetch the changes of the remote, you pull changes as usually, using Git commands. -Supposing that your changes are on the `master` branch, you merge or rebase your work on the `origin/master` branch: - -[source,console] ----- -$ git pull --rebase origin ----- - -===== Push your work on the remote repository - -Because Bazaar also has the concept of merge commits, there will be no problem if you push a merge commit. -So you can work on a branch, merge the changes into `master` and push your work. -Then, you create your branches, you test and commit your work as usual. -You finally push your work to the Bazaar repository: - -[source,console] ----- -$ git push origin master ----- - -===== Caveats - -Git's remote-helpers framework has some limitations that apply. -In particular, these commands don't work: - -* `git push origin :branch-to-delete` (Bazaar can't accept ref deletions in this way) -* `git push origin old:new` (it will push `old`) -* `git push --dry-run origin branch` (it will push) - -===== Summary - -Since Git's and Bazaar's models are similar, there isn't a lot of resistance when working across the boundary. -As long as you watch out for the limitations, and are always aware that the remote repository isn't natively Git, you'll be fine. diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc deleted file mode 100644 index 8c6a56fb..00000000 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ /dev/null @@ -1,157 +0,0 @@ -==== Bazaar - -(((Bazaar)))(((Importing, from Bazaar))) -Bazaar is a DVCS tool much like Git, and as a result it's pretty straightforward to convert a Bazaar repository into a Git one. -To accomplish this, you'll need to import the `bzr-fastimport` plugin. - -===== Getting the bzr-fastimport plugin - -The procedure for installing the fastimport plugin is different on UNIX-like operating systems and on Windows. -In the first case, the simplest is to install the `bzr-fastimport` package that will install all the required dependencies. - -For example, with Debian and derived, you would do the following: - -[source,console] ----- -$ sudo apt-get install bzr-fastimport ----- - -With RHEL, you would do the following: - -[source,console] ----- -$ sudo yum install bzr-fastimport ----- - -With Fedora, since release 22, the new package manager is dnf: - -[source,console] ----- -$ sudo dnf install bzr-fastimport ----- - -If the package is not available, you may install it as a plugin: - -[source,console] ----- -$ mkdir --parents ~/.bazaar/plugins # creates the necessary folders for the plugins -$ cd ~/.bazaar/plugins -$ bzr branch lp:bzr-fastimport fastimport # imports the fastimport plugin -$ cd fastimport -$ sudo python setup.py install --record=files.txt # installs the plugin ----- - -For this plugin to work, you'll also need the `fastimport` Python module. -You can check whether it is present or not and install it with the following commands: - -[source,console] ----- -$ python -c "import fastimport" -Traceback (most recent call last): - File "", line 1, in -ImportError: No module named fastimport -$ pip install fastimport ----- - -If it is not available, you can download it at address https://pypi.org/project/fastimport/[^]. - -In the second case (on Windows), `bzr-fastimport` is automatically installed with the standalone version and the default installation (let all the checkboxes checked). -So in this case you have nothing to do. - -At this point, the way to import a Bazaar repository differs according to that you have a single branch or you are working with a repository that has several branches. - -===== Project with a single branch - -Now `cd` in the directory that contains your Bazaar repository and initialize the Git repository: - -[source,console] ----- -$ cd /path/to/the/bzr/repository -$ git init ----- - -Now, you can simply export your Bazaar repository and convert it into a Git repository using the following command: - -[source,console] ----- -$ bzr fast-export --plain . | git fast-import ----- - -Depending on the size of the project, your Git repository is built in a lapse from a few seconds to a few minutes. - -===== Case of a project with a main branch and a working branch - -You can also import a Bazaar repository that contains branches. -Let us suppose that you have two branches: one represents the main branch (myProject.trunk), the other one is the working branch (myProject.work). - -[source,console] ----- -$ ls -myProject.trunk myProject.work ----- - -Create the Git repository and `cd` into it: - -[source,console] ----- -$ git init git-repo -$ cd git-repo ----- - -Pull the `master` branch into Git: - -[source,console] ----- -$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \ -git fast-import --export-marks=../marks.git ----- - -Pull the working branch into Git: - -[source,console] ----- -$ bzr fast-export --marks=../marks.bzr --git-branch=work ../myProject.work | \ -git fast-import --import-marks=../marks.git --export-marks=../marks.git ----- - -Now `git branch` shows you the `master` branch as well as the `work` branch. -Check the logs to make sure they're complete and get rid of the `marks.bzr` and `marks.git` files. - -===== Synchronizing the staging area - -Whatever the number of branches you had and the import method you used, your staging area is not synchronized with `HEAD`, and with the import of several branches, your working directory is not synchronized either. -This situation is easily solved by the following command: - -[source,console] ----- -$ git reset --hard HEAD ----- - -===== Ignoring the files that were ignored with .bzrignore - -Now let's have a look at the files to ignore. -The first thing to do is to rename `.bzrignore` into `.gitignore`. -If the `.bzrignore` file contains one or several lines starting with "!!" or "RE:", you'll have to modify it and perhaps create several `.gitignore` files in order to ignore exactly the same files that Bazaar was ignoring. - -Finally, you will have to create a commit that contains this modification for the migration: - -[source,console] ----- -$ git mv .bzrignore .gitignore -$ # modify .gitignore if needed -$ git commit -am 'Migration from Bazaar to Git' ----- - -===== Sending your repository to the server - -Here we are! -Now you can push the repository onto its new home server: - -[source,console] ----- -$ git remote add origin git@my-git-server:mygitrepository.git -$ git push origin --all -$ git push origin --tags ----- - -Your Git repository is ready to use. diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index ac6a1589..af4f2200 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -20,8 +20,6 @@ include::book/09-git-and-other-scms/sections/client-svn.asc[] include::book/09-git-and-other-scms/sections/client-hg.asc[] -include::book/09-git-and-other-scms/sections/client-bzr.asc[] - include::book/09-git-and-other-scms/sections/client-p4.asc[] [[_migrating]] @@ -36,8 +34,6 @@ include::book/09-git-and-other-scms/sections/import-svn.asc[] include::book/09-git-and-other-scms/sections/import-hg.asc[] -include::book/09-git-and-other-scms/sections/import-bzr.asc[] - include::book/09-git-and-other-scms/sections/import-p4.asc[] include::book/09-git-and-other-scms/sections/import-custom.asc[] From 4cdcbe952c6bed98d9c6844d66a249cf48a0876f Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Sat, 16 Sep 2023 19:45:13 +0200 Subject: [PATCH 404/549] no longer mention Bazaar following #1901 --- book/01-introduction/sections/about-version-control.asc | 2 +- book/01-introduction/sections/what-is-git.asc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 5db49fb1..182fcedc 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -50,7 +50,7 @@ Local VCSs suffer from this same problem -- whenever you have the entire history (((version control,distributed))) This is where Distributed Version Control Systems (DVCSs) step in. -In a DVCS (such as Git, Mercurial, Bazaar or Darcs), clients don't just check out the latest snapshot of the files; rather, they fully mirror the repository, including its full history. +In a DVCS (such as Git, Mercurial or Darcs), clients don't just check out the latest snapshot of the files; rather, they fully mirror the repository, including its full history. Thus, if any server dies, and these systems were collaborating via that server, any of the client repositories can be copied back up to the server to restore it. Every clone is really a full backup of all the data. diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 8953b9d4..466201b2 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -10,7 +10,7 @@ Even though Git's user interface is fairly similar to these other VCSs, Git stor The major difference between Git and any other VCS (Subversion and friends included) is the way Git thinks about its data. Conceptually, most other systems store information as a list of file-based changes. -These other systems (CVS, Subversion, Perforce, Bazaar, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as _delta-based_ version control). +These other systems (CVS, Subversion, Perforce, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as _delta-based_ version control). .Storing data as changes to a base version of each file image::images/deltas.png[Storing data as changes to a base version of each file] From fae387e53ab03853f12b44faa879f9a71ba88aa3 Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Sat, 16 Sep 2023 20:10:23 +0200 Subject: [PATCH 405/549] removed Bazaar (bzr) from status.json --- status.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/status.json b/status.json index 68b368c6..03a8d830 100644 --- a/status.json +++ b/status.json @@ -85,11 +85,9 @@ }, "09-git-and-other-scms": { "1-git-and-other-scms.asc": 0, - "sections/client-bzr.asc": 0, "sections/client-hg.asc": 0, "sections/client-p4.asc": 0, "sections/client-svn.asc": 0, - "sections/import-bzr.asc": 0, "sections/import-custom.asc": 0, "sections/import-hg.asc": 0, "sections/import-p4.asc": 0, From bf15fd860b269d663b09e53c4ca97ee398d3abbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 18:35:13 +0000 Subject: [PATCH 406/549] Update rake requirement from 13.0.6 to 13.1.0 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.0.6...v13.1.0) --- updated-dependencies: - dependency-name: rake dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 1cec18c2..c4a2c505 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rake', '13.0.6' +gem 'rake', '13.1.0' gem 'asciidoctor', '2.0.20' gem 'json', '2.6.3' From 74cfa37197fea88d79074c11b3cf78eed29cbee2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:34:09 +0000 Subject: [PATCH 407/549] Update pygments.rb requirement from 2.4.0 to 2.4.1 Updates the requirements on [pygments.rb](https://github.com/pygments/pygments.rb) to permit the latest version. - [Release notes](https://github.com/pygments/pygments.rb/releases) - [Changelog](https://github.com/pygments/pygments.rb/blob/master/CHANGELOG.adoc) - [Commits](https://github.com/pygments/pygments.rb/compare/v2.4.0...v2.4.1) --- updated-dependencies: - dependency-name: pygments.rb dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 1cec18c2..fd6c1116 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ gem 'asciidoctor-epub3', '1.5.1' gem 'asciidoctor-pdf', '2.3.9' gem 'coderay', '1.1.3' -gem 'pygments.rb', '2.4.0' +gem 'pygments.rb', '2.4.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.1.0.0' gem 'html-proofer', '5.0.8' From 3ac302b35c55b97c127cfe3eca5e9ff14270b10e Mon Sep 17 00:00:00 2001 From: Igor <107038080+IgorLaborieWefox@users.noreply.github.com> Date: Thu, 16 Nov 2023 09:46:54 +0100 Subject: [PATCH 408/549] Fix for Helix editor --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 79c49754..b0f5c54e 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -55,7 +55,7 @@ Accompanying the configuration instructions in <>, |Emacs |`git config --global core.editor emacs` |Gedit (Linux) |`git config --global core.editor "gedit --wait --new-window"` |Gvim (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Vim\vim72\gvim.exe' --nofork '%*'"` (Also see note below) -|Helix |`git config --global core.editor "helix"` +|Helix |`git config --global core.editor "hx"` |Kate (Linux) |`git config --global core.editor "kate --block"` |nano |`git config --global core.editor "nano -w"` |Notepad (Windows 64-bit) |`git config core.editor notepad` From 83119131792ad3f3e02767a5996db37e50c91089 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 18:29:34 +0000 Subject: [PATCH 409/549] Update asciidoctor-pdf requirement from 2.3.9 to 2.3.11 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.9...v2.3.11) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 069745f1..dfad2a05 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.9' +gem 'asciidoctor-pdf', '2.3.11' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From 28580ff7d3e508eee9c2c1f154f15f4027360089 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Meena Date: Fri, 2 Feb 2024 17:53:11 +0530 Subject: [PATCH 410/549] fixed typo in chapter 8 under core.pager There is a typo in chapter 8 under core.pager last line, it say 'Git will page'. The word 'page' should be replaced with the word 'print' Signed-off-by: Hemant Kumar Meena --- book/08-customizing-git/sections/config.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 7d5262b7..16739692 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -129,7 +129,7 @@ You can set it to `more` or to your favorite pager (by default, it's `less`), or $ git config --global core.pager '' ---- -If you run that, Git will page the entire output of all commands, no matter how long they are. +If you run that, Git will print the entire output of all commands, no matter how long they are. ===== `user.signingkey` From 246ab746db54326945dc1d9c23bea12c9693cc7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 18:54:07 +0000 Subject: [PATCH 411/549] Update asciidoctor-pdf requirement from 2.3.11 to 2.3.12 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.11...v2.3.12) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index dfad2a05..037af7d5 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '1.5.1' -gem 'asciidoctor-pdf', '2.3.11' +gem 'asciidoctor-pdf', '2.3.12' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From e31d7f04c8c83c893a18885f70d5bb81fa093ce4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 18:57:39 +0000 Subject: [PATCH 412/549] Update asciidoctor-epub3 requirement from 1.5.1 to 2.1.0 Updates the requirements on [asciidoctor-epub3](https://github.com/asciidoctor/asciidoctor-epub3) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-epub3/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-epub3/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-epub3/compare/v1.5.1...v2.1.0) --- updated-dependencies: - dependency-name: asciidoctor-epub3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 037af7d5..ec1ff481 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' -gem 'asciidoctor-epub3', '1.5.1' +gem 'asciidoctor-epub3', '2.1.0' gem 'asciidoctor-pdf', '2.3.12' gem 'coderay', '1.1.3' From 108628debcfa57ec2b868ff8e46aa0933bc5e514 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:41:57 +0000 Subject: [PATCH 413/549] Update asciidoctor-pdf requirement from 2.3.12 to 2.3.13 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.12...v2.3.13) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ec1ff481..9ec6254d 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '2.1.0' -gem 'asciidoctor-pdf', '2.3.12' +gem 'asciidoctor-pdf', '2.3.13' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From 97c1779e675c9d6f4f2df7a08d17262529d623fa Mon Sep 17 00:00:00 2001 From: Hamid Nazari Date: Tue, 20 Feb 2024 19:04:05 +0330 Subject: [PATCH 414/549] Simple clarification I think 'and then' is better changed for 'and when' or 'and when later' to better clarify this sentence --- book/07-git-tools/sections/submodules.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 47096120..8a8191b7 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -466,7 +466,7 @@ You have to do some extra steps if you want changes in a submodule to be tracked In order to set up your submodule to be easier to go in and hack on, you need to do two things. You need to go into each submodule and check out a branch to work on. -Then you need to tell Git what to do if you have made changes and then `git submodule update --remote` pulls in new work from upstream. +Then you need to tell Git what to do if you have made changes and when later `git submodule update --remote` pulls in new work from upstream. The options are that you can merge them into your local work, or you can try to rebase your local work on top of the new changes. First of all, let's go into our submodule directory and check out a branch. From 3dbf0ef589d457c31dc1d4c918ded2cf4774f7e9 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Tue, 20 Feb 2024 15:53:34 -0800 Subject: [PATCH 415/549] Update book/07-git-tools/sections/submodules.asc --- book/07-git-tools/sections/submodules.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 8a8191b7..0d667462 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -466,7 +466,7 @@ You have to do some extra steps if you want changes in a submodule to be tracked In order to set up your submodule to be easier to go in and hack on, you need to do two things. You need to go into each submodule and check out a branch to work on. -Then you need to tell Git what to do if you have made changes and when later `git submodule update --remote` pulls in new work from upstream. +Then you need to tell Git what to do if you have made changes and later `git submodule update --remote` pulls in new work from upstream. The options are that you can merge them into your local work, or you can try to rebase your local work on top of the new changes. First of all, let's go into our submodule directory and check out a branch. From f4e5c4aeaaf197561f75e5a9efec83cd1e6969b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 18:11:05 +0000 Subject: [PATCH 416/549] Update asciidoctor requirement from 2.0.20 to 2.0.21 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.20...v2.0.21) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9ec6254d..9c9ccfa7 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.1.0' -gem 'asciidoctor', '2.0.20' +gem 'asciidoctor', '2.0.21' gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' From 76951d049203df05de90e824f44e674fea893984 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 23 Feb 2024 14:37:55 -0800 Subject: [PATCH 417/549] Update book/04-git-server/sections/gitlab.asc --- book/04-git-server/sections/gitlab.asc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index bb6025e8..97de7893 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -24,7 +24,9 @@ For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/m ==== Administration GitLab's administration interface is accessed over the web. -Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the `root` user. The password will depend on your installation type but by default, Omnibus GitLab automatically generates a password for and stores it to /etc/gitlab/initial_root_password for at least 24 hours. Follow the documentation for more details. +Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the `root` user. +The password will depend on your installation type but by default, Omnibus GitLab automatically generates a password for and stores it to /etc/gitlab/initial_root_password for at least 24 hours. +Follow the documentation for more details. After you've logged in, click the "`Admin area`" icon in the menu at the top right. [[gitlab_menu]] From 4729b7dda1e02009f1a2fed365c202d5228c3178 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:55:02 +0000 Subject: [PATCH 418/549] Update asciidoctor requirement from 2.0.21 to 2.0.22 Updates the requirements on [asciidoctor](https://github.com/asciidoctor/asciidoctor) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor/compare/v2.0.21...v2.0.22) --- updated-dependencies: - dependency-name: asciidoctor dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9c9ccfa7..1721ce56 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gem 'rake', '13.1.0' -gem 'asciidoctor', '2.0.21' +gem 'asciidoctor', '2.0.22' gem 'json', '2.6.3' gem 'awesome_print', '1.9.2' From 7e7f579e2bc42e9dbed3804fb9d134ffaab2a610 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:55:14 +0000 Subject: [PATCH 419/549] Update asciidoctor-pdf requirement from 2.3.13 to 2.3.14 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.13...v2.3.14) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 9c9ccfa7..4309841c 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '2.1.0' -gem 'asciidoctor-pdf', '2.3.13' +gem 'asciidoctor-pdf', '2.3.14' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From 531f390620dfa82bddab74832fa92e2106d993ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:08:09 +0000 Subject: [PATCH 420/549] Update asciidoctor-pdf requirement from 2.3.14 to 2.3.15 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.14...v2.3.15) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a6d173dd..2d04b6f8 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '2.1.0' -gem 'asciidoctor-pdf', '2.3.14' +gem 'asciidoctor-pdf', '2.3.15' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From 56bc654b69945a9cd86bcce9b92ffd1fded29368 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:38:27 +0000 Subject: [PATCH 421/549] Update rake requirement from 13.1.0 to 13.2.0 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.1.0...v13.2.0) --- updated-dependencies: - dependency-name: rake dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 2d04b6f8..d351d492 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rake', '13.1.0' +gem 'rake', '13.2.0' gem 'asciidoctor', '2.0.22' gem 'json', '2.6.3' From 9dac376177b9c27d7faf9cf435bafbfdd1de091b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Apr 2024 18:18:24 +0000 Subject: [PATCH 422/549] Update json requirement from 2.6.3 to 2.7.2 Updates the requirements on [json](https://github.com/flori/json) to permit the latest version. - [Release notes](https://github.com/flori/json/releases) - [Changelog](https://github.com/flori/json/blob/master/CHANGES.md) - [Commits](https://github.com/flori/json/compare/v2.6.3...v2.7.2) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index d351d492..3cabe3ad 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.0' gem 'asciidoctor', '2.0.22' -gem 'json', '2.6.3' +gem 'json', '2.7.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From 588cecf0386c31115344f6bd316e2dd3c5a3327a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Apr 2024 18:46:13 +0000 Subject: [PATCH 423/549] Update rake requirement from 13.2.0 to 13.2.1 Updates the requirements on [rake](https://github.com/ruby/rake) to permit the latest version. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.2.0...v13.2.1) --- updated-dependencies: - dependency-name: rake dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3cabe3ad..189e90a9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rake', '13.2.0' +gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' gem 'json', '2.7.2' From b001ff880a3774580ba1f54bfd9f3ecdb6d28ac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Ozsv=C3=A1rt?= Date: Sat, 27 Apr 2024 12:40:23 +0200 Subject: [PATCH 424/549] Replace 'in lieu of' with 'instead of' --- book/02-git-basics/sections/remotes.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 2deb8fba..80e98250 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -87,7 +87,7 @@ pb https://github.com/paulboone/ticgit (fetch) pb https://github.com/paulboone/ticgit (push) ---- -Now you can use the string `pb` on the command line in lieu of the whole URL. +Now you can use the string `pb` on the command line instead of the whole URL. For example, if you want to fetch all the information that Paul has but that you don't yet have in your repository, you can run `git fetch pb`: [source,console] From 4f0ec3e3732bd890957536bf41f629093b2e148a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 18:41:45 +0000 Subject: [PATCH 425/549] Update html-proofer requirement from 5.0.8 to 5.0.9 Updates the requirements on [html-proofer](https://github.com/gjtorikian/html-proofer) to permit the latest version. - [Release notes](https://github.com/gjtorikian/html-proofer/releases) - [Changelog](https://github.com/gjtorikian/html-proofer/blob/main/CHANGELOG.md) - [Commits](https://github.com/gjtorikian/html-proofer/compare/v5.0.8...v5.0.9) --- updated-dependencies: - dependency-name: html-proofer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 189e90a9..569775da 100644 --- a/Gemfile +++ b/Gemfile @@ -14,5 +14,5 @@ gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' gem 'thread_safe', '0.3.6' gem 'epubcheck-ruby', '5.1.0.0' -gem 'html-proofer', '5.0.8' +gem 'html-proofer', '5.0.9' gem 'kindlegen', '3.1.1' From 7154fd14db17021aacf370b7b0e0e2bd03fdf8ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 18:55:06 +0000 Subject: [PATCH 426/549] Update asciidoctor-epub3 requirement from 2.1.0 to 2.1.3 Updates the requirements on [asciidoctor-epub3](https://github.com/asciidoctor/asciidoctor-epub3) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-epub3/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-epub3/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-epub3/compare/v2.1.0...v2.1.3) --- updated-dependencies: - dependency-name: asciidoctor-epub3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 569775da..095b3976 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'json', '2.7.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' -gem 'asciidoctor-epub3', '2.1.0' +gem 'asciidoctor-epub3', '2.1.3' gem 'asciidoctor-pdf', '2.3.15' gem 'coderay', '1.1.3' From 7a867a30e796cb96352ecd6b9c4f4576d4794763 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 18:26:21 +0000 Subject: [PATCH 427/549] Update asciidoctor-pdf requirement from 2.3.15 to 2.3.17 Updates the requirements on [asciidoctor-pdf](https://github.com/asciidoctor/asciidoctor-pdf) to permit the latest version. - [Release notes](https://github.com/asciidoctor/asciidoctor-pdf/releases) - [Changelog](https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-pdf/compare/v2.3.15...v2.3.17) --- updated-dependencies: - dependency-name: asciidoctor-pdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 095b3976..b9ce0585 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' gem 'asciidoctor-epub3', '2.1.3' -gem 'asciidoctor-pdf', '2.3.15' +gem 'asciidoctor-pdf', '2.3.17' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' From b16b90989e5f53a29e3b4673c3fe8d02bb397061 Mon Sep 17 00:00:00 2001 From: z-hed Date: Thu, 8 Aug 2024 17:34:11 -0700 Subject: [PATCH 428/549] Escape notepad++ default installation path --- C-git-commands.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index b0f5c54e..66776de2 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -59,7 +59,7 @@ Accompanying the configuration instructions in <>, |Kate (Linux) |`git config --global core.editor "kate --block"` |nano |`git config --global core.editor "nano -w"` |Notepad (Windows 64-bit) |`git config core.editor notepad` -|Notepad++ (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"` (Also see note below) +|Notepad++ (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Notepad+\+\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"` (Also see note below) |Scratch (Linux)|`git config --global core.editor "scratch-text-editor"` |Sublime Text (macOS) |`git config --global core.editor "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl --new-window --wait"` |Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w"` (Also see note below) From 09a5d12bd60c0140eb27df5dead68cd456197ccd Mon Sep 17 00:00:00 2001 From: Yuhang Guo <22561797+Sherry520@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:59:33 +0800 Subject: [PATCH 429/549] Modify ruby scripts: File.exists? to File.exist? --- book/07-git-tools/git-credential-read-only | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/git-credential-read-only b/book/07-git-tools/git-credential-read-only index b98833c4..9e984dca 100755 --- a/book/07-git-tools/git-credential-read-only +++ b/book/07-git-tools/git-credential-read-only @@ -11,7 +11,7 @@ OptionParser.new do |opts| end.parse! exit(0) unless ARGV[0].downcase == 'get' # <2> -exit(0) unless File.exists? path +exit(0) unless File.exist? path known = {} # <3> while line = STDIN.gets From f5c773a88f47014682a1bb65f158307d9af2e193 Mon Sep 17 00:00:00 2001 From: Yuhang Guo <22561797+Sherry520@users.noreply.github.com> Date: Tue, 20 Aug 2024 22:00:15 +0800 Subject: [PATCH 430/549] Correct missing symbols --- C-git-commands.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/C-git-commands.asc b/C-git-commands.asc index 66776de2..3e3523ef 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -65,12 +65,12 @@ Accompanying the configuration instructions in <>, |Sublime Text (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -w"` (Also see note below) |TextEdit (macOS)|`git config --global core.editor "open --wait-apps --new -e"` |Textmate |`git config --global core.editor "mate -w"` -|Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m` (Also see note below) +|Textpad (Windows 64-bit) |`git config --global core.editor "'C:\Program Files\TextPad 5\TextPad.exe' -m"` (Also see note below) |UltraEdit (Windows 64-bit) | `git config --global core.editor Uedit32` |Vim |`git config --global core.editor "vim --nofork"` |Visual Studio Code |`git config --global core.editor "code --wait"` |VSCodium (Free/Libre Open Source Software Binaries of VSCode) | `git config --global core.editor "codium --wait"` -|WordPad |`git config --global core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'"` +|WordPad |`git config --global core.editor "'C:\Program Files\Windows NT\Accessories\wordpad.exe'"` |Xi | `git config --global core.editor "xi --wait"` |============================== From 665cd4f7582fa7c9dc6355a6aeb0e7ee12f05045 Mon Sep 17 00:00:00 2001 From: Jin Park Date: Wed, 4 Sep 2024 20:05:52 +0900 Subject: [PATCH 431/549] Fixed: Typo in rerere1.svg --- images/rerere1.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/rerere1.svg b/images/rerere1.svg index 19b597d8..7bf25b2e 100644 --- a/images/rerere1.svg +++ b/images/rerere1.svg @@ -45,7 +45,7 @@ - i18-world + i18n-world From 57791a6becb1adad717b8660d2a0116bfd94a111 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 18:29:59 +0000 Subject: [PATCH 432/549] Update json requirement from 2.7.2 to 2.7.4 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.7.2...v2.7.4) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index b9ce0585..43738abb 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.7.2' +gem 'json', '2.7.4' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From f9859c8797300d4ab4e3dc99fbd2184d73217fbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 18:01:50 +0000 Subject: [PATCH 433/549] Update json requirement from 2.7.4 to 2.7.6 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.7.4...v2.7.6) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 43738abb..f8904b26 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.7.4' +gem 'json', '2.7.6' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From ce026eff9db91cee2baf0471389d7f5057ecdad8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:15:33 +0000 Subject: [PATCH 434/549] Update json requirement from 2.7.6 to 2.8.1 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.7.6...v2.8.1) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index f8904b26..c842ac8e 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.7.6' +gem 'json', '2.8.1' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From 5b0290f411a23b38a1eb34700e50639557c01136 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:05:37 +0000 Subject: [PATCH 435/549] Update json requirement from 2.8.1 to 2.8.2 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.8.1...v2.8.2) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index c842ac8e..6878eb8f 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.8.1' +gem 'json', '2.8.2' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From 811d2195157f2ded9c00baedc5d9f97c6d1a8e1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 18:16:11 +0000 Subject: [PATCH 436/549] Update json requirement from 2.8.2 to 2.9.0 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.8.2...v2.9.0) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 6878eb8f..f65a0b38 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.8.2' +gem 'json', '2.9.0' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From d3fb1579e35e4100df697565fbc390a4fa6429c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:57:11 +0000 Subject: [PATCH 437/549] Update json requirement from 2.9.0 to 2.9.1 Updates the requirements on [json](https://github.com/ruby/json) to permit the latest version. - [Release notes](https://github.com/ruby/json/releases) - [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md) - [Commits](https://github.com/ruby/json/compare/v2.9.0...v2.9.1) --- updated-dependencies: - dependency-name: json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index f65a0b38..ac0571ed 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' gem 'rake', '13.2.1' gem 'asciidoctor', '2.0.22' -gem 'json', '2.9.0' +gem 'json', '2.9.1' gem 'awesome_print', '1.9.2' gem 'asciidoctor-fb2', '0.7.0' From c6597c3aa66022dd4284d6e81aa62a15e8ebe6eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:02:03 +0000 Subject: [PATCH 438/549] Update epubcheck-ruby requirement from 5.1.0.0 to 5.2.0.0 Updates the requirements on [epubcheck-ruby](https://github.com/takahashim/epubcheck-ruby) to permit the latest version. - [Commits](https://github.com/takahashim/epubcheck-ruby/compare/v5.1.0.0...v5.2.0.0) --- updated-dependencies: - dependency-name: epubcheck-ruby dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ac0571ed..0893f08a 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,6 @@ gem 'asciidoctor-pdf', '2.3.17' gem 'coderay', '1.1.3' gem 'pygments.rb', '2.4.1' gem 'thread_safe', '0.3.6' -gem 'epubcheck-ruby', '5.1.0.0' +gem 'epubcheck-ruby', '5.2.0.0' gem 'html-proofer', '5.0.9' gem 'kindlegen', '3.1.1' From 25638bec456d70773feaf6c5086f7b0a6febb459 Mon Sep 17 00:00:00 2001 From: agkhall <142054879+agkhall@users.noreply.github.com> Date: Wed, 15 Jan 2025 22:00:53 -0500 Subject: [PATCH 439/549] Minor clarification Because of the `cd DbConnector/` in the previous code section, it was unclear which location to run the `git submodule init` and `git submodule update` commands. --- book/07-git-tools/sections/submodules.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index 0d667462..188ff640 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -166,7 +166,7 @@ $ ---- The `DbConnector` directory is there, but empty. -You must run two commands: `git submodule init` to initialize your local configuration file, and `git submodule update` to fetch all the data from that project and check out the appropriate commit listed in your superproject: +You must run two commands from the main project: `git submodule init` to initialize your local configuration file, and `git submodule update` to fetch all the data from that project and check out the appropriate commit listed in your superproject: [source,console] ---- From 04323e94fc9e134cdba63a28b75600f2acc90308 Mon Sep 17 00:00:00 2001 From: Jannick Kremer Date: Sat, 15 Feb 2025 10:56:17 +0900 Subject: [PATCH 440/549] Remove recommendation for git fetch && git merge over git pull --- book/03-git-branching/sections/remote-branches.asc | 2 -- 1 file changed, 2 deletions(-) diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 723aa7b6..adbb8735 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -217,8 +217,6 @@ It will simply get the data for you and let you merge it yourself. However, there is a command called `git pull` which is essentially a `git fetch` immediately followed by a `git merge` in most cases. If you have a tracking branch set up as demonstrated in the last section, either by explicitly setting it or by having it created for you by the `clone` or `checkout` commands, `git pull` will look up what server and branch your current branch is tracking, fetch from that server and then try to merge in that remote branch. -Generally it's better to simply use the `fetch` and `merge` commands explicitly as the magic of `git pull` can often be confusing. - [[_delete_branches]] ==== Deleting Remote Branches From 72a5f40dc73821ce3c70d742e2c310200588a8c6 Mon Sep 17 00:00:00 2001 From: Trevor Jobling Date: Mon, 10 Mar 2025 10:41:42 +0000 Subject: [PATCH 441/549] Update first-time-setup.asc Clarify that --global configuration is not applicable system-wide, but only within the scope of the logged in as current user. --- book/01-introduction/sections/first-time-setup.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 5d092ea6..c5929483 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -42,7 +42,7 @@ $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com ---- -Again, you need to do this only once if you pass the `--global` option, because then Git will always use that information for anything you do on that system. +Again, you need to do this only once if you pass the `--global` option, because then Git will always use that information for anything you do while logged in as you on that system. If you want to override this with a different name or email address for specific projects, you can run the command without the `--global` option when you're in that project. Many of the GUI tools will help you do this when you first run them. From 761e7e3b11a0b1922248bf19f80070620fee8894 Mon Sep 17 00:00:00 2001 From: Andrew Kreimer Date: Tue, 18 Mar 2025 15:12:05 +0200 Subject: [PATCH 442/549] Fix a typo There is a typo in bisect section: show -> shows, fix it. --- book/07-git-tools/sections/debugging.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/07-git-tools/sections/debugging.asc b/book/07-git-tools/sections/debugging.asc index bc9d4cad..dd615c1c 100644 --- a/book/07-git-tools/sections/debugging.asc +++ b/book/07-git-tools/sections/debugging.asc @@ -111,7 +111,7 @@ Bisecting: 1 revisions left to test after this ---- This commit is fine, and now Git has all the information it needs to determine where the issue was introduced. -It tells you the SHA-1 of the first bad commit and show some of the commit information and which files were modified in that commit so you can figure out what happened that may have introduced this bug: +It tells you the SHA-1 of the first bad commit and shows some of the commit information and which files were modified in that commit so you can figure out what happened that may have introduced this bug: [source,console] ---- From ff991f295c778c64f07a8375c2200a4fffc54278 Mon Sep 17 00:00:00 2001 From: Trevor Jobling Date: Wed, 19 Mar 2025 11:14:12 +0000 Subject: [PATCH 443/549] Update book/01-introduction/sections/first-time-setup.asc Co-authored-by: Michael <2701605+michaelblyons@users.noreply.github.com> --- book/01-introduction/sections/first-time-setup.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index c5929483..10b7049c 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -42,7 +42,7 @@ $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com ---- -Again, you need to do this only once if you pass the `--global` option, because then Git will always use that information for anything you do while logged in as you on that system. +Again, you need to do this only once if you pass the `--global` option, because then Git will always use that information for your user on that system. If you want to override this with a different name or email address for specific projects, you can run the command without the `--global` option when you're in that project. Many of the GUI tools will help you do this when you first run them. From 47062ff8cbb0031a4b031424e4abdd7a4f3d5d25 Mon Sep 17 00:00:00 2001 From: Ryan Cavicchioni Date: Thu, 3 Apr 2025 01:10:43 -0500 Subject: [PATCH 444/549] Fix wrong names in managed-team-flow diagram Josie and John were transposed Fixes #1953 Fixes #694 Refs #357 --- diagram-source/progit.sketch | Bin 935317 -> 791533 bytes images/managed-team-flow.png | Bin 313379 -> 218193 bytes images/managed-team-flow.svg | 187 +++++++++++++---------------------- 3 files changed, 69 insertions(+), 118 deletions(-) diff --git a/diagram-source/progit.sketch b/diagram-source/progit.sketch index 4aa4eab838fecada690e63e41212cd9db663a032..51603807a5eec6bbfc42ff0083a4cc1508778d75 100644 GIT binary patch literal 791533 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 z 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%0A@L(6Xe{XO9 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

TIzuqlo6y#?`bZ1L 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 z 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 z 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

Jjf!joR(V{8dzv&t*0OZ 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

cC7xXv4J(}rsDd8Q0dlpiRy!1p-bodM zP?_}ZsmHdbGAQ$((J)p8c9JL<1Iac`tA#v zot6@vp&4LnSi|W4cccytwOh@Nx2u`Gt4|-xQU6o`UTEo68V6XcJO5u^-9I)q<&GuN zL|RE_wDj4l_?a)jLvxfR)LRFs75woocJBqsJ~!2&CvT8{Pf#N2E#Oy9;;lVMbhrW+ ztetN_kG>E}>#XkMW)Iq2mY|xGHao1YV0S%VlB*jG)3U={Nj2yxjHf@KFI)&z`$nwG z0d;5;i+XKeQUmT#@r zfy2vUso{LtC9?=TsMfaG9Nl9QNG*M^-S=Bo=&Nh|2jhDMI8oBu_#wMfl3ZAQ=c4v9 zHi{?n>`Ukxl=-j2-;HZ_6cDiB$x(v#IyKVcZW)a0nq2XQzbTCI#W6g+V;(76+dN4nnn_CcD=VO2QZXOvAz{Mqsb201*Mlw`vRgN##qOM1-)R24aU=aes+sOmTxi{S&!F#{Cv_ zJ*-jus(Q=(qI%2v_AP9pX0=rId)cm25k*-u0e;$wP6BAN_&*&+PF4lVw7e)FlA_e6 zuuRu@k@%_TQA8?^*39+k#4DxNFVq&3xN{D!oLodU8iYOn*pnn@>wuNC`-2uIjySqU zZ&{=~=IgBwS%iz;YoQZ)UqDv7skf-N6OFe#rtkWU#&9U_qJ8A%tW4<~A8Q|OT^Br& z!#r^BMi~^6_@CU5D**Rm$g&k=_jcmkv z1X@K_4o^FysCYcT39UQrZlE`32hCg_HCir_tv;(A4Po7Y&KdU$eL==Y)m;AJ4(~@sVlyZG z_zbla!Wxk8Em-`jx9_wzh@Cv@Lh3ycVhBL^&~16l@uGT$oQVmLhxLz&*G36f#3hAQ z*Yt%*IpiPIi&;XWO|Bwe?YHmvvs&M>=VrwT!yF!pF2wVfC;r#9?~% zN>XS)ElW_nX>Jv=IIiLlV_f0Tu3a@hxS#Q8&vx8o0_b)}Dq?h{X%;2%o#0|9{UxVC zW?MUb&9hrX=bgU)Qhh$wW`Bq7VjOoqM)1Rz9}9!<(3w6|qhhT7KspDEHV6JpK%Qg1 z8*s07KHQL~OU1L40=cALHP)mHA)zF)bJy0q@wx7tTbKSwO%QHf^477bk^oP}Zp7m&O5aN!{F0`_ zw=d&ZC2={wtQ!3_RqC#A>bU%y15W_D)>dD0F&TMP@yhE5uq2mU|8W=#6% z43roE;6IM$|4!JnLjeKM0{{Tn8uu$Hg@tKL_u$i#%_#F0e z(w?+_7GdP6;ZGi1R99v#vgO^6cbmURPpnsC{Ftev`Kd0Fq{x^?iJPEcXVX1EkD`0EGtj9Y0Trv%T63`-m5g}e5_S1 z;%?4f+}}5r%kAE(l_h;@DfCgF$UOh0$&0;HxqB|NyB)OfjnR|!aX85Frl_qdWtTYj z=KQsklLOYGU-@n7ZjdXuDW$R{Ia@w7DXCHX(Q_-=y-N;~9n!3cCs4Y($XD^9- zzxnX~Sl8Zm9&w@h&8hsHL|;Q(-|AI)_4I zSabtVqh@QBy)#+QCcAn$zLlGGe6QVDhmd++&99d2n9i2l9#26Bl@#=Kw>cqka_^e4 zSykUJd>a@3T}OvKV$AmTDW{vgb)&Bsmql6JYrQ^tv!egmFHNrYAC9qM;|Jbcv{=FY zh)Rqh;dyWwV0@3jbJ55itdYPX;-xJU4zy4g?>@S}wU;KfoOM{48E)~TL!W^kI@j5c ztvGNGgL${+D)h&+rEM81!A_QJ^UX-Jjxpw{4EU%@-MwJy`aV|&s*pb~xMGJ0hK{1k z(jI-8rSBa)g18oZeRsBK@T9#_ctE$8yUWiV6mGBxFT7S{i@fSb-#*XVx(71!`&)`i zveC%$a$L~S^CYpqtEkGNXxqKEyPk)vlw~Thih2fmH1KmTyj*pHpt(cUrknFKpz%Wj zLc~mE)3A&7OS^!qc7GWgII3^+naI+C5WSz_NzOc-lp>CtnOltim$At_DsnykWo#xP zbJ%^}964#vo2tCEeXiQ3)cp45Y=dKY^YoUNr%6R!-4N;TR$<_ET!NJFw?1CX?CR?5 zusUyA=_2LayT6U>DR$~}yiSWki`*4sTg&WsXAMhY1}Ih*k_0uQ4bQx|#cc*Zmo^xj zlwNI=+&yAU9KQK}blaNR-R5Txc2;P1w&!$`+$nrJHN34VPRZP1l0FS}Wo$DKsy~~& zCTzINEk9_Z7)&O^_BeVB0@m@7P*2i2bBc{zM`OHn69(S?oIcX(mW68=we8~|qTNwd+S)E^+RJt1=^iKBG*S{))`?4@7%D_Y=?buHx%VCS-X$$6 z-1kK^1Fx06C@wm&QE_koO4lGtR-X6Q=$&CqoY51C8#>m0;^^j~Gnjpohja5NhtX+Lr_7f_o@m93A2z@+gd<5US=k`YC5QCN}I-h*>R_ z2GGJ<{iQ(0G7* zZh=eMA=*=;Mdqs(c{4}x5byXc@$b6uDc8kT*LJ=s)!RNOnY{V|50MxqH5Gfe!skHd z7rNcmr0F3`2Al3HYW*W<5ikdh(8TELB$R03^_>Cu$Ja+Io7|@{UH8K^Sm@Kt&-c?% zkbk~||En?*K!4opCeLoIpXrsL1~aK0t$5#OA4lwxD*YaXM|5J0AGx|mo2kjEp2vXKbw7P*N6DGJ>JJst)0d52T?Zv z@ILk{)@Eta$N;@Bm4Jv8;35tYI=m#+Xhs#gxc~<+9Nxsh=D)eE~D&9zc;FOfz6jvfljT7O(K@$ zP6ZqnHq~Z9a3CEFm(l6sV4grJ`Vc`)eMwDi?b^$P`l+2$#|kC{F@3Cy;1I)2*r72W?afT&oM{47{~k0(rilXD>S-1!T^<8jtn=K05}Rg$_Va!te40OL!L2FGq9+K;^Zjx4Ow+<=dmWG`xF@4hc#+ zY=?UxdJ^bPA{C{UBNi3%9h!T#ig|91^f5BR&KSF%vcsu>Z?aQ!Cr3)Js=2JHu}0s) zWc@;z2*oev{v&<}T;%4)zGHH!ekd^j#I zSOZ*Eqwm8_QT{?ZbjOF3E?4D6p(6=mFhl;9YzTmj+8_*c_uGqm3i^rt&A```$*I{q zas!v6-KP|7D4XPeHX+b@O-8`r=L5-uA|)v-;lBsa(B4yucuFK-z>{kfHV!0yaZMze zu{=ho$~ZX=Ww<(#BaGUJk%t_WFa>Yt= zL4^TV+@_4~Z4tf|fh0!xt4Pl=7emv;c*uB5I+w>3?OqKh0k%w8BNGpm1IF$6D9|SS ziJKO#O~L-eV+09o17rXe;7)G>HfK#kI^mOWV*;qJDL!GAk$=5(wLFl*ph^l;CgCpj zbFKPu-588mVMGfjx7nMesaFoLpqihr^g)*Z9x}DZlWO^D794R*@^if5=BAh|ADTWSoxyL?R!q}D~>*hgSdXs}%=XkipbJdZ)?XxLd#21wo{D3e}-#t%UxjW=axB zqem-YKu$K2bLc`?CvA&?6tv9aYc%&&sPAx9`;*Ll?LP?OTuGj<+8;A4K~vqo2}?VT zhoK~3UbvSk18WbN;1qfw#_BaH{Vl;KMic=#LQ((RBk{j)!F>;2Js&Y89p-(>j9H$k zd~qJ%!+h=XY;q^RNO;pj6dDx4TEHh1l0lKE5Br;#k}(en+{3z_7IgrDKq12DWKO1e zI*l@RJsJ&fn?ECrjwrwlr83~P{G%x!88se9Ez?2G2ZZ34Ac0G85J4h}XfjeN(V9&vSL*ZluMxq1Mw*`BPw!@72ntyzpJac9T z5_ai$)r%VAH9+^*L8x#d9xE0%!)o~`SBgWeaz10tP%4yOQq}QRSn_Qt`RWleK`}`< zi3wDZqB-G3rFbh5eKErHx5w8mtz*7IRzqU$h1SyWae`gIgIOr}7(zRNm+{kW(;(1p z&2)*YBLxfoz_>+J20coYsD?ob659v|s>7j1*ziv*<7dOlYwhj# zb2`)r{(G3rqkX#D9#cX&BSD6`R6I@sa{@wuRZYni7edS$D_OWmLud6cA(mth924mqpJmI0(|9^A0$8EA_>;3+B+wAH?sZbF5K+k4S{s)-B6n~ z$f7MfOM;~gcDp`X<*4~BUa8DNQTs@5;v5W_F*nEc@93H>Y=K`9u1%+^TvVsm8K6w1 zIpTIy@aq@gOBm+{I$qT}O4-0Q=j^k8ST?z?d-a1b`sMe7Hje$x!=Rs2Z)wGqPm)OEdK_aTL+ z;7Tp<2#nTxlD`S&yHfMX0|?eBRnV+-asE>3IR#Te1C0}!Pn#l4nvRPV>9^K?qfq9R zeVFTj2~td5AC9&tQM->FfYB{9tTBdjYO+q6TAEKoQGgkC4$!TtAp?=rZ-!cl22hQ5 zg@JA+LpYkKuQ7{2$pdg#*x_)xe+j=>3;Zy1Jdi6e)2$#FDn8<0D%)j2+~XC%=A&kY zx6A6T_Vz`u6sha64Lr=@&f=O`S2#(>JL_iwUSF#q&u1SSLPs3{4$_2nN%*l7bO~&t zFvm#uJ!?{p`cl2y^X3tV*5lG;)l5rKR4QVJpzrIbtWeMKAI_X3mz~`8XDc>W#9qb# zZ9z@%2|KcBj*{jP6c@Z?>6weHGjo;6aq^?1$4>s!uTc5e7qiJ(oV=FlBQ(rg$IT6f zk6<1PM*QWYYQU*LcpWYsO%KS?YP!l&Pdypx8zBdeKjUZO$~pCMjOlVtDCKBBqvl%< zV4(|d+hz9H*-c)>d94YX6nVo{^stAE?eC4!%WeM&O|&lDA#uuAVhi&J86SPEZ(dwv zg+@xDi4@44vb@C&6uAFwRWJb_50+l8Hb+mMHgwOYMenx;IKc>X61*5;ggF&CE@Ops zLHjUXYvl>+GHfrh*4M{b8F@@nVztJo;?LI@1{x0#CV<$MKmo}OHB=spmT7j5-I!7M znCtaclkpa2nYR$-n5OXWlKnGbA-Y|J^W!--12Ghil8s|hWM+G51MsS)$f~X%Ez54$ zKoO(}1fS3Mi~aX&Kvnpqf(0^vwKbtl;T&x#0)BPBtE1^fAlHMe*PAKMn2x;i1>}80 z4%32nuK?Rm`rvz2yVjrRu)KG#I63NS&yslrff&4<|B9%>Gp+s?8}~mrr@MCg49c*l zFjs&_#n${L*Lp0QE$|5Uu~+$o+PZ~Lx3C$03P7*5TT2}}gmNTAM-Pl~E%q3CAOu^(5{D6r!|lW|OpLd76xlIIxy3setyC84+7&Jr0`s`3# zl4HnK*gZ6oVU74@U};|tn1!T_$@cou1T@2~O+74=4GWMTeDuxIi>#I7vCf?uQ-#|h zSknf9`t%n>E6$~k)_0frPARbI!y4yN-dtE{W5?G0<%$li5wH)$X^P2DtWVX*_c(vY z&PWyVm-y)DRSU`}D7ZtA$I2>$J`$wxRy2tKL5c{2=>&m%Pm}AlCFMm6ifE!lY;!|c z^MDXD?xXi*d{~`CAt?}TxCCSyY`d+yyo}GZkUO%FJi-JWf(s$3+e&1+JUv*sB+1ch zZ-`O-lH1k&-7DcBl)f@;#7;FVIC-MCtXPS5D7zs*nxaq%QhNSZm%D{*OaktO~+48h)e*QNaU zp@Q*^R3Ura0jpWkL+KsYM_Q!KJAPb@%TF-p#Kmh4=HE|N69#}l=Zo}s{y`DZ(47c2 zkt0DyCFX^>wKB!u8pjZ{kI0orqywbVAHPNw1C7a!Eb5qe}0w{w>OUM#XL;lGH z%}9f4u_FplEwn{ILXJ+g5pS&lagQ43PV zc=@SMmH@|>OH(on!yvv;$54f6b86n~^ya5xB%CqcvND9B)_S-)4g|?9mi?VHSxIst ze>yqOtcqVCKeRGlXQa>57-I~p>hVW<=`L@srkCfX9ow9Vy25>x^u+%RxYpjJnCu~_?&A{AP>XtZ|XI4t}19G44-teceh zJFVT(=CA|cJ=$Uq-2*~(pa9_Uh;OnS^06ulq5caAwiIi(c!9pcOO4|8Sz2KtoTDFN zkI0Gia+%@>@ zqeL*V%CH^q58@lxyyL2C{NmV0*N^VpWa+CVJ9a+pVLwz^9${Ngdd$;oZAk{()k804 z&YFLNENbOs6_ABbPwm$X+lCgmbfMH%%lmZ#pHq*(>FnCjo|z-GNr%4n#A8+FkgR_d z(Y2~G;>WBJ`R~S7ZUBQLo9?rS`nzp>3v@>Onm`T`VRf7Mt`RTd#47L%y}sH1Ov_55 zL3>!yM83lT^!?r{{V}>@kJ9pd#t`}7(hpT+c_WDY9Bwn0)qx7TP3P^zSV+t}f7I;SRb{1H@Aiygz&@0gx6J|y+sgx)pUpGT}xIC{bVF(BVYWdIXCfFdM09uGH1@P&WVeK=szXH6d9F(;ncA2FZ z`c4#hsOxG`})%DjLOZM%%? z4fW4qDz)*2EOTf(eHIynS3tt1?k#|@aM8L<#1VWBBo+JLg`pq;z?an>yjv;yt<}5H zRg+I!j&HzSX!Dghp+c6FeEL?nuPLp(nKq@R;nE_*--ZpA_9H9~2KX^y#193621$~+^Np4C52PmdW9h(vpCXgc&jJ2;d9Ys} zvD0Bm0CUDX+B-Ct>_3}~se+6G-Bi^SGJ+1J6eG80kSMo@bCBf>x#LP(W znA(wrC16}+L~v_KmS&8AS7FgKN_=*qeqLtGy1trgp7vGkWCsr7AN&i9SOMiwra0vw z>-VHHGnC0B$yPe>wg4FuM0fSm<|97p2-M7ZWeDA=G4p;W9m|(*iFv-@i->THrDr=azup z&ug4D^{>hOOV!c-GD#!P!V~>d+>jqj<&O+1IG!#f5%CWho0wO1TTtaPr*eGz>r+5U zmXL(-wcpWDpu611;5I$w%HFu6NJg2TFu%R5= z-a6jY5w${DS_`E$p;qGGnP64tXHzEYo3YpKU)^N;|Ct7A=ff?y1*bhc9C)&hV^@n! z%HU6WcnCPitoCfMW)G-*U_I9S4*bApf5(N|XXxY8S|5l2v(5k6N>4OKqOhLmOTZht zYPo~UcKnR`?A=3wpW}NX?x#e=(i7GAcSmCYP!=yiBJWU2#ObdAOzCiyO^Sa?bJkx$ zZj)`eFECR?zp{d@Gm3FcM3Nk}W z8<+RFDWT)-xVQ8@LWser7TgPBY^Y3<)&@_0?4oF0_Oi{Hza+QIth5WeibkfpGO)>E;q*qBAg0 z2nT<`X5{IaNuYFsEnBRI@n5LX!pLpz8KDGRzL#Nc8=2qCih&{IX#UO6}@ zwyc7>5jn8$>E9+;UVF6M(rswpPIs$<-d;turJ}M{Xo&2h4mRYc8MCRyCGx8Qf!Akx z74!nM!cO|VDx7V6@0FEgNU?mH{jh=ie8jKvJw{zjD|O&!Z4Mr27c%T)<^^mTi=0;= zaCn%~ydY+QGLea9R!Lr3XSn1mDdFdKGT`Te=+T>)Gr$t?f&m8nN_+DFqOhg# zgpPVA4>R1ZMFa*h6N09w2xTA}AQ8dEd7-s>KnpBkf~2dQ>&A{hRz^PMQHajG;z_H$EP4OQnSYMVRkvUj_ z>CCI7AUf1Eg*f1v9CMWxdxU?=TpR`ejL337C~;(1n|IEUb(d$GE#lN^yI9W0mURB` z?D3n?JDi7aq$im&qzEPZ>B>en>BfZ{v)@oP(ZLX>{?^1OPFtwE_5?JUF-7|aW%l8l zox`{DWiRyJs$==pEN<#@SM%)=o=Dij3jJwEbN-0A2JkVYu6!+cN$rGQ1wv%It}Fe$9>j&i1;c@+ZqJTMjLszrM$R8i0Ty9y@y z8PVvWv%OSw?wKmr*E8zpPy=T|CE2go*LcDNzu&j@Zhc#;hEZwrccO*$9f|<*uXnha z2hE(kc{p*qQmDD>Qh=(c*jOD#2Q@xbNl8kIyLJBG5d%qLSbrYUJzM>`#3V>MA-(H( zkH5%=!>fxdlh9EJcHIYe{Gi3OY0PSn0{D+vOGxq{&U40GOvf zEH&NmBS+IDWyB{(d24@TPd|F1;9r?}cQy@%jbge1je8M@Z*biLkR~|){^RUA57`30 z7#*eK=96P<&)ezYQm&J&XHM{G6Ws`&k13EXKfz?&DNB=ZNb#dY3~5D`)yx3X;t$2w zPS3&Q$HC+yffF~Tk-Q5m+DUv{hyp%s{a`}&6_o7Xd_qeD)F%S^x@*kdAwU1i{Z1|R z<%szB^4WjVx&j@Y4^_k;fTGE*7=jSB62R{PYMYob*I>w%EUJBZJzRxQ20L7pOG?GX zuqSwMUreZ~C^IUDq}OB0`3NWgNj8^A&qzw+^arlPvX(SxCOg_2#pr`O2JRt^K56%E zTdNo*-;tY=zHAlrR^0hb|AXoCENG^M-N}l))be5K@8C`<`%*f*(X7 zokBg4LP)*(fzW?5@?osID{6qSx(Y6+mT`!%x(8-Y0G4isc(I`|TkM#pi>=jN#j8s; zTg~j642CmF+N1h92Dm~+GW2$R4(2HmK;9MzJa*VD{vm-kT_v7vY0ATx z({eeeLWO>ucoE$qm5TXU;17h4uR(QpddR<07`H(6QhT!e>dgXa^MBYyc}Pq}v=R9? zZ01ip=~~#=hTC)z%8iE#kn0)7c+Rojsh)J`L~^*s>k7sFlmS9k>|ofev3Y|X;T zk}`^m0O<1U{&rS}oa9a9PXZmy!+c3)%vUUaIqWU%B4&FMB~5Mfg53UN0PEzXPy~og zWDVJpDD;jK5kQd25~#~Db0b=6AVNbd(>Nn-{P( z126;!yBiv^5+0vHKvDp^`W)G+Hf1ln5)-(y+0vzLGN6L?d!WR{lRBI8KqP267oPGI z0DR9vnX!gdDQgw`qx}(~DdKw~GKU5DIi(8%C=JMw{WJG3z;7UhfS+upUs8}-Jh_xf zk&$r_7pSG_&x8l!7P-q?gDwaeQUMHvu_D6&$djyBLM|oe@$VO9HwLL1al*!F-L@Cnfx}PgN9mIvmvxi4&a=v zHY5DS%I^{6vc4#YflB=47;^-%SQVBU0DGiOS!j}i#3A8!*KgIdX|oXlg*EfLj*}U} zs>XogxU4EMSAtVEOPprAvj+VTvk?WrMdQB+o_=V-b{4V=0Q-{Xpm63`A!Znf z*tGF%ajR|qMG&}hxsPDmOtcyrzgWt=)?6u?$m?JU_q6#=Ipjv11XUy4a1sZ4L4I-( z1DOfe*Hg1kh4TYQn83v5LyA$u$V2T$*;H~{<-?&5(4zF_b0yKP;zz&bM*rGb`b>dw z4YX^7yh3tN1^L-8;=P_$?SR67&T9Q zO1{!3*;}F~%xWq6is;u+kLvCno?34B%yq_Fn-^8JED&Pym6&4DZKZ9}27R)f;Z#ih z4#Y2RXk6gyUr$3psx-b56fkJW^B5sMxOPiFM6APNKg!_y{HuYpINzxI>ECsA<#~@P ze_J!(k*7u8{tZnRmoIjYuSW7bIZ|V3-E+LNbI;@-xp*kWM!Du(EtGa2N?g~(c|cr|Gnsik)1=B;g2vIExV8qBP}x%BL}U3AR8+!2Mdd^ zAe*2Fy8sKr{|fih(Q?{k&-|jM>#I!w7bAOgaq@qV+XeueFBDjuz zcu$BaBN|C29dP8x2c#!#f(RUb0J0x+c=Ns)GmoQ2&L$T9O%;GdYWjUJdK(pif~0_%h)u!Dof3OO?t=wLmhMZjL*tWim3WhjiN8x zncO+(E>E9Ly1h9oG|QD9dFw|1bX89BRcR#2x#fMS{!+&qp7)(tJ@lhN)#xKn-kEG8 z1ZQoI3c9ih3rkWcEaT{Rj`PZ^|I_rs_E0!2FFSc``nBS{`^Ukxll-fYuC6xn{jr3b zE9aO^E}}xU0qrCQ0jB_eEF!e-Rdo` z8&eT%8mB5V#4f+w>G|{<_L;1P+`N8Bac0C}OZIh>x8d8*@8Inv>;%>$T;rn@qX3gT z|N6Uh414reR$HXhwQ8cz#LmPHdUv68JL!o|T57WxZdQO)0!rdT()^S3zEQcRmWy7X zGGhHnR=11(cY>T^v0xDM&NMYQW8vW+=Yd+Nn3bMMeG9Nv6%GVRzxrhr20U&}^c<*B{& zVLJAlRAcFEWtmM+)^`kR83?&Llj^8C{Px*>p`9!V`JXPuBoMK3z>v5K_p{P;ZR3w4Dw+Sqt8(DWe3Q5h*wAG0%MZdWBSX?#)Xn z23Qd5{j;m;TMq$}c?or6L-RapyZwFz z_A*5`JL)nK`{AGy2br_ zAk@sAqXeL5w(a)bjs?lly~M@gW`2Sf^ng|^zjn1`7!$iTpPU?GgwA;swRdOtnt`ok z$Ul<%`ApI>?liBUM(9(>G^GSjjOJ$3{zErMFAW(z1NLcCkENn;c*K3U^)L)VCE()~ z9gxY2l+uMC5A;zpSNr0!&f>E1wl|J*@(m$b#qC|mk2lg?Yt_KoPyd-qf23?N?mgyT z|LPXh%u(#g3Py~m;D|6x3V%-QU+@}P<+U?^H| z46mgPBxEK+mG)@h7N06ow$b8n()Nhr9v=0{YH05db9xuzY=186T>Tw*!VXpbC4?&+ zYk?jFU_K=cWD*G%nM2gb^~w&E*n!MDW`lBF_nxqB4@u2_Y2zI|1}BIejfRs;oFh|S zK|`B*9>dBJF*vCgeq)+f1tXex8nX-Loh1B6GLUt`N7T0Lssr!W87v;;U1s!2GMv>E zbft+PP~->0I$%#>9B3r*FBQ5zl2mmRuGrO_)w&rmNYy$wiAk`B;~5mn1J4=2zfYqo zYK}`4Ewo-$GhFmF9IWcW=?tbty0pt@Pjbc-xOd59aadv46&Mebv_K)ibkg{rXX z5Le1SU!MYVy@oeO{SkuYYQ&8=Y3mp+>t!yWXdhl7h6;YP?m18z zNM#^A)n^O2GKIe2X-h}b&K)#io;R&;SaHdwG_JPDLex*^S(rH?`i6~w^TB}1#%_o0YfxB{_yNg2f?-1N3{%_*7!Pca|H`98JR=DhE zg4IGD{x!(@l!$?im;u)bjItJfPwM|vfNXkk5;&}*0@iR4IRB=`4#RM5Bppeo)CxzvU55&RL{>87{F$?O(sU!%u7vvZYcX@%)+$9|FkLrmI zglM*|>S50q0nt0eSaz!v!Vl?d01MmCc)pv|8UWdyK~&j&Uky7(uk}6u_6b)X$sYl# z)b~yYiJzEjVg|Y8Js;CvsVM$xc%bty4D%Lz|FOM2K1lHQS>w zF8%$N>4-08?$gvmj0P$0Iy6YO{zF&x<(&+pP&QZX*iYmMT>Vckc)jSm^su=_KS`b6 zjcZURF@|Q8n;6XwN_)}XWoS^;?1-S`2~zk^!u78rXYGvrHLj{jWZ2jm{P~^GpzBC= z1~O@@eBU~%6TcFUcm`1L6N?*HvcelLLCrb@fi+kHPQ%@IA`C#eky&MrE+M>KT&Vqa z6U>0WJX@%{Au&U2J0`Sv^KUJoQEVUY*4txm4{%g+#nr&UR8u$<^d|;gygIaChK+w~ z&z_1U>$Pex%lOnFD`~%G0F!eJu!>jxH_Wj;yu3hPJ=_}c>5-P@LZ?L@hmD{Scn5nS)UF~niXq2GU`Z<-f{Rdiv329bubU=vtQTKXn~=s{~nW)_dg4&n#{wz)5S zK_l_>8T87gP{ilnm?n2>-UTQOql>Mf++!jm#SJ0lq=9y=?TvmF$sTY? zQdX%B{4?S+@7UH2C5*8Sn_ghhj=KL14s4TBQdO_*png()I(vs0`lX& zG7KHj0mN^J-)ojYeSsvazI`4K=%Wx88z{8*}5O#n&;qL9eT z*7#H26M~JzQ~N>%%mk)IP9U^l#DS)H8dRHO2QbUpDw)UqEI*Ix^P{(+Q2;vkdbw1A z<{`nB6Uzm0D?u^$Cu#H`Z7BdzRrb9n6XpxMUc>{Z=(_7(3AcfV{z|m*=%z*XMU7&M zFP4^ckT6gjwK|h>Yk{(lze^AgF5KD)_4T^)&N?cY$FtVy;!Z)Uv^|AiInw9uxT(%7Kvy8z%6Sky&CFIBG62^i!CcNQy|n5+xZMD?RtD|gUGN@x=P3} zrouU1+-+r8JHRCA41=eEZB|ABi`Z;OJECFYdEQTnDUPlv^&yx!%kKw!5fwZKqtKU0 z%oCP*%0mu{giRk61V%zlksd0IR=;6!WNdeKZVXkJaM7yA0nx(&Q~_i!o+jOfocFE1thH<45a{E?-xe}mC$xJ`w}p2rbPgnI zjf1kNTQyq3+5^gNOT3$;VzS&>f?b22H`NTpVvF9VQ_?QuBT462p7+#p3oEax+>3%W?%m+yg|27c-!1;D zgX_oI$3pvI>ofeILVUNjEcC%t06!5M((83s$(Mqs=ekH3F=oq6I`@s#x^Y2l6L+gw zkkupTVEjfa?_i$fJQfvc=_Jzba6oOG;10pZjz&J{Ks3~d@!{3wsGo5Qj}GyK>G`a; zRNNVXZt~#F4sx1b5|?2NrTQhnhg`ITcYryWEv%^V;L+~4?!TS&ui}Uz@}JDs=WE0!F#ViJln*sE!9z+yH$32cHnlvq;Ei{ zmGR$7+gHDF92P|(o$%N~QQX32+N|Zz+;xvz8+R8HD&N=bLQO zuWv{wF$&r;*>y-ZD$kw_uC`TERFpbPP0&5Gv}ubuFK0u|0qv&12*qJ0NZ)i-lacid%I`t~n2`W=r_>dVlV27TnUFViVC^uOn)cd$=aR_8 zJajgY@Axh)5rWqnkA=afLW+T7VE)%9E2i4uD6%K0^x;`~ zgM0c9S!`qeuqAwo$SjYCG?%EE&QrPGk zv+}?Pl9(Ipr1nZv2JYi7w=FNGx4iqX4q-1J`D0cnoSLvbbYBhIuzUHm5QR4oB*kR1 zqp7xSIgRSiw@`okLf{BSy5Y#N1#oik%jE9Aq0er%iCxnRFws=AZS5 zmXVIM0NZ{YeJnmc){W8^ht}z!UDtGc@r{I!f3kF&H^zB)?;}}vCqd||2>Zwq4}o&v zC}rP`e6xQ^^GqhFoBENcJF88PXqaFP zBdR!Y%0GY_`#jFkQ@9ZQ1eu?KUYbJE`LEM<)#_X_)p{*D_BL)Q6BWvA-P+VfW<7=`T9nt=5~8KOr|^$D*LFynH~H z$9lfGaMGTU*xp_CFrO>Slf8oYA}07}TGEU&uKqYXos8X_?B>kWfZ=%VJ#GJ|fBE%g zhd-!otB$%gOe$i7&#+$tldv$}S=# z!ubE_U+WI*L&=}$DcL3#8(d!92k>S<%-IgIinY}D44g^+!s>mgMCt@ZD-y5UrmO;r zB!lgLUgMjT!ofknX3U(f7d@&QzqsB%9n@vXO!+gT#>>wx4p(zuJ6m76&m7*U`bATq ziFFLc%hE^{HH9*#XhxG9(-g>_Ir{}MWtc0*X65$FXp5bhx!(P{c*@B|KJ#!oti3DC z`G;h_q5tojz5RmQyy?#y24C8)znzs? zOndLpPX`|kmwD;P{d*0u=fv4jy?r$0-|10s5AexUc=Ydh$@%B?ZL{*hD99ajS^Z|B zk=ap6_L%c{GR9so+CY1byarv#zP;gNx-uhuz3$?$xq$#_u9bA{LqmT3$r`QYY4k|g z@Fcf?Lvr)yyUk~)JZDERk}jmVMDsSD#1s@aRPo0TWf&ivDPlB?fYMNelx8+C(4Y_;xcT zuRk}bZ}V#f&JM>DrM<>b@LQkUg2*Mj{qc2Q21uD~Y`;_%?@*dd%+Fy#EN6mOX)r}sQN-4qVn zhpSS|k=D(_n{AeJ^|;AO!^x!*PsZX^>)Yr*ww9iAS6+M-gMq%%ncAB%X@Fw^`^FP( zjl*)@xqk6k|AP!`R{pNqwA*6x{`s2&3Z1EY&W(28eb#e>iMFl_F$C;q$FE>mM0ULx zQI+?jHoU;+_I0M#Z}9df-iN!-_4B6IPQdgP?k!Ar)a@K=bIU`K>Gyty8asRQ{LMy0 zQ`y$;UQqcQ%`hNC!gamU(ma6R;|N9Hn zt`zJ0LrDGT=3<2olKRs(Aok(tt_>#7Gn5dx_l6$s%$2w9FDlyvU`s9r@tu8=kmHi( zLhK_kIpwo1$@A?K`W}^VRVd~Z8V%g zoyApUeJS8<*}+Y#GH)koy5?GE1yT>5hBr+)U|ZCh)rRb`!JMDYYo7l-iAz^Jt!yKX z1r=)r+0tNeo?8)Zi}AeU*8eN|kaHqxvvs;}!u6%YubEil&mOc?LZo=ix|DM^N|h%d zP0lm>pZ(Sfn=Q>Ww*63v7`K{2^CZ?1?|q^I)PsfEjtEB2fg)5P0!$WC^rLcBO>DS~ z{aC2o2M|Y>{n!X6ZHE9${6QKylXK4~OwB4ZWrs5O&lVkvF&?X(R2()Hv!w7zcijl= zUWajDaS#U9d}X15Zuo0;)GNL8jr|255$KcMg~?o&<5}i{GN<4pCiGY3@j{z&LZ8$@ zzb~jb)$J6gut?aW2q6rn*d0fF4qv=!*fs|C9)0>~L%cNl%*yF#DFtc==vbHJiP$NeOCpu4X*WQZy-C&Lzu^B9d7UUwR=t z-Bg}}jujR+dfIF&tyXMh*Tot^nN`~Yd#&vtuIhKv+||CQDGoI_;x>KkGCW~FWc+$) z`#N!zW}@mj9a#1ZOLF0O$qp=V)n{;BoPt^g5+=d9L`6NbL;Gs`I(40DLBWlR3v1d7 zpI*I>;fO`(!u1CnPG8Kt*t40k7F!0|=NB}feX|vfC~%_}b_byQ(Sz1{Ac-ptS#wdO z+kImr_1=b{oe^d3Bj;p;K^7BWLxT;8Ap4x+K0{Y7b{VB<^?1}un&j9PaIzg=0)zTm z%E<|+YC0=F{ z&R1?yEXttv@h!60>*U9_?yosV>ZIXTxaUui?dH-*Dv2ASR)m|#-u31%`1XRjEwd5ePg7R=-EeJt%#zKU z)Pllt`(E;T_rzYvy+iyqh^azwl2zjGkYK#HHbI=Azw9-)JJ>Dm)tSy&_!#v(3&o&L z;RUyT^pXoS&WUyZwoz}Cq8B-NyG;tM7RG{N>qaT~m#ti#+c^^fKH;6EO5CwyKnPDS zGp$0OEH=B^)Jy)#J)xxaj9?V6Kl2-Q<-(1apDMyP!R=?C zWOH_HE;QJ=m`jp>KD8>U__BZA+@yTKX;9L%Hv#MNe$KMt+gtD`uzKB)-Z}beoWflR zmjxS(XA#>JB?5tGkwJ}bqaj?gPbZqZOt4}$Cdg0dc{`a2>)nqYJ;YC^Mw|&VIrekd z=P*)bURutOytURxPtcbhua^heN_siO9tgJrz>F2u1m%~m_i%)&7by*fse?OShfhci zP(Al4Xek^u_0Sk5Y3yL`dIVncdd8@O6I&tb5~*qon`Oie(zSffP~#N-Q(8tE$tIga`lq|8baBKf4c#fTgGDFcGph?4qa!_R_-GPV4uI_ZYy z1(QG#GH2)@3C+)6Q8E+FGg{B%6H2fLBLw2;1$A{Of zer_vZ6ao=PP6(zRGhr0E3xykP1#o2&pIa+D6+Fyh#|K37b1|77C+;~!G6IwY-D5qs zVina9=6)y93-`=zxD z^EgI=vUnL}MAw6k*wjiNI@(xJ5~~n7I56fS^G;XWXEs3Hejbp*M9tjMSE2zy;|nA% z&(E#v2PmQp7e*~v5ekE=gUvlBi!3P=ze6*QN!u3Kjc_B~OA1xHa>S|4E_YO1Ig3ZS zm85aF&@MPOC+_9g+dS$ltkt_IF({qL8xc1FN&baucGDFp;1Ay<4Y0`9L|KA z^pOuy=V~TBiCGj)2JiZK^*kG#_%bM zAz5bG!$83HU6`2Qy?~Pko+T=pS1#buku6bb7iHyP$RhVM)3yY2O`+Z?_H{Cp24#Mp z;2M?EJ^)AA_h4quV9lgK*f}Z_pAYoFUfPdeAe)1>$%`3qR?tY>>nHT+`1vB;(I}G+ zkhTiDOCvxs>o6o7AU9h*B3#)?0l6SIUHH>dyr=hLz{b=eG_Anb9F9`ZKrRKfW**HX zVhA7Vk4wFDiNM%Ek>tmOCf zCQCz0CS4Fa4@Id8z?9(Cd6e7}F7WTb%0?_?A(zbWK~U$HES^dBH~3<-*9OB%9HI(g z9Ato1B#|s@KR}ab22kr0=ce%vyv-oI$MEN2gZvGs4q=(H4+|OKz6oAq$VJNrZ6e&C4E#LFa&y9?7cyR8BTXTJs=f9(f{COC;8 zUoUZopQNET@IHEgC6jw0>$X*-rwEKD=h%ZoVsi6#s7~#c>fOtI>vit)m`~?%&^-gg zec0VazWC4U?#Jge@D@M%`FdNofASsXPFD|bhY#zC(-zI?*TsGI+Zvfh4_%0@Q(PDV zL5&RXx!-T~w(XWWJW_9+8YA?2#k2ztv85Ms;9)^{Z`etuo(Ad2UNJ=m0aL=6Y+V^= zesrhrg`^TtU~wZ+);mq~nvF%TgxJ-3v*S1daE~WR3#?@OXhQERp^0F8UxE`#^!(nf zsQhI-9iB_z_Qu$qIK2cb5i+YBD^V{c z;3$TG0h`5`UDML1IsQ7*NTQe_7%feRwlYW(x6uc+$XO zhJ)+Gw}7%jm`X~qtt1ein0@Csg?QZ#mf|@LsdU_0Z3y|?*68!nsjYn^ z-k>Y2C^&|KH8MY3K^ghh@EuN6lJwdF@Wlv&}o~KCrgh*n|W$ zRE|CKCnr3A;lOf6Pz9d#x0o06NA+)omL;=bsPPLnE}uBKahE_;kH@IITg+4z=Fbs- zG;!d8D)}@uTf=|XX%q>4%ZSWxC7vVjkN@8N|2m}^h)zVDj_^0oJTH#c_Vh+r@6+#~ zAveb#?)kxETGe@$$n~+XD|HobQnTnD#bY_yV7q9YhYY<>9<+te`Jpvd0C5;L^`~VL z(r3nbFD>$drz?;s>Jvme;Sohb+Y-OLZ&mkU%U?ADS|=A3J3SvX~>_ z;wWBmJMl-vF5UX7tf>-mvHI|)N%Ou@>lN;OE6A%4Y&mW1i_N0kX0-mlUTBuTJ?%Ua z6D94MXW<$;75)IGjblw{ss2VEjoY>(w_ENXt;x{U0%B@;yD5B-^3lm7(+krk#ak$fS(K!F)7GoyO~?I$*1sw0l107B#xoTz~0HaK*^S4&32-;7=s znU)Dbrwz!mvtR=HArekKsE7>_v^jK~2e7@?h*T=eJnp1%#My``Y@&a@q7v^eC=Ie-txL zhwUGa>a2sYDyrHV{&dT)M;Ypj5IYj124Ru!##$vqY_5}mGt_~a)R<3Y!IaoK=&L|c zGmVTGeWI5-)-<9{g-#MsiaY*;`32=;(VyuMss;b_TJQ_r?sxY_Fb<4#I%dBX2~`S8 z{AO_ORa}hZfxLnfhm=du2a776H^)2d7+Kzo6!_~{2H8P$!t7!NSpn@k2rtH3Y35c_ zy)=s~Iu27JL-6CiOHCrXF5mkYc?O+P%*W6FQmCJO|E?|@glTy1esQXkc0HP{-J%@E z0Ol)*WFmi#4I^iG&(SGN-SZ0_J;x|?I9^LthwbxVPVL2Rf_gDGJ2<7eI;AYHV@^8R zq{dz;=3loHsbCCHb5e#e$)i zXXgbKrh&4(yUZ?ll8jc)v`PY8`5z(4^5+Guhx}+|9%6CqCz1!+!VDbbPkF@5(Z11@ z)p!IEGb_ZJ;}x%O4I4z3z1~y(m`nmA;TVqlJO(rBWf$$4$`X@m5^b(Kz*=qe+9>@b zrMnGNmWQ`^g?8Sjjx2h_5GNk8Hh@HNun&IQ2h*L$K%Jj{(u-|um!k>6o}V6SK~$yz z{HCXk{e~;RdZbPB&55&!=kx)+>)DJ0{kiYqDdIS$!o?vMPn#C|^Di7}XJf9MI86`0#1uEMX^_0>!3y3v4n~)+%wGp$>v8m!Q&5rO5WBBS{2rm;D?(*~)Z(tO zRn~)Sr)UG34nOz{*`g;~@f<#&k$K$w%9kHCYR6hNzUEDTk_P_gbfo|?GTnDG>#;+q zEK&eftoU7|KAKR&P+o4ld}y)2An*8nKE)l+I+Vps#8*`l>odz>2`boZpbKK*E*g+Y z73zUiH7ZL170kb!viOUhc!p!t>L6fTHDX&L^ut&<5NM5g9tq089dnEz|1x!xNSt#o z>BO$3+j`tND>N7oRAj}4G$D7MrMw*mNTUO^!>AI=2@0%-^wr6Aij754C z@hKwWj&UWl-}B3(rigMBn4#dJpe41tOU#faTnS(dz)0dya_uVvX2Ac&@L-PVBRH)E z!>#qB8AYD?pUn?vl;AdCM$<1&urgBR|9tL@zM$1J%N=Hq#7jj3aaF~H)NY5t1WvQSpDUTkT zbvlJLX%mb*);|cg$pY{wXu@>P2$-`V!NA)bZ(%<|Z4$tsD-z11U0Z>K>0b)QCBp3q zVnbfC8$sAAXA(E%MR-St&Ix)j4#u}_SS1TkE@7sTg_D@F#UUV_j0BGv{^aWtSJBSUkrg93!8z;W^s?%GAlc;4Ld ze-$W58bC#%>kv?I6cHyNle8r)APq$=P{IO{n=my|%~Z+|p~TRK&t9Sw2w9I*$OeL= zx5$cD=steR8)UwdYW_55p>P+LxT3~Sq zuxbggajS>qZiExX_!*u~91eL*Xd-)BX%%Q@u;&}R-R>A=e|vwq6CYyiaPqO_A=ny`TtTd3K~@TbiVzTpSQ>Xb z-CK0gi+nKV_-W=WpQX_qMqO(_vC;+o>I;_n(mFMdc^_9vWRh6jfzMe(Ke^nD1wr6; zw0kpW`cGHu@g_cd0D9#$T!Fd~krIh4pZ`s%1gJ8h%kxQ74z!3<7|z&5CFWlw7xpC{ z+i-Mbs^1k~oBYJCwI?{mIj6DPV8?D7l$cK!vblT5MjNoJ6;h6eJ9@=dj6~GW?1q?< zCr$3!U(}Y>R*TVJlPim%`=~pYuYj}LQmNU>KfLY#(pFtqrm$?1Y!xILgP<^}tDuoR z#OlOz;0^@*!t(*Cbt3x;fZbW>wbZsN%F+E8214L2h)RS*5AnEaDEP(C@t>+Vj`b)1ip8D z&_4MP&L+T#I4e}hLZerH(0&Q$!R+$(1x&XpLu@@ZeV6KW#g@kkT}7`We)#YAzoe8;0bzIk)CgSqkJM*=+4!Pd=%JmUl&{TxKBew7deO*b?ICC~oO z%eJB&`3pZkfJw7tfS*MosE!lvszGl0{J7o~^ayLBUs46Hy;lTitwx8Vfe450(fl8W7Zf2*VYHQYba*A4EqPtSXJdD2C!l zvN+v~NJn$$8eY(8q@BXDPArJyNV2UPJ=iV8AuC^x*K{FTv-MV(O}uc z#<4ij;*FgX5puZ;XMC*scXD_O3>nKo?=HR}3L3Ofw7&p5H6c-bzCcmUl=%pm zs4oie7@>k0TA)uLf#*cr0G`A|oTmFEbf|icH?~&BFEQB`@c@`zR^LQ3G{^!3-o>13QTed|AuhCLX5&TJQ#IA zqoz8f1p&HFv^S1gr`FplB67ky^QVHMdUwX-%SB@IIGyoqcy zR(c?}U2hW$UmdA9weyaiH$Cj9FHRa+oPGy=LP z@Z!0ViZp?1P|GMQiWj#|qu^8J5!tPRYx@IPgVDA7j(6U(d=#1t8d?NvgB5mXhfh1? zzOr}|*nE{)&PG*}? zJy;Ytv1%e*I7bIFQxGxcqVl)Q>KZzF-|v>c(e6i!H6X1DRpPr6su2|`@%ZKz&w)W9 zqVDzEd||R9BvL+nZg<8kLjmK?=VptRI_`EEu(WO@Big?IH*9}KI+0&OlNyGeSXA6XB z%F9Gtp!Fi{HfhjuoC$Q%&NeRw7)IyhE0(Aq0REw?vgeE@mMwZ&dzwMDR~}mZx5&1k z|D~-f^F_#!2U%}X1!~C9OS3}G13J$__{b6#9v^`t?k$Fj0Ra(|_j@%#+68j+&#<5# zmUxhq5z^V5!&5yZn#UX)Hv-q2cWgN)1V`#X5r{bAhSxq2o*N(@%!X!6OCLh1N0)D5 zRCuQbl;fr*{I_2}!VXa1I0)whjkoU+XG9J^w;cr<>k=0@fRCq+)OcoL9}r7p3?S(p zjJCc>jTtnk<)Fa`8QiOZ!XrxmnlR%^4!NX9Ea;F@#44*e%&(4HQ$uZfOx^Fl(7(D5 z#K!6~yZLv1HNq8wmax>sg`+g@zcBUDv6r+FC22zn2h!xZnZ+t(SY-9AA6 zx8A_>&m4W~1J8<)@J$UY&&_*7KtO?!I5(7UurBDu>udl$6CLx)=U*wo@Dz7oInjP` z)fpBU>%jAGl9aidVNtL{@? zf)2U_*n*AZr8S8)iBc&7UQk8SjM%m7H-TbmFT7*gs()sCNI=4&DCAv{fCm|t81XfF(MhC;w0P?ltAC~!t=8N^ z@#IxTfLVSN=#+js-88}WL$t`(8$T_FODK`-(H<)yP7_D6&)-Hqc7V<*95{}|1p~x77J$ zw9!lqo~lC00c-BDxY3i*`VM1p=k$D8tybZ#q*vo}-_-7^u8D4ZNpD`9bW@j&Bi68b zYs_A-J4&Z_ajx$D|06Fj=Y5=MCiA91?fW6?+f9#)DnWU`ozCjs6>H1fk)-QC`jHuR zE2J^>9}5$0WYNh;nz1KnV zAnx<5l#((8-m8o19n*l`T&?6*^M5t_Qle_R?>C>;oF%r%&o0OG#m$bi4w+OBe=h=d zj`GbRRo>@0@WQ=Prn~M&A((D*Gqu09Wt;P;Go7Ju7r#XpuQR$@uctA~e7{+l=@1tm ztWmK>#)Yhyt=0y~GuC!Msy82Ejc?Xm#9kA`1-qC4Sst*=5}Q!&yzXjzS4cu*!Gd%z>l#~ z)3iBALQ`Q-irOK5<&40&YTUrf`s7G!JxpE&`bma%n=K8l;JsO8B+WY<<~2rCo~Rvy z9TR2xT{t^OSYG3RU;1jDLfrOu0}MFS-@@hocQ#9r1_AH@DG<yb4ESf(v4U3k0m4(KK9dk;7Nr~iRqe~bhEe9P| zQ9x}u&9Us4Wqz<#uGN)ijPAlZIH^y2ezxLtT7H$3%gz70M9}M?AFeO+G1itVUOeGX zZ~7`vb2@xEvh-25R?DgCyes4Ul#fz%@lw-~9yV61w0bMZUL-fNI$e{(`$`P9+M$x^x8g>`Y_pzBt?EdRTNo>P4IC$Ks^ zhTqeVU3Lui!$JH-(BZ~oacO^5@cwH@##wQy3^W=R!^MqLJLgcNVX@+?JUg@1gz0>( zE_=s+mx+!I@%Jw_md!@4<_{W$CLyZ&>Br{1i6uW`8wzL4>+b(Rg3jlJ$_o2NJG z7UG2YThgxH@|z^x=pRn(!|@9|#dbI^q+l0ETbn!Bb}gdreEaF~VAZp+yHQ#|uXkp-S zvTXFkdDXjQ?U1&uq@9831~FL3r>E|+>hiucJJJqdOV?kjKam+p&sd>4Rl1GzE7?%d zP*^YOecr-9X87eT18=+l^y4M`lP=wkvwl?LrGr6wOu;LRd+vAl1s$dw83OvRfL)7h zmdg?g_NdrLwIx|2w>r_oi;w5J{-1D`$AY44<*Ljsd^)=5A5P3vNe)BH?m1X43$c3M zWTOG=68~!Q?MBgAt21f|~xNR!CkzR@wCCdfB<% z?sAOVQu6%$n-hktsdJ8x;5L86Hu59VDr%QKE3%<$biK?%j zs(vWm&zq|bYr1KMx{wIB;O>8JC+Sj|Z)2T4pHGK_gT|Ow?Y8A-yuYe_^j6V-ugLN3 z%9j_oY3FQZ_G32&O?61Nj6#Xl&V?DTk(;MS$xnhzg6!F_B+Z?>Ur67yt}dK z?Jx+zckdc@^72;qrT-v1G-ogHY6tr@s@?FoM~=tKkm~%A8dbl;_kGp*`{1_d3B%C( z=gr3F5qD2BBDGV4lck16A1|qw^Kz2=z_H|}#|H~}C$>!8BpDG6pUnHEWxBn2+nPR- zJ|{fA!e+N9@|lx4jOK(>JH(j+NQ1-rVD?+}sn%cY$T*ZEYqkigPUtUy;q6bl3>KL^ z@wz`-b5Vp$eyK?qMT=0iN+%hrqZ}bZFZK)d&DUu285SPGrfAYS19S{f^O%y<2d(#@ zjU$;w8@|zrE8YKiN|m51#_8lOSxB!Ad$=j8=8qXH!qiSMdE=9{E&BdhUkKSr5U<2e znShdkz@L*GNsW}<}4OWjk9dTq|ZsqOqunBP6TMouM6$6XAKUp6c|6cxU}TB|=( zVdaFCfJhE~whl-%L6#4(`&;{bm+my_0Ey!wpvc*Y;X}K1k3nw`W6oTjvU>BCf+lx* zwfN`U;AZL*F~GL7MJa;&zERI>S+-qB{=)#O{#0$Cm0xC}>rOr}ulq}UBB%XDdcf4s zjf_l&w_F!wAG;>>HAjcF7xkAfG!Lr~)rDH|>}!)NRLnaT`#_M#LHHunO)u4tzA{N; zg=KO^sd#oJle4*g*72dv4$J{njHKJbMw+GD^t*h!9~Nu3SSEtT+3lRi8UeS8>B-x+ zI~5j~HZZJen}ejsz#rPD6Zfd^6@hoC$#WlMGR+pQeTx0@csZuzE6Ni2t~tw;pYWP% z+B@VulYHw%{#YUg!6oO|FoZkj_+|)_XL|D)KjhrCW!gRXJz8wXOCVScVz01F6xibx zOJLjNuIg3n@pLjaGYC0cu#>4GcoU?~)2R9;utEnimth`;VUcsn6@M*x2?&OfMxit} zj3Arvo``C+kV*L{+g$SYU&f5fLJE7`V@iw#x@kQ3LHb^~rGU5=Boc^S~ zBCm41vo2BHmFaDE1F{GeLwG%j5!|Tqnc&)=E%H|62}>;oVro?WlL9e(Gc%dc;G2R3F^4A$+5{CzM3c8a!$i8Qz zrr@>Gtk?PM>uyIbf#@h%R^*7^gw;L&IO9u%B@5kq9?sp|bH8FgRn&WuBLXf*i0sjq zrd-C~ukF!&?UjhDy#wXQSUf*TYsLU;4fI8UxRu)BnPh5Y$ReVs{S{!X!o1{5%tG_2 zD^|2?8hMF;FHFiJ{30%v+&2#eNoBCDM@Gt`#2Fr$O7YBiaV;kk6w4ylnia5nHODf``2lxfG z!bAwVGkeM+dQ9@k7t-*D@zG!ht%7ix!zJ>uLn7q|U^@C(Z})#@W1-WTh<2|sy3oub zG$-8V8FC4!E}H;F3hVgJ(6j$50)a4*zf>d~Bs~sk0Q^)E^aW_H6ERVg@FgANj~DK#vR2r2g2Scn#?CYpbZIH>CcMutcYj4*Zd z%zF^N9&;zAYXmO^0g-NJb{mzh z)G5=@*u_b$_7-UmK7h!ejc1!u{kGWp>QXUGBWNWU0mc&_7q+7S$0DM!ph}wSD;6OH zgs4`atS|i77PS2U`MwUN%zZUdSJsA|;T@no zJ)yLlTVoDMKdGlzN@&qO-oA9GNIS|c0AM-znRubJ0%S9J1KC`gxtfLdTr7jxIUs`swi-PK)dJ?pccT`o{crT{nHZ?n3&pP5KAZdTZQulZcL z7GX4U1UxCCAVWA7VRR)YNEcxle23bJzh)vcfn^ujmZ?x7C)`O~22Nyls~IRzBJE*f zi*y?mEvid)-6F}yYVPGt>XT@lDsymK5HbuL1A$SfNOjYFr2Q-ISya!IlOwwO`SB5+ zx}RI*DcJ(puj>U1a=7O-n9$=)bY^2WA9{e;#V7~BPFONFr*lLm#d6aqO6D5%1c%b>EjcX^=$3S{4xtc7&6xySL(C^7+y64Z zD2LVsf41|~>Rs?@?g#=lQTF4s26xD`2uaRXVNAXBTNcKZR#@&^?_K2b)L|5S{j1j7 zM+vYZ5D)Kr)!4VY(z#}TzyV_ggSh8Zac3=wRG7}GB6-y_?F{cpVy$|}(dyQWxSJZW zyR0`r%Q1&bv`kP1VXbfwIb}BE0W`3LImXTsNI-J#6SUwm9YG4`JT|R+P=2EquZKQc zP)&m7B_OR4>I8Bn7Dl;gO$Q?`bUWjj#1y9Oyssu4#dNYYTtiaaFlUc;T7{(^4rRDS zao9fSw;1>-?!hXg8Q&`)>5$~96p;OB387O<0!fpKy5w~@rvjozWwBdD(uUj-yU`wt zv@*nTI+1aj=uO)UF&*nb*}xsDjXtYqtc(`_5M#~2nr{AjyxqR4({Nc6QTS<_{15## zK;Z1xiVpGw!MsRRCPA_{6~diGX|Prla`%{O;cXxMle|)3oBL~Y4|+peQ5#w8HC4~W zp1iu%o<+OL1kJPh@OIRyj$`_El>VA}&1d>`$bMVT9sv~}4`oTO)xO8>U+Abj#Kz~l zHjf;e?Qen|SUJ=neZ7T8eK}O|!UkS?IPDJpLE1`XQFRI)Kbrej%R9P$;ql! zDEzH7-^~PT<6!MYlXora1hde#gt>8g3-HwdGIi(F7ZS*gex*x|kEo>fM0F2{W$MZ0UkF)^R1vrzQ%Eo1-%50q@iA~_AE*hitopQc(wH1 zFq`Pzol!UcssU(Of>B*s8=ilOPj!LivMp(qnpcvN+j5d^b~IYKkVSv?6D3G-_Olu2C^7iqod zqMt$JP(L??zNzVkO473B2URL06u!=X!ccWUU_uxW5f9S|R3b?>@SPrVwd^ zgNCtD!bI_z$p+tHK`#0LPGPB-sObD61SNft1abNVfQeBpP$hcFxg^hCht!X)rN8Db z6VQRwP=SWRU6=rvAi7GWC8c{}p${7LDZwCV0n&FU&1AvF$vfHZwgXns3g6pRiXC=y9!Ge94*wrogHMo!-hR4_epG?Kfz$z$wyAgW|eY7YlO_uxw*c;_60_ z)kFoeyzWq`&f#;y;E@6u?=zmzYYPGlzL}&TsA4pYM0cso7*W)Uvo)+Y$(vBe>=2w_ z_YN!O-dWE=tW#*%LL0I|98#u0mA~iss9{Jt)R-(Chy$Y3>Ke{n2}eRS_y56@`)PRc z2c=%)ePJY9g<+t)J^fPNi=x@e7%9&9!s@RBEg(jk_4*yays7_(VJFv95hQ|0b%nsXZ3FJniP;MCM!)S66 zH+%!dDh=Q;8@rG*duA`Q_E+zhZtOO@|I%`~<)T|S<8hj&$NxXUDV!w#i1J%$_B@#g zk||>OpUlN?YX(32?Ao(l*=oOVFJ1Qx=i{3!J1_Xa{jjT>^|#C4R*-GK?`4*ItJ)Z$ zS76LV&TRUq^*)@`WO1)8bUEFA8-j$bRhfSznEzC)@voKdd4S-)(<*W;s5D?zMVFU5QeCS zo*#t41AeR=F*cZul8O{MqRHW|p?G;wybaPawOa@^;V8VM$bs7UQa(+blhx-)jkcuTonUBd!J9-T!&!oOweY*r?pVQU}Z%K4YK- zuft>jHc~8Ts8knvdr7zWMoR%v?J?NiZPhJIwyQtlV_f+~$x(x7VuQIZh?fXf ztoeRZYt`IvNJe6LLQF6);asFDC<*rO@OZOt%JQK};=d64>b||_*P5}2!YB$#;7rad z&yl%E4XDP)f2M87jWQwbU*z)RSO1sHkJ$hamimxfBncxz;l~x(LjAmQkvg0dDb@Le z87&zNA^`&MQozDchkBqP!@)0))0dPm897OyB<-a2U1#T-KF{f4@a~)}#YB5Tz zD#abJiKmA`LUlMQ5U~o0{7!_ie6b@HPXwZZoB>dO^JC~`VyZ7J^JTtHGt^tLMtS6Y z9ND2_$krd?X^m6EGxGn9XuXcNF=Wr5Cec@m-fGVe_q_AX#8nO+(jEZU7uI<%x9KMHUZP8S4`ANhN$)zU?8-1l#%n7{uwCpFwOu=A8=WQycNf*i^PJ@QYI4YU*; zyeA#T5wpTyit^{zi#730!^(fjb}eUE2rKD-nRdvG1OBsPNfV#MngPt;1YWd37^-O8 zYfTd8rFZ7?+(sIJo;T0Ji1EsXa&|REq*#sWx4lKO$E6juk*!@%(5iVJ=(^lM;V(2v z#&(KR@+QDw-=le2P$jFnjF=3MkSHw(kzl8Glo^#x3%G*Q2pf_vJU(b}q8w{?60KH& zmDK?m!OxSXZ{ak!>!v?b6o}Xtu11B0C(VJ_N_EnjLO8 z?(>T7RNDns;_h*j^beGd*uS9L{R#UC*#Z;QF(X4bd0pZI(an0tlF;0u*uur(hzlnL zXa3^;y0D(WY)Cu14iMb$2Kv_oiR!xLyf40|pT{z_HY_E(iDOoa-If4if=#*2om=L( zA7@tk?h*NA(M=dT&m9t`WEkGbqo@G^UU_RLi8Y-&jy*od(Bg;?@8LiE{x9ywM{qlS zA6$w})R0cNo-}35FePq@jS`_V9f2LeEjUZ*GA?dwzJZs=O=721#-lI_eWbk@>tAf| zvu4PfobhG@@7tNH1n$JWEIL(@LjpQR1p|PjW?|Sd38orqDLmL&T{MA%L~@?;+S64+ zCS9wP2q4a$vpSFeWB<+clIsAj0L~ZWL2&mq?Y0>3_Gb?KOJU5MZb~Sf#ILXgjHk#~ zPy)%!GW)KxXy=VKI|N*zK+9(vzL$aDJ4S)}m+;W->8+1lXafcL3qPCjbwT9YqPqm_ zkdhcBDnwg*0Ux4_Sf#9S2KXS2th{A&WS5v4@2;B?qj$LeGekPq8Y|2apC;tMKihbU zx%nBgsupZVgeMfLthu>H>716S!h}Keo>sHpqOqwJ4JhpDMQH=A49yqYdVLHeDzq7! z#$=(D=nVM(6FDztyp7sc31S&+P-vBI6eBwao@~7-9d-)57d5U4YWn6WYB8zX^W`=@ zxoi9w@1_Xx89CO8-)aJq*fWrq1!bLl1kK8>GN=4*`V@>&Q*#0O z&eQkajArF)>CwsNA5I_}wd0nqq#el0mNV_JK+d<3fvc#G08wKgwv#EzRT|OAa-GY% zA@Hd2>Dohc9e;vuJ_4GywYK>o%_OJD8HAS*;T}Q&S0Kkx zY0PIawqe&GRW8fnjfJKdayk&SR*B-*KX3x9a@G?Otx36ISPM_K{@%Y3SQ_D7ZNLn! z-vm9#2`J4LB9GKm!j+kg%aby1*ATZ(JPB>{?X#Q$7n!C0yXJV-aOfY8iP4-N)7c%FQ7@Z zW&<%tvqOubNw+-Uiy!o7It^PfhKd||yq-Ag*2nxz;5~WAMcBkrrA62UT}S69uA7?m zw>|r$`oIkRHttYE`?{E>ga}{m{jzJr6+`>-&KmTel8#iS4!lPU6wT^FQXK~oN-73x zxtdr@kd%O<<^Unt(1u3WS=zeF^|c|zAkcYX#1y5KV_J^|Gp;Ids00^vr!vWe)IP6- zbuv_Xu@}KX#syyaAR$OmUsZUH7iN}zouW`JRMRn~4slE=Nr>4GrRFnXh$g#LM`<5@ zKN{#GXkLB?#pu}ex_|f6WhyOmXF5Vr5lZ-!A=G)U14<>=vqO=hqVtw2OOEkObQnPH z6oQwoAA_(L_TO**EV1$Pf!Klv`G<0vUg)TLcv{DCySzLlLt%Ez)XDj01Nq9J=ySg4 zilge;v-mR&rJ4nD9vFoU%0tm}nZWo_(W5j4jgFIeCK4Y8`6?bCra^?*jcOPnbhYrd zga?ge{hMvxPtP>7nHoqTq5$|?)V771PRi*&Vv4i1;<*H)XL?C0EAkzFlV452`8Dl z+np$tGH}M)q{rb86V6!4vB`4l|E+fxp1OpJ>UhJy`@y{z%$T+-xSNnnolVl$@}`2YGQc?uhza^;WwFbtCBa?@ydEBY4OfuXjaz$9hyaw%}mHN5@+6nkDVH%Pxi>^ zwl55=%LpZIC8RQXlWqQCgVQi+WDJudU|{I^Gr*IDFS(9dh1z1DaL@gV3KiMVqQU_4 zic~l-#C18LSjKqmD=(5i?oZ5?=UPuF2nRsZ_4PB~msR7xuR#KS3bgcHbH_&)cOFc{ zee2J)1RC}VlSrA1brJIJJeZ^&R}-z1w5nI>dRww-`C+`?z89zq0x&4QQ%a?AGGPLh z^?h9u{u4(HPG{Gv{F?t!ZpwU*IfyOpp{WrGAFd3sTU80x?Cg~?FUjwehJsKsC=w4> z28waV4SBqrxB0Hn+joqnlL|$&n^S}yf?+8yRZW%#EK# zZ{q6AO_^nT=P-8{D~s*o+x1I}=$M1Pr+6vH`FAZ0z?Wq-3QfZe>I}Ds36l{|O76F? zM9HL$_x|arF@G}1nBCi83HYgMDgm8iZlt3EHe5d8=4S<)9*&*(8g145JoIJ++MVlx z!x^{J541vqa%O*ux3**hIxg1kNii$gj%?0(MV%eg<=n<;sIeWVHdABB+ z*1P`ObPP5&s_n2leEGeQvgZxnle+3?8IA9Gcn%gBW2n{Oa&#@4F2sxEra3(~Qk**^ zO3d+s*L6xpKzF$6cWTQ|g;tX6nT{^RAQYTpfgIA>t zq}YDpVV%wn3jOq{v+Yp`pdOrgu4Sv{J)+~jnEAoq>G)5duH-jSptt!I2J`2;)rHiD z=eXeP#tLH%s-GN>D-6<{s8{Mzdu#cz*g9XT<& zjKM*|{Qg*j%;8&A^I<)MsEuy;o#)P)w<|R3ZRFh11W$I3#%0VG^ZpdK8i29E;^b=G#0 zEMl;RWkgTsqEw1-Jxv|ORQKR?waQ6esClt#d4L1)6a5kgaK?7AM5baK^gG35Ip7Xq zwE?M?ad_yRI}m-Ot7@EY!x}_Qvt1Sa^sDeHJwSQ>`8X8PMfPM~%9#oH?~v+o+12`S zjCV9oAQ&O0b;l_RSplv1_K=r$ddQ}(uNO0SZbk0T!cNA;dPMb$1iOKfo}LGUJl37!75jAm`0eMXEr!k0AA&tTP>8zC4AFR#ug01&REa&z z!AZY|k#TgZ>+KS6lWhjvWvc7h$;oR3HTB@l#tFGUrkC;R_{>{~CVTdaUw^!M%~D69 z%ZRE@FS5P@GNhT?vh&!L)iQ~5dF`kjE|?%jJ;UOR86EC$W&cE@#5mmd5WoubBK?yR$!)}dLr6f`SYfa{vh^fd&Mbdk6vR3W6`|HsYX$D-g{Nq z1Gd(0xUB1|J>7OO)?56*E+BehvKCki>-zIWW;-q4FZ%;inr{6Lb8~cC$_2SAp6Pzu zFEb~vZ5k{T>s!zL#NJycFZ5_}?Pctxka2-gjKB955#euvCcqpCW@ z&!c{JOqHoZBd66iYLUl^6`{Cq7BY_v@8jMw93y-#2kE)&z#>u_F`@U}R{oI!gp%*Z zTWiG`13Lo&36&H$Hew)O?{y9nK9mdwkq|HXBu1e&)ZEt)>7n2p>{DTIM96k6%U{aX z@bKUl@8b8T?I`jn9t8=8(8Ny7PW_W;0A4cEDNN}y;V0V0lYfS@_GIuEQj=}cA)}H4 z;`frON|P?z@VW?P(L$Xqr@@ztYY#w;2D45>-H&rqy1PgxN0PkObO}b^{gMP4`w*ON zZIZoRFx!(V!)q%dFD5}|x1J&Im+!;>F6M{Y{ybw139__~vU?R6en}zrK*qeBcziu2 zb^}8dVYfIy#hr`*7!ctO5IC18N+|y4y z+1XZejlBVjd(}E)bTLJje(@}$n~nd9>dK0l^IZ^s9~Qd7#IYH>?Za%c zG2gJp$c908f8fDBMxQRy7oFF0r%l!Tqt@rwTK0WaM%pYGL&nZt`qvxXOc8bYGU4(I zPtE9JD|Hn!0~W)9kMsAjpU4&i9{Q&)! zvuD$a!2musqPY7D1mma1n^{Ee_dkOs#&#||!YzNC+JUP-zuG%H=-037>t-3ZIk)~9 zymmu?!WeineOtBTel5K{WW`2hH+J?8xF3V%KUU(jayIPE&}VUTtUw_! zAqerg++CGzw04O@d{Os1SNz))KKg9>qG;p?LUS!H#Ywkh_S`Vg^{Lvq^}n#<+X?Dg z>ASG;fInB-GHh;Z=e!tl{!G>ng$eM-kI-mC2cvEErn#J^Pa zv)f6tjfU;}id>On?x=)N@#m?2e|g`(x$!AkPBxyC!(WPjusT%O^nbPDW5{mf9I5|e z+hEcA3ewcFm~3kA{rL7A<6{3Y|2wi2 ze$hjuTMy{b$(P=IayOMR-f}lZebm+!JY$u8WK$ znbkRVk z>HNhwS?w8_6fmQ+-=Y5m#IJInRv#@%?b~oArQ{ZVVNA4r4qc z3x&z_qnC9`Y|Z3tPIl!iPob-!v)Aot>xIA3_!T?AQb(qwUs;6zqtK-IYcSSs&;Fy( z_Lfa=Mt8>+1tE64{K}8rkFDF@YIEJ93tmJB&3{rM=WiC~_X&}`@UJ&gX7B4kR^+_M zuS~3!<>rqczAs*E>dR)5InM!6cDM3O#i)%ZcBZvQ#A9=$U4Vg)Sc5J+08!nj)9C+#5esbQk2}dx|!Q+x}Hpl&}ZIau1btSFhb)W})wLV-@9EzN* zUEL-;3F~*axy0$8WTVV$E+mH`o%LLl_N2@ z7tT%*XHm;l{zsCAZQG8NQ$+cGMSMWS?%28HJ@}ZIQ)j`!yXib3ds_4CYLl)X9k}*1 z@IMC4oX<|3B>o)h1^kCWvv;N)+80nbd?VHgEWUndU-mggM&b6NM#FTu1KoQkujof# zlE>$A_&00i%MBK2Z z)4WK@As~ccvk*vw-$j;Ok!8k#N0c&a6LF$B3n28}nF=eVK<0KLLw8nf8ptrX?rq$k7lNBxA1__0Uc^DMbZ+Q4QxpR^L5JH6aM4rcEyOl>8@qpJL<@IND6OM zsWx#5ia17twEd^EX@*S!h16!u=GmNscEpLTgfrX|_xvJNo+hn$-)3zlvJs5lQeJt2 zG{y@9nsne1D@~juGSh{Rf=*?_61HerXzZ~wSCOu*${5O0MpCDj+!lJosW8Aref@nk zW(sDM1vgYCi5zWmIwT-l%r`uGPB9xZ>PVh3DQ9KyN})F4fiKgzgRxEH=@fG;KKc%U zxR80%EOG^@sEE+m;U{`VqEI3+g_)sFWO+_%zl!3XiWjbOSzgNjLwv=Pg<*2bH_oZXH?yY*5@^H^ zVX*}RDM=@Q@VD$8Oq$F3Y<;gZt9zbWygI z=9hZR^+fFcSIbKMjYJ>fHqX=T%*TlTqdrTT~8a;mi|RR^{!(G`)3Y$|_VwLy0sC_*RjTHq3=oFQJ*rDL8ANa&z>KZQG$ zL7y)L^VpBx>sfNTSro(61~rst*|vI@&gqsRC~M)QvT(t_vm=hkMAm@B)`TXSplH;@ zn^7$PxS@%DAKkV6OdG&3P5YC#hG|*{B~F`quE{IA3LVxM<(g8lBwD#dCnIZRf_e%0 zjLY|g>XFeIFS{iJ4R^Q)%SlNy%Wm(#L&I!_PKy2EoFPr`v=btRf#;0YH7seCxx28U z0`WP?fLozRj!`wtBhtSsH|H6bdr0{+N*IRdierzbmL=`F;vtyL+O0e{P;?%qT9nqV z3{?y(K%h=a_qo~`fT>L0*#l-*{;OGAajl^A3RB6N7PdERL`1>eqWUr`d>m8fciDB# zeF$t2r&!c(q>dYFlN<56vN6|)cZ{!^R4;3lF?URTu9x%h>Q+mdt<-&}Or8tb4Kmh@ zY6`Qu;F$Q8|@9iK8CP!6IO8#ARjtfH!LjCZ8>SH;Gkldu_x zev43hU5ZC?z{#{>%#d8jI}vyo%r;weX>~YqY4BuKBps0$-_EFSLu=9&36X)lqX^*- zjbY3H4lIbZ;4K(59eKvIvbk-e6yK(`Cy-Qm>0js%dK4yHk|FQp46%@i45|n!lb$Xb zuDJ!MCSL8gOvu-u&AWh2M@VK{X20(BME+K-vIZ>@B;|pG5w9j$wBez7@^}yNekyYq zrE3Hsnp?ysuZn)zS-uJ2zH42wJS^6poqbx9O{j4;V=6G^ThYOV zlLy1Qmim`_Rw+$vgc`Vj_7emHen$N9%z+hDVy@pa2XKherj2mGDXmN|Nfgnh;uTY- zgD7X96+#YRK_-8>4~U}hAIXFj?&-afh=LJWUWkJG;^FdimF>tespeKP+3Ma2m9jRt6> z&=ypkYJ>wB;x|OR2yrOG` z-xS~FC>Y{haC%B?LGK8FW#qXO#uQ~vnZJcw=c2mqZ+=*spJLwI5^I}G19`7EBm`La z+uZ9XADbPP;?k6<-M;9M1O6(#<>tZVw}CDL)wbXse{>$ zH0Hkxt6ObX^IOmcwHi11yU(ffwM&_O!FET4s2Qs=xfXm+u&}Sb|HEg#}-(nvAJ?+?o*p zs9hG(a0p3^HpbI;QT**zDEYx6zhO^Ys^zx%`_Zc@SZMGz0`P zSM1$-H#@#AQeY$;4YCN`Mes1f#A2iDg?OD=rlA@+)7BXD1(y+9-~^Q!)vkJM{N3Jn zRaT(g+2+dN$Yo&zX{ZNOf-ROAt~aybb=E@FU07|p8IAg~!M}S11;=8zF(V@a?SeKq z6u^Q>i2>%-_*mpUl-Qk>Kp-8-7UTyeNhPq|73nUo1~9FZ6($AzFpLA+S2ZcQd2;)e z#Sa|<R4C8NmilLXB}{3z^r z({yyR#j7aEsIfsB1QDS<(Su>efnnFbM?HSkPqEIz^CZ*#v>2IqxtJ5Po>uSk8f(EI zVSMeLf*JYj5cM~ajWa(!AyiP)Asa=mYLocXvQ$A3Zf_NA%sfqxL`$U6NhZmJ+(D3G zLpJp*#=&c6h$|NvB`CvvC3o?5gPRjG!TO_`6C)#hfwBcs(h655jvOHCXj%lh$mE7G zGFL%>Hr0nqAtZ$oX+cf>G!^5eSb>2y*fSx)UJ)@3J*y5i_PW-9yBT5#q}^Ddb$q`j zOJPLF5uJ_|DvkA+1{SP|6wz@(08m7X2b~FQ7@vbA1GTtfwKM?|O$dvEl8p&~5E1sb z?+GpmdN&kU&3#r65=Tf*dm)Mb_|}IAAYAZO3s{byy$^gWx;OgM%?FV%U4?l=q=kb) zbHa7Q3wP-OyXJ`pE0fw1<@{rS#oY|zbV4W!eUHST(xu>?A0&-lmkr~wm(vvu!E7Oy zf^m*f71N?qhIYr!Jg)~_0%z6BLnv)1FFhAWf}_cEMG-gMPDe}l@#`ROUa(@h>30ETjcr>J-If^&Myx5ToHzJY2mM@h; zqCMd%E|r3T1d4itO8e=`mm`V#h~2YSNVq2dJ!q|zSZ&q5>3)Vu30d^f)s3Cl3mWgU zs=CN-^>0F`815=?)TeA|?*NUAiCrw}v5v|F85+%5t^DXFgI5|EZK=Y{}s6>$fA4W=FfF|vqkmb77hKs!HBe;0Cr!EZFzCA=oG`dnIBmRW^H&R zx>roQ+$N{>>FT1)?&5i}cV3f*PpV&e$;5wpaMppd(rA%Qhkn^iCR8FZt4&FRq9@VpuY-8C}rz7?+lB6bofN z{1@l0xDq_Uh$zhHSNOHFgV*>1moy7kPeO`JDLm0qffg4}eE4`5jtTk`E%!t+@cFd* zZ1%#CD<)%FLyt$4Ee01d^&+>qS5X4c1)QFwX`ZNT33a%RRh$};BCL1CVS!eEr-4G0 zFs8aP&_bX#)DqzI7LOp(89M}g8Xy7gxV)&OV zN-10VepS*6;CQ~hza&J@M{gA_H!1us1L2xGZ6nT=5sKCNKy@;yigr>d`ouvD zP#)OBX-alM(8qygjNJ`!nJUu>n8@TNmI_d{0K$2~$Ee^=*WUZ-kTJqccRRrGdmu@p zi8KB~G&+y4Bn*c_+!Vx}d2NhYQcXwNiIU*SIftz+B1{kYC!ak;Nztcx1k|zm-=cPw^5bb{dkWt z)NZQYpMh|B?W&T-q$~j{Sc|>Bf{HbQY&-k_D_gboe61k=p57k;E#6$)OipPj^(ODl1id$%@AAPt3**4quudw_q2cUz?%ARzb95{orO4aZz~+S zc=~=+>F_+|C&$7rKtajTd3m4~CjYuUG3Qjcy68;2c$~ai2F||GJNjC*`8FpcXbqkeA#h>ME;;XezwI$3qOaI!i>uyFvPGx|OM(G>6*dCtFZ|bP zY&mLGh!JyIv}VDZq9JsoGgrWgICDlicBW=%7dDQAm)Z~;R`oT^mX3m z=VqRD0-89?9J)TiuhfutA()WCKRl2GxD@|TbwnVm<4n}?H);xh1qupc+B%Ya6X~VF z06C92=f;Kvf0itZO3(opB%G^~cdUekL4VkD1-@&qklCY)>7{`3XpUn84a#Mm zR>3(v=Aa^$Z$3rbT<3JK4zxpXVJ-UlC+B;yb(+W!+;+dT_fe^>cx(GhW9Mql(FUnU zfoMVJ=_-@3X?f^FA5NgE(maOW?*hx~%{5kV^PPG1n;;ZqaxlP?xL-qIRu8Q6m8?_i zC*m4CJI06P3-|@^TZoAC2P7j=_~F;hB>W&29v_s6sQS!^Y6+Pd_CEsT0aNM>x|)?x zj*1Kc?)O!a7=Oio5H;BBneK(|nc|BIHANwR7>s)vn~@>bLLq@c|NA^mD!vbBiJ6#Y zg|O^XP_NJdObCl_V7YSpIYJ~7Q1MBtmIbQJY2W~ErGfYNhmb27Jn(3l08b-C@S^iiB3th)1uT?r7A1PPgS#4zeXD^Vtp>jr&j2L$Y{)MZ? z?FbiI)7RS6B*|=YN~E>UVKEdYx2Ov9(~>3Fzga!yQ#NwvLjan)FSw!gg{x1RR!w@e z;I>AL|DzDGe21yPN)lzcx<{J8e7iNnl!YttNi!!3x3*`LnJ(>V6DAmGKf);q{1rBe zEDg}7!yC2g`SPpo>TwMEIv%P(WMMUmc{7mfBHB9PyE?1jq+J9DdYw_AL(^ApTA$71 z?q0mglr5tCC~gG&TSj5DyC01en3yzNS?RJ3C|L=|mK6-V&92zI1dolFdjipi1)lNp zakLjc`RLCUu%6aL%@P5G^O9Jh3mT+`*1JTG#j2VzZq?X;7S)P0p3FLr^<`yM);ys} z0;w@Nrmf^D+-z62jE+PM1`E>+yY;+`GU5GC#{I(wo`*vAxt=a{A$yRIsr%$Hl25#V)~cdfnx- z3bkoeWj?{HN*CzdQFtuJiUP3)4iOLCavCH@)v5tl-Pi18h)K3vPkBeq5POS=Gv65B^I0?@v zGf&S}>VF5_CcOO$`1ilNsTzdoXVReF`CQk4ZxB5M^FOn>fiEdp7@&Q;PrRL1UEODZ z5qFuP$b%TT(XOyjmeRLoc)q;)tYPq?_gk>CE-rjf1>d znxnjCvoFgR!W_f6Ei=kXQ8uS4OJM-Xg1uMAG1e!y*x&qB(vV%{EG z3)Jvh8-;4QO??B(Rh~q;1II(Uc9(&#HD}}ahKp7h#|l^igJ2F zXUGzH2?Mb!bme5coSwY1IggN7{vq5Gkd;^QXp=(2oKwBM0AWrp0uL{~wSVpdn_8ti z>#WJ?16+z1TkyV!vWPJ}1S^8iXX5ipZw}8KOL$VYuMhw7n{LN+Bmgnat`{Y%drT_j zn}l?nwAoVwc^O*U_(ZXUf;TCpU=9|h=cam2=WZuUC++)3r<0bYC+zw*&@GAo3zTh& z1M!O_5^Z|#12MXSD$s+BMVe_97^cz|$@WGMjl(p+$hEx>&SCHU-|3I*uAvPtT6sS` z+EcXd85DdSKHXx)q_ee(@hV3I`rq(+0h<~`L2am0r!ag9I5zdY6ws_n)=!~HDkCO3S@G%;ABm?;_eQWu9zZTdG zi33Jp6I71aE*;3PI}`3`egVICsVII(zKGO%CppiRi=(_cL+%}A$yS}!w(sbx?Qh_n z3p#*MQoZW27RmqXb_W;0r;m#0;McLX1H9d?5h4uYs#^dMCV&Gq~qO*X!`&r#r=)vIbMhpR`jYmug_Li#l4=Nlx1)&3%x|u1pr6Rr}nj1=9 zLhqpKgmYg3&ydZ61)soIh!*}gEu8M7uonIhaH8fj$hj901tB=C?Ak?v#t5Le$Ui3{ z;5AKgD#Af6$Va*W#r;`qhLxsXioeRV#x3GIm!VRJh7yD;zksh`U?ebE3{@lO*no5*p(WGjyCs$R8u|~P!N;g#;(4f_g%urXOlg>G6=%pB~TbAyAx|}h( zh&(OBCiML~S95h{N@FN$%d7!7(nOj;lN1T=aGO*~cm-2~FC?hFe!7p#DF6&ArtBt( z(+m)MsU-}%Y?c^|_Ba>kOa~tuS{A`yWH98_hEuXXCK&_X;si1#0V%|99HA{dO^ZMC* zv3sXAjnVI8+>6VaKEYRf0>wo8*rTZPFSO;%O30jcLuDtc%G>;*IT0$rLH^K=>nt(i zi&FwFm0iZNI4eU$hJTL=jykO{RG_VlC~90gZTPQH;U1M?G|^f04mP(!Cs%u`ea~=u z%}U#kU`@_tS9S*RKK;)wyyiZSI7%}q2Ip|JIY}X$v_db6IH|)JfHUH_ai*7M$AH7g%BR{_79xUtQNZu_+aj-yb&KNp^iqZi#iK`gm@hs?CSX7 ztIU30iQK^zI*IBv|3u%(acAnpO&dxdNpE~LJ5^FLtR?+k*}okr@3F4hh@EwCb=GmQ zo5S+Oyvatu*ZTnmFoy)O9&X&`7Fe`_4(A$`PRo{4Rp(STqF^S^+8 zTMMa1TYnqr$|J)r)I|_?ZCu}osl@*^nS0W3i_ND6TjaF;HqQ|G(6bjBb{9D+!=;7_ zh<>ik92t7_hJzQ3;H(1sD0>3lf&4}!xN%udULji5i}98Juf9A$y#gnr+w&?@&qj2Ww~Au%-i*7~&c0LUuD3D~Q}-jX9Ic~5A>_oHks`2F z|8mZiJG1r4^k9D`e(fB2D>gvo1SuwAjeXdDi@n&Oul6tA^=C%;-zc26UOe@yiRP}$ zy+y>yQL8->b9Z0CCDx6-FGC6U-Sy9Rh;XQ!lRXUH2YdpjJdYFSTuOeoya)Vi-@MPj zUwpIImOI`%caB>Kh};VPI}I`2bpq)_srt$Xjd*Y5UnXlFE(dy_@%KN9jUAtCSFK8h ziuq^t$FJwE)FJ%;Q`ddTFrxKFQFTsXC@Y}$<;D>CRvVhPSrB?PHDSt_3U&J3R#Vqum`s!7_zBU?i1dT`N9SUV#lq!iZFsLkWa2S$1DZ#GpiTNK$JEX?R}sQ1@~U zXPTf`mXmTS~9y^6~>T5Dv-?`F9F(I=nsS{s}Y4aAn- z(!l2|mP75IlN7cQcnBm-FXsfLt6AA;I{e*&LJi|gc1nMIU02fdFnFo6ibQZ)^1VZQSa8cEmjo=Ov$3t`(6Hx#FK= zjQNeiw?!7}9dy^ir)+tPNk&sbJF@GH&Rc!SW0b-(53h}4ZM-A5N0;05!B!nu_p|%l z;gQ6?B%ScNnpPKy8rR-?&#r{zML}iRb-Y@QP9z`2X9x@LU#*Xo9@^rz6X%_Zdnbwv znmz@^srsmbKGVKFqEs&PqBensDD=H7w;PPzk1Os^*(*IqeYv3T*6pK8t(uS{uqqAyY}`FumbPu6nLRJuOT)J_qL0Bp&J0c^Xsd;akMC;IrBs3l15 zN(RIhSgdR+iXuJ4S=WvpFZw(pQ5@i)zGYS7)onOua#;7ZA+de{CQ|sK_To^ zrY0ZrZ7pHP|2*}UfkiX7+ehioR!Dt`>J|nDutSEil=I-rS{r=P?S!_G%A2Lgr0@># za0x&`g9j;-$|tlPcIX%(u}#ogyf6?&AA-TENaCM0k+C!oIqSlPUn+J-*E*xL#H%il zO5tNi6G5w@M5b8JO5qb*TGp&_dxZ@d;k6MbWh93^HB6Z(MB$1hTiv>9rCpAn8LRx z#BUn%RhZZQWhcU3u?uf%3$GymQ>s=>j0VoHcW zcmIc!jPgjPz1;nKM4)d4BcOvEI0Is z7C}J~b_P~jPF7~opZZlMAzDEWPC;4`K~8o~W)4<1MnUHP)~{+gZg6CLQq%R;!~+Td zfZU5A49T@5{Hbq?A`zP3_h6Y_Mp^U98iG+D10%0Rjk(ji~5}qg_ zJ-h(HoxSqdMnl#sJ6U30>EZB^kb|Sf{7-;3d+ec4rQx@#h>UFD^ck0r8T~mWxa&->f7~~v!Pr-FeB4T3 za8T0Sjxr{TAD%umV8q7GOzhuD>?*$gs(mAG~M*L%-& zXB`^({;nOau67wMe{bBoqOZ*!T%IH0h5Jng7?boSH5$7FTvYqQ9s$aUcb9k^WZW+yT#~q z&YWGR@3F4Z(d#|*=sZy}WpYTONYx}_qLVPxkohg*NG57p59j(zF2pwCSa_{Uciv?A zjm`f%kI;#nCgW+HEw^GE0sX<{iXOE3$csljP_whd#{XO9PSU@{Yk4312qaW|@=Z!_ zERp!*9J{5n>hnN`9R16!Cmm(bGKPI2yVv|=(iW-o4qxD#W%k@uovl-I>^LKO^0c?y zfD!vsx2X+@rLCq}C6S4`r1W!eSmQI`yS#GT0diZ{cS-afYw4gv(8~7KhAs2tI74T4 z7e{ZmEIWzMd{4z({l(by%f66x>YcpKex>KHe&L;?r)CQ+-p4T}eTE@d1sJn0=lRCV zPlxAqL-F#W;T$OJ@rFC=6Z(~H&yTfn?4$y7E+0wSSc$*dWSbudZ}!uVr*x#!2UWxz)?*?d;BJ`|0_^0q7Y$dEBwe-1pO2y)D(W9X_zE!|gVzaZBk8qd34p zj5iG1PC`mlv?vIYvX%+kelKu!4#%^9n(dwT0wAXa;#h;){p{RC?fvy|0ra9uKR@cy z6u0lC8hc{xuKBs+Fs3B!!Wu@6cJ#croerc+Q+wghV*qz(Y8u75+@qM`G8Ws^V zN<_-A@@FnVlyuKP45bWMge;~j@YN>^)ve>+sJ}k=^A>7z5jtoy(_GK2JYk+NKZamn zr;=T$6~<)ZmN7x1#O4J3-VwZ#=796LqPW71^LlkZ7yeYc&Ck$sN`M5DX-l^MSu~1Va?4INhQu4_R_P zJ~M#uH1RlczdBAX4!r_GRk$IYs1V`-gT7efg#seYwU1bp-Y13t&D@3osEQY`unz4| z9w73T#%o8Gwwn@Q?!cThHfSU%`@jP)o;dXv*n0q zu8(-4;~f~1OJ3L~o)4C`^P^17o^)H>vlja`T7esQ-l~}%z?ClxhPUR}0rt-u$sqXw z@PMt{p`seoBkH(z-p96=wG?Ep-JH-N@kM4m8{P=Ilx#rM>pbgNhy&yf`=*XvupeZv zXMhc=FT;F$Ptt)EZRjoT^$q7PkbuEsCmjcC?{37*d5cSA-#E{88QT~7JH?vyQlkkU*Q=hH4#8Hdu=sQ> zTvt&5I`n5vr0CY;Ga{yh0gdXn6F3-fhkv!#Y<72^%;Ylv$6*=t_q*-y=cng3di^}@ zn$N-%*OqW>T7g>cE}k1J zT2sO^asv76f_`B2DNbk0iafF-^Y$(T9%iwktNFwoo!jIiKL zrI(tHP||w8zu)jgXfjv7aY$q4XbeHZQ6<_Dh)6XO?!&0!LfGJRM8@_ztt&$445=fp z!^4BqB;}M#!Uyy)E-_e4vX4ks;-v&Qht@CfHoy)0kzf7QPmw2m4GjT#>hrQR4RMKj z#w_4+fFv=w!fB6Y#F(aA1HB2*I)YvVX!Maf=!;+{-Ozzp}?5ur24 zq3$@sX&mGW0f|Y;z%7e{>oZ1pW|w1NNJUz6xrHgs`LAm}HzjFK$A&m(DaRel85Nte z(oizqASUB@Gcbz1VopNaAuyaK(kD-p_;J7#y03{VJu76$F z`h99y&Vn94Cyw#rtC+Nayo-WRigoI=kxmnyttO>2#CmY1m+t1OI`-ycL;7U z9fByMfcW#Q6Tz1J*wtz%H#RDuJ%Tl(O~On~q3d#99#k`dO6@2oD3kUn-Ve+MQCHJQ zu)1$||4$a@G57>VMJT^`g+CtjbaG{ls>dS?IUWpbWe@=oySh{X?*X4ygVWx}A{pUD z>cmiJR6sU{dp!I2;u=vh^D$#ci1k=tC~}ezPmj)y1;Q#IH#`x@fxyL@07(I9Fyl+@ zq?B@@jzV53ps4)@LjmNIff2hlR6vxBTAzeN0bwMp49NEpQf`1+A#C(a!W8T*E^&w) zd+7ypqCs@~Ep+?h$k3c1^hAnKUz(Uz7}bwxj$jLESw!4i36Ra5+2X+U2w}l`0qS8y zSfz2Hh&CV#=s~Vj3-TK=Lx-cF5&h!{ZDjh{EudPq z>?OYlD%L7HI}?IO8i)L{%Qq~4a zvi4cVBig(F9zS6T#R@=$LP<31P9tD5l|iJ3+DEJ&Y!o)}6F?r+?F^y$L3vQQz>VH3 zWdXQPxfT6LWLh@G^ZNHvDG--vHd%NbL-s66q;<)G3fOsJH?FW*X}@AhBjrwL)=K7i z2c;8eWWsb*d5x*#&^ytw46nL9yWSt`K<&ThE!N8g!S+#t1MG}KeT86PdSmxsYN>?) z&?qZqTHB_%qf!rf>+rjDT zKA$IY3-l8^O$poW(OtdQM+*|#rmn&Xe=?a;yhTP$<7Bl<4Fy{o)6Q>La%qE~68f)x z>ap-6lr1(`1OJGrpbyCKpOPS^du*oud4?qU^g#=ZP=?zIjdyP$&lIYZ-u4q9CfT3m zcok1%@tLfm2VXuNj+;*0>{l*3nS~ViW1rKw1(7p~bvzApK+bW3#Al;&T;Qr8+)^qR zj4D!yFlx_o^ezCx-Sc)^D(K5a7~d{m*A8mqOgNt@pgxy#gug%)kwh& zhm>ttEGhc4nm?0(%2f0NTEWr}&tbe{nH1(Jel6B3DkOTrrNSN1ru>E+W0 z5IQzZb2khD$>5({FF>nn^$!*#%UlOt89KjYU2(C+w0elOG7wb>yPPF7JEfTN23E}> zDrU$IzzYUs*J@&pw7B10HX$Z~;2P6+lJ(cG_gKrkrRshBtjQvF<@-`u?d5O+Nc1+uooyl6SU zU~8LoHXIG@kaO8^reklrcYfmL+jZXl*tYMm34GTs^}Rk7+g8h++|v}!N;;Zzy~Up_ z38s9}_@^;$c<^DGIx|yZvz!fM4COZNRN-8$PWTdH&-Ob4wJjNZihG0Z5W@|Y z?Gz;7+~Mz45o3<0$2cb(u_bS}`g%SE$(Lks`daayiIg79uxHIq8SDjSeM25h zHtg!Y%I@v&AIVsG+#MV_@ln;48x@U&NneiN`PB$zRBr-tn)6XrO|K}~UcEuT*szg@ zrAB+YJ*>N^bB@6GGd}}QIr}T>srk3QD6!R6uIbiYG^90eLD(B@H=)xDr^jhC8dv2z zV3Lf9DY#`0jH4I4V;p@j<&c1ZZv>}?zgWIv+B8IJv{eqY#$S#8R+$|YUQ8MeWgor} zW}~92Qs?ozYxL#smHqrP$z2-zOo#p(mk|srvesfawL95l{|}dVqOS z9uT82vt|a%@`r@|Yk1MYrR)9n=M8x~dk)l1gwQy$?b9#bT|LVP=B6xfdDqgF77M*YV78pA9x4|A3728{ zYCDx4Q!1+LlsEAd*xoYHdd|pTtJOn)eDE}N&v^tQ54^Rd!JG?I^R{QGts_GxJ;kK! z;G1BB6KWvm(VX>mG<*k#HtT#KX;b}x8|nMjHklLlezKz)7`r^O!nf-aTL~Uv)1})v zXV2MgF5bhmyFPs3{#X9f6t8}bw_p01<?n49=HSEN7{OIn1!$8jma=Z6tzpw7)cRA3OVR3ygbhh$}nkg35PM)Q(;Rs3q- zP3j)QQyP8aPHC1!;B?x?Jaj0_GR_m}$ySVv0B0C<)kl)aOqHRj}-%quA&7SD_Y`6@Ms6CjG z4%|5vzr$0oQ=J*iyH^n^RHfvuAc-NkzjzEc#B7M07J-IT3*<~VP=gF@+FZ~#prp-l z187IvCopG9M#=VeyJ{&{c?*GaL=dzAbNl(}!+O9K?lLVp9x>U#npYgI3SesKWI0Bm z(GvlVy%Ss-g}b5z8{d|vCJ35N`iYPSU^SR$STnhn=~Nz+VBrcmgR@F1Snv>t zw4fL`wdv0?zhxkOt!S)(^LZwNMRP1vD+w1(#L?93MZ#%00lRWURykTVs0SHW~( zPze^_`cXxzbHWxmWLDxATrqSc;ryHGj=a2(J@WR0Sk0r>I-Bu>t+P;hce;fZD%Xe3Cc7MQk9 z>ARz16HJ0pEs%(YblBB(Nx39a`g8TxOy3l?>U%h|TZ8e)a_>DRS~24sluuGbfI+|v z1^YYk$-2uJ4+RyLi;+g*j(36)mMOhtz;c$I$F5L zMoM8DkeEKdpPl>EsM*j0i=58U^!b7WKt?e0wk*ZZH~nH;dz7VgA)ZIxPgJ8CLh5r! zL^8AR%+IJm+8loBhBwXN#(0aN4?BAhI`6*d&4|-&Rl9LA>k|hpr?AEK>`DxU11gGZ z&k0mM#@#lXlX~5KC)MNo(5LV*!(!*Mvj<0Md*qcjU4G2RIwYi6D1nU8o{>ff#L^s@ zxSx)s?5dE$NvwgI7r(A-OI>Bol!xCsWJb}1Lu@`xf~&8#+(AT~;dok6f7#S7O;qC& zp<5Ufc84_x3M)Tg#Lh%d#WPmami8)hM0rml)4Ut-++*hQb>lwK zWWzAb&I9T6-dwdIJr#0lnAU4$@ccm{*(uG!UhnY#%#Ugr!PGnq0DylM$Nz19lxO~L z^Mj3%jfsInn2nZQh?$L+MVNz`mP3e5gjPt1S%gD`gPl=Wgz>-T$3Lh;!Y695?&ysQ zs^ug0A58hxR&E;k*}e zd8L@dnR5>%v_(Br6Xm8~yu9ASx>>6CU2iHeJ1f1vjz%@Mno4WwBF4Keo@6T4s&Kx| zwp4uoEViUwT)kKSUbk$jKau5qQ;1oC^VZXyB@@-Ev3{%0P&+~XZIOw+c~+4|&VJw0 z^VM9w(ee4?p8!`#F8kSe+G_T5oQO*L_Rlj`EgM#-H#mSweVly5ZT8mZjB zE3LKLZ)zK%FQwsul=Gp@v}EEhr3Jhs zQaBE~y$jpDaLx$#wc|^tYv;^mv$X?jZP)D_+htP|*}{D}8Mzo);`!bD&U&igb~%5y ze8YM=|8}DJ5K-CC(KWyw3gh~w9=%aHe4X3j(syFm_7vs;ry0KeWX(HbT^HMPxBj#R z@5yF)HV#ti96Gx(yCnQ4r*@}d>s^>O7{UZ)NG$((atVy>z#buzA<-hmRI%zt^~mX? zh%z8%knb41C~X-!NMQUd*fRC z2qjhg`z^9tgU9Sq1DYBOKl4#e@>NO(V^Cdn+lv&S5uk_uqTOw+h`4*g6z$)w~`~v~1!IJ+VMK zQp5mdiX0T6LIsl>=h&4T3W79BF-y-Ke4gH0X8kk#`u)kB!X|Sd=#9w25?u%k%8l&) zEgO1lkNahZ{5oSfKYM#hIsDp{v)Oc{@o2_B#{f4myscJx&rgRAjbmE&#m@3)?X;qZ z)&GCGglO-?dsTDiLxwkBk08!N9V;J&L)!@d#QKFcXbAz4zRzQz7s9i=l^g_>Ql%ui@O$bRCK=)lT`bPYO!s=Z*EfHlZcTM{4;5*YB!`*gA%!AN z{H%x&I_V=LkH*8g8?No{!q`#U8gvKh%(GrVmYQ-cRlNa*9<0Pd*UXuqxg%t(}ybB^>Y0~A+Ei8~t52_6L&)efk(9(to?%!lGPt~*hq8fevT%)NDHt~ur z7p)o7Df!bOySCC$(Kwsf<1qKV84SljZCtAqSQo5>*~7*1%da zmZOi=ZI;xkh1+!k$eLJ7`E2Gnf$6jxs>)HLwtcxF8>Z;?WL@*b&T@aTzWFmr-~92T zuPnPB)N5f3<9je?`ubMl@w`sa=cV6!*elppPFb5>-v^BB~SOOXH<*_px z90|-7W$nC=G_CQwNEkh{;6;y zHVC1y%^4v!CdT~(a7gwmues^^X$nfA8Y!FuNg0+TIADPMO<@uTg)QFB#$|>^ekruE z{g2@A28LGZ`j6ls$AE2mJ#dnc##`?N0q6!~6{7H_F8Ajb;ABVUF!zF(shF6QxFE@{ zqGaM^pO`ydkzB;)NV;7_UZt?2ohi{I(_bL;W1=`hM*;E$4!b^;0u`)trtnGYS5rHw zuWgF9=jkzV4-WGy??x>wn_9I???zDS?(N*R55=)CT2XUuf-5Q&vtp=-L(%YApRJ|-!lEB~b|uFdP=DPD3^l$WOT?%}H?uSG1`Ng)+5Mj6CpPliAb_n;F>#9lAKd=5dkbCk@W{NmShU-HHAXtTmwgk)%juA2&) zE^=Gl61%CqhwQ1bkS845bjtTti6)`lZOoC>=#{hBs z2_vm-nlxlllMOQvMeI(9sQ)*;4zSVgvYKJan6V@h%O6;lmCl!%jQvOzVrqmB=N%k3 zP?{X%n#T33aCUV;n`~-Gv5$$`o_iNGzE3-+bo1~JV@l|StFakjL3ige8`a8@<8Fgi zJ{V3`<&-*t2_}Y$pQFEY5=0v!Ql)6n^g2D{I}<~P1hD;`ExD}wo?1wt8W>%jltPza zSeka!2)Q1X619_!a8#a%K21A>1}x=WOw;t>6a@OX4anDT#w{NUx0i*wMBY~YxtJ`z zR(4eyx#)p_zCf6IItc%84FoG1Xu5eCaUjrGX8H1q*}y9^JAT(4X4f6D2!jz_QeH=A zn#8Y-kZ_Ap+}L>BOC%0JrX;ekJsc3kNk)OV+jvr7uSj_0bESE2DEPV9=uOMnR=1ub zs~0qUvg5%aue8;`J8xa4{^0ouO5)-c7(yj~4@{enPG$ud1L;tmJw!pJnGOZV#T^0V zFccN}nB=XiE$|v<-OnD^EyoFB-5C24Vd|`UFb`%KIz3zFLo2|@OJck@ zb-zBJ%77&X1bB<7Knc=0WCZ;C|l)T>#O_F`Q9Sy#FVAT19|gA$x9 z;Tm-u;|U=W0W3t3ayG$?p_}PMmB7%Oxde1mE`l|eIA;YVV=j9jA<2{yr5wtAV%V?-8x4+0rp7((Lt{@PU3gDQlFeP44EpkZnF#(Fco&fuDeBC&{8QLU1^p_sKWZYsl zUDZ{n`iKI9;w69wr|TYyc!DRal0?Vuah-6y$Udl$b9ktGnKql50QPms2A+q0^mX?e zeu#cRD1<9ernBs30uF5y!ZRsDcSuH?fhjUbdDm<>c{{fNBL$v6$T&H>Hz1)WA8#mO zx`9ss)oa%TxrgG@foAmXrz#ZHpeO@41|Je3=&`rD!JPPE0tLX&V7B}t;S{IeaC<%>% zsMU3|EO;1|3)lgSL^R1pPlxKDeS!2rP_h$LuTMX{|4db}H58lQ`&&o_GZWd2u{ZCAgq6O-Y`uzG+A0YuzVoN6l`k-hMIr zX%TwPzJWl&OGk#Xc$xGSm&@KAd)3EI?JXS}zqyTdqbHG-@YyIjR+L1hFpZWn-t<$4 zfHW74aZMVBv6S6KDKe#q5r1RVt+uG^YYvTpt2FPHrg?CXmCt667sZs?KIHNnh1Jut zfL^7L|0`cZC_`2-Hz?MV_ecm@otvdf;P(d6G+;V2RHvKRpqOPw3C$!q!CJ(Q8my0= zG_$~QxO=4J(E3@x&_>~8iQhT|ggSrMbZ^ka3=4k1U3w;ja6`t z9ah5$THZhdjR~Luk_a*3bypyZ`z*yHq%>s%P2pjf|0QwfsUrT=9v&-=+P?&^hX5rPi+QrbAyBnahvK-8?SaHKi|vY(A&fK+;~JJUDZ)Js_wd?b@e@7t)EA$H zXu@z7jO??(p&UL*=mH6PP(Z-Y8b6>E)b)obD!7yY zC7*CQOcbYhUUxvB1v8=xv#5Tg?^CYnVxJR02O9mA)wTMtM;(h;*Npv*Kv<@~y- z3NSb=}((%`MG{oS9vWrM@eEF8k18i|JBMo2FD&EK#Ze|#k7!-zM(XQ<$+||uH4oa zhpwp7uH2@kbyi&2U&wL?D#eJR<_-MkiQhO5U&I;yjO2rJ7KBZQP`-1GihNrmh1Qdv zdZ>+eD+S#HWtc0yD<|Jn;+N+rxhyamDfI{u*knP3$7wJHX@M%PNR~M10*Lez1lyub zT?Y*g+GCCPlz&`{)h9PtcwZRiz7KFR;|y@|WCIR1Jm|6*sfi;A98ki8{?rR&5)t$& zTnV5WN*E73mKv*Gw=3M;x)`$Iv~eRht_;o0oSSYYpHv;MHF4x79W1KpUQJDAS5Ibd zWq32Ftyfw;7--H2_T19@lK<7O1%Nm=9&R+U%vNc1e=W(<9f%;Dc{DUgEI{IwA!rav z74QA#8C;jiE<8Z!1m<$IhU+zmEY`_sJWz5fxhVqc^%VF;Kx3IIt0C8ED5Rrzq}S7> z&TW5f9YY-Pmp9duH#Jo$6p8UG65p5=nnF<>;0cI;g#FD%{J8EO-(b#m?W&uz*Ng1u zxI5}(#g?5`gQ^N!*S3a>8lg~YF}S$u_(iN~u#tSe#qCkBOpXL!tr=vg%n3xOL%?WtNn-&`#eL}4_q?b$py6PjA8`+wxF$giID2QAjxU2yuXT^oyF zT+h#Qhn7>gGO}NhoMxV68atu+O&JC@t-ZDtlhRnZhehbQ7DQ>+I!G-=pnogfH_z!d zt;$T}J#%mbmfR)PA$VmEm}uY`sd|R;;{`LI!-?p*ROSJmuTsJBr<#$c9ydAt$k64? zW%lXjA&A2{E0~pBtRS@6BpHLD#rE_%6WdN`yy{T7Mhsj&W2R zmnKqa-o6|F2B(P5sP+ZXlq{2gdi9Z)oCG_-Cq&2~@+Zo}CTpJe2uX5*-Rhp}2dQ|J z;q+680TA}h0R!mgH<$r~9Y74g$bu_+(a@j*ZB}A$>f%GAUGxhJsi40csRx|f65=EU z!|QPfeD}+C(Uh9Ar%V9q%MeV0vg97@oGNoG8P#n2Kl!E}Z-y?5ck$m475n$iAw9qo z`WfL9B}&WEQHjUp93W7K`n&>AmeokaQG)8ib6c<(raJd3UQAs>D!;M|U~cJ_lkRwJ zSoK>$4RWzBPZ$rvw&De|ED+QkT|N3P15K`B%5U>gRn@2de4` zTn8bro|QRo{m!bJe{sXp~}~Jezh3KfTd{#NW~FtMM-3 z(ZA8kIo_d32z#^Ej^+uKYCD&*#fwoG#%(cCgegHG__pPuzr4JC#Bm8JtAs^$(TCh) zn4&TJ3L%=^fWzWC=S2NdX&~3#n|$lg9^I9FvvS;qdk6gsPkwzg0#V68v3hb61rbb= zBmxWv3MKt?N>w28Vu=DjO7N~<&wtrQKGha`&@6)Z{ETv>rrZ1--+I|(@>MTp#Cb}P zc4g{$2@zAu04hL_p0cJ{u))f9ecfIoAixp66-Fp+(6Pz7Ptn25 zcRVdz1BQl7B%2H((jtljfkBS(#PrOJYXYhn;w3yxNAZ-gGVbI2^sgtR-!^eLy3>i0 zyn51Tmr`n|%apeXZ)oCm01X`4b0$Rddi z>q<}q+^8drmMhB%6EGLr>?)sz1eA3h<15U2s77(=fW_clE1!BnZMl&GHO;fqRg4=; zr^c`uINUO&>E7E?(uP5r=zuMj&TUCo;Fqkm?j&+ve2j9iWqNGs-q$YL@kbozE;AzM znIJ&?06zS>qLctpSxTZJkWI32U2NvkyZV%8SCDOwvNJogGQHQ_H`9z>*}%y>4mCoA zykbC6&I3eZ8DMGT6$|MP#0pe}fHWF)$cLGqa_W73M!q0_eH#`JN`OZE#Rx+ufAoTBnd=T`B7?pn)fe5C!{Vayr2j?UWOSv*l%n_S_XL42yh$a9Vv8a^25mee2B9)ljgxle-IfgBdbg*_w>c52^=e0rZ}a%E zr>gsO{hs(aX^0XVUO-HZd8R^f4Bd=D4xxG#ozz^>3sgZ1bSE2wJHv(R}`+8h<%Dh?&-V={1x1C?YB|M zdON-5>!NmW+tGHCFLI@R#Y~X%*a0nzk}8L>P9WGF$|P{c>~gk@zTa4Y%Q$TFz5NW>qB(%KoB)YYS%SmccnzKhwjW@X`8P_pb6?6X_m#_Sj1PUD#Hl zKgv^|eoRnR1%gFoBq_&ubQM~TND)Mx73n*Q5&Q##ffPbTbB0`T0tB*=^(p+i7?n2u8ec!jxZ<87?V)tG}e?XMi*)Ax_#Z6rXW9$G|4NeE{Zir^8T zgk*q*82ah*AiW^A8>CTmPrB178?Qz5iC)zp&dJo!SJKBdq}$b`tb%2{S;PQsxZ^-- zC$dP5Q=i@9+&n?7x`XgSTJ=tRrfrpOw z(Z!uZl}&Gb{5=`3o8uUw!(mux`_Jph>d|xzc&DY8iyXhG@QcE%Dv-0r@6~2A3BOB! zsYWK<*K6rIvE?G^dYbos;g+m(FkrdR_|b-@dN?4LCO0~`9`|@NSy0C&-Q1v8T7gin7SEO(aTv`M|IKgZt}HvLh+reID(KUkXMqPKjRN^XVZOOrdwPC&N3lgLb`Qq$n(w zvA4pO?4a%6=1}Bo=poeCz~9P9L#ENeq+CjJ&X2#4pUqs}&aKa~!Kj7@c@SLE&^6KikcndVwQ({`Fq1dhpRs!(H-0 z!QN;CLMPhy3S|Tn`C3s?W+=&aG_Xlif-{6|8)7Q3BcbhYXMc9YovpA;haZsicOw_= zKRvy#notKg@FCIXdSk<`??Ze)Io>2aGV3B^rPza05PO{X(vV3F(!uvKi2a~KtQPpX9?+7Yy;uo-~Vwy-b}gVI&KWASR(rco-g33M}fuX zA=b>n8!%nE$f4;H^k)R9&GDpFjA8R2!iv-`(++r~VTcLzSALGPN6S5G{f^j>+n%=# z!iHyatHN&SAmCq%dnR7AeW{J9`3VFwoKe87SKhaU?Rr|l+R1xaqI2AEilY#SS`>Q5 z$|}0DgvNncf~F4Q>VH23MB~(l0mKlgiG?D(MEZ>m4;-Mk?5h!gDASC3SYBFh*WVET zX19Pozdo0+`NFl}rwnF~(R}U>kv z)s>FoM6ya2Q1c>92O3s>B!6>W+E_rzg<;Za(Bd-BEqfMw-_%86Lw4zTw=zko2^=){ zer)X0;RkB*RZ>dc;hTE?bXcP=D#by*k?s*Y{_J-OeJlk)w1 zP3>va&G_XC>wYTVZmsC2^SGV}MAq@Uc8;x#wrwq^Q}45!fBFg;r+SCCU#)aAbaB6= zS`claHP=fnbN_&T@jC}-G|Owm6@)B2MQ`=W=;5kyc5(ifvV5icEB`M~=cm`VuAD47 zB4;}CTr)Ms^iPbWQs2)b-7Ek+p4UnL2v@zaBLbBBsEGqvdiKec1qi(jpejphMx!}I zeN9p*9 z5RlUL6C>7=e*JmZK7YrMO_++?GLn4nL`yc|QnCeKP>bguzQJXsJ&W*|fNWF$8UzJR z2uO)^fLtrhYt&#uD+JWugg!(y0>g#8t9a~L!J*y31Y)`q3o_BR|#^cb=?dJvf7_(b?uK?>rd}BGY zJM7gjoa#4#O#HCZ3}p`U>&&!HhCl^C@nw7vJ0*}jQC)W=?0)8W{{&L(5#aAYMdj3A z?+INFUkyDLVs#&pf6Z)P)D}An^j2VeZTv05ql1nKcG z4_tTqh3>uXvEH|tF?UI6t|D%_V~ zArr42@zPRO57OuBuUG5rPySD-%Ak5rDKRksz`vBu|DC^K3i#jo8&MWUF-~?-5n2W| z76w`tF-AdJ4kk`!S~eCARdVH(}-UmDSBoZLIpxhS~Y$n><`<@r(VWcIV_kWBv*=^(TP(@mxXoT}~#;x4r$W zrpSJzZ#|o7d6SRv1m~@`DKqM>{J{44Yi6R7v4!OkM~`*F?AGg#3cK&0U&^d{C8C}J zoOGG=mGZK#mxZ-6uD^ZNQdd?)y}vTLx$sZ)BHm;siYbxL;$q z$ACbdt2jTxy`9h3yrK6Rp}4xMZshnKi+zE{%I>kON7HSCoSwS%^=n_l*vF7{5=KX4 zmH~Yo5B+ET{%_a8*5l>V zZ@%)XTRc)*)I2UjJ;+mi!#4A#+i*cM_7p*7&KL;tB-Z+hpMf-bKYnslQN#l2X$H3M zUd2`F3}zKp0bzlk;jtaVwjra~!6q`q-S&^c zCPDK>UcS`0yHy--cgQ0JiM!5gV=V%CwlpvG+5550+j%^9<|Bie?FKX7r>ZJRa2{%L z8oMno**oI6CM}DEzal0>6Qb z*27VIx8*ViK#YfoE2%$L@0p&H(KRE(d&3I(?h3wov&EL5xBPiS4@V&ww&x>u*-eNz zB{&0^{lRwC1$YA5S%0Binkix3E<1^Uh#owKiZqhGeBJL81Yr_!H%Ekdqh)| z!KqCDBO({8Q5^~=Z)HWsrO7Xg{I~i+{JERFv$L<67j*4kv#uft(23dWTcX|Sn$Zsi z9I!ZGZD-PVfRjv7^<=8=d#UNAe!6xc<>YH!`1%TgJiF32Sq0sC3aa!?wtis-5k|5W z?DGgF#%~Jxo^mt7OgnB1d%@LcB!wqmh=tZov-v~e)vVJ|!AUL?7Wv%tJ#>$;x)03Q zj04s-w!E<}>ko4KJo(4dg57z38y2OR5DlKF0TVO*K#!H%Y&{!#>igTQb*9Mmo8qAj ziSkg07{ky<_)?GqMT|2v8dR~KSYOEN0?_Xhb$#DVMx9MI+e+LO;+`Hur+dIqrfimE z+D_vohVjYK@Hah;Syt*frqce1CK0^1B5nEGZ`jVVkwbQ&Pp4_>e%fwU+AZmdtQXTA z!vIUH!!lthBj$%}@+ry3Vz7UEMAN4=3PjAXE=aEXi zH20eP4pFNc*=9tk!On!1J>f))8WBw%W*=p@FA7;>-39JngZ&+Z-El+<%BBK!C?Yy9Nz%#)}i4<99M8u%f3d;}4nBh7% zg>#f1YTo>4Q@k2!0%=V5GE0|pLC%;!l^{$xH2fJRsnw!IDv-h`88R`Cy}ZoJ zb_bGD*23bkGJ-c&haObLYGoKTa58LRCE13nkXL#cYKjb|dd7&Grv9kQl~Jof$-e>< z`7<9YWBHOHchQeNZ=+FLzpzhAH~bC^PV6!aRwDW2`d=ww`?ps2RbFohl0>vY)VrYQN-8Y_v5>VyC|NvfUm&Ybx*_Q zm+z$e3xT*Lq}tNi5IeK)U`5|T^#?8^DEW*PO@$V+${KHwpFGHPmO4aN`{iwW`ppng zAxB0q-xSl2BwHsy4Xh#;GD{U-26M{Vh>5MYRBv4A8%EC%w}Kgk+Frj*yn>hA*^hxz z7cXiUt1P83g&}F3LGt1wO`xp;99M-oMBm z4Wir)bfJsKh(V=P=;UNp)j8~O{(vLVHRyEh|tVHne z(nOS}%ra6fmI{|8r5-cMa*eMy`?WWw(LCk}6#gh?<7SbH95;|P&2Us9+<{zQzfJ`z zv*UsdNjGW}r->RC-X=#*}z)A;4Igx)g>vDIh$R!CcfQ ze)GZ8%*JC?HCi5Dm}?`6D->xpI;hmj3~62h_JoSeSf!Y+deRInQ#za~Zq880L|nNaj4F>Nf-a0IdJbQa~+%&jqS6kRhaHo97j_7K4vMaw8Yl`xZlq@bcG;ZFMsst)=~|6JW~|Il34`Fs3aNC_#= z3KS=iRW~g3Gq$S)q;GU&6x@%Yjj~*Swf=6YNW_8OZXQXWRRdr z+{0Le7y_GXU~_avnki2klSM3FSM`P%i#g4ac)nZa!)`)oW@lOvN`#DvSsL-<|8TrB z(^g9LMbqZS!jm>#_zu}MBAuyh)-CqDtYTj%KUn@!9LM*B28t%ss&09`CbU~+T&gI} zKxyuUW2WGAFf~c&^(w@Jnoeh%E&UwoGPC01_0JYxH*91SohD!>6|v;o$mTqP4ie0D zb_Q_+4lQ9PQS_(R)H}Uv;=QeXp7(@5~@7*zGLVk}{GNIv#Pod^u$ zA+ohQuDh1-c^SME9JdSF=ihi_#FoTMW#M++eNQMA>fRwO(Dmh{~4UeLlQ0)#8TR&hQTJPp8JWzicLX`L4#va zzpfUgKVDTInBNT&5VrLg*i@j8SBq`746833rizaya!%adP+(~-MiOlAhgDQaV&0Z1j; zDa(O(DcE1%wFvXP8joTO%p;cM*ZqNT^^Zyl+!|pCW}ts7pUsvK*bkm(01#K$sJpt( zG64J4M+XXLp=?77L;4hd(UZnX_F#P^#wanRq~QI%U}96se$ZeFwZILdOpM~%Ld2(q3PoOmY#?3?6;gMU z6<*(QHJ4EE)=koJpon>(ZKr$^F2v~hPo25+>gA~{W*JeLLbp~Q3}7~m&H z($6rJjsby14#V$vUqy*HYC9M8JjLQCijaI1{*m1)GT`JZFzbd?X{{gIP}8QTx4oZi zH811G#T<5AhbyM5>E`v_rX#6kmU%kp_YjUc;S}4J={}?5k=vH*urG@Cwo%Jt54tRl zn%>r=zT$0rJEI^!m%HRxw_J9IoTuw}k(%87`Qj>SnBpa}kdeuOD>O2m!p14R>38!8 zGf|w8AgLX&(lLj*DpVndVAMQZ;Q;waT{Bs-Gq94#v(Te_er<)v{iV%B+7M_eElOiJ zCKyp-Y+0K6%~Bc}^Hh9OeU25hx0~7Uc%e7d^94C3Qr}L8Gq2mTH(x%I9uWIwe<3$u z4W*5h)?VFFKZI%_^A>GGF+skMy{k4Fq8aDl0$@^rNy7bymdQXg1z{GywawpU?b0u% zd?Fg<_iUfaM?>|I)ldX=sXCvv9!Wkb8L$7T@Foi9xv08Q)T_M^<1z1r(Y>?i(C;9A zGF-((xNIH;zNMc2jT{Eye^6y(IfSuuep2!tq5qOIT-UzAm1|mhqR1OBIwt=V6Is5P zG37nFL-j-eRzAa(G^{kdR=BhLnd@rKBwiYzW}X_#$53!*gyI_H=F zbr$k@Eh66DAjB+7an<)Z6R<4rILha~iW9jR?uzv& zqZQLXj2S7r3RMa$|0n;POrtW`i06(kC`LkTk){|9&ZWXu6gI(0GcK9D#cTQ_vVEj1 z7d!7a73KBnX09wvs$TyJM$lh`K96i=I3dDvAqGs*+8K5xkF@Y-Iumt%>F?5RaK&qR z{j9G)&!~T-qW+WrCeuGpW(uz($RQ}gjYZcu9@>$~eiJ>ilp#$vrh!CO{weE@nx=rdN6Gnfi} zN*`yuS+<=HL)Tf_>eb;jg@|$ty4C#(777QBM~ONSELKz~XJiv+Gw^$gp#M{9&pE>c z>J&=WQ1Ap6%(GEhCJ{+mw{1GE+ZqTC`9n?Aq}70MgQi5t>|AFMJ&Im-;+0!eS8wSJLBki+iT!s*#! zVF<*L*Tc&y9MbgyUV>ZBdQ3DFP20EgW`=$A2rR}ZnI`p+-73obyV)^si6Kh*U^{IK5sYB|I|S(%-mXMN#`!MfukDtk z_Egx^@TDb5zR#|WCv%L!=&keuc*qO|Ux5eA>3i=TWZQAKDK$8hcC5fviow0G;-l|J z!IQ$tQOkzX7t*}EP3xo~W2UCZWT8R_qMH$w17ZE@=lu6+zaG}fkl_n@nuLIxlQ}b( z$X%Cz$Ij4LH((B?Seztf*UpW2hthVD--v8-$ezuuE)$*-w2h3TF{Kgyc83gRJRD+z z=o@@r26z8OD%bxUW(9?2sKJ0?>ZCd4M?h2}U(lME?x-(JkiMnF9}h{XoDw+VjQF{Z z7!|h%#(AhXek1MemNPHwLN9<}#^_B)QyLJ2Sq9_)o2?29Ut1I8|f9OMZ6#P{Jz15o)k|WXzg8sNokg1ZzqQt*;a2n zum@kFwJ`A(WC0Ac1F`A}*X_s|QtzN}@q4`|KN2pUKmo(g_Pgn}Uzh^_{eMib8oHjx z^l-a5swSmQRO*a{hsYi=x^rUFlpM(7KoK2vkuDJj1|V+nJg`noT!F~u?}YHVQZ0DUKbE`3iL-@mHB55m=U~Nr>#B8_H==h&DYp^_r510UeG&Klg z;_dJ;#l}FN3(;1zGiJ3sGd^5J|A5r*uO;aox>0_Ly78@-&f*lQnxzE5;TNDAR#rc$ z&r^so%<&(KHR0^lvUBn$|JjGu~Yx2~a+6ZH&ve!S$4Jz(P@Y?<> ztxx3SUtaXSQ!!e4knr^IFCbj+o9l&=TaHl!$<2uYk<<10#k5cVx!vLWQ@4kYzIU&9 z?R=L98T$3a-=X^BB3`PmdTu3pCr#}q=ZIS$qn=ev(fF_GI zCC^X&<|7H0kGTLuIFjL*@t$dLWhuk8cOR z|Jao^|Uaa#?H?<#(fIS}8yA1 zcxf8MXPN}rigF+6f6qg5n3s3~e1$OcLr|f~Bk)>TgvC>iud4jxzss-@E*v%odJA;B zUdk{=xo&A_s;j*lC{*s)JAWrVzLKVDCK3`gmYYfd>3o2Yx8#m5$L$m1FE3Nb3AY76 zd+oK~#}+kNJUSwWzWW+A>mObAe7d!4oETbe7XU$nms1pf)gMR}0qJ@`F@K)A+U>Jn z!Y%sOm(X0mINQXpfz}GKr?U~mKm4EfBL|-f0c3GKJ6s*@r+B#N(yP zvf&1<;uPTe5Vh>N8p--umq=tBCj|Grs5TCF+efi&-@ zor@};3aX7zTZ7u?L9i!a)uRvf0&lPhpBYu^`E7_|^&Y-bf0!HZTfUNBN=!cO?F`PLEnY218iykBnf zG+Jvd19U6KR8d4(u96K$2>u3c>CZ0((rL_Y`hA(R?dW=`-6D0M$yh)_rCu>Yt z|1HPxp(_Gbe?zlCJI!P^F_UYHFSM_G-)(Is%lw{;vZkp7G#J3?xj_cY+^GWN_w~+g zuro7le|eyjK<&c5c zlH$D8xbOGrf}_c!hK8s&{HBGSZJ2cGUe*7%e_AZmJ%gE^GpnV;mN{pw+u`rqCYxB)f<8>DMw^eI7ml zyfejP&gBq3I<SWHC$>GxnjT+W9$9vG3;HFR;`xnWHTCnQU_!^e#@9c6Xt@^ph;oEGy+G06qVX5{ZP$c9oYM1Q z&z+Bi_R79wdVJ4Yn$|wC5u{YPH#_%7we)0}VOYPG&S1EkYQJss))7 zhbOR*ZWg^6SxwFz20Yi}&{NZ~_r7PO<1-B_2&=8~N$bjVk<{Jq6zo8$Hnco> zNEHh0UkI24g#W2DJU%O-sG_{NpvG_Sm$>Lh*@VCPDOYrF!nmRS+X%w0>}*Vi6VB_s znRe&Rp9WiRuetg*ZknTOahWo^a4)Pv`V2tOz2{;*EFk?VPcqG5gL^L6sMF-K)vHDnC3=^| z-{!v_yRBe~niR43NfN`Vh(8}Vn;kfi5~giTku_beiCVRu7aGELm2(_h+L_*d8OK9! zn%sk@C@bLa!&rx0YC%qIjS#?^#^zZ^J_iT);x1I5Lf%6`&qR0!wVgO1Iv;nBgF#Ww zT$6|*!dq^Z;&sYHdH#y{G$MRHLV%D|$O>2^Rw?m1FVHNz^K}J`HY>al`w8H9gzt5#{(lFzwEDcw$pz zU||25hxmU_N<5E)fw6#nf!vKP&3~~-NJ?-^a)?SWv59euGjZ~WOMa0`q(qtcc=_0Q zd3m^{INAT_q=dfy7pA@O3)9|ZFpro3CVdc__hiAani1uDEOgCA%kc z*t0!PMSZ^BNa;-je?)G2iwQ*#do>TcX$aGU8tuwW*oiMc@663h8dJGlb^d8KaAY46 ztU^?=a!VNvOWzzqIGl=0)m`%4-aEGn!+0HV+EE$B$mE}4;kI_5&gVHW4g114CTv+$ zb=D>b;;cEdxH+O>ve5P}9W9%;yBAi^`BX_!(6P${F;!*x0NjuCxjLt$7}5;PJ?1Iw z8&kx44x8ROdJ{`?_tleJai%R5+@5Upxzv9NPpu*Tqj0=R^HA`}**^{@9;rL?5u85j zBLw*<7e8sgGv{&L9$V|g-BftK?I1fa&I`P;8BJ%nJ=$s<4_#Du@PQKa%bG4?iUv-C z+VnpebyX~z-r_rn!qxd~&p26TjZcP$cCU6_^KD4@y|^omhG@&1?jL>mfymzgjxU23 z9Bv>MH3AHz+qCdL1L0tFy6_<)!<#sv(@Qwq&%5n+SZ2qODqvdy>J|4^;?D>DwdOY8 z@1z?Gmrr$_bzvgAP2tf>16IoO9qtdRY-9g!p|&qrJ5SYwY-rxM^Va=(o!A7urT+vQ z6xMxBRNN3`7pWNVb$_o<8|a`%*jO?Uvb~ZK(^y+3UQPC^;7uEsW2|wtgU9Ae@Ke%Z zZgZQ2Fr*3$t{Wep1vPh1ogJcW9wN)Ye84(e8Ky5y4RhuFa|wa*O;=MR<5(UdGHIDB zeFRfT1;~@nqPhrA$_kSFdkEDZz55!Dz+T=|U&!&}D?Lt3FD~+lL$}_}qE*fwR&XBe3uO^*TlFwpZh2rb?p(FdDwj zFNh^mT{zkV)!af&k*k%vv=Phq zW-FKIVcH=V&u|P>JJ79?EZZliJAJ68KT>ed_?%VXoD8lO23fFzc&~7It;(-hT$c`= z{>)~IjKf9qe~88VTr8c*@z0!3*L~9xCTiCcE>=B;tR}_rkN}2gsk%0?Nr$&_g2q*( zZLHeO^c+bHPs25sRA8~@Wjd7Cavn)cQ^iolKnukcFUxhugcF8qHb+y`VGKOGf;UX) zR0v6Go?0dp>rp>VauX-I>GE zyk`0}nTa)#;kkNjRKU=v$+VKOwbNF0LbJTq;I6Ua9D+E1{T%pxmsbKhlOG~-|SRmP=?|S}h1}QX;Mn~Q02M^br1Z&F2Bv%chS|a1xgxVduM@)>Mord`HYh~K%WoSl#6Mv8(NV|_a!7DFLn9sZmlw-0Hh(edo|GZk^1)F( z#if=3^HZ0HngMs?2B{1`PrMC`h8&=}6Tnoa(-<4FL!e0jzao=`O{FJpLUX5a&tx!I z;eI2_*~tqd6-rne^RdDDVXqY&vaL7aJqt!!0w-hPdn&;y7GJ&^ElfwNFua}aD9e7u zwl^mUXgNb;{;v0uLz1Injs3r)k3ku6rOCt*02CXdB zJPN1!jO$OH1pu{vP~l*rHL&SIwRMg@gi>Oc_Qa3ai?}}zlVgMX)>Juf?*+`Qa>ePZe?FJV9p^Vy+VDit{rM(SO_J z8pXn$JZh~fPOU{7H{E*4pk~Q#`9x{Li}USI8u)hsApjs6+N_O4*!5kLbfFgl2O9OK z&h2I*{*J$#DHDFI@pkYU9$}kK-d|mN&|62BXB2WA5cWa>V#HM${q^#LVvq+$Wbk7g z>0j{I#z88L04r8ufI(b(mOR6vV-vxInP@fU;nT5S{f6 zeenF;AiYiFb;AkAZIQY^Gtt;e^?6bvwUT6b68s?{0*SWgw9UKvq!M)~btvPJoM{Gj z?FKQIh&ramaQbhdd6Ou5Z>H{xmz(&TQry$U+T?Kt9 z#ISdCu7W!%#%6rvZTQg`r|TiBA9h&mO%mBwkoRf*BJMeJPF4915 z^A^{L%D?9p`O4}P?(aaYUn%_FF>b!sT0HoBxPv#$N*yk;QGK;J;rPrb*G?{HZePl! zO=)u#+Qe?h`_dzJICp^o5#Su3bo_bk&hAw;49a|AH*2BlM=!&@wuqBsc|Zg_a%vPV zoq6CTb;h?6!dD=VSmq4OPb*jhbjMWyZMa@ClSyqX87y1<${4NI51M~+Vst^QuH-wB zP&h;qsbzxOf8dl%bc+W}gxOb8WDYzeO2ah29sR+4`#rcp+b|&Fg;Q^Ef%!;b49%^n zaY9W5My#0WY6gqZ-MW&Zjh7JoXtV(W@93987SXJ??Fj7?(%t}>x3|k+ftX7c?ullu zCDX0YZWG5D-CI<1HNc;c-CI~Vs{3k@+|BE&!Z`?3>{u#v^fnI|0yCRP`HYDn(5wR0UgF9rns8DD3YMNZ;vM$FTE;BLxo-O zIId8WAP*c94m80h8+2ugHuhr*xs3{)*Q253N|JGFteSaA@X5k>EfUo0TI_x@)29-= zUP!}VJ>_wx3TP-{XK}f24fTau(gLD^5wry&Ipmv}2og%QA`6b;g3j=TU3|jHNjHO* zaYG3&kZhJSCXj)>P0{bJiAW}c1n!Py9L+1#OiOm@p7LIfVK_KI>TXoU>hKF5Mt9a9 zc3M1Q{1IxDgGQmF1C+&iR%jfpi(R{e1d12audX!5;bSkxE`I5gi)Dq8SpbO1$lAj3 zTnKtlKa@9O$^~#2{}~v`KqM_e$Y0AsZ9^JT8!gd12N@J%N0OX|lQQOGXylPAn(#<2 z4a0jT=R%4|#5CsxCI{hgzvfn@e^Gj;9aB9)FV+ejXh)L!7ive<>>x6j_D^jjU3z+d zlPSWs40rs4of41|vApgahWpuDhxg~+=5VWhB3V1L23!sRj_1c(H6my!l)EwibuA>?NxEJC4s5KK`&3xy+Zv|C4_ zl|Uv7sNZ2aoIN7Jp;(kc+ER`{8mGYN-is2Mw;xY{XJmv##PVXxT1Bz9SeK{y@P)>K z!iWS3s-(uhZm|ARenqVqE4VYgxhN(M8~xc`bERO^_usV(cspcTjsMsudqdFEEIlGO zaARtDGS&ykqtawN8}em5J9yH;gbKuDgx8CUv>QW4A^{Mrov<-Ho*7l*s8-C@dDzzR zJBaqyGr)i$S?W3QckE1l?H@|qc5AN!1+g}&Y*B~^N*H}e0>2or;XPFPR?9I?+gSCb|=UhAs6rvF~;+=!D9YV3b$fOA+_{&QX$Dd zI%C%H(in(3-%*fm87R~z8VTZedZDMukn9vM49K$DF~TT))fq}CJLp$b|PneSt$ZQ%H!bX^x9*g z&IAIq?LrFgr>d%334cuU4*IN%JMqe(#j;F#*Zf6a{i^ilUNGjYsK@#)BBzkkE&2NK zlrJ`;KA-xV11#U5=c0O`Y1TlGV3V9*t+BjP=9O^`WmH*yrIZ|Dwz8KNQFh5xCqs`U zix2oL8Tl5ihFtg(^ao+pjC17g{cIotwI#KBq``Q1aLpltJnOELS<|3RsK66Z8~TH+IKMrnX?1*GGnRH2QU-53YwM;^-1uU|EWS))0y8tv#32=Tna_ zCPQVoSfoUAO4_dHSM7Phd2HwyR*%1u6g~2%XKuRY??`qjE?Sd6R!{VQ=Pf$^Fe4R_ zMtp7Q%!x^QwAXa=YrBmruDqTr?LvM9l{z4<*R4n$jP4T}-{!}?Q{FRmcd%va^QzLW znwuFsbU%-6)Wu?j%^haH(2Mj@n<1jp<^*O>k+)Hp4c{h5Pqt>}ADB)=4{$)?KeMcO}C~&25!2#u<>|PlKQtu zz2_Y^iz>a>D-tIE6U`(O%5e&*aot4yA+v}i%8mb`pmw}`M`NoQX021kG*|C?JxoXN zTKLKt-I(QSz^QpKXF&~zs0CSj=Ediul|4s6n&zPmkD8_&_mno_5yyP%(otfUI3qaADvvAedxbKbd0OF5~0lW0Uc6b z1Wn$42h6HRonB=+4PJ5~EDim967o<9>RM&Ei5If?gXMY&~!j~0o@s44^}K`E5ImE5xG7p_p9TEB3@$6X+_ z1pDE?Pk8t&M>-yPrMQ|WTmEG2{!aZ287GL*&& zaa1cHN?%k&*9i0PF59>}T`Q$7S!yDXD0de~^hxPaR=0a2RO8t6`}Em&d;*;)9rYJI z4>Gl%eu8*Ul-+!wzTF@4050C#Uig*Ji)gT&9BfJNw^U9UMU|Yme|$3`kMC6*7$Pt? z`5nb{#K+c}`Bv|fIvo6?Cdtz@V0@3*iTjRpFND1H3M!8XC&4_8+)jx zKO0kz|2xVEd7+MN=h-OB6a3 zN3}?XY_g|~V70iv6&?wasz}ryIy35R?URxluhj^CSvMj71D?ipQ%`fj1_S#~)As+} z&ZThpzk_dllDzDkUrk#kUeT{^{ny`BRH4i1&kqnuLNcTFpBmmM%rdqlm-S9V5wLB(ud8fc zSn9vzX}|xHr!Bw8)A6r+!iVMW)I(xf_{?t1k&%3q&rH;D*1P@^f20~_;0F|O-M-UB zpVl=s(ydkI<_eYlRs0Wxhjygye7ox3d$q&b{ITPIxYJAjgF9X1P$_(Ftt;QU{BFQ) z&$Xs?S4h&uG-8|8&0J@hRLHc9^KLLz6%C*IbxKv%L4P!6vbD6_!{w&iMrvu^CdyT@ z7GKq60bFXZEE7oWaj2Y_Xyo&q&dX7ZiZ{P2%xqf?*JdN$*KmHGKVEUx(c4c`t5h5v zdvRmS$nIp0K2L&+AFq2Y@n^5P`%iejDbs-F;fv59$u(5e52?p|g?f&=a5=S~W4IVS zw!&q8`)JPQpQUHqvxq){`Vsiaf5!sJ@-#nXyQLTG!A7ir19-&!u<*k--TwqVIoVci zI-h;m0YK-v$D`**9ag|iAz=aE`Trx`)cIf1&9Fx&b&WJlfTgH&>C+;hi@@)5=6^^x zpPj)aWq?WSh&(4(Jb#u~O)@ ze+tp0DQZL{Oy`*2)&71Vr#V`IweR~eWoiGFZtmLz{#Uw*JMq7yn=EG*djFSn^FPe# z8Y^dND<^&1|G}IFg-18NLVxOO&L3iQc72qK-w`Y({r{z#5QaPI0!+STp=t%jyGa?K zk=UjBlf2$xeNbs|>^SPB*J`WhO_pV+UDT>NS0-pedwaMC_tP(psU{b@sCM3{J4X}K zfA{0)ztrivFY2_P7JJVNWY!~->;2<{x*7}fY$GV#GqT6x%eo2uU+bpe=i%$`+1IBp z>hudt-m-s$}%*TZB z<=y-XaKhL~{O`hNSlxw>tNLq0uZI}k@GW8PDA3PU=m{}Q=LW9`PDKgI(12QIr*jxecn8ii%#JSSAr)CVTcAG)|Zu<>MU!1(|= zo!LXlkp14LbbHt0*d`mmxvYVa$R=vmk7+{7lipPnh)*(0dpG~^ zs=vy)2zcvCXB^k%D35hpdCb{{2~Wl4{Ad5G{UguUsw_j^>cB*dgVK3eDs*ja$TZUYN+8W5XhB$ZL{H#`N%-^4B0h8uQzq1?ry`6%hk~ zdPhCa!1DbA$8VcAPJ7>4!-v=WAHahej6;mjjbg9a#aM@b9nOWoWtd8tC1npz7f0w} zbsNYbcbBt@g#>`e!Jh)yiTU=r=`E<06RK(y^`hYBiOHoiWh6FrN(RdXDXgg)dYIU=Vv4s~cRwaTicaa?sh^k|FjC;C4iM;ZS#%&{HuZlL44 zg^1)PEy(5)ra4!=d3w`!RLaws95F_6&d}n2V`~Vq9E3}QOR}b%jGHDApZ^A5U$d&C#NR0^K2^Tp~u4OgP@!RV%3d6$ttw=wvD5NjjV3Kw2? zi9+4@mH2G+`;o!$S~A?cE-=R9rgbFbI;#fd%}6KiEVo$qK{%k_f#vX7XM*in(zVK$ z#UKz=eQf)-gOsfcsx11{^HT4uviZySiulOj@L*UZc~|>3Ro8nQfCv`5c+G!fh!KLL^!$vTF7|o|KoHvC zjMkHLfNSj6aItaZD2LK2i~;!#f-pf{@3`}+a~$OjLO3g;3^V2w@7xmwPM~%I1XA`m zT>mBKzV>uRlCd6dg!avjz7fuq>^=~mL}N0jzwug(vHa(^hQnluik}iLu-vhxei9`u z&Vx-o+cKL-;bVQbwVcLTL< z{gAl)0a;@P8`!OkTsD8*Mac8bzy(*10VfDct z|rrZHvO)U zO7cJ7T;7ir`ykjiDSEGx$tbb-3bn^)yY1u?pnoV7*UYb3_S(baeE6ovkSTJU>q)sp zAE*_di)QD$9$lCJqDZu`ahHw#Tu%1YL*)sd+ zgS`KohhKnT&E|C{unw$Y32MO-r1WJrc zS4!VSuoanmBqhJt0zxr1i}0n%@I}IiAS_JLY_zB%2#ldcEn4Kcjz@_%b2PDbDDK0- z*ZgUl>-du+qJO|dHgd*7%ZCR5USnqTPXoHn>y1UCU|0CXG+*D8FOMFs%Gy7-xcXA=X7NaOPnw|s;C{; z5Hr8tY?V~ZtLh|18OCK`(hDSa^I(|b8ze&S2XXHQH-9lK2(aJxx{X6tsGU6ENlh*j zw`CB76?_EksZw3RhOa3&FR)-tPRMB%e0BeZyqZr=cuyj50)_@1aMG&j1QyXfY(W7g z0a<=;4_??+AQfV#lxT%g#S$&Sdyb?UNk*w*jj(KUs+#mF0k9X2M6;;jFciR^yQVNUrI|Z3VsRV5&(Bu$83z#@UR~ONi3XqkcS%*kd zN)YhyH;72W(*HK>%R%$;m%Jf%wS?;rx|&>H`_3m0OlGquj|wQzKWch|ir^PTkNSd3 z>;3t47L>Y6vZ=kpuS|HWxE{?UE+8O5c4n2j2CG3bX)d8(N+fC%t_h>v?2~Fng*jcw zo{R;L=qFk5Z-+buHhx^OPIMh4`~R`^PC>SGUD##Wwt337ZQHhO+qP}SsL@WOAVF*kJ;lJ<6(f%(a27vfj6nD?NP5#7RVb5rs;W+3^_p_R6e-TcaCm55W!H-iPLf!4O4j3@rqd1$C`oj}QVQ^>)u5K|;! z^Ib6nq=8Zx=nkRDT6oIq*LVO_<&8mj?I@?*Z8s~L@}_G2%r;sEJJ==sePZD7>1lcH;S5HIgX67!tDzXhSo^)#bse*aCFX)1 z8iO*s2^=Lt}Os2+GVLrrf6 z-8fMUXjNY0@mEVCoM3f!B4gm`r{0NVF@F&rz>e<;WNwyHREM$}YqhwymL~0ZH=)kRgpM#8p?qAR0huU=jAVGbEHO zZc-MRqZt}2urCL-bPue|CqISxo+71{qA#>2g9SDGbyxdA8Um`OqO5?NU6Hg3LwQrF znqVr}!;7PEgBhRbfB^mHEas=a0=0?@`rVR$5BRlbze9hlr`>bH{^ukHv)w;OgpMs` zoy3tKkyp(C6me`X`ZG#BNgfZ)_#%JldKaLkJNl(L zdi;j(qVx~aE7GvB`{uRLqH2C56aD$Dh73$C%tPltb5xYax8?lpa@Q~9%X*V~!mKQ3 z1vvYdW$SRG1GH-0MqZ{8t%7M#w@K%c9`8o|yQ6}ZPKrKL_gur9ItyKe0IiQ0ebxQQ z%Gf4o$&@*oOqBXh{ydJ9_>_0~b(P{M&M-=Uo<-0fl7#W!b5!6x41y0i?#a^*h%!7v zoGwC!{+#|apITVcJinwBgxVJdi$)!(r5JoADpm}9Kf1nd_;nytJ@VeNBT-6uOPD|k zfHPn-rEA4~aRW&{rVW2xPnN7|#I4n)+QC1b7M14aw{~1HX3q^I*gD^gpUOrPH;D_z zAQ#=*?pe%EX0iupOrDF&+olL)+fHy89y?8H>CXz!E!Hw_1P#h>+Gz|tQj}Hxe zFys}k=;x-sYg=lB#!r&t@&aW1aWlNO$xAi3tK!L z%fAe9i_2XJK3Gl27k6PHdTgG&yYCP_cD}=B~|_h32nr=f9@FF}!aV{Kss9N~HD@ zP1XGV$x)orGW5HJ%Ws}GbD-{4_Siv#kI17rA2V&bj;R;Q=Mk&0t=;sH(X-s`m+9sTj0zT7k_X23zA2&91NpYJ9TLW@IrV9|rCWe+M9vYsFCh73&a25LCR7d=oS8kY zGgKHo#2FAHjaHN$3FJ}ch(UfzJ%e;u6|yB63^gb;=J{{GQ8y#@QCxx?J%19|5=$#R zv_MqeS_4NR^$78iDd!rGJ06W^&)BnS7z?TCIfW%G2AQ? z`Nj%R!u=wF9n8*v2t0G1UYXqRUB@U+p*g z^Xp>HVeMwSQ)}1`j)|m`pHmol5v-fUKsqsGHi-P9@_S??c~yB4#5Z7ugJQ_gO83MW zZl8QyKT+OmVa;)W;Ml8V$e>%zjR;*46{KX(YuxzR!VivGe-mIDHunChW+hMQX9%zDD3Oa zD5An=@nhj(mMyk5752RLK>D(}@HpfByIX|7KxI^O1CFvlOJ^s%ePURWE)D*bL|^hv zQPiu;t{89%+*Nlwnz%YkG{D;^jF^_aK4xTF*3f`(pVmZ~2LUkNNlmwi)S-aw;(^^S z>vy;o-!>S6NfbKXHlud=XSvM!efQs=JynrimrR`Zf~G1wJY zKQ5ZnF&+K9{z~V%?Otf(Y`YUC>)Q2YUt0Q%9?Q=l1K#~zPo*gzFmPuZ=sbD{s)PeA zX4u_uyLX=tku2Dryf41CZl(~R*Ju$Vh8f;glj1S%1Z{jT5 z!uM|YxUh#1OoiL;?odFS}AtbFvYMfoU?q?dAkxzLz z`SBgOgKZ9?G=w?oBqkELiIgsgV4-kqP#i55cri%U%Cq+=cSQi|XMTlp_AehZQl_Xh zDQ6}tCrPqQ%l}B<*tZVhf_v}r_3vfcea*$Vp(<-848}IhBisM?v#NhPFQTS21vg`t z|66wIs%{KFLoMkE?2FqHVHstKU1daL++ZbvNSPTUg zcs)6bXnEW7!KR*+`lz5Zt%=goC&88*EZ6$zZs7yinvwS0Oj_P7$u%e@*y*3S9tSc0$qwK$6UB)rx8-IM8Et#|5q zAL|>Jl_gTAQO8p$!O?w{n8h$*yL0jCYuUN8iEQcG&8FVq&w_|Ws{8NAXanWeFXwv} z1t@)7tV{H_>~Itov4{bC`*rB-yu7sdTh_5#*3I$ztvBvxFTty%CB-#Sof-jnCza*# zGMpclnUUqesC$g?eL@Vuho9=o@OE#(g#07xX#tsA7NG736^r$UMlnaVYnr;p1_GY) zWtVctITkd@-GmJg2uS0+DLVqV4b?5I(&9X$25MN?5~`+mO{($IvLwXM!a|qVG^Qwh zV@SG#kWiS}9&r#(9y?eoD6fzj9O9Ng)kT?7V1Mo#*V}{K8*>8_^gD!wmtf zt)mS0B<*#gi{AY;c}YFdzDfS(fAC@TOyeh8%mUYQ=j_y?4!7qsGFDznt;9zjafRu$ zt*-^o_k^+cl0ZSnfcM&Kzep~N&3~QV4EtNFt2{-@nORLv4#JJzc}PKYx68Zt+pV2q z$qg>SVLLpQjt%?$hlW!Dg0LwHDdrgN{6Khvi+x$U{4Y>}(<4))9#B<501PJhrd))j z1WRwOLyx)zBSvN)nt$}!{cHZLQWGn3ic+`EG0y)H*-gp~*5lvE6Y zg!A>6^e@u``ckP+&-kMfSjKBYp3eHrVY)Y!Xvk^|>}?V|ix9-kZpZWIoqPIEUjCwc zIxWQ+v+W;5uS@bmIZo}%kkmJHz}S`ie3hEo{Kd1zXFISaS;2TVmWL8KKF}P|IScA# zoUn7|^7x2FsL}`tQic@e9-<^E2}*0c^C5@aQ0MCIQc{63L}x7cC5u0IA_WxLit)_A zUXZppzep-cDA(%|MN}nB?{)liI5cOhLFc_GEq4znGmd9%6ZpT+6JEVa(uF(cSE;qn zr|Gp|IihvV(3~;4rVmdpSfdMOeQoSxOkH>T;+6S!w6g$S?tx$7Npb_cTn)RzIfOLU zFbXw^;nM2zr)Y-C=ZuLE376VM>Q-sZZ8D_*0}zeZur8wIiOzAHLcrr4D&W9G`7^C| z^TU`>0`&&5NgzZPL?LKc0*QF@ z``LYNN=T`i1YB4tkvVn~n>y}$gF=`v%rNeu0()L^yEQM#{bvu}y#W#<3DDL}(V0_( zIzz?`&6t?Wdy%aD%5dzczdd*oYpw7#g_u@4Eyp!6gdg&w>(jmen|MOg*=DYq14L_g4n9 z8PVgSwfwv4;G3ool7t)uR+Wb9+Yw7Vu$?C68*N{j5*VY0x62=EW)e6 z;|j@b_lH>AA>1Z*K`PZFom*d_v&6k1G?WdE7b5<{AlZeSXf~s`oaf5M-6T=!fO@Em zx+J#0jID7Sgv^{Nkku$9rO9BvEi!vv+`ss@R34N^B>E;#^-!vM1O|s{X+HIFfERWN zai;OVYoxXWWWm4Zs;8FpfKywzlRbov&^8-FyEJ#Ecnx2(h1HDtE0Z?ah~_S=h>j*y z07BBUBuhw6JlKDNdqSya)HnH`p&5S3l)U^bMP!3GvN9jSVTL?gwkX{= z!1NM1qP45>B+y?)_NEnY=*4=d6RJxIIoI* z?iWQ^UR+!{Hq0jn=)>>@`}Mr95%PZU|I4ohzW~LI@Bje*OR4|=^Xmqc|8IURDlEz% zD8TTWU$Zi@{ECwWg@0!P^fUr&fIC;}?Q#|zxHB9%#K1L$z5GgkKxFtdjBZ=>70) zHR;}*mCMtE88>HHY&K4IQ*ZNd_af=N3JAKY5Qzaf(}N0j(S!O*TL%hmBIk&n;PROPXq*JrcG>OyX@B@4gXn-6RD!gsnYL-um9w^irS ziz_2;Wb<-odAp0Fz2(Hk>!E;GXYLx~a{8)574Tmegd{yEIy)@lX0NwM0f2*3H}nZ>{&$0$H{kD~i@9Rk zRnl?EzDKbV_KejpcIfit3TL&NJ@%=BBPWmU`+I8_oSQz@C$G3As580trR)VItiR(a zdo|ULZ-b3YhYRn}>fcGzd)kud%8Z?Q z%G~U4<_q4X?F&R5X7`Ia>@RrOLcYE7EIaGRij3@oVBdD>vOrZQ?jGSmO|CLu0Z*NY zaR{4_%HzDH3Wb7@fBkytr?YpLR4tw6i`P@6W)^-G8PT#?QrrpOZ$4`ODcC|GE^85$ki=CEmlxNWY>73cazACF%$ zJaTo1&&0VdMduz)j8bJyJu;rO=kK&ynq0U!PyIs0t~=3-5oJ+!q)8oKPQ08pd^D+3 zwY>U^1tGcK?p`~8)6C4*2W7Yi%P4d^UXaRqUatH+A1@9L9CLHMmY1Ksx^(@tHc_~) z2IV-HJgM;5$Tk(a_5x1lQKd0;>2=Ke8B2JmpmHs!9u~9&6uwHyceL}(vj1KBA;hKy zWV`qfm}v!gyO(wzw5iC^#@juk2}O%ZVdBni+#h%OE`ITLnY+VZ3~!`~HN}}l!NDO~ zzCqh~+)`#cl_4fWC?9_h16T-xX!v#y6fA9*2?%PBc zCBdIxXJwyIz|?d^A5I@zy%xYror6V}ofetQ;T67O?kElk2gH1r+PBdDxJRhA6E87l?PL*YdFp{uX0QVuAF5>N1K?IL?OZ_kEk%$ zZm`vAI+KQXHW7}LdRT=Tc$oy5R-$0koHCl_O3kt#SRa=h)=FPj{Zn_-ankI?j-k7Z zDOmdZ8*3YFfOXC&5$M)_^%@kKh0L@^VIG!<5zjCUGiDrDQwCRg?{z7DsY##D!M=oX zO6F{7-p;`THEdoc*^!t~Fe0WmP8duS%u|TtYY+-MkBH=@;pi2Pzs`)mT21lf{(Eie zv2#x)wFsMO`&sk?PZ*J~==)RbTYOWnFcbQl;kHTB=cthEkP)UQa;xWR;XU$i1Iu*Y zGG6QI%e->m^5V-_=@XuE1+sern@N@iCrPJi81Hxud+TCeM%Qz0#^f_TnS&IRlFK%9 zW^6&F)q=fX0eXd`K>6qeeLNzTHuHq8CINLgbN;?{B%PXG-2wH)uc}fFp{cqDVoYDr z%Y$O{tWiI5#Ni|eHU$bbDmX)<6lum_&aXxZ+s=9d)VJ$r9qocx_Tpb15!wc8tRt4> zRgCWD2rGwoR~c+r8-EFSpdLnK2gC!w<#gDsEDA;wJXmi47^olPxUjbl`LsGyr16pu zk@||y@O-IO2IjdNPi?=o2=?~I!tC-F;TmFbOXFWhZZ?T0;M&}0EoeqV@B(st&z7f) z+{v{iZ~`kp0rPe`Ep_iB*l)7koWnvzdUdB2neN9G>wIW%H$4a+RHe&Xah&wNacH|L z>jlUDH3(22Rd;6ThtceNT_P@%rwi#xqDZjzPf~irRJ9kVo6EU6D(=xU5S^PL(cJDM_5cRs}3KaYrql!*#ppe%LtkN3EclODeMmki>3pyEI&nbKl24l{pWdvEK zzjM<2^hdvXRt!Ij^*-u6crh~O&Bbxur`k`J>W*^{gx?faPp96>q93(k)lR1d$PA#r z`6UTM!s|LuN}=gzp|7aKJcYMg2V`Z?b?$eo1E!NW93E({8ZP|)2o1;WYW0^xHWa51(Bh}a(DI%>4vkerdcVJt;9 z1na>L&uD59Uqrh_k`+Z*lnsxlFBv?-(V7Z+h$}oHmrT;Ia~#P5gtu)rW@rr^Cn8tS zmqdOXIzzhTuO8HkbrEN}@Y2VH+sCCWpdyYjm@&nRSFuoE(iqX!Xs2{5D2Ecs8IW;I z$aRaSIw9PqFvPP({?vJflRDXNP(P=hKmuVNW)PGY2<1QHdJ>wnycaG4v=3?~hew45oZ!O^ZuYR8*aY?}#6=qC195=bb|c2S zS|q@8E}-uP?bp^2XLH_%MiU~*plY15tcRyG-rUa(57Xt88v^!kw$ijG!mDkRvMr9b z71W4uSI=)78b(BCvv&~YCK!N|20?^}mNkfRTpuUq#ylX5+6lBFPe=j0Zmp#j#@_;& zlFP1xvNbw(oh+Oq6-Q-3fCr%=Tz*zHSken|=TB{h(A5f`lL`lDkEBN4BZSgbNq1G& zMSp*h2A26Zn#!(#b>3Q*!0X--;qL0%kXp;SqQV<-5 z-L&U9H4)%`cJVq}Znw6`rVfBH>CA2%CAd{oa;{rUQ2O$`U?&mRCnE#;K4OXZ11a_LlT ztp~}?Yj?RW;CnbO9`kTFf*pf69z+suf8~6fe5+KJgwsVIN*aGOK&K3u{9#u^Zr}LxX zU9ru%#O6#3VC#_#Zlw zGWcU8&d&~k}?XC5+8A467tzw2G7zc@0`W-Q4HFR9Fx46y30u#5Wki*EPUiBWGfP@ zRv<#=l~%WGHg4G788gZS6_&$vV7SXMVhc;+SK?HYRYjxP8#iXCjEEJI+cNf)EkQ&p zlCu=P0+Gp;YFtRYs>u^X29ih0sQDC<-$*Omp@(TuZl}`Q$5$-k(tAD_cl<>YCJcch zO0I5(QnI<`J_C1WJkFp|sZdr(?Nn-w@a2cVRV0Sc-XQkdt_3TQM>#-*fWU@@;>(8! z_IE~Lf(4gW=~qC5u!`+KXe4h0K}dQ_8LImns^fwT?^F$Zdo>`z@{ZV{1~r2PHqHU1 zhs9bnW%q`@X=f=Af5Kz{3Zn;#;3AYiXO*|urnJxpDaMS{HD{)0bLlbGL_#qqi9-M%YJ4F4o;5%SUwBD(=zQQ z=3odCj>sR)H3j-?!2~3Ufs*G~&U=g^%Gvz_n1ZdYivf75T=HJ)z)3lp+6sgLXyTpOb^Bo1P&|TI;)f?j%Xi;n);D=QLeWCzpfByX<O5ii>O^q?ML%G)lGq> zh)GQ{6%>S&@ZFV4h(h{A6Xk5ps!HXpELKGhRs~?Uq(8Vs5nPg}N1tkU&ZSXGf)i;f z?P+=D@2S!+m(ybzo}~N#b%-ria^FdzT9ukP+Qc!EueEqf-eB5L=Cg>{NKQ8@P_Z15wjBqJ12 z-slfP)Z`~n!wJt%+sc#Kzr^X%I8B5R2@K!Ofk9`AflIESV+n}Yqc0r}%x(dV{4Qx?Tq68%@ATQ%OXBg{tgoK`1`}~k zuHVOvuQUZi1VbO*kG1AB9X|FmHGh@2(+%b7wBYY-)%-f#CS)2p3_GjvfRz`OmF0t^CzCsje+h-gQsof~JYNWyjAHIu_1}};q*V{^;fe+v1 zX0wtszG+rvoVVQO9E>*u_CeNNztUT9d7TQX>DL~>STi`8<^r(C_~oN$-MH103y6tt zu@y)guiZ7bfh@CXQJETX$;q&-Q;bO#q;PnUPLBL70t5A>dzcF^-lmSz ztz_82dWgQyZ*M7kuORx@t=ACRr;XIqOpPGUDamRYscBOj_%Y}l50r@-h|kbmpCP?8 z)$-zWUQxO$h0WV#C(P6A$>7Ez!FFKsWG3EJzn~6WZ7B`m(TwPE_LY19#U%tR)5gm9 zPTUZ;3T6zI_RW3l&muErex1OTwqUq9=&$3;EfxD+ruwrzyutUSM&xV#1ngf!8%0o! zIDO}Abx|E zay)~#+h*VW4&2XSY&Ge6MC){|=Mm=IN2}_5^Z$u9Se?^ws zo9Ck=w%0q&U_4WL$CB*BOTXCO(m}ZQmQ;KE%I^Cc_XbFh7tP)7DUMA)j?o?M!7eCV30ZM4$h<%r&D`CNpo zZg-PZ${!lg`;m}O@p6aM*=vtZBp6-=t>o%ru`A5&zd+FzlRyC-<$!C?=gnNW@hgiL)h6Jir?Mo5=L)rk>+5nd|mcm@_13S~drL}r@8fg=yJ>EqL%2YD=7NOSX z79^M(a>N)0=~qyN%i$KRgXk)#ny*acCRj2mQK_LgeKUFJYyTu!tZ~;psAdMu6#2h93^w+t zm-lAvp(*2dtpYIJJZZq>G_f_#!B+s=?Dl##ezhgKy_@F&jhGF0oqyjN2fh$}9iV-U zXO`&g2Y42TW2mp*XLv({lcrKZxqy30zXZssXh#WNOE~jNl$}vQk0#(Kq93vczl{e! zN#aEZr-%J(4x%eeYiqQidEUJqJRb`>27O(ot*`UnMyaStkIDq4g8b>vmd>-7K(s8P zk|O*#TjkaEY2B^}qPHI=LSH#bHL;SH$yV*J2qOpaA zk_z~3&oMW5qNN}a)KupAko@eR(kk{yF-fY7$4V%IrmDHmbOi%$%4j$7XQoP^7hILT z+Hx3}vXk<@7X!uFxy^{WGfg=~mNw;t8Y?BA_GwOsDwfrYDH_f#BYw`)M+38NJAfC) z%z{TyAZK5WrM#?|leBH~o#t}l)y_$qIjCJ7g4nL%ajh=9p)=VQNi5wIdhJx|ugos^ z*s)Wiyjk!=x~mU9@aJ-G10cQ6b`@#QGq@W9+G`yeMc)mqAA7$>jqJ9LZ#td!?ozXD zw`1_@y;`*yw&uUP7pDo71SSm1FoX2r0@f2IGG8FgL^~F!u=M1Gq!Y7?Ie1OM-2G&w zn@nCB#H1kj+@^^3ec0pndb}avm6kcN^A$j%c%Vo+Ebb6!jt1$BU}#|FTG-REUpxaj z5N;a-Ij#>#qLWCzsYrjt6nX^E3yl$Fq9Bcxh~qf>porH2snIk1xqLFNLL(Xpy@N2IXlagIzmS6fTJsT+@ z-{~oD`KzOmLq=z=p;{WMr3lFxPzl>9=k|?T}F9C+9R#R6mrx(8rEhH)ER)8odW}e zq!z#{^x*z9RZ4;Y^gh7fY=HxST2NUa05*9mSc-&HE_hB%7u=8If1^i<*{VO7$uJEr zyZtMOECNfytE+mLhW#nQFv9$b5PosO3vq-uZL`# zF()z!EDt0Ukipbx0%l%2A``yfo!~a_{UlEaXUl{nWTOPSB z`%#5=lP>MBgG%&qo`pfNRWtI8FSEeTSdo9y*L6Mn#amL*#h>OJc^7UsB;b8^gSO|J z@4s{`qXaOe9}58BzYOgEKONh8`v1cE*w{JP1Q_TUXy_Rk*=d-6X?-+;i~`ZLJ zjG`PuqAUU&|93iO<+RzB_zUav(;`S9lYaryOFk&i-l*D}S|yJ)O64g|-v@Be|{1dqxb}Tu+s4IkAtW>YGnu z98`6qYYR(GTb9YQiSN}FwtjV0rItOiQ7`_E+N^qMX1`iPWb{+67QN-;X&HsQ-WS@L z(f8FtU#*$Ut4ZcOnET4MuXn3#_Hn!WK@Rwtwe?Q#Ksqk&PRfT(rhqsRu3hI{({~UT z2C5&*U)u{y28)ZX>|MhhBzjgS^kQhGhR@#rSlbT2tnJ<7rnqs4Q<^$;?*h5+&E!nr z=}(*Gxh$_atY6f2Y?+@_-J@xE(9d_=_i<|3ui;|*?z>g%wO++1i|yKCmu`k{>AJIS zyH3<>zzQC%E;Kb?>@v6N7O|+X3v)lmCzi{HHf*~5=UwU(cTO2+6;HmdU#+m!M-A2i z`>F^{chk33feze-1@Ex=H(`j!8N(U+|pzYPJ z+6x1P+Y7=hFIK!FY?VQ8)(;-LyFX|4Hg*(bB8hTzopDi}3!y)i6XS-^nsuF)yWRh@ z8E#@XPn*7OZ8cqDYa7A*azq78p<4w<2jVm4Petw0-SqSiYbq}H@(-k(G?-y|zfN%N zF1&vcy-c3j&qn1s4 z>!4}B)6E3$W{`1S#_}fW%~sxbQP58Ib`buS44%C7@@9FrpOmnzm0poY){pg-=dAfn zA(S|L2hiV_rsvX{3tBUG@%fzGfzocw;4m+uoThN3L9Vy@VPe!_2HEkwiw)Q?Nsawd zora%ZUjEL`Z4i6@+&d@JRlAtA*wJ$v02sJhGR_}-zD7MGzCXWoVDIFaav?sbGed@sAMqz-02RR8PmCNgC3mFk~*%l5Ia;@|mpgB@I~4aY0MP zStgHAs){!DCDm6%rZdPKG&$bDsOpXn!+fs0P*PYuu74xOpN*KyUgYyF&-FXH{@PCo0m9h8jC_QRYKIXVQ=OAL7u@W?SHX7Wgf4QgD>*d)JNnQ zC}GR7<%>E%up3-JfD40ZGbJ5kj|v(}+k&>Q+hzhDWOLAc)oR1DH6OS?d3^q^>D}$B^TmdQZ-v>Yhn95%TpC`lYFT z5uMsN8v2gIxXeiqXsGgoVooWoG<&#WL>VjehE!qDpuihdlAvH(J?$R(;yjleR0=0M zoUWaRoryGDPf%?HsFMScX-S;acEw6f5-sBr8333b^~GE&at8bZg@h~BZ$vjJL7Upf zlqz1nwBDQ3{=VPF9j|gE7*6X1Jj{P*+0X4^@XW0e7LKDcv4kSt)8$*7_)}7Z@u5)RBqMPr7HOjX6cGthbu>?H zlLexf*#c2G7EUmh4NTQJUmR1s1;Hk20LqLK`r-ruD4dpa`3!Z6PBg5yglIK{(0#btBkl*b;lxpuR%{*Ar+D#nGY%6)p z1}MR0Z_rMh^i_<~H{KFbzDl2f(_P6V6Pc48E1nm_tC)up)8{Tl*ciLn6LeS6xAxAqa z`c^h%e2|F_#mCP#ui%al821&&v9IU+8jM2!#yt!xj~5cNdj=1T|3hvFJ0zVPDoq{*)x=*Yk2fd6qCNdh zY#PSJ@|l-WZWGg}>BEfOq#P zXkGGm3lN5Vxr{4i+joPgUj5&wLu5k21_r1F5{lGH1E?PM0F7j5hJT*V>Q-lb5Hv?y z{9vT!^@D*9?-g$XF?xuXFv^U=-+e5+VoN4va+5DqV}SwH5o^1SvzGvP|6Q#HX7iXg z=PIRNrg^_9>}I`J-V0us?&+QdyblL0(DD4FjVOXEurP1@5=uWrDbUE}2y$5gAvvtD!~yxilw}BI z(O8o(1i0P@**rW~fcZQnvLzsSe{3JseYy9ulO-BSfrJZKV3o)OA-}RjKUlKNWUx#T zef?Mt3Hl;xs7r{!Efvfsw>=U?%}EW!nd|im3_E#Rxd~V-aHOYDYnnwCMEJA`Yofg+!=9O0pWwVsKoX9B zd8)cuALdl_UcvFyej!I~sxZ*`ED=UE&pv*Hq01F|G@}6p7sYrB<81;W3oX7O*vNcD zGoM45>a$`0^3Tx|dArwjEIyoh&z&Sb>8Y|j}N?R8;lT?pc_MA#spysF)CXLs=TbyIE zIKUL5$nCsigk%{Xekp;|)M0s7RB>RfJUKMbMt>i5d%rSb3}kD%q8d*753DA0ZvK@2 zx5CQ_UZN3p2a*0}0})oytSFD|X- zd!F)qZh$R-jtkEKJQwnw62a;x4@z<~@(z5=<}@L)A1FC>97S6r2gpp^h)_W^ zAZ$gxEE1b7!8!AcZ^wG}AV;;gPnaT%9 zkMzkHvG&Z)kM&w9E%v0&x-USl1w+>INekc~wA-e867xv1uI7%~%nKcsinY%JQ{I{L zF^zY0iOfhfK~IPfn(yC|y4`B+VZH}ejc(@R%klE3+m8Dr7ng-$0bLN;oBYvq7p-|o z{dcgRp4H0D+Om})P~A$;Pn()oC|A#Wtee(>2j6Nf7?*~g`$z58a>MMYOb7|W-}g5w z&C@);tS`1F$IE-Q=G|M4aqCyAQbNzI9LWw=6!;hctQ z11ybp6kUmm0|B(MVx+@?Q?9|&8Z_P6I(x*FPa;YvRj()mgAQ&TbGIBzTt8#^;l6Hh z6eyA55iv+j5+t;B7?zp&U7iF1F7~45Zs>^4__zKNw2te?;2|@wlDqOz$+K@HE;v$d z;PN8WgM*$47&)E*sEbai@AmjMBlW%!T$Km9wZVFKLe$Y9WqYFpf^zrhfI`4AOj|{S z3+HgG41FCdLqZOQET{Ty~c8v-iTQVCrL* zc)B}G&2U>x-GQyv?v%X_5$T?wc{Rd!ye0SAbZ@!rIjmYue@=nx-Pd?zPQ{T}C13WL zDZRhd&_fn0H?d~yI?>*2fI>k_^)DmfNl39h146ra4wZky6vQ5wU{*;_2thM}tGhIL z{-D^H<|<31LJkeR{JH9gXX57{optYUZ~CcA+{+5Zj5{PZ@J%IBAb|2QRSb!2;%v;F zRR~ah=$wHZ39B-Yg^UD8_WqeCqbC|Jt)Pm`wIO4qeT`=|V;!#>9k!2H*9!t;u_PUa zA#3@)P*9Eh8zpz+ zO5&H-Fl6l16Z1^;o3P|&*W~;cdLy1*^b6ee*&dNW*qC18*YgDA3Wf1@K4 zOjJzLaqb{ZzL|^+JpzhZ$;TI&B|nDn@k@O8qz6Zz}yJ?w?_*$Q`i9<^~92 z85ja3FNt%z%TY>ZK*pFr`Uk*Ngfb)#yLrmNQ8_(D7ZjOsr{^Y+;%Id7m$;M`yc?T< zfy@9D$2L;$GotAKp*tT)IQ%Uw;B%Ryu21wL$X=ddip&PO>-GR@ zrzb5krDo5GB{Ic>Uyor5d$A+Vo}G_lejLEOBbx1cJ2{x<24@)%|H`KWqeU{nv^M`l zo)1aMx5)foe4S%(B~b&WV>>stZQJ(5HYc`i+qRuaCbrFqHL>kvGv9t&yIZxjf4c6E z+ugU$?W*p6pL5=4j5M*lo+yI#v<>UYi6xtLo^Pqv)t-fSu0o$zfQv*DRTQ3YdOlpV zD@FmOI-XVyd9Y8#3S?2tZQ>@3Zp5!7WVs1^@F|If*5rgwhIl=J)K?b{=ThV-DoFot z$&bLG=8nBk*l-@l;f9854EbrO09&of6Rc;f+q^*5&|wT|yL=6p+d@Sij>n*m!>uuW z&KFn;KZjG<`=tk8vtTp$q~c6$M*5!>esN-?6}JUpp2s$1q5wy&rLSNsd%~$gl)Xyy z@;#!{mnd5fbh=tFqfePsLFd14(Su?0sJL9lLjbPSY@#9nNY!{ffVxW7lakp6Vv0%m-*6sE17#`FeN9 zzi<-MK=iDl3C-QShj##&RfTCrq0yAXS@C(I`f{+q{xuP6eEx|Q5CauTi!lH zrP%Bn<}s{@`;w_@NTQ2H2~wg!9a%u2)`)7hFeB|!=#IMj;R?xobZ!@m>wV|*!_ zKJt>;{%vMao2T>25M_w0|2v9B$FFeCuqUSDBH9vWMd@6KQ#S8u|8Iw9AxDU2g$1Zp zjg8V#N6g3y|K|b>F(&r!aG6Pz zPKb-`+Xo}gCQipCEXqVD$|5St!6GKc$SBVKe=ooY(NjMVDya0Q?%7r2*{Uz&p{;o` zG%ExpHbgd#H1N-7xVY}I!v`vsL{7HY{GO(^ZYTpJxpC^stZ?|^`95Ni$$&n>5O?$< z=HTtfTl-l){iPh8sZPai#(V9ZS4PWBZ8%RoA)D=(8p#STmgigP)o}{Rn^Yr`@)|`AL%;NoIMkDvt8Bx-jvDq;_SBF@f|VG zE$6N*9g8q+ao$(AWh>m3{`qrXtCM`BY;Ac;CeJp8G3Gd@lGd}Ls?4T;DCQ-|MVG~J zrZ5%uc$2graAEG^;h?lQ!tjx_Z~0kLuAde~{>D3FZoEO={rODB&pE+xGtf{L`)BUN zls^YQ2kqq`p}(k5x2~O{iQi9`c3fa$RqV$Ux?D~g3okWq@6zGrPfL*{9louhVlDZR ze+l!}-zdZ}usm%)%lgjX=s;uZtZR*H zCj7lyxZK^VZr=5)bo{jz*t+8LbGuV~skw4)4W~2f;``=fevFk}1Sy}XDHMb*9}*fu z-<1EaKkz)acUf0?p-*V&=&;!WoA>#GMQ`!N`$sIgGgsEgtXIKPhn3|LFF{KXM479e z{7L`G;lyfnxdO#Y+v}p8rp`y8NC!Iit37)~)d9Gc>k|^g^*U}&t=8T=$JR&If_hro zMCevWP1GJ=`--0(ZX|4a^w$>7`V>1{_&Z~g3gFIbG zkvE3dE`~S^0*2QJc#`jo*>m;8;>WCxU=UKN!+S8rZ9`U$f~AOnnQzBe=kA*$pItDn zfbo_=ciDOciJ~q=^xYifsdJNqaM6tCH}C28*=K4lLf-sx<{wixcHywl&v!C<9>`Z- z0GjIY;aNS8)2E-QI-!w0da=$o7B6VvZ^ge$8NT0J56)n{$%rLBGxxP>D=0loRSlY` zyla1DJ=5MGlBqENgLbt|0p_XQlRR&>L{e{20xkQ@O2NPD82OXPc$>PEIBu;&MHbTH zUa2(6e}XdBI0EA|RoRxyW!Ln^Vhyt7P~(L{!!|Q7CR;k> zNvBF?P)@hpiZXMCv&dQ@u$Cxo#B8=kZ=SVuofhhXt+HAxm%kC7y-LNF{}Q{>!WJ|u zh*m)|j0pM!yj%C?UIi}$)|_PT)(fxGlfRpVke zFu}GG0*^iHLvVQ6ZIaHJu^)|DMHW35aHH<9cBtgh^v?TM-?{vPk%|lHrssR#hMNyf zfa?(EJ8|feEr6lVM=c88*B)WI#$$cn&w*)7AQg=%%DJz3f9;t~YndQw+Y+)Jlpcsx z?P)Goy$D`CSz+8?pKR{WVJ6*}f-%f6dOS zt_LR}=0^DU=YlVj#w?xv0l(X0{{W27$A|!zRoK@D2fOz>-sQwybRGLASQXDYM6BoH zPlBd+`!Sc(pj(lh=pE3$W@x0S;)Hs1%*3=|{L2w0*tZODNIWH&@qk&S8M<(KAdgd4 z_=7P*xTbJ-@O*LLc~)XlTBa#f8dF@DOLL101UAR=xtKdfv*ofwGW(;lfwaOPx|wp%~PQ;!L@53vvp^}6mylb$u`j5!@CvSDxJ`mwFbzD6Eq+{o;AUqu*`C>`A6aq zJIjwD7%JbzWHf*_eNc;4xu2kowyn3$oDcu{Pz#EiU%$fYxo4u>Ou-9Qd2ZlNdrEN>dD6Pn1hW z8|shX7y`#xv72gIF+*bep)v#p!mZUe2jfdBPvTOjf`?==#<8(lLU3i=`grwTFfRcikt{}TuB2Gi?X z$GlJ4FFFi|B0!18=59s*XPi}1F0pZOKELL-Q3HW63g9QQ6;82m0>mi%n(b`2&Ftr{ zq91k36$S7eXjC%u$}O19an@Q?xKKo$6o&DdVz05Z#6-iD#fSg4qWbt zD$=M1m{c^;Ryx>?1tlB{GFTq+`~q^U6`nX~pivp2#ikwZ;#L0Va`6Nelom&RP_}P& zAP{Fa>XP+puK}h5Odt;pl&w_t70cCCyp$cBdVJxFVzwnb4iRQHK&`{Sk{>o7fDfFqJCiGZA1Yz}jwp-x+>|v2gt!q#>NJTye4q3*~RUtx*C} zcxFK_VoHcj6dnQ_ZhhR%EbyBf_@inR%1hvVzJi4)7+&{yFeC}F0w`%C%Aaz?CBZ`~ z=o0>22~Y>nwbz*%Uf1r}?W;3RTFhCg(*gQqGHPfd$p}J86PB`xZqcrt7dho{Ux-jg&8L}R+XS#4ot-W7t5|1APWKR&dw`d>#lqUQ zcSR7x&jjd&0bsdabuthxWBIM_ zLOj8vM4~G(fq25s1aZ(|NDt-n`^2JN#_+p1#bhOfxu8L8D#v9=i(pV033x|YqC}{+ zZLeWbY}tR$dlLy($jo~gJHUvG2w-qLHv~ywgF#GSBqOSloip%X!y+|kNyEy#4k=s( zjm|;fF)Z2y_oc}W%Pl0tu4sPk8(nz~ZppiZVop{}kIrANW~}zD(m?SdilGZS2+qct z{23KV0H5*9m|=_jE1Eptl?8b=YAGSF%seb42I;0^uJb???rY`AExsmZVQ`x0F9GI* z8H%LynmrULK@H$eN|Y@1qh4b zwD}kL)0$ZFt2aFSXpBeO)~6T|47E%a6w|7x7z_+th>AfiWgWC*JqlASuBSL}#i?608GD{V{20FvNM>;Y;dOv?{Kjfg!z>W4q#9Vq= zOoVn>q#}k)7{+#v*ZxUk8}jqf1pcBkc|d5;pQ8fkktg z^`(pn)wclqEf1B`q=kUU&Xmf^CngX;0Fa82Oy@=Tz>+CvFcsbz;YyYrI1QpN6iLFc zfh7U~Hab3qYYr;(j`3=3Re77h%^>&ddx{`u$tuj~+#OISZsj;M8kKVKLIh!v z&9B@w_KF#}Cqujd#>58T@DM1lYY_Dfg;`NF*#)0$UhmxzRh0vvZ{PI zK>%3dMV_Q`l_}?Hw#HBt)Ut@QaD%qR3=(wQhHDul*ai@%tXv>2 zK~97Ajgz%EFW-e@8cI9{^uyr=g>e{Vt32&{77#mKQESdB{TabD1zPi5yqwnK@YPBb5m0Y9+BOwlx(D zlbCgnzjtj^qd6e@pPG=&Jr>rcIz`{?pT?cO3yhlir5IU6bxuabU&2^WlV%}o_j3^3 z1)~&%m&DyuiM(Xn8euMqDE7^fe0@L9p6+!Gl#Q=maqK7qr=nCv&fzW(2Z3KuO;Gf)0s~<@4h4<@ukcqzNE-zpqT)&M399p$^)bQ5YT8c*8l&Sj z#m7w;EoZZ%h0G#ulHoSl<23aKCXpO=#S3Xqzl2(S%Z58efbo`=Vp8{rXe3x30%;Xi zzCt!XnvdE}Ty5X~=-N&1k4mo9VDd#H_4!N^yHN>O=7r#Ek(9CZJ4O>&Twk&?PCl9ZbU&AQXE(HkHUyuT0&@NIz)W2)r>%7zCB+tIKUAFI9h-GF7B5ID9jfFpif!5oX|YzxP`o zeqBH>7ynFE`-_ddgh)#RaGv#5fTuBgCjH3Jv&+ByAx7KHKWU%p<27NP^Y9|c8N~oAIG3wJuLiE;#d-OGtUO~ z(QDTSgE-t$XB^#5yJufU#gpDSoRW1Ee5`3^Afa?`pv-NiTr7J? zW&>j?2fd~J!r`C|MgPaMxDFXXc)|9lc1nwcJK;GyHY%C*JWFJII@fKTH9{;~ekuvr z>LP@dmUg&yFOylDp(*&>k1)-KUafe)fx+hmjd}qyE{ob7t9}p6(OG3|(Bt+C*f^Z< zI)mKUA2=$~O;?cO;DqcV6}&}!hB|ra(-d5pxLo86$X+{PpICckj~O?1+rRF}eNoOK z>$)-1;5Ur~&QqgIwCHM+pYJNO+3XxTCd71PZ{ti`s@HcKHXY=q1+=z)_cuWXABg`k zcIkZr#l7IL>*{&aJ(@}>cgVQ_cKa>weO*wS^prNYb()phnBSOrzpg2E2vP;w{l?va z$iL&V^}glM{^;MKL(%0XOL8?aGt~BTz-A!_Z799;IZjOOcv$lxZf{}TiVKHAm5;`X z^|YI1maAhR@}^fQc+Hv*Qj2BhN9#gGC(@Fi2%uJ3y8pL;yrB@f}9VxVd^^np9;90zgmOCEjtAxsWd&{5je7Y{xc2KI7KJC!3nqXV)NL9J3!VJwz zTZguc3lAD4ayjE2ywSZ+z2;N=n$;d0n(ca5=D9o7ccXS+{Drl>-7>l4PuulpZmX@6 zk9t)OYr||(-;~S02DM*$-q!qqezvA43lz1sAkFG6H|V89=Y<*ZAy*G&&!{~}!J%{R8Q>1z49ZH z=$%X{YXu*7RBCHR>K)fGkM#Dbpk6eRZk>jmK11N4CBBVyCQkPH7&;$Y_VThw?(^Zv%3I>v@jF?>Za16XB>XLqQj9J)rSl3SpuaH%Fb3>L-rtGt9)m{^N< zDXL|@3$B{OULEngBBeG3S~1oJXeDWlaBi9!7O5+LXLfLm@l5;No2_g=-Do1JC1I@X zn&_H7^+1?AJ;nSnP|W~Kb0>y;u|o;+D_7%I?sPt=Mg^*6Gt^Q+{E~D~gZlf9DE9UP zuR3;g*Ua5&6e~zU6BM&6c@oqdY8#!IXng&kNq`CxJP->`bZ$KyB}OV3x%pB@hkj47;ss4V@Rj2hG+yzH@$7Q$Ti?1IhgLc>H)67|Dnt08&klPWmUBjU35+ zB{?}?vjp*UEdg;M*->XOH1|klvqS(fd{sVJzyKJG;BU-JC8M@CGf2*yE>ue(#X(Uf zOYS*-auK74pB9g6=MxlVp9zc}B=TP73B$JCpP*wHp~=V!HB;_^-XBR}7?!-roS?Ns z>o94XZXb&bCQmT<)h&E|9psL$&&VxU!g;tti_Z6|=}9Dal=E;Yr&3nc+ejq*3B>6a~8D2Hx_b#$xce6a=`+tRu2;6o+AmfdM@z@L(s64Z*m|gc`;ASeP4nos81&fMxA{|oIb4Cx$%GAia z^kY5F_0_3QW9y2 zJ!vV%E^eP`k13jpjk;mJrdaMpT6ht!h?Y&cm#)FlR(o?cX`z#2J)30(Jfhe`1lKeZ zglftTfkG6aj&K;eJFP{3_r@U)61|3pD1;L`fe$3i;+tGg$+9F*N_A1*<@n^?L30)B zJS`X~y|rLjR1q~}hQ5rl2)iP$H8EjPTgfo&bBh?-$Si?nvm5hM4mqvCIimUMt--0p zNOXjvNEK@==U*~fYwQk>d&fu{YT{B2>An>4#BRxF&B-kAIB;4vsRLhe+kWq-F1Szl zq*FHahxL0B^nLuYsWxL^_yd~caisDQ zLtYD({8Dp>QlZHx6PPGvd>SDL;c2`BgiFfSL3{bE8=3JlCgYFh+t>BfdADUVUSH`q zeWBtTi%g(kMnpZqA|2Y)5MtT4+!PiA?z2IxUbfCd$Ih&MYLtLC4OwI_qACGVBJd;RX%OIEPOTL%a8ZHn)j$r75n|Z9b5_(~m^|_?F zl--?dUKVugwDdktpm3{DfXO#7b{ zQ-6go8zOJ+O?R#PQ+kFW%agI!@ZxfR%-jk`W@W|Z_xhzxG7o-6aE9bx*^zDoDK*Sg z^27;DJmUGq%PPYwm(|X?%pscg6NPfQ9X|`G3+M?mNAtY64?{$Zdo$^O7?UZzP>4?V zKNyprb}rRU``wgnaHYu9XP04e724N($d`kSZ`$2mY+GWg`23;lAI6**bKatGpgslK zT<9#%(p$2&BC5)())8MR^E`NdZFLN!5eoXLE#s$Aa&X+~)y7F<^PJZ%kZsque%9@> z+(~~Xw3*+caBZuWb#zLRmD>mIx$|J6F_-^OgjO&Sed18WCfh+#@3^w)T(A6K>8K}1 z?tWcm-f1;H=knz!o7U8c*oEQQbC;?XH$LGyi?lfX2HI}l{_<(B!FIG_TKCDh&fNV0 z-r-7jfBUh1R+_6DrXEJ=>@54qGlrzf! z$owa$`x8A!%(fa|2e7wI>hZ8^bNsE54q|E2Y3G;uO5f~f)oK}o!U#dF87hu=>81X$ z=~3DW+7vh|lp*#=&$TGObJHD{O?pg*J^{a-WCg}us4^$~Aw2o-pJfO?+vU@f)2=EO z;Jv6~_@grR_AVbwMrLEhoxg(ST(}6TI)vU}a!>~dAaX(>EWZ2VRvrD`y`7X0^$fWg z!f?1t)wwt__9n%a8R>!t?~ROyyJA?b7Kl-KohNPZ?g}de5X|Xp^GX(3&La`8P#59N zWT=jg_&}o6GJBJYxo)7-lr^hU_T{Ik@tV7A+295*f2;mBv#WUz===&e#fMQ-6rwI?me(#0ISH%C$T4v-Q$E=>EibH{0^;j=74pCLjW{%!a+T}e8+4Cbz9}xYMdy!oFy9ByW z_jC8B`hZQw8|mS2(;v)@ush^C52gBQ$!27oh;$4?y+7;>?}6VIv>y3yj2S$f7y@1t@c#5`Xye)1E@H zU1J?bv>P^AMX}r~+2z9};=d5{C?OUeWKlzU7D!2m6{tq0Gc`oU@noI6i=q9L^EIqL zQHrYC#W}D}#6BN$a5Xu1QUFIL(sy|XIlDX zGSDtis~0ePLB70Nmt+-=Ag@EpEjQweHc@nJy{=8TPuD4z ze(h7Wge8!!n&u)gPd7{;Xz138Vxj)f%V4B&A%4T(Hsjejh#1@ZTW+iQUjK(~8o?{u zKZ1GRmveLGxaM8%TZA}^XAhj;&@N)$iEYzXa=+FUwc1M+?$u1=M~qFjp2IyHEl%-z zVZ#$|%adPngrUz{7G#cdGP_#(_}YQI>V7g+00gZR4%Lx;2JnPx_QZP)KD z#%Al=g0{CI)AU`!cV&&nnOUH>o*we29n8so+8qU0C~_}*X!?k@Usx{ckNCL9#*F86 zfH;a#91z|`T3N#|9VKhtReUM(h?e_4X;ha`W+)@o9n z$sJtjfx4gTuyX*^J;WzHgmun9lo*zmdRJD)Si?wXxNy*1)3)R~0{X6BZxSSiGC=cB z%CH*`-(&{(TaE=dZJ21Pv5{Up@Bxq*>>6$Y}HQEu#>a)^4{Te8Gwq{x<3Y z47pVFt;XUyX^QMmqfzGC^cC_Ml-zV$vQTRuQvwU{y&KS)*^<<+-sV6l7XUQytA@G8 zemI<_ON0os7>a4dl*->bcwEPPw6)}CK^nqf-LV^l=KdNh6B?pscoF#Kez+odS#5(g z?ozs07)(Q+T%uW+nP@e|jJXit8YHaZC95J@Cq=D#4JR6J+5|X3sm8NDiF`E1cW|v; zk2x55jNhZxfuZ3=Egi&${E@KeFMo!@2Y{&)cqwLK0@OIe)$FMw95b9!k035+$^_ZO z8=LysDf_*R=t^Gd#?U^y(!%{I#H?XQAH+a(Gtj345K*aQ;8*?-_X0yYtg20YMur>6 zU2zS(`y%xn4XBzy^nS{kl1m0hL}QWq#s~KDx0n#jdy|$5Ga0vpmHs#l9$Ku>0lUbM z3ZW_ldVn1J6iWP{2z@2V<39Nj^+F`36$Gh?hQD*E}qa;*IZ zD;E&_c;fs30|)l6CalzK2K@=={>N<_Q7Oj^+ARpvjy{W{pad@^V(KXZ;PV-9-?0j?)vg6wFM#E#-UB zxW=8vTHX(fGc-x)JD9VZrvApbK#vt&R|jWpwHS1t35%tTfw(eu`8m`yQO38U z&Ig1YqdLG$mY2mVjD9EkbHRe!Qp>>kis?~CQ;?Q+`@>&^K8>}rnOt9u?&wQ|1)pCR zknFw2MIl)})0iDQ%Nhg(%4VP^h9wcKBVL4}o*hxabkLB0IcwMJkd=x(2 z1|mQy35H){gF^-%6XBx*6J-`ie;>pqhRs@BPocgdmU!{qAFo2ZI-x`sJs})5T~O@g zP`0pFWX9td6=qntx`AZ5Z79@C&sC7A13-Kg8-l=RTfVCb7($oA2D}e+Bo}3cFES>O zaIIOj&4BJ>{B3T)n!s+gX>k=PN&t?Z+M$2C0=H%$+u4&v3 zHqlPyCrh#bM3Lyt@!8!P=C?dhPZ4d&c(^w;4R{o>9Lg?+u=(gFX~7&66Ehu&eDf6cc zsVb3#V@nx>DI&~%q!;gCWsFwpra1mm-i1B{vLh-ADpC*a?pIQv3tfxJA{CcMwW=st zR1cIja&lQyI}yjV@Go=iRX$T`i*4@@oC$>qvrA7-1fl|fnQB!;4~gZnq+taGBE*X9 zbn=&hHHad~fHe%(#3|+XgQ9iU;5yGD@(Bt6t}FPiD+ELQ^r<_02>^VNSd}z{7wAKr znu&#NAYmAZ*Yv5$ zXG}vtB)N9{(g^)UXnT{e=UIvJ{Dsn*&B7<-!Cqvz_C@njKQ#r0+oN2`CY*wj6$i@o zLsLGFH-udiZX&lBYqORlPk zSl`kN2gXBwjg@aX{29JZ+y1cKUVoA#M#Vhs4^qT9G{@oJYP3!}4Y1ey^Bvy~G*xAV zie=}z&!X;U1s5*MtARuIIJohKqE1y{{OoK750oar5dT6t>?8&$HzKM?L}qta?I8Uh z+`=yNkO2A5Gt$4(K2<3roxj$F>k0-N?yAy!i zI1#8j432Ls6{u7tSKS52#SPFwnvl{%7D{0zg_k<1@<5wkg_)H9E<~w82^&WVP_x+i6mM}17n7Wrvl*Heq}eDGSCFTHx{zs}`VD4B z-@xOqrcsjHiUezUp14Q_C{-pzpD!0&nxO=}s5UKjCRS3XL4tiL!+UM#`u2?-eMB5_ zHPlP``ZyX9F%(NU#pUT4CyQYF7MM{P5w(C*kCkB4 zcuE%{8HA%oNNY|PTSlXx|B@_UKIZ1a<$V{X`^`7O!)s>*T!PM2T~z&h47E)s5^!r_ z0}eBOq9M*K>~aUsM)WP-8!Za@w>jG_UQ2WGTp@s?+$H1;fh@b;0d%h+uk~9(t|aa= zj7l6oDl~VX| z4PU8_P}M`KVqSs*{a43RfchhDMol!vUuS3~e9-S@y1$Yq-x_r=VLCt=TY_}+cS+lx zF6^(gY3K{iWv5Cn?j*hFs+Xky!XVUB(o`tTq?7sEVp)A!{dqN1+g*JvMwzYfmj`#I z&Q}J`Y2R*UGzk;J201Cg zUMaVXS;+(seKZ8`FNj=gfX*K=dV~C2_^ll6);_4%gg1-8Un6Xbj8qE7fL$YStLeUI zSrTl;wfrJZch%u(Sh0-V0_z8IBAxov;ZFVU7wOMnVNH8WU~wOyXlyvPzyfi`#qVKr zVcFPL3|ehM9oDxvBW_~Zez=T<{QDbQI^#i}hI?tn6zTvtqGPh!Y*+jrcm}Ex#_Frn zM$fXUo3pd~NgC_7>hq`Idqzw{qOC1~Y4fzR7C>`6TEqd>20k+LR)<9&;9*Us6D1}X z{)<=?$G>2DvCZ~X{lk#!`C)kjy+F(M7Q~*-0*i2I*0P|T#yq46-_@R(oob2E<~zDk zur(fJFJ{{Hu#tmJjF)vdM;(>QvA>Gp0c$Uc zHfTm%`oLrNS3t47$v`H2h77Pg%w_d4?>4A>p{*K1-Sztww{?dK3H%Her@SX~zhIF( zA)FY|&lK1LIJZoQ0w4;T(4?)&|78tph5u&_d&KQZaTN@5oKeXpyjp~E|5?T;C(IYx zuc2Wx!sXEe#xwwI6k1a8QE2O_8U(pYa5QjhBp4gm^Z;2QhB1*k;i6$dML#;){VZ?QQ(1ncHqijZ+fsl z+wwavy#XYe2lQ8Kg^!+woqo<~$)}){L~> z%u?XbQsmNC0qVL>A1Gu7Z2htkPMK_ujpmhN3>xn^JZJ?OVAv-rW4aDoT4npt&uMekWO2Mg8tn|D+*tJ_#dnFDa7XQ_vy{=v?(2! z(6%bWy{`-9K)VqP_UPo-&u(&yO-B;XW?(VV# zbn3NVukzJx9PZT~63h<@D?s4>low=!udzjb8R2isZ|Bcmj zeyaQ)pbs_NAYnJR*{dv1!Im!K`4BXtsqFji^4wGIunNb&&-SS{pOi=U*UMtzC@(B+ zMUL-0uIlSdp>}3ny8Mpu$?Dp}IY$xBpWoy4AZnJ?Dlf;|!Qdd|T^bomvnNk^dga=R z4Nywo-3&gvq(|!sjGOVvXi6o6u{BN$(GG{cS)>IykCc)heCMJ?1_p80U&4|jMyM8k zw>=aE>yTB$lct5aRdZQXMy~#&)=1S|#VeYV8AsA~mv`eq^{*JnE~NBoL_H%S8Rez6 zqhTaPuo=+&4xRYp$1ZR@8#XT_UGr+i9*t9KSqh z+?G$)ZL+JG;*=jGXaL{(L|B%Y+NKsPqa5gu3`1w$SPXa$kh%t#u1V-%_VJoMNeCJN`uaF^O6e z%Wy`v|ITbn=o!@;E2MPNz3-S>@XTlViSByPXH->$9ZY4vej*qYsPKZuT=q}@8- zTw5);mb-UnJDv<`%ny*sn0;Em_XBrN&PQrz(v2# zSWz<2`-xjdNz3;_h)X~q%&CpIo}^O$aNc=b1Gf1$AajNXOkEZDJSoITk-~9=(A3QPwQ*nfO~BOupTsBCU=wsP9heT{U{gM5nEHmf=DJdb*e;+Pd-febun zxQ5i|r?^(t;;Q=D!yS->jN&ZZD>OGeD`0#%&vZ&@fG957h~I3x%nyn?#?DbYV}kM5 zS|YDkPN;meED8eXJ#mOUiJYL{FbaK}^crr|IH^=n#h99M(zmcoML&r^vkduQnWAA2 z?$`OOrQ)ls4qUqz42vK`be!r?W?>qdCQB9Op~n`)Y(Az(t(c zM2FB1<5WpT>J;G=4j)4{U8RaQNux2|leL^hTGG}Nj}S)Cj2uzBHqZg3l5{g^=jYAN zWg9y6Q`aDtyc7O`hA(WaiLU(b3xrE>swYbmgLCMJ9~v=`4#PfYw1TPI+S!IicvL~{ zt`U@q3H(g>4qc3CIkgLd zBbI%jlxnGK5%XfbZ$VH`*i6UTEOxi%Kk|9-6@)^Rw7q*r@cl;&CR7)Ul3Jz!i3@Hsj9Z{Z-B6F(2*buI3?JiB z67ykYftgX@9y*y25~u>8V;eUw|IZ%qh&SP{DDpjw-{g^&WESis1a2>fTXg~wVUlf7ZtSliz-L4R6&d*HO){?39BK^eyC zi4+OoE6|ACPl867_ZqT>5R1^rhmwi^QrppsOo0yPtA3@#xXXOB%zDz%AK z!6xA_q+cvej-_h+MF3q@+tr1Ipez5V$WwEXplU4Z@TvW^-eS%6e$R$WTkRu3vr9uI z$9V-X7y4*u9>pW@%B0XQm$Xn1`H~JiQZ;!~G zi7)QIgi-ZE*t@cK{`!5+w1=!u+#K&(9tWTC%ur@Nwx7RF@aM&C{qli4=dBwG7j7EK zD&2Jnu7rQkLX5Ih)t8$y6S^rzd??PU?eRN*1HOvd+uCRRCesBiby?8(LB_jmSIOIc zO&I&XGN$Y`{azd20HLGuAEAjI1Nz)0Vtc4YRIQ?o!l+5wQqdgquw+TJ1s1Aod7bp@ zZmJzVVk<5fp%9+~?#BcgzczE6_!sY>sqfdRRltJ|9e?$=tyL)NBbmwYGcXm~L43Al z?muE0_|54rzF_h5?{}V&JC|kYhrERt{*XUK+mifxZ`8IaCC5iQ?3>L>ljEsa^C9{B zn4rCcS-M=TBkxDYvj_%SOF;L~DLpYXH2d4#it;(GG}li0`Z2VlHf*IWgN;tyE6mNw z%YBQ#u?~@*3At>u6Q&V1uD`cGSu^x<*g^xI&%SEO@OY>A)YwhQ1&{ml5w&j3k*Q{6 zLNRC4sox9w%8g|{Q;h4<6cTp7GdCnMY)ye`LnZ80mqpbnUFk~CMRp|4<2(hgl^bB@^u~v%R?bk9 zoQo;Yinu8l**FPqn{z6XcV=NwjL26qd}T!gGwti6ZY2npf`HvIdn0LofM%0o81-gg z?8Yl>&tKK-x!%pVlbKd4i3>MX2qmT z`;pwGj`UF+bcnK(YU)}u-^YLd*zirwzIqPfHx|7EmmRFmLIFBXG{Z){X z^1%B+W8#u~L`BNR94G;eZJRQfFBgNtvaBfSD{0Ka!$w^7#Mi9Ry)H>hly?b1HgW%qlX!1j?hD?H)QT z$b4z7RLpiL7}AB9i{dOPB0q@0e|>rR7Nl_Qs#RB?g&0|@GFY3NXKj$4I%nYpRaXXP zTnijUj_?p{q;d&jUrqy)s4)(E=wz#^Fd7@8-aZo@NG*dRh`Pil8Q~4Rp z`0zF33G(=L8mhkfu_n&2A|S*Q+;AN@&N~;CyA_ZG*+uQ2uC?dc$KjeVCR`4wU{)Eu zFXTXjz4-3kBqnGtVqRNZGDWU}8$CsUF6i-3xqkn)RlpedP|mXNu(fZ=hIj<|am(bX zGE)!S6|&zXY!l@Q&Wi)TSBxL5U+InHBVhYteMlx`F9;f;NGXeWOV=lY%u^Z6Qi+Y5eM+ zx9N`4YnH(Pq(c`(!&XT7(~e;PZGZPm-%CybJ=w_@7u2(1g?;|SUC)+v7;4!{9E_%4M z+Nk$;M3i;S%H!v{UdHk{t<8rzi}hd0*v(&ur)J%+{9E;3r~Cyv$(psU--)u5*X0C= zhe|@q`h0kZfJGJ>kD70Z1^AY%~u zk!#w=!4WD9IqC^yt~V1%2^Bzq=dB0c%ebfKBMQcU9KfgEm{|)}18?F1rNJvxUODk9 zlnVISMm_d<$Vuk#gH)3x>%uM~=9R5A(Q|07^R3a~q%1B*zTQYGJjG$+=9V?5;!SLY z&7hjN1ymAiz*UiROK}jg8Vce)^XXhpk|C#vQnG6>A^#r_QuU|`bT1E_GX$v9^HnVsejI5xU*4IVzOjTL+Q z9){)@{^BBuAApC{K91~u#6ZD)xn#1HV|AKpB+<+v)qTpi@Y|W#C&n+obL4_VI-cQI zeeRS#W)cn&sJkfy#)|R{v@ZX$x;YC zHneOej=ok_cM}FDL2CM@^AMlEr$E9J%x~X~gI2}=3ao|}$}@a6rBb=e*>gx>4H`3iG>PS{ zm7?#sY>wtv_A2a*B6`l%KJ~H6o0F7?Syng?fC4hddJ>XDxVE0Ey{5WY)&7i;Iba{p zv7-#l?%fhIZ8?_lb}+@9)Ib^~i9W1QWVS~3cck#MOAO)Du@t3pTo^Q_ajdyqk`QN% zlieyNkdre(B?!K1F+l}X@&E_fS06Udc;qSqm2(BXu!5ktgYlpO6)?GLV`faz!Sa>7 z;1iNSp$nFi8ma8C+L~ZkJLw}jL&3Qx+Dq+Xgb6+N%2+7O<>v(~X@cF?bFQFfc>MIf zv5gkOh4IxDND$B+%EN`XMU-MV&@g5=$mBT43SF$4Y;`_#|Jlc`N^vKgRugF!=f4`8 z3K_40$hh}=S2|93HyK5aEvbo(_nK`_ylH|fj#sF}lO7(G-G&u`A7oX)1rz`p?Yo`@ zD*UC18RDh(^gF^9L;XM6gE)pc-t-74{;k(&1(|F^*H?@l`bcL&-S|i$Z3m%fgx3>s zNQsmt4w!%>ivro-6e*=sFye{dI87tpb=K?@rWM*;fMohbDODxZO;E%Y_>Oz{J8^AfT%|+6~}EjMU7xx#R?03LbHUPK6UQ6G(Pr#Ap>c zTy6(z&$m5|&uc>q#h|=LG2Zs58h*Xidz|e{=j!8clr@40{CRL*I&x;ziRi$u`i(d( z+hPNMZI z#~Da_X+XXj5XlxCkDZtjNd~Dks`>lw^`FCLXijGA5F_>g(C3Ri^`_rdklo6|NLW1v z;*pV|O9fHfB^gVVrMkvgS~VtWo)Aw-HwZO_gW@Iwvnn1qtG`$ZNpQ6&8Jwx+G*~3k z+o9TaSY-?ZFtY-hYFX+Q$m~f9ecKGE$)mqY`)i<@HkvCx3X13@Sxd!%#9pDTEL7 z)_fpR4U%kauiou3=*$T<2(P*M?R(@TEdMfl@dGlDr~_t$MCQnc)&x|%ZtYUBLID)I z>X{|PEOP%nj6Aq;&2O|sEn97ysS0e!ME7!G0gQ;vJd&giSzHPru(0#BMB%q+}j z2k}wG@nh4IU;WT~1S?EWLE=6L@AnYV65044GCz)&H7e)hf8LSN%!_Rb+?HmSQ z85t}b)KCx;_f59d|GC9gp*G1Uv>F60ED5q3l;cTQQv`3KvFJ^RQNoob&9ELE8pRov@q3tR4j$ z$D^eYT!3(#7FCNZe@foQlLFynEJ996w1w05WlZ2ORy+Z?3lVl+4fd?iH>h=v?nEAs zpb&@s7uth-b#cE)2$ior-KoromaktbtMzYvs?+g#)ADz-#(GK-Cil$XRSO!ANP93B z1SD4wEmf7LlELMzJQyKi_kY^fZ=4QI=+D*G!NWh`|LWoASG{!kh(JL9N&Nr+dU&w! z|GjU;%pk_W#L31=$I8wm`cn@V7NO&0XA`Dl=iuOEWf2x(;}jPD-{N1xX;ZA@i-wxF z)5lA^b+>-UVIsGfHtv+zjT$_mKAcgsUSKZvV8O4q3^@LPTCs|>DydRrC|1l)FYhM% z;p;W7pCfNNb{9|nq4D5#`L6!Gi0jLa(R_z|jndq-Z8@^szf7c(gP3iO5jwg-Y9yk? zAv#H}%2N9%Nv}*ahuwsg(^pszKdrI)vk}X;nlELz^=EN&)Q<1;|Iib}e|EuClgJ6} zZa!3&WI5G0A8K*DsX}SOd}(LO4!fv+v-wb)9iL-qWqQVH#oTM~~e=gr~^ip299al^K%RWgW)MXKk>fe{l`xj^*h};y+VTg z_nr5B^}qND3P7j0FJqPOJa!w4^m_PywVP>r?RqgA!K(zcy6|}eyqYiCJ}Fq}$Lmlx zw3OG6HF#`A-#7f5j(x3#ZO?tGxXFoLn=i{qt^Is25o#@Ve#=RMIx(XhHN4&{+HDsN z_ukv7)0K7^6V=GT4G~rEc>f|q5>YUMsb!gS#wq)?(3AE*y1tc`Cgq)V*=jZS{K{ef zho8W4qV*p?fp2QND1RV3_Ox7?W_HQeo{lW%sC-5(#aBVb-b1DK=CRq+CHSBALEFOw zx)}$j)2h=lfH2j`JK_1;gISM7dTXLNpq53x%2R!*({k)Rw|Vp|bD1G8#&;5z2bx-2 zOKU@|(nam6YBe86jn&dC$gWYBclG5jb&xX4fFd)Mc5jGQ zfnmY;l(s_=+f*ltx|fxji@m~~nUfL=JdE#GteFcReo9b=SN5{emYc(_o8n@n1)uo` z{KzbNy*?KXYJt1*UEx?xA|hEFG4y;(Bk-H}X5V zd9%1L+l?KRd_^8#HxmVI`kN1JS~V*N4xDS(eMLkuO#NgL1L-K(72#MD;Lu3`iSh|F zvjMlg53bvLyr6@>|Gv#m-t8Ci5h?QA9{0CTx0XY!?*6{t)&vw@?kGy$FKV#nvJXqX zsjZI8fkpb>WF4-rHu_o%pDulcgt{_eq1$rUe<49QeTJaCZN$t|*b493=+aMT6?{nvx!2EJqb;v6S zD1;r-v0RmGoSamvvbjI_Y{Kasj{iX@u*?LTrfQ@h50i))V}uO>c!+tJqs0`-YZQ7M zuC20N?%M0@!(>Wx4WzsLl90@;zlzR<3PGKxU9|DU@G1;2G*l+?EH@kvQ70j1FvzT-pKwp9JC~IE zWP_LMEw2{VP8!@%{U8)#IF~kl5DLrqLDG3>tTURNZ+SZYX~X2pw9G?eW7D+&vK7PJ z5CP&nwg}G3Pr~q12Bel&Zr8!B{X^l>MUlwxq&bO*yZ*vq02Wn~s!AA(DYewstNrw= z{m>VbqFilEYpXca42DxF1tAF&wmEwHN)%CuL?tLnMsk8esRr7mziEcmfN%J%@X)SJ z_-hG{Y_7L|xC`DW^kFazHgX0|R4Iv4VIhE(8Wrkh8z)6Cce|Y@3g}>r&KIwP;8Hl8 zK9~qDz!g`8{|!hmBU#3X01cMFNG#cY>Mos(MKU7+ixkQ56?ov+1VKIJ#}ebvFZEi8 z+@~K{17#kDdNkqw!sVF`in(wj193W6K{EqQcnS$XO1i&jiD|;M$PJ8H0CBe)G_5)$~&5$%`s5H<%W|)!+o?^r_xtJWbJk|sW?3aT^<*11r&^sQCFaBI>qWFIwdTeD@|GiRv0GL#{HB3$bbBY!TtxUuA;PYB(WP?>&;QmADUAnof1)}>(!b4=W#;;He#7C&riCTcJQseo z!~vOWB`*^vK~6gzIuz|4tkIo)+NhQE$BVnqN_TB> z0MZl$Ob`a^YVY;8^7Xst3XT<4s&<8G+Y7mU1N%vMNK=KZQ5vH;l2baAy9^d`mtb^s z5<>&yVA!T^;yq)SaHjUuz9MWIkO#hH1HKDG+U;HT00M@&4RZlh33eftiI4z3wJ6%4 z`w&S#^JRT^8idPh{h;hWyS$jQ!Pu(LlWyR{9?n!m?sx3GxFH|Fj_3j3-?@!2{8@^> z3M7dUk^VMdK>a3w_~4RYa%xrsYm^+tLyQogwT7&UrBHkV*j|^l{$*xi?s(*J8#HQ^ zAvOS06JrFWDj<=3I+-nD;a9@)(I5h$tMwu~&&IrB&<$Dw{i_4Pm4M7Xa3AYIvN$)- zMgx%7voNMtf6iAK59>yPLc$snbQ_5wh{mOagy6HJ)E_|c3Zgq|9hQICK=1kW)b0AUQ1%xQ?nbl8upagauX#Di;Z=6aTW@w-X7iE z?~dO&xgL8e+`_bLkt1|76iw%}k!Zmlg=bG5ViPo!#1I9bEim%OKTV-jV7(OIbt8{! ztmDCtEZ2k+qAcEHQY?+s9-zeZps!cRymUF#=oXEeqw+KlKn>Uxp`86PrWPsgC$oo_ z0v8k^5Y(ZNP`!AS`$boFAqdzc$QU<3zR_u5->Um94;>v7D}H2w(>kAX-!}{jgvow9 zDJ(TF`b*0(QB6xnjoIIQkHI=0*a_ym>9^bM*Z4iVxs4oNX$py!t#%Q@m8_}Pwo?{{ zacRo)U|KdMUB7`=ONpvfvi<_H?LC*>e9qPC+S>8bERhepbmZ)t_m;OaO!P3=ECO&_ z+>7x%W^RZ zVPxYQhg%cVSs7O*DB7C6eECz;LBsxXkwPoJO2oDBBY5xcB`xml;B6lQOxc<#*wj%Q z>L0+cUN=^o!?IL^fYhI3?*N`&&k&ub{RCL^Rra@tD*d$i)Y$@%XsJj|#vX}_&&|3d zzkuJ$aldZoHQyft&lyF?c-qt9@>e*4-%fT-n7J%WN>jzNV}6wujYU8e!r=M+lhZN3 zy*T4WgNnoIb)Jte63yl4o*Q51QX6qWtkPO3Ovzz>p97#BdLai>bpi*=Z zbQC4#58boBH8e32Kjs}l3(a3-CmC$zIh6~%kB#(_eDTcup2k+BHwAmmS>nd@;VZW* zX~iR}{swUJ6sZ&6Z63)cP&^)-IY-4Vt(f8%S4Z*x9yc@}vlLdElVeel6-j+p_3V}M z)8kILQuU-rj5{JG)&rgY0A}_y{X>f;D5g&dHg1e=3W#duhT%V#d-`@2eojudri0&D^zTqr*v3ittKBvf><)6ag?dpC$t5MQ-uz(;- zlaVfyt4?r19inO=mjo@yZt-bzD%i0iq-%~#R}Q<6+*;KD=z6?Yqk;h4@F9x%?}?RK zfRLg}?t=l)?wt<=5@_{9M-m551q(6U#ro*&M1QqksC{ci=@3%j5m2~``I~|LT<w_l6OS<>NKR<{TbY|5DC_)%W;tVRt^)=Bq2!=iqk0@QFYPU8gcz-M8y}h)XL(J$N z&b1v4mm#`D`x990C4Ldr3kry(NM9%l{x5LMu3<9i??7{1{PmXbpD zDG9QIsP4-495r6Ui|adRg}?8T=e1-m^h&=@G1mG-(gcIyK2HPK`e^B)tc{_ZL+2FW z!ohB>6amv5aN06h12scM@Lq*Lacu5Q{YCK8lJhJCHtB!&)!Z+pdCS@5Pn-6h!fKa) zbp*-9trBjm5JtvCn1Cq>mx2J?VZkWKi*GID4@AWG*hOl#io|gp>u1Aqz_9W^bvODN zQpz4OAaQN$4b_R+C@GOS-wKG_;fcxZaXFOvq3rbQ752!3qqMC3+3lM^1{acnf)olM z;yC{h*sY;j=;wZs))aRG&C|hUcgs81xdw^$gta2+aZq%Db?uK22jmJpoHc-jzen`* z?n7Xec-G#_kE&kpLHNpl6?|<$UwKmX$y=>r)vY$mE>OoK~g1!0nPTJ)W%aZhf^}(l7NUzzp!AVYzlFqsh zAZhL}P#Hv)q=@Lfo>VY4VkJj_Cj~MV;#ly4CKz>*?R__Xj(eoAyu)q&;Ph|n&HSJy z-jlxcH^FpJr7RL`a_IenM0@8@xq5h#H7;Cr)Qur^izQc2)QhiKo4OP5l&<_lOcl*$ zwN6*1E5^1QbL=i9JThIL^;5PpP;t&OSjYkpVG4Ok3ccAaz7P8wzd~ z6Ds)vfWWCO-~h>esvsNhqHfCop^KSUzfkmL^w>FaY4_#r@1&ReTT>%7=4P$6-g}^o z)$0Na=Hh{|f|^lrV;>hp7^rGcma0|51DjwM*&N`iN>D(q#L{9gyeqjUx z$2K;u`}m+RJf0(co+E{v?^Z09E5Hm6Zm|pw5InI6ZM&3YdT5|=stFI23m$mv?+fBE zD-Q&5+d?mMxh3f|)r$-S={doALb7UOurg{xxz=TpqkIUzh$$4?LLyc?9O;CQ`W=h6 z>6@_w*RD{GA9PGr?impGG8bX$3^9faSiobo`)XEEp*`QKuKGAEO}l6k@nn+T><8S1A#M;iqPRTCWt}m zNx^PKAmyFa^UZg9*0VU=HA=q7-3VN6%Y(%6c`j~8VJ`ArND{GZ=MC~{mr`Uveuc3R z1;8ZAgkr-#T_;n@JKyRefVS>%m6Nv`a+xpTi4UzH`2@6~d>EJ_BnROE=t!xL6o|qT z_R)S?Gms^zOwx2#RXwA4JSTf*axdwevQ--L*#eVxV#j-v#pwq4xjG;dI4Xygu~m{m zpJLWp8jCu+4;O9OB}sS~Ge1?dBMY6}n9OU#HWseJ(it;ZT(B6;FLzqd)9J3~11ZGD zgGhn9&oNTab>jyIL=*=OetzMg_wc>vfts!U~I_= zA-+Cyi5#s-5jHaH>t+tLr)F4X&mr*xXA6!t0BAVD7&0H^_4u z$&7id)JT97l~638;Z_3$!fAz_GcE%e`{Y-ADuZ(#l0qW@Fj6oMi9c zj_`&u{)OX)3Tx@nKupTSjJgLJvG%!B80mM41J z#+r-T=Edl}^KE@l82&vWIJX4;eYhYkijb5XccKG|DN zO<_yQeF01jdEJWaN9{?MEzJ;HAs2N2zLE!4^lsgJT9??-L{HPnaVT{7x^8LvbZ_WBQKsAz5T{gM+dboZCWtrxSX*FoE! zm?(7DZgADoOzN+V{(yx9p`pwSL=|etU-%v@PR3ZQpF9ksh9tR@Y(9aAVpUH~kb8z9 zM1y6iM;XDB-+ab@UV#$Q8dfy~+o|#6c#6O)TUeO!^FO=RfQ{=oMtm-QdHTa%tdyL8T(F1R;8C-#BALQgl z`QvJ^Mh8XqjSVKNN~bj$=V!#9&7n4HBmr6&+f_c6-4c_bWlqBWBp#aj^wTcr`=~-+ zwd=SWZP)dDuCR=(AKI#{rv~A12H(WtJ*%fS0t|*{IwWWb0?VyJ1e8Up@la{(`V9UI zpr9(MxHaA4QJKkbvjDfUxAoSEG$LvB3;gSWN5I877Y6B%N)_jzLr&abZQ^b05;;7V%*;ce^doLj*e z6Re}@@Dgb{MK1eSfMPJG$}jFmRc#dpiiI~Y$uQe*@9bH|)}hlr5f|@-rMFf+ihr5< z?znn;RbQ!{Lz%vboFaY>j*QsR7nVvhk$!2@XGcF?UPtEp^bGl+N~_6_*=G`vn>3U;=1KW*npplTdZgacYussHwT=7_qzCsphBVmrla1e8#X^XPQ5#vZz*bK?k(oIEwNP8atLts2Y zsx305TcB7-`<6eTy#7vZa|fnCr|-w_!a#U;_LEPzdnmbA1@^FzD?D7jq<>u%y97Q> z#i@AUe1l*K19urPV6wpRbg7`1fQ2H#x}%vB2Y^VTlV~RgwgDt@yN`)Or=mW;w@3!O z&iTT-*?`#Jn=eEnK)*DV(9JP`c6}^gLp1<9id9fbss^V7Qoyeel%^zulm}e<(7S>N z_qQ>^3cTKj%HeEpR3E1KzeuaD`THm+Z&lF^|1QCLU~ut=1_CAAb&>nWphR(D+;SMd9?=v}qQZNI?AHEIO> zL0frTooN1sI%{ZX@*^IFhLYqLECC|0%GpOs$MoSy5`j9#g{*|CTqS}%jz&n?3EJ<* zV#IB2e;Ykt0O{iIDb^s_iP`czjVRmsvR%mHf!BA2)jLfYwK~?&0h3V@MV!DHFjcc@ z+H78(%?Ps-bhO810iXpktqO1n!dKyT#N}r@fazi(S->}^s6qR|jCTx#B|r?6a!ezD z*6q1>X9n2_TE=tm3(b7J49sZdJyxb|FNV#6nSMxe@>D51`R zwe3T!Ybpw<;|P0_1a>Ac3Za^Na7@I6muw(|xbKaCvJM$+Y-nzO)J}KjyF*hZ%t`_g|;SXB*{a>0+_15%jN!Q!DY5W3!zg9 z985TeF7aHc_?d_aaOKxi%Iv9-u=4q|G0#0fAxPEH^L;#aWvMI$S zoCyzmKvI{SqcxNS{Hr!VJ1=h_-7ZH9X3n}}VdN^d4jXG8wMOW-7T_^|a?G|7*NFjk zsJ8T|z0ychxEv2HQ=r3RO&TyDy{eC?I%0-m61ucnq6ZR6rL;S7`9(XVy}X_-w7V&K zG`H-&7&K_QKpM!5E4Ceb+rQzWKnD#-L&uu*oV4435!9E zyHk@@dSX#6x#ega8EQeZYS=0xkMf}BMtg{Nn(_Q322p%X zrzA5pK*go%2ED&S4vr&Yc(0kO_Y(lSgEgcH_vf2J3TVZqOS$8p8Wqhsg3sppZP?@4 zj-CPX2G01damb^_(2y>vJviM-e}Q5>c>fNfQyeQ^K3(otKCMmEpdsy4YMBj+P-CQ0Q{W+^Tv36jr# zAu7XcXXVsGo~%!%>8fh_iSc9Dmvs|H=_vWP+YWE7Bf>HhRlOefv=}pwMl)@hvbS41 z6V*>$xeM#A?i(B3k`?fnThdA9`ewu2-(br!8xqA&PXfQvWY_Um|S2%7wcrkRuO-a(wF&PGn2_e_E zw*4i8JK?$9*Qm%zh&V_+yVE;kdQf+=XG}K{;u}; zGg8Fyn)h$Fd+XkLtD_rt=b!B%frZAliHp<5s#)4i<;k|!OVwP)?MBdW)xPvxQS59`=Fl^7O;x)crbZ2!hCsVB7K`$Gx1vwal)B9<+2#Z!$+7(sB?Xaf8w=@n~$wDV8i{&Ty{rs zZYym?OX8U*RkJxfsBPN6F=5oO?q9X4+i_9-6;9pkr&?(wqy>ZtvSyW_9pFezzE4UHbb(>$DuwXNv zf++IUjXv)`KaLs))YXcu*MF|rWYm2371$u+cl8pe9)Du+cG?VSeXMpv;SMm6T?LV#V{G_8s?q|Qhbm2%F2YtnDahQH+*LO;5cEtF*%DJdyOt%Xn zU_HNAd~X_ehw)E_)_cF1Y-HM)Nl~w@Gj5-)uK(<5@^GQ{u*x^B;QIhNGg1yca`e!9 zTZQ3BiEf^I+OmDxu1eX~N}t)I8>{*$%hvs;kV+jtLowdwX6DqI3K}!@{=H81bJ{LU z<883c(la`7Wc&8}qnF}`8nC&`585(CkA2ggMrKW4b(@<1MehFhlZ;}lbg*u=V&yXU zGjOA4m_I*VHhzbHdb=sd>KO{nl6QuZyBQsh3^=qi#;WAH)^9MyN+ia2PDyvoAxw8m zS7lXxa-4f^QAJgVbD;fuO-I7A*^a;c91a(-E1`;>2Rz5aQp=0zCOZCTmr`(59L@r! zoA)BK^$+;x#5Rp(`iUZ3k!`vmn&2m1v~9IhDgOkxqUCNR5Fp~|ImGUI z_kXS}QzLO$Y+kv}k+0nNf}b7=ZLAlh<2^Q~B?Tp39ra-;z-QvM@vR;)Ow_YjX7@qJ zCq^U$EC55mAmUpnox1}Il&q!kJPiaFWgT|rTohCAAttB2$`vx)mPn->QektDhdWOt zi9{xke2!!Xrg?A3c|um=-7P@(a~+ku?1w{83rIf$MXX#Av%5q4G)W)#{OYv3gWDQV z%^eLn=rNws&)A_WZ4k$*ExutQymUv@Y1Gg*@_H!Kzq-EJUj&81!T?fV*}6LxdnDbH zY5Y{>YbW!D`5x)41jA|RGlYuJ!0Wb7>d+?WI|I^BSd6hSbC^N@FJ|PVNhP{CmxY=1 zTO(Ze!p-)0x4B)3`qli(q=)-rbJbwAM|GnW9O?rua&NqsyOW<^YZn%bk75kviWniO zF?F974%bBK`eK$N&(H_GFp_T}xYT4P+G(@u|Fh#7><f@%xNg`j{Snk| z=R`AVJ{{&?VengvMi)rvml#5 zBoNL1=W%EDmKZ(QKuK`d(=Va7yw0tI@zGYya1UPwyZwzH?yCA(>sC>&{ zln(1I)>2OF_o6r)Ja7RL82}d{b{PB_lgcCkN(>FDv7I(iP}#3pQEq;uB?oHUqgjGJ z{puL~Cg5&Dq@Hl4QlpXvG(&a7J0d|D-b6Vx>R-k}`op5(MeurSx5I++HSi)q4NHeX z&OPH9(8OLvumq`0G9v}3j<;FHeL$n0KlUDTgi-;VGXGk8Q|ml(s@7y_v|C7p_f7c*=-jd_UP7K5rb$);)#$| zhQEc?X^2mTl&rcS9Vl!vhao6z*u9Jz>JUji(1KN%;@c@mg`5m4c*xc(F;q2=WP&k1 z8MJz}#GjE3$`z^?p&bRfzW@V@2&1H--<9W}VHf}=G{bYTSjhwv>ZCpn;0K;jNL=p6 zm^-Z22-pvBP)%mrn3p63dWIZ#BHWNz!eEJDX2xXjHpd(^K@;0V4*kq^HZBo=Dx1(1B^tkFhtJs@VoBn;~Xp{)3NnbEbJ;9K)VjNmM+1h6p> z7s+B;!`os|RN*EngaR*6MrOCx4}&1s$-Thg*d9)ceMoRjp2q z`&>(>k%}rY(Y4>{6}RJy*s96$Gg)0$i8(N-3|k6R>Oiix1ZmMed4uXU;TJqwq_1Cwar_C z{L((BB#nte>l>hR7EcR#)#|`mkw@w`WR&Z;0|A&1l2XtU+X_O4+_Ri0EWg(Y0ruX zM+C2%%$AKS4@Ia6|8kCqpfh&7MAbxr-qr{A8Nj=`yCla`tvk>!6b@Q%!Lu(YFz+7- zge{RDfNXngS!8IVG2)f9q?O7zzNuw)pJq18785+F_V^AS8ZJ6BcsTQ=}-2{N)trAFH3X%g<#l4tQ^mpIB9 z*TkmX=tE@7Q8bnfU=xR>K`SESqjL{+fI_=Of3lk{u}<=n`c6a0{uwzCO9?X03s$;`TI`S>D_MHOi_gh%s7%_6Ugul-a1*<#Xc*PO2!COKa3w z7_INv4pq^JPE4$3BQ?*)qs-{oDda?T;ByJ_>39nAF`Q!vvB*;k*&eRCYuvwBEK=~+ z?^M692O_TtG6n|vefyz7}2mFZ;Q?jtxUXLM2W&6Aw8 z#D>&bEAH4>zs=-h!hqxabEqM~;1WTEG^Nf+MbaE+ggBH8s$H|}ab49z@vE=+3_H;a z;dIu3VJPaiDp|M8v{wD}E*daDYRS*@IQ#+G$qEzqU*QsCVk5pl(Zo%HkkY*0&Lq7{ z5ct+}{Sf%HPisnXgq68@L55EGE}pqdG7;AlP&JT1?_XtGpviXXJ#%z_xAEm2d-Q{g zR;thg6{PE`(r%<~d|qATy9a!B34(V;2M-M%e}fsa_W_JB8?sCP#P}D%JLnGKHMyef zNmIH3vDIwk;9D@CA~%EAHc5tCdhD90Zeb)@e@;&KJ_v3n_rbovaMyAMCKtu%_EAt&*RDABb}dk>MGz# zNwT){-&w4m2VjYp8;JP(?F=FkSAy{T=<$vs@nZ_5zETR4t`2HZqR1Fert|e|>Gn+n zm$Qc5f*J_~L2{9jMhr9xeOQb1jzRI{`$Fl-qq+IfM7WY|;(&tDtxl>c1Kk4RC=I4@ z+mY_fgO@tJL(paI@DyJ00#Qx;0$0upmk*UmJTl;mt}y8CGhRfZ{PS|GsrqP5?vX^* z%c_pzi`uGpsnb-Ip(o3xuMbH+;o;ZP@UNtdqh1OP^eryqP^O|1hXjj_%MXzD?6H24 z3o79u3A)jMIu_&melaJXS#*fQNUltpJUYd$qW`MGf-CJF)|{xdwN6cVABl)8z3A9HDcL!6$|XAuWRJZnr6Zo#IN zB&3yHDl*(R>} z+fBpBQxK!qTg}AHeP!osEMb&8SLHqOi6*Q3G>`_obu{cmJS%j~&@7slf-e5pugMS# zbCC*2+%kOixZb9wC3nd2IJ?qC&ESk5Gyk1&MuuWQ@J&-cS!PuK>dwXd7efeRKpVY8cVyRR`v}2h&`4pXN{8mU_!Tj>A8iw%UzXy9=<;q=qXAb$a{0*n7L5)>F%f2oXCkijWPIp2N*l8R~&+@ z@v3vDO0FiW+^#xS61BK33=39nesR6euDUsIkgENPIPd(+I?s`}wL&Vg$F_Sb&c0GR z`xNe}r8UcuwMvE|@Hjl0cS!y5I(g(r;g39;clYEwUB2J>^nvtsb@5=#P&pyVIQg%x zTwE;%Woe+Z8{aQCR!H;Rh*H=04Fq`w*7+jp*MOhvz8_g{5Qw7MqP4$O9d{o~y_Xh{ zx((pw3Lz(`0~gRh$lVtYt+6ryT%0ZBoGYle7UG2j*>>g1Fx&z9Dq_`+{bzFi_1E>B z+WQS`)}&kTZD(qAfD35hp$`5aTc>cPgc z2RLNo9m0HXk#$F=Kvfksrqv&sMr-(txcaPv(OSBtW92Alf^Cvc(zW*fw?qJ0Ju_$zg`4@L<(DW zE~OdFk??|Yy&JD}i~N3h^Qnz>D@=OM7W*3GH$N`f(?{ug1%r%&Wj41|d*6J5T9}GT zVy2+Lr2iVVYLih(Z2N@;W~`<@+`2W`q~YRU>r8wD2`}O=r^OO|AzGcvsD<1glmSPm zgc4o`D!c^@<1V^tyo6FB*e&kDQY72jp@QUO>IT~O$NYX-n31$%Fi{m!KUT6TDx$^$ z7?SYLmQ+ImcxxqmSZ%rL_L9Nk-A^VhJdwi-z^RgfSfwZeBr(Zb zlIJb%pm1gRP-L%X(J0+lM3PJ}6BQsXcN^nHH^h0@=!KjiBa?}^%o}b-vfB1G4pD~!qA~F5Q?f{W5!Dd`R_Nogv>>9(LCl9 z4?5d<>VJ1F3iIpkzbS+iNgSJ>3+DuxoZ$ZP9?iu_CHUZBCjb&3IF>hipy5sy$z_@q zZ}$y)&@}r?*?62S2Yt`^v5S#m%CN!&O`-Zt%fCGsEvp!ijIkJ~k_(AcT)6*QpEt-- zSEYOl-*8Aq7>2!lGa8t&BlOjV8;YE;q+>V)V&T`5kBXLvA`@oE2>zim{)z(0FT6 zitYc0t#=Hr<&WMyWA4~Fv2EKpF-~mT$%$>}#I|kQwr$(K`Tb|6=FZf8^R4RLUAw!h z`^D~xYAAaG<;k6ke&F|Ui^^#5Ohwa=Tq3_-x7N5M_b)ng-Qdn zmjIhJ#3uNeWmH4Vmy!4tzE*b(Blk{&1ng~Xo1bmbRDOKiRhh=O2=cR=A(35OR< z;HsQI0b8G((468*bg^2Dp3-N`9B!r70&r^y?kQG<()<3EaItA92fTkEX>>#e--wPs z&z@U27=t>F-KtT|TFKaF9+g@)PwH>Z;Ux`zKcfU$G^s*?Jc42e*Dj$VB*wg!J;X$T zDBvGJxhH>xA!$B3s|IixQq3}Yq*?;bsHFS*-C!AAf4=ne48s+L)_5jKP9AwlQOL&H z$X~@|##HwWse@>Ow#CRia0k$6q3g%%l9~pB>As6b;QJ`B18s!|{_q|(zl`ER(dJVu zZQA7^pmSWAO><|RxggnZOG zeqLe0WObq7)iAy1xTs-5{X_esf;cHO6k*lC1oH-5*_u- zCr1>L;J);H8$@ey&NBsMid6+FvLZ2mlV9LFIC8YS2UqCbmrVnLktJ!fv=8gzVw~G$ zyjE4EQ1++DpA*%ZIGJfo`g+GMQHzZt)0GE+2BX~i9pdsJCU_0AhFHGZL7YP!8?Rw5 zzJmoN05;`G1QQ&}6WcLp>i@ge z{jO82tZ`7h_#`kh7A67400GfHeL5qLh^m>A+j#d z=NOMxsc3s**bU8;b;!c@=FfO#Xqpi-CSYe`G%6SXanzYPEe}`TJ*<2npqXv>5mO3kc}H3F7~GwivwdzsD}IGl_|^vWc*<=;tWMX9E5aJYO;{1P|mlA(}oR^(qmk(Vpa8ac8WAU~Y2M&1u5@3n+ zp&3O>1V+ZCU%P#NoR>tT;dw?Hc-)l^v&f;1vtI4joX=VB%eU>L6JWp)|%=h|bq@LZN@>VKxb?f*0ytFqtk zCqEpt=%79xTf7yyX{u&dr8RMTzjkHNmVKqGdpZA+`R+77=TCQ2ox1XVZn9{1ue+T* zH@VAAtGawEYU@Z#)NX7#weBpLHd&c#Ty9wqZI!6T&~|+FSa*_nJ}f)?`(N&ovGc-W z)Ah>eZPMjWh|@=hMU3uU{J#2Yp@r^p1l_mipQ&P3<&3WvQuvJIGscE}hkLuHn%q+x4LAE) zt?8n!$}xoQ#0Z2_@Mz7<+BclFPkhzg%pKfs=ldr1?q2FtIg@4Az~$Xk9husDpYQ9J z!18|k(_IU*z;VsxpXjB!i?<&(4^Fr3JA_)hP6S@ia25?dTs85=nw_p;b4$tDJuFXs zPRm@e`tALQlcKSB@+=zo6OK3??!AVoFeJW0Q8DmIWS*b!r7x8x{4$rvaJq9kC%BK0uNmDM zt9H$I&$45sjT!vqU6mR0DU;Xqv{ z=*iTH>Hb$CcFN*M)-4I2&$@OUco{9K$bekd=`)|Qvf3p?@? zJ1^VP<3AcYneb5&<-u^@vkUi!=pCKA6^74gEcHdAw%0c{Z0*NK?CWbg0MOgKbk$y$ zUBweMOs0sLpDE+AFsv1i^9k2V>Dxx8igrlwcE_HZrjGVPyl6}2qu2k$FRjj}l{?I> z!=t~s@xrp>;dNzAmp?t^Wf%k^Xri{}*1J0_hmx~N8YRL0Gp3B>SWIf!;P%&T zVV*chJDLsMHXS&Zl8%h{eqA2#jgFU-;+DNyx!p~)VcysHaB}&WGGa_|bxOFinw_X> zKWq4M#5Bc(SbVu0-ya;lxAzY4!}jjiX0K*MESj(PW)C*Nf7FoZ(zMPiJ{(JY;R2Acg4~Ee6 zj$??bg4k3H=aT02>0ale$3J4fQ`wlvJXHuyELO|VN+Ijn$CQUmn=$r}C(+*8`Fib) z^(ZOdhm*@PUGAQk@2SO0MVWtB{^N;}kYR0zP=AwyDDXlYET2j`YPzM&!0pT{$&4rh zaIa9tw72^^mW5vNxFo4H!8O+RRey>e{|`l(^jcnjSoG?-^QTgVbgx^ zVNQoB;{mPF?AVA+~=7Igr+~?@{^*9ShVrh8c%r zZ598v;8Xd@VJdGvyl87X1h@4J@!}8mvO7zt#QiUasW?@-^cFg|HL*pDNTM%30Tqim z$T}9|CNzSMA()Hud{rpN>8+zLs`rurn|J%7UFjU-_kAM;2;qYh2hI zv>42@NSY9GIx6^R#zD{{=U*xgqj&#`pa!aOCMhP4&K3`XN;ZrPv)oj)xw8q|R0ZGe z?=^z+mVaJA#&9eHbP3M5vRAn}9Vx5=ZUPk`k*)q!kO_vk5giE6Kv&X69xyCYzhVo3GTA-SqePGx;KY1C{fm-LWfnFgp+SWo7p?Nk%AAj7*klw%% zCC}ENY=&WlkR)EM&t)=gCXJx5+`jT{ZLFs>F`R>{EBj^Y3)Ey*-(*3%K2X20v#zF$ z?GC<@dzI+77w#rKFXNh{)~|d+d@vDRp3o4V=|PvP;lgJg_hUnai7@>yg$=eABF@lG zHvNKdzAwr+AzX7v7|kG%E7Y3v_M6xRhCE!k_4*KMMTlim{=}Q?oT)rPZY^9^;^a4` z`I`i)<5sxB!8E8>%m%9FY_;*bqtE=j^uuk?V1_NbH-ohAtgSZuD%~OU3^;b6diBA= z;_kFoE&5Myoe{HkbpnECQTQkoM&0uQ8Q|xrU+(k2=HB5?M&B00l7E=wj5u62XV*S8 zBR#NDTA$}~0466xzb{(3Cx51LmG75P1>3Kmy_fI&yR8(?T9u#k5HM<5}88w4S zbK(0()a;Brpon9THn!XyCAvEE**HAC9`{5&<^JpVCqDTu}oe7PQ>bZc-Msj15p>rFBQ50@18egV5LC zOgqh6%zG808Tz~GWCbebNd7HXeTw!fYI%y|8KK;(lEiLL5e4L493N28U0gGZr;tLXggr1^M-9s!!MKB218H4sm4B$JjRCIiG!g!vEGFuS0pDevegk^1 zaLgN+YlE9n9> zy#(E=2^yHI9a|H{J_Wl@OwEvbvs$&CTm~(Fg7xQa6QV86hMT znAsS4C$27%1dDZ`K$^kq1Vbof3-9NZq4~H>3Cfvvv@-#2)VxA*ek77h%m*8_kS}lG z? ziKgHiUbAtWIunZrtG|PkzNW%W4beJ8u#9=&u2ez`(Q0rNDZJ+^O!V6nY@jIF?Njr& zDdrj2AxJN*A>xHTv0kp`l)Mq#*_}!Xud;UY|}yJY(w>unG^0`~#nhD?al0w6Xi9JfFf0BV$@f zSutcO+Ot=xeZpCxA{3AYnW?X>k_3TNjI?qZMH)la5!Z;d*fp^`z9H>Srqskpq__zW z)4sy^oxFPS?EA|2yDzA3nZLzjE4O&%G|{@l0Ls#-MBn~~qA*s{dLP`YIiOEljGiAs z(}+k5f)$%(?oQqaWV+U+@aFxB9CEp98aitRQDTufcJ6q}p;VsQRzkevQPIYOzCHfQ zRe$FlQ-($4Yo|{w{0~<6{IL)uFIYHFQI0p_Jabc#DPY3gNgr>zLJA7vBi3P=(vUKo z_Y6_MpF%qhEmz*|w_==na6v(V#C>}g6yTs*d)tOW<3YfUyPE-Xvw`tkyDARP@0`}-q>mgUb#PHUB? z1->j%Iq`zttQ58hk7u+^4IzCQPm#e?I7{TEM-*1pLS9NFGwPH|28fq&CmTd8c2XLm zEGvRpl-L&$Kae??!AF0g!Fx!nla*$N|$d%aGu^WAp8RgN{#5_Pg$TX<1=Ff zoyqJVO{ode4RXm3cfpTMl@G$NL9St0#zC7xVX8zmOr!kv>l-rb`f z7oKRv94w+%MQW(8=Idq*X3^>J#y}#D#m4t}Xkw0_EJumn zTi!TILR4Wd9WgT`k*vs&U{^sUMbr_QN71XO7&rIY;F)+!D8avM%cY=qr8GNvk%x$d z;&1RI$)1Et$F9}*P14OCnp0KfK+ct;LRSA*`R5xXS01xi(W=4iUSY3Yz_tv?Vh4Gk zpn%9xl6Ni~h?uY|5wJi0Xct{JaNE?SpMZOp#|SG_A&o>j_prxNF6haCrPmdp2^p0x zrjmu(3DhO(a#rS@45cC&Xk0us_f*SHiJbwsPJ@XHhvOgu* z75MjzXcOmepsQZCZ@W7XXQalViJj76DB)#?@UvqY%VHJeg;@ zdAJ>igUn$fyNxgDi=fel8cGh>DX#}LaX)dyFr(*5v419M9k*7VvCy9AjA}!$Lg@@CI&Ry`N_VU0tkF z@frCLR0v`gJ7>qLFn(7xxkAB^I*JS z*_@Q4=i!@;<6jz%Q&O&=?gvs#)(9*U`P*MX@<#Hv|8`t%3k`<$A|Jk>-<`-9`37R9 z1tO}s--;FtewTn35fxGh)Z!`!`35=TIz|hoBXu;<*dvf%XOgx)Qbq)#_Cgfq-EM`) z(L=a$Jq@KidR7`qLhZOhqfnkj{^gN!L_i#w^^{iM`^(w)+lV$1IL3E zDkbv2gMX$3>kc#4ak-&@!S|+VNKXUcx!4vSCe#vY4CMV_X%lyf_D`?ElnQ-$d*3{c z`8V|O|DH}~fSi|$`>_pPGEZ*92w}u1R5&E@ z7!}Q&R=6v*Mf^m2EKs^FeFJtpxt<9z>n)~*Ke!}l1TIRJA)@7VA%P z1K+V#{N?(x$+4=9KuQ(OUYTTAJxnNO5!ZuPXWmN`e*dA-;j+uKQA62WU&D&by>tHm zNggAEJ;BaL1_Ju8%k_Wme~JD5-?jCeqGEy^9PI40tc)Vev@HJ#>;>7Gezf%>f>87@Q({ulX3WoJ88+lzxUI|Yd^|#kF zDXDs$P7^VAZGbG5wGwJ}54hbG=kb^G!|-ZNigdINZd63X-N}oY{I^2(S38fT?vK!^ zo+p~f5M)pZN#fE9FhYkRqDwZQ{I&(>KM80Sv|s`p84|g;i9Wr z!{HB`x?IwkYapp9bx%2Ya6pFK+UrqMsoDA6Sj&Z5xxehQ?q$h!-t^|${A4T^WZ^1`@l20 zI1T?i@wc;dHE8v7^*Ki88}!!Di517-Vt4Mk8*k6l_eb~YByCr;(z9v*r|u?)xDLCj z=(^YC`R%OR{O0@ID>e(+#?$J@(hb?k+}n9tW9WEYTgw11Y%sG|8N}t`#qso}V^6sO z#}if~HVuB9bVIRrRZq?ZAj`gf3Mfwk%x=h0Y?FBzg=x<-1x$VV$DK?y);B}D` zr5Sy3KV{m&9INxMl6<3lkjmG#$?Qa896alD`X@!)?jC;K+U-9wG0b?{Gq)wFr~ww? z>~opjX2th9VM+=ZC)r2ln}9JBC0O-OqeG@Q9aajm4yrdDop{W#l2~H0A&6LzfK-4x(eu9gbRJxXkVu z(^i`Al|4LuDzMVzd0AxEVHtd><4T`7q`4Np4%)izC|um%tAPELvF65F09%}1EtX%$ z*-8WPSiG7v`bfXhXq#(_zopCe_y9uN?h}gfVjU@~DrbKxb^UcYdR|^`E_KaoJ9dY& zd44U`zUQmGldDAAYyg%DcdIEDH_{5|`^jZAvBxG+kIq&ubHosnWjfk_ZhFzy)|bxs zIJe!W3xq_0+3nSUy52r2f~p#fhuyW@7s2106$_u2koW-fg%=1bXbMM z`zMCr)L+2yF0g6CVu$L3Za8>4c_|f>8zJuW-G6J$7_;QH(k1XL0wl6xP9bt%ts9f< zagba-@BV@f>dv?}!`d2|xex}WR>IJ@$A*ABDnpP8Um4v;1K)U^w%&GRuH=I~sj*>A zrX*KG?d_3`cw${ohcxK{){npvXfK(+M=V>?;#e9+jAVyL>gVJSX^(CSjFG$ZTiib7 z&^6av=#X6bolLpD7R>(d+_0KP*$|ziqqQ*sQ?%=u5QYd%BnY~Cx_GWWnbb_zS&Z?# za=_iQ0SB$^M6L>7e;2+vK8{8f6AG=@bF#NvajVk=iG5EUl#~HR1OdDu#sMX}n-SJH z_&ex0Cm?WhHQFpi6OVu{!amIWffT;8?PAD_f|4Z(N7kS&DTN}GDRDozz<~~7o+sCQ zWagsa6xxsYBqTgf8Vs7NLy=}&SlsJt zC3tM^AyV3X72=CLbC-Bat7~txj_()3r3WAo2sEIi#KRW@;x(iqsrWk? z&Nc#17_Y;QQorEIT1+8>qaT8_q$a(~P6KGo$ZeFq=~pJo4?%k9u|UJOq}it+^rL;5 z_=g~EyYcDBsl84r3;~_>$E}#a(X>H$M%)DLks{_F;Q~24)Tguw$Zw{ zP}yh52^<$xY-m*0!kNZ`dk#S&c>@mI;L+(pl1B!^9EwridMioICpo3x?z1rnV9py! zaCi0O3>?|U3=H@mbg!_6hR|%v*b;&>f2NG|pg+*)!r~@@0EI31_&kJ0+lp}e{n&&? zO&pvI#736xf~x}uONS$!j3gPNbRgr#$Y#k5#i@;Sc}~M`8(YN~6u2Uc8{${I%7IhEhF+w83Bh7Wryt?5VvBfTO&E zXiiXImml^kDRZqU%H(J!ddbnV)C~M!Z<0wI1%o$WSE`nL zm%z?YE3+#PiJDyQ_xj1v5x;osoVamkH4FqFU}J}qknAlh!dhVru2^OiZ#oTgSr6xk z5Vf^zuxdNJRC-O(yc;U~eKBJcJ0M4>DonE2kI_)4m4@oT+`t8`G@z#}p?Wi?)Q1Ac z6|KGc+{zak#;Hq0O$6OMEfDyec?BkzVRtwmO2K8oQUiRIn-|ikuq=(i8=ZyHksD=h0T~ltsw$Ha{2`FfP;aNup37KD7E_=)>H8B z3w=C|H+_)TUJbd$nOb^Fg-G*mJ9UVs?2w#+#;veD6-s2LNsgC)VAngqJso<5!YcmKfpPIbhZ4t4|S50s;KSmdgb&^%zK|ACSdYs|@82%GRv#9(50G#Vj* zk|AJP)GAEf6AGOiN66MvBfqud@f0I$Mf6+17@8BKVgrzY{KBgC z)=ELrN&W}>P|#tepB!nby`srGjZUVuav{D_8sKxe zmIXL^WopT5pIn6rYvEJb@mDwy%47iaGf^=8B%@K0TEtTJ!L$x}B1BXCb(`_7I~{td zG1%5{JP!R;=`QSho<_m5wOY)hFXCahO~SwsPNr6TxNl^O`0hKe^pU~t^9%ViUy-!D zP6{Ad1@>k?5CE|&<5ytqSK)IA>D`Vo9$;S1j|kcz6^(G4hnW+xk$Y+Om{LU=T!;^t z2RW(zX&P~V^Z_WsySw?78w)!1JM%Dq<)|NYFk&jz8EQj&RwF=NDNs<>%kXFp?W-b{ z{fRj$=?M|-!Jotzga5}H(m_ZG`h zCRYpyL$V1ER-?QZboNop#AeYyqC_JGF%8t-k@sdysQk_E2pKv zHzIYh`A(?IOe{^pQ5CF68NYTmeG_vN-gj_|8exo0UuZ{B-boFSy*1_>TEgpMySz;c zLg10tpnMV-hg^&qm+8*sYtRK~rV_$hRMKEyJmyyc&2cP*6?Lb&_WOi-F!cv|Q#vrT zjYc(i#fB2Iyx<9*^&2@P!9rmXkHt006D}q}Tej+T%m_h#&bpZ9NVx^U1>@n7EF~nU zOi@A-XTB?VSHM6-7hFQ9Kx`T*@caN$z_k4@J6`cC`@c#AH^|RZGJ$>4NK_t97!#Oy zRLf)l84|ES`E$8F^rb6c+|Zx}3Ma4t4ceB3*`)n#IH&_oCAtZ>9vo>D(z1u%Q9p9Q z3oC!q%pb{`t=5Gb-m1T@G?-QQ%6jdJCjGkjBMop@;74uZX$cS6JRsrMFw{#l3gR#g zRr#oN!NzD{_;W?|Di110d4ETJ7c!>mbP>%I?TTRx9C*@MLMA>0Oo#R?9|P5&G6FV* zo=*a=n0w!gUm&scmE+O?(}zjJfaEUvf@{mc#GitnxwOjD_g@vzw~0W`8Qd%*?zOcP zNg^qKsP$++(}IJtUn8SjuauI&WIiT@okFw_GtHnfRZKidvB^%v)8pcyIlz9<^~mw$ z@H$1y)mEF{$5t~2)Ex(Le;_y4J_huvAK35xvecM;eRoO%Z`Vc3PZ6AfIx-J$untKc z2lYsi&=&^{Hz_yRe>Z~pNdPAkEVhV6XkW`?#Nxf%JI1ufH^kr6(8-M8*L+>b5D*(( z6>Q9Y6)KyF)saxjWw2XhoeXk)6^SvC9-<#(g=`6Go_JMLqV*Z2mAA8lDa@~AUMKLW zm0T6_X4XH_@@5&MsPfjK5cKk8qi3kzh(ux_pp8R84>V14u=qX#Coqd252w4i<&$0Q zZc~a;o+`1HDRuoKM8G~#j;QX36i!8P$#+SV@s%4#vdUO}f14?%bzj`QJ%%7VMGT2^ zNoQ9$&Tpw7SH@iR<5p$}a!8ZP-bg8~1GUIH{C7(I--hgLl7HDzWUt?}!U3>$KoQR5 zl%X;iHm@(+(qWS40em~0Xy-1iB8k9ppjwT&MyX@{Q&1z0v48Diy>7NpI?!s4)z5&x z$e=c1kTPgw;8|;ZRvJJvy!Bi_sf2P7`Ae+B7ZBK;59AY>}|@2_0Pxfey+^N zAVk%^{qycBz$cqKmhn22dVBrn{qtdz`q0%NoD-w#yM`s&Ly?g3*{&(q^-2Bgd&pfx z&vGbbI-H0@hl^B_j7#tSg)hBe^Jb2QGGhh-(8JQVg z7!8t3gAlu33#6~GKPpODLI60l*)TCkAfF`S0#WOmvkqcdckDhdYAX>Nyjh<2NjAMa zM}2Q&7*&RFXG&SgS@MO04{1orwPLm7$?a2fUR32tFRP%VThCV|Da;tBGId2=!&zd9 zp>0)F$s@L_8O3sNn1hiY6V44t;6ypZnUmbl^z^FR%WjrX;ekhABsf6Lht=~N77uuf zdE2bkM;{*(xkZ*;2;_+QbT{#pxGgJKH8L{{m6+W-e$>Gkr zACj%wzxz&a=#*oF##oV_uPU{D(Tsy%xth?aj1INk0ss43Q+U|;ff+dcv4obtnfx%) zw#8F<#CkY+adlvG#ne<1uX^?qBI*hTesOQr2Qv|c2KQAJ5IHR-eIFYfuD2X#0_!H* zpTnkY@eblHE6q&Ee@L+1`{uHQP%(#;Vy4LWi*eTPvrEqD<9vP>6&R9#Vh_^$EDP(q zjfgGl`6a#ykJuF#Tgr>4i%Q3fvt+HXMpI^^CTk{`l=H6L|0biLgN9G#5!DZquyvkN zsmY0xLhkx9ZUkuXLPY3@djt36B-)dq_JyyArt01s`}iv&q-`q1@Zm|EZ^!w{``Sp- zj(*bhTNGPts(kt|$F^U49yjsOH~8h}Ybx(%=lw1DZob`}3%jKaD-jO+@gGU&b|sG0 zN`(8!m}8FH;M$qwFbpZSQRF{9ED6e5A^U7;GC!h-0ugoJfOJ(kJnH_v)3THto0H1j zx(!jRaI#!<01a<15Qtx&hB!F5BFY-7leyHAb@~pIc~vt#S(eNu`hr-S3-kZ4H)3Hj zt1>pd-)8QEJHKTnD5YTkh%(_UZrXpEgVRCTl`wfOILyJxhdpN-QB6Pf)KwZQpV~P5 zCE>QIg{FP->2gb`OP5xq6E0sG3Jbd(qZ7VjXqwSY!XG=B4Vec?5xcKm5ih_ICaM}< zz&A1I8cU`nhFyi+O8T~RkmRHvy6TJ!=r?Cyqh5{MwzRnEa=sp81)Z4cA=D_kztR#t|FD6>{bKfhd_zVC>tYLdRzQ3e z5A;|ll8#39lJ#d3-ePb2odFk(*|g*%dF8~56rH}O(b2c}VBbYa`fw&%|I6DLrnN4P z*OQiN*1=i`OU=x@Zk7{`?)IHf@%H^28KdX2RE(KgG~L>GzN+4Q<<{=Aw_3W+GKz&Y zZ*^Wu6Dyg(!%&FsT+z$J`H7F1FH(r^&679vN$>QL6lgg@LTAXZN4cRvtmw`*prYu`25{d+ zxc$<}QpXAT_>^P)9>X%t6fzjAM;e$6G^Ry(HUsnE`6?8TPY0lCGtmq}Q=+JEC{TB) z@7KQa*QWzjl?7}}=8{N#-NBpLMr>%uG4m9w^c3l)sHp%bz~8zxNrH&Q+9|K#!Q)|{ zjE|QiI~$hi6d8ifBy-G>4IxW%tWX8F5Mb@(&p#LF_$9}*>KbW7id_+Br|2kXCW*6cAt!u&dw!B zs(p$5oWvz)0(V!Kg4oDBfOW8iJah-wUaT$K?9E0|&|voR>Sd}+HTV^t3O^?4qrS0= zWI_NjUeFD~NUgzQuE54I%mM`{6z>37h;0e`m9dMC$+59ZNKx>Q!R%dlt`Ie@K!}2z zYYx?+Ygt*4NK%ri_gX>;whfgh1RaO!bXAcZD>+>eVLF~x6w5zP5CW8ywas(Hp9~1^ zX0kHjSE^(Ao6`wvqXmTAU(_=39Tn^432R!h_D|}+$GQp-3*#3{#x8%$RLA9m1F(`I zZvZ0Tawa=f70NgTIF>e8L(p^3eAYFS7cmtXN9rIkOn>sXU2>$Uu_O7!?RE~wtQE+5 z@0I&b5&l%@`xy#sN@hrc6qV?K^JF??x_?c5zHsX?^Zau7RQ^{8w=aAknNhfd{+~P&`;9oVn<#0d0#SD$grBj<%;ir_D*q3a{won8iZ8D7puQ$T!xP405 zwf-LC{fF%G13J5axx;D5Xj1RwZR2j;gD`U$-_+f@0(x$7OgPXP^W7tzxc+2&QS5Wh z8p3WQjpZBcfF0t9^FOYOOFi&4Zhe~aS+|sOJ?;*PXR^JChVfuHo6V&VUF8a$2@(sI zko@RA4AzL1`N8Kck?vS`DgR}wxKLQQG_=I z@4qLIbV>oSNmN));6-h01q3yJ5%VXk?<(+z+gm1`YB|#Rb10Nh=^LXDxB=ETm8lcY zD1vfBW44~9xUXxYZkBx14w_gc<9w*Lp-A*PAGdic=ziA5`-0&pvFmbuHxN}YrZIx; zdarmX+t20KPFl`>zZI$b+bjnGUt%omqx&?nt+#3qke{U)Vb%5%gDZ&|*bxC!3;GQc}<*&EAA)DW?D?8sf4?^FI=6=qS!Fj>!b>4knXI3mDnZ>(p_65l^ zpZ<-Mzb~K?k6`SotBXIAdFVRGZMjzqomQXwz4818W)H%Xf!qRBKQDg5tKZi|rQ6lps+j>y~+hnF#cTRW=TX4Wt5)vJN4cA;2F!hC(=v zk`(l7iR^?xwIpG!qx6O!vEs(#7~-YLj4xrb5Bf%l6TUYbrp7*f@LE?8SzNLj^x@FfjJ^w$^gao=mw;Hw15d8SZs{68Mi^Ha=6+;hsb zvAJ;{kGr=si#5f<`wq%+M`eeP_qi(91Z}L5Uk>}YcYx#rf6mx>!xv_$zKx|KkI0@ z!kb+mXFgKio~ln8+UBhEWbE;9gHRaHj&eH?)`;?O3r;qj$?)2kF7D*XKOq~=ymV`x zIyJb+Jpkjt9)NCVNMD8j+dRS1aH0R~?7~8_F_Kwb|Gk%+MIOBr<*Uh9^9ujmD(ilY z`9Gzmo}>>m)p+l~Vt!Q~{m0|E?wH(l2~YWX&F_i`6J!N0)9zo=TFcKw$amguVnxm% zu&p>rx&EH$`gmz}y+3XLT-F5aigNbuF84dV)MQgvHwe%2`M_}rVe7cRyoJ^1EdW=m zDtroQqDcQlkAG6Gk1)8%zH#7$A&cA?W2AA(E88f3>-E9+cahnO`Y}l7t5g?^F)O7` zPj``~E)7Y76 zrm(pTa)p9Gxv*_Vp|6aYJ1-?#lA7+nw}8~539-;E=^j5Nv651-O{6pjlTsES=?$W6 zp!2i+jE0GFIF-k{%a1FEdJ zfYNh4`6R}~pxj95i%tF}dYKNceN%bU7U>|mKye8%G!~NI>yStQ41b=6(#brAq3&}_ zlz#I12-cx%5&w+;j=(QDN`T7bch43|MLee-CV>If{@HpU<$HOT2$(K zr8lM%QBlIU5fslVozElzybPQ@7}Ga{%nT%Ki-X48ROB;KE~x_w>!>J9v>?2;Ywu8% zu8@9B;@pYZ>+yBg+}FLvNUGvE)l(Aot##9~K7IEV92uM-Zq5*$!3JvDkyUzkVDHX6 zH_hbs>uigs4PM@7kue87cTqo#x|X{~<}Ag}NW?5k?N31EHRX(e_gS4y89$O~IH7t8 ztNAQCb!~~dmFNQ{8I*~9ls~HvVB3_TIL{Wc`cbIF4|L#JNP*1Ybwi0(q zqtlSHR4Q-<72Ij<^uhUbXTq8^5wDJ+6E~fl9nYVCT7G)jo*eyWw*lblW^W`+!;;Ud`_w1y`I8`{5w62z$3TT*UoLZd&I$Wgcc#+(qwm&TKJ^;<>K32U7dXc>6i*N4o?QI8A77e2 zxOUwXUGF69xLSptP5e#8D{y?{&2Gl8o80eD1(xI}R!h}<={{33Mu#uKq|NEwvwzUs z2BFY+5JxkJ6H91zqt($Yb~7G1%1zwg_DkMpoW?bs7_*Lx{JwK}AGmRx?={aovE}6K z1^9Ijg$46Dv$S%xD{+*%3HWL4xrE}o%wNbSQFUV=o*=ynb-H?dy7W3D*mS2X+>^TL z+2dzVUtsV;q1SzluIU3}mQKxFzUIxMi3J1BHOF1o z0%s4`clQjc-FkhR_fH>@H#&DUF(%IoG8=F;-f^ByI^C*#>Q1q7_62#e<Z_Wm zxf+?gI^?rz!Kvz9RyfZ0{+_hGZ=UpwhVAYeuD5Y={r(&-%j@Qsn*o+;N&`e zhfi96b^V9Hll|e!W!=_%oUg>Q+y8HM5?{^PESDUAEA#K=B9_LJ9n$p8GAUl$6HG{# z!?lm+`_bN>Mb@>)S=tdVUiG(@I-2gvGoPDkd8I28U+a39ICci&5=xmi(ZAs|j%zrD zq;Zje11gn5lvXzy={+by3PSmk*`>SeXcvt(Ajb6?w&+MZbnr0Vtrj zP9(vwvIXTcb-Z8FvOkt8Kw@xGw5O)Hj{D8KO!)P~PQUL_Yw>_|p`Hw_g!HIBQylWG z&YzQU@M;S>8ARjXT15lTsmSzXAeb!E!SHOv(SL57=VXzQun>oVHU<@Kpc|)1BWgRt zTD=jLcJsavk>f)}91^eI=a7`NJ456jSkAMf|veJc~TI%U)@*Kw9aJV`BD@J(aC#FqO^8&&?=^WiXZ z@|u*5M2R4b6dkWUWy}hTl(V&=9ofd^g<$4a<7=%be`5&2IN*-X-zpLMLY+%%6phY~ z;1?5UqY*BouY01{8iaZPQ^A-99qQkIjD|XRv;ZTyJnp zw!bVWgAAq@@-s)BVEG-LGU+uP;7yJ&tzn_THrDZMdnoH(BlNRC-?XI+qnk`BZ!e zhXk+Q@+bQKhAJM^*3)G1JRam$;*}2x>Gj(RH&ElL8w2eRPTL~ap87N}gvlITiSo`9 zgH`U>G+yS^(+;ov#h|`?8`(8MliCZP9)k^?vD*f=V)@Vhh3CL;P4B;yCmV$tEzx*uB5 zr=bJ=YBh@)p2Ky*xBK$nf_1hNXO(gKF7yW)^dlLJh_`)wccbHyxbf_-h+ISUewD7H z2^|G9rzHN5!-%f;ZEu70WuE~zg|ilo*V$#$rs!X^4As^JAUPCgxWOt4kQ4bqMFZSq zVekZ_0NIJs(0j_U_NcLTAu67K%81*+f1qmT;5m>ae+M9|>|k^xvMR{$6jFG~=ZRU; zC)ni%J}dN1Pf;B}-?JXtF{l9V_0pCkBr8zaK@SXK(?eVl)dG}U%{~$;+y+ZGXns+Z zD3kfQTja{a$cOPmB{RX+BJyKye>99F0Q2GoJQXy-%Sj$$+1Eipo00&P%+Z^2mls|KAbgH>~bfF$UQ6=C8#DPgxQe{jIuPMENrgHKr2 z)GQ|Y=9M|XKx4(ix)1*Q$>JEVe=TOf2x?s!*4hYza<%ES#N~*DW_UO$6I+25UIP!p z=qscsRn42rJJD_~?nLc8kJYG;P#vNB2trVYlMMpBpOhP?0_!a>%IM1gJFIBPK*7fe z=9YvW%0uuoQI*q2V*~F)RmrV^@nTb(ZGSoye*TS4<*q6ZAqvu!#2#Q%aH5T0`FE2T zRQp5(Klj}!ni7+o;{$1lDfLe_ydYmlVng5mV(XovD~q z+qSimRBTt0O7f@nZs$MeJMFs}ck5!!(Po=t^xog+!S30HM|eU%@_XKr*SbizBXElT zj^B`pd2KV9w_YkFH~GS~=`Q#z*XADdhb({vNn!|)VKr3KND}XN#VWX^QslJ8bhcLL z6iI4%K?_hx-Xla1L1?fA*e8yQrBStmpd_m&wuxkz+L+$G8q#P`76eZg8URPZNVOo6 zdAmaptE531B3+|q575r+dj+6iv+eq*w&OR2>b?2?1RteacVNsABK^be6(;FP#R z@$m*_NOs*UAzVC-Oi_f-EGUqJ!MkQO#e<_1t5>OYD(KmEk{9}Y;d$*F1ydD&zK7EI z*`R!j=B)yG#@A3p^Td*v5}B5xh>JzrWXtJE-;EX8e^I8^y$2nK28sUB7hwfck$u2{ zwt$$pSB8?YEzJanReFU=DNpj6R+9=9A)#|V_aGS=$yTg^_L)RQLn%sxY7@PHjZze0 zeH)~VIwUCdM1|u)Ns$Nh>V&hiHF}#{H~T!q^wTv>}=Il zgP!@*E5a()(#jE(f&{KeI)l_|Z7o{3KLj?U9*urxRVnXQf3EudGMeIj0cr-H=iw|h z+@PcmIChWc;TRP`Vpx^eK$`7-cOUG<`ML=IgrRYps|sr?(IsyK&AaU}HMewxzjYs+ zr4E#zIE8ak7w=XTQqUn%sc=yato$AwR%*j=vr%f>U0&Ue($Zg>q3c%#E`woe)gOAY zVNv*zec>j1WlnSf9aLHC<=0x;uyUqr&#Ayq!zfLzble27(rjhn6 zU%DHh9eF1bi)rj@vk-kyM|<6QhVe}+jP?yvFExEO>uhIaY$R_^=ndwN6_ub*ZIBf< zhWEib3}#WqMWG6T8(X(;!{HdG3C}9b~nis}MtkM49CtmYDXId zc>F3yK&i3>Re=}zev2QvrrN2O751d8A%;u|JoU%+co zT3(SqFj1zsUliqrjd&kwWOc)1$9C=T|{=)XRh)s<|seiogtwH zlUoSqSH&G&o_8?`UFV(YLo_d|!}1^yf2}B$f-nP4F#w%ujBrp|gI*c3YNWGI!ND}s zR0>D`w_K?Xqnnp8vHqNWF`>zHQ1||bqKnZ$YGFqx(1w2{3-JxC6 zXZjqz1F&X)8KE0fx>8M)G?r!@JE#H!#NC~gDfylt^4^0`7Bqhmy&rPE2ig6ihQ6k1 zS1J(RH_pW3N2;pwmRJd@+`{+k55$j(uH*dd^726mP9n%9Y#>;~NTHk1N305fihoFY5%2@LwBUEDcq6G_F4 z5_9`T>>2Gk=DSy8!GD$n^USxS#nOzE!xXLWDfQ#FK~}WN zdA__{d3v*7kD`2|&0up!JoKT8pclS^vQSw3UI*2JH0^7bd|KHWmm)Q4V6Ucp1ZH{b z5L#0)ci9(%Tf>_UMMw3MSLS7al-`^{HM8|1TTUlC-w()cC_t*=LGSAs{O)ZbY@#d_ zu2943EN`3*Q~+1*8y-AFtEHTPW;*`iZ3Jt~#XbA63q05Bu?11cJu|jNKZ2I^f*9es zpd<$hE4waDx&}cr2Vx_Z41CHa%Z)Nh`)!WNFbu0oX4V)ht99le_Ve^OZmJ#{fruoW zF{UCivSo8jGBRkj`t9jl$1W2#?YNHc?lqCa+_k`*RT!j&`7ett$_dXaWF~5MxONsH zVOy8UQeh`3%8O`-Jn8A+OFetKvV6JIuv9O@krA6i?oovZZ)QIF_Hs?J7C*(%fw`Cn zus$zrB9in8Rdh*q_vU>+WwBv#Fvc1(a@2!O0HAWfW@1c=)?`=$Gn>_3@#iSzAn`9$=(gavXRKoQIF&2gitKBMqr z3mD_KCUVYf1+w#hH{M&l+xYywIX3+)gZL$)RfSTEt)xqYH&}Ae1v`PNQEpgV9Jt1@ zg$2u^mRLDPs*+23PmpaSzf)93^r8x{Q=3w)M}%P}(d@96EVBVtAv38eDyuS)9NYd= z79;;PIrfiO)&9GbR}lCL$4agzBtIh@0rUz6k~{cj2?qhVvrQWPipN0lqE<=sH7M+B zOkdAw_6s=cW*jzk`wXTv6RZd1BFs;Maj@5I7XAGGBH;`KC?oq=UlF#&}HTz-8>kxHJS^vBa{+`t+eRG zHYl%{|1K{BAjiQ^m^EL}js74LWL1AOY1w@_W4^BCm)3hHNN+!TaZqI_YA^96owKEucI`Kb~vU=u|LQ-kJ1^Ocz)v`02T+P!(YfiePdI7rbn!56nC-R3?rM7 z4waND0Tl@p_EMC?jp;1XnQj6T06dEho{`qw z$Bc#FRTEicw1Zi#a}C#H-3Xmou$Cs-_GX8D2@Lo5Xtv96%jw`*F%|VB zIBEmAUv3;XiWaSVI|~^B`+FZF$!usIX>shx(IhjhO3Sg#t-v}pNr%|zoOGhB9*x!a z%Izck-Bd`cpu3122yfQ>u5Jy0EuUV}P)R-=DKVhzCrDJ$WM%r0leEknx%^yrs@_kEI^3Rqc5=kXk8x>SaE3n z)2A|B%uelRBr{IaByxkvdEoaX<;x~>c=2?VjJv3ZK{v#RjpBcnU@@lp+#@dl8DiuV zsne-sF<80@m(!yAQkf60EZ}}mV`q%Q?F!s{Gk^#oM2P}9*&ED@dy|no z19^txv8j+YPbBf?9Rfv<8enkklB|!(B9wxeI!2`~-PN~WUPpStcM|>BaZOo-?(uIVxojliBYvOP!w>j;GG(!UD-LM8XUUHa7827y zVm4xs7nfH$i1j2Ti4v;shAbVi+y8mOn=+009D&(^Af>c$t-NrM)?gn9@U7?`BM&g2 z$`<;#h5?`kPm>256I~P4-KU3Yvnpj#nNiWXHP(Ef0>cHkLkzk!j0;02gVD^txF1gD zNTF4U^5i8pW4a_y?JW2i5y5~u89*5Sv_8)UJuo~kE|=qV{v{*JB6m*H#b+h719Jr` zE$j?)miNfBori%2QOtw{ZqLuQt-TnpKi5S&EYwG+Kyf2rfWR#4m$|g#N$Dz6@?E^E zNU-I(HnZ**sBEH2t7r#Jw;+1vyU2!6@%}EpNCH^HNPxM=E4UYq*r@1kzR(U0OCf86kEw*_4dsuNHq^ zghYZ*qC$a<8>y*@{!I<+BAMJmairG2sFGL3e6*zXR*eiBLxK%?jEb>D4D z{m&pJLx5fh=8a@;5Lib}?W3#)W!eW5Z(1?^=&A&U8d{#D$5G!LF!e+-`9^dJS00?V zGC__*Vn6uxKa$wVSx$^JdqIH!Z=PDl)7i#Zh1XKSy6MRMXx2FCHL~VUG)^N zotvy!i)Qb~JvrXbk}UTXQ=h$y&Z|*OTpxWl%$xIt&7%7Ai;dFr^H#a~v4^`?FrCh4 zh_=qE-Ennd;|T}t20)Acb-atm8+P$ zZx-`x)ftrB$dN+9{;-u>oPm5L4>4um>eZ2_x7U52-23%a=_`|9lBdaClco~-RLbrMovWa7`&Xvd-{pS%#3MjtJ~A{n)N3`-*d?+DO5M$NiS6b^)rG>lulw7t zD}(;c5A8=Pws+$VHsAQ~7^n+<=ZG4AZ?{Me__wYoR&r`0)3G{QII3g5_NVI)wYQ zeaier@#sfdL^67>{$M_#Wk^E4r+gOA%HJNc#&_8tTs$sKdG@T!RW1C1FevQ{SlOYA zps+_D8@T0|%W+q2>-vU?<;RU-g|Aj*8+@p{{WBKzw#Ama>CfmRFk*Vd;eM85D`e>0 zK805^bgqfBT4_H%BkY+s``BM^JR!_7Bh`0W;oD)_hsB2xvnJHz_UxN`g5uW3>p?=U z5O!s_t?iFE?A|rinrj@!c=_f&nH+dT?Rk9D#I)QNzG-6bubwD`d>sCKd8^+9W$RF6 z0o$y-&mhqV0`I%)6}7Ex-C_$w#ygaN8K%>0T)wx>wy&q7hl`6G2LG3)+KVYQdK_6MXDckQ(Q&583Riqnsdp>-!!qYwM?v&ua|FGIQ?EcTk2vvUT5eva`ubY+M~+Z)vXFHUTvrqdI1 zY}YkalC&k8Y4*n6zz4oZDf+5lx~}Ty1cB`f`6yKlk*xym72EsYSKF&$|HQ-Lnbx$~ zR3mMdV*V7dCXqzh^xWUkJh2Man)yGCI=%t;{oBs>gp?& zP_e&85*wzFiA@E+TO&@^zJqG$Ga*noJ3GhVBfetnP7JW6rs`;6bl7u;zNzYJR%%Zp z)m34%PQT4o$}b+w@A34t*moLxY0T1fCPAs49im)?kqWdVz+7T|48oNwO~+rb?@b2~ zU839Q{xlSNS!ZPWD1n_D)!L~eO#s81=~5ZXNsAM^7&#ZjdN@ZRI!0l}17XZO4D?G3 zFPvymwWf%n$pSeCjlpbLf44@`(s8Y$+iC1~*X(!+R_d!K4P1e_B-M8QM!{u^Pg$|(i8eH4}6iyKO?I@ zxAiitJ}j)HS!=F6l*qwrpm%Q)3|~kCYhj(GJ!4VhRa8)uH}=v=J0_251@WT4KNS(# z0JQWikD?|5m87E^Z+@B#$0&PVg*kSt=l|o0Z4+G-mk0(nN#Gm^{69RgiU07#Nd7NR zY&*gS$fImhd-`)*dNh`sR}Vn6PWrE*am>b!!QVV4-q7=<(qQz`)^7^@JAM>soD;CT zBGI09>w5AOG5cx+GCNu8dQ@HD0K01wzQe=g#25Iq{T{D zpV=^EKn?dLs<=4cS-S<89&!j#XY577Jz;aNKqp^Vi#M z`OfVhAizQL0j<~UFN61BaBj2sd@LLdIyOmt1I4~%TarJ7L7gyaRsLS6IY_7j)HvHXg|Z6sn>qqHK*+Uy>VE-J|tXVkiplm z`Fdd9?sfPp7(1a@I_fcCDE5afw!YC!ni|2g7 zT+f+oC)-(;C_IE5>ABjcm6Fl1L1oOCxHT<;U3e|RL*>M&8pp~=Xq+tZ_WCF5(0h;>G7BrWfPVKB z9ta5X39G;g3Kq3O*W%A_g2@dGB50}wm-#bU(lFKW2Y*1hu<#HS6Q!TPEYvSrz!aVF zB~+qAXK!X{u?eY60KXbrMlal;KTT@whe{f}s1wO3LJFzGV;iec&^?IwRHCw_fs_*% zNARs^D}WGn0!%VrAWzQX_k%6Avb#5ko4CrG3lo&mtGokHo`;s4~hY zh~*Fw@}&RA4_hWmYUu#%dJf8lUo((oC<4AAgK)5a z3Vs=FIRxf?b)X(4<7{M9C-HNKAXQG1GC}1m4cQ|EDFwwUW3bk_jOS_9OP9sKrGjv( zb6vUg@V2m%^V9v8AJzyJ@sA(2C^Jn=N)j*qvmjGqoD5yY1=3F)<_-*aCzK9Kv?BO8 zS%Vhs@awyVkt2Z5)_mq z#~k^@R90{1%aG7I)TG47(60NjD5*a3i!utje~IBs zS??FQPgM3(AS=Rt`}6(wx23j-B!y(b*E}IJ#s0(PxdzjXZTw8;Y8(xao(O}dQ}Hq{ z<`Eu@L$QBEvVZ(NEdrOu%hMdVN$(@3r}Rn#8!HYEG=V#39NGYSj!7 zFDr?6fpOkZSV8eGKIBqIutb^M7T+%Ogw z7-r9nDi3W{%LG}`dCl{wlvKa1bOo0S6*aEWNw@38dFfXFVl)u0Q^lgp1l}mn0^$q; z-tG3oC8HX|xW4P5B;}>?UZ8kVL?*VEl3CmMwL`W(q)f0IQ5Z97flr;EU&i>c&1@9; z1Z-PfDcNWFNW_l;EypEMNMbW@)|jVi(jDzuZram$bV>PQ{YNd?c1GxX!@8`Qx-oDr z*)}KIPr>nTfS4h5v^0IdZb8YaMbZ`5A@YSQ*}l`MG43QB+u=@P!6;su1Y-a}+qhVF zoSHl-J)$_pe0(eK$li?ucl(1V!)+vHkSf1PW(Wya22AUHxa%-4;Zfa-bAVhlQBg2P zhlEt2k<~GB3zPyCC5eR;xT=IDCVN^NbZTmT(0U266(jS7!EDVB!^*v%+iujMfX>jx z2;n5&Ow@=)cf~K-BFIxdzNCJS$jFkm@|K>83ugx}-c#ZaHnjPt zY4p&Gz*LnP*n>&Dr_BzrI^?MbU&O7v*e8~Zc+!lz+C7T-Gk-Zs@KP&a9xbQ`@p)+k zE7wH=SQj2992(SVbLKMAH4q}&;g`s%#3(V?=-^VbKrW{mvfSb#WwvF}1;sty7@OO20$_JQ$3p2Uqo82 znz6L8D5lb|usuLwt}0UCh8_7zsXvdyBDP0=btvcxAHbk!B(?{eZ~pi2{FAQpi~xJE zRPhxZCXHJ8jJPhakc*|L@4M=yVtn`DFWmJ}&IdwvQ{t)E;B|HFnS6*0CT6F;Ceg2K zTc_X3{_9;o8~~u@`}IUM)Z=^Si8YUIFbd721x2k?-WjSA9H!w&7SrkjJL@|>5RK-u zoeIVZY%X)Eyhbn!Nn~=OBNa{FAe)lOXE4tG6zzXpGhL~liZft z=m(DJ2(2lj0-(~rv;AV2`Mka*u zeuN1@S=cK#7t*XcyzdSxZre)7zvgSi6vC(AF5snQPMpzF!@1x+h)-tC9FFy3z?}p7 zxVZ5|1fXKk;h=<5H5{i|p|ZTJ>7f;0N@RW*{8>*QM!TUyUc&^{PDG?+rs6Wvd@<70 zc?1=15haT)$o0SFh?oRAC%$Jn*NEl{tsReI9smQErqn7EadN8ycLg%|+jAD7%p?r@ zrx{OJ4C&59N<)#xd0h8+GIhJTeRJa%Aj)6r5tL_Ccw$kI>!ZI_jp`xXEH2_Qd>O5m z5ivPcOV}!(cs2g!77FDf@ianAknD|k0TFSD;ot9u{+)TYTl{|ZYq93Ldk7`;KF&Be zN%mb@mb<eNvZSw554vA%TJ8ov!sVA4}`2Sk~e{wNv_RZH>IN|!$+BE5vR`h%}# zrzR&WqogNFQ&Uru`$2yMZilpfX%^u3mtx#Mk9}+azxC7drRO@XYSLr~_IjCv9Zpwn z5x%tfS=f)nf4>V?t{2({={QMNW5@$j(lw`8KeR2tq9}5)5?CrKm~27hoTa030{ebp z4DPIAf+lc_uRnpVr?k_Hv}EB795wP~g1V4WwX6h}H;ytIYEXqJL6M`!Hi#?`A*1Qs zYHE`oNtA9!_G#OT`M7+Z!Mi412>1i!xr@h+Bm;vxtT*onBX27y`u1ecIaKvpxu-RB zfQ{8$)`14I_<4J}u@l~E;-Ln6>bLBD@5nP08=!15{`_V9H?qq~<$FQ%&GY(KZ2I5J zP_qBSl`X;{!p6iUAwn<0^j(W$V`FCiCfiGh(sPP)v52sUFpCTSUstwO$`)7h2W|XY z3$BeP6cQ0|0BAk_w=EkXW9{9@yCj5sfjnNVIJnriW$4S#AUQRf=b}OP3UtTb1KlB5 z2;`MzZ)(mWAhzt)*y;JvHs1ilB4KWHg>Yr0FGlHsZeWxuvb4N8Qat}iR%TW!)r=Wd zg`NcYZut#bzO$mrDrwF?2h;7_pnQ2*`SPbm*Ys%2_;07T3I^e^+D1sO3EA6#=5 zCfzg)0nccZv-h-r9giy|FBhhcMq2RrdHN>Hmn1>r#CZ$c?3(?9J2g`S(wnE+v+1*W z7%eR6*!HbmJd8FK+1KE^GgYU~xT<3Q?!@@sG2{cfpU`6xmVfunoVfrV{Chv=b9`>u z%}dTu6uxrxPd2b1zb?MsGIR>!bv!(V-VN+_NUP7QyR8)7@Bdud?ex9_{MmU>^?h2r z*?pnCTdq6a2$-oSr=WK?UL4C2kJ_^y1p{oifD0yvS|yil=4Bp#F;+3#hxk2)L2h{n zp1)Sqm8s;e67*UMDBWQ38MK*oos8vYK-2r0qvkVJnoW`zgwajdmUYh~mfqj0kJ$bt zsoz6?dPCJqgMWhgi>O!BW2DciGv-TWVZt|GP0kPVHZ|fJ#lY@a<_-#<>Y84{Y4Gx@ z#5{Dg&?excuzV=_=K?mqtEz(g>N2@ba)*pC7 zsmt7`iED{*e zu->`*%#V7f?{(hV>~oT}8-V4xDQbSM9$)Sp^ru%cLJh(<`j`s?N6R%)$s2uzb8D}t z{2lfKa{nBYd9@#WZ-A{nt^jwpR@>7q3pb_ik=wVMfp1;5&9^Rl=$|gzrY~&Pm{Fol z&2;!@W46|{8C}C_8_T^&Wo`3b#HEK<7`M~i``&Rav;{27zU^43hk;80IO1Qz+0dJ5 z)I2vy!U;x<71s^4lcRziq#-D(w;qM>VO+-dO88%u@6d;rzHHQ%97L?4m3V?h;=3NK zkKA^rwZ|Ft1>B+ia&K9rXvcTh<_Hwsg?W5`8*syw1iU4O>^b5mK5I^*W3H}3%q_3J zZP~5@6B?_XtXmoXwPmwsS$-Z(9qvc|b#+scD=-q7v+xP0&=@tHG?sw2n04&dg<1CCT zC>|}27+|(u>94#x zBxNaz%~BBB8*GuW3MOW2SLT+eCmws9ss)V*A>T?4%Cgus$C67#%Su)4xhx&ZZD0`hw z5oq&)w%w*ebQgyLS73!F%)O1UJ^v|ET=d)qW9mB1zB<6!+A{Flz52uu;13LRf(|qr z!Z&ab69k!Up~}Z>{xMh%aOke3Ei|H~3s1~kS-9Y^s(J#>MF7I!-ph7ZKgl)0jL+1F zafUD6?UgoqO?W4TbO>Q}2*B-rI{#7IJDsuWx8->W;W^obP_%CVl=PR)an4Xtam_^)+*h6ZzlRSbd$t?R3m+8hf2W@R$(N@UH^QvC7j+mx;SUsHAol?fs%sGh5((j7Q-#1gyK-S)dn~i3D5>sz} zcggOCTmay}aQE`(TROXTiSVtG=3PhU;D(U60FkETD`EV9rfh$o9h^l`$`+^mr!Wnr zFn`j#O$Y0OzUJ{!pikW|E5>hAwn^A0yTkMFp?2+8Y;0?QBXLHKjKwZdG9EVjPZ3 zAybeY6DmWG4Jn9=i0`PBp?I+jrBQM{Vpn3Lr+<;GKci{+?s3#1;pBs7L((nEuwpw6$Wox1lj4uk99bcmca83j zpl>eAU}^|i?2V(lI)zR?*CIDu=fGt2`HU<5UFiP`z0 z*#RYVsZ!aKiHv4sC?M=7z{(ZIX`ToIJmXZ(?F(0yV!Te^eJ(--+2W-w^{T0ZE343W z(C9wX!;aLhv9{^`Z4&0g1unwin5utvgJA^PJ&)Oh!)E#)J{yALJDB+-e$zh+MMNfE zS*u1q_AkFQld<|o)OUJ5=$BdHsw-afgMicE3%J1*bmkMO2Z0mw)**RvmxEN=OS8kX zqK+t8W;&pTL~4VyOo+nqurmk4E1|&(PfXhP*9E zT(B&4gIoYSXn;@1P<*?PSjucH@1dXQ>U;veE}TEOe6F1Ujekt7fzzgdoI)r*L5+vhbJGcdqro3+2Mx z%F{5E^7N7ShswNo=)xb3Fe6Lt*YmtFp0v;KmrxglFrvGP!1sT$?67T1?Bp8Gk1Gdu zkX0+tpU5}RY`vgo!X%+}#2>%VL!sdiiS>RGAvA2kfG)i1HF|JW7@4qFK8$1axu2Uda*$WSJ1|NP~C;Piyzh^1z# z3L&Tf1cjyrL&St6`+f>yRVZ}qe9*~hioHa#$L%AT+oR{D2gg**EdsHxTDMEDGVYlv zmG+wZ8YJ8b@;i|^m0F19r^vBfC|fQW$==S-#16Ek9OZEW?e0=V%w3(w8Pu4JLa-rV zCq2t>8bnJXFxf;aYS86BLO22z6fodzgH!psknGq zuRW#5iwsw5%OF6yaup5%b6$A+#erSLWjB9+ktOb-+74l8u7H|DSMj6G*c9=A=jDLL zmEKyEJE<-kdrcsR7vzAff_Vu5`eO^Sg?gNM{s|mH&v9@+VL*do{qV;TaE9(JKXfe- z*oN|4J@~~m_6xx1(38gvw?(Bv_axIQh|)p2_oUH<1pdTAFv8gginH(05sL;zTEgY_h{;2ST zIAY?LlG8Z^4Ii|IB`;|iG=PYayCoL}coe}?cE5u{-B5^_5of5bGKyQ`G*K9i#iSPH z8=Om*YJ|H7u$yNDcgqXAXP->GY&^BFnlTpqOd#^4+Gy(6)wCd* z?|V#@8%m1vNY&*&)gyORp?8&Rl}_0P4sN*>5Q0-o_as-4y<4`(Vf>KSnluVA<*tzu zLd=_eLj?{6Wr1EX-IP0aAD5yuO;Oua(hQ^~yKp&z=d`Eo0n<}A*@GU&oO!mmR09w-lsHsFle8Ad)tM@`AavZ)Mvq0QS7N7!(#m0R_y9HL z8C_o{!esPbUuYcgVA~?CPw@F_3y;XFbLu6B>MWibaQ4Ar>*1H{E#IxjNs4nzWLvzG zytB)$sw&{Ab9k{*4c(~+!tTpnolcRhx7K72Be2*(NkhdJ*SF&P4)Zn#zPgxF)}?t7 zaX|A5LMygy(R2yu6W^t~=sq)Sa9Cg`Akjgea3hMiX9~m-7%vOyy$P9x#-Ug*$LsL0 z=0}KyVMAFc1TkwlX*2A@MYS7i&s3i4N9_6NSE#)L7;vfYs`nBC>RlyG@a=AUy5|8^ieWODlIo!iiR4W0A)+m%8x&_i{&^G~TwFNkqihuEg) zp^j#feXxhgzVW%XA{c{MUv*@Qr}0!%u}}#a`*_`8+~@5LWXU$Lm-W` z07pYDuGt8iGK|C->DcJ!m?fruVf}ug@L(UNs3F%UAk?QNTXp1$w<7*|E#B*iseq(! z@RD|L*j<&gcf4G}u||{Q)1aOeS2pFu?4KV%b8cbMRCHRZ@@D7v_GVvyac_M=prvMT zRD1UER(0m9xh=+j7p9#34$(x2kJ>mi%M~EvOmq=oHF672^FZ@^v}DkA_^&3(3He>p zZq9HnFl`D?U@{AoKO?2bgX>WZbN;%P7W2>)OU=s5|B^Gc>Z^| zgisJ9J1{_1alDDn-!NO%9r=!rkBBMNn&ht8sD$|rh4;7Ze?uOpqqAHFviir6+)Ei`F9CtE_zg2z`y21Wx;>vM zfm_eHpR8Qo@AZE%e3FfstERkEl8%C%u=vR3`Wm$At757u^;MgrduSLkmU82DQv;Hb ze=BflN-`aM?A>O~9((1r6;9d@*vm;(b#^meeMAe|TR$L?8>wLfx6 z;g5Ib(){hmn_sMe-=`Hv_VP-NF4~t4N6Ldbob}O;zP#WJB{Ka7GuoU$fW+f1GSi@B zf#1WQq*oF1oU(xjFM+{UPJBb0^$>cXnqTWa@1iFVm0irMA8?(cnrUQE&^USIbO^S1 z!F{15_AMfA*Zuk)h9Nn`KJlXgP!a}bf_cm1a(8L)O%SW_Qm^O%=o+A^YM{(^;cDJs z*fgHj+JT+Oo&upz^o~<(LtKt5s`BCIr=75wOY(9RmywI8Dyr*Ta(Fr+jCrK&4k!<8EVA7_oIE=NeCf{{XDnYA|8zhpEb7svNyO>UY`tq z{3_9fj2Ip=`|*?nD8*9KTLtjo#CACN(EiM>bFS`mJaw~HLsV#^Rz*zIam!@&VB$T! zrS_QXJ1^djH}{xvzO;1rSbST8ZW|>b9n=t#`Kbh54O#(%4Q`B9d7s{P$#W*V_ zBVSDw~WM%rD9wAU40-2KV$>?LN*G9V)x3NluZ_S76r1}eB!;W zVF-v|iHtwK`D;wIv@3#MdE11g)}JK@-H-scJec@nE|xJVu#9Ck1?$5`&GtYp{`YMy zSbm%z*YkJCu~kR%_s54r-`r{?m<~HF7z(;yE$iuT(jmFQ$f5in%UMshslr_p@#J46 zKUggtWEUH9P)9#KLo1Cnde}Qe3A%oaPN}9?(sM1`O$Xnp5yF3iR>IUGnhA00 zaP>YRBBe+ni8TY0^_UQ*s!*#yUkRRi)1nvE8CSH5_J89o>tIi}p{ zk0mSJB+GiVjh_fgjS!>TEN{w^(rrlThnO^$6jjgp=8KQUw2S9W>$%*teC0kDEPcMa zs??Xx#%bx?WRxo)tWI8x&M&d-;KxkyON8A znHoqflnLg#i5^gMLSo?tE<%c2q8<(I*B8OD3vcWhq0k|zI0z?>DyEZgQo7PIG_zLH zmV#>?xUb~RvHPTs**=z2Lh{nTF2rH{blo_8p~?xkTTqxEY!eOg$S-V%2wacI+Y^!)+{R=cMLW7^x zqEmf+l!BB=E|iEDFE34)N$Rg!?RHY}g5=3=$yWu}uxR;o3%4IsG9jk%t|CMe(olw4 zl3;xl0Oq0NKmGtpE3xy;_)S0s{2pZMe#2t{i{XS$6bcPqYdv`(r8&B-KL&XPIw6hJ zE$><1(DSbJR}#VG)osO%_!}bzw&wI|gP8IWx{WcJ7SvSxlS%St3dc|M_~zZ0hF$qL zhpUgoM@TQA>d*x@1}&A^R$+hi9jKZbd|Ow<^>OJhy$lPkOwSzs~akicI9W@%+SAwKfZ+D38`a(e{PE|GB`Xmm;%)m5fb+knk(UP zHPC%Xw461O!I~vRFzL5KoePmvUl%jAKPBCXUBH?91N_ai0lt zvG(P|zOYJuI>=zVE(QoDJnn4;539pg)&5O82b>F@yOjL+?%@-_6FaW_HB2ppGa2~0CxGHV9jrL2KE{G1;6dvwIoEDg`-CqgA)K=qoE}~C zFis+5sYpI;X{TkaTtSG-D7Mqk!?C@QPMWF_R+O3}RbUYq%{QQgRZ(wXm||W2~FnT-Q9S5V8slI6a4y%6O7ZO+Q?z zGgi8e$T-^p1&O6g2G8{=Hj{mP{vGW+t6~Ck3|btrbn*wbQl@N0;?afGo+j0)CqlII z`H^bsozJ&EJe5W}99k7vX+1G|m9-R&d>Xc7ScGf1jX8~LoBahL+PXRmy@aAXIVK@; z_#ha%4UWPw6;2yAoR6(z7BfgrWH5y&H9VIGI*&4Dm}lQ+k2Pu;V9_o#_yGbPpTB>K zjRf+xD6z?DNcHdk$EuILu9ea8=hi?%0A%=mYfX_9s=+JqU8&O%e-a?5i@vWQ9twP4 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

X6m=7Jo60=Y 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�#_stvKL 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 z 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

oTf`T|*cxx>Ld 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

xA|TP}!`Q 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

not&Y~QKwb})6y?u6T+>9MPuH|&1Gr+ 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

Hqv3z(9iPYeb; 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

$a3wh~9hfRa>cBEP=&9PgchsxGSyGAfoIzn1>@| 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

Wy-Zt^qY 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 V>hF!Wil3e3`RIV6JP}1+`3GCHg7yFa diff --git a/images/managed-team-flow.png b/images/managed-team-flow.png index 7593cdaf564bbe13a2e0e81ef08a11761c2ef9d5..039cb9a65299f9ee906eb7871a29aaa372601aab 100644 GIT binary patch literal 218193 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⁣3y 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 HKT?@Fp@>F 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 l!Mp$G+yDQ%#{cV=cwPv%= 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≫Oh0ZJsbRg4$hEmZ`A1;72Y7| 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

oH$th@#62|Bpc#2km$aUcGpFz!FzU}5dMW5NA< zBz2S3Q?S++qPwf5MX|Y*_AgEv)y3^!nTk845~c4~j7R8iu8?uxY@gI^5_*~W@RC7Qs zoU$ZpT>GtK)&3#9ZkYMjK+JeoDl`-l2@Ch?)dnZmZR#pba5egjGxEx6JNn6?yLKkG zcjG*kOEYON4fT%l#O?lmD`wm(gOol0poWw{)I~HY0X!;=wZ5k0%du_6P3+DFIz|WWe7nP!VM`t(nq`^r$(2^U9sn`*A zFeG#c^{azW&))Cf^4A58;F*d|hxj^*tvK^73yCf;o2)XmDK^-2GmH(SVV!O|uzG^| z8tAMyh8(?y!kk>q+Fp=Q`(x!zFmc>JxGSyFf`|zTDUkusv47oi52-}KTXLO& zWUq~D>Xp@H;?e5Exf;u9HsdvqomQA_{)_odXmM8#Y*t~R9dvjUBs}7HuR5xR- z3sUSa^5IeT{yaE-zKJI|Vmi(Ta{-<-CCi(w2c|u~EDlS`pLKM;4{J45Z57wYULIe! z^e!>u6CGgitE)>iq@x*n?XgPP$JLJJUhY=fONL?8q`ki}B_nR@iM<%E9OegRGfBar zpb!vd^;LR7L4J~Owwl`r81+xO3{cMU^XUB#O!(*H+~6J8jut-~KXMHrem1Yw%Eq$t zTkajwLk?#;ZS-L>ddHS+S?63Q>J~z@sc+-ctnWbmX&E%AeTjq~Cz#XROG`6}&6Mw=!_Gp?GS|sGB#ctm-;R6H94<1hNK4Mz zoxkK>hZFt&#w+@{cOcP)&il~R%_=;fRZc*jxoA9xP%J}&_f%SNM#5+hk_`%?BgzPa zoF|a%x>By!VKgjkQx&jbVwubjUKPn0`0yQkvr@;YnWV^!9=NTz9JL+QKilY?sJuSv z-0hjc4}AR!%BakZ=vbBC+xsHqEz$`9DK&o&1yDx#;NqC8&u=HLS);(FYN1!{RK2g0 z%y@<{5z3RiQ!=g{`88o9r^74)-m}SGC}o5v9aVrl(@ykvkG&tdo1<`EwJ=dgg+DhJ zw;mB$Z9aBTXK!3mvevPwn3wc7Y`-0*I;_Z1FwLNhB8~(U{#nGlB;;+Wh+GMJ{@Hep z3H{2o4qfo<=%wY~F4a}JHHLNv1z#>xsGHY=w1nc!9EE@Emh36?gT5SZSGFjT+lTvm z{~g|O@(P>7>4B3-@N?zgGObK3G3wRRmGu@{_m)#XxfAhq1SKvcvHAP?VhVU7mHhH3 z7}xJoPbXlo#WPz2+(^D&tj$CR3|z0@+eox2p_v-xr$DcQ4Z;`|L4s z;~nUte0OY%ahp?XU%b3st4J#^x1z(nm|ErI_Y&~reNWt5u}dWxOJzHYKNS}n8pz*1 zdD11GyP{L*MGWO!$_)zMyqeEXbBXe;5KubCaNvqx&7q!3MN7{Wr*oAOxuOD zmwAnNQ6o2!ZC#dI`UEm83rf08MSxo4iG41e?e>aLk3a2wt zBrjT@7GLX!4V;hA$%EL$oi~SYCceJZI^G!G0LQSZClScu_JrHH&~vv~jyWOlRC6osLHL-}U%v_3@Od1zh<;IhFC~o}Yf6aH z8b*{Ne^JJiDJVRiEGj>BHf=fkiL|$SjcdLnsAJr7*K&)j{4DbV^Bt2#_Jjt}_Nsa{ z12f|}3a+32aUGg8B#4AYdSS2^BNHcyVpI4yuilXY@o==YeXE~$<}H>~Rei_}i@0qk z{R;r-)SrUwS;p_OVSjyf2YVc)7n%A-?hJ*ISo#*IdnA1V7cw>4$7`h=N6>WL)ZHZ9^d{6HDiA2@Ec? z6l_oW7CJZn%+h9TVDLuzbP-qzoXMXL0XVs^cJ(F_#-tq+7z~wY`>i#XB|M>8wf6@E z!fS(Jn8lxe!}ez&p9tBhis!)o1&NuE9yry%O@ACP0C12T)tXqssb5yA@~V0(O9S$J zTCQ&LtPQiuB3KmOfW8JtqBM`t$+f?@ z3n{q5?p$8`LdRtj#2s&^!r_ZhXh6A%URf7z;6c1WqZ>(D<$Y>?0Ewk5P z|59&vAaJhw8NB`(-ec^@IKZj1nTU9doO6kj+1Fw2(1_NkIv2;tN?*0rAMmh^Mj+98 zXA+QAwQ3eodVcL#g2WZipaC3KSc^*m*RcBIH?2EduprPJf7__Q(}v^#ux%qg&vB2n z*(c%NRLI+DT%&fYjahKbm|$P)oHnqH?YJuBVlrwAup9S*R>;!u5C!~{***bL<8038 z@+pqVjJLoPH|ajqmL>gm^tYo0@MBMu121K81?4pVV6y1K&vAAwMSKV>)XR*_Z74{E z8!Oei?HwxIYk_)lS?amLzOtes|8{whl6WvMdDR|?aTb42xfHM`TxU;lGuwC}(|$$G1Q!y~Ck#_eB25cScC#&o%Ui~dhz z?4P?h(-J$;j7@AMwbnoEkrF6?u2eBiOC=}B(utVJ!>&S&&OmgSRv>%Pvv@&mQQZ}_OJKg`U~$L`(z5sR502G8c`fS-h-1z?q3Y`g7?BFsc0}Dt zRa*m~!4!$PWv+a{aDP=(d)4p>jqa`f zXD6_tgP&Ar-9z0y8aa35lv zM(9MhXkEw6Vs$7=nBM3twhVc@0&cY>a6o$Z5hSe<|1JEHF`>#~#sI&&*8 zp1L4qL1in}$Ql&M7U)Nu<6I(vYB1{YK7WC1QR^ z%KvAJ=j9*Fd5~78ItV~}7zw}Le>m47McJFaJ6f5$gGM29iElybB}R0o&TC8rD!Yj_ ztD9J#6zdEgpiYDdrJ)7Kg}v`SBt@DbTkB7LNEWAc+g^_XQRac@rv32Lwbxwcv+Fa+*cr2{>IbY{6F(`3$it zBeJeeXhhGi(3wB=v~SCwL^Z|1fWrNR>+kTORUEL`H+A=Y7VA!aY^Yyt$J*EMZc~aPDXbk~nU(myU}|A*S_G zz-wVSyd)JFV;+P*WjwTILiT0OS^xVM~wR+$*y!&oNqrO5K+j-w5H0YWRYiN9S4z)KL3 zFxLChU(n{s6yfz9V%QFDYemD@>L?q(BK|~D9$6tz(HTYtTQgM~%$FjQVA9&YWr3z; zN?)mHh*thY1mpRuvm`)fZqA0@P(7&O2r#SI$+`8wRL|&Q-C-iPRjN{7d}SIm=tL-S zQbu%(7n0#IagO_xRpe{Oi%^Fqsy`;vUAB|I;#IXMlXo3EaC5av?U9CwgrxWM_Rc`J@}Wy*iIxk86AkFngem-=$#H7Jbmi)LRLs=F?(0>pmQ%E0FnvMeH6CZ!=f}FDH>jQmAg8*f{C3mdAHppc7h$>0 z5|+n+w(1Q&0=z4Aj)r1)*gU~gbZIMqgnukFXA$;!`Jji?K~zK3-?fG>+kxA~xfN;2 z530wM^#7zm70i{uL&)q7A6FgNW5zVEczaP;SO8YR@cp;_w9T=3v9}k6xP}a;;BK;? z0y^N4>}qCe^n!x&LGsp^TRut~4Kpv671+@sSvINgB$_Y_GiCcffD0lgNLojG6A!cp zin>5QzXW%X3Ob#}oQ@|){nT2tr=x*dn_CW#Ts_gm0%ijgKV>f^CA zsU^tM2KzPI193AiN_8nEecF3F{g8A0J-mn@Uc=n%h@Iw66=(cbr%wI(lbhUq8bdnu z6OE>p)@jWUOROm}{C9=dh&Ei3mI5DF#K=sqX@$kdo+Pdg0U&M{;~mI@6QMZ!8GcyJ zmW;QrmR%hnY16ZXa3#4joT`T0>>}hzO}NCQq_2_Nx^OYP~F)K;`$~08{Tb7Pt+4RJpdZe z#=SEk1HnC29&DRP{<-xuCFWMsDGp&r(jFSUW1v}oua&M(l<7MPAcw5KQkN?h zK`<9~pwe6^j+e#y=m%elrdR|CD;d6?j>4%Zvsh8Tu^O+6GYQGZKwg|edw;eYD@}#d zdFCgz#V3%!5z03{|K=gAAcQlYHy?l%X;t$Sp^zfjq--x)o6erCjA!H-=+qL(8VSP( ztaY!Aopm?6oljNxm~oyeUK^(LJ6L4E0ln1|!h871%mocrYbUBpv6Ta2 z!6vq8kr3k6M07!Bvey~WAJYf^a0BE>0@ilUal5Mgy}ozGL$bPXlMbV5v6mkA4U#Lk zx<36v%%+ys0Akc@eQO&b5Q`@;8E$cK_A08|)P1XGV*P-!U$JcK*wf63jfI_o=9 z_mK+q2o|?k*h0iU{_1R=O%3{GqnQ$l^SFMj*+x^ppOCwF^jJdBur94oqWPGWk_Yso zo&Be_S%GJF$*D;0e?YbIh>*l0a*1=!u-r~Z3^KCwQcBuI zPE|1RvxS%lR^%2>FEo3n(N;GT*O~Swat85xL4wB!G0fC`Sqljhp*uE z{;uy|?njU3%ri63blgT@{>6>wl7O9h<)-uD#v++_fbXx{os3cXcG%d}#Cf@m=rH@W zexKEekX}ws>lj11IKydsA^>JLq{@MRcqRkb6FXz`NJaB)fc>XsRHg=*ECC(#3cnB6 z*DqNba7W|!*hh_TDY(_xw;{D_V47^M{oEhwFnTf^uf! zgFw~F)@KGx_JztgD%b zXtUzG2cIikP7<7U3Ol$#*#ZU4PHazUxa9IiyhgBIE*oWf3t4>6p*uXQpJY`RuC$!c zw+iGOp!(b8+C>CR1dj!pCrCFsg$~2z{B$*#TmeEEX5a?3b>WY$QgiN0fI7icp4Z_L zf3M;}2a}UKZ&zKk?^t^POS)M#$YNcuw4LM!5%!GmkjSL}f*ggWd!O-Cwe4}w(yvc$7Bxc7mZ5hwHCaBS921?F zP{73I{z^MlK!_bgQTcM-AhqDt{5oFd)svqmJZ7BidauETlC~^ft8XV*c`72F>f`_I zC3oPhw1C(r`z2!2?ro^!>GS2&u?8c3%KT1ayDBCryv~Ehz64eSQ^mso_P+(p016Kz z0(aD_s86*CeZ<(m%qo>UkI|TJs9QT-f5ov1^&hdD#QzH`#xOr9cjVMdd_} znfw=lfJhuK>rsW3ep?%Bn3;cUc967;cYeG8EEGCcq$``Xdm9G*m(T(tcvshcv3LJ{ z%-hlsi8oznMUY3VgKyftVkbAbCi5jExNZbc92kqZhw0tq9RBS;0$BCN1oWwH@}r+O zOng$(1jfruK{4F_Ow?|bON7*~Yf{P+#uUqHAhgW9_2R8yn>f+ zew3Tx$O;Htu%E?*tAkA!XAFL-XLq+2rPDkUxL8ZC5{`FIL|f_En3(oV6Zo47y90NH z2LN}K@>KNp4n2l@T5^0?KBj}|FbyIySmpH{0)M(PVI2=sOxu>}FUg!mMd3?!CP@@< zZ=+LtSeR2W__vZW48URq^mgHD;NZ=H&V}Z4RPk~@vSO4xdGKwzs)k)z*Yv+VAlI;_f&l7_)+AGjUMGV9MD0Gl zzWr+{Nyn1{B4kdF7u7yd*#ahj;VNA>E<+p-$FxJ;U=^?Aak;oBx;^)Hz)El2-u-Pw zJ7S%`^ASci5J;??w6eW1x$pQIW4N3FO#R8iP@Aib;R}RFC-n|G2kgenIHB6fYo5J>re0N`#3(UMJ>WJrXZ>tSn=?OgFoW_Cdc?863%o99b zaI6mNOJP0u6yLXq|JTpl0XV4H`8Q9cV7eSntkZx^AGh13C2)l$?IVbaGd+l^sDHE2 z8+S05RPyHAR$LPADq&5A>ytdCV%Mr?hwZgml4g8g8A$73)*(=?t-qPw*YrSP_dveY zj=NmGCOWYVr|YY_+fT9VuG;aP^H~IwRrf8!w!IoYcms)t3J_+;qnO~&GSnn(dsW36 zcCn5UjipPZT&~@oSjhBn2X>TLEHm|eg4Lqn^}+P&M4>LQz6ILu&aZ1O*;$7X6Raya zVyR0HaLl>F*iWLrqEc`Q1E81{uSp2jZ;AmIFeQooV$(#|#p+`$_KaW($KcfIn9qsn zWC~!%WW)u?adO9l^V=vm$Fl3HAa=M2HGHw4FQ}Xdixt9JW5AQGBI!SV6 zP5$eIszVbaq@IUPA7<9Rh60L7PQi*z`WeAm^`_8Ih93u~5>;$QON$!DB<>m8^Irc# z;qRMwb*&M+lX1vyqxPxE|GV#UpDQI?hS(w^3}D{G5`h(uwTNnc_wogZ@kYvW+_Xil zbO*taM;i!uf2j}!Wa3H4wY7UdjdAamXQiLo>JfJ8=2$IUbba@?5&23VHjNf#DLqJ` z`P{k9Co8MLEmfRQEdB57#=tm`eFb$24o8Cft(1JZ5n6BqztTin2tgUCuG-&nvFc*y zu5R2z&icDjKL@liyMTx3z1spX-}h)=V>7ri9l&x}JIl>5r~1j=*LHs=yH647{8jGp z2-Ul*#_j4480djowfSwuamK+;T z=k@zU3*IbphOH97Lif&JBtueMz0O#Gh&zUl;38VSMuo)ZvCSQ36)@DX`h=0Jgc`gj zMfIu69v=R#cNU4a>-k>0!{bJiD^t7WuBbis1O~wmDj5n!d?)koM6W&&$=`C#tzIR) z4lJ#zKUKJeflyemh5Nax0b9$lUE-QUwV&qIi9^v+pF8wHSJ?uhZ#1S_y&H&}LWwL% z#^iXZGqPKgGH7KTbU9r;W@3~WmjqgI><>b%Z?R-y0ZOP1S-9$r=*h_~fBNW+5q&Xz z|3dav!$>!fD4mRYgtybv&(}@^*0)`8znuj@tNvPTT=vm|fCrt#RfsVVRzP99D57Lz zWAps(hr+H)h}hc7pj}fQ{EBRWN;)3AAzAVi_ZIkTYLu&7hdDPRTYu9gTi(Z^Wa+)} zcg`^475u6`iYTwktuiK~(Q!C*q0~4;9q-d+z0+#06!0TFvq)|y>qelu_oY&O)I^US zo1`*cUvVqo;js>>gqm)gLu)^81hfID(`qkMZ@ zSCa}fti(OkUVZW0``Mbpe>`qr1Cy})aO*4oPq+adE5I>lhRlq&2R6r@2jZVBES6v; zo=)laO5D?T?6$QNuDan!Eekwii!}}xHIf~B2(CDJR<;|{uwGfac+1ZQvQJBLL$7>QrgD8=Q6@FI z!z%suSs2PD@^fa~j)_HZ6Fj~xCK0f@aV3Tgx_eJCrgfP+btz;9X`He8r{8+KRtxSfb0@_^Og=G}Ovc8JTbL5^ng~yt2f53T@USp!T53ed zRpVmdTN1F__b}O4@6*I%9V9w?PgU8(e96eLn{AJGyAl}6w8pSY<3A+Ql4rKViEnD+ z0cycMZ)HO8wmDJ+MXDi0i)wEN(iL)|2m8eh4~}%iWLe_!^1lk6sAm*CZU4fe9>Wc3 zGP^y?|Kvd`=5+`L;T7ABXXNAKeNXL>g4jG5?Dg0?EO4AVUdL)?NKuzhZVJSS4yTKK z?*XbO&BEkTUNEY?tf**v+_L>C&x620Ll&f~y{Th#@H72I>uQTCnXGhP)`K{Ngh&%% z#|#R{XVA{jPO4O9tU6ycWg^iFb8xe#JnN-i*;K@kq6|=rn^0H}X=73%l*Rx7RTQlJ z?=m40IVka7GbfsjjPyM`IG6<5GMg6#W*hvQQG;?aw0{&gWCON?w_#e=#JK%4dOy0@JDHVb8V{v;Ov%hU`6 z9gm}tXG%!~GyK&Kv7$g?GMCjsvh@e}B8UsuqC#U@8vy}Hd7$6ITJbob^65OoE-)=) zTdl%e8HON&{D9&!8kJ0T z|LU&*wd|wW)cVy>A{%FjO;>kcDd)InSk-BeX%pjyRBp186GR<{2=)qGSi{dQ|Q*g(1rE=d*cF# zeq9kkLHjf&GFcDOU$nfXS1Hpnk6PqlWJF{6v{S z>nfB^WN5}CT`3^MQe@McD8Ha*n$wYxqKaLWYp{b<$J^>`3haX4tX0PY$H-<= zp?;TlCRRH0*rt)|0J^akn4usdXWOAgctw%5la3%}lT>&Z81XYr2g#F*0%S=hEhq?- zsv4+$wOwEW%c&ilEQXJ%0f#M7Hq;!WAgDI78jUc^Cdr41^ONDITl z`T248LofJ?OEYU&eC2hTYh?2Xd$sPM4@6nU3~pfhh7~xRHj1D`y`(@H`60I3EN^{O zBYe;She4x!O(wF_)&mIBF=7wQkp$!Td(Fp#2(_UPgTPP?)4+YM5(Ss*kbgi9K9$k212+d)mUGTke zv4Knr`@Vcx=14(N#jO=4w&uPArc++Ml^G;NQNJ z0h+Og9x4myTpZ-9mx;<7tr0Ekz@53Lf3biB7yq$_5t=5`a^dfSjyl~`yby5sWUo&qN=hxCTcM4Z~kl(F@W6mKB!6kMgvYHq1plPU2w zba6>oHidiQ!g7+Pe;dzgipqJC^<=}seJD_pa@oVRj`2?;PEQMU~NMOmWF{Gn*2F!ir0w2>tpPJ_a35Ak{5Mx+hV5I7aP zJx&ZJ{pbo9SLKoI^)h=QxjoY<;Uv@EBZ1EX>iUxAqF$44RW=H^$h*(tDWs?lvc`FD zES0>>5JA)r&e*U_k;n)-B6sfU(gpuwSW)&u-L*8(*)+d1qgCWUCX1+%U4V&a0H%(no%eze zH(|i*brp$cdx2K~VF-EKPe@@p#K|Z9phK>q##`k-$gL%Avu8x{1Jr)hl1^HM#oH32dyy zC7790TihqAaAI>4mdm61%=YFq1MK(rN%@Y&@f1eA!G^8^Z z8ZY)V6Nlt2yh3LjSFge-l-hTi7>$g`urMPGaKPV|rG?E;@tM6L=c_xB&wxOQ9Uf=ksYL667pTpUD~M3w>qc zp>xodaatLF<_*a(=L`c{>}}=5bv|n`u2y7Fd{X*OnZA+M6!BB2YiNciA|n0nb>+dM z1)cux*1!ky%zKnE-RfKvS-r+XhM6f&0s^_ILv1ZoyCW%x?XTWye$7hSnBpokKI-F( zsj$9E)(-scOhHbc*jgo9X$JoeH4!}_F?aI2L%-1n=w)SOYYRmwoN$p&x!ci3z-GM8 zN33U_ieaQEz5RT6m;^Yzlg?{O`p)Ab;3bsK?!KSYpQ$burkK8fEj3;TMwWm%Pw8Na zd>x`^bxzxpA43j@bT3ZZi}<>`9m#UX4T-s(K}bmNmkvUJ_KI@MR)5!!h*%W=Q`agT zj>}Oy@W)N{u}2?dvVyUa(2dK~m%%>qsvl$MfJ9d+I0!jzAV7-InMx=}0gQ;~zd?hd zya*0bh&xP6VSVbGOUEZ*K{4Yz=v>537^KN<(zo>x&A#l)$#iaqaG|Cn8y}Yl%RCFg z9YuKr@e$67MT1UN{LvQcF6~0QB>r9H?2+j&uUilikyXX-qv4^7bM3Tf_j2fZfE%(Q zmqaQF5xG|lv#=?rKnda|Zl`tQ48Our)9ibr=91v=;}0P-#L~*|vE;A534x})nXDg( z-8!Pzao&N-Yx`5P|8e@QCx0E15`~N3-=25}^LC~J28B@PGV**LL|{lKpU`<4vcJDS zi{mykBzC;BEfbg|DN3n4F;)@0j-LXa&grt5rMr()&pI?@-PgzK-U+LhZD4j7^*C$2 z@{RrK*VPOjR!d27kfBiuI(p2@rW}h}>K3u~y;WLg`Bjt)hh~AwXRM-q%YHI0vVrp`E{;+|pR!TypI+Eghb;S4c@QT*f zZ8KV-QRm%aV&;;)Zkoz28gf3UA{kR}*-kx9?jSAgVXZgp$RzZmR`7?AQ79>kWvvGG z*AJO1Jdy^e)Icd_Ozg1UDX=I`O-BY-ky!pgRzq@{)9jvgw|h#au;G;Vd8L7&W1dq95&FH7NgrOaq)zTeL{U3B<54U%u<|L0GNdn@?=)`+itt=V* zdvb_|W4d0``2*3oii~R;iB8PSZduK)LB>SAS*uu5orAISAB#C9mPiU_laq?nCJRg& zpC@0@`O<1NvkqFpoOagaHMG<&q9uXG!f(lk7heY>wKk_K0{EG$4>$-bj4QMZicd-43(2*OI^+xd5NhKspp0YvIrsb7 zRfgiknNwY11xu zQ4b!Ti5$s(+SXTSywERbF)wjR%B_L*@dP_ME-mMZ5x}5BvJJGjlGcS@=L#t_de6w$ zom_Pf&hnU4DgCr$V%~YlU-1;k8bKQ}tB;waJk=-~RCQg~nTTeMc7}6?toz-9K&>KC zrrXpsM@v9$Yo5OuCbG8Ywq1tA(W8R0%I3{kw%qwi+Q_b|ff~zZ8ZO}x?P}p{R6A;} zt-YEs-TV0Zr2v6yJ<*h>9;c)tij4EE7!3Zj9G(&0$D*j6RW{F zOi~Gs3)SvI6MKMXf^$U5yVdMj>x?uA{t%C@T{H8FDuM0W@j{)eaQ|}RrVz?wQH!_| zyQ*1(w4-B4R!Z=F**E2U;udWe5`hC&wa(U?uSaxCBi`0A9})#9!A|#TmW#A=*M?tz zQ4m!uxWvVI+{jH&Zz+95^T5BWG=S9WBy9&e1x$8 zD?K=!jvEGZE^tejMneg0M{=lAJoZUPl3V-HR(cbJV|ZWUIOj@MoB{*a3epe0*LH12 zUDci7D;wqdE6p!A_|dZGdSO5OYVM)|w5wViI_y=eJ{DWwd0TL>TJKCtMVF3!p;bJc zU&buYTr#spNIqVdTKq@8Yv35+m6c5gKJ#th@mh7q>-czKUKqMA+d-UU^`%TeK2H>MKd)zXfRZ2yr63u^*Bx0d;V;&vYA z9d%lw*F3IY=#<@N=D?QVVQkHiwt#-4#80Rfj@yGUg!Vw|+-NO_fTr5S9^>3p)GBJ| z>i0TJW@%Y*^#TKZ62&`Lk#i}=rul{rI)_c+XV)gniljLOEs&h@1~yZ$CT(?X z0|iX;^W9S}v(gu_Rup);a{-C3Nh9tiZ@-Nt&A#@C!lYIaXA|Qo4F$gQ*5otA0+sN* zb#*D%l{h>s9!GjCtal818`Jfw;vOD98?V3hS+0&TQ0Wq2Rli#Euw3J3Yp)z7TLS-8 z_CGHP*g~g2h6L&Vu#gHwo2<*6*%SJhhC~AW$|Ne>tgPOp2W8pER~A+daeDc~qi1=3 zsr=fJ#F^HWKp!PqR$ob(qp^)p@JaOv`73%{*7S-EJMU2U9muG;n*IC~ZB0#G^j^+x zsoV7JYAG1OM)TuBMva1%sBxs!5_%xzVsgqcArVRtiCkJdj_=61f|6-33g7x?DoIp` zWc(niRVougdet_e4zuP%Mj6wlb)`(qYMG!|z5k`mC^?rVS0DQlwi}`N2-S-H(1<0D z+f-6=>HCF!Zee7{mn=qQamqyZi;;CR)Qr*qV75cKN*oD2q@bFjOIb(V*(M*Q&NJETL~6Pu;Fuv2s5G*ij3-y95G}`_ z|D}-8FHv1Pu%c!%d!1Ky{S7d2rXnaO)17e@zqQ~q2+4mPk$~cxi@#8m&e(<0Ox#oQ zMf?I;6XwUw{_Gny?W%pM_=nmI#*tHz5tVL)-4xjG8n8Hi{yPc3K?Ow7E)s2V{uED) zVoy4(%WAH)HEE-m&sxt;tI3$M5VfYL;n^yZe&|;yQ5pfG9i(Nc^UAh;1f3T!mCJI> z&P3g3IEE+md+}m>qn}8?*T^d5JDn9K_HT`NRO^z0CM?b4?ITN#l)h0$P8qVqH59@H zwx(g}p-L`@peW!d`{iz4!>q{i{Cxut#Fkoo?aTOs2CT>b2jIf%atb<*S7?8dC7Vo8 zSrADgpTPf}Qi<^9<2^lP#-;#c>{P#~sL@?}Do+2U$&SaD(bi>Z0y#E!^mEF;0xe7G zNA;KXMQAAKy?4q*={y#MP8ei8v#ib5D_y@f} z^V@3~nNd94r3AmDG1D`F6~~FYX2eX)(wnQ6Jg5!K3T{X^=An~G;Lq!4v7M&FqU|kx z$((j+t$1X^2#Cw_AVtJhEWyrkxn!Gq3(di@0UBjm;?NgTuX#0lGmk<1ckxK6@{OqL zhT&c=gX@kH5FSgTxyn$g-kW3fAJIq61cr>~DnQ@tBL4#uz{c}Xc(O)PIHa4T%r7n> z#l{E1x$m57N=M@FI2%&||p#H8r)oDOK*VG7d{w zC$-cm=Nll!RH0H*pjJZGW?Xg5M)=@xA0 zI-i-m%gzuN@_GzQ|}SL!ome_T&|6 zf{A*ZNrY*9M}YZeWBHf0Y6p{{MOTe>ZlrsiVs(G|bU;lE1~6p$axW2s;veP#(!p|w<1s*E zi-UUH`h`R=+QfP}c#}HtMN)*NjeOcS%KIij3QZw>@WfnPZ?>09od6W}F*kQu$y0fm zV>gE?OzBiA5Ka1MNnTLU=iM2vK);Svy)C_TjzT!I(we%HlW2RaUrRsr=+oID4b;6$ z0e2{zuCgmI(UA*E$>DAzG_HvOCogZSN>@;DR+K%GTTc5^&_aGn125>VlBniH>M#n# z7Yz}dLMRBag}%RLd#{ZtE%7O?K0@%XiT-J zE2k(o%!!|ub|bXm0{McOmG3AKRsF%yOidBPJ6WC!kX_9-llQ5lXzyiT9G|O{Q zuM?-{)XR4=#4MlSEv2neV`PFMlq50-nH4XegYB1Q|8AFm$YVwA~Dkf&XDQmsyQzhk~6{L zC0?eqG6jVZE!{Ki(+-CztlHz^Zq%=&Ge*1%e9Sp8HdmzCsEN1$7-Z^5(N@i+^)g-LKzbUo_6D8Q0_dqKa$fd`UM%$pFUSTvm(sm>Xdns3tV^gRlvl) zORH8(Na(HA)_94EbK??^BKyJV>MA8@hl|d24&u|#@4{m{T#d&7{>% z@Z!~_miNWtN~kF3WY0NN)+#qGJdx~|*xr=kXjgiSO$J69A~icC~I5!l&LR>pB2X$cDnVvN+?xRUY8 zNzp#==w0mC?SR&jQ_g%$NFs=Edd|hoM&BbJF>bItq?j_jXY-(CF z4b6*(Ivp-*T32VxH(p)rG(YPjyf~}c9BawQBo6?Rx4P_x(|1`U}|jekltMJ`oY!!jfrRw=5x{fs5R@y+H7sfWkvcWE|Wj3d<8Wqb{1P zFqhT!tmNq;9#BB@`s>8~lk^!fGO~@tfLch+W;Ye7_tp^q1+q5N9L`YN3*98<^PV!@ zH97`2k72G*wKOS<8~U@`>AjzSZ!TT2MRw7)=Qc1GyekDr zU#VXp-S@I?uPnIK5@%f)Hf96-1cI2jPy9m^-p|e5qNBl&I#!uq z^oz8$)Xmj9H=+*ruQG)Zu#ocF1LiKP{^^sKG?8_x$0$ZbHP*MtN1s<<)!jw7_=eiV23zNeUVBS=2 z7b@tIqLJZKabcbxNOWL@xd_-B<1m88RQG&c)u1T0#QF$N8};Bo%0ktXx#_0`0R|DF zQ{d3L+-NSXE4!M1KKg+?mTiW=n5Y*mT^1x@u?AAUxf!J=^oY88|D*dj{Gj`wZ~Q(x@fcexS*I!z}^ z>#NHt#!|OZ$v1KXuKUW7CDGk#-BAcBxpO{nk74LU<@?7xkXWw0KAx#JE-ORFkjdGq z&o~)aAyi%cOlSLfb2=5d$KnP!=?I$8(1!VlD{GBfw_@G^X{&Q%knAZ>YE}vA;7K2W zcj4I~soIaSoja?mqzwk=Tm?`HBX_IWUFnEkH_Ok{OkIV#Wu@NRkwEr6fT?E7nWQYq zbo=sv;1B)?qZVu$#WeBff9i9yxdwD^7=3hu`g;yKbW*BgNk;_x(lW|l8$rX(&a=V*i>L9$!i{F}CJue_{f@-Z9mUrN1FDpwTZbkHBO?ov%& za&9Mfrq9nKS=4e-a(tx_uG2*i7gZE)^UgOkpAc=6(nvBWSV>9B@}1G9MN!VGQG(DS zomXu>Z5+fTQ@E?sgduknMza1ztvS=63;XMw5F4gLFcD>#t z^Udj`pc^#|mfD>E{0tqmK6$iUx*sGUQH%NB*DWAYRfBEpGIVvd4xwx#*#Q&<=n#q0;W z3wxqZ4C>DB-VIeYHX0!{KVLnaC|i{vMy_?*A<$ZMOh?bSAX2w;G9>Lpf;_LR0C%qf z!z@>cP~M4hS%oP&N}3Y|Ckmf=e*( z%#_VUu@ul9n`{qB?MN?zm)rVr0S|xv#FlmDBx;rbCQ!vm#Xlpb*Kf?X zo?9d$P8=jUUE+u%CM-SPOn4wru$;0VbUm*_h?w@)S0y zvY{$ZHur5hN4Il9DlHcNNSb>MQ|T$+|GUmGlkL6(bRk?ejb&}a0-~3P%B3{G7)c0fmC_;d^L+lkz$WngydaE#|93Eh0)lHbcc8-8zeoh6yJML z`%XEOa`%qombREzH~}4gB#VyR##UEeWsTG6Na!T-*ti50yVrIS^n>pYabUxds^Iqu zpYrnIcBh?jc1FN+Gd$@ii;+%Xx3V)eUE{$@GwDb<#h5^1lSytrHtzEEWJYwYrlsb5 z^?=i;V|0Fg9=cHwi*~!y}S@}gsxYs2;v?M40DP4>)YM<6A;mDjH}%WPBKp8U zOD~6e>b~%!`>Nk~@4#KKGLnAXLq7!n9|a26kM-ouLH=o4)y*;HMF4uSPg@Jy!tJM|J#ihNsya7h0heJE~YjSQ>;xL>h!xxcrM@JdhJLuR%zzG9oFaU{f<9q0Qqxh(m5YrlCL&CDVJ>1usk#6Yqr&f-%-%D1xwfg26z13Fe338D=F{tW zDDJ$wvCe(bp8|&0(@bBPo7HVTRVY1fkj{ie^i_R=n9ixTHkUsn&8_v`$JoT=!42c^ z*}Kulf_e9*Sxt1i{=IjbfbHa# zN#|%yyEp1Cb@3iXIViC@mFf>bZ{8y)3_Sc`-S)xl7fq1?7@P#N0O9#(OyK&TQ&E6t zrJK^If1fQH9>K~gM_ThQ?_C7$HldBk@7JViBix&u^iLA~LkHioj2rOmM#jSL?QZ}z z?@e-#dJH`N4-jj0*N1b45OCenFk5gtwRhcijfDGAP3WKcxUQM%Bjg|K{f6g{@0S1~}WUEgb2?9f5yHprI`|2C};B$@)o0+-DuH zFcVc+vn~;?DiJ&s6{IW?9_`Ss!s(#h8lpSezXwd*4uNvR&Lz4W&)G+nbVuNNx8 zEkl)qn}EtnkAjR-&nSEJAD|a3QR(WYdhSfA3Si#n(04GWcpV3Yr%fXXD*c-Bj0iqRa$FW3h*y)eS17)SJv- zSL_2Tn|~I7ZXj^QX6}En%$-i4{WSG7@&^mJ6TGd^M?{*%HTF4iu6h&oet4A>u$qGL zThbO*PEx8qRQpfw>Nj~^f`E&V)${1$MqBw(qMff+Q`Pb$6?QvHYp>+f*1TSK`zSAd z6kpD*UzDz=7W8O>BEyNMw_LIdqQw8S_VR435tjfu3XR{}T5M+|Scu>AwcW-?LH>ii zZbhCd3cx=jjx6{$NR4Io?4lMQDEtBDAB8xg=i=r(lj0%EFfy00`bce=Zam6<63}89 zWt$H#@;5Rd5CV3Q#p?izn@`PS!k1<74Qi_7%skO#xfFL^uMd?Oi_F*#s)x)$IG~t;N z(xY^!bJm@t^A6`1MRvcpxBe-d z1T_I8uEL+i>gF#6(-Dnj-G4^J4JEt0WcTG=UX=zGE`wFFX)Z(}A<&;Q5BXyU*HCG0 zO^-ha`@}~O4Uk zfB&C$;y(u@76Fi+-h*)QOIM^~qx2+j^jD=(Z|ViuUka~pj5msrt4(D~ng8I6Bt0#} zwtKGhH|jma<~&AYc(}OnrtL%dMZac5Au0WHp7Xk~H=hm)VR)T{?WtG|K}88+Ft}1$e`4dwEuq z`5Ave{kaoh0i@*R-)@8Pz#mE&hDaug3gyKWMJYDd{&IdJ# zr%V2Wm4AL6p%%X_&>>{J+(c&G)Ux%HS=1AhBDa8yR^;e%J{45wg zOA-I`zyJAVMFV)emBX0~zmUfr*OX?G@_;6X)=ie?LI^rQAqQh=dgQY0*BJ@40K5DZ zHBFI#`^jroxkmR(V33eMcRyBS&QKne1s8^Mj#^3gZu~H4nrjPvyvpkocK2^|Lg2j? z1I?5nkY8eK9tB?X>q>5^cfqE)Pi-TmG_0NPA@6<&jCJQ9;Q#pLl6x)o`-m=nc?zlT zPoNDr(4jtYp(TcOZC6?^e!6^zmZK~J`28~F3tdG#&KMyQcEQ- zl)Z*}A)Zm7Y8KX%-pykgvyS^$>Dqg(0B|33++J!cU-h9B7a^6ri#AW4v0+c>^wlmF z)a1{w(LdJIF79;zDNel2_ZI*>s68%_z`QS~-d}5<(2XUZZeE1ea_`JdXa9f0N@Frr3b4Vb{yV{Dr|f z#W%Bct_|@sNAW+7KBhn8eS>m*k?v>7xI@I8{x|dq3eu2b+?o)+E2v6QOXrGXBW5E| z3yqBM@S2}tJeTt0(`R2F{uO*#j5ml0R6SUpzvNizUDO^guP(U>-2K&pCohhQYIocX z-I2Fwwg39iCZozIg#MVAO4N<%jfiL`pzy*&Gk zpP#>~V>2s^&&};$ak(3gOaz=|jlPKZU+39%gUi!#&GNH&*(Ufx+A4t!aOmAHQtM59 zQoK%=(XZ}!zxbIyXnqp6nq692DqGlidGlMhS8+k>duF9C z;pGH->B{Y49k+Fg#@yW8?9|jJ?nXvN3&41}tsjV4vvnFc8Udrxe2!x>u)A>c?Sq&jvg|D8wLIVVX4FdN@5|ZSf;k;N9{pf_5nm%j7ELVx-SM!Qy~)f_A7P=Cbu6sYo!JJX?!N7*Zcs)zcJ?>PrJ~;7u&eOQ64sjc^{eUD%8^CGC~=tEyA-r`9p-a9j#0a`{PL5Y z&^*;bM_v21!lGa_G+7RQ6CG~p+P3j+agS2jE0T>qU^mlej zOqDKJxQpA#f6Oe$WSPr|@2uPDvalg!fQ}IqU-#Ooyd7N)3PxM9bIGg1U0zM0%+VHD zpM&zb9ZHgNt<;I{Yo99G$?J`;ROB^;$!-`Euxy2}ere#oTM2Yr;`=Umq9-uejmZiS zP1ah7y&qb~*AG!%pXA62!;j;b2Pn^?;%QPO+ECiyPiU=mX(ZF!{1+o znlxBsB462jCO7K1Y5pUX3@NCum7=xPo0f@A5yxm*b93XRy4|2)z>L?Yo*BECyjf$ zJhz3}_=CC)AS)p4f&1L&W!q)b+ zqXLwKmXlmb85{#tO-NMiB`9yyKG1D+9RV#eMU5ECmrh!W_Hvt(#ynbq(lFAVMKQ=r%IY?=}J!EK6BY?V37%O-ljsjgz^(Q};JKdeH>Qjq%_2+!#C_t~M$SIYfVzf#|85HLIVWcC+1qriX&$~8PI#H`^bbwrBnf2ENq)U=) zH1Pjb_eny6UShy9j~nAPTUXHQ)cOawrcGPO>-4e)77LBW{%G<(NkK(pa&?A7hlF8a za@U#jK9;~eZ%i+jDSNXjwapYs+Esme;3SgqY_awZ*KW>Jei&XgY6Sisb& zQH_yZ9qU|KGjDg)%RQ|3Tyrke0q&glcLa_5(S>|s<))e|{dn-kwj(_zs!gfLz$76* z_2u{A+eK%Kj^?NCi_2JU@m(1SY){Eu_p0oeLC>TomPP50Q46tV5+D{$;%$NXIjY7H(F&yE4kqcXdFBDLpDw9`)o2*2}hjPuyU7=Q&wc)ycg!* ziab0#RV8g_yXB|#%2S}V>-#1lRSJo=-L5&)4U{=ZALT)M(STe7lcfB3Pv-cw9Qnqo zX={{|XLHKy<1>0s?qoKHH*7~#bM0lSs_EAbFnF$GlL>juRddSIBH;vzCI=d6FUKNw z>J##sL`S@K4=uN9Vaq|Sx+!Q^(WI$^QT3&jJp7LzzrZHuQo0uKR_}P0zYwObq*VF> z)T5)7b`$5{VaKuqTAu!zgL1de#ZO+vHLRN|vwWa=vDu;n{Yb-D?|!B#o9o*ja_57{ z60R0k0lzF>3cBI$2XtmGOc$@@`Mae@kfGe%m;@a@xA{VhWTDkA;BMkQSxNYaei?mx zjaS-w!KZQmM%H)mM@x-n$=1u;Yu4T_;I1|0Od;Dak0jHC?I*F@Z)i0G#h#zcBml=lhoJxXnvWtG)u-CBN^y9_StwsQ0M|m6JyP&xm zYMtcd__V;SEjRw^{m_CjIt>jcM7QO%byrtMt)TAWLpHv0iwS2^D=%b;s&!4Lj?3OV zI0_^AXsC!?+;O7XbgCgges~F>t)$x8p@^MhkKi=ys(M~qr|K)B&-Zmb*P(uhDN&3) zSZ?f&L;FonuyhNLUQl|^XABmXVka_aKhskXuCALtvY;5xDc7F0UIt7icl>gC!?VJx z%*%5Zlo%62d{R5XmI)y;Q|4B_bJOtp8 z9LLx#g1>jE@8XS04##vm>#a=l&U0jJAtyMg4D;E{D@;xGgKH3Hi^>|8MEsS%+EA}! zSg(CNWy|B;flo1wggTP3uJ>DHUVs3A8$0fnPM;bvtA^!G- z2$yl2DU~ufw~ZXCY7|(b?TMVdqj*Ph$}Kv5eN1>cWPiHQzCcJvaF3{>Gq860Y-cW- zTBA85*piZwp@X}=Qoo&s6U%F>i@R#;P=2!*GeyvCA2kKn5gw}bm@Ky7bRF2spC;)s zR<1k7Ep5Nq?w%Zb+UOVOA6yLgI6b5)w}d+sx%UWd0v=W;JTXa#zQBBBTC!@cW4JcV z@F$x833O{Ue3&2BxjGS(UIatT4<1a2l20i2TJ*!MeHpS-qkYf?Y**+p8+}z_>%PMkXt2kK1!Z+31dgmmD^8DD~IxYRnDQsZGncifHdjvztng^EvOh_0(Tw z3m(#Ik#?^31IIU~(Lf@W3KHFHrVHRKQv@UoJ+Mf3VYijCg;sxaiCo1V6w-SECm!Jq zXz#bsGgApVej0S2G~;m|8%MsEoYG;*L{RMdo0oOg2on+D-(qEGBYo*1w>&;XNOniC z-7|mB{ftsnm&32}NS6_m_XD_Y1D0C!fOYi8hX$m?*y(mibq9<(_fe2^AO#jS7B`Ez zyR&u8=VHVBT%qoNC#Yst0ME0%L;U&d5^tq8z>+=7gG38S^f@RopR3w9jO^x*YG>wa zLQ_Ve5#L#^i-_od3JeS~J>YewRYpmV@a4bkyrumt?TSXgK<*N-!^LR;ed`!iQ`{l7 zngafsg{6givq>OLrTaAdtwU<%i-%dGl@!&~PPy#gax@C|iU(GfP4f97h{VO4({GXR zIcOo+HhSU~2lQ{oCndo%A8>PjyDqWGCh_<1TWKR++jy@C=mT&%q;ferm}@sN3SMm~kG*NH8oZ=5E@!WyAX zmG*m}v09gR(CdqX-ACHc$`43yspl;p+tg9#`+};2H+ZEPF#BftMw}2Gyr~<$0z8BQi zGTC}X_&B_!-wBe3GUoLaiT`vDGProbxm^wYAI{X?Vm>;YCG7RALT->Kh@#iieR^EVFu_Y+;4X4=2=;CikfYsVse_tOTLp+5$R! z{P~_I<$)H<;LYtw{hppjcq~`6ltjT*|E~V|aG#^u?R7S;i_IseB$8yt*{I`h%$4s% zu?>f!K~y0Sq5AqE2uKAKC1s;n7ncv#N-1x-p`xma9`6}?a@VytyD8^&-d2ChLgH2} z7X*@2U+@IMQ4ze+pF6;eX$0^Ft7bXY(L+?CqMs8p&IYTw7)6nIwTv;a3nI{+Q63tg zb#&rEev{S+} z4!vnA{%uuA3`RTG>sd#_d81sc1N9TAN7&m$2!x#<5FM?=z3sdY&ID71?n zknLp#LPnbDJKzf5Z-A~g_TNN_c;y)5J>Gfy9e0z8i3;?9x7O2jb7^#>T548`rc#ET zN;p3)^=C@Y8mP5wmlJ~pE;r-{k(Lxsyn>aX&YXGFOrkSfWB8e>vMjUjr{3N!N`u+* z^>0nlsf}ocyFl%#hM+9a@pD)~=wNL0y0nc=FZZ2rMQ5Vw4 zVyNhwpTnkyCbnS1^AG@`sA4E|EB~m2bZMz4dAcwsXO;et9OqTm{gHng*$=1lJZ!Q- z%S94Pg#DV4c^f6C6^(wbZ(n~vOCV+LP<4T{QpIWx>}Ut2iWevFfKuF{tDKNUdsIir zy8;!^MI)D4vY5^#82UbJnh^iK1v?2d3j@ayk1dc=K$$x~1MwY>2#xd!|DEos?)QEt zFAzaoaI%9^U)k29Had1h)RX$ged|Mk%!fYICNMcJ_of7x#h9-2Xt++V2l9+8Gw+4HQAWROoz>l4|PlnBYK!aGN=gDf>+EjQN6+v~zQ zdcp(HhAXwYv4JV@pms$T^n9MwBVtm&tv1INaABzbsu0J{?hG*DJ(_Z`!0OR zsM%V5dm#uAdx?}E#KIIkW!}Fx+gohPvC;lQUeGC5azIAujI>p*&36)zdXD!zMpST@ zM$ofAeq2fY;K5_fB;^cC_)ZrQRS)0D@|v@fSjx$pc6q-%2NGt=Z^_i9<21>Fi{MS% z>SC=hUH%*f#%BO^{;k(ZcYF;iYU(VJb?!L-)_0!+qjq-(Gqcqq;HFMdJ@3;^Y@jjg zj*@ufkVO!X()rl0`5HBS2Jfm`3dN+Laayy5pzEvx4F5xfbwTZ(>dJ(-QFkP`IZpa$ zqzszcxU*Sf{ifqCKIyuYoZ?~P7fJ#c+2e!KES(7$MX|+7V{$?5Mus&rVbCqGTy>t` z1oQO!8;2`Y(>0Z<$=(hIVAn%}_mYA*80gpGG!WrQ{j1uSRlHxGq(K@;Y}Y!xB)+US z&@q3?eeO(VoDQxGJD+{JOxX#}&2nKFyTyE#x%ZJ*37>;LGLbjdH2Euy6Z5-w!39iA zZTV8tk}I(v2T>zbJwo#NsMV6|{J>fXS|CcG-i3sd@@6xJFx(#4k-x6>f)tM-_P{P<-ucD&jbTkOlMM*t-_DqI` z=34oB@Hgn_*RS)lz>D-YcCvgdR|m6ANAys~TCLhHE2Pr}T4_+W{zBKKG8%V)MX$Ry z<}9N6!bW{(Hn{Y2X_TkeFvG;vzT)C5o=3?qzqK0{*6lv+=uyhIkJ5{9S5tAB9M$#2 zIG`Az0avE3rAz^ z*4k;+vZ~j`7G6s*XCF{f)wS9K2jG%bGx1Z2UTb6TIl{i5Cu3|M8#boRqS~?N0gX-3 z-DfY)8}3K~lDtc89cgbhVdZ;bU7x|7H?vB|m(0Cca*E(wF!5x;HJ59W6wA?Wd|Q@fCJ0vlf(>NyJ}e>hAM z1`1CT>F0PR_rcU+U}qUj*9Ydl-(6~@b--k7>snD$QU5UtV7|`O$N6r-cfy}^j7lj5 zleHf^3)inFh9z0NvS4%0$oi?4>!n<8MOEn_i+8l6y zvZ6*>%ysN53YywAGLjl>lC!%$r3Z<|FO1Bm?s)=G@UQpx@WE~+7mgjg7Z^tNCwU&h zXlFH4p6bfMfQx^DUNfYcyVC}T1*G|V<`FiZSow0Xyql_h9Vg1@dGigyw{qbbJN?$Hhbj*^AhH)v!u7rJr&Kk8j6t`an zBp6)|_EP;kFt`1pjM>`HWI88zO^l7L7#SXA)zdC2hD=gIBC&Mgb|n zjfkG?!KnF)r1-;R4-IT}wZ6Ma$3_by6Rd(u2|`bFUg`yfhVpk-m{&ZYpwOdv8q2`S z+9@wDc(7Boq!&?cfLLAi>H5C5hKE7*F@O6UL?-JIE)Fnm+pLzhEr0BsyIW1GesaQ5 z5*7y4$QQ3ug{Us*;ST zsIV7+6q2v{$tdtz|69TtYpGSq9+|e-tV2WaLpHD4s<#f`OdcRo<0i zHcbCWZRhwl*}4|>MWYMR?niTGKA6v_W|mZ5SE4P@`YH zF{~xs5=P-&{3c+$u$z=q#Cd$q(~nu$Yj5l=S{fAam9C{ZInZi2(ARNaBV27zfl8v) zZ2i#1J<(97zP8WMGK=iL#*GaaH~eu>@Rf^%1R>$$c*`#v7>+A(pwY%5WgW7=YoJ8< z_>;3XJXRlWBit~@_9(CgKxFjw?W5m&IJ{3!gfr9cXWI%(jNf57L@=N_X*M7RtaY=wEk~ni&Q1uOE z`lL3NbM<~&7!*A#hiZR_^oZ8roi$Kn__`jvGfGk6RdL+kSs2H(R3DAFp%(DwjnRZf z`Gee{xW_<0ZOl!(5?mwj=Y8%Z+vwi1_%iqXq@da_K2JF0^ntibXa3mcEDnw|Y;PFCg2Tm}4qN0{5>g}TdU zKE#fq)0B}Vya~?t>B@hq=AWo;01OnWZ)l#E1-{pq%N^8=qoI~~uJe>~WO-rm;l!@^ zif-J^{W?XzlJJRgFZXsLMtI!|zq^L~je=WuS$Z`2CHCIkzfEvA*KKd5a1U{6Ix*?b zD!goo6P#&q#Sk*C8l!u1;A7A<&2KrM^#eiy+y4el$0~`+D12hNs1(!5t71BCBWp@o zcZ8!5uK46=j{;U>wb@xnF~$g;U9AfI7kd5+Ed(FnS5V_OUxe(-GH5I@eC2*2%nv7w z7h_oUtZI%{b0w@b&UUwL-|JXQuZ~S9X=-z{7?*{Hf0Au?3TI$?s5E8)TJlBJEPXtY zB7YU1)F&lz*JY^$LZPP(dQ4j`-5+uK`t7a9@t)syH|83KYu zvT>OEge=kvY9=c|dKLBbry*a0h=zf4ny2UW72ykW$$y}4SG8lfHZo5spWlnFI!vkm z#=`Dsqj)JSA%|nyb~aoQ#(sF<6iMGphBM(?Tc@EV6(}9;Rkb%!=Q!D&Ek|8sH#Hn0 zWl46Bt4PIq^9J^jsLhMzSYwLm7cm3jI;y($`#(~mIHP;BXz&WE&K@~GBzybsc@tR! zAbnZ=6XuJ+e#RE9T2i&r`CXI)bMM^snOQR3;-eZS;>PtfVR9jo>ghN%J&S`4>Fnu) z+5d8FEFbBcHI=`*dAXGZo;QGp8A2UZ>Gb)Hzx?FE|AQdT|MXC#p=IRfM0ruptex=c z4{)ND>-}Ym_8*S`u)>vr;X1CanEbfdY=g`*(2t?{`UC1;K-_pH|IWCd8!%t~Up@M3 zrOG`G7eCF?doa1G6<)YL1knFMFl8-04IodzD=d6w-M>-&{w`gC`PyE{-g(1b|B6GB z696|@2RYvBx&AwZ07jpv;6q@MXwy&3cCn;%cn1UX?JYOC0u<$x8EgR5d`edxu$IsG zX{{Qhpzx!#3q-KsFiuCDtX0vhH_T!gm#3<_FWum@3GjX45e=*}G3h)P46^^RZx+nZjVsk(ru80~bDt?&>gL@$o@`85|{{H@9lD&kZZ4>nWPW1q)p`CsE;Zq`YYR0e!lFqap1xxb9GwEF`@@0Y+`Jx{0OAM6sXw8$w4m)FTbUWU`c zLX2K$9KZ91`POzaul*v^tJRyO092SK<0}%Ls|{+UEzsF*p2o=}V+a>IF&@fMwcv*j zwto`%k27@v?t6-tkf%tz;^8m zb=33T9diYQE1#ZT@f|xn#tGG~_Yegu9~%e=%a%vi+Kq%#6tc3gxHwEiTT4iinQ)XP z#efP6q~yl98rSEP@yUpQrgsyHU|XL1YHjvM-{Uoj{xF&=^5?Yf!PvCvi+xZE^^qRI z9eR~25n_ll@!}JZ!Z@dg zxnANpMNHSD5M*WMnd|}0{`^>YKisN6Gbb?60KjtnmRu9bahkaQZ-Zzz8b?|^8yQmA ze}c56`f<)wQ2~L1<=`d99Um)Q7VN6aVLRhmNREo#{{H?TC{89_6*9(B_$qE@rY1Q3 z`-}amj9OMtRKEAbdimhTO7t@8o^H~0r?uYZAfi@|bexVqaG{eJfF7i5b_v*JA_DAt zV+!exsh1!T*N4%aB*s1$O!E6VFd4D^I_M|L9qPIk(E6I@Nft_l)rTfjw2L z1~47nm!iWjL7x&DH{9F1Do^`(NPS`aAX;P)p~o1jeK zsh?(g?ShhF<0bYJRdNAyjjFkzLyknpB!3=^=?a}vupZ{ITN2~Y3KWz_Wt_Mdh3bnO+ZpQyMP85wJ6tlX!$t3MNUNle`9t&3D1@u_}*#w~Z zDbn_$Ncj8NRx1Lm4Hj)U<)vrQL~}kvP}FdwgGqPSq{2F+#ssU&##7s9}nyw3q3gOwC}&)e3w?Hh?^*-wAMjeS1!8QVh>PS(6Os_LR5EU zP^B>Zd2Sq zf(34@iiYBFW@@dB*mE&@J&Nfe!`9F;635*aonD=-ts|=xx3l_{aS~W^yWeuUV=2f& zKBgD8bXt|sdwZYtuHv3x{JvTjrt?DyNCdMcs=vL6f<&Y-(cgUaPLBdv3}!M8A%LqM zaICYdvzKDf061izI-IlWofa!Y3-13mvngVWgi`*VObdoSIF8T3wlwtlU6 zD3?r?fMA+*;`z8mxlnp@Gl7_xnCRq4{FYUJ>C4E&wz)$<>_nD;fPhlADjE74;<&VS zpUm^VmGR&{y$kFyuHG=3q%bhpx?zmya1A-9ix7QKU{-SGyBZSb$xOJgW|FOIJDd<5 zC>?YL6ikmg8F(NcMwzuh(U#{IOFo+t=Bh!wewX!eH79a^<7T+3Mb|iO|Hw#ToL*zjCy)OH*eu|1KZA{IxlaXcfaR@0oAeA z$w@+7UKD>6)H_Qc!1D7O3r%GShtEBss}tHdnaP97gM)mJE_xOI$BtYg{=)sV|9LF6 z@bcu0Y%nzmK3xt#)=Mf^Cw*oV%z4C(2L|tw4=AFEQ)1TON?%6-lZSOeS2J zuz)NX-ItT)*eDyzTb--WWsJe778@*(E=T2kaK#RPyrF_QGu#chaah!tPK~x`vQ7uV zcL%=QpaZGtkcRw}E$u%vn+fOukz|t4>zzxMG1u+N89%K1TVZdB!Z_1&C0j#zUn%;= zTh~`TFZa)r%ca(i^ywlVPPiV36@s8Fc^&L7+SI7}az9B8NKJ1Bj0@}3?B3YK&4Pz3 zrBfsKth>3wSz3Fp#KV$dj7&_yKKZZ7uZFF|K_CQi14p20s)y@#d&M@J|_+pmy%|H z|LkRjC~yn4sOY{{J|q|D91r2;%%nzgw&(Wcj&^i(R7b}|tDMENJ!F#tHO6vt4HEvR zLlr2txFRRZvdKCN@e5RhNcn^m3>U%v|k-J#Wn`vq(2+2*krRJB6 z13GhxD0gFoPCEcB(s&=|_*|5%qi0&r-#@@)5}+O*hq5}JWOf8XV}OfibL2DDr>7(q zcY^1n2hSusa9G+pv*oT*rKWbIy?iN@3*%6`guOq(-T7aU=K~9MHNw9fSgg;YiEA5* ziA!gt$yh$#O*EbpE=h6|8++;w`JLEYQ(Btbz6gen4slMWWjvR}Bv+oYpxWH5Wpxt~ zn_i3!)qvfh;(71RV1+y;Kt%!2#|n!;kW>9#vC=z?TLO5gtV|3{H`tSA3GV%SBCIgz@I2eb2PAqij6FsxiGPg9Tvgx1nP9BZ=;vO9gZpPvK3|C_*67 zSsj5}%G5v12D!rVTy(TRnk09o({on=hR%tP&nHg0)$ltF05{Q-DCR@fcf9JO1taqE z7j0aN&-ef4k{t| z1Jy|?pVS1Vai)H((t3W2HmP<%Y;atUb$Y~`_ry0w(P=3x-g7?IoZ<1K7YoMVdMe)$ z(A>#;-D4+<_!T?eTx4fY=L*ridk4GkH|SYeh3QbezK_zhM?NPF&lG(yk$1oy`2(o_ zw}BNmyutKljV8NtwqXTwqDpu?SJldD@4bkczm_3%yzUkmW-0+l21)T2Sp%#C6aomg z{Nz=(JFRO4z54n`IOmp{uLaR1Wz`-Z5v_4~7tKSsbCJhAll~@fm$?w$4Rgo3LiOUt z9<%&v+FgCSec*zT1)`a=rq{Tq=Jq<^|CRcRiTK_RRJXRA7Er?=Y?x?CU^cEyg ze2d$asR)HT%dbqI>3W+ic7zGX-6kP4=;`j56t?Qg?n1E$}~eweY?-=I;xFZf-~J+zWm_( zdRs{IaL5laT_Eh(Bd>)tFT_Di)osJE&4rNL0RCpREEMWx`ER`TuP#p?BFsrgfF(1} zYcSI06z*iG4vokUFfPfD6-2y;>vDW^BI{TpEnh!%*lmg0Tm9Nm$i1OijjS`Vd0@sg+zV75M2g;EdXUVtPjc-XmD+j13g|VE7_w~9QGH?C@SrvT(0h)ZZF_0O||9`eH?X`fWwTYBTfv=eYZl=0Wa?MP!uwUjUfgJcI?h&!yp|m>7jkWLbLGoK z`R|4_qjO%`;!F;{Y-N zsQXIw2BWaN(dTve59Cr3Nw21*BI|#x-^a)K96gPAu#o_Ro;e$(r-f$vuw)~;`?udjb|-t&BY{I~>2B)&oiu5pF9PK(N)v^*YU zjRIjL1WGrU7ctz^*xTA!O17T+9N=M@og^1)*Cpfy+s|!}OuElJ!B!c1?f1jrr-k`K zuiYquSTg!J7@;z-d<4LAzdS?5A#~uw$+d@PS(hgM>Pb=FQ`| zBN{fH`!d*`x_9re_^o;u__)}@dU&t>ZnDS5f@I`489%6rxpP%f6Ej-r^-0EISCr&k zFRgLg{-0mqf4NS0-#&Z&-mc%Ye0HR>1i z!IXh@n{nS+nNHAE)P`^3cdPyR4Z@j4e3+rf$-@^CC%yXDN{2Jh$KVj)b}uPnK-YMf z2Lfq`iN0e=#0We5QmrcOG>SBh=dyhkOVyvSov;gt{u$1nba#8Xnqw}OamcQb5qIsK zo*Rj>u5Rcb&W#(--~M%_ylvS;^Zno7Pb7`tgGjvNv}l;8%k*pc9b3~mrLi-0p;JR_ zs9Y4H^(4B=bnEM8F0lM|>x0=nPP|Sh2l;gqTn>;y29)3nKev&^INoXbM2^#(Ice%Y zS>S^R^c>D~CF(1Epo^`4`xOsb8o7r>!JzR*scDZR+x8SpwWGQTI#}%dStF++I}bjN zh~-(R+GK=q8H-nGpVcg#N^nKL5=)n;A>i*(LdZyaK1v&d2U?S}o6WZglQTOdkX=6e zcVFoH?)HNQ!aGwkR2N704OU;pH1cs8X18Z>7}sn(XHX#rvuCc%p-cAX=22#B8OrQI z{|+|Rouh9=)T8CHrl{C&Ooy)Q1SJo&Tyu!@OR!?ZI$*r4O^Iv^hnp24 zO~g94pm+FJ&@96H2TCurBzzy^-(xd+Cm*+~cg*g2RMNE_>bAZ@>P?d@O?`uqd9C3k z{g7tD|HGdPFW;cR=EqFk$&erN zq*zgW>6qNZL*a$g=i7f8zc^*XjdJlmS(TsqV$Wzk$qp%tC#ahDY32_|!A!&@VD8hN zxYoHK%7lM&)X!Z=?=o<{a2~OIzH+%L3N%-ksYY{d8$^B@$CdIkQ!L1GMpm7Lhp1K) z#{M^kzJlJU1eln*6JyAwt@!q%XUHeRsksgHj{8F)FD9tBU%^bCukD{cUfi^nzHj(T zXy~`i{-6;UhS&kN$o9o6-ckFWd=mxNd&@GGi4w00=I^@ihk6PyM`*vg6tDQ*h}9?Jvsu49`l{{me43?WeDXNz~&0^*`^wJZvC$A2fh?>Fh2& zx5&L4&tr>`NkbLLQcBUc2kVQI`wfN$y$o@`O#L@Bq%Z<(t5r>)bNb?^B6XN2vnc_4 zgA>hFkN*(eh>YI2XE1C3z};bge>yMp7Zp*-))FqNN%t{O7}*> z=sWosdqJJ20}(puTV3}#sjEhU#X3hqZ#iR(|4%&FigjC`AN~gam%H)hyL~S@VY1uW zwI!~@Y#}i8wDY7{ub}XCr``M8mid?gy_g%J_a?bl1ymvBp} z><0OF4xex)@LRk((+&HWahAO`o&}L(Me?*Z>gg}{V#z7Eo@(9H%pqb{uXl4isE8x{ z2cV4t8=?~TpFna|tRZvK`-ANR+)*O#x+ENEb*(N#qu8BSB52r$?zU4iUu1EsN=}(6 zhg{z0oU(!Sk*ZiRc^X4L2hTtd>4@WmrIK%(d#}nG!S!sxL}2&V(&mLLY6u8dU*jiT8OE;A?fF@w+^k0yyv-Az?rt z{n=(+R(=a0PQtzP{YqWoV_EYz;H>nZ=#2EC;j+~lZOaw-)`SsEua_e6-gfIzfxM+o z@^o)p`}h^9WQcGBz1T)9E$_;z(pZHAwD=!K@}}y1Oi2B>U-rbI;)|=S%>LQxE~yzR ziwJF(vKO$9?U({d0;1!)<BTEc%8=pm*5? z(Vl1)%?hKxO5lykpAPiUn@U1Tf6|hEnuo6x=BtXD*5csd0>cT5Yua=kKeYfT6|_Y% zXjwjzE3J7DZ&Y>*F(_y0KC$|tfBMAUmSOML1B&oxSUnBK@;QDz`bJ2@kJ%3Tl27ZwvB#YNxCBsv*)gy z{hF3>Fad=3!a{MFPQv6dLnpMF_i&y}AwQ@bVkT6o*I(D|^<#WNNv~TcuAGf0pQ}6o zr)~xvvQ`6UnNVt3^=AaJ!gl(-@@r$0Qnn&0sU?M!HQXY>9~ocXs+-@YF?H|Em5{P4 z#E;F{SQkmk%5ueu&O1rTJ88O3tuwQqi-nkjSR$LR9_MKzGV*#bwqy12Rc6$OeC#?}DXrX^#FXLgkKv2VeNjrz2>RKR=;IOJ*DQuje(AZw zB^3eKq|q~-aug{LZyy<^QOSt;+?R-wTc}u>bl?h~(@(PlU~u-8<2siB-^ zr2206Iv~Q*?WJLUob=&(tcVj?k+7i3ClvllI+`M!2!I$@in$D|2B?TK0 zexytw{3QR#(`IUc*`AK~I69p#YPUvd*gDC+pyYJS=L+*S%9W^nKQC;jnYX`%%JI9E80BdY16k`KeW@pU^s;`ZnQdia+i1!zo7JR3D1!&>q)Ib{vyb;I#N@2DZ$D_n&=%U1N> z55kni+sn|y*H=mzZWYBw^C}ex*DiaMypqm&RTe&_RA?A$mN1{U`&azJrZYjIAK$&< zX_k%Y&K=|G=@>p|0r5xf86*f!)r}9Qo~PD*(4jL-GqGaX_CrQ`q#VEEao2>AsAiuG4=LI_kFmh7CN9^Hc0UXKoiN#iCflDUt6wC)M2_pbX1Uj@g4 z?rKmF>0>SIKdkKDs;h0C+ms8hu0&h8=II8}nd-!+ zA~hboE*-UIuyv_$lqs3+mXhtl5h|SDYbK)Otgzcj(@j3a@C_^}vnXkJY5hWj|Jyec zrHIJWS{v8#PJf9|E&n5K6&4*vm}1IN(zUB^a#$1C>{U-8{kVO;p7}!k1z8KxJ;%Xy ztg!q&j&Sr*G@g@RA>f8nyB?TmPPl0nnMW|BLC7ASFGn7?~M+=#Xdx| z^_Qmj&1=!JY>Da__O8X2sWNBBqDTAnJ(9UWyAU;6&i4H!4+g3$$PXB&d%~5GzUFSP z^OmG3ymjt56jQ*HnNa-ZZ9bnH+S0aGY4`o*BsT=ROY^cL42X+c2S7ICzBSEocrSyH| zcZ@VouQ}P|2itSSgp+R>RmGf|c>|sW%g=m|pcJmr3ma!dtk3Pa43wt(Wr*BzON=suC!{CAPnC?Q`u}hgt55J^Kk5@VyHg}K#hpSjzgBY2ea*EVJ0c-SebHr zn&PPI;?@(Wl(|&n398_9>#NhwheX$5MTMjZ$(BFY_b=ZccZ<$m$NiS#@qLMwF}=_2 z`oTRl@s%)sw6N6%US#EHtk?Q?uR0dUO1E*_)vu93iRvA4YjTQuWK-ZI-K`JLdEbuW zzLw62sesuWYP#dA^}Uq0UEV*&qIi{qz*761sNztR#654|tmb-vU}xeSC$Ky*+4w%h z-x@+{!le87SYSc9aQq5gb}A@ice43vgwRJANB(k(yCq2Q_+8Q?&k24T?EK+-10i&tX|PRbVEPsMcNdy^lZ zq_lflu|dwnFyl%;sOx4XG_|~r5a<>HO-Oh62&rj$oz3Ar4bORBY7iVE_lnaH=se}! zD?^wr*G9Xi4z3YCk&JpVr$yi1o=eE0S6|2G7};P+f$26%bsKzL9F?9jC=AZ2XU0=$ zS9v?6-67Dv&~Gly$QU(^RdXVJv`f6oj&kN7i9jM4rCNp7N}I{cK3XpdQeNR{Hw=n` zJr^UcU@VMPV2kmvo{n*!`xdbRfse3#mqhdFr#Q2vACYF}bJY4i$q4Kf63Vnj-DspZ zW47TwSF7xVxl%D7PEsR8OZ9PF-hP9n6I(j#xA?^-= zXVZC5@7w{+q}w$i^HLEX7qrNfq>!(1>GcnKz0KoFI$)ipycFlrv(ENxj7ToAfK;Gz zg;IXFsKHq>7lK8YH%Y-`yfPNSHICz?`*2`SYCNW!H}9W>L8CknJs<4SGyh5{nNizp z`oLeKyh?r;6!0wv29oetZ+0a6VI{&|B9_>Ow7n}P_8q@8{g_E>t}yA+45y6+WQPLo1CG)wECJwD-GlebGHO~#>J#Q zv8#EB0#Yd0WmkvUo>@2GI4^Q<3G!=b7t~Q#^|)?F7wW1(8OEW2QTe6M@E

8?>od*i>0xmz{(NeO#`}KX=y%I)V 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

  • +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 diff --git a/images/managed-team-flow.svg b/images/managed-team-flow.svg index 6bddb3ef..1ae8a02f 100644 --- a/images/managed-team-flow.svg +++ b/images/managed-team-flow.svg @@ -1,17 +1,17 @@ + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + inkscape:current-layer="ref" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> @@ -69,13 +72,11 @@ id="master" font-size="12px" font-weight="700" - style="font-weight:700;font-size:12px;font-family:'Source Code Pro';text-anchor:middle;fill:#979797"> - Josie - + style="fill:#f0f0f0">John - Josie - + style="fill:#f0f0f0">John - John - + style="fill:#f0f0f0">Josie - John - + style="fill:#f0f0f0">Josie - Jessica - + style="fill:#f0f0f0">Jessica - Jessica - + style="fill:#f0f0f0">Jessica - git commit - git commit(A) - + y="86.195312">(A) - git commit - git commit(B) - + y="364.19531">(B) - git fetch origin - + y="176">git fetch origin - git fetch origin - + y="470.19531">git fetch origin - git fetch origin - + y="384">git fetch origin - git push origin featureA - + y="105.40576">git push origin featureA - git push origin featureA - + y="583.40576">git push origin featureA - git push origin featureA - + y="247.69531">git push origin featureA - git push origin featureBee - + y="323.69531">git push origin featureBee - git push origin featureB:featureBee - + y="446.19531">git push origin featureB:featureBee - git commit - git commit(A) - + y="155.69531">(A) - git commit - git commit(B) - + y="296.69531">(B) - git merge - git merge(B) - + y="427.19531">(B) - git merge - git merge(A) - + y="515.19531">(A) - git commit - git commit(A) - + y="565.19531">(A) - git merge - git merge(A) - + y="220.69531">(A) Date: Thu, 10 Apr 2025 05:00:45 +0000 Subject: [PATCH 445/549] Fix grammar on how git svn fetches tags The wording "rather than treating them remote branches." is missing a preposition "as". --- book/09-git-and-other-scms/sections/client-svn.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/09-git-and-other-scms/sections/client-svn.asc b/book/09-git-and-other-scms/sections/client-svn.asc index 502e4998..de330a1b 100644 --- a/book/09-git-and-other-scms/sections/client-svn.asc +++ b/book/09-git-and-other-scms/sections/client-svn.asc @@ -158,7 +158,7 @@ c3dcbe8488c6240392e8a5d7553bbffcb0f94ef0 refs/remotes/origin/master 6dcb09b5b57875f334f61aebed695e2e4193db5e refs/tags/v1.0.0 ---- -Git fetches the tags directly into `refs/tags`, rather than treating them remote branches. +Git fetches the tags directly into `refs/tags`, rather than treating them as remote branches. ===== Committing Back to Subversion From 4e769bfe0bd1e0c97c26c4aece822dfea8ea06aa Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 7 Jun 2025 16:51:03 +0330 Subject: [PATCH 446/549] translate(01-introduction): translated about-version-control section to farsi --- .../sections/about-version-control.asc | 71 ++++++++++--------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/book/01-introduction/sections/about-version-control.asc b/book/01-introduction/sections/about-version-control.asc index 182fcedc..abb90689 100644 --- a/book/01-introduction/sections/about-version-control.asc +++ b/book/01-introduction/sections/about-version-control.asc @@ -1,61 +1,62 @@ -=== About Version Control +=== درباره ورژن کنترل (About Version Control) (((version control))) -What is "`version control`", and why should you care? -Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. -For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer. +"`version control`" چیست و چرا باید برایتان مهم باشد؟ +"`version control`" یک سیستم است که تغییرات ایجادشده در یک فایل یا مجموعه‌ای از فایل‌ها را در طول زمان ثبت می‌کند تا بتوانید نسخه‌های خاصی را بعداً بازیابی کنید. +در مثال‌های این کتاب، شما از کد منبع نرم‌افزار به‌عنوان فایل‌هایی که تحت "version control" هستند استفاده خواهید کرد، هرچند در واقعیت می‌توانید این کار را با تقریباً هر نوع فایلی در کامپیوتر انجام دهید. -If you are a graphic or web designer and want to keep every version of an image or layout (which you would most certainly want to), a Version Control System (VCS) is a very wise thing to use. -It allows you to revert selected files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more. -Using a VCS also generally means that if you screw things up or lose files, you can easily recover. -In addition, you get all this for very little overhead. +اگر شما یک طراح گرافیک یا وب هستید و می‌خواهید هر نسخه از یک تصویر یا طرح را نگه دارید (که قطعاً هم همین‌طور است)، استفاده از یک "Version Control System (VCS)" انتخاب بسیار هوشمندانه‌ای است. +این سیستم به شما اجازه می‌دهد فایل‌های خاصی را به وضعیت قبلی بازگردانید، کل پروژه را به حالت قبل برگردانید، تغییرات را در طول زمان با یکدیگر مقایسه کنید، ببینید چه کسی آخرین بار چیزی را تغییر داده که ممکن است باعث بروز مشکل شده باشد، چه کسی و چه زمانی یک اشکال را وارد کرده، و امکانات بیشتر. +استفاده از یک VCS معمولاً به این معناست که اگر چیزی را خراب کردید یا فایل‌ها را از دست دادید، می‌توانید به‌راحتی آن‌ها را بازیابی کنید. +علاوه بر این، همه‌ی این امکانات را با سربار بسیار کمی به دست می‌آورید. -==== Local Version Control Systems +==== سیستم‌های کنترل نسخه محلی (Local Version Control Systems) (((version control,local))) -Many people's version-control method of choice is to copy files into another directory (perhaps a time-stamped directory, if they're clever). -This approach is very common because it is so simple, but it is also incredibly error prone. -It is easy to forget which directory you're in and accidentally write to the wrong file or copy over files you don't mean to. +روش مورد علاقه‌ی بسیاری از افراد برای "version control" این است که فایل‌ها را در یک پوشه‌ی دیگر کپی می‌کنند (اگر کمی زرنگ‌تر باشند، در یک پوشه با نام‌گذاری زمانی). +این روش به‌دلیل سادگی بسیار رایج است، اما در عین حال به‌شدت مستعد خطاست. +خیلی راحت ممکن است فراموش کنید که در کدام پوشه هستید و به اشتباه فایل اشتباهی را بازنویسی کنید یا فایل‌هایی را کپی کنید که قصدش را نداشتید. -To deal with this issue, programmers long ago developed local VCSs that had a simple database that kept all the changes to files under revision control. +برای حل این مشکل، برنامه‌نویسان از مدت‌ها پیش سیستم‌های "local VCS" را توسعه دادند؛ سیستم‌هایی که دارای یک پایگاه داده ساده بودند و همه‌ی تغییرات ایجادشده در فایل‌هایی که تحت کنترل نسخه بودند را ثبت می‌کردند. .Local version control diagram image::images/local.png[Local version control diagram] -One of the most popular VCS tools was a system called RCS, which is still distributed with many computers today. -https://www.gnu.org/software/rcs/[RCS^] works by keeping patch sets (that is, the differences between files) in a special format on disk; it can then re-create what any file looked like at any point in time by adding up all the patches. +یکی از محبوب‌ترین ابزارهای "VCS" سیستمی به نام "RCS" بود که هنوز هم همراه با بسیاری از کامپیوترها عرضه می‌شود. +"https://www.gnu.org/software/rcs/[RCS^]" با نگهداری مجموعه‌ای از پچ ها (یعنی تفاوت‌های بین فایل‌ها) در یک قالب خاص روی دیسک کار می‌کند؛ سپس می‌تواند با جمع‌کردن تمام این پچ ها، هر نسخه‌ای از فایل را در هر نقطه‌ای از زمان بازسازی کند. -==== Centralized Version Control Systems +==== سیستم‌های کنترل نسخه متمرکز (Centralized Version Control Systems) (((version control,centralized))) -The next major issue that people encounter is that they need to collaborate with developers on other systems. -To deal with this problem, Centralized Version Control Systems (CVCSs) were developed. -These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place.(((CVS)))(((Subversion)))(((Perforce))) -For many years, this has been the standard for version control. +چالش بزرگ بعدی که افراد با آن روبرو می‌شوند این است که نیاز دارند با توسعه‌دهندگانی روی سیستم‌های دیگر همکاری کنند. +برای حل این مشکل، سیستم‌های "Centralized Version Control" یا "CVCS" توسعه یافتند. +این سیستم‌ها (مانند CVS، Subversion و Perforce) دارای یک سرور مرکزی هستند که تمام فایل‌های نسخه‌بندی‌شده را در خود نگه می‌دارد، و تعدادی کلاینت که فایل‌ها را از آن مکان مرکزی دریافت (checkout) می‌کنند.(((CVS)))(((Subversion)))(((Perforce))) +برای سال‌ها، این روش به‌عنوان استانداردی برای "version control" شناخته می‌شد. .Centralized version control diagram image::images/centralized.png[Centralized version control diagram] -This setup offers many advantages, especially over local VCSs. -For example, everyone knows to a certain degree what everyone else on the project is doing. -Administrators have fine-grained control over who can do what, and it's far easier to administer a CVCS than it is to deal with local databases on every client. +این ساختار نسبت به "local VCS"ها مزایای زیادی دارد. +برای مثال، هر کسی تا حدی می‌داند که سایر اعضای پروژه مشغول انجام چه کاری هستند. +مدیران (administrators) می‌توانند به‌صورت دقیق کنترل کنند که چه کسی چه کاری انجام دهد، و مدیریت یک "CVCS" بسیار آسان‌تر از رسیدگی به پایگاه‌داده‌های محلی روی هر کلاینت به‌صورت جداگانه است. -However, this setup also has some serious downsides. -The most obvious is the single point of failure that the centralized server represents. -If that server goes down for an hour, then during that hour nobody can collaborate at all or save versioned changes to anything they're working on. -If the hard disk the central database is on becomes corrupted, and proper backups haven't been kept, you lose absolutely everything -- the entire history of the project except whatever single snapshots people happen to have on their local machines. -Local VCSs suffer from this same problem -- whenever you have the entire history of the project in a single place, you risk losing everything. +با این حال، این ساختار معایب جدی‌ای هم دارد. +واضح‌ترین ایراد، نقطه‌ی شکست واحدی است که سرور مرکزی ایجاد می‌کند. +اگر آن سرور برای یک ساعت از کار بیفتد، در طول آن مدت هیچ‌کس نمی‌تواند همکاری کند یا تغییرات نسخه‌بندی‌شده‌ی خود را ذخیره کند. +اگر دیسکی که پایگاه‌داده‌ی مرکزی روی آن قرار دارد خراب شود و نسخه‌های پشتیبان مناسبی تهیه نشده باشد، همه‌چیز را از دست خواهید داد — کل تاریخچه‌ی پروژه به‌جز تک‌نسخه‌هایی که احتمالاً بعضی افراد روی سیستم‌های محلی‌شان دارند. +"local VCS"ها هم از همین مشکل رنج می‌برند — هر زمان که کل تاریخچه‌ی پروژه فقط در یک محل متمرکز باشد، خطر از دست دادن همه‌چیز وجود دارد. -==== Distributed Version Control Systems +==== سیستم‌های کنترل نسخه توزیع‌شده (Distributed Version Control Systems) (((version control,distributed))) -This is where Distributed Version Control Systems (DVCSs) step in. -In a DVCS (such as Git, Mercurial or Darcs), clients don't just check out the latest snapshot of the files; rather, they fully mirror the repository, including its full history. -Thus, if any server dies, and these systems were collaborating via that server, any of the client repositories can be copied back up to the server to restore it. -Every clone is really a full backup of all the data. +در اینجا است که "Distributed Version Control Systems" یا "DVCS"ها وارد عمل می‌شوند. +در یک "DVCS" (مانند Git، Mercurial یا Darcs)، کلاینت‌ها فقط آخرین نسخه‌ی فایل‌ها را دریافت نمی‌کنند؛ بلکه آن‌ها کل مخزن را همراه با تمام تاریخچه‌ی آن به‌طور کامل کپی می‌کنند. +بنابراین، اگر هر سروری از بین برود و این سیستم‌ها از طریق آن سرور با هم همکاری می‌کردند، هر یک از مخازن کلاینت‌ها می‌توانند دوباره روی سرور کپی شوند و آن را بازیابی کنند. +هر clone در واقع یک نسخه‌ی پشتیبان کامل از تمام داده‌ها است. .Distributed version control diagram image::images/distributed.png[Distributed version control diagram] -Furthermore, many of these systems deal pretty well with having several remote repositories they can work with, so you can collaborate with different groups of people in different ways simultaneously within the same project. -This allows you to set up several types of workflows that aren't possible in centralized systems, such as hierarchical models. +علاوه بر این، بسیاری از این سیستم‌ها به‌خوبی می‌توانند با چندین مخزن راه دور (remote) به‌صورت همزمان کار کنند؛ +بنابراین شما می‌توانید در یک پروژه‌ی واحد، به‌طور همزمان با گروه‌های مختلف از افراد، به روش‌های متفاوتی همکاری کنید. +این قابلیت به شما اجازه می‌دهد چندین نوع جریان کاری (workflow) مختلف را پیاده‌سازی کنید؛ جریان‌هایی که در سیستم‌های متمرکز ممکن نیستند، مانند مدل‌های سلسله‌مراتبی (hierarchical models). \ No newline at end of file From 67c4b8340debb3511a479b2ab7cbcb2678621c8d Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 7 Jun 2025 16:57:37 +0330 Subject: [PATCH 447/549] translate(01-introduction): translated command-line to farsi --- book/01-introduction/sections/command-line.asc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/book/01-introduction/sections/command-line.asc b/book/01-introduction/sections/command-line.asc index 82a80ec3..e3ccb9c7 100644 --- a/book/01-introduction/sections/command-line.asc +++ b/book/01-introduction/sections/command-line.asc @@ -1,11 +1,11 @@ -=== خط فرمان +خط فرمان (Command Line) -روش‌های مختلفی برای استفاده از گیت وجود دارد. -ابزارهای اصیل خط فرمان و بسیاری از رابط‌های کاربری گرافیکی با قابلیت‌های مختلف وجود دارد. -برای این کتاب، ما از گیت در خط فرمان استفاده خواهیم کرد. -اول آنکه فقط خط فرمان به شما این امکان را می‌دهد که بتوانید _همه_ دستورات گیت را اجرا کنید -- اکثر رابط‌های گرافیکی جهت ساده بودن فقط بخش جزئی از کارکرد گیت را پیاده‌سازی می‌کنند. -اگر می‌دانید که چگونه نسخه خط فرمان را اجرا کنید، احتمالاً می‌توانید از نحوه اجرای نسخه رابط گرافیکی نیز سر دربیاورید، اما برعکس آن لزوماً ممکن نیست. -علاوه بر آن ممکن است که انتخاب کلاینت گرافیکی حاصل سلیقه شخصی شما باشد، اما _همه_ کاربران همیشه رابط واحد خط فرمان را نصب و در دسترس دارند. +راه‌های مختلفی برای استفاده از گیت وجود دارد. +ابزارهای اصلی خط فرمان و همچنین چندین رابط کاربری گرافیکی با امکانات متفاوت در دسترس‌اند. +در این کتاب، ما گیت را از طریق خط فرمان به کار خواهیم برد. +چرا؟ اول اینکه فقط با خط فرمان می‌توانید تمام دستورات گیت را اجرا کنید؛ چون اکثر رابط‌های گرافیکی برای ساده‌تر شدن، فقط بخشی از قابلیت‌های گیت را پوشش می‌دهند. +اگر بتوانید نسخه خط فرمان را اجرا کنید، احتمالاً کار با نسخه گرافیکی را هم می‌توانید یاد بگیرید، اما برعکس آن همیشه ممکن نیست. +همچنین، انتخاب کلاینت گرافیکی بیشتر به سلیقه شخصی شما بستگی دارد، اما همه کاربران معمولا خط فرمان را روی سیستم خود دارند و آن را استفاده می‌کنند. -بنابرین انتظار می‌رود که شما بدانید چگونه ترمینال را در مک و یا Command Prompt یا Powershell را در ویندوز باز کنید. -اگر شما نمی‌دانید که در این بخش، موضوع مورد بحث چیست، شاید نیاز باشد که دست نگه دارید و تحقیقی سریع دربارهٔ این مبحث کنید تا بتوانید ادامه مثال‌ها و توضیحات این کتاب را دنبال کنید. +پس انتظار می‌رود که بتوانید ترمینال را در مک یا Command Prompt / PowerShell را در ویندوز باز کنید. +اگر با این موضوع آشنایی ندارید، بهتر است قبل از ادامه کمی دربارهٔ آن تحقیق کنید تا بتوانید مثال‌ها و توضیحات کتاب را بهتر دنبال کنید. \ No newline at end of file From 236f066f1d05e5c1c9c165720e34fc57611f0d6f Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 7 Jun 2025 17:34:56 +0330 Subject: [PATCH 448/549] translate(01-introduction): translated first-time-setup to farsi --- .../sections/first-time-setup.asc | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/book/01-introduction/sections/first-time-setup.asc b/book/01-introduction/sections/first-time-setup.asc index 10b7049c..01a4cd5b 100644 --- a/book/01-introduction/sections/first-time-setup.asc +++ b/book/01-introduction/sections/first-time-setup.asc @@ -1,40 +1,40 @@ [[_first_time]] -=== First-Time Git Setup +=== ستاپ اولیه گیت (First-Time Git Setup) -Now that you have Git on your system, you'll want to do a few things to customize your Git environment. -You should have to do these things only once on any given computer; they'll stick around between upgrades. -You can also change them at any time by running through the commands again. +حالا که Git را روی سیستم خود نصب کرده‌اید، می‌خواهید چند کار برای شخصی‌سازی محیط Git خود انجام دهید. +این تنظیمات را فقط یک‌بار روی هر کامپیوتر باید انجام دهید؛ و این تنظیمات بین آپدیت‌ها حفظ می‌شوند. +همچنین می‌توانید در هر زمانی با اجرای مجدد دستورات، این تنظیمات را تغییر دهید. -Git comes with a tool called `git config` that lets you get and set configuration variables that control all aspects of how Git looks and operates.(((git commands, config))) -These variables can be stored in three different places: +Git همراه با ابزاری به نام "`git config`" ارائه می‌شود که به شما امکان می‌دهد متغیرهای پیکربندی را دریافت و تنظیم کنید؛ این متغیرها کنترل می‌کنند که Git چگونه ظاهر شود و چگونه کار کند.(((git commands, config))) +این متغیرها می‌توانند در سه جای مختلف ذخیره شوند: -1. `[path]/etc/gitconfig` file: Contains values applied to every user on the system and all their repositories. - If you pass the option `--system` to `git config`, it reads and writes from this file specifically. - Because this is a system configuration file, you would need administrative or superuser privilege to make changes to it. -2. `~/.gitconfig` or `~/.config/git/config` file: Values specific personally to you, the user. - You can make Git read and write to this file specifically by passing the `--global` option, and this affects _all_ of the repositories you work with on your system. -3. `config` file in the Git directory (that is, `.git/config`) of whatever repository you're currently using: Specific to that single repository. - You can force Git to read from and write to this file with the `--local` option, but that is in fact the default. - Unsurprisingly, you need to be located somewhere in a Git repository for this option to work properly. +1. فایل `[path]/etc/gitconfig`: شامل مقادیری است که برای همه‌ی کاربران سیستم و تمام مخازن آن‌ها اعمال می‌شود. +اگر گزینه‌ی --system را به "git config" بدهید، این فایل را به‌طور خاص می‌خواند و در آن می‌نویسد. +از آنجا که این یک فایل پیکربندی سیستم است، برای اعمال تغییرات به دسترسی مدیریتی یا دسترسی سوپریوزر نیاز دارید. +2. فایل `~/.gitconfig` یا `~/.config/git/config`: شامل مقادیری است که به‌صورت شخصی و مخصوص شما، کاربر، است. +می‌توانید با استفاده از گزینه‌ی --global به "git config" بگویید که فقط این فایل را بخواند و در آن بنویسد، و این تنظیمات روی تمام مخازنی که در سیستم خود با آن‌ها کار می‌کنید تأثیر می‌گذارد. +3. فایل `config` در پوشه ی گیت (that is, `.git/config`) مربوط به هر مخزنی که در حال حاضر استفاده می‌کنید: مخصوص همان مخزن است. +می‌توانید با گزینه‌ی --local به Git دستور دهید که فقط از این فایل بخواند و در آن بنویسد، اما این گزینه در واقع حالت پیش‌فرض است. +بدیهی است که برای استفاده‌ی درست از این گزینه باید در داخل یک مخزن Git باشید. -Each level overrides values in the previous level, so values in `.git/config` trump those in `[path]/etc/gitconfig`. +هر سطح، مقادیر سطح قبلی را نادیده می‌گیرد، بنابراین مقادیر موجود در فایل ".git/config" اولویت بیشتری نسبت به مقادیر در فایل "[path]/etc/gitconfig" دارند. -On Windows systems, Git looks for the `.gitconfig` file in the `$HOME` directory (`C:\Users\$USER` for most people). -It also still looks for `[path]/etc/gitconfig`, although it's relative to the MSys root, which is wherever you decide to install Git on your Windows system when you run the installer. -If you are using version 2.x or later of Git for Windows, there is also a system-level config file at `C:\Documents and Settings\All Users\Application Data\Git\config` on Windows XP, and in `C:\ProgramData\Git\config` on Windows Vista and newer. -This config file can only be changed by `git config -f ` as an admin. +در سیستم‌های ویندوز، Git به دنبال فایل ".gitconfig" در دایرکتوری "$HOME" می‌گردد (که برای اکثر کاربران معمولاً "C:\Users\$USER" است). +همچنین همچنان به دنبال "[path]/etc/gitconfig" است، هرچند این مسیر نسبت به ریشه‌ی MSys است؛ یعنی هر جایی که هنگام نصب Git روی ویندوز خود آن را نصب کرده‌اید. +اگر از نسخه‌ی ۲.x یا جدیدتر Git برای ویندوز استفاده می‌کنید، یک فایل پیکربندی در سطح سیستم نیز وجود دارد: در "C:\Documents and Settings\All Users\Application Data\Git\config" برای ویندوز XP، و در "C:\ProgramData\Git\config" برای ویندوز ویستا و نسخه‌های جدیدتر. +این فایل پیکربندی تنها با اجرای دستور "git config -f " به صورت مدیر (admin) قابل تغییر است. -You can view all of your settings and where they are coming from using: +می‌توانید همه‌ی تنظیمات خود و منبع آن‌ها را با استفاده از دستور زیر مشاهده کنید: [source,console] ---- $ git config --list --show-origin ---- -==== Your Identity +==== هویت شما (Your Identity) -The first thing you should do when you install Git is to set your user name and email address. -This is important because every Git commit uses this information, and it's immutably baked into the commits you start creating: +اولین کاری که بعد از نصب Git باید انجام دهید، تنظیم نام کاربری و آدرس ایمیل خود است. +این موضوع اهمیت زیادی دارد چون هر commit در Git از این اطلاعات استفاده می‌کند و این اطلاعات به‌صورت غیرقابل تغییر در کامیت‌هایی که ایجاد می‌کنید ثبت می‌شوند: [source,console] ---- @@ -42,29 +42,29 @@ $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com ---- -Again, you need to do this only once if you pass the `--global` option, because then Git will always use that information for your user on that system. -If you want to override this with a different name or email address for specific projects, you can run the command without the `--global` option when you're in that project. +دوباره تأکید می‌کنیم که اگر گزینه‌ی --global را استفاده کنید، فقط یک‌بار باید این کار را انجام دهید، زیرا در این صورت Git همیشه از آن اطلاعات برای کاربر شما روی آن سیستم استفاده خواهد کرد. +اگر بخواهید برای پروژه‌های خاص نام یا آدرس ایمیل متفاوتی تعیین کنید، می‌توانید دستور را بدون گزینه‌ی --global در پوشه‌ی آن پروژه اجرا کنید. -Many of the GUI tools will help you do this when you first run them. +بسیاری از ابزارهای رابط کاربری گرافیکی (GUI) هنگام اولین اجرا به شما در انجام این تنظیمات کمک می‌کنند. [[_editor]] -==== Your Editor +==== ویرایشگر شما (Your Editor) -Now that your identity is set up, you can configure the default text editor that will be used when Git needs you to type in a message. -If not configured, Git uses your system's default editor. +حالا که هویت خود را تنظیم کرده‌اید، می‌توانید ویرایشگر متنی پیش‌فرض را تنظیم کنید که هنگام نیاز Git به نوشتن پیام از آن استفاده شود. +اگر این تنظیم انجام نشود، Git از ویرایشگر پیش‌فرض سیستم شما استفاده می‌کند. -If you want to use a different text editor, such as Emacs, you can do the following: +اگر می‌خواهید از ویرایشگر متنی متفاوتی مثل Emacs استفاده کنید، می‌توانید به این صورت عمل کنید: [source,console] ---- $ git config --global core.editor emacs ---- -On a Windows system, if you want to use a different text editor, you must specify the full path to its executable file. -This can be different depending on how your editor is packaged. +در سیستم ویندوز، اگر بخواهید از ویرایشگر متنی متفاوتی استفاده کنید، باید مسیر کامل فایل اجرایی (executable) آن را مشخص کنید. +این مسیر بسته به نحوه بسته‌بندی ویرایشگر ممکن است متفاوت باشد. -In the case of Notepad++, a popular programming editor, you are likely to want to use the 32-bit version, since at the time of writing the 64-bit version doesn't support all plug-ins. -If you are on a 32-bit Windows system, or you have a 64-bit editor on a 64-bit system, you'll type something like this: +در مورد Notepad++، یک ویرایشگر محبوب برنامه‌نویسی، معمولاً تمایل دارید نسخه‌ی ۳۲ بیتی آن را استفاده کنید، چون در زمان نگارش این متن، نسخه‌ی ۶۴ بیتی هنوز تمام پلاگین‌ها را پشتیبانی نمی‌کند. +اگر روی سیستم ویندوز ۳۲ بیتی هستید، یا نسخه‌ی ۶۴ بیتی ویرایشگر را روی سیستم ۶۴ بیتی دارید، چیزی شبیه به این را تایپ خواهید کرد: [source,console] ---- @@ -73,32 +73,32 @@ $ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -m [NOTE] ==== -Vim, Emacs and Notepad++ are popular text editors often used by developers on Unix-based systems like Linux and macOS or a Windows system. -If you are using another editor, or a 32-bit version, please find specific instructions for how to set up your favorite editor with Git in <>. +ویرایشگرهای متنی محبوبی مانند Vim، Emacs و Notepad++ معمولاً توسط توسعه‌دهندگان روی سیستم‌های مبتنی بر یونیکس مانند لینوکس و مک‌اواس یا سیستم ویندوز استفاده می‌شوند. +اگر از ویرایشگر دیگری استفاده می‌کنید، یا نسخه‌ی ۳۲ بیتی آن را دارید، لطفاً دستورالعمل‌های خاص تنظیم ویرایشگر مورد علاقه‌تان با Git را در <> بیابید. ==== [WARNING] ==== -You may find, if you don't setup your editor like this, you get into a really confusing state when Git attempts to launch it. -An example on a Windows system may include a prematurely terminated Git operation during a Git initiated edit. +ممکن است اگر ویرایشگر خود را به این شکل تنظیم نکنید، هنگام تلاش Git برای باز کردن آن با وضعیت بسیار گیج‌کننده‌ای مواجه شوید. +به‌عنوان مثال، در سیستم ویندوز ممکن است عملیات Git که برای ویرایش آغاز شده بود به‌صورت زودهنگام و ناگهانی متوقف شود. ==== [[_new_default_branch]] -==== Your default branch name +==== نام پیشفرض برنچ شما (Your default branch name) -By default Git will create a branch called _master_ when you create a new repository with `git init`. -From Git version 2.28 onwards, you can set a different name for the initial branch. +به‌طور پیش‌فرض، Git هنگام ایجاد یک مخزن جدید با دستور git init یک شاخه به نام main می‌سازد. +از نسخه‌ی 2.28 به بعد، می‌توانید نام متفاوتی برای شاخه‌ی اولیه تنظیم کنید. -To set _main_ as the default branch name do: +برای تنظیم نام master به‌عنوان شاخه‌ی پیش‌فرض، این کار را انجام دهید: [source,console] ---- -$ git config --global init.defaultBranch main +$ git config --global init.defaultBranch master ---- -==== Checking Your Settings +==== بررسی تنظیمات شما (Checking Your Settings) -If you want to check your configuration settings, you can use the `git config --list` command to list all the settings Git can find at that point: +اگر می‌خواهید تنظیمات پیکربندی خود را بررسی کنید، می‌توانید از دستور "git config --list" استفاده کنید تا تمام تنظیماتی که Git در آن لحظه می‌تواند پیدا کند را لیست کند: [source,console] ---- @@ -112,10 +112,10 @@ color.diff=auto ... ---- -You may see keys more than once, because Git reads the same key from different files (`[path]/etc/gitconfig` and `~/.gitconfig`, for example). -In this case, Git uses the last value for each unique key it sees. +ممکن است بعضی کلیدها را بیشتر از یک بار ببینید، زیرا Git همان کلید را از فایل‌های مختلفی می‌خواند (مثلاً "[path]/etc/gitconfig" و "~/.gitconfig"). +در این حالت، Git آخرین مقدار هر کلید یکتا را که می‌بیند استفاده می‌کند. -You can also check what Git thinks a specific key's value is by typing `git config `:(((git commands, config))) +همچنین می‌توانید با تایپ دستور "git config " مقدار در نظر گرفته شده برای یک کلید خاص را مشاهده کنید:(((git commands, config))) [source,console] ---- @@ -125,8 +125,9 @@ John Doe [NOTE] ==== -Since Git might read the same configuration variable value from more than one file, it's possible that you have an unexpected value for one of these values and you don't know why. -In cases like that, you can query Git as to the _origin_ for that value, and it will tell you which configuration file had the final say in setting that value: + +از آنجایی که Git ممکن است مقدار یک متغیر پیکربندی را از بیش از یک فایل بخواند، ممکن است با مقداری غیرمنتظره مواجه شوید و ندانید چرا. +در چنین مواردی، می‌توانید از Git بپرسید که منشأ (origin) آن مقدار کجا بوده است، و Git به شما خواهد گفت که کدام فایل پیکربندی آخرین تصمیم را در تعیین آن مقدار گرفته است: [source,console] ---- From 1b84a1bd96263516f9db986e5491baca0b9d4804 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 7 Jun 2025 17:42:30 +0330 Subject: [PATCH 449/549] translate(01-introduction): translated help to farsi --- book/01-introduction/sections/help.asc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/book/01-introduction/sections/help.asc b/book/01-introduction/sections/help.asc index 68d76a4c..ee687cf6 100644 --- a/book/01-introduction/sections/help.asc +++ b/book/01-introduction/sections/help.asc @@ -1,7 +1,7 @@ [[_git_help]] -=== Getting Help +=== دریافت کمک (Getting Help) -If you ever need help while using Git, there are three equivalent ways to get the comprehensive manual page (manpage) help for any of the Git commands: +اگر هر زمان هنگام استفاده از Git به کمک نیاز داشتید، سه روش معادل برای دریافت راهنمای جامع (صفحه‌ی راهنما یا manpage) برای هر یک از دستورات Git وجود دارد: [source,console] ---- @@ -10,18 +10,18 @@ $ git --help $ man git- ---- -For example, you can get the manpage help for the `git config` command by running this:(((git commands, help))) +برای مثال، می‌توانید راهنمای صفحه‌ی man برای دستور "git config" را با اجرای این دستور دریافت کنید:(((git commands, help))) [source,console] ---- $ git help config ---- -These commands are nice because you can access them anywhere, even offline. -If the manpages and this book aren't enough and you need in-person help, you can try the `#git`, `#github`, or `#gitlab` channels on the Libera Chat IRC server, which can be found at https://libera.chat/[^]. -These channels are regularly filled with hundreds of people who are all very knowledgeable about Git and are often willing to help.(((IRC))) +این دستورات خیلی خوب هستند چون می‌توانید به آن‌ها از هر جایی دسترسی داشته باشید، حتی به‌صورت آفلاین. +اگر صفحات راهنما (manpages) و این کتاب برایتان کافی نبود و به کمک حضوری نیاز داشتید، می‌توانید به کانال‌های #git، #github یا #gitlab در سرور IRC به نام Libera Chat مراجعه کنید، که آدرس آن این است: https://libera.chat/[^]. +این کانال‌ها معمولاً پر از صدها نفر با دانش بالا درباره Git هستند که اغلب آماده‌ی کمک‌رسانی‌اند.(((IRC))) -In addition, if you don't need the full-blown manpage help, but just need a quick refresher on the available options for a Git command, you can ask for the more concise "`help`" output with the `-h` option, as in: +علاوه بر این، اگر به راهنمای کامل صفحه man نیازی ندارید و فقط می‌خواهید سریع یادآوری کنید گزینه‌های موجود برای یک دستور Git چیست، می‌توانید با گزینه‌ی -h خروجی خلاصه‌تر و ساده‌تری با عنوان "help" درخواست کنید، مانند: [source,console] ---- From a7b44c61abded9b4920135af0777ab7280fa3720 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 7 Jun 2025 17:45:31 +0330 Subject: [PATCH 450/549] translate(01-introduction): translated history to farsi --- book/01-introduction/sections/history.asc | 34 +++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/book/01-introduction/sections/history.asc b/book/01-introduction/sections/history.asc index 7ab05fd3..9b67d377 100644 --- a/book/01-introduction/sections/history.asc +++ b/book/01-introduction/sections/history.asc @@ -1,20 +1,24 @@ -=== A Short History of Git +=== تاریخچه کوتاهی از گیت (A Short History of Git) -As with many great things in life, Git began with a bit of creative destruction and fiery controversy. +مثل بسیاری از چیزهای بزرگ در زندگی، Git نیز با کمی نابودی خلاقانه و جنجال‌های شدید آغاز شد. -The Linux kernel is an open source software project of fairly large scope.(((Linux))) -During the early years of the Linux kernel maintenance (1991–2002), changes to the software were passed around as patches and archived files. -In 2002, the Linux kernel project began using a proprietary DVCS called BitKeeper.(((BitKeeper))) +کرنل لینوکس یک پروژه نرم‌افزاری متن‌باز با دامنه نسبتاً وسیع است.(((Linux))) +در سال‌های اولیه نگهداری کرنل لینوکس (۱۹۹۱ تا ۲۰۰۲)، تغییرات نرم‌افزار به‌صورت پچ‌ها و فایل‌های آرشیو شده رد و بدل می‌شدند. +در سال ۲۰۰۲، پروژه کرنل لینوکس شروع به استفاده از یک سیستم کنترل نسخه توزیع‌شده اختصاصی به نام BitKeeper کرد.(((BitKeeper))) -In 2005, the relationship between the community that developed the Linux kernel and the commercial company that developed BitKeeper broke down, and the tool's free-of-charge status was revoked. -This prompted the Linux development community (and in particular Linus Torvalds, the creator of Linux) to develop their own tool based on some of the lessons they learned while using BitKeeper.(((Linus Torvalds))) -Some of the goals of the new system were as follows: +در سال ۲۰۰۵، رابطه بین جامعه توسعه‌دهنده کرنل لینوکس و شرکت تجاری سازنده BitKeeper به هم خورد و وضعیت رایگان بودن این ابزار لغو شد. +این موضوع باعث شد جامعه توسعه‌دهندگان لینوکس (و به‌ویژه لینوس توروالدز، خالق لینوکس) ابزار خودشان را بر اساس درس‌هایی که از استفاده از BitKeeper گرفته بودند، توسعه دهند.(((Linus Torvalds))) +برخی از اهداف سیستم جدید به شرح زیر بودند: -* Speed -* Simple design -* Strong support for non-linear development (thousands of parallel branches) -* Fully distributed -* Able to handle large projects like the Linux kernel efficiently (speed and data size) + * سرعت بالا -Since its birth in 2005, Git has evolved and matured to be easy to use and yet retain these initial qualities. -It's amazingly fast, it's very efficient with large projects, and it has an incredible branching system for non-linear development (see <>). + * طراحی ساده + + * پشتیبانی قوی از توسعه غیرخطی (هزاران شاخه موازی) + + * کاملاً توزیع‌شده + + * قابلیت مدیریت پروژه‌های بزرگ مثل کرنل لینوکس به‌صورت کارآمد (از نظر سرعت و حجم داده‌ها) + +از زمان تولدش در سال ۲۰۰۵، Git توسعه یافته و بالغ شده است تا استفاده از آن آسان باشد و در عین حال این خصوصیات اولیه را حفظ کند. +Git باورنکردنی سریع است، در پروژه‌های بزرگ بسیار بهینه عمل می‌کند و سیستم شاخه‌بندی فوق‌العاده‌ای برای توسعه غیرخطی دارد (ببینید <>). \ No newline at end of file From 26cccbd10dd1ad0e9cc476e62fbdb64905adbebc Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 14:12:02 +0330 Subject: [PATCH 451/549] translate(installing): translated installing git to persian --- .idea/encodings.xml | 6 + .idea/modules.xml | 8 + .idea/progit2-fa.iml | 12 + .idea/workspace.xml | 237 ++++--------------- book/01-introduction/sections/installing.asc | 79 +++---- 5 files changed, 106 insertions(+), 236 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/progit2-fa.iml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..023122a2 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..fed25111 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/progit2-fa.iml b/.idea/progit2-fa.iml new file mode 100644 index 00000000..24643cc3 --- /dev/null +++ b/.idea/progit2-fa.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5f4cc2ed..e85ab93a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,178 +5,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -193,6 +22,29 @@ } } + - { - "keyToString": { - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "Merging refactor/progit2", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + &quot;keyToString&quot;: { + &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, + &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, + &quot;git-widget-placeholder&quot;: &quot;book/translation/01-introduction&quot;, + &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, + &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, + &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, + &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, + &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, + &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; } -} +} @@ -277,6 +125,8 @@ + + @@ -285,5 +135,6 @@ + \ No newline at end of file diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index d4f6dcbd..8821ea61 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -1,73 +1,70 @@ -=== Installing Git +=== Installing Git (نصب گیت) -Before you start using Git, you have to make it available on your computer. -Even if it's already installed, it's probably a good idea to update to the latest version. -You can either install it as a package or via another installer, or download the source code and compile it yourself. +قبل از اینکه شروع به استفاده از گیت کنید، باید آن را روی کامپیوتر خود در دسترس قرار دهید. حتی اگر قبلاً نصب شده باشد، احتمالاً به‌روزرسانی به آخرین نسخه ایده خوبی است. شما می‌توانید آن را به‌صورت بسته نرم‌افزاری یا از طریق یک نصب‌کننده دیگر نصب کنید، یا کد منبع را دانلود کرده و خودتان آن را کامپایل کنید. -[NOTE] +[توجه] ==== -This book was written using Git version 2. -Since Git is quite excellent at preserving backwards compatibility, any recent version should work just fine. -Though most of the commands we use should work even in ancient versions of Git, some of them might not or might act slightly differently. +این کتاب با استفاده از نسخه ۲ گیت نوشته شده است. +از آنجا که گیت در حفظ سازگاری با نسخه‌های قبلی بسیار خوب عمل می‌کند، هر نسخه جدیدتری باید به‌خوبی کار کند. +اگرچه بیشتر دستورات استفاده‌شده حتی در نسخه‌های قدیمی‌تر گیت نیز باید کار کنند، اما ممکن است برخی از آن‌ها کار نکنند یا کمی متفاوت رفتار کنند. ==== -==== Installing on Linux +==== Installing on Linux (نصب در لینوکس) (((Linux, installing))) -If you want to install the basic Git tools on Linux via a binary installer, you can generally do so through the package management tool that comes with your distribution. -If you're on Fedora (or any closely-related RPM-based distribution, such as RHEL or CentOS), you can use `dnf`: +اگر می‌خواهید ابزارهای پایه گیت را روی لینوکس از طریق یک نصب‌کننده باینری نصب کنید، معمولاً می‌توانید این کار را با استفاده از ابزار مدیریت بسته‌ای که همراه توزیع شماست انجام دهید. +اگر از فدورا (یا هر توزیع مبتنی بر RPM مشابه مانند RHEL یا CentOS) استفاده می‌کنید، می‌توانید از دستور `dnf` استفاده کنید: [source,console] ---- $ sudo dnf install git-all ---- -If you're on a Debian-based distribution, such as Ubuntu, try `apt`: +اگر از توزیعی مبتنی بر دبیان مانند اوبونتو استفاده می‌کنید، دستور `apt` را امتحان کنید: [source,console] ---- $ sudo apt install git-all ---- -For more options, there are instructions for installing on several different Unix distributions on the Git website, at https://git-scm.com/download/linux[^]. +برای گزینه‌های بیشتر، دستورالعمل نصب در چند توزیع مختلف یونیکس در وب‌سایت گیت به نشانی https://git-scm.com/download/linux[^] موجود است. -==== Installing on macOS +==== Installing on macOS (نصب در مک) (((macOS, installing))) -There are several ways to install Git on macOS. -The easiest is probably to install the Xcode Command Line Tools.(((Xcode))) -On Mavericks (10.9) or above you can do this simply by trying to run `git` from the Terminal the very first time. +روش‌های مختلفی برای نصب گیت روی مک‌اواس وجود دارد. +ساده‌ترین راه احتمالاً نصب ابزارهای خط فرمان Xcode است. +در نسخه‌های Mavericks (10.9) به بعد، می‌توانید این کار را به‌سادگی با اجرای دستور `git` برای اولین بار در ترمینال انجام دهید. [source,console] ---- $ git --version ---- -If you don't have it installed already, it will prompt you to install it. +اگر قبلاً آن را نصب نکرده‌اید، از شما خواسته می‌شود که نصبش کنید. -If you want a more up to date version, you can also install it via a binary installer. -A macOS Git installer is maintained and available for download at the Git website, at https://git-scm.com/download/mac[^]. +اگر نسخه به‌روزتری می‌خواهید، می‌توانید آن را از طریق یک نصب‌کننده باینری نیز نصب کنید. +نصب‌کننده Git برای macOS نگهداری می‌شود و قابل دانلود در وب‌سایت Git به آدرس https://git-scm.com/download/mac[^] است. .Git macOS installer image::images/git-osx-installer.png[Git macOS installer] -==== Installing on Windows +==== Installing on Windows (نصب در ویندوز) -There are also a few ways to install Git on Windows.(((Windows, installing))) -The most official build is available for download on the Git website. -Just go to https://git-scm.com/download/win[^] and the download will start automatically. -Note that this is a project called Git for Windows, which is separate from Git itself; for more information on it, go to https://gitforwindows.org[^]. +چند روش مختلف برای نصب گیت بر روی ویندوز وجود دارد. +رسمی‌ترین نسخه را می‌توانید از وب‌سایت گیت دانلود کنید. +کافی است به آدرس https://git-scm.com/download/win مراجعه کنید تا دانلود به‌صورت خودکار آغاز شود. +توجه داشته باشید که این پروژه به نام Git for Windows است که جدا از خود گیت می‌باشد؛ برای اطلاعات بیشتر می‌توانید به https://gitforwindows.org مراجعه کنید. -To get an automated installation you can use the https://community.chocolatey.org/packages/git[Git Chocolatey package^]. -Note that the Chocolatey package is community maintained. +برای نصب خودکار می‌توانید از بسته گیت در Chocolatey به آدرس https://community.chocolatey.org/packages/git استفاده کنید. +توجه داشته باشید که بسته Chocolatey توسط جامعه کاربران نگهداری می‌شود. -==== Installing from Source +==== Installing from Source (نصب از طریق سورس) -Some people may instead find it useful to install Git from source, because you'll get the most recent version. -The binary installers tend to be a bit behind, though as Git has matured in recent years, this has made less of a difference. +برخی افراد ممکن است ترجیح دهند Git را از سورس نصب کنند، زیرا نسخه به‌روزتری دریافت می‌کنند. نصب‌کننده‌های باینری معمولاً کمی عقب‌تر هستند، اما با پیشرفت Git در سال‌های اخیر، این تفاوت کمتر شده است. -If you do want to install Git from source, you need to have the following libraries that Git depends on: autotools, curl, zlib, openssl, expat, and libiconv. -For example, if you're on a system that has `dnf` (such as Fedora) or `apt-get` (such as a Debian-based system), you can use one of these commands to install the minimal dependencies for compiling and installing the Git binaries: +اگر قصد دارید Git را از سورس نصب کنید، باید کتابخانه‌های مورد نیاز Git را داشته باشید: autotools، curl، zlib، openssl، expat و libiconv. +برای مثال، اگر در سیستمی هستید که دارای `dnf` (مانند Fedora) یا `apt-get` (مانند سیستم‌های مبتنی بر Debian) است، می‌توانید از یکی از دستورات زیر برای نصب حداقل وابستگی‌های لازم جهت کامپایل و نصب باینری‌های Git استفاده کنید: [source,console] ---- @@ -77,7 +74,7 @@ $ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \ gettext libz-dev libssl-dev ---- -In order to be able to add the documentation in various formats (doc, html, info), these additional dependencies are required: +برای اینکه بتوان مستندات را در قالب‌های مختلف (doc، html، info) اضافه کرد، به این وابستگی‌های اضافی نیاز است: [source,console] ---- @@ -90,34 +87,30 @@ $ sudo apt-get install asciidoc xmlto docbook2x Users of RHEL and RHEL-derivatives like CentOS and Scientific Linux will have to https://docs.fedoraproject.org/en-US/epel/#how_can_i_use_these_extra_packages[enable the EPEL repository^] to download the `docbook2X` package. ==== -If you're using a Debian-based distribution (Debian/Ubuntu/Ubuntu-derivatives), you also need the `install-info` package: +اگر از یک توزیع مبتنی بر دبیان (دبیان/اوبونتو/مشتقات اوبونتو) استفاده می‌کنید، به بسته‌ی `install-info` نیز نیاز دارید: [source,console] ---- $ sudo apt-get install install-info ---- -If you're using a RPM-based distribution (Fedora/RHEL/RHEL-derivatives), you also need the `getopt` package (which is already installed on a Debian-based distro): +اگر از توزیع مبتنی بر RPM (مانند فدورا، RHEL یا مشتقات RHEL) استفاده می‌کنید، همچنین به بسته‌ی `getopt` نیاز دارید (که این بسته در توزیع‌های مبتنی بر دبیان به‌صورت پیش‌فرض نصب شده است): [source,console] ---- $ sudo dnf install getopt ---- -Additionally, if you're using Fedora/RHEL/RHEL-derivatives, you need to do this: +علاوه بر این، اگر از فدورا/آر.اِی.اِل/مشتقات آر.اِی.اِل استفاده می‌کنید، باید این کار را انجام دهید: [source,console] ---- $ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi ---- -due to binary name differences. - -When you have all the necessary dependencies, you can go ahead and grab the latest tagged release tarball from several places. -You can get it via the kernel.org site, at https://www.kernel.org/pub/software/scm/git[^], or the mirror on the GitHub website, at https://github.com/git/git/tags[^]. -It's generally a little clearer what the latest version is on the GitHub page, but the kernel.org page also has release signatures if you want to verify your download. +به دلیل تفاوت‌های نام باینری. وقتی تمام وابستگی‌های لازم را دارید، می‌توانید نسخه‌ی فشرده‌ی آخرین انتشار برچسب‌خورده را از چندین مکان دریافت کنید. می‌توانید آن را از سایت kernel.org به آدرس https://www.kernel.org/pub/software/scm/git[^] یا آینه‌ی آن در وب‌سایت GitHub به آدرس https://github.com/git/git/tags[^] دریافت کنید. معمولاً در صفحه GitHub کمی واضح‌تر است که آخرین نسخه کدام است، اما صفحه kernel.org نیز امضاهای انتشار را دارد اگر بخواهید دانلود خود را تأیید کنید. -Then, compile and install: +سپس، کامپایل و نصب کنید: [source,console] ---- @@ -129,7 +122,7 @@ $ make all doc info $ sudo make install install-doc install-html install-info ---- -After this is done, you can also get Git via Git itself for updates: +سپس، کامپایل و نصب کنید: پس از انجام این کار، می‌توانید برای به‌روزرسانی‌ها نیز از طریق خود Git، Git را دریافت کنید: [source,console] ---- From 0c5f7cfecf31e8fabaca16b94c9b397a2125e3b0 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 14:26:51 +0330 Subject: [PATCH 452/549] translate(01-introduction): translated what-is-git to farsi --- book/01-introduction/sections/what-is-git.asc | 132 +++++++++--------- 1 file changed, 64 insertions(+), 68 deletions(-) diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 466201b2..1060d3ac 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -1,109 +1,105 @@ [[what_is_git_section]] -=== What is Git? +=== What is Git? (گیت چیست؟) -So, what is Git in a nutshell? -This is an important section to absorb, because if you understand what Git is and the fundamentals of how it works, then using Git effectively will probably be much easier for you. -As you learn Git, try to clear your mind of the things you may know about other VCSs, such as CVS, Subversion or Perforce -- doing so will help you avoid subtle confusion when using the tool. -Even though Git's user interface is fairly similar to these other VCSs, Git stores and thinks about information in a very different way, and understanding these differences will help you avoid becoming confused while using it.(((Subversion)))(((Perforce))) +پس، گیت به طور خلاصه چیست؟ این بخش مهمی است که باید به خوبی درک شود، زیرا اگر بفهمید گیت چیست و اصول پایه‌ای نحوه کار آن چگونه است، استفاده مؤثر از گیت برای شما احتمالاً بسیار آسان‌تر خواهد بود. +وقتی در حال یادگیری گیت هستید، سعی کنید ذهن خود را از چیزهایی که ممکن است درباره سایر سیستم‌های کنترل نسخه مانند CVS، ساب‌ورژن یا پروفورس بدانید پاک کنید — این کار به شما کمک می‌کند تا هنگام استفاده از این ابزار از سردرگمی‌های ظریف جلوگیری کنید. اگرچه رابط کاربری گیت تا حدی شبیه به این سیستم‌های کنترل نسخه است، گیت اطلاعات را به روشی بسیار متفاوت ذخیره و پردازش می‌کند و درک این تفاوت‌ها به شما کمک می‌کند تا هنگام استفاده از آن دچار سردرگمی نشوید. -==== Snapshots, Not Differences +==== Snapshots, Not Differences (اسنپ شات ها، بدون تغییرات) -The major difference between Git and any other VCS (Subversion and friends included) is the way Git thinks about its data. -Conceptually, most other systems store information as a list of file-based changes. -These other systems (CVS, Subversion, Perforce, and so on) think of the information they store as a set of files and the changes made to each file over time (this is commonly described as _delta-based_ version control). +تفاوت اصلی بین گیت و هر سیستم کنترل نسخه‌ی دیگری (از جمله ساب‌ورژن و مشابه‌ها) در نحوه‌ی تفکر گیت درباره داده‌هایش است. به طور مفهومی، بیشتر سیستم‌های دیگر اطلاعات را به صورت فهرستی از تغییرات مبتنی بر فایل ذخیره می‌کنند. این سیستم‌های دیگر (CVS، ساب‌ورژن، پروفورس و غیره) اطلاعاتی که ذخیره می‌کنند را به عنوان مجموعه‌ای از فایل‌ها و تغییراتی که در هر فایل در طول زمان ایجاد شده است، در نظر می‌گیرند (که معمولاً به آن کنترل نسخه مبتنی بر دلتا گفته می‌شود). .Storing data as changes to a base version of each file image::images/deltas.png[Storing data as changes to a base version of each file] -Git doesn't think of or store its data this way. -Instead, Git thinks of its data more like a series of snapshots of a miniature filesystem. -With Git, every time you commit, or save the state of your project, Git basically takes a picture of what all your files look like at that moment and stores a reference to that snapshot. -To be efficient, if files have not changed, Git doesn't store the file again, just a link to the previous identical file it has already stored. -Git thinks about its data more like a *stream of snapshots*. +گیت به این شکل به داده ها فکر نمی کند و آن ها را ذخیره نمی کند. +در عوض، گیت داده های خود را بیشتر شبیه به مجموعه ای از عکس های یک فایل سیستم مینیاتوری می داند. +با گیت، هر بار که حالت پروژه خود را ذخیره می کنید، گیت اساساً تصویری از تمام فایل های شما در آن لحظه می گیرد و یک مرجع به آن عکس را ذخیره می کند. +برای کارآمد بودن، اگر فایل ها تغییر نکرده باشند، Git دوباره فایل را ذخیره نمی کند، فقط یک لینک به فایل مشابه قبلی که قبلا ذخیره شده است. +گیت درباره داده های خود بیشتر به عنوان یک جریان از عکس های فوری فکر می کند. .Storing data as snapshots of the project over time image::images/snapshots.png[Git stores data as snapshots of the project over time] -This is an important distinction between Git and nearly all other VCSs. -It makes Git reconsider almost every aspect of version control that most other systems copied from the previous generation. -This makes Git more like a mini filesystem with some incredibly powerful tools built on top of it, rather than simply a VCS. -We'll explore some of the benefits you gain by thinking of your data this way when we cover Git branching in <>. +این یک تمایز مهم بین گیت و تقریبا تمام VCS های دیگر است. +این باعث می شود که گیت تقریباً هر جنبه ای از کنترل نسخه را که اکثر سیستم های دیگر از نسل قبلی کپی کرده اند، دوباره در نظر بگیرد. +این باعث می شود که گیت بیشتر شبیه به یک فایل سیستم کوچک با برخی از ابزارهای فوق العاده قدرتمند ساخته شده در بالای آن باشد، نه فقط یک VCS. +ما برخی از مزایایی را که با فکر کردن به داده های خود به این شکل به دست می آورید، بررسی خواهیم کرد وقتی که شاخه سازی گیت را در <> پوشش می دهیم. -==== Nearly Every Operation Is Local +==== Nearly Every Operation Is Local (تقریبا همه عملیات ها محلی هستند) -Most operations in Git need only local files and resources to operate -- generally no information is needed from another computer on your network. -If you're used to a CVCS where most operations have that network latency overhead, this aspect of Git will make you think that the gods of speed have blessed Git with unworldly powers. -Because you have the entire history of the project right there on your local disk, most operations seem almost instantaneous. +بیشتر عملیات در گیت فقط به فایل ها و منابع محلی برای کار نیاز دارد -- به طور کلی هیچ اطلاعاتی از کامپیوتر دیگری در شبکه شما مورد نیاز نیست. +اگر شما به CVCS عادت کرده اید که در آن بیشتر عملیات ها دارای آن تاخیر شبکه هستند، این جنبه از گیت شما را به فکر می اندازد که خدایان سرعت، گیت را با قدرت های غیرمستقیم برکت داده اند. +از آنجا که شما تمام تاریخ پروژه را در دیسک محلی خود دارید، بیشتر عملیات تقریباً فوری به نظر می رسند. -For example, to browse the history of the project, Git doesn't need to go out to the server to get the history and display it for you -- it simply reads it directly from your local database. -This means you see the project history almost instantly. -If you want to see the changes introduced between the current version of a file and the file a month ago, Git can look up the file a month ago and do a local difference calculation, instead of having to either ask a remote server to do it or pull an older version of the file from the remote server to do it locally. +به عنوان مثال، برای مرور تاریخ پروژه، گیت نیازی به رفتن به سرور ندارد تا تاریخچه را دریافت کند و آن را برای شما نمایش دهد -- آن را به سادگی مستقیما از پایگاه داده محلی شما می خواند. +این به این معنی است که شما تاریخچه پروژه را تقریباً بلافاصله می بینید. +اگر می خواهید تغییرات ایجاد شده بین نسخه فعلی یک فایل و فایل یک ماه پیش را ببینید، گیت می تواند فایل یک ماه پیش را جستجو کند و محاسبه تفاوت محلی را انجام دهد، به جای اینکه از یک سرور از راه دور بخواهد این کار را انجام دهد یا نسخه قدیمی تری از فایل را از سرور از راه دور برای انجام آن به صورت محلی. -This also means that there is very little you can't do if you're offline or off VPN. -If you get on an airplane or a train and want to do a little work, you can commit happily (to your _local_ copy, remember?) until you get to a network connection to upload. -If you go home and can't get your VPN client working properly, you can still work. -In many other systems, doing so is either impossible or painful. -In Perforce, for example, you can't do much when you aren't connected to the server; in Subversion and CVS, you can edit files, but you can't commit changes to your database (because your database is offline). -This may not seem like a huge deal, but you may be surprised what a big difference it can make. +این همچنین به این معنی است که اگر شما آفلاین یا VPN هستید، کاری که نمی توانید انجام دهید بسیار کمی وجود دارد. +اگر شما سوار هواپیما یا قطار شوید و بخواهید کمی کار کنید، می توانید با خوشحالی (به نسخه محلی خود، به یاد داشته باشید؟) تا وقتی که به یک اتصال شبکه برای آپلود برسید. +اگر شما به خانه بروید و نتوانید مشتری VPN خود را به درستی کار کنید، هنوز هم می توانید کار کنید. +در بسیاری از سیستم های دیگر، انجام این کار غیرممکن یا دردناک است. +به عنوان مثال، در Perforce، وقتی به سرور متصل نیستید، نمی توانید کارهای زیادی انجام دهید؛ در Subversion و CVS، می توانید فایل ها را ویرایش کنید، اما نمی توانید تغییرات را در پایگاه داده خود انجام دهید (زیرا پایگاه داده شما آفلاین است). +این شاید چیز بزرگی به نظر نرسد، اما ممکن است تعجب کنید که چه تفاوت بزرگی می تواند ایجاد کند. -==== Git Has Integrity +==== Git Has Integrity (گیت دارای یکپارچگی است) -Everything in Git is checksummed before it is stored and is then referred to by that checksum. -This means it's impossible to change the contents of any file or directory without Git knowing about it. -This functionality is built into Git at the lowest levels and is integral to its philosophy. -You can't lose information in transit or get file corruption without Git being able to detect it. +همه چیز در گیت قبل از ذخیره شدن چک سوم می شود و سپس با آن چک سوم ارجاع داده می شود. +این بدان معنی است که تغییر محتویات هر فایل یا دایرکتوری بدون اطلاع گیت غیرممکن است. +این قابلیت در پایین ترین سطوح در گیت ساخته شده است و جزء فلسفه آن است. +شما نمی توانید اطلاعات را در حین انتقال از دست بدهید یا فایل را خراب کنید بدون اینکه گیت بتواند آن را تشخیص دهد. -The mechanism that Git uses for this checksumming is called a SHA-1 hash.(((SHA-1))) -This is a 40-character string composed of hexadecimal characters (0–9 and a–f) and calculated based on the contents of a file or directory structure in Git. -A SHA-1 hash looks something like this: +مکانیزمی که گیت برای این چک سوم استفاده می کند، هش SHA-1 نامیده می شود. SHA-1))) +این یک رشته 40 کاراکتر است که از کاراکترهای هگزادسیمال (0 ⁇ 9 و a ⁇ f) تشکیل شده و بر اساس محتویات یک فایل یا ساختار دایرکتوری در گیت محاسبه می شود. +یک هش SHA-1 چیزی شبیه به این است: [source] ---- 24b9da6552252987aa493b52f8696cd6d3b00373 ---- -You will see these hash values all over the place in Git because it uses them so much. -In fact, Git stores everything in its database not by file name but by the hash value of its contents. +شما این ارزش های هش را در همه جا در گیت خواهید دید چون از آنها بسیار استفاده می کند. +در واقع، گیت همه چیز را در پایگاه داده خود نه با نام فایل بلکه با ارزش هش محتوای آن ذخیره می کند. -==== Git Generally Only Adds Data +==== Git Generally Only Adds Data (گیت به طور کلی فقط داده ها را اضافه می کند) -When you do actions in Git, nearly all of them only _add_ data to the Git database. -It is hard to get the system to do anything that is not undoable or to make it erase data in any way. -As with any VCS, you can lose or mess up changes you haven't committed yet, but after you commit a snapshot into Git, it is very difficult to lose, especially if you regularly push your database to another repository. +هنگامی که شما در گیت اعمال انجام می دهید، تقریبا همه آنها فقط داده ها را به پایگاه داده گیت اضافه می کنند. +سخت است که سیستم کاری را انجام دهد که غیر قابل برگشت نباشد یا به هیچ وجه داده ها را پاک کند. +همانند هر VCS، می توانید تغییرات خود را که هنوز ارتکاب نکرده اید، از دست بدهید یا خراب کنید، اما پس از ارتکاب یک عکس فوری به گیت، از دست دادن آن بسیار دشوار است، به خصوص اگر شما به طور منظم پایگاه داده خود را به یک مخزن دیگر منتقل کنید. -This makes using Git a joy because we know we can experiment without the danger of severely screwing things up. -For a more in-depth look at how Git stores its data and how you can recover data that seems lost, see <>. +این باعث می شود استفاده از گیت لذت بخش باشد زیرا ما می دانیم که می توانیم بدون خطر به شدت خراب کردن چیزها آزمایش کنیم. +برای نگاهی عمیق تر به نحوه ذخیره داده های گیت و چگونگی بازیابی داده هایی که به نظر می رسد گم شده اند، به <> مراجعه کنید. -==== The Three States +==== The Three States (سه مرحله) -Pay attention now -- here is the main thing to remember about Git if you want the rest of your learning process to go smoothly. -Git has three main states that your files can reside in: _modified_, _staged_, and _committed_: +حالا توجه کنید -- این مهم ترین چیزی است که باید در مورد گیت به خاطر بسپارید اگر می خواهید بقیه فرآیند یادگیری شما بدون مشکل پیش برود. +گیت سه حالت اصلی دارد که فایل های شما می توانند در آن باشند: _modified_، _staged_، و _committed_: -* Modified means that you have changed the file but have not committed it to your database yet. -* Staged means that you have marked a modified file in its current version to go into your next commit snapshot. -* Committed means that the data is safely stored in your local database. +* اصلاح شده به این معنی است که شما فایل را تغییر داده اید اما هنوز آن را به پایگاه داده خود اختصاص نداده اید. +* مرحله ای به این معنی است که شما یک فایل اصلاح شده را در نسخه فعلی آن برای رفتن به عکس فوری بعدی خود علامت گذاری کرده اید. +* تعهد به این معنی است که داده ها به طور ایمن در پایگاه داده محلی شما ذخیره می شوند. -This leads us to the three main sections of a Git project: the working tree, the staging area, and the Git directory. +این ما را به سه بخش اصلی یک پروژه گیت می رساند: درخت کار، منطقه مرحله بندی، و دایرکتوری گیت. .Working tree, staging area, and Git directory image::images/areas.png["Working tree, staging area, and Git directory"] -The working tree is a single checkout of one version of the project. -These files are pulled out of the compressed database in the Git directory and placed on disk for you to use or modify. +درخت کار یک چک کردن واحد از یک نسخه از پروژه است. +این فایل ها از پایگاه داده فشرده شده در دایرکتوری گیت بیرون آورده می شوند و روی دیسک قرار می گیرند تا شما بتوانند از آن ها استفاده کنید یا آن ها را تغییر دهید. -The staging area is a file, generally contained in your Git directory, that stores information about what will go into your next commit. -Its technical name in Git parlance is the "`index`", but the phrase "`staging area`" works just as well. +منطقه مرحله بندی یک فایل است، که معمولا در دایرکتوری گیت شما قرار دارد، که اطلاعات مربوط به آنچه که در کامیت بعدی شما قرار می گیرد را ذخیره می کند. +نام فنی آن در زبان گیت "`index`" است، اما عبارت "`staging area`" نیز به خوبی کار می کند. -The Git directory is where Git stores the metadata and object database for your project. -This is the most important part of Git, and it is what is copied when you _clone_ a repository from another computer. +دایرکتوری گیت جایی است که گیت متاداتا و پایگاه داده شی را برای پروژه شما ذخیره می کند. +این مهم ترین بخش گیت است، و این چیزی است که کپی می شود زمانی که شما یک مخزن را از یک کامپیوتر دیگر کپی می کنید. -The basic Git workflow goes something like this: +روند کار گیت چیزی شبیه به این است: -1. You modify files in your working tree. -2. You selectively stage just those changes you want to be part of your next commit, which adds _only_ those changes to the staging area. -3. You do a commit, which takes the files as they are in the staging area and stores that snapshot permanently to your Git directory. +1. شما فایل ها را در درخت کار خود اصلاح می کنید. +2. شما به طور انتخابی فقط آن تغییرات را که می خواهید بخشی از commit بعدی خود باشید، که فقط آن تغییرات را به منطقه مرحله بندی اضافه می کند. +3. شما یک کامیت انجام می دهید، که فایل ها را همانطور که در منطقه مرحله بندی هستند می گیرد و آن عکس را به طور دائم در دایرکتوری گیت شما ذخیره می کند. -If a particular version of a file is in the Git directory, it's considered _committed_. -If it has been modified and was added to the staging area, it is _staged_. -And if it was changed since it was checked out but has not been staged, it is _modified_. -In <>, you'll learn more about these states and how you can either take advantage of them or skip the staged part entirely. +اگر یک نسخه خاص از یک فایل در دایرکتوری گیت باشد، _تعهد شده_ محسوب می شود. +اگر آن را اصلاح کرده اند و به منطقه مرحله اضافه شد، آن را _staged_ است. +و اگر از زمان چک کردن آن تغییر کرده باشد، اما مرحله ای نشده باشد، _تعدیل_ شده است. +در <>، شما بیشتر در مورد این حالت ها خواهید آموخت و اینکه چگونه می توانید از آنها استفاده کنید یا بخش مرحله ای را به طور کامل حذف کنید. \ No newline at end of file From 40fda28066e7dc89555982bd85919a5a7c5d1256 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 17:53:55 +0330 Subject: [PATCH 453/549] translate(02-git-basics): translated aliases to persian --- book/02-git-basics/sections/aliases.asc | 39 +++++++++++++------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/book/02-git-basics/sections/aliases.asc b/book/02-git-basics/sections/aliases.asc index 5d6d117c..6876f56e 100644 --- a/book/02-git-basics/sections/aliases.asc +++ b/book/02-git-basics/sections/aliases.asc @@ -1,13 +1,14 @@ [[_git_aliases]] -=== Git Aliases +=== Git Aliases (نام مستعار گیت) (((aliases))) -Before we move on to the next chapter, we want to introduce a feature that can make your Git experience simpler, easier, and more familiar: aliases. -For clarity's sake, we won't be using them anywhere else in this book, but if you go on to use Git with any regularity, aliases are something you should know about. +نام مستعار Git قبل از اینکه به فصل بعدی برویم، می خواهیم یک ویژگی را معرفی کنیم که می تواند تجربه Git شما را ساده تر، آسان تر و آشنا تر کند: نام مستعار. +برای روشن بودن، ما از آنها در هیچ جای دیگر در این کتاب استفاده نخواهیم کرد، اما اگر شما با استفاده از Git با هر گونه منظم، نام مستعار چیزی است که شما باید در مورد آن بدانید. -Git doesn't automatically infer your command if you type it in partially. -If you don't want to type the entire text of each of the Git commands, you can easily set up an alias for each command using `git config`.(((git commands, config))) -Here are a couple of examples you may want to set up: +گیت به طور خودکار دستور شما را درک نمی کند اگر آن را قسمتی تایپ کنید. +اگر شما نمی خواهید تمام متن هر یک از دستورات Git را تایپ کنید، می توانید به راحتی یک نام مستعار برای هر دستور را با استفاده از `git config `. +(((git commands, config))) +در اینجا چند مثال وجود دارد که می توانید آن ها را تنظیم کنید: [source,console] ---- @@ -17,18 +18,18 @@ $ git config --global alias.ci commit $ git config --global alias.st status ---- -This means that, for example, instead of typing `git commit`, you just need to type `git ci`. -As you go on using Git, you'll probably use other commands frequently as well; don't hesitate to create new aliases. +این بدان معنی است که به عنوان مثال، به جای تایپ کردن `git commit`، شما فقط باید `git ci` را تایپ کنید. +با استفاده از گیت، احتمالاً از دستورات دیگری نیز به طور مکرر استفاده خواهید کرد؛ در ایجاد نام مستعار جدید تردید نکنید. -This technique can also be very useful in creating commands that you think should exist. -For example, to correct the usability problem you encountered with unstaging a file, you can add your own unstage alias to Git: +این تکنیک همچنین می تواند برای ایجاد دستوراتی که فکر می کنید باید وجود داشته باشند، بسیار مفید باشد. +به عنوان مثال، برای رفع مشکل قابلیت استفاده که با حذف یک فایل مواجه شده اید، می توانید نام مستعار unstage خود را به گیت اضافه کنید: [source,console] ---- $ git config --global alias.unstage 'reset HEAD --' ---- -This makes the following two commands equivalent: +این دو دستور زیر را معادل می کند: [source,console] ---- @@ -36,15 +37,15 @@ $ git unstage fileA $ git reset HEAD -- fileA ---- -This seems a bit clearer. -It's also common to add a `last` command, like this: +اين يه کم روشن تر به نظر مياد +همچنین اضافه کردن یک دستور `last`، مانند این، رایج است: [source,console] ---- $ git config --global alias.last 'log -1 HEAD' ---- -This way, you can see the last commit easily: +اینطوری میتونی آخرین کامیت رو به راحتی ببینی: [source,console] ---- @@ -58,11 +59,11 @@ Date: Tue Aug 26 19:48:51 2008 +0800 Signed-off-by: Scott Chacon ---- -As you can tell, Git simply replaces the new command with whatever you alias it for. -However, maybe you want to run an external command, rather than a Git subcommand. -In that case, you start the command with a `!` character. -This is useful if you write your own tools that work with a Git repository. -We can demonstrate by aliasing `git visual` to run `gitk`: +همانطور که می بینید، گیت به سادگی فرمان جدید را با هر نام دیگری که برای آن انتخاب کرده اید، جایگزین می کند. +با این حال، شاید شما می خواهید یک دستور خارجی را اجرا کنید، نه یک زیر دستور گیت. +در این حالت، شما دستور را با `!` شروع می کنید! شخصیت خوبیه +اگر شما ابزار خود را که با یک مخزن گیت کار می کنند بنویسید این کار مفید است. +ما می توانیم با استفاده از aliasing `git visual ` برای اجرای `gitk ` نشان دهیم: [source,console] ---- From b044d51a5a5a1305326ffba8b896a0626c68a3ce Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 18:07:04 +0330 Subject: [PATCH 454/549] translate(02-git-basics): translated getting a repository to persian --- .../sections/getting-a-repository.asc | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/book/02-git-basics/sections/getting-a-repository.asc b/book/02-git-basics/sections/getting-a-repository.asc index 3b69efd0..af9c2777 100644 --- a/book/02-git-basics/sections/getting-a-repository.asc +++ b/book/02-git-basics/sections/getting-a-repository.asc @@ -1,19 +1,19 @@ [[_getting_a_repo]] -=== Getting a Git Repository +=== Getting a Git Repository (گرفتن یک مخزن گیت) -You typically obtain a Git repository in one of two ways: +شما معمولاً یک مخزن گیت را به یکی از دو روش بدست می آورید: -1. You can take a local directory that is currently not under version control, and turn it into a Git repository, or -2. You can _clone_ an existing Git repository from elsewhere. +1. شما می توانید یک دایرکتوری محلی را که در حال حاضر تحت کنترل نسخه نیست، و آن را به یک مخزن گیت تبدیل کنید، یا +2. شما می توانید یک مخزن گیت موجود را از جای دیگر کلان کنید. -In either case, you end up with a Git repository on your local machine, ready for work. +در هر صورت، شما یک مخزن گیت در ماشین محلی خود دارید که آماده کار است. -==== Initializing a Repository in an Existing Directory +==== Initializing a Repository in an Existing Directory (شروع یک مخزن در یک دایرکتوری موجود) -If you have a project directory that is currently not under version control and you want to start controlling it with Git, you first need to go to that project's directory. -If you've never done this, it looks a little different depending on which system you're running: +اگر یک دایرکتوری پروژه دارید که در حال حاضر تحت کنترل نسخه نیست و می خواهید با گیت شروع به کنترل آن کنید، ابتدا باید به دایرکتوری آن پروژه بروید. +اگر شما هرگز این کار را انجام نداده اید، بسته به اینکه کدام سیستم را اجرا می کنید، کمی متفاوت به نظر می رسد: -for Linux: +برای لینوکس: [source,console] ---- $ cd /home/user/my_project @@ -29,19 +29,19 @@ for Windows: $ cd C:/Users/user/my_project ---- -and type: +و تایپ کنید: [source,console] ---- $ git init ---- -This creates a new subdirectory named `.git` that contains all of your necessary repository files -- a Git repository skeleton. -At this point, nothing in your project is tracked yet. -See <> for more information about exactly what files are contained in the `.git` directory you just created.(((git commands, init))) +این یک زیر دایرکتوری جدید به نام `.git` ایجاد می کند که شامل تمام فایل های ذخیره سازی مورد نیاز شما است -- یک اسکلت ذخیره سازی گیت. +در این مرحله، هیچ چیز در پروژه شما هنوز ردیابی نشده است. +برای اطلاعات بیشتر در مورد اینکه دقیقاً چه فایل هایی در دایرکتوری `.git` که تازه ایجاد کرده اید وجود دارد، به <> مراجعه کنید. -If you want to start version-controlling existing files (as opposed to an empty directory), you should probably begin tracking those files and do an initial commit. -You can accomplish that with a few `git add` commands that specify the files you want to track, followed by a `git commit`: +اگر می خواهید نسخه فایل های موجود را کنترل کنید (در مقابل یک دایرکتوری خالی) ، احتمالا باید ردیابی این فایل ها را شروع کنید و یک commit اولیه انجام دهید. +شما می توانید این کار را با چند دستور `git add` انجام دهید که فایل هایی را که می خواهید ردیابی کنید مشخص می کند، و سپس یک `git commit`: [source,console] ---- @@ -50,38 +50,37 @@ $ git add LICENSE $ git commit -m 'Initial project version' ---- -We'll go over what these commands do in just a minute. -At this point, you have a Git repository with tracked files and an initial commit. +ما در یک دقیقه به آنچه که این دستورات انجام می دهند می پردازیم. +در این مرحله، شما یک مخزن گیت با فایل های ردیابی شده و یک commit اولیه دارید. [[_git_cloning]] -==== Cloning an Existing Repository +==== Cloning an Existing Repository (کلون کردن یک مخزن موجود) -If you want to get a copy of an existing Git repository -- for example, a project you'd like to contribute to -- the command you need is `git clone`. -If you're familiar with other VCSs such as Subversion, you'll notice that the command is "clone" and not "checkout". -This is an important distinction -- instead of getting just a working copy, Git receives a full copy of nearly all data that the server has. -Every version of every file for the history of the project is pulled down by default when you run `git clone`. -In fact, if your server disk gets corrupted, you can often use nearly any of the clones on any client to set the server back to the state it was in when it was cloned (you may lose some server-side hooks and such, but all the versioned data would be there -- see <> for more details). +اگر می خواهید یک کپی از یک مخزن Git موجود را دریافت کنید - به عنوان مثال، پروژه ای که می خواهید در آن مشارکت کنید - دستور مورد نیاز شما `git clone` است. +اگر با سایر سیستم های VCS مانند Subversion آشنا هستید، متوجه خواهید شد که دستور "clone" است و نه "checkout". +این یک تمایز مهم است -- به جای دریافت فقط یک کپی کاری، گیت یک کپی کامل از تقریبا تمام داده هایی که سرور دارد را دریافت می کند. +هر نسخه از هر فایل برای تاریخچه پروژه به طور پیش فرض زمانی که شما `git clone` را اجرا می کنید، پایین می آید. +در واقع، اگر دیسک سرور شما خراب شود، اغلب می توانید تقریباً از کلون ها در هر کلاینت استفاده کنید تا سرور را به حالت زمانی که کلون شده بود برگردانید (ممکن است برخی از قلاب های طرف سرور را از دست بدهید، اما تمام داده های نسخه ای وجود دارد - برای جزئیات بیشتر به <> مراجعه کنید). -You clone a repository with `git clone `.(((git commands, clone))) -For example, if you want to clone the Git linkable library called `libgit2`, you can do so like this: +شما یک مخزن را با ` `.(((git commands, clone))) +به عنوان مثال، اگر می خواهید کتابخانه قابل پیوند گیت به نام `libgit2` را کلان کنید، می توانید این کار را به این شکل انجام دهید: [source,console] ---- $ git clone https://github.com/libgit2/libgit2 ---- -That creates a directory named `libgit2`, initializes a `.git` directory inside it, pulls down all the data for that repository, and checks out a working copy of the latest version. -If you go into the new `libgit2` directory that was just created, you'll see the project files in there, ready to be worked on or used. +این یک دایرکتوری با نام `libgit2` ایجاد می کند، دایرکتوری `.git` را در داخل آن شروع می کند، تمام داده های آن مخزن را پایین می آورد، و یک نسخه کار از آخرین نسخه را بررسی می کند. +اگر به دایرکتوری جدید `libgit2` که تازه ایجاد شده است بروید، فایل های پروژه را در آنجا خواهید دید، آماده برای کار یا استفاده. -If you want to clone the repository into a directory named something other than `libgit2`, you can specify the new directory name as an additional argument: +اگر می خواهید مخزن را به یک دایرکتوری با نام دیگری به غیر از `libgit2` شبیه سازی کنید، می توانید نام دایرکتوری جدید را به عنوان یک استدلال اضافی مشخص کنید: [source,console] ---- $ git clone https://github.com/libgit2/libgit2 mylibgit ---- +این دستور همان کار قبلی را انجام می دهد، اما دایرکتوری هدف به نام `mylibgit` است. -That command does the same thing as the previous one, but the target directory is called `mylibgit`. - -Git has a number of different transfer protocols you can use. -The previous example uses the `https://` protocol, but you may also see `git://` or `user@server:path/to/repo.git`, which uses the SSH transfer protocol. -<> will introduce all of the available options the server can set up to access your Git repository and the pros and cons of each. +گیت پروتکل های انتقال مختلفی دارد که می توانید از آنها استفاده کنید. +مثال قبلی از پروتکل `https://` استفاده می کند، اما شما همچنین می توانید `git://` یا `user@server:path/to/repo.git` را ببینید که از پروتکل انتقال SSH استفاده می کند. +<> تمام گزینه های موجود را که سرور می تواند برای دسترسی به مخزن گیت شما تنظیم کند و مزایا و معایب هر یک را معرفی می کند. \ No newline at end of file From 4499ee71daf386c579c5853551142888cbccdc14 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 18:35:17 +0330 Subject: [PATCH 455/549] translate(02-git-basics): translated recording changes to persian --- .../sections/recording-changes.asc | 333 +++++++++--------- 1 file changed, 166 insertions(+), 167 deletions(-) diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 8bcd785f..58b8c95a 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -1,26 +1,26 @@ -=== Recording Changes to the Repository +=== Recording Changes to the Repository (ثبت تغییرات در مخزن) -At this point, you should have a _bona fide_ Git repository on your local machine, and a checkout or _working copy_ of all of its files in front of you. -Typically, you'll want to start making changes and committing snapshots of those changes into your repository each time the project reaches a state you want to record. +در این مرحله، شما باید یک مخزن _bona fide_Git در ماشین محلی خود داشته باشید، و یک نسخه چک کردن یا کار کردن از تمام فایل های آن در مقابل شما. +به طور معمول، شما می خواهید شروع به ایجاد تغییرات و ارسال عکس از آن تغییرات به مخزن خود را هر بار که پروژه به یک دولت شما می خواهید به ثبت برسد. -Remember that each file in your working directory can be in one of two states: _tracked_ or _untracked_. -Tracked files are files that were in the last snapshot, as well as any newly staged files; they can be unmodified, modified, or staged. -In short, tracked files are files that Git knows about. +به یاد داشته باشید که هر فایل در دایرکتوری کاری شما می تواند در یکی از دو حالت باشد: _tracked_ یا _untracked_. +فایل های ردیابی شده، فایل هایی هستند که در آخرین عکس لحظه ای بودند، و همچنین هر فایل جدیدی که مرحله بندی شده است؛ آنها می توانند بدون تغییر، اصلاح شده یا مرحله بندی شوند. +به طور خلاصه، فایل های ردیابی شده، فایل هایی هستند که گیت از آن ها آگاه است. -Untracked files are everything else -- any files in your working directory that were not in your last snapshot and are not in your staging area. -When you first clone a repository, all of your files will be tracked and unmodified because Git just checked them out and you haven't edited anything. +فایل های بدون ردیابی همه چیز دیگری هستند -- هر فایل در دایرکتوری کاری شما که در آخرین عکس شما نبود و در منطقه تنظیم شما نیست. +هنگامی که شما برای اولین بار یک مخزن را کلان می کنید، تمام فایل های شما ردیابی و بدون تغییر خواهند شد زیرا Git آنها را بررسی کرده و شما چیزی را ویرایش نکرده اید. -As you edit files, Git sees them as modified, because you've changed them since your last commit. -As you work, you selectively stage these modified files and then commit all those staged changes, and the cycle repeats. +همانطور که فایل ها را ویرایش می کنید، گیت آنها را به عنوان اصلاح شده می بیند، زیرا شما آنها را از آخرین ارتقاء خود تغییر داده اید. +همانطور که کار می کنید، به طور انتخابی این فایل های اصلاح شده را مرحله بندی می کنید و سپس تمام آن تغییرات مرحله ای را انجام می دهید، و چرخه تکرار می شود. .The lifecycle of the status of your files image::images/lifecycle.png[The lifecycle of the status of your files] [[_checking_status]] -==== Checking the Status of Your Files +==== Checking the Status of Your Files (بررسی وضعیت فایل های شما) -The main tool you use to determine which files are in which state is the `git status` command.(((git commands, status))) -If you run this command directly after a clone, you should see something like this: +ابزار اصلی که شما برای تعیین اینکه کدام فایل ها در کدام حالت هستند استفاده می کنید دستور `git status` است. +اگر شما این دستور را مستقیماً بعد از یک کلان اجرا کنید، چیزی شبیه به این خواهید دید: [source,console] ---- @@ -30,23 +30,23 @@ Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean ---- -This means you have a clean working directory; in other words, none of your tracked files are modified. -Git also doesn't see any untracked files, or they would be listed here. -Finally, the command tells you which branch you're on and informs you that it has not diverged from the same branch on the server. -For now, that branch is always `master`, which is the default; you won't worry about it here. -<> will go over branches and references in detail. +این به این معنی است که شما یک دایرکتوری کاری تمیز دارید؛ به عبارت دیگر، هیچ یک از فایل های ردیابی شده شما اصلاح نشده است. +همچنین گیت هیچ فایل غیر ردیابی شده ای را نمی بیند، در غیر این صورت آنها در اینجا فهرست شده اند. +در نهایت، دستور به شما می گوید که در کدام شاخه هستید و به شما اطلاع می دهد که از همان شاخه در سرور منحرف نشده است. +در حال حاضر، این شاخه همیشه `master` است، که پیش فرض است؛ شما نگران آن در اینجا نخواهید بود. +<> شاخه ها و مرجع ها را به طور مفصل بررسی می کند. [NOTE] ==== -GitHub changed the default branch name from `master` to `main` in mid-2020, and other Git hosts followed suit. -So you may find that the default branch name in some newly created repositories is `main` and not `master`. -In addition, the default branch name can be changed (as you have seen in <>), so you may see a different name for the default branch. +گیت هاب در اواسط سال 2020 نام شاخه پیش فرض را از `master` به `main` تغییر داد و سایر میزبان های گیت نیز این کار را انجام دادند. +بنابراین شما ممکن است متوجه شوید که نام شاخه پیش فرض در برخی از مخازن جدید ایجاد شده `main` و نه `master` است. +علاوه بر این، می توان نام شاخه ی پیش فرض را تغییر داد (همانطور که در <> مشاهده کردید) ، بنابراین ممکن است نام دیگری برای شاخه ی پیش فرض مشاهده کنید. -However, Git itself still uses `master` as the default, so we will use it throughout the book. +با این حال، گیت خود هنوز از `master` به عنوان پیش فرض استفاده می کند، بنابراین ما از آن در سراسر کتاب استفاده خواهیم کرد. ==== -Let's say you add a new file to your project, a simple `README` file. -If the file didn't exist before, and you run `git status`, you see your untracked file like so: +فرض کنید که شما یک فایل جدید به پروژه خود اضافه کنید، یک فایل ساده "README" +اگر این فایل قبلا وجود نداشته باشد و شما `git status` را اجرا کنید، فایل بدون ردیابی خود را به این شکل می بینید: [source,console] ---- @@ -62,23 +62,23 @@ Untracked files: nothing added to commit but untracked files present (use "git add" to track) ---- -You can see that your new `README` file is untracked, because it's under the "`Untracked files`" heading in your status output. -Untracked basically means that Git sees a file you didn't have in the previous snapshot (commit), and which hasn't yet been staged; Git won't start including it in your commit snapshots until you explicitly tell it to do so. -It does this so you don't accidentally begin including generated binary files or other files that you did not mean to include. -You do want to start including `README`, so let's start tracking the file. +شما می توانید ببینید که فایل جدید `README` شما غیر قابل ردیابی است، زیرا تحت عنوان " فایل های غیر قابل ردیابی " در خروجی وضعیت شما قرار دارد. +Untracked اساساً به این معنی است که Git یک فایل را می بیند که شما در عکس فوری قبلی (تعهد) نداشته اید و هنوز مرحله ای نشده است؛ Git شامل آن در عکس فوری شما نمی شود تا زمانی که به طور صریح به آن بگویید. +این کار را انجام می دهد تا شما به طور تصادفی شروع به اضافه کردن فایل های باینری تولید شده یا فایل های دیگری که شما قصد نداشتید را شامل شوید. +شما می خواهید شروع به شامل 'README' کنید، پس بیایید پرونده را ردیابی کنیم. [[_tracking_files]] -==== Tracking New Files +==== Tracking New Files (دنبال کردن فایل های جدید) -In order to begin tracking a new file, you use the command `git add`.(((git commands, add))) -To begin tracking the `README` file, you can run this: +برای شروع ردیابی یک فایل جدید، از دستور `git add` استفاده می کنید. +برای شروع به ردیابی فایل "README" می توانید این را اجرا کنید: [source,console] ---- $ git add README ---- -If you run your status command again, you can see that your `README` file is now tracked and staged to be committed: +اگر دستور وضعیت خود را دوباره اجرا کنید، می توانید ببینید که فایل `README` شما در حال حاضر ردیابی شده و مرحله ای برای انجام شده است: [source,console] ---- @@ -92,15 +92,15 @@ Changes to be committed: ---- -You can tell that it's staged because it's under the "`Changes to be committed`" heading. -If you commit at this point, the version of the file at the time you ran `git add` is what will be in the subsequent historical snapshot. -You may recall that when you ran `git init` earlier, you then ran `git add ` -- that was to begin tracking files in your directory.(((git commands, init)))(((git commands, add))) -The `git add` command takes a path name for either a file or a directory; if it's a directory, the command adds all the files in that directory recursively. +می تونید بفهمید که صحنه سازی شده چون زیر عنوان "تغییراتی که باید انجام بشه" قرار داره. +اگر در این مرحله commit کنید، نسخه فایل در زمانی که شما `git add` را اجرا کردید همان چیزی است که در تصویر تاریخی بعدی خواهد بود. +ممکن است به یاد داشته باشید که وقتی قبلاً `git init` را اجرا کردید، سپس `git add ` را اجرا کردید -- که برای شروع ردیابی فایل ها در دایرکتوری شما بود. +دستور `git add` نام مسیر را برای یک فایل یا یک دایرکتوری می گیرد. اگر یک دایرکتوری باشد، دستور تمام فایل های موجود در آن دایرکتوری را به صورت تکراری اضافه می کند. -==== Staging Modified Files +==== Staging Modified Files (مرحله بندی فایل های اصلاح شده) -Let's change a file that was already tracked. -If you change a previously tracked file called `CONTRIBUTING.md` and then run your `git status` command again, you get something that looks like this: +بیایید یک فایل که قبلا ردیابی شده بود را تغییر دهیم. +اگر شما یک فایل ردیابی شده قبلی به نام `CONTRIBUTING.md` را تغییر دهید و سپس دستور `git status` خود را دوباره اجرا کنید، چیزی شبیه به این را دریافت می کنید: [source,console] ---- @@ -120,12 +120,11 @@ Changes not staged for commit: ---- -The `CONTRIBUTING.md` file appears under a section named "`Changes not staged for commit`" -- which means that a file that is tracked has been modified in the working directory but not yet staged. -To stage it, you run the `git add` command. -`git add` is a multipurpose command -- you use it to begin tracking new files, to stage files, and to do other things like marking merge-conflicted files as resolved. -It may be helpful to think of it more as "`add precisely this content to the next commit`" rather than "`add this file to the project`".(((git commands, add))) -Let's run `git add` now to stage the `CONTRIBUTING.md` file, and then run `git status` again: - +فایل `CONTRIBUTING.md` در بخش " تغییرات ` که برای commit ` مرحله بندی نشده است" ظاهر می شود -- که به این معنی است که فایل ردیابی شده در دایرکتوری کاری تغییر کرده است اما هنوز مرحله بندی نشده است. +برای این کار، شما دستور `git add` را اجرا می کنید. +`git add` یک دستور چند منظوره است -- شما از آن برای شروع ردیابی فایل های جدید، مرحله بندی فایل ها، و انجام کارهای دیگر مانند علامت گذاری فایل های با تعارض ادغام به عنوان حل شده استفاده می کنید. +ممکن است مفید باشد که به آن بیشتر به عنوان " ` اضافه کردن دقیقا این محتوا به commit بعدی ` " به جای " ` اضافه کردن این فایل به پروژه ` " (((git commands, add))) فکر کنید. +بیایید اکنون add git را اجرا کنیم تا فایل ∀CONTRIBUTING.md` را اجرا کنیم و سپس دوباره status git را اجرا کنیم: [source,console] ---- $ git add CONTRIBUTING.md @@ -140,10 +139,10 @@ Changes to be committed: ---- -Both files are staged and will go into your next commit. -At this point, suppose you remember one little change that you want to make in `CONTRIBUTING.md` before you commit it. -You open it again and make that change, and you're ready to commit. -However, let's run `git status` one more time: +هر دو فایل آماده شده اند و به کامیت بعدی شما منتقل خواهند شد. +در این مرحله، فرض کنید یک تغییر کوچک را به یاد آورده اید که می خواهید قبل از انجام آن در `CONTRIBUTING.md` ایجاد کنید. +دوباره بازش ميکني و اون تغيير رو ميکني و آماده ي تعهد هستي. +با این حال، بیایید یک بار دیگر وضعیت را اجرا کنیم: [source,console] ---- @@ -165,12 +164,12 @@ Changes not staged for commit: ---- -What the heck? -Now `CONTRIBUTING.md` is listed as both staged _and_ unstaged. -How is that possible? -It turns out that Git stages a file exactly as it is when you run the `git add` command. -If you commit now, the version of `CONTRIBUTING.md` as it was when you last ran the `git add` command is how it will go into the commit, not the version of the file as it looks in your working directory when you run `git commit`. -If you modify a file after you run `git add`, you have to run `git add` again to stage the latest version of the file: +چه خبره؟ +حالا `CONTRIBUTING.md` به عنوان هر دو مرحله ای و غیر مرحله ای فهرست شده است. +چطور ممکنه؟ +معلوم شد که گیت یک فایل را دقیقاً همان طور که وقتی دستور `git add` را اجرا می کنید، مرحله بندی می کند. +اگر شما اکنون commit کنید، نسخه ی `CONTRIBUTING.md` همان طور که در آخرین باری که دستور `git add` را اجرا کردید، وارد commit می شود، نه نسخه ی فایل همان طور که در دایرکتوری کاری شما در هنگام اجرا `git commit` ظاهر می شود. +اگر شما یک فایل را پس از اجرای `git add` تغییر دهید، باید دوباره `git add` را اجرا کنید تا آخرین نسخه فایل را اجرا کنید: [source,console] ---- @@ -185,11 +184,11 @@ Changes to be committed: modified: CONTRIBUTING.md ---- -==== Short Status +==== Short Status (خلاصه وضعیت) -While the `git status` output is pretty comprehensive, it's also quite wordy. -Git also has a short status flag so you can see your changes in a more compact way. -If you run `git status -s` or `git status --short` you get a far more simplified output from the command: +در حالی که خروجی وضعیت `git ` کاملاً جامع است ، اما کاملاً کلمه ای است. +گیت همچنین دارای یک پرچم وضعیت کوتاه است تا بتوانید تغییرات خود را به روشی جمع و جور تر مشاهده کنید. +اگر شما `git status -s` یا `git status --short` را اجرا کنید، خروجی بسیار ساده تر از دستور را دریافت می کنید: [source,console] ---- @@ -201,18 +200,18 @@ M lib/simplegit.rb ?? LICENSE.txt ---- -New files that aren't tracked have a `??` next to them, new files that have been added to the staging area have an `A`, modified files have an `M` and so on. -There are two columns to the output -- the left-hand column indicates the status of the staging area and the right-hand column indicates the status of the working tree. -So for example in that output, the `README` file is modified in the working directory but not yet staged, while the `lib/simplegit.rb` file is modified and staged. -The `Rakefile` was modified, staged and then modified again, so there are changes to it that are both staged and unstaged. +فایل های جدید که ردیابی نشده اند دارای `?? ` در کنار آنها، فایل های جدید که به منطقه مرحله ای اضافه شده اند دارای `A`، فایل های اصلاح شده دارای `M` و غیره هستند. +دو ستون در خروجی وجود دارد - ستون سمت چپ وضعیت منطقه مرحله ای را نشان می دهد و ستون سمت راست وضعیت درخت کار را نشان می دهد. +بنابراین برای مثال در آن خروجی، فایل `README` در دایرکتوری کار تغییر یافته است اما هنوز مرحله ای نشده است، در حالی که فایل `lib/simplegit.rb` تغییر یافته و مرحله ای شده است. +`Rakefile` اصلاح شد، مرحله ای شد و سپس دوباره اصلاح شد، بنابراین تغییراتی در آن وجود دارد که هم مرحله ای و هم غیر مرحله ای است. [[_ignoring]] -==== Ignoring Files +==== Ignoring Files (فایل های ایگنور شده) -Often, you'll have a class of files that you don't want Git to automatically add or even show you as being untracked. -These are generally automatically generated files such as log files or files produced by your build system. -In such cases, you can create a file listing patterns to match them named `.gitignore`.(((ignoring files))) -Here is an example `.gitignore` file: +اغلب، شما یک کلاس از فایل هایی دارید که نمی خواهید گیت به طور خودکار آنها را اضافه کند یا حتی به شما نشان دهد که آنها ردیابی نشده اند. +این فایل ها به طور کلی به طور خودکار تولید می شوند مانند فایل های لاگ یا فایل هایی که توسط سیستم ساخت شما تولید می شوند. +در چنین مواردی، می توانید یک لیست از فایل ها را با نام `.gitignore`.(((ignoring files))) ایجاد کنید تا با آنها مطابقت داشته باشد. +در اینجا یک نمونه از فایل `.gitignore` وجود دارد: [source,console] ---- @@ -221,24 +220,24 @@ $ cat .gitignore *~ ---- -The first line tells Git to ignore any files ending in "`.o`" or "`.a`" -- object and archive files that may be the product of building your code. -The second line tells Git to ignore all files whose names end with a tilde (`~`), which is used by many text editors such as Emacs to mark temporary files. -You may also include a log, tmp, or pid directory; automatically generated documentation; and so on. -Setting up a `.gitignore` file for your new repository before you get going is generally a good idea so you don't accidentally commit files that you really don't want in your Git repository. +خط اول به گیت می گوید که تمام فایل هایی که به "`.o`" یا "`.a`" ختم می شوند را نادیده بگیرد -- فایل های شی و آرشیو که ممکن است محصول ساخت کد شما باشند. +خط دوم به گیت می گوید که تمام فایل هایی را که نام آنها با تایلد (`~`) پایان می یابد، نادیده بگیرد، که توسط بسیاری از ویرایشگرهای متن مانند Emacs برای علامت گذاری فایل های موقت استفاده می شود. +شما همچنین می توانید یک دایرکتوری log، tmp، یا pid؛ مستندات تولید شده به طور خودکار؛ و غیره را شامل شوید. +تنظیم یک فایل `.gitignore` برای مخزن جدید قبل از شروع کار به طور کلی ایده خوبی است تا فایل هایی را که واقعاً نمی خواهید در مخزن گیت خود قرار ندهید. -The rules for the patterns you can put in the `.gitignore` file are as follows: +قوانین برای الگوهایی که می توانید در فایل `.gitignore` قرار دهید عبارتند از: -* Blank lines or lines starting with `#` are ignored. -* Standard glob patterns work, and will be applied recursively throughout the entire working tree. -* You can start patterns with a forward slash (`/`) to avoid recursivity. -* You can end patterns with a forward slash (`/`) to specify a directory. -* You can negate a pattern by starting it with an exclamation point (`!`). +* خطوط خالی یا خطوطی که با `#` شروع می شوند نادیده گرفته می شوند. +* الگوهای استاندارد گلوب کار می کنند و به طور تکراری در کل درخت کاری اعمال می شوند. +* شما می توانید الگوها را با یک تراش جلو (`/`) شروع کنید تا از تکرار پذیری جلوگیری کنید. +* شما می توانید الگوها را با یک خط کش (`/`) به سمت جلو برای مشخص کردن یک دایرکتوری به پایان برسانید. +* شما می توانید یک الگوی را با شروع آن با یک علامت تعجب (`! `). -Glob patterns are like simplified regular expressions that shells use. -An asterisk (`\*`) matches zero or more characters; `[abc]` matches any character inside the brackets (in this case a, b, or c); a question mark (`?`) matches a single character; and brackets enclosing characters separated by a hyphen (`[0-9]`) matches any character between them (in this case 0 through 9). -You can also use two asterisks to match nested directories; `a/**/z` would match `a/z`, `a/b/z`, `a/b/c/z`, and so on. +الگوهای گلوب مانند عبارات منظم ساده شده ای هستند که پوسته ها استفاده می کنند. +یک ستاره (`\*`) با صفر یا بیشتر کاراکترها مطابقت دارد؛ `[abc]` با هر کاراکتر داخل براکت ها (در این مورد a، b یا c) مطابقت دارد؛ علامت سوال (`? `) با یک کاراکتر واحد مطابقت دارد؛ و براکت هایی که کاراکترهای جدا شده توسط یک خط کش (`[0-9]`) را در بر می گیرد با هر کاراکتر بین آنها مطابقت دارد (در این مورد از 0 تا 9). +شما همچنین می توانید از دو ستاره برای مطابقت با دایرکتوری های آشیانه ای استفاده کنید؛ `a/**/z` با `a/z`، `a/b/z`، `a/b/c/z` و غیره مطابقت دارد. -Here is another example `.gitignore` file: +در اینجا یک مثال دیگر از فایل `.gitignore` وجود دارد: [source] ---- @@ -263,29 +262,29 @@ doc/**/*.pdf [TIP] ==== -GitHub maintains a fairly comprehensive list of good `.gitignore` file examples for dozens of projects and languages at https://github.com/github/gitignore[^] if you want a starting point for your project. +گیت هاب یک لیست کاملا جامع از نمونه های فایل های خوب `.gitignore` برای ده ها پروژه و زبان در https://github.com/github/gitignore[^] را در اختیار دارد اگر می خواهید نقطه شروع پروژه خود را داشته باشید. ==== [NOTE] ==== -In the simple case, a repository might have a single `.gitignore` file in its root directory, which applies recursively to the entire repository. -However, it is also possible to have additional `.gitignore` files in subdirectories. -The rules in these nested `.gitignore` files apply only to the files under the directory where they are located. -The Linux kernel source repository has 206 `.gitignore` files. +در مورد ساده، یک مخزن ممکن است یک فایل `.gitignore` در دایرکتوری ریشه خود داشته باشد، که به طور تکراری برای کل مخزن اعمال می شود. +با این حال، ممکن است فایل های `.gitignore` اضافی در زیرکتاب ها نیز وجود داشته باشد. +قوانین موجود در این فایل های `.gitignore` فقط برای فایل های موجود در دایرکتوری که در آن قرار دارند، اعمال می شود. +مخزن منبع هسته لینوکس دارای 206 فایل `.gitignore` است. -It is beyond the scope of this book to get into the details of multiple `.gitignore` files; see `man gitignore` for the details. +این فراتر از محدوده این کتاب است که به جزئیات پرونده های متعدد `.gitignore` بپردازیم؛ برای جزئیات به `man gitignore` مراجعه کنید. ==== [[_git_diff_staged]] -==== Viewing Your Staged and Unstaged Changes +==== Viewing Your Staged and Unstaged Changes (مشاهده تغییرات مرحله ای و غیر مرحله ای شما) -If the `git status` command is too vague for you -- you want to know exactly what you changed, not just which files were changed -- you can use the `git diff` command.(((git commands, diff))) -We'll cover `git diff` in more detail later, but you'll probably use it most often to answer these two questions: What have you changed but not yet staged? -And what have you staged that you are about to commit? -Although `git status` answers those questions very generally by listing the file names, `git diff` shows you the exact lines added and removed -- the patch, as it were. +اگر دستور `git status` برای شما مبهم است - شما می خواهید دقیقا بدانید که چه چیزی را تغییر داده اید، نه فقط اینکه کدام فایل ها تغییر کرده اند - شما می توانید از دستور `git diff` استفاده کنید. +ما بعداً به جزئیات بیشتری در مورد "git diff" می پردازیم، اما احتمالاً بیشتر از همه برای پاسخ به این دو سوال از آن استفاده خواهید کرد: چه چیزی را تغییر داده اید اما هنوز اجرا نشده اید؟ +و تو چه صحنه اي رو بازي کردي که ميخواي انجام بدي؟ +اگر چه `git status` به این سوالات با فهرست کردن اسامی فایل ها پاسخ می دهد، `git diff` خطوط دقیق اضافه شده و حذف شده را به شما نشان می دهد. -Let's say you edit and stage the `README` file again and then edit the `CONTRIBUTING.md` file without staging it. -If you run your `git status` command, you once again see something like this: +بیایید بگوییم که فایل `README` را دوباره ویرایش و مرحله بندی می کنید و سپس فایل `CONTRIBUTING.md` را بدون مرحله بندی ویرایش می کنید. +اگر دستور `git status` را اجرا کنید، یک بار دیگر چیزی شبیه به این می بینید: [source,console] ---- @@ -304,7 +303,7 @@ Changes not staged for commit: modified: CONTRIBUTING.md ---- -To see what you've changed but not yet staged, type `git diff` with no other arguments: +برای دیدن اینکه چه چیزی را تغییر داده اید اما هنوز مرحله ای نشده است، با هیچ استدلال دیگری `git diff` را تایپ کنید: [source,console] ---- @@ -325,11 +324,11 @@ index 8ebb991..643e24f 100644 that highlights your work in progress (and note in the PR title that it's ---- -That command compares what is in your working directory with what is in your staging area. -The result tells you the changes you've made that you haven't yet staged. +این دستور آنچه را که در دایرکتوری کار شما هست با آنچه که در منطقه ی تنظیم شما هست مقایسه می کند. +نتیجه به شما می گوید که چه تغییراتی را انجام داده اید که هنوز اجرا نکرده اید. -If you want to see what you've staged that will go into your next commit, you can use `git diff --staged`. -This command compares your staged changes to your last commit: +اگر می خواهید ببینید که چه چیزی را تنظیم کرده اید که در commit بعدی شما قرار خواهد گرفت، می توانید از `git diff --staged` استفاده کنید. +این دستور تغییرات مرحله ای شما را با آخرین کامیت مقایسه می کند: [source,console] ---- @@ -343,11 +342,11 @@ index 0000000..03902a1 +My Project ---- -It's important to note that `git diff` by itself doesn't show all changes made since your last commit -- only changes that are still unstaged. -If you've staged all of your changes, `git diff` will give you no output. +مهم است که توجه داشته باشید که `git diff` به خودی خود تمام تغییرات ایجاد شده از آخرین ارتکاب شما را نشان نمی دهد - فقط تغییراتی که هنوز مرحله ای نشده اند. +اگر تمام تغییرات خود را اجرا کرده باشید، `git diff` هیچ خروجی به شما نخواهد داد. -For another example, if you stage the `CONTRIBUTING.md` file and then edit it, you can use `git diff` to see the changes in the file that are staged and the changes that are unstaged. -If our environment looks like this: +برای مثال دیگر، اگر فایل `CONTRIBUTING.md` را مرحله بندی کنید و سپس آن را ویرایش کنید، می توانید از `git diff` برای دیدن تغییرات در فایل استفاده کنید که مرحله بندی شده اند و تغییراتی که مرحله بندی نشده اند. +اگر محیط ما اینگونه باشد: [source,console] ---- @@ -368,7 +367,7 @@ Changes not staged for commit: modified: CONTRIBUTING.md ---- -Now you can use `git diff` to see what is still unstaged: +حالا شما می توانید از `git diff` استفاده کنید تا ببینید چه چیزی هنوز اجرا نشده است: [source,console] ---- @@ -384,7 +383,7 @@ index 643e24f..87f08c8 100644 +# test line ---- -and `git diff --cached` to see what you've staged so far (`--staged` and `--cached` are synonyms): +و `git diff --cached` برای دیدن آنچه که تا کنون انجام داده اید (`--staged` و `--cached` مترادف هستند): [source,console] ---- @@ -408,34 +407,34 @@ index 8ebb991..643e24f 100644 [NOTE] .Git Diff in an External Tool ==== -We will continue to use the `git diff` command in various ways throughout the rest of the book. -There is another way to look at these diffs if you prefer a graphical or external diff viewing program instead. -If you run `git difftool` instead of `git diff`, you can view any of these diffs in software like emerge, vimdiff and many more (including commercial products). -Run `git difftool --tool-help` to see what is available on your system. +ما به استفاده از دستور `git diff` به روش های مختلف در بقیه کتاب ادامه خواهیم داد. +راه دیگری برای مشاهده این تفاوت ها وجود دارد اگر شما به جای آن یک برنامه گرافیکی یا خارجی برای مشاهده تفاوت ها را ترجیح می دهید. +اگر شما `git difftool` را به جای `git diff` اجرا کنید، می توانید هر یک از این تفاوت ها را در نرم افزارهای مانند emerge، vimdiff و بسیاری دیگر (از جمله محصولات تجاری) مشاهده کنید. +`git difftool --tool-help` را اجرا کنید تا ببینید چه چیزی در سیستم شما موجود است. ==== [[_committing_changes]] -==== Committing Your Changes +==== Committing Your Changes (کامیت کردن تغییراتتان) -Now that your staging area is set up the way you want it, you can commit your changes. -Remember that anything that is still unstaged -- any files you have created or modified that you haven't run `git add` on since you edited them -- won't go into this commit. -They will stay as modified files on your disk. -In this case, let's say that the last time you ran `git status`, you saw that everything was staged, so you're ready to commit your changes.(((git commands, status))) -The simplest way to commit is to type `git commit`:(((git commands, commit))) +حالا که منطقه آماده سازی شما به روشی که می خواهید تنظیم شده، می توانید تغییرات خود را انجام دهید. +به یاد داشته باشید که هر چیزی که هنوز مرحله ای نشده است - هر فایل ای که ایجاد کرده اید یا اصلاح کرده اید که از زمانی که آنها را ویرایش کرده اید اجرا نکرده اید - به این ارتکاب نمی رود. +آنها به عنوان فایل های اصلاح شده در دیسک شما باقی خواهند ماند. +در این مورد، بیایید بگوییم که آخرین باری که شما `git status` را اجرا کردید، دیدید که همه چیز مرحله ای شده است، بنابراین شما آماده اید که تغییرات خود را انجام دهید.(((git commands, status))) +ساده ترین راه برای commit کردن این است که `git commit`:(((git commands, commit))) [source,console] ---- $ git commit ---- -Doing so launches your editor of choice. +این کار باعث می شود تا ویرایشگر مورد نظر شما را راه اندازی کند. [NOTE] ==== -This is set by your shell's `EDITOR` environment variable -- usually vim or emacs, although you can configure it with whatever you want using the `git config --global core.editor` command as you saw in <>.(((editor, changing default)))(((git commands, config))) +این توسط متغیر محیط `EDITOR` پوسته شما تنظیم می شود -- معمولاً vim یا emacs، اگرچه شما می توانید آن را با هر چیزی که می خواهید با استفاده از دستور `git config --global core.editor` تنظیم کنید همانطور که در <> مشاهده کردید. ==== -The editor displays the following text (this example is a Vim screen): +ویرایشگر متن زیر را نمایش می دهد (این مثال یک صفحه نمایش Vim است): [source] ---- @@ -455,18 +454,18 @@ The editor displays the following text (this example is a Vim screen): ".git/COMMIT_EDITMSG" 9L, 283C ---- -You can see that the default commit message contains the latest output of the `git status` command commented out and one empty line on top. -You can remove these comments and type your commit message, or you can leave them there to help you remember what you're committing. +شما می توانید ببینید که پیام commit پیش فرض شامل آخرین خروجی از دستور `git status` با یک خط خالی در بالای آن است. +شما می توانید این نظرات را حذف کنید و پیام commit خود را تایپ کنید، یا می توانید آنها را آنجا بگذارید تا به شما کمک کند آنچه را که انجام می دهید به یاد داشته باشید. [NOTE] ==== -For an even more explicit reminder of what you've modified, you can pass the `-v` option to `git commit`. -Doing so also puts the diff of your change in the editor so you can see exactly what changes you're committing. +برای یک یادآوری واضح تر از آنچه که تغییر داده اید، می توانید گزینه `-v` را به `git commit` منتقل کنید. +این کار همچنین تفاوت تغییرات شما را در ویرایشگر قرار می دهد تا بتوانید دقیقا ببینید چه تغییراتی انجام داده اید. ==== -When you exit the editor, Git creates your commit with that commit message (with the comments and diff stripped out). +هنگامی که شما از ویرایشگر خارج می شوید، گیت commit شما را با این پیام commit (با حذف نظرات و اختلافات) ایجاد می کند. -Alternatively, you can type your commit message inline with the `commit` command by specifying it after a `-m` flag, like this: +در عوض، می توانید پیام commit خود را با دستور `commit` با مشخص کردن آن پس از یک پرچم `-m`، مانند این تایپ کنید: [source,console] ---- @@ -476,19 +475,19 @@ $ git commit -m "Story 182: fix benchmarks for speed" create mode 100644 README ---- -Now you've created your first commit! -You can see that the commit has given you some output about itself: which branch you committed to (`master`), what SHA-1 checksum the commit has (`463dc4f`), how many files were changed, and statistics about lines added and removed in the commit. +حالا شما اولين کارتون رو انجام دادين! +شما می توانید ببینید که commit به شما در مورد خود خروجی داده است: به کدام شاخه commit کرده اید (`master`) ، چه چک سوم SHA-1 commit دارد (`463dc4f`) ، چه تعداد فایل تغییر کرده است و آمار مربوط به خطوط اضافه شده و حذف شده در commit. -Remember that the commit records the snapshot you set up in your staging area. -Anything you didn't stage is still sitting there modified; you can do another commit to add it to your history. -Every time you perform a commit, you're recording a snapshot of your project that you can revert to or compare to later. +به یاد داشته باشید که ثبت عکس لحظه ای که در منطقه تنظیم خود قرار داده اید را ثبت می کند. +هر چیزی که شما تنظیم نکرده اید هنوز در آنجا اصلاح شده است؛ شما می توانید یک تعهد دیگر برای اضافه کردن آن به تاریخچه خود انجام دهید. +هر بار که یک commit را انجام می دهید، یک عکس از پروژه خود را ضبط می کنید که می توانید بعداً به آن بازگردید یا با آن مقایسه کنید. -==== Skipping the Staging Area +==== Skipping the Staging Area (عبور از محدوده استیج) (((staging area, skipping))) -Although it can be amazingly useful for crafting commits exactly how you want them, the staging area is sometimes a bit more complex than you need in your workflow. -If you want to skip the staging area, Git provides a simple shortcut. -Adding the `-a` option to the `git commit` command makes Git automatically stage every file that is already tracked before doing the commit, letting you skip the `git add` part: +اگر چه می تواند برای ساخت commit ها به طور دقیق به همان شکل که می خواهید مفید باشد، اما منطقه ی مرحله بندی گاهی کمی پیچیده تر از آنچه در جریان کار شما نیاز دارید است. +اگر می خواهید از منطقه مرحله بندی عبور کنید، گیت یک میانبر ساده ارائه می دهد. +اضافه کردن گزینه `-a` به دستور commit `git باعث می شود که Git به طور خودکار هر فایلی را که قبلاً قبل از انجام commit ردیابی شده است ، مرحله بندی کند ، و به شما اجازه می دهد قسمت add `git را حذف کنید: [source,console] ---- @@ -507,18 +506,18 @@ $ git commit -a -m 'Add new benchmarks' 1 file changed, 5 insertions(+), 0 deletions(-) ---- -Notice how you don't have to run `git add` on the `CONTRIBUTING.md` file in this case before you commit. -That's because the `-a` flag includes all changed files. -This is convenient, but be careful; sometimes this flag will cause you to include unwanted changes. +توجه کنید که در این مورد قبل از اینکه commit کنید، لازم نیست `git add` را در فایل `CONTRIBUTING.md` اجرا کنید. +این به این دلیل است که پرچم `-a` شامل تمام فایل های تغییر یافته است. +این کار راحت است، اما مراقب باشید؛ گاهی اوقات این پرچم باعث می شود تغییرات ناخواسته ای را وارد کنید. [[_removing_files]] -==== Removing Files +==== Removing Files (حذف فایل ها) (((files, removing))) -To remove a file from Git, you have to remove it from your tracked files (more accurately, remove it from your staging area) and then commit. -The `git rm` command does that, and also removes the file from your working directory so you don't see it as an untracked file the next time around. +برای حذف یک فایل از گیت، باید آن را از فایل های ردیابی شده خود حذف کنید (به طور دقیق تر، آن را از منطقه ردیابی شده خود حذف کنید) و سپس commit کنید. +دستور `git rm` این کار را انجام می دهد، و همچنین فایل را از دایرکتوری کاری شما حذف می کند تا دفعه بعد آن را به عنوان یک فایل غیر ردیابی مشاهده نکنید. -If you simply remove the file from your working directory, it shows up under the "`Changes not staged for commit`" (that is, _unstaged_) area of your `git status` output: +اگر فایل را از دایرکتوری کاری خود حذف کنید، در قسمت " تغییرات برای ارتکاب مرحله ای نشده " (یعنی _unstaged_) در خروجی وضعیت git ظاهر می شود: [source,console] ---- @@ -550,58 +549,58 @@ Changes to be committed: deleted: PROJECTS.md ---- -The next time you commit, the file will be gone and no longer tracked. -If you modified the file or had already added it to the staging area, you must force the removal with the `-f` option. -This is a safety feature to prevent accidental removal of data that hasn't yet been recorded in a snapshot and that can't be recovered from Git. +دفعه ي بعدي که پيگيري کردي، فايل از بين خواهد رفت و ديگه تعقيب نميشه. +اگر فایل را تغییر داده اید یا قبلاً آن را به منطقه مرحله بندی اضافه کرده اید، باید حذف آن را با گزینه `-f` اجبار کنید. +این یک ویژگی امنیتی برای جلوگیری از حذف تصادفی داده هایی است که هنوز در یک عکس ثبت نشده اند و نمی توانند از Git بازیابی شوند. -Another useful thing you may want to do is to keep the file in your working tree but remove it from your staging area. -In other words, you may want to keep the file on your hard drive but not have Git track it anymore. -This is particularly useful if you forgot to add something to your `.gitignore` file and accidentally staged it, like a large log file or a bunch of `.a` compiled files. -To do this, use the `--cached` option: +یکی دیگر از کارهای مفید که می توانید انجام دهید این است که فایل را در درخت کار خود نگه دارید اما آن را از منطقه مرحله بندی خود حذف کنید. +به عبارت دیگر، شما ممکن است بخواهید فایل را در هارد دیسک خود نگه دارید اما دیگر Git را دنبال نکنید. +این به ویژه مفید است اگر شما فراموش کرده اید چیزی را به فایل `.gitignore` خود اضافه کنید و به طور تصادفی آن را مرحله بندی کنید، مانند یک فایل لاگ بزرگ یا یک دسته از فایل های کامپایل شده `.a`. +برای انجام این کار، از گزینه `--cached` استفاده کنید: [source,console] ---- $ git rm --cached README ---- -You can pass files, directories, and file-glob patterns to the `git rm` command. -That means you can do things such as: +شما می توانید فایل ها، دایرکتوری ها و الگوهای گلوب فایل را به دستور `git rm` منتقل کنید. +این به این معنی است که شما می توانید کارهایی مانند: [source,console] ---- $ git rm log/\*.log ---- -Note the backslash (`\`) in front of the `*`. -This is necessary because Git does its own filename expansion in addition to your shell's filename expansion. -This command removes all files that have the `.log` extension in the `log/` directory. -Or, you can do something like this: +توجه کنید که خط عقب (`\`) در مقابل `*` قرار دارد. +این کار لازم است زیرا گیت علاوه بر افزونه نام فایل پوسته شما، افزونه نام فایل خود را نیز انجام می دهد. +این دستور تمام فایل هایی را که دارای پسوند `.log` در دایرکتوری `log/` هستند حذف می کند. +یا، شما می توانید چیزی شبیه به این: [source,console] ---- $ git rm \*~ ---- -This command removes all files whose names end with a `~`. +این دستور تمام فایل هایی که نامشان با یک `~` به پایان می رسد را حذف می کند. [[_git_mv]] -==== Moving Files +==== Moving Files (جا به جایی فایل ها) (((files, moving))) -Unlike many other VCSs, Git doesn't explicitly track file movement. -If you rename a file in Git, no metadata is stored in Git that tells it you renamed the file. -However, Git is pretty smart about figuring that out after the fact -- we'll deal with detecting file movement a bit later. +برخلاف بسیاری از VCS های دیگر، گیت به طور صریح حرکت فایل را ردیابی نمی کند. +اگر شما یک فایل را در گیت تغییر نام دهید، هیچ متا داده ای در گیت ذخیره نمی شود که به آن بگوید شما فایل را تغییر نام داده اید. +با این حال، گیت خیلی باهوش است که این موضوع را بعد از وقوع آن تشخیص می دهد -- ما کمی بعد با تشخیص حرکت فایل ها سر و کار خواهیم داشت. -Thus it's a bit confusing that Git has a `mv` command. -If you want to rename a file in Git, you can run something like: +بنابراین کمی گیج کننده است که گیت یک دستور `mv` داشته باشد. +اگر می خواهید یک فایل را در گیت تغییر نام دهید، می توانید چیزی شبیه به این را اجرا کنید: [source,console] ---- $ git mv file_from file_to ---- -and it works fine. -In fact, if you run something like this and look at the status, you'll see that Git considers it a renamed file: +و خوب کار می کنه. +در واقع، اگر شما چیزی شبیه به این را اجرا کنید و به وضعیت نگاه کنید، خواهید دید که گیت آن را به عنوان یک فایل تغییر نام می داند: [source,console] ---- @@ -615,7 +614,7 @@ Changes to be committed: renamed: README.md -> README ---- -However, this is equivalent to running something like this: +با این حال، این معادل اجرای چیزی شبیه به این است: [source,console] ---- @@ -624,6 +623,6 @@ $ git rm README.md $ git add README ---- -Git figures out that it's a rename implicitly, so it doesn't matter if you rename a file that way or with the `mv` command. -The only real difference is that `git mv` is one command instead of three -- it's a convenience function. -More importantly, you can use any tool you like to rename a file, and address the `add`/`rm` later, before you commit. +گیت متوجه شد که این یک تغییر نام ضمنی است، بنابراین فرقی نمی کند که آیا شما یک فایل را به این طریق یا با دستور `mv` تغییر نام دهید. +تنها تفاوت واقعی این است که `git mv` یک دستور به جای سه دستور است -- این یک تابع راحتی است. +مهمتر از همه، شما می توانید از هر ابزاری که دوست دارید برای تغییر نام یک فایل استفاده کنید، و بعدا قبل از اینکه commit کنید به `add`/`rm` رسیدگی کنید. \ No newline at end of file From 95900fe8a265221ae411efcb91743a88e8a251c1 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 19:36:19 +0330 Subject: [PATCH 456/549] translate(02-git-basics): translated remotes to persian --- book/02-git-basics/sections/remotes.asc | 143 ++++++++++++------------ 1 file changed, 73 insertions(+), 70 deletions(-) diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 80e98250..985ec7d6 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -1,26 +1,26 @@ [[_remote_repos]] -=== Working with Remotes +=== Working with Remotes (کار کردن با ریموت ها) -To be able to collaborate on any Git project, you need to know how to manage your remote repositories. -Remote repositories are versions of your project that are hosted on the Internet or network somewhere. -You can have several of them, each of which generally is either read-only or read/write for you. -Collaborating with others involves managing these remote repositories and pushing and pulling data to and from them when you need to share work. -Managing remote repositories includes knowing how to add remote repositories, remove remotes that are no longer valid, manage various remote branches and define them as being tracked or not, and more. -In this section, we'll cover some of these remote-management skills. +برای اینکه بتوانید در هر پروژه گیت همکاری کنید، باید بدانید که چگونه مخازن از راه دور خود را مدیریت کنید. +مخازن از راه دور نسخه هایی از پروژه شما هستند که در اینترنت یا شبکه جایی میزبانی می شوند. +شما می توانید چند تا از آنها را داشته باشید، که هر یک از آنها به طور کلی فقط برای خواندن یا خواندن / نوشتن برای شما است. +همکاری با دیگران شامل مدیریت این مخازن از راه دور و فشار دادن و کشیدن داده ها به آنها و از آنها زمانی که شما نیاز به به اشتراک گذاشتن کار. +مدیریت مخازن از راه دور شامل دانستن چگونگی اضافه کردن مخازن از راه دور، حذف کنترل های از راه دور که دیگر معتبر نیستند، مدیریت شاخه های از راه دور مختلف و تعریف آنها به عنوان ردیابی یا نه و بیشتر است. +در این بخش، ما برخی از این مهارت های مدیریت از راه دور را پوشش خواهیم داد. [NOTE] .Remote repositories can be on your local machine. ==== -It is entirely possible that you can be working with a "`remote`" repository that is, in fact, on the same host you are. -The word "`remote`" does not necessarily imply that the repository is somewhere else on the network or Internet, only that it is elsewhere. -Working with such a remote repository would still involve all the standard pushing, pulling and fetching operations as with any other remote. +کاملا ممکن است که شما با یک مخزن " `remote ` " کار کنید که در واقع در همان میزبان شما است. +کلمه "`remote`" لزوماً به این معنی نیست که مخزن در جایی دیگر در شبکه یا اینترنت است ، فقط این است که در جای دیگری است. +کار با چنین مخزن از راه دور هنوز هم شامل تمام استاندارد فشار، کشیدن و گرفتن عملیات به عنوان با هر از راه دور دیگر. ==== -==== Showing Your Remotes +==== Showing Your Remotes (نمایش ریموت ها) -To see which remote servers you have configured, you can run the `git remote` command.(((git commands, remote))) -It lists the shortnames of each remote handle you've specified. -If you've cloned your repository, you should at least see `origin` -- that is the default name Git gives to the server you cloned from: +برای دیدن اینکه کدام سرورهای از راه دور را پیکربندی کرده اید، می توانید دستور `git remote` را اجرا کنید. +نام های کوتاه هر دستگیره ای که مشخص کرده اید را لیست می کند. +اگر مخزن خود را کلان کرده اید، حداقل باید `origin` را ببینید -- این نام پیش فرضی است که Git به سرور که از آن کلان کرده اید می دهد: [source,console] ---- @@ -36,7 +36,7 @@ $ git remote origin ---- -You can also specify `-v`, which shows you the URLs that Git has stored for the shortname to be used when reading and writing to that remote: +شما همچنین می توانید `-v` را مشخص کنید، که به شما URL هایی را نشان می دهد که Git برای نام کوتاه ذخیره کرده است که هنگام خواندن و نوشتن به آن از راه دور استفاده می شود: [source,console] ---- @@ -45,8 +45,8 @@ origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push) ---- -If you have more than one remote, the command lists them all. -For example, a repository with multiple remotes for working with several collaborators might look something like this. +اگر شما بیش از یک ریموت دارید، دستور همه آنها را لیست می کند. +به عنوان مثال، یک مخزن با چندین کنترل از راه دور برای کار با چندین همکار ممکن است چیزی شبیه به این باشد. [source,console] ---- @@ -64,16 +64,17 @@ origin git@github.com:mojombo/grit.git (fetch) origin git@github.com:mojombo/grit.git (push) ---- -This means we can pull contributions from any of these users pretty easily. -We may additionally have permission to push to one or more of these, though we can't tell that here. +این به این معنی است که ما می توانیم به راحتی از هر یک از این کاربران کمک بگیریم. +ما ممکن است علاوه بر این اجازه داشته باشیم که به یکی یا چند مورد از این ها فشار بیاریم، اگرچه نمی توانیم این را اینجا بگوییم. -Notice that these remotes use a variety of protocols; we'll cover more about this in <>. +توجه داشته باشید که این کنترل های از راه دور از پروتکل های مختلفی استفاده می کنند؛ ما بیشتر در مورد این موضوع در <> صحبت خواهیم کرد. -==== Adding Remote Repositories +==== Adding Remote Repositories (اضافه کردن مخازن از راه دور) -We've mentioned and given some demonstrations of how the `git clone` command implicitly adds the `origin` remote for you. -Here's how to add a new remote explicitly.(((git commands, remote))) -To add a new remote Git repository as a shortname you can reference easily, run `git remote add `: +ما اشاره کرده ایم و برخی از تظاهرات را نشان داده ایم که چگونه دستور `git clone ` به طور ضمنی ریموت `origin ` را برای شما اضافه می کند. +در اینجا نحوه اضافه کردن یک ریموت جدید به طور صریح است. +(((git commands, remote))) +برای اضافه کردن یک مخزن Git از راه دور به عنوان یک نام کوتاه که به راحتی می توانید به آن مراجعه کنید، `git remote add ` را اجرا کنید: [source,console] ---- @@ -87,9 +88,8 @@ pb https://github.com/paulboone/ticgit (fetch) pb https://github.com/paulboone/ticgit (push) ---- -Now you can use the string `pb` on the command line instead of the whole URL. -For example, if you want to fetch all the information that Paul has but that you don't yet have in your repository, you can run `git fetch pb`: - +حالا شما می توانید از رشته `pb` در خط فرمان به جای کل URL استفاده کنید. +به عنوان مثال، اگر می خواهید تمام اطلاعاتی را که Paul دارد اما هنوز در مخزن خود ندارید، بدست آورید، می توانید `git fetch pb` را اجرا کنید: [source,console] ---- $ git fetch pb @@ -102,65 +102,66 @@ From https://github.com/paulboone/ticgit * [new branch] ticgit -> pb/ticgit ---- -Paul's `master` branch is now accessible locally as `pb/master` -- you can merge it into one of your branches, or you can check out a local branch at that point if you want to inspect it. -We'll go over what branches are and how to use them in much more detail in <>. +شعبه `master` پاول در حال حاضر به صورت محلی به عنوان `pb/master` قابل دسترسی است -- شما می توانید آن را به یکی از شعبه های خود ادغام کنید، یا اگر می خواهید آن را بازرسی کنید می توانید یک شعبه محلی را در آن نقطه بررسی کنید. +ما در <> درباره شاخه ها و نحوه استفاده از آنها به طور مفصل تر صحبت خواهیم کرد. [[_fetching_and_pulling]] -==== Fetching and Pulling from Your Remotes +==== Fetching and Pulling from Your Remotes (فچ و پول کردن از ریموت های شما) -As you just saw, to get data from your remote projects, you can run:(((git commands, fetch))) +همانطور که دیدید، برای دریافت داده ها از پروژه های از راه دور، می توانید دستورات (((git commands, fetch))) + را اجرا کنید. [source,console] ---- $ git fetch ---- +این فرمان به سمت آن پروژه ی از راه دور می رود و تمام داده هایی را که شما هنوز ندارید از آن پروژه ی از راه دور می گیرد. +بعد از انجام این کار، شما باید مرجع تمام شاخه ها را از آن ریموت داشته باشید، که می توانید در هر زمان ادغام یا بازرسی کنید. -The command goes out to that remote project and pulls down all the data from that remote project that you don't have yet. -After you do this, you should have references to all the branches from that remote, which you can merge in or inspect at any time. - -If you clone a repository, the command automatically adds that remote repository under the name "`origin`". -So, `git fetch origin` fetches any new work that has been pushed to that server since you cloned (or last fetched from) it. -It's important to note that the `git fetch` command only downloads the data to your local repository -- it doesn't automatically merge it with any of your work or modify what you're currently working on. -You have to merge it manually into your work when you're ready. +اگر یک مخزن را کلان کنید، دستور به طور خودکار آن مخزن از راه دور را با نام "`origin`" اضافه می کند. +بنابراین، `git fetch origin` هر کار جدیدی را که از زمانی که کلونش کردید (یا آخرین بار از آن گرفته شده اید) به آن سرور ارسال شده است، می آورد. +مهم است که توجه داشته باشید که دستور `git fetch` فقط داده ها را به مخزن محلی شما دانلود می کند -- آن را به طور خودکار با هر یک از کارهای شما ادغام نمی کند یا آنچه در حال حاضر روی آن کار می کنید را اصلاح نمی کند. +وقتی آماده شدی باید دست به دست با کارت ادغامش کنی. +(((git commands, pull))) -If your current branch is set up to track a remote branch (see the next section and <> for more information), you can use the `git pull` command to automatically fetch and then merge that remote branch into your current branch.(((git commands, pull))) -This may be an easier or more comfortable workflow for you; and by default, the `git clone` command automatically sets up your local `master` branch to track the remote `master` branch (or whatever the default branch is called) on the server you cloned from. -Running `git pull` generally fetches data from the server you originally cloned from and automatically tries to merge it into the code you're currently working on. +اگر شاخه فعلی شما برای ردیابی یک شاخه از راه دور تنظیم شده است (برای اطلاعات بیشتر به بخش بعدی و <> مراجعه کنید) ، می توانید از دستور `git pull` برای گرفتن خودکار و سپس ادغام آن شاخه از راه دور در شاخه فعلی خود استفاده کنید. +این ممکن است یک جریان کار ساده تر یا راحت تر برای شما باشد؛ و به طور پیش فرض، دستور `git clone` به طور خودکار شاخه محلی `master` شما را برای ردیابی شاخه `master` از راه دور (یا هر نام دیگری که شاخه پیش فرض نامیده می شود) در سرور که از آن کلون شده است، تنظیم می کند. +اجرای `git pull` به طور کلی داده ها را از سرور که در اصل از آن کلان کرده اید می گیرد و به طور خودکار سعی می کند آن را در کد که در حال حاضر روی آن کار می کنید ادغام کند. [NOTE] ==== -From Git version 2.27 onward, `git pull` will give a warning if the `pull.rebase` variable is not set. -Git will keep warning you until you set the variable. +از نسخه 2.27 Git به بعد، اگر متغیر `pull.rebase` تنظیم نشده باشد، `git pull` هشدار می دهد. +گیت به شما هشدار می دهد تا زمانی که متغیر را تنظیم کنید. -If you want the default behavior of Git (fast-forward if possible, else create a merge commit): +اگر می خواهید رفتار پیش فرض گیت را داشته باشید (اگر امکان دارد سریع پیش بروید، در غیر این صورت یک commit ادغام ایجاد کنید): `git config --global pull.rebase "false"` -If you want to rebase when pulling: +اگه ميخواي موقع کشيدن بازي کني: `git config --global pull.rebase "true"` ==== [[_pushing_remotes]] -==== Pushing to Your Remotes +==== Pushing to Your Remotes (پوش کردن به ریموت های شما) -When you have your project at a point that you want to share, you have to push it upstream. -The command for this is simple: `git push `.(((git commands, push))) -If you want to push your `master` branch to your `origin` server (again, cloning generally sets up both of those names for you automatically), then you can run this to push any commits you've done back up to the server: +وقتی پروژه تان را در نقطه ای قرار می دهید که می خواهید به اشتراک بگذارید، باید آن را به سمت بالا بکشید. +دستور برای این کار ساده است: `git push `. +اگر می خواهید شاخه `master` خود را به سرور `origin` خود فشار دهید (باز هم، کلون کردن به طور معمول هر دو نام را برای شما به طور خودکار تنظیم می کند) ، پس می توانید این کار را انجام دهید تا هر کاری که انجام داده اید را به سرور برگردانید: [source,console] ---- $ git push origin master ---- -This command works only if you cloned from a server to which you have write access and if nobody has pushed in the meantime. -If you and someone else clone at the same time and they push upstream and then you push upstream, your push will rightly be rejected. -You'll have to fetch their work first and incorporate it into yours before you'll be allowed to push. -See <> for more detailed information on how to push to remote servers. +این دستور فقط در صورتی کار می کند که شما از یک سرور که به آن دسترسی نوشتن دارید و اگر هیچ کس در این میان فشار نداده است، کلان کنید. +اگر شما و شخص دیگری در همان زمان شبیه سازی کنید و آنها به سمت بالا فشار بیاورند و سپس شما به سمت بالا فشار بیاورید، فشار شما به درستی رد خواهد شد. +بايد اول کار اونا رو بگيري و اونو به کار خودت اضافه کني تا بتوني فشار بياري +برای اطلاعات دقیق تر در مورد نحوه ارسال به سرورهای از راه دور، به <> مراجعه کنید. [[_inspecting_remote]] -==== Inspecting a Remote +==== Inspecting a Remote (بازرسی ریموت) -If you want to see more information about a particular remote, you can use the `git remote show ` command.(((git commands, remote))) -If you run this command with a particular shortname, such as `origin`, you get something like this: +اگر می خواهید اطلاعات بیشتری در مورد یک ریموت خاص مشاهده کنید، می توانید از دستور `git remote show ` استفاده کنید.(((git commands, remote))) +اگر شما این دستور را با یک نام کوتاه خاص اجرا کنید، مانند `origin`، چیزی شبیه به این به دست می آورید: [source,console] ---- @@ -178,12 +179,12 @@ $ git remote show origin master pushes to master (up to date) ---- -It lists the URL for the remote repository as well as the tracking branch information. -The command helpfully tells you that if you're on the `master` branch and you run `git pull`, it will automatically merge the remote's `master` branch into the local one after it has been fetched. -It also lists all the remote references it has pulled down. +این لیست URL برای مخزن از راه دور و همچنین اطلاعات شاخه ردیابی را لیست می کند. +دستور به شما کمک می کند که اگر شما در شاخه `master` هستید و `git pull` را اجرا کنید، آن را به طور خودکار شاخه `master` از راه دور به محلی پس از آن آورده شده است. +همچنین تمام ارجاعات از راه دور را که برداشته است لیست می کند. -That is a simple example you're likely to encounter. -When you're using Git more heavily, however, you may see much more information from `git remote show`: +این یک مثال ساده است که احتمالا با آن روبرو خواهید شد. +با این حال، هنگامی که شما از گیت به شدت استفاده می کنید، ممکن است اطلاعات بیشتری از `git از راه دور نمایش ` مشاهده کنید: [source,console] ---- @@ -209,13 +210,15 @@ $ git remote show origin master pushes to master (up to date) ---- -This command shows which branch is automatically pushed to when you run `git push` while on certain branches. -It also shows you which remote branches on the server you don't yet have, which remote branches you have that have been removed from the server, and multiple local branches that are able to merge automatically with their remote-tracking branch when you run `git pull`. +این دستور نشان می دهد که چه شاخه ای به طور خودکار فشار داده می شود زمانی که شما `git push` را در حالی که در شاخه های خاص اجرا می کنید. +همچنین به شما نشان می دهد که چه شاخه های از راه دور در سرور شما هنوز وجود ندارد، چه شاخه های از راه دور شما از سرور حذف شده است، و چندین شاخه محلی که قادر به ادغام به طور خودکار با شاخه های ردیابی از راه دور خود را هنگامی که شما اجرا `git pull`. -==== Renaming and Removing Remotes +==== Renaming and Removing Remotes (تغییر نام یا حذف ریموت) -You can run `git remote rename` to change a remote's shortname.(((git commands, remote))) -For instance, if you want to rename `pb` to `paul`, you can do so with `git remote rename`: +شما می توانید `git remote rename` + را اجرا کنید تا نام کوتاه یک ریموت را تغییر دهید. + (((git commands, remote))) +به عنوان مثال، اگر می خواهید نام `pb` را به `paul` تغییر دهید، می توانید این کار را با `git remote rename` انجام دهید: [source,console] ---- @@ -225,10 +228,10 @@ origin paul ---- -It's worth mentioning that this changes all your remote-tracking branch names, too. -What used to be referenced at `pb/master` is now at `paul/master`. +لازم به ذکر است که این تغییر نام تمام شاخه های ردیابی از راه دور شما را نیز تغییر می دهد. +آنچه که قبلاً در `pb/master` به آن اشاره می شد، اکنون در `paul/master` است. -If you want to remove a remote for some reason -- you've moved the server or are no longer using a particular mirror, or perhaps a contributor isn't contributing anymore -- you can either use `git remote remove` or `git remote rm`: +اگر می خواهید از راه دور برای برخی از دلایل حذف کنید - شما سرور را جابجا کرده اید یا دیگر از یک آینه خاص استفاده نمی کنید، یا شاید یک مشارکت کننده دیگر مشارکت نمی کند - شما می توانید از `git remote remove ` یا `git remote rm ` استفاده کنید: [source,console] ---- @@ -237,4 +240,4 @@ $ git remote origin ---- -Once you delete the reference to a remote this way, all remote-tracking branches and configuration settings associated with that remote are also deleted. +هنگامی که شما ارجاع به یک ریموت را از این طریق حذف می کنید، تمام شاخه های ردیابی از راه دور و تنظیمات پیکربندی مرتبط با آن ریموت نیز حذف می شوند. \ No newline at end of file From 9b3cbc67778ea2159fd4e3833e2e26fb9ebf34d3 Mon Sep 17 00:00:00 2001 From: Yasin Date: Thu, 24 Jul 2025 19:58:42 +0330 Subject: [PATCH 457/549] translate(02-git-basics): translated tagging to persian --- book/02-git-basics/sections/tagging.asc | 114 ++++++++++++------------ 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index 34604c57..cbaeb6dd 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -1,15 +1,15 @@ [[_git_tagging]] -=== Tagging +=== Tagging (تگ کردن) (((tags))) -Like most VCSs, Git has the ability to tag specific points in a repository's history as being important. -Typically, people use this functionality to mark release points (`v1.0`, `v2.0` and so on). -In this section, you'll learn how to list existing tags, how to create and delete tags, and what the different types of tags are. +مانند اکثر VCS ها، گیت توانایی برچسب گذاری نقاط خاص در تاریخچه یک مخزن را به عنوان مهم دارد. +به طور معمول، مردم از این قابلیت برای مشخص کردن نقاط انتشار (`v1.0`، `v2.0` و غیره) استفاده می کنند. +در این بخش، شما یاد خواهید گرفت که چگونه برچسب های موجود را لیست کنید، چگونه برچسب ها را ایجاد و حذف کنید، و انواع مختلف برچسب ها چیست. -==== Listing Your Tags +==== Listing Your Tags (لیست کردن تگ ها) -Listing the existing tags in Git is straightforward. -Just type `git tag` (with optional `-l` or `--list`):(((git commands, tag))) +فهرست کردن تگ های موجود در گیت ساده است. +فقط تایپ کنید `git tag` (با اختیاری `-l` یا `--list`):(((git commands, tag))) [source,console] ---- @@ -18,11 +18,11 @@ v1.0 v2.0 ---- -This command lists the tags in alphabetical order; the order in which they are displayed has no real importance. +این دستور برچسب ها را به ترتیب الفبا لیست می کند؛ ترتیب نمایش آنها اهمیت واقعی ندارد. -You can also search for tags that match a particular pattern. -The Git source repo, for instance, contains more than 500 tags. -If you're interested only in looking at the 1.8.5 series, you can run this: +همچنین می توانید برچسب هایی را که با یک الگوی خاص مطابقت دارند، جستجو کنید. +به عنوان مثال، منبع گیت شامل بیش از ۵۰۰ تگ است. +اگر شما فقط علاقه مند به نگاه کردن به سری 1.8.5 هستید، می توانید این را اجرا کنید: [source,console] ---- @@ -42,27 +42,28 @@ v1.8.5.5 [NOTE] .Listing tag wildcards requires `-l` or `--list` option ==== -If you want just the entire list of tags, running the command `git tag` implicitly assumes you want a listing and provides one; the use of `-l` or `--list` in this case is optional. +اگر شما فقط کل لیست برچسب ها را می خواهید، اجرای دستور `git tag` به طور ضمنی فرض می کند که شما یک لیست می خواهید و یک لیست را ارائه می دهد؛ استفاده از `-l` یا `--list` در این مورد اختیاری است. -If, however, you're supplying a wildcard pattern to match tag names, the use of `-l` or `--list` is mandatory. +با این حال، اگر شما در حال ارائه یک الگوی کارد جوینده برای مطابقت با نام های برچسب هستید، استفاده از `-l` یا `--list` اجباری است. ==== -==== Creating Tags +==== Creating Tags (ساخت تگ) -Git supports two types of tags: _lightweight_ and _annotated_. +گیت از دو نوع تگ پشتیبانی می کند: _lightweight_ و _annotated_. -A lightweight tag is very much like a branch that doesn't change -- it's just a pointer to a specific commit. +یک تگ سبک وزن بسیار شبیه به یک شاخه است که تغییر نمی کند -- فقط یک اشاره کننده به یک commit خاص است. -Annotated tags, however, are stored as full objects in the Git database. -They're checksummed; contain the tagger name, email, and date; have a tagging message; and can be signed and verified with GNU Privacy Guard (GPG). -It's generally recommended that you create annotated tags so you can have all this information; but if you want a temporary tag or for some reason don't want to keep the other information, lightweight tags are available too. +با این حال، برچسب های تشریح شده به عنوان اشیاء کامل در پایگاه داده گیت ذخیره می شوند. +آنها چک جمع شده اند؛ شامل نام، ایمیل و تاریخ برچسب دار هستند؛ یک پیام برچسب دار دارند؛ و می توانند با GNU Privacy Guard (GPG) امضا و تأیید شوند. +به طور کلی توصیه می شود که شما برچسب های تفسیر شده ایجاد کنید تا بتوانید تمام این اطلاعات را داشته باشید؛ اما اگر شما یک برچسب موقت می خواهید یا به دلایلی نمی خواهید اطلاعات دیگر را نگه دارید، برچسب های سبک وزن نیز در دسترس هستند. [[_annotated_tags]] -==== Annotated Tags +==== Annotated Tags (برچسب های توضیح دار) (((tags, annotated))) -Creating an annotated tag in Git is simple. -The easiest way is to specify `-a` when you run the `tag` command:(((git commands, tag))) +ایجاد یک برچسب با یادداشت در گیت ساده است. +ساده ترین راه این است که `-a` را مشخص کنید وقتی دستور `tag` را اجرا می کنید: +(((git commands, tag))) [source,console] ---- @@ -73,10 +74,10 @@ v1.3 v1.4 ---- -The `-m` specifies a tagging message, which is stored with the tag. -If you don't specify a message for an annotated tag, Git launches your editor so you can type it in. +`-m` یک پیام برچسب گذاری را مشخص می کند که با برچسب ذخیره می شود. +اگر شما یک پیام برای یک تگ با اشاره مشخص نکنید، Git ویرایشگر شما را راه اندازی می کند تا شما بتوانید آن را تایپ کنید. -You can see the tag data along with the commit that was tagged by using the `git show` command: +شما می توانید داده های تگ را همراه با commit که با استفاده از دستور `git show ` تگ شده است ببینید: [source,console] ---- @@ -94,14 +95,14 @@ Date: Mon Mar 17 21:52:11 2008 -0700 Change version number ---- -That shows the tagger information, the date the commit was tagged, and the annotation message before showing the commit information. +این اطلاعات برچسب دار را نشان می دهد، تاریخ برچسب گذاری commit، و پیام تبصری قبل از نمایش اطلاعات commit. -==== Lightweight Tags +==== Lightweight Tags (برچسب های سبک) (((tags, lightweight))) -Another way to tag commits is with a lightweight tag. -This is basically the commit checksum stored in a file -- no other information is kept. -To create a lightweight tag, don't supply any of the `-a`, `-s`, or `-m` options, just provide a tag name: +راه دیگری برای برچسب گذاری commit ها با یک برچسب سبک وزن است. +این اساساً چک سوم تاییدیه ای است که در یک فایل ذخیره شده است -- هیچ اطلاعات دیگری حفظ نمی شود. +برای ایجاد یک تگ سبک، هیچ یک از گزینه های `-a`، `-s` یا `-m` را ارائه ندهید، فقط یک نام تگ را ارائه دهید: [source,console] ---- @@ -114,8 +115,8 @@ v1.4-lw v1.5 ---- -This time, if you run `git show` on the tag, you don't see the extra tag information.(((git commands, show))) -The command just shows the commit: +این بار، اگر شما `git show` را روی برچسب اجرا کنید، اطلاعات برچسب اضافی را نمی بینید. +دستور فقط کامیت رو نشون میده: [source,console] ---- @@ -127,10 +128,10 @@ Date: Mon Mar 17 21:52:11 2008 -0700 Change version number ---- -==== Tagging Later +==== Tagging Later (بعداً برچسب می‌زنم) -You can also tag commits after you've moved past them. -Suppose your commit history looks like this: +شما همچنین می توانید بعد از اینکه از آنها گذشته اید، آنها را برچسب بزنید. +فرض کنید که سابقه ی commit شما اینگونه باشد: [source,console] ---- @@ -147,16 +148,17 @@ a6b4c97498bd301d84096da251c98a07c7723e65 Create write support 8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme ---- -Now, suppose you forgot to tag the project at v1.2, which was at the "`Update rakefile`" commit. -You can add it after the fact. -To tag that commit, you specify the commit checksum (or part of it) at the end of the command: +حالا فرض کنید فراموش کرده اید که پروژه را در نسخه 1.2 برچسب بزنید، که در "Update rakefile" commit بود. +می تونی بعد از واقعه اضافهش کنی +برای برچسب زدن به این کامیت، شما چک سوم کامیت (یا بخشی از آن) را در انتهای دستور مشخص می کنید: [source,console] ---- $ git tag -a v1.2 9fceb02 ---- -You can see that you've tagged the commit:(((git commands, tag))) +شما می توانید ببینید که شما تاگ commit: +(((git commands, tag))) [source,console] ---- @@ -183,11 +185,12 @@ Date: Sun Apr 27 20:43:35 2008 -0700 ---- [[_sharing_tags]] -==== Sharing Tags +==== Sharing Tags (اشتراک گذاری تگ ها) -By default, the `git push` command doesn't transfer tags to remote servers.(((git commands, push))) -You will have to explicitly push tags to a shared server after you have created them. -This process is just like sharing remote branches -- you can run `git push origin `. +به طور پیش فرض، دستور `git push` برچسب ها را به سرورهای از راه دور منتقل نمی کند. +شما باید به طور صریح تگ ها را به یک سرور مشترک پس از ایجاد آنها ارسال کنید. +(((git commands, push))) +این فرآیند درست مثل اشتراک گذاری شاخه های از راه دور است -- شما می توانید `git push origin ` را اجرا کنید. [source,console] ---- @@ -215,7 +218,7 @@ To git@github.com:schacon/simplegit.git * [new tag] v1.4-lw -> v1.4-lw ---- -Now, when someone else clones or pulls from your repository, they will get all your tags as well. +حالا، وقتی کسی از مخزن شما کلان یا استخراج می کند، همه ی برچسب های شما را هم می گیرد. [NOTE] .`git push` pushes both types of tags @@ -224,10 +227,10 @@ Now, when someone else clones or pulls from your repository, they will get all y There is currently no option to push only lightweight tags, but if you use `git push --follow-tags` only annotated tags will be pushed to the remote. ==== -==== Deleting Tags +==== Deleting Tags (حذف تگ ها) -To delete a tag on your local repository, you can use `git tag -d `. -For example, we could remove our lightweight tag above as follows: +برای حذف یک برچسب در مخزن محلی خود، می توانید از `git tag -d ` استفاده کنید. +به عنوان مثال، می توانیم برچسب سبک وزن بالا را به صورت زیر حذف کنیم: [source,console] ---- @@ -235,10 +238,10 @@ $ git tag -d v1.4-lw Deleted tag 'v1.4-lw' (was e7d5add) ---- -Note that this does not remove the tag from any remote servers. -There are two common variations for deleting a tag from a remote server. +توجه داشته باشید که این کار برچسب را از هر سرور از راه دور حذف نمی کند. +دو نوع رایج برای حذف یک برچسب از یک سرور از راه دور وجود دارد. -The first variation is `git push :refs/tags/`: +اولین تغییر `git push :refs/tags/ ` است: [source,console] ---- @@ -247,18 +250,19 @@ To /git@github.com:schacon/simplegit.git - [deleted] v1.4-lw ---- -The way to interpret the above is to read it as the null value before the colon is being pushed to the remote tag name, effectively deleting it. +روش تفسیر این مطلب این است که آن را به عنوان مقدار صفر قبل از فشار دادن دو نقطه به نام تگ از راه دور بخوانیم، و به طور موثر آن را حذف کنیم. -The second (and more intuitive) way to delete a remote tag is with: +راه دوم (و بصری تر) برای حذف یک برچسب از راه دور این است: [source,console] ---- $ git push origin --delete ---- -==== Checking out Tags +==== Checking out Tags (چک کردن تگ ها) -If you want to view the versions of files a tag is pointing to, you can do a `git checkout` of that tag, although this puts your repository in "`detached HEAD`" state, which has some ill side effects: + +اگر می خواهید نسخه های فایل هایی که یک برچسب به آنها اشاره دارد را مشاهده کنید، می توانید یک چکآوت `git از آن برچسب را انجام دهید، اگرچه این مخزن شما را در حالت "`detached HEAD`" قرار می دهد، که دارای برخی از عوارض جانبی بد است: [source,console] ---- @@ -296,4 +300,4 @@ $ git checkout -b version2 v2.0.0 Switched to a new branch 'version2' ---- -If you do this and make a commit, your `version2` branch will be slightly different than your `v2.0.0` tag since it will move forward with your new changes, so do be careful. +اگر این کار را انجام دهید و یک commit را انجام دهید، شاخه `version2` شما کمی متفاوت از برچسب `v2.0.0` خواهد بود، زیرا با تغییرات جدید شما پیش خواهد رفت، بنابراین مراقب باشید. \ No newline at end of file From 7d33c0a3edfeed5794d24254322659eabc04ac38 Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 29 Jul 2025 13:44:38 +0330 Subject: [PATCH 458/549] translate(02-git-basics): translated undoing to persian --- .idea/workspace.xml | 41 +++---- book/02-git-basics/sections/undoing.asc | 144 ++++++++++++------------ 2 files changed, 93 insertions(+), 92 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e85ab93a..dbbbdd48 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,7 @@ - - - + @@ -53,12 +51,16 @@ - { - "keyToString": { - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/01-introduction", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.git.unshallow": "true", + "git-widget-placeholder": "book/translation/02-git-basics", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" } -}</component> +} - + @@ -127,6 +129,7 @@ + diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index 0c815dde..a23242b7 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -1,26 +1,26 @@ [[_undoing]] -=== Undoing Things +=== Undoing Things (بازگرداندن تغییرات) -At any stage, you may want to undo something. -Here, we'll review a few basic tools for undoing changes that you've made. -Be careful, because you can't always undo some of these undos. -This is one of the few areas in Git where you may lose some work if you do it wrong. +در هر مرحله ممکن است بخواهید کاری را بازگردانید. +در اینجا، چند ابزار پایه برای بازگرداندن تغییراتی که ایجاد کرده‌اید مرور می‌کنیم. +مواظب باشید، چون همیشه نمی‌توانید همه این بازگردانی‌ها را لغو کنید. +این یکی از معدود موارد در گیت است که اگر اشتباه انجام شود، ممکن است بخشی از کارتان را از دست بدهید. -One of the common undos takes place when you commit too early and possibly forget to add some files, or you mess up your commit message. -If you want to redo that commit, make the additional changes you forgot, stage them, and commit again using the `--amend` option: +یکی از بازگردانی‌های رایج زمانی است که خیلی زود کامیت می‌کنید و احتمالاً برخی فایل‌ها را اضافه نکرده‌اید یا پیام کامیت خود را اشتباه نوشته‌اید. +اگر می‌خواهید آن کامیت را اصلاح کنید، تغییرات اضافی که فراموش کرده‌اید را اعمال کنید، آنها را مرحله‌بندی (stage) کرده و دوباره با گزینه `--amend` کامیت کنید: [source,console] ---- $ git commit --amend ---- -This command takes your staging area and uses it for the commit. -If you've made no changes since your last commit (for instance, you run this command immediately after your previous commit), then your snapshot will look exactly the same, and all you'll change is your commit message. +این دستور، منطقه آماده‌سازی شما را گرفته و برای انجام کامیت استفاده می‌کند. +اگر از آخرین کامیت خود هیچ تغییری ایجاد نکرده باشید (برای مثال، بلافاصله پس از کامیت قبلی این دستور را اجرا کنید)، اسنپ‌شات شما دقیقاً مشابه قبلی خواهد بود و تنها چیزی که تغییر می‌کند، پیام کامیت شماست. -The same commit-message editor fires up, but it already contains the message of your previous commit. -You can edit the message the same as always, but it overwrites your previous commit. +ویرایشگر پیام کامیت همانند قبل باز می‌شود، اما پیام کامیت قبلی شما را در خود دارد. +می‌توانید پیام را همانند همیشه ویرایش کنید، اما این پیام جایگزین کامیت قبلی خواهد شد. -As an example, if you commit and then realize you forgot to stage the changes in a file you wanted to add to this commit, you can do something like this: +مثلاً اگر کامیت کردید و بعد متوجه شدید تغییرات یک فایل که می‌خواستید به این کامیت اضافه کنید را آماده نکرده‌اید، می‌توانید کاری مشابه این انجام دهید: [source,console] ---- @@ -29,31 +29,31 @@ $ git add forgotten_file $ git commit --amend ---- -You end up with a single commit -- the second commit replaces the results of the first. +در نهایت شما یک کامیت واحد خواهید داشت — کامیت دوم جایگزین نتایج کامیت اول می‌شود. [NOTE] ==== -It's important to understand that when you're amending your last commit, you're not so much fixing it as _replacing_ it entirely with a new, improved commit that pushes the old commit out of the way and puts the new commit in its place. -Effectively, it's as if the previous commit never happened, and it won't show up in your repository history. - -The obvious value to amending commits is to make minor improvements to your last commit, without cluttering your repository history with commit messages of the form, "`Oops, forgot to add a file`" or "`Darn, fixing a typo in last commit`". +مهم است که بفهمید وقتی کامیت آخر خود را اصلاح می‌کنید، در واقع آن را صرفاً اصلاح نمی‌کنید بلکه کاملاً جایگزینش می‌کنید با یک کامیت جدید و بهبود یافته که کامیت قدیمی را کنار می‌زند و کامیت جدید را به جای آن قرار می‌دهد. +در واقع، انگار کامیت قبلی هرگز اتفاق نیفتاده و در تاریخچه مخزن شما نشان داده نخواهد شد. ==== [NOTE] ==== -Only amend commits that are still local and have not been pushed somewhere. -Amending previously pushed commits and force pushing the branch will cause problems for your collaborators. -For more on what happens when you do this and how to recover if you're on the receiving end read <<_rebase_peril>>. +ارزش واضح اصلاح کامیت‌ها این است که بتوانید بهبودهای کوچک را روی آخرین کامیت خود انجام دهید بدون اینکه تاریخچه مخزن شما با پیام‌های کامیتی مانند «اوه، فراموش کردم یک فایل اضافه کنم» یا «لعنتی، دارم اشتباه تایپی در کامیت آخر را اصلاح می‌کنم» شلوغ شود. +فقط کامیت‌هایی را اصلاح کنید که هنوز محلی هستند و به جایی ارسال نشده‌اند. +اصلاح کامیت‌هایی که قبلاً ارسال شده‌اند و سپس ارسال اجباری شاخه باعث مشکلاتی برای همکارانتان خواهد شد. +برای اطلاعات بیشتر در مورد اتفاقاتی که در این شرایط می‌افتد و چگونگی بازیابی در صورتی که در موقعیت دریافت‌کننده باشید، مطلب <<_rebase_peril>> را مطالعه کنید. ==== [[_unstaging]] -==== Unstaging a Staged File +==== Unstaging a Staged File (لغو مرحله‌بندی یک فایل مرحله‌بندی شده) + -The next two sections demonstrate how to work with your staging area and working directory changes. -The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. -For example, let's say you've changed two files and want to commit them as two separate changes, but you accidentally type `git add *` and stage them both. -How can you unstage one of the two? -The `git status` command reminds you: +دو بخش بعدی نحوه کار با ناحیه مرحله‌بندی و تغییرات دایرکتوری کاری شما را نشان می‌دهد. +نکته خوب این است که دستوری که برای تعیین وضعیت این دو ناحیه استفاده می‌کنید، همچنین به شما یادآوری می‌کند چگونه تغییرات آن‌ها را لغو کنید. +برای مثال، فرض کنید دو فایل را تغییر داده‌اید و می‌خواهید آن‌ها را به‌صورت دو تغییر جداگانه کامیت کنید، اما به اشتباه دستور `git add *` را زده و هر دو را مرحله‌بندی کرده‌اید. +چطور می‌توانید یکی از آن دو را از مرحله‌بندی خارج کنید؟ +دستور `git status` به شما یادآوری می‌کند: [source,console] ---- @@ -67,8 +67,8 @@ Changes to be committed: modified: CONTRIBUTING.md ---- -Right below the "`Changes to be committed`" text, it says use `git reset HEAD ...` to unstage. -So, let's use that advice to unstage the `CONTRIBUTING.md` file: +در پایین متن «Changes to be committed» نوشته شده که از دستور `git reset HEAD ...` برای لغو مرحله‌بندی استفاده کنید. +پس بیایید از این راهنمایی استفاده کنیم و فایل `CONTRIBUTING.md` را از مرحله‌بندی خارج کنیم: [source,console] ---- @@ -89,24 +89,24 @@ Changes not staged for commit: modified: CONTRIBUTING.md ---- -The command is a bit strange, but it works. -The `CONTRIBUTING.md` file is modified but once again unstaged. +دستور کمی عجیب است، اما کار می‌کند. +فایل `CONTRIBUTING.md` تغییر یافته اما دوباره از حالت استیج خارج شده است. [NOTE] ===== -It's true that `git reset` can be a dangerous command, especially if you provide the `--hard` flag. -However, in the scenario described above, the file in your working directory is not touched, so it's relatively safe. +درست است که دستور `git reset` می‌تواند خطرناک باشد، به‌ویژه اگر گزینه `--hard` را بدهید. +با این حال، در سناریوی بالا، فایل در دایرکتوری کاری شما دست نخورده باقی می‌ماند، بنابراین نسبتا امن است. ===== -For now this magic invocation is all you need to know about the `git reset` command. -We'll go into much more detail about what `reset` does and how to master it to do really interesting things in <>. +فعلا همین فراخوانی جادویی تمام چیزی است که باید درباره دستور `git reset` بدانید. +در <> جزئیات بیشتری درباره عملکرد `reset` و چگونگی تسلط بر آن برای انجام کارهای جالب خواهیم گفت. -==== Unmodifying a Modified File +==== Unmodifying a Modified File (بازگرداندن تغییرات فایل تغییر یافته) -What if you realize that you don't want to keep your changes to the `CONTRIBUTING.md` file? -How can you easily unmodify it -- revert it back to what it looked like when you last committed (or initially cloned, or however you got it into your working directory)? -Luckily, `git status` tells you how to do that, too. -In the last example output, the unstaged area looks like this: +اگر متوجه شدید که نمی‌خواهید تغییرات فایل `CONTRIBUTING.md` را نگه دارید، چه می‌کنید؟ +چطور می‌توانید به سادگی آن را به حالتی برگردانید که در آخرین کامیت (یا در ابتدا هنگام کلون کردن، یا هرطور که وارد دایرکتوری کاری‌تان شده) بود؟ +خوشبختانه، `git status` به شما می‌گوید چطور این کار را انجام دهید. +در خروجی مثال قبلی، بخش unstaged این‌گونه بود: [source,console] ---- @@ -117,8 +117,8 @@ Changes not staged for commit: modified: CONTRIBUTING.md ---- -It tells you pretty explicitly how to discard the changes you've made. -Let's do what it says: +این به طور واضح به شما می‌گوید چطور تغییراتی که داده‌اید را دور بریزید. +بیایید همان کاری را که می‌گوید انجام دهیم: [source,console] ---- @@ -132,37 +132,36 @@ Changes to be committed: ---- -You can see that the changes have been reverted. +می‌بینید که تغییرات برگردانده شده‌اند. [IMPORTANT] ===== -It's important to understand that `git checkout \-- ` is a dangerous command. -Any local changes you made to that file are gone -- Git just replaced that file with the last staged or committed version. -Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. +مهم است بدانید که دستور `git checkout -- ` یک دستور خطرناک است. +هر تغییر محلی که در آن فایل داده‌اید از بین می‌رود — گیت فقط آن فایل را با آخرین نسخه استیج شده یا کامیت شده جایگزین می‌کند. ===== -If you would like to keep the changes you've made to that file but still need to get it out of the way for now, we'll go over stashing and branching in <>; these are generally better ways to go. +اگر می‌خواهید تغییرات‌تان را نگه دارید ولی فعلا می‌خواهید آن را کنار بگذارید، در <> درباره stash و branch صحبت خواهیم کرد؛ این روش‌ها عموما بهتر هستند. -Remember, anything that is _committed_ in Git can almost always be recovered. -Even commits that were on branches that were deleted or commits that were overwritten with an `--amend` commit can be recovered (see <> for data recovery). -However, anything you lose that was never committed is likely never to be seen again. +به یاد داشته باشید، هر چیزی که در گیت _کامیت_ شده باشد تقریبا همیشه قابل بازیابی است. +حتی کامیت‌هایی که روی شاخه‌هایی بودند که حذف شده‌اند یا کامیت‌هایی که با `--amend` بازنویسی شده‌اند هم قابل بازیابی هستند (برای بازیابی داده‌ها به <> مراجعه کنید). +اما هر چیزی که از دست بدهید و هرگز کامیت نشده باشد، احتمالا دیگر قابل بازیابی نیست. [[undoing_git_restore]] -==== Undoing things with git restore +==== Undoing things with git restore (بازگردانی تغییرات با git restore) -Git version 2.23.0 introduced a new command: `git restore`. -It's basically an alternative to `git reset` which we just covered. -From Git version 2.23.0 onwards, Git will use `git restore` instead of `git reset` for many undo operations. +نسخه ۲.۲۳.۰ گیت یک دستور جدید معرفی کرد: `git restore`. +این در واقع جایگزینی برای `git reset` است که همین حالا بررسی کردیم. +از نسخه ۲.۲۳.۰ به بعد، گیت برای بسیاری از عملیات بازگردانی به جای `git reset` از `git restore` استفاده خواهد کرد. -Let's retrace our steps, and undo things with `git restore` instead of `git reset`. +بیایید دوباره مراحل را طی کنیم و با `git restore` به جای `git reset` عملیات بازگردانی را انجام دهیم. -===== Unstaging a Staged File with git restore +===== Unstaging a Staged File with git restore (خارج کردن فایل استیج شده از حالت استیج با git restore ) -The next two sections demonstrate how to work with your staging area and working directory changes with `git restore`. -The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. -For example, let's say you've changed two files and want to commit them as two separate changes, but you accidentally type `git add *` and stage them both. -How can you unstage one of the two? -The `git status` command reminds you: +دو بخش بعدی نشان می‌دهند چگونه با استفاده از `git restore` با تغییرات در منطقه استیج و دایرکتوری کاری کار کنیم. +نکته خوب این است که دستوری که برای مشاهده وضعیت این دو ناحیه استفاده می‌کنید، به شما یادآوری می‌کند چطور تغییراتشان را بازگردانید. +مثلا فرض کنید دو فایل را تغییر داده‌اید و می‌خواهید به صورت دو تغییر جداگانه کامیت کنید، اما اشتباها `git add *` را زده و هر دو را استیج کرده‌اید. +چطور یکی از آن دو را از حالت استیج خارج کنید؟ +دستور `git status` به شما یادآوری می‌کند: [source,console] ---- @@ -176,8 +175,8 @@ Changes to be committed: ---- -Right below the "`Changes to be committed`" text, it says use `git restore --staged ...` to unstage. -So, let's use that advice to unstage the `CONTRIBUTING.md` file: +زیر عبارت "`Changes to be committed`" نوشته که برای خارج کردن فایل از استیج باید از `git restore --staged ...` استفاده کنید. +پس بیایید طبق این راهنمایی فایل `CONTRIBUTING.md` را از استیج خارج کنیم: [source,console] ---- @@ -195,14 +194,13 @@ Changes not staged for commit: ---- -The `CONTRIBUTING.md` file is modified but once again unstaged. +فایل `CONTRIBUTING.md` تغییر یافته اما دوباره unstaged شده است. -===== Unmodifying a Modified File with git restore +===== Unmodifying a Modified File with git restore (بازگرداندن تغییرات فایل تغییر یافته با git restore) -What if you realize that you don't want to keep your changes to the `CONTRIBUTING.md` file? -How can you easily unmodify it -- revert it back to what it looked like when you last committed (or initially cloned, or however you got it into your working directory)? -Luckily, `git status` tells you how to do that, too. -In the last example output, the unstaged area looks like this: +اگر متوجه شدید که نمی‌خواهید تغییرات فایل `CONTRIBUTING.md` را نگه دارید، چطور می‌توانید به سادگی آن را به حالتی برگردانید که در آخرین کامیت بود؟ +خوشبختانه، `git status` به شما می‌گوید چطور این کار را انجام دهید. +در خروجی مثال قبلی، بخش unstaged این‌گونه بود: [source,console] ---- @@ -213,8 +211,8 @@ Changes not staged for commit: ---- -It tells you pretty explicitly how to discard the changes you've made. -Let's do what it says: +این به طور واضح به شما می‌گوید چطور تغییرات را دور بریزید. +بیایید همان کاری را که می‌گوید انجام دهیم: [source,console] ---- @@ -229,7 +227,7 @@ Changes to be committed: [IMPORTANT] ===== -It's important to understand that `git restore ` is a dangerous command. -Any local changes you made to that file are gone -- Git just replaced that file with the last staged or committed version. -Don't ever use this command unless you absolutely know that you don't want those unsaved local changes. +مهم است بدانید که دستور `git restore ` یک دستور خطرناک است. +هر تغییر محلی که در آن فایل داده‌اید از بین می‌رود — گیت فقط آن فایل را با آخرین نسخه استیج شده یا کامیت شده جایگزین می‌کند. +هرگز از این دستور استفاده نکنید مگر اینکه کاملا مطمئن باشید نمی‌خواهید آن تغییرات ذخیره نشده محلی را نگه دارید. ===== From cb9969d3bc43ff7c1723132681316de713eed135 Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 29 Jul 2025 14:03:04 +0330 Subject: [PATCH 459/549] translate(02-git-basics): translated viewing-history to persian --- .../sections/viewing-history.asc | 111 +++++++++--------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 440c7f25..4f6fe330 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -1,18 +1,18 @@ [[_viewing_history]] -=== Viewing the Commit History +=== Viewing the Commit History (مشاهده تاریخچه کامیت‌ها) -After you have created several commits, or if you have cloned a repository with an existing commit history, you'll probably want to look back to see what has happened. -The most basic and powerful tool to do this is the `git log` command. +بعد از این که چندین کامیت ایجاد کردید یا اگر یک مخزن با تاریخچه کامیت‌های موجود را کلون کردید، احتمالاً می‌خواهید به عقب برگردید و ببینید چه اتفاقی افتاده است. +ابزار اصلی و قدرتمند برای انجام این کار دستور `git log` است. -These examples use a very simple project called "`simplegit`". -To get the project, run: +در این مثال‌ها از یک پروژه بسیار ساده به نام `simplegit` استفاده شده است. +برای دریافت این پروژه، دستور زیر را اجرا کنید: [source,console] ---- $ git clone https://github.com/schacon/simplegit-progit ---- -When you run `git log` in this project, you should get output that looks something like this:(((git commands, log))) +وقتی در این پروژه دستور `git log` را اجرا می‌کنید، باید خروجی‌ای شبیه به این مشاهده کنید: [source,console] ---- @@ -36,14 +36,14 @@ Date: Sat Mar 15 10:31:28 2008 -0700 Initial commit ---- -By default, with no arguments, `git log` lists the commits made in that repository in reverse chronological order; that is, the most recent commits show up first. -As you can see, this command lists each commit with its SHA-1 checksum, the author's name and email, the date written, and the commit message. +به طور پیش‌فرض و بدون هیچ آرگومانی، `git log` فهرست کامیت‌های انجام شده در آن مخزن را به ترتیب معکوس زمانی نمایش می‌دهد؛ یعنی جدیدترین کامیت‌ها ابتدا نشان داده می‌شوند. +همان‌طور که می‌بینید، این دستور هر کامیت را با چک‌سام SHA-1، نام و ایمیل نویسنده، تاریخ ثبت و پیام کامیت نشان می‌دهد. -A huge number and variety of options to the `git log` command are available to show you exactly what you're looking for. -Here, we'll show you some of the most popular. +گزینه‌های بسیار زیاد و متنوعی برای دستور `git log` وجود دارد که دقیقاً آنچه را که به دنبالش هستید به شما نشان می‌دهد. +در اینجا، برخی از محبوب‌ترین آن‌ها را به شما معرفی می‌کنیم. -One of the more helpful options is `-p` or `--patch`, which shows the difference (the _patch_ output) introduced in each commit. -You can also limit the number of log entries displayed, such as using `-2` to show only the last two entries. +یکی از گزینه‌های بسیار مفید، `-p` یا `--patch` است که تغییرات (خروجی _پچ_) وارد شده در هر کامیت را نمایش می‌دهد. +همچنین می‌توانید تعداد ورودی‌های لاگ نمایش داده شده را محدود کنید، مثلاً با استفاده از `-2` فقط دو ورودی آخر را نشان دهید. [source,console] ---- @@ -89,10 +89,10 @@ index a0a60ae..47c6340 100644 -end ---- -This option displays the same information but with a diff directly following each entry. -This is very helpful for code review or to quickly browse what happened during a series of commits that a collaborator has added. -You can also use a series of summarizing options with `git log`. -For example, if you want to see some abbreviated stats for each commit, you can use the `--stat` option: +این گزینه همان اطلاعات را نمایش می‌دهد اما با یک دیف (تغییرات) مستقیماً پس از هر ورودی. +این برای مرور کد یا بررسی سریع آنچه در یک سری کامیت که همکار شما اضافه کرده، بسیار مفید است. +شما همچنین می‌توانید از مجموعه‌ای از گزینه‌های خلاصه‌سازی با `git log` استفاده کنید. +برای مثال، اگر بخواهید آمار مختصری از هر کامیت ببینید، می‌توانید گزینه `--stat` را به کار ببرید: [source,console] ---- @@ -127,14 +127,14 @@ Date: Sat Mar 15 10:31:28 2008 -0700 3 files changed, 54 insertions(+) ---- -As you can see, the `--stat` option prints below each commit entry a list of modified files, how many files were changed, and how many lines in those files were added and removed. -It also puts a summary of the information at the end. +همان‌طور که می‌بینید، گزینه `--stat` زیر هر ورودی کامیت فهرستی از فایل‌های تغییر یافته، تعداد فایل‌های تغییر کرده و تعداد خطوط اضافه یا حذف شده در آن‌ها را چاپ می‌کند. +همچنین در پایان، خلاصه‌ای از این اطلاعات را ارائه می‌دهد. -Another really useful option is `--pretty`. -This option changes the log output to formats other than the default. -A few prebuilt option values are available for you to use. -The `oneline` value for this option prints each commit on a single line, which is useful if you're looking at a lot of commits. -In addition, the `short`, `full`, and `fuller` values show the output in roughly the same format but with less or more information, respectively: +گزینه مفید دیگر `--pretty` است. +این گزینه خروجی لاگ را به قالب‌های دیگری غیر از پیش‌فرض تغییر می‌دهد. +چند مقدار پیش‌ساخته برای این گزینه موجود است که می‌توانید استفاده کنید. +مقدار `oneline` برای این گزینه هر کامیت را در یک خط نمایش می‌دهد که وقتی تعداد زیادی کامیت دارید، کاربردی است. +علاوه بر این، مقادیر `short`، `full` و `fuller` خروجی را تقریباً در همان قالب اما به ترتیب با اطلاعات کمتر یا بیشتر نشان می‌دهند: [source,console] ---- @@ -144,8 +144,7 @@ ca82a6dff817ec66f44342007202690a93763949 Change version number a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit ---- -The most interesting option value is `format`, which allows you to specify your own log output format. -This is especially useful when you're generating output for machine parsing -- because you specify the format explicitly, you know it won't change with updates to Git:(((log formatting))) +مهم‌ترین گزینه‌ی مقدار `format` است که به شما اجازه می‌دهد قالب خروجی لاگ خود را مشخص کنید. این گزینه به‌ویژه زمانی مفید است که خروجی را برای پردازش ماشینی تولید می‌کنید — زیرا قالب را به‌طور صریح تعیین می‌کنید، می‌دانید که با به‌روزرسانی‌های گیت تغییر نخواهد کرد:(((فرمت‌بندی لاگ))) [source,console] ---- @@ -155,7 +154,7 @@ ca82a6d - Scott Chacon, 6 years ago : Change version number a11bef0 - Scott Chacon, 6 years ago : Initial commit ---- -<> lists some of the more useful specifiers that `format` takes. +<> بخشی از مشخصه‌های مفیدتری را که گزینه `format` می‌پذیرد فهرست کرده است. [[pretty_format]] .Useful specifiers for `git log --pretty=format` @@ -179,13 +178,13 @@ a11bef0 - Scott Chacon, 6 years ago : Initial commit | `%s` | Subject |================================ -You may be wondering what the difference is between _author_ and _committer_. -The author is the person who originally wrote the work, whereas the committer is the person who last applied the work. -So, if you send in a patch to a project and one of the core members applies the patch, both of you get credit -- you as the author, and the core member as the committer. -We'll cover this distinction a bit more in <>. +شاید برایتان سؤال باشد تفاوت بین _نویسنده_ و _ثبت‌کننده_ چیست. +نویسنده کسی است که در اصل کار را نوشته، در حالی که ثبت‌کننده کسی است که آخرین بار تغییرات را اعمال کرده است. +پس اگر شما یک پچ به پروژه ارسال کنید و یکی از اعضای اصلی آن پچ را اعمال کند، هر دو اعتبار می‌گیرید — شما به عنوان نویسنده و آن عضو اصلی به عنوان ثبت‌کننده. +این تمایز را در <> بیشتر توضیح خواهیم داد. -The `oneline` and `format` option values are particularly useful with another `log` option called `--graph`. -This option adds a nice little ASCII graph showing your branch and merge history: +مقادیر `oneline` و `format` به‌ویژه همراه با گزینه دیگری از `log` به نام `--graph` مفید هستند. +این گزینه یک نمودار ASCII زیبا نشان می‌دهد که تاریخچه شاخه و ادغام شما را به تصویر می‌کشد: [source,console] ---- @@ -202,10 +201,10 @@ $ git log --pretty=format:"%h %s" --graph * 11d191e Merge branch 'defunkt' into local ---- -This type of output will become more interesting as we go through branching and merging in the next chapter. +این نوع خروجی در فصل بعدی که به شاخه‌بندی و ادغام می‌پردازیم، جذاب‌تر خواهد شد. -Those are only some simple output-formatting options to `git log` -- there are many more. -<> lists the options we've covered so far, as well as some other common formatting options that may be useful, along with how they change the output of the `log` command. +این‌ها تنها چند گزینه ساده برای قالب‌بندی خروجی `git log` بودند — گزینه‌های بسیار بیشتری وجود دارد. +<> فهرستی از گزینه‌هایی که تا کنون بررسی کرده‌ایم به همراه برخی گزینه‌های رایج دیگر و نحوه تغییر خروجی دستور `log` ارائه می‌دهد. [[log_options]] .Common options to `git log` @@ -224,49 +223,49 @@ Those are only some simple output-formatting options to `git log` -- there are m | `--oneline` | Shorthand for `--pretty=oneline --abbrev-commit` used together. |================================ -==== Limiting Log Output +==== Limiting Log Output (محدود کردن خروجی لاگ) -In addition to output-formatting options, `git log` takes a number of useful limiting options; that is, options that let you show only a subset of commits. -You've seen one such option already -- the `-2` option, which displays only the last two commits. -In fact, you can do `-`, where `n` is any integer to show the last `n` commits. -In reality, you're unlikely to use that often, because Git by default pipes all output through a pager so you see only one page of log output at a time. +علاوه بر گزینه‌های فرمت‌بندی خروجی، دستور `git log` چندین گزینه محدودکننده مفید دارد؛ یعنی گزینه‌هایی که به شما اجازه می‌دهند تنها زیرمجموعه‌ای از کامیت‌ها را نمایش دهید. +شما قبلاً یکی از این گزینه‌ها را دیده‌اید — گزینه `-2` که فقط دو کامیت آخر را نشان می‌دهد. +در واقع، می‌توانید از `-` استفاده کنید، که `n` عدد صحیحی است و آخرین `n` کامیت را نمایش می‌دهد. +اما در عمل، به ندرت از این گزینه زیاد استفاده می‌شود، چون به‌طور پیش‌فرض گیت تمام خروجی را از طریق یک صفحه‌بندی‌کننده (pager) عبور می‌دهد تا فقط یک صفحه از خروجی لاگ را در یک زمان ببینید. -However, the time-limiting options such as `--since` and `--until` are very useful. -For example, this command gets the list of commits made in the last two weeks: +با این حال، گزینه‌های محدودکننده زمانی مانند `--since` و `--until` بسیار کاربردی هستند. +برای مثال، این دستور فهرستی از کامیت‌هایی که در دو هفته گذشته انجام شده‌اند را دریافت می‌کند: [source,console] ---- $ git log --since=2.weeks ---- -This command works with lots of formats -- you can specify a specific date like `"2008-01-15"`, or a relative date such as `"2 years 1 day 3 minutes ago"`. +این دستور با فرمت‌های زیادی کار می‌کند — می‌توانید یک تاریخ خاص مانند `"2008-01-15"` یا یک تاریخ نسبی مانند `"2 years 1 day 3 minutes ago"` مشخص کنید. -You can also filter the list to commits that match some search criteria. -The `--author` option allows you to filter on a specific author, and the `--grep` option lets you search for keywords in the commit messages. +همچنین می‌توانید لیست را به کامیت‌هایی که با برخی معیارهای جستجو مطابقت دارند، فیلتر کنید. +گزینه `--author` به شما امکان می‌دهد روی نویسنده خاصی فیلتر کنید، و گزینه `--grep` اجازه می‌دهد کلمات کلیدی را در پیام‌های کامیت جستجو کنید. [NOTE] ==== -You can specify more than one instance of both the `--author` and `--grep` search criteria, which will limit the commit output to commits that match _any_ of the `--author` patterns and _any_ of the `--grep` patterns; however, adding the `--all-match` option further limits the output to just those commits that match _all_ `--grep` patterns. +می‌توانید بیش از یک نمونه از هر دو معیار جستجو `--author` و `--grep` را مشخص کنید، که خروجی کامیت را به کامیت‌هایی محدود می‌کند که با _هر یک_ از الگوهای `--author` و _هر یک_ از الگوهای `--grep` مطابقت دارند؛ اما افزودن گزینه `--all-match` خروجی را بیشتر محدود می‌کند تا فقط کامیت‌هایی که با _تمام_ الگوهای `--grep` مطابقت دارند نمایش داده شوند. ==== -Another really helpful filter is the `-S` option (colloquially referred to as Git's "`pickaxe`" option), which takes a string and shows only those commits that changed the number of occurrences of that string. -For instance, if you wanted to find the last commit that added or removed a reference to a specific function, you could call: +یکی دیگر از فیلترهای بسیار مفید، گزینه `-S` است (که به طور غیررسمی به آن گزینه "`pickaxe`" گیت گفته می‌شود)، که یک رشته می‌گیرد و فقط آن کامیت‌هایی را نشان می‌دهد که تعداد وقوع آن رشته را تغییر داده‌اند. +برای مثال، اگر بخواهید آخرین کامیتی که اشاره‌ای به یک تابع خاص را اضافه یا حذف کرده است پیدا کنید، می‌توانید این دستور را اجرا کنید: [source,console] ---- $ git log -S function_name ---- -The last really useful option to pass to `git log` as a filter is a path. -If you specify a directory or file name, you can limit the log output to commits that introduced a change to those files. -This is always the last option and is generally preceded by double dashes (`--`) to separate the paths from the options: +آخرین گزینه واقعاً مفید برای عبور به `git log` به عنوان فیلتر، مسیر است. +اگر یک دایرکتوری یا نام فایل را مشخص کنید، می‌توانید خروجی لاگ را به کامیت‌هایی محدود کنید که تغییری در آن فایل‌ها ایجاد کرده‌اند. +این همیشه آخرین گزینه است و معمولاً با دو خط تیره (`--`) پیش از آن می‌آید تا مسیرها را از گزینه‌ها جدا کند: [source,console] ---- $ git log -- path/to/file ---- -In <> we'll list these and a few other common options for your reference. +در بخش <> این گزینه‌ها و چند گزینه رایج دیگر برای مرجع شما فهرست شده‌اند. [[limit_options]] .Options to limit the output of `git log` @@ -282,7 +281,7 @@ In <> we'll list these and a few other common options for your re | `-S` | Only show commits adding or removing code matching the string. |================================ -For example, if you want to see which commits modifying test files in the Git source code history were committed by Junio Hamano in the month of October 2008 and are not merge commits, you can run something like this:(((log filtering))) +برای مثال، اگر بخواهید ببینید کدام کامیت‌ها که فایل‌های تست را در تاریخچه سورس کد گیت تغییر داده‌اند، توسط جونیو هامانو در ماه اکتبر ۲۰۰۸ انجام شده‌اند و کامیت‌های ادغام (merge) نیستند، می‌توانید چیزی شبیه به این را اجرا کنید: (((فیلتر کردن لاگ))) [source,console] ---- @@ -296,11 +295,11 @@ d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch ---- -Of the nearly 40,000 commits in the Git source code history, this command shows the 6 that match those criteria. +از تقریباً ۴۰,۰۰۰ کامیت در تاریخچه کد منبع گیت، این دستور ۶ کامیت مطابق با این معیارها را نشان می‌دهد. [TIP] .Preventing the display of merge commits ==== -Depending on the workflow used in your repository, it's possible that a sizable percentage of the commits in your log history are just merge commits, which typically aren't very informative. -To prevent the display of merge commits cluttering up your log history, simply add the `log` option `--no-merges`. +بسته به روند کاری که در مخزن شما استفاده می‌شود، ممکن است درصد قابل توجهی از کامیت‌های تاریخچه لاگ شما فقط کامیت‌های ادغام (merge commits) باشند که معمولاً اطلاعات زیادی ارائه نمی‌دهند. +برای جلوگیری از نمایش کامیت‌های ادغام که باعث شلوغی تاریخچه لاگ می‌شوند، کافی است گزینه `--no-merges` را به دستور `log` اضافه کنید. ==== From 8f66f02059016da9798cf4f9fae3b6b439e3a09e Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 29 Jul 2025 15:03:35 +0330 Subject: [PATCH 460/549] translate(03-git-branching): translated basic branching and merging to persian --- .../sections/basic-branching-and-merging.asc | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index a894b670..e668e093 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -1,31 +1,31 @@ -=== Basic Branching and Merging +=== Basic Branching and Merging (شاخه‌بندی و ادغام پایه‌ای) -Let's go through a simple example of branching and merging with a workflow that you might use in the real world. -You'll follow these steps: +بیایید یک مثال ساده از شاخه‌بندی و ادغام را با یک گردش کاری که ممکن است در دنیای واقعی استفاده کنید، بررسی کنیم. +شما این مراحل را دنبال خواهید کرد: -. Do some work on a website. -. Create a branch for a new user story you're working on. -. Do some work in that branch. +. روی یک وب‌سایت کار کنید +. شاخه‌ای برای داستان کاربری جدیدی که روی آن کار می‌کنید ایجاد کنید +. در آن شاخه کمی کار انجام دهید -At this stage, you'll receive a call that another issue is critical and you need a hotfix. -You'll do the following: +در این مرحله، یک تماس دریافت می‌کنید که یک مشکل دیگر بحرانی است و باید یک اصلاح فوری (hotfix) انجام دهید. +شما کارهای زیر را انجام خواهید داد: -. Switch to your production branch. -. Create a branch to add the hotfix. -. After it's tested, merge the hotfix branch, and push to production. -. Switch back to your original user story and continue working. +. به شاخه‌ی تولید (production) خود بروید +. شاخه‌ای برای اضافه کردن اصلاح فوری ایجاد کنید +. پس از تست، شاخه‌ی اصلاح فوری را ادغام کرده و به تولید ارسال کنید +.به شاخه‌ی داستان کاربری اصلی خود بازگشته و به کار ادامه دهید [[_basic_branching]] -==== Basic Branching +==== Basic Branching (شاخه‌بندی پایه‌ای) (((branches, basic workflow))) -First, let's say you're working on your project and have a couple of commits already on the `master` branch. +فرض کنیم که روی پروژه خود کار می‌کنید و چند کامیت روی شاخه‌ی `master` انجام داده‌اید. .A simple commit history image::images/basic-branching-1.png[A simple commit history] -You've decided that you're going to work on issue #53 in whatever issue-tracking system your company uses. -To create a new branch and switch to it at the same time, you can run the `git checkout` command with the `-b` switch: +تصمیم گرفته‌اید روی مسئله‌ی شماره #53 در هر سیستم پیگیری اشکالی که شرکت شما استفاده می‌کند، کار کنید. +برای ایجاد شاخه جدید و همزمان جابجایی به آن، می‌توانید دستور `git checkout` را با گزینه‌ی `-b` اجرا کنید: [source,console] ---- @@ -33,7 +33,7 @@ $ git checkout -b iss53 Switched to a new branch "iss53" ---- -This is shorthand for: +این خلاصه‌ی دستور زیر است: [source,console] ---- @@ -44,8 +44,8 @@ $ git checkout iss53 .Creating a new branch pointer image::images/basic-branching-2.png[Creating a new branch pointer] -You work on your website and do some commits. -Doing so moves the `iss53` branch forward, because you have it checked out (that is, your `HEAD` is pointing to it): +شما روی وب‌سایت خود کار می‌کنید و چند کامیت انجام می‌دهید. +با این کار شاخه‌ی `iss53` به جلو حرکت می‌کند، چون آن شاخه را چک‌اوت کرده‌اید (یعنی `HEAD` شما به آن اشاره دارد): [source,console] ---- @@ -56,14 +56,14 @@ $ git commit -a -m 'Create new footer [issue 53]' .The `iss53` branch has moved forward with your work image::images/basic-branching-3.png[The `iss53` branch has moved forward with your work] -Now you get the call that there is an issue with the website, and you need to fix it immediately. -With Git, you don't have to deploy your fix along with the `iss53` changes you've made, and you don't have to put a lot of effort into reverting those changes before you can work on applying your fix to what is in production. -All you have to do is switch back to your `master` branch. +حالا تماس می‌گیرید که مشکلی در وب‌سایت وجود دارد و باید فوراً آن را اصلاح کنید. +با Git، لازم نیست اصلاح خود را همراه با تغییرات `iss53` که انجام داده‌اید منتشر کنید و مجبور نیستید برای بازگرداندن آن تغییرات تلاش زیادی بکنید تا بتوانید اصلاح خود را روی نسخه‌ی تولید اعمال کنید. +تنها کاری که باید انجام دهید این است که به شاخه‌ی `master` برگردید. -However, before you do that, note that if your working directory or staging area has uncommitted changes that conflict with the branch you're checking out, Git won't let you switch branches. -It's best to have a clean working state when you switch branches. -There are ways to get around this (namely, stashing and commit amending) that we'll cover later on, in <>. -For now, let's assume you've committed all your changes, so you can switch back to your `master` branch: +با این حال، قبل از این کار توجه کنید که اگر دایرکتوری کاری یا ناحیه‌ی staging شما تغییرات ذخیره‌نشده‌ای دارد که با شاخه‌ی مقصد تعارض دارد، Git اجازه نمی‌دهد شاخه را عوض کنید. +بهتر است هنگام تعویض شاخه‌ها، وضعیت کاری شما تمیز باشد. +راه‌هایی برای رفع این مشکل وجود دارد (مانند stash کردن و اصلاح کامیت‌ها) که بعداً در <> بررسی خواهیم کرد. +فعلاً فرض کنیم همه تغییرات خود را کامیت کرده‌اید، پس می‌توانید به شاخه‌ی `master` برگردید: [source,console] ---- @@ -71,12 +71,12 @@ $ git checkout master Switched to branch 'master' ---- -At this point, your project working directory is exactly the way it was before you started working on issue #53, and you can concentrate on your hotfix. -This is an important point to remember: when you switch branches, Git resets your working directory to look like it did the last time you committed on that branch. -It adds, removes, and modifies files automatically to make sure your working copy is what the branch looked like on your last commit to it. +در این مرحله، دایرکتوری کاری پروژه دقیقاً همان‌طور است که قبل از شروع کار روی مسئله‌ی شماره ۵۳ بود و می‌توانید روی اصلاح فوری تمرکز کنید. +این نکته مهمی است که به یاد داشته باشید: وقتی شاخه را عوض می‌کنید، Git دایرکتوری کاری شما را به حالت آخرین کامیتی که روی آن شاخه انجام شده بازنشانی می‌کند. +Git به طور خودکار فایل‌ها را اضافه، حذف یا تغییر می‌دهد تا نسخه کاری شما همان چیزی باشد که شاخه در آخرین کامیت خود داشت. -Next, you have a hotfix to make. -Let's create a `hotfix` branch on which to work until it's completed: +حالا باید اصلاح فوری انجام دهید. +بیایید یک شاخه‌ی `hotfix` ایجاد کنیم تا روی آن کار کنیم تا وقتی کامل شد: [source,console] ---- @@ -91,8 +91,8 @@ $ git commit -a -m 'Fix broken email address' .Hotfix branch based on `master` image::images/basic-branching-4.png[Hotfix branch based on `master`] -You can run your tests, make sure the hotfix is what you want, and finally merge the `hotfix` branch back into your `master` branch to deploy to production. -You do this with the `git merge` command:(((git commands, merge))) +می‌توانید تست‌های خود را اجرا کنید، مطمئن شوید اصلاح به درستی انجام شده، و در نهایت شاخه‌ی `hotfix` را به شاخه‌ی `master` ادغام کنید تا در تولید منتشر شود. +این کار را با دستور `git merge` انجام می‌دهید:(((git commands, merge))) [source,console] ---- @@ -104,18 +104,18 @@ Fast-forward 1 file changed, 2 insertions(+) ---- -You'll notice the phrase "`fast-forward`" in that merge. -Because the commit `C4` pointed to by the branch `hotfix` you merged in was directly ahead of the commit `C2` you're on, Git simply moves the pointer forward. -To phrase that another way, when you try to merge one commit with a commit that can be reached by following the first commit's history, Git simplifies things by moving the pointer forward because there is no divergent work to merge together -- this is called a "`fast-forward.`" +در آن ادغام، عبارت "`fast-forward`" را مشاهده خواهید کرد. +چون کامیت `C4` که شاخه‌ی `hotfix` به آن اشاره دارد مستقیماً جلوتر از کامیت `C2` است که شما روی آن هستید، Git فقط اشاره‌گر را به جلو می‌برد. +به عبارت دیگر، وقتی می‌خواهید یک کامیت را با کامیتی ادغام کنید که از طریق تاریخچه‌ی کامیت اول قابل دسترسی است، Git کار را ساده می‌کند و اشاره‌گر را به جلو می‌برد چون کاری متناقض برای ادغام وجود ندارد — این حالت را "`fast-forward`" می‌نامند. -Your change is now in the snapshot of the commit pointed to by the `master` branch, and you can deploy the fix. +تغییرات شما اکنون در تصویر لحظه‌ای کامیتی است که شاخه‌ی `master` به آن اشاره دارد و می‌توانید اصلاح را منتشر کنید. .`master` is fast-forwarded to `hotfix` image::images/basic-branching-5.png[`master` is fast-forwarded to `hotfix`] -After your super-important fix is deployed, you're ready to switch back to the work you were doing before you were interrupted. -However, first you'll delete the `hotfix` branch, because you no longer need it -- the `master` branch points at the same place. -You can delete it with the `-d` option to `git branch`: +پس از اینکه اصلاح بسیار مهم شما منتشر شد، آماده‌اید به کاری که پیش از وقفه انجام می‌دادید بازگردید. +اما ابتدا شاخه‌ی `hotfix` را حذف خواهید کرد، چون دیگر به آن نیاز ندارید — شاخه‌ی `master` به همان نقطه اشاره می‌کند. +می‌توانید با گزینه‌ی `-d` به دستور `git branch` این کار را انجام دهید: [source,console] ---- @@ -123,7 +123,7 @@ $ git branch -d hotfix Deleted branch hotfix (3a0874c). ---- -Now you can switch back to your work-in-progress branch on issue #53 and continue working on it. +حالا می‌توانید به شاخه‌ی در حال پیشرفت خود روی مسئله‌ی شماره #53 بازگردید و به کار ادامه دهید. [source,console] ---- @@ -138,16 +138,16 @@ $ git commit -a -m 'Finish the new footer [issue 53]' .Work continues on `iss53` image::images/basic-branching-6.png[Work continues on `iss53`] -It's worth noting here that the work you did in your `hotfix` branch is not contained in the files in your `iss53` branch. -If you need to pull it in, you can merge your `master` branch into your `iss53` branch by running `git merge master`, or you can wait to integrate those changes until you decide to pull the `iss53` branch back into `master` later. +اینجا لازم است اشاره کنیم که کاری که در شاخه‌ی `hotfix` انجام داده‌اید در فایل‌های شاخه‌ی `iss53` وجود ندارد. +اگر نیاز دارید آن را وارد کنید، می‌توانید شاخه‌ی `master` را به `iss53` ادغام کنید با اجرای دستور `git merge master`، یا می‌توانید صبر کنید تا این تغییرات را زمانی که تصمیم گرفتید شاخه‌ی `iss53` را به `master` برگردانید، ادغام کنید. [[_basic_merging]] -==== Basic Merging +==== Basic Merging (ادغام پایه‌ای) (((branches, merging)))(((merging))) -Suppose you've decided that your issue #53 work is complete and ready to be merged into your `master` branch. -In order to do that, you'll merge your `iss53` branch into `master`, much like you merged your `hotfix` branch earlier. -All you have to do is check out the branch you wish to merge into and then run the `git merge` command: +فرض کنید تصمیم گرفته‌اید کار روی مسئله‌ی شماره ۵۳ کامل شده و آماده‌ی ادغام به شاخه‌ی `master` است. +برای انجام این کار، شاخه‌ی `iss53` را به `master` ادغام می‌کنید، مثل کاری که قبلاً با شاخه‌ی `hotfix` انجام دادید. +کافی است ابتدا شاخه‌ای که می‌خواهید ادغام را در آن انجام دهید چک‌اوت کنید و سپس دستور `git merge` را اجرا کنید: [source,console] ---- @@ -159,22 +159,22 @@ index.html | 1 + 1 file changed, 1 insertion(+) ---- -This looks a bit different than the `hotfix` merge you did earlier. -In this case, your development history has diverged from some older point. -Because the commit on the branch you're on isn't a direct ancestor of the branch you're merging in, Git has to do some work. -In this case, Git does a simple three-way merge, using the two snapshots pointed to by the branch tips and the common ancestor of the two. +این کمی متفاوت از ادغام `hotfix` است که قبلاً انجام دادید. +در این حالت، تاریخچه‌ی توسعه شما از نقطه‌ای قدیمی‌تر منشعب شده است. +چون کامیتی که روی شاخه‌ی فعلی هستید، جد مستقیم شاخه‌ای که می‌خواهید ادغام کنید نیست، Git باید کار بیشتری انجام دهد. +در این حالت، Git ادغام سه‌طرفه ساده‌ای انجام می‌دهد که از دو تصویر لحظه‌ای شاخه‌ها و جد مشترک آن‌ها استفاده می‌کند. .Three snapshots used in a typical merge image::images/basic-merging-1.png[Three snapshots used in a typical merge] -Instead of just moving the branch pointer forward, Git creates a new snapshot that results from this three-way merge and automatically creates a new commit that points to it. -This is referred to as a merge commit, and is special in that it has more than one parent. +به جای اینکه فقط اشاره‌گر شاخه را به جلو ببرد، Git یک تصویر لحظه‌ای جدید که نتیجه‌ی این ادغام سه‌طرفه است ایجاد می‌کند و به طور خودکار یک کامیت جدید می‌سازد که به آن اشاره دارد. +این کامیت را "کامیت ادغام" می‌نامند و خاص است چون بیش از یک والد دارد. .A merge commit image::images/basic-merging-2.png[A merge commit] -Now that your work is merged in, you have no further need for the `iss53` branch. -You can close the issue in your issue-tracking system, and delete the branch: +حالا که کار شما ادغام شده، دیگر نیازی به شاخه‌ی `iss53` ندارید. +می‌توانید مسئله را در سیستم پیگیری اشکال ببندید و شاخه را حذف کنید: [source,console] ---- @@ -182,12 +182,12 @@ $ git branch -d iss53 ---- [[_basic_merge_conflicts]] -==== Basic Merge Conflicts +==== Basic Merge Conflicts (مرج کانفیلیکت پایه) (((merging, conflicts))) -Occasionally, this process doesn't go smoothly. -If you changed the same part of the same file differently in the two branches you're merging, Git won't be able to merge them cleanly. -If your fix for issue #53 modified the same part of a file as the `hotfix` branch, you'll get a merge conflict that looks something like this: +گاهی اوقات این روند به‌صورت روان پیش نمی‌رود. +اگر شما بخش یکسانی از یک فایل را به شکل متفاوتی در دو شاخه‌ای که می‌خواهید ادغام کنید تغییر داده باشید، گیت نمی‌تواند آنها را به‌صورت تمیز ادغام کند. +اگر اصلاح شما برای مسئله شماره ۵۳ همان بخش از فایل را که شاخه `hotfix` تغییر داده بود، دستکاری کرده باشد، با تعارض ادغام مواجه می‌شوید که چیزی شبیه به این خواهد بود: [source,console] ---- @@ -197,9 +197,9 @@ CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. ---- -Git hasn't automatically created a new merge commit. -It has paused the process while you resolve the conflict. -If you want to see which files are unmerged at any point after a merge conflict, you can run `git status`: +گیت به‌صورت خودکار یک کامیت ادغام جدید ایجاد نکرده است. +فرآیند را متوقف کرده تا شما تعارض را حل کنید. +اگر بخواهید در هر لحظه پس از بروز تعارض ادغام بفهمید کدام فایل‌ها هنوز ادغام نشده‌اند، می‌توانید دستور `git status` را اجرا کنید: [source,console] ---- @@ -216,9 +216,9 @@ Unmerged paths: no changes added to commit (use "git add" and/or "git commit -a") ---- -Anything that has merge conflicts and hasn't been resolved is listed as unmerged. -Git adds standard conflict-resolution markers to the files that have conflicts, so you can open them manually and resolve those conflicts. -Your file contains a section that looks something like this: +هر چیزی که تعارض ادغام دارد و هنوز حل نشده باشد، به‌عنوان «ادغام‌نشده» فهرست می‌شود. +گیت نشانگرهای استاندارد حل تعارض را به فایل‌هایی که تعارض دارند اضافه می‌کند تا بتوانید آنها را به‌صورت دستی باز کرده و تعارض‌ها را رفع کنید. +فایل شما بخشی دارد که چیزی شبیه به این است: [source,html] ---- @@ -231,9 +231,9 @@ Your file contains a section that looks something like this: >>>>>>> iss53:index.html ---- -This means the version in `HEAD` (your `master` branch, because that was what you had checked out when you ran your merge command) is the top part of that block (everything above the `=======`), while the version in your `iss53` branch looks like everything in the bottom part. -In order to resolve the conflict, you have to either choose one side or the other or merge the contents yourself. -For instance, you might resolve this conflict by replacing the entire block with this: +این یعنی نسخه در `HEAD` (شاخه‌ی `master` شما، چون وقتی دستور ادغام را اجرا کردید آن شاخه فعال بوده است) در بخش بالایی این بلاک قرار دارد (همه چیز بالای خط `=======`)، در حالی که نسخه شاخه‌ی `iss53` شما همه چیز زیر این خط است. +برای حل تعارض، باید یا یکی از دو طرف را انتخاب کنید یا خودتان محتوای هر دو را با هم ادغام نمایید. +مثلاً ممکن است این تعارض را با جایگزینی کل بلاک با این محتوا حل کنید: [source,html] ---- @@ -242,11 +242,11 @@ please contact us at email.support@github.com ---- -This resolution has a little of each section, and the `<<<<<<<`, `=======`, and `>>>>>>>` lines have been completely removed. -After you've resolved each of these sections in each conflicted file, run `git add` on each file to mark it as resolved. -Staging the file marks it as resolved in Git. +این راه‌حل ترکیبی از هر دو بخش است و خطوط `<<<<<<<`، `=======` و `>>>>>>>` کاملاً حذف شده‌اند. +بعد از اینکه هر یک از این بخش‌ها را در هر فایل دارای تعارض حل کردید، با دستور `git add` هر فایل را علامت‌گذاری کنید تا به گیت نشان دهید حل شده است. +اضافه کردن فایل به منطقه staging یعنی حل شدن آن در گیت ثبت شده است. -If you want to use a graphical tool to resolve these issues, you can run `git mergetool`, which fires up an appropriate visual merge tool and walks you through the conflicts:(((git commands, mergetool))) +اگر می‌خواهید از ابزاری گرافیکی برای حل این تعارضات استفاده کنید، می‌توانید دستور `git mergetool` را اجرا کنید که ابزار ادغام تصویری مناسب را باز می‌کند و شما را در حل تعارض‌ها راهنمایی می‌کند. [source,console] ---- @@ -265,17 +265,17 @@ Normal merge conflict for 'index.html': Hit return to start merge resolution tool (opendiff): ---- -If you want to use a merge tool other than the default (Git chose `opendiff` in this case because the command was run on macOS), you can see all the supported tools listed at the top after "`one of the following tools.`" -Just type the name of the tool you'd rather use. +اگر می‌خواهید از ابزار ادغام غیر از پیش‌فرض استفاده کنید (گیت در این مورد چون روی macOS اجرا شده، `opendiff` را انتخاب کرده است)، می‌توانید همه ابزارهای پشتیبانی‌شده را در ابتدای لیست «یکی از ابزارهای زیر» ببینید. +فقط کافی است نام ابزار مورد نظر خود را تایپ کنید. [NOTE] ==== -If you need more advanced tools for resolving tricky merge conflicts, we cover more on merging in <>. +اگر نیاز به ابزارهای پیشرفته‌تر برای حل تعارضات پیچیده دارید، در بخش <> بیشتر درباره ادغام پیشرفته توضیح داده شده است. ==== -After you exit the merge tool, Git asks you if the merge was successful. -If you tell the script that it was, it stages the file to mark it as resolved for you. -You can run `git status` again to verify that all conflicts have been resolved: +بعد از خروج از ابزار ادغام، گیت از شما می‌پرسد که آیا ادغام موفقیت‌آمیز بوده است یا نه. +اگر بگویید بله، فایل به‌صورت خودکار به مرحله staging منتقل شده و به عنوان حل‌شده ثبت می‌شود. +می‌توانید دوباره دستور `git status` را اجرا کنید تا مطمئن شوید همه تعارض‌ها حل شده‌اند: [source,console] ---- @@ -289,8 +289,8 @@ Changes to be committed: modified: index.html ---- -If you're happy with that, and you verify that everything that had conflicts has been staged, you can type `git commit` to finalize the merge commit. -The commit message by default looks something like this: +اگر از نتیجه راضی بودید و اطمینان پیدا کردید که تمام فایل‌هایی که تعارض داشتند به مرحله staging رفته‌اند، می‌توانید با دستور `git commit` کامیت ادغام را نهایی کنید. +پیام کامیت به‌صورت پیش‌فرض چیزی شبیه به این است: [source,console] ---- @@ -315,4 +315,4 @@ Conflicts: # ---- -If you think it would be helpful to others looking at this merge in the future, you can modify this commit message with details about how you resolved the merge and explain why you did the changes you made if these are not obvious. +اگر فکر می‌کنید برای دیگران که در آینده این ادغام را بررسی می‌کنند مفید است، می‌توانید پیام کامیت را با جزییاتی درباره نحوه حل تعارض و توضیح دلیل تغییراتی که انجام داده‌اید و اگر این دلایل واضح نیستند، اصلاح کنید. \ No newline at end of file From c341711f6343a2c676499e00e41f114d135d5254 Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 29 Jul 2025 15:14:53 +0330 Subject: [PATCH 461/549] translate(03-git-branching): translated branch management to persian --- .../sections/branch-management.asc | 103 +++++++++--------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index ae81e89a..30a747e4 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -1,11 +1,11 @@ [[_branch_management]] -=== Branch Management +=== Branch Management (مدیریت شاخه‌ها) (((branches, managing))) -Now that you've created, merged, and deleted some branches, let's look at some branch-management tools that will come in handy when you begin using branches all the time. +حال که شاخه‌هایی را ایجاد، ادغام و حذف کرده‌اید، بیایید نگاهی به ابزارهای مدیریت شاخه بیندازیم که هنگام استفاده مداوم از شاخه‌ها به کارتان خواهند آمد. -The `git branch` command does more than just create and delete branches.(((git commands, branch))) -If you run it with no arguments, you get a simple listing of your current branches: +دستور `git branch` فقط برای ایجاد و حذف شاخه‌ها نیست. (((git commands, branch))) +اگر آن را بدون آرگومان اجرا کنید، فهرستی ساده از شاخه‌های فعلی‌تان را خواهید دید: [source,console] ---- @@ -15,9 +15,9 @@ $ git branch testing ---- -Notice the `*` character that prefixes the `master` branch: it indicates the branch that you currently have checked out (i.e., the branch that `HEAD` points to). -This means that if you commit at this point, the `master` branch will be moved forward with your new work. -To see the last commit on each branch, you can run `git branch -v`: +توجه کنید به علامت `*` که جلوی شاخه `master` قرار دارد؛ این علامت شاخه‌ای را نشان می‌دهد که در حال حاضر روی آن قرار دارید (یعنی شاخه‌ای که `HEAD` به آن اشاره می‌کند). +این یعنی اگر در این لحظه کامیت کنید، شاخه `master` با کار جدید شما به جلو حرکت خواهد کرد. +برای دیدن آخرین کامیت هر شاخه، می‌توانید دستور `git branch -v` را اجرا کنید: [source,console] ---- @@ -27,8 +27,8 @@ $ git branch -v testing 782fd34 Add scott to the author list in the readme ---- -The useful `--merged` and `--no-merged` options can filter this list to branches that you have or have not yet merged into the branch you're currently on. -To see which branches are already merged into the branch you're on, you can run `git branch --merged`: +گزینه‌های مفید `--merged` و `--no-merged` می‌توانند این فهرست را فیلتر کنند تا فقط شاخه‌هایی را نشان دهند که شما آن‌ها را به شاخه فعلی ادغام کرده‌اید یا هنوز نکرده‌اید. +برای دیدن شاخه‌هایی که قبلاً به شاخه فعلی ادغام شده‌اند، می‌توانید دستور زیر را اجرا کنید: [source,console] ---- @@ -37,10 +37,10 @@ $ git branch --merged * master ---- -Because you already merged in `iss53` earlier, you see it in your list. -Branches on this list without the `*` in front of them are generally fine to delete with `git branch -d`; you've already incorporated their work into another branch, so you're not going to lose anything. +از آنجا که قبلاً شاخه `iss53` را ادغام کرده‌اید، آن را در این فهرست خواهید دید. +شاخه‌هایی که در این فهرست علامت `*` جلوی آن‌ها نیست عموماً قابل حذف با دستور `git branch -d` هستند؛ چون کار آن‌ها قبلاً در شاخه دیگری ادغام شده است و چیزی از دست نمی‌دهید. -To see all the branches that contain work you haven't yet merged in, you can run `git branch --no-merged`: +برای دیدن همه شاخه‌هایی که کارهایشان هنوز ادغام نشده، می‌توانید دستور زیر را اجرا کنید: [source,console] ---- @@ -48,8 +48,8 @@ $ git branch --no-merged testing ---- -This shows your other branch. -Because it contains work that isn't merged in yet, trying to delete it with `git branch -d` will fail: +این شاخه دیگر شما را نشان می‌دهد. +چون شامل کارهایی است که هنوز ادغام نشده، تلاش برای حذف آن با `git branch -d` با شکست مواجه خواهد شد: [source,console] ---- @@ -58,13 +58,14 @@ error: The branch 'testing' is not fully merged. If you are sure you want to delete it, run 'git branch -D testing'. ---- -If you really do want to delete the branch and lose that work, you can force it with `-D`, as the helpful message points out. +اگر واقعاً می‌خواهید شاخه را حذف کنید و آن کارها را از دست بدهید، می‌توانید با گزینه `-D` این کار را اجباراً انجام دهید، همان‌طور که پیام راهنما اشاره می‌کند. [TIP] ==== -The options described above, `--merged` and `--no-merged` will, if not given a commit or branch name as an argument, show you what is, respectively, merged or not merged into your _current_ branch. -You can always provide an additional argument to ask about the merge state with respect to some other branch without checking that other branch out first, as in, what is not merged into the `master` branch? +گزینه‌های ذکر شده، `--merged` و `--no-merged`، اگر آرگومان مشخصی مثل کامیت یا نام شاخه دریافت نکنند، به‌ترتیب شاخه‌هایی که به شاخه _فعلی_ شما ادغام شده یا نشده‌اند را نشان می‌دهند. + +شما همیشه می‌توانید آرگومان اضافی بدهید تا وضعیت ادغام را نسبت به شاخه دیگری بدون اینکه آن شاخه را چک‌اوت کنید، بپرسید؛ مثلاً، چه شاخه‌هایی به شاخه `master` ادغام نشده‌اند؟ [source,console] ---- $ git checkout testing @@ -74,34 +75,34 @@ $ git branch --no-merged master ---- ==== -==== Changing a branch name +==== Changing a branch name (تغییر نام شاخه) [CAUTION] ==== -Do not rename branches that are still in use by other collaborators. -Do not rename a branch like master/main/mainline without having read the section <<_changing_master>>. +شاخه‌هایی که هنوز توسط همکاران دیگر استفاده می‌شوند را بازنام نکنید. +شاخه‌ای مثل master/main/mainline را بدون خواندن بخش <<_changing_master>> بازنام نکنید. ==== -Suppose you have a branch that is called `bad-branch-name` and you want to change it to `corrected-branch-name`, while keeping all history. -You also want to change the branch name on the remote (GitHub, GitLab, other server). -How do you do this? +فرض کنید شاخه‌ای دارید به نام `bad-branch-name` و می‌خواهید آن را به `corrected-branch-name` تغییر دهید، در حالی که تمام تاریخچه حفظ شود. +همچنین می‌خواهید نام شاخه را روی ریموت (GitHub، GitLab، یا سرور دیگر) تغییر دهید. +چگونه این کار را انجام دهید؟ Rename the branch locally with the `git branch --move` command: [source, console] ---- -$ git branch --move bad-branch-name corrected-branch-name +شاخه را به صورت محلی با دستور `git branch --move` بازنام کنید: ---- -This replaces your `bad-branch-name` with `corrected-branch-name`, but this change is only local for now. -To let others see the corrected branch on the remote, push it: +این کار `bad-branch-name` شما را با `corrected-branch-name` جایگزین می‌کند، اما این تغییر فعلاً فقط محلی است. +برای اینکه دیگران شاخه‌ی اصلاح‌شده را روی ریموت ببینند، آن را پوش کنید: [source,console] ---- $ git push --set-upstream origin corrected-branch-name ---- -Now we'll take a brief look at where we are now: +حالا کمی وضعیت فعلی را بررسی می‌کنیم: [source, console] ---- @@ -113,44 +114,44 @@ $ git branch --all remotes/origin/main ---- -Notice that you're on the branch `corrected-branch-name` and it's available on the remote. -However, the branch with the bad name is also still present there but you can delete it by executing the following command: +توجه کنید که شما روی شاخه `corrected-branch-name` هستید و این شاخه روی ریموت موجود است. +با این حال، شاخه با نام اشتباه هنوز هم آنجا هست اما می‌توانید آن را با اجرای دستور زیر حذف کنید: [source,console] ---- $ git push origin --delete bad-branch-name ---- -Now the bad branch name is fully replaced with the corrected branch name. +حالا نام شاخه اشتباه کاملاً با نام اصلاح‌شده جایگزین شده است. [[_changing_master]] -===== Changing the master branch name +===== Changing the master branch name (تغییر نام شاخه اصلی) [WARNING] ==== -Changing the name of a branch like master/main/mainline/default will break the integrations, services, helper utilities and build/release scripts that your repository uses. -Before you do this, make sure you consult with your collaborators. -Also, make sure you do a thorough search through your repo and update any references to the old branch name in your code and scripts. +تغییر نام شاخه‌ای مثل master/main/mainline/default باعث شکستن یکپارچه‌سازی‌ها، سرویس‌ها، ابزارهای کمکی و اسکریپت‌های ساخت/انتشار می‌شود که مخزن شما استفاده می‌کند. +قبل از این کار، حتماً با همکارانتان مشورت کنید. +همچنین، مطمئن شوید که جستجوی کاملی در مخزن خود انجام داده و همه ارجاعات به نام شاخه قدیمی را در کد و اسکریپت‌ها به‌روزرسانی کرده‌اید. ==== -Rename your local `master` branch into `main` with the following command: +شاخه محلی `master` را به `main` با دستور زیر تغییر نام دهید: [source,console] ---- $ git branch --move master main ---- -There's no local `master` branch anymore, because it's renamed to the `main` branch. +حالا شاخه محلی `master` وجود ندارد چون به شاخه `main` تغییر نام یافته است. -To let others see the new `main` branch, you need to push it to the remote. -This makes the renamed branch available on the remote. +برای اینکه دیگران شاخه جدید `main` را ببینند، باید آن را به ریموت پوش کنید. +این کار شاخه بازنام‌شده را روی ریموت در دسترس قرار می‌دهد. [source,console] ---- $ git push --set-upstream origin main ---- -Now we end up with the following state: +حالا وضعیت زیر را داریم: [source,console] ---- @@ -161,21 +162,21 @@ $ git branch --all remotes/origin/master ---- -Your local `master` branch is gone, as it's replaced with the `main` branch. -The `main` branch is present on the remote. -However, the old `master` branch is still present on the remote. -Other collaborators will continue to use the `master` branch as the base of their work, until you make some further changes. +شاخه محلی `master` حذف شده و با شاخه `main` جایگزین شده است. +شاخه `main` روی ریموت موجود است. +با این حال، شاخه قدیمی `master` هنوز روی ریموت هست. +همکاران دیگر تا زمانی که تغییرات بیشتری انجام ندهید، همچنان از شاخه `master` به عنوان پایه کارشان استفاده خواهند کرد. -Now you have a few more tasks in front of you to complete the transition: +حالا چند وظیفه دیگر برای تکمیل انتقال دارید: -* Any projects that depend on this one will need to update their code and/or configuration. -* Update any test-runner configuration files. -* Adjust build and release scripts. -* Redirect settings on your repo host for things like the repo's default branch, merge rules, and other things that match branch names. -* Update references to the old branch in documentation. -* Close or merge any pull requests that target the old branch. +* هر پروژه‌ای که به این مخزن وابسته است، باید کد و/یا پیکربندی خود را به‌روزرسانی کند. +* فایل‌های پیکربندی تست رانرها را به‌روزرسانی کنید. +* اسکریپت‌های ساخت و انتشار را تنظیم کنید. +* تنظیمات میزبان مخزن خود را برای مواردی مانند شاخه پیش‌فرض مخزن، قوانین ادغام و دیگر موارد مربوط به نام شاخه‌ها به‌روزرسانی کنید. +* ارجاعات به شاخه قدیمی در مستندات را اصلاح کنید. +* درخواست‌های کشش (pull requests) که هدفشان شاخه قدیمی است را ببندید یا ادغام کنید. -After you've done all these tasks, and are certain the `main` branch performs just as the `master` branch, you can delete the `master` branch: +بعد از انجام تمام این کارها و وقتی مطمئن شدید شاخه `main` مانند شاخه `master` عمل می‌کند، می‌توانید شاخه `master` را حذف کنید: [source, console] ---- From 695da3e61b5faae40672b76f2133296f399d985d Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 29 Jul 2025 15:46:53 +0330 Subject: [PATCH 462/549] translate(03-git-branching): translated nutshell to persian --- .idea/workspace.xml | 17 ++- book/03-git-branching/sections/nutshell.asc | 115 +++++++------------- 2 files changed, 54 insertions(+), 78 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dbbbdd48..50366fda 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,9 @@ - + + + @@ -51,12 +53,16 @@ diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 2bffd5dd..17c60b02 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -1,15 +1,13 @@ [[_git_branches_overview]] -=== Branches in a Nutshell +=== Branches in a Nutshell (شاخه‌ها به طور خلاصه) -To really understand the way Git does branching, we need to take a step back and examine how Git stores its data. +برای درک واقعی نحوه‌ی شاخه‌بندی در گیت، باید یک قدم به عقب برداریم و بررسی کنیم گیت داده‌های خود را چگونه ذخیره می‌کند. -As you may remember from <>, Git doesn't store data as a series of changesets or differences, but instead as a series of _snapshots_. +همانطور که ممکن است از <> به یاد داشته باشید، گیت داده‌ها را به صورت یک سری تغییرات یا تفاوت‌ها ذخیره نمی‌کند، بلکه به صورت یک سری تصویر لحظه‌ای ذخیره می‌کند. -When you make a commit, Git stores a commit object that contains a pointer to the snapshot of the content you staged. -This object also contains the author's name and email address, the message that you typed, and pointers to the commit or commits that directly came before this commit (its parent or parents): zero parents for the initial commit, one parent for a normal commit, and multiple parents for a commit that results from a merge of two or more branches. +وقتی شما یک کامیت می‌زنید، گیت یک شیء کامیت ذخیره می‌کند که شامل اشاره‌گری به تصویر لحظه‌ای محتوایی است که آماده کرده‌اید. این شیء همچنین شامل نام و ایمیل نویسنده، پیامی که تایپ کرده‌اید، و اشاره‌گرهایی به کامیت یا کامیت‌هایی است که مستقیماً قبل از این کامیت آمده‌اند (والد یا والدین آن): صفر والد برای کامیت اولیه، یک والد برای کامیت معمولی، و چند والد برای کامیتی که نتیجه ادغام دو یا چند شاخه است. -To visualize this, let's assume that you have a directory containing three files, and you stage them all and commit. -Staging the files computes a checksum for each one (the SHA-1 hash we mentioned in <>), stores that version of the file in the Git repository (Git refers to them as _blobs_), and adds that checksum to the staging area: +برای تجسم این موضوع، فرض کنید دایرکتوری‌ای دارید که شامل سه فایل است و همه را آماده کرده و کامیت می‌کنید. آماده کردن فایل‌ها یک مقدار چکسام برای هر فایل محاسبه می‌کند (هش SHA-1 که در <> ذکر شد)، آن نسخه از فایل را در مخزن گیت ذخیره می‌کند (گیت به آنها blob می‌گوید) و آن چکسام را به منطقه آماده‌سازی اضافه می‌کند: [source,console] ---- @@ -17,65 +15,50 @@ $ git add README test.rb LICENSE $ git commit -m 'Initial commit' ---- -When you create the commit by running `git commit`, Git checksums each subdirectory (in this case, just the root project directory) and stores them as a tree object in the Git repository. -Git then creates a commit object that has the metadata and a pointer to the root project tree so it can re-create that snapshot when needed.(((git commands, commit))) +وقتی با اجرای دستور `git commit` کامیت را ایجاد می‌کنید، گیت چکسام هر زیرشاخه (در این مورد فقط دایرکتوری اصلی پروژه) را محاسبه کرده و آنها را به شکل یک شیء درختی (tree) در مخزن گیت ذخیره می‌کند. سپس گیت یک شیء کامیت ایجاد می‌کند که شامل فراداده و اشاره‌گری به درخت ریشه پروژه است تا بتواند آن تصویر لحظه‌ای را در صورت نیاز بازسازی کند.(((git commands, commit))) -Your Git repository now contains five objects: three _blobs_ (each representing the contents of one of the three files), one _tree_ that lists the contents of the directory and specifies which file names are stored as which blobs, and one _commit_ with the pointer to that root tree and all the commit metadata. +اکنون مخزن گیت شما شامل پنج شیء است: سه _blob_ (هر کدام نمایانگر محتوای یکی از سه فایل)، یک tree که محتوای دایرکتوری را لیست می‌کند و مشخص می‌کند کدام نام فایل به کدام _blob_ ذخیره شده است، و یک commit با اشاره‌گری به آن درخت ریشه و تمام فراداده‌های کامیت. .A commit and its tree image::images/commit-and-tree.png[A commit and its tree] -If you make some changes and commit again, the next commit stores a pointer to the commit that came immediately before it. +اگر تغییراتی ایجاد کنید و دوباره کامیت بزنید، کامیت بعدی اشاره‌گری به کامیتی که بلافاصله قبل از آن آمده است ذخیره می‌کند. .Commits and their parents image::images/commits-and-parents.png[Commits and their parents] -A branch in Git is simply a lightweight movable pointer to one of these commits. -The default branch name in Git is `master`. -As you start making commits, you're given a `master` branch that points to the last commit you made. -Every time you commit, the `master` branch pointer moves forward automatically. +یک شاخه در گیت صرفاً یک اشاره‌گر سبک و قابل انتقال به یکی از این کامیت‌ها است. نام پیش‌فرض شاخه در گیت `master` است. وقتی شروع به ایجاد کامیت می‌کنید، شاخه `master` به آخرین کامیتی که زده‌اید اشاره دارد. هر بار که کامیت می‌زنید، اشاره‌گر شاخه `master` به طور خودکار جلو می‌رود. [NOTE] ==== -The "`master`" branch in Git is not a special branch.(((master))) -It is exactly like any other branch. -The only reason nearly every repository has one is that the `git init` command creates it by default and most people don't bother to change it. +شاخه "`master`" در گیت شاخه‌ای ویژه نیست.(((master))) این دقیقاً مانند هر شاخه دیگری است. تنها دلیل اینکه تقریباً هر مخزنی یکی دارد این است که دستور `git init` آن را به طور پیش‌فرض ایجاد می‌کند و بیشتر افراد زحمت تغییر آن را به خود نمی‌دهند. ==== .A branch and its commit history image::images/branch-and-history.png[A branch and its commit history] [[_create_new_branch]] -==== Creating a New Branch +==== Creating a New Branch (ایجاد یک شاخه جدید) (((branches, creating))) -What happens when you create a new branch? -Well, doing so creates a new pointer for you to move around. -Let's say you want to create a new branch called `testing`. -You do this with the `git branch` command:(((git commands, branch))) +وقتی یک شاخه جدید ایجاد می‌کنید چه اتفاقی می‌افتد؟ خب، این کار یک اشاره‌گر جدید برای شما ایجاد می‌کند تا جابجا کنید. فرض کنید می‌خواهید شاخه جدیدی به نام testing بسازید. این کار را با دستور git branch انجام می‌دهید:(((git commands, branch))) [source,console] ---- $ git branch testing ---- -This creates a new pointer to the same commit you're currently on. +این اشاره‌گر جدیدی به همان کامیتی که در حال حاضر روی آن هستید ایجاد می‌کند. .Two branches pointing into the same series of commits image::images/two-branches.png[Two branches pointing into the same series of commits] -How does Git know what branch you're currently on? -It keeps a special pointer called `HEAD`. -Note that this is a lot different than the concept of `HEAD` in other VCSs you may be used to, such as Subversion or CVS. -In Git, this is a pointer to the local branch you're currently on. -In this case, you're still on `master`. -The `git branch` command only _created_ a new branch -- it didn't switch to that branch. +چگونه گیت می‌داند شما الان روی کدام شاخه هستید؟ گیت یک اشاره‌گر ویژه به نام `HEAD` نگه می‌دارد. توجه داشته باشید که این بسیار متفاوت از مفهوم `HEAD` در سایر سیستم‌های کنترل نسخه مانند `Subversion` یا `CVS` است. در گیت، این اشاره‌گری به شاخه محلی است که در حال حاضر روی آن هستید. در این مورد، شما هنوز روی `master` هستید. دستور `git branch` فقط یک شاخه جدید ایجاد کرد -- ولی به آن شاخه سوئیچ نکرد. .HEAD pointing to a branch image::images/head-to-master.png[HEAD pointing to a branch] -You can easily see this by running a simple `git log` command that shows you where the branch pointers are pointing. -This option is called `--decorate`. +شما می‌توانید این موضوع را با اجرای دستور ساده `git log` ببینید که نشان می‌دهد اشاره‌گرهای شاخه کجا هستند. این گزینه `--decorate` نام دارد. [source,console] ---- @@ -85,27 +68,26 @@ f30ab (HEAD -> master, testing) Add feature #32 - ability to add new formats to 98ca9 Initial commit ---- -You can see the `master` and `testing` branches that are right there next to the `f30ab` commit. +شما می‌توانید شاخه‌های `master` و `testing` را ببینید که درست کنار کامیت `f30ab` قرار دارند. [[_switching_branches]] -==== Switching Branches +==== Switching Branches (تغییر شاخه) (((branches, switching))) -To switch to an existing branch, you run the `git checkout` command.(((git commands, checkout))) -Let's switch to the new `testing` branch: +برای تغییر به یک شاخه موجود، دستور `git checkout` را اجرا کنید.(((git commands، checkout))) بیایید به شاخه جدید testing سوئیچ کنیم: [source,console] ---- $ git checkout testing ---- -This moves `HEAD` to point to the `testing` branch. +این باعث می‌شود `HEAD` به شاخه `testing` اشاره کند. .HEAD points to the current branch image::images/head-to-testing.png[HEAD points to the current branch] -What is the significance of that? -Well, let's do another commit: +اهمیت این چیست؟ + خب، بیایید یک کامیت دیگر بزنیم: [source,console] ---- @@ -116,8 +98,7 @@ $ git commit -a -m 'Make a change' .The HEAD branch moves forward when a commit is made image::images/advance-testing.png[The HEAD branch moves forward when a commit is made] -This is interesting, because now your `testing` branch has moved forward, but your `master` branch still points to the commit you were on when you ran `git checkout` to switch branches. -Let's switch back to the `master` branch: +این جالب است، چون اکنون شاخه `testing` جلو رفته اما شاخه `master` هنوز به کامیتی اشاره دارد که هنگام اجرای `git checkout` روی آن بودید. بیایید برگردیم به شاخه master: [source,console] ---- @@ -127,32 +108,25 @@ $ git checkout master [NOTE] .`git log` doesn't show _all_ the branches _all_ the time ==== -If you were to run `git log` right now, you might wonder where the "testing" branch you just created went, as it would not appear in the output. +اگر همین الان دستور `git log` را اجرا کنید، ممکن است تعجب کنید که شاخه "`testing`" که تازه ساختید کجا رفته است، چون در خروجی نمایش داده نمی‌شود. -The branch hasn't disappeared; Git just doesn't know that you're interested in that branch and it is trying to show you what it thinks you're interested in. -In other words, by default, `git log` will only show commit history below the branch you've checked out. +شاخه ناپدید نشده؛ گیت فقط نمی‌داند شما علاقه‌مند به آن شاخه هستید و سعی دارد چیزی را نشان دهد که فکر می‌کند شما علاقه دارید. به عبارت دیگر، به طور پیش‌فرض، `git log` فقط تاریخچه کامیت‌های زیر شاخه‌ای که روی آن قرار دارید را نشان می‌دهد. -To show commit history for the desired branch you have to explicitly specify it: `git log testing`. -To show all of the branches, add `--all` to your `git log` command. +برای نمایش تاریخچه کامیت‌های شاخه مورد نظر باید صراحتاً آن را مشخص کنید: `git log testing`. برای نمایش تمام شاخه‌ها، گزینه `--all` را به دستور `git log` اضافه کنید. ==== .HEAD moves when you checkout image::images/checkout-master.png[HEAD moves when you checkout] -That command did two things. -It moved the HEAD pointer back to point to the `master` branch, and it reverted the files in your working directory back to the snapshot that `master` points to. -This also means the changes you make from this point forward will diverge from an older version of the project. -It essentially rewinds the work you've done in your `testing` branch so you can go in a different direction. +آن دستور دو کار انجام داد. اشاره‌گر HEAD را برگرداند تا به شاخه master اشاره کند و فایل‌های دایرکتوری کاری شما را به تصویر لحظه‌ای‌ای که `master` اشاره دارد برگرداند. این همچنین یعنی تغییراتی که از این نقطه به بعد انجام می‌دهید از نسخه قدیمی‌تر پروژه انحراف خواهد داشت. در واقع کارهایی که در شاخه `testing` انجام داده بودید را عقب برد تا بتوانید مسیر متفاوتی بروید. [NOTE] .Switching branches changes files in your working directory ==== -It's important to note that when you switch branches in Git, files in your working directory will change. -If you switch to an older branch, your working directory will be reverted to look like it did the last time you committed on that branch. -If Git cannot do it cleanly, it will not let you switch at all. +مهم است بدانید وقتی در گیت بین شاخه‌ها جابجا می‌شوید، فایل‌های دایرکتوری کاری شما تغییر خواهند کرد. اگر به شاخه‌ای قدیمی‌تر سوئیچ کنید، دایرکتوری کاری شما بازمی‌گردد تا شبیه آخرین باری شود که روی آن شاخه کامیت زده بودید. اگر گیت نتواند این کار را به صورت تمیز انجام دهد، اصلاً اجازه نمی‌دهد سوئیچ کنید. ==== -Let's make a few changes and commit again: +بیایید چند تغییر ایجاد کنیم و دوباره کامیت بزنیم: [source,console] ---- @@ -160,17 +134,15 @@ $ vim test.rb $ git commit -a -m 'Make other changes' ---- -Now your project history has diverged (see <>). -You created and switched to a branch, did some work on it, and then switched back to your main branch and did other work. -Both of those changes are isolated in separate branches: you can switch back and forth between the branches and merge them together when you're ready. -And you did all that with simple `branch`, `checkout`, and `commit` commands. +اکنون تاریخچه پروژه شما انحراف پیدا کرده است +ببینید)<>). +شما یک شاخه ساختید و روی آن کار کردید، سپس برگشتید به شاخه اصلی و کار دیگری انجام دادید. هر دو تغییر در شاخه‌های جداگانه ایزوله شده‌اند: می‌توانید بین شاخه‌ها جابجا شوید و وقتی آماده بودید آنها را ادغام کنید. و همه این کارها را با دستورات ساده‌ی `branch`، `checkout` و `commit` انجام دادید. [[divergent_history]] .Divergent history image::images/advance-master.png[Divergent history] -You can also see this easily with the `git log` command. -If you run `git log --oneline --decorate --graph --all` it will print out the history of your commits, showing where your branch pointers are and how your history has diverged. +شما همچنین می‌توانید این موضوع را به راحتی با دستور git log ببینید. اگر دستور `git log` `--oneline` `--decorate` `--graph` `--all` را اجرا کنید، تاریخچه کامیت‌ها را چاپ می‌کند و نشان می‌دهد اشاره‌گرهای شاخه کجا هستند و تاریخچه شما چگونه انحراف یافته است. [source,console] ---- @@ -183,28 +155,25 @@ $ git log --oneline --decorate --graph --all * 98ca9 Initial commit of my project ---- -Because a branch in Git is actually a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy. -Creating a new branch is as quick and simple as writing 41 bytes to a file (40 characters and a newline). +| چون یک شاخه در گیت در واقع یک فایل ساده است که مقدار چکسام 40 حرفی SHA-1 کامیتی که به آن اشاره دارد را نگه می‌دارد، ایجاد و حذف شاخه بسیار کم هزینه است. ساختن یک شاخه جدید همانقدر سریع و ساده است که 41 بایت (40 کاراکتر و یک خط جدید) را در یک فایل بنویسیم. -This is in sharp contrast to the way most older VCS tools branch, which involves copying all of the project's files into a second directory. -This can take several seconds or even minutes, depending on the size of the project, whereas in Git the process is always instantaneous. -Also, because we're recording the parents when we commit, finding a proper merge base for merging is automatically done for us and is generally very easy to do. -These features help encourage developers to create and use branches often. +این برخلاف روش اکثر ابزارهای کنترل نسخه قدیمی‌تر است که برای ایجاد شاخه باید همه فایل‌های پروژه را در دایرکتوری دوم کپی کنند. این کار ممکن است چند ثانیه یا حتی چند دقیقه طول بکشد، بسته به اندازه پروژه، در حالی که در گیت این فرایند همیشه فوری است. همچنین چون ما والدین را هنگام کامیت ثبت می‌کنیم، یافتن پایه مناسب برای ادغام خودکار انجام شده و معمولاً بسیار آسان است. این ویژگی‌ها توسعه‌دهندگان را تشویق می‌کند تا اغلب شاخه بسازند و استفاده کنند. -Let's see why you should do so. +بیایید ببینیم چرا باید این کار را انجام دهید [NOTE] .Creating a new branch and switching to it at the same time ==== -It's typical to create a new branch and want to switch to that new branch at the same time -- this can be done in one operation with `git checkout -b `. +معمولاً وقتی یک شاخه جدید ایجاد می‌کنید، می‌خواهید همزمان روی آن سوئیچ کنید -- این کار با یک عملیات با دستور + git checkout -b + انجام پذیر است. ==== [NOTE] ==== -From Git version 2.23 onwards you can use `git switch` instead of `git checkout` to: +از نسخه 2.23 گیت به بعد می‌توانید از `git switch` به جای `git checkout` استفاده کنید برای: -- Switch to an existing branch: `git switch testing-branch`. -- Create a new branch and switch to it: `git switch -c new-branch`. - The `-c` flag stands for create, you can also use the full flag: `--create`. -- Return to your previously checked out branch: `git switch -`. +- سوئیچ به شاخه موجود: `git switch testing-branch`. +- ساختن یک شاخه جدید و سوئیچ به آن: `git switch -c new-branch`. گزینه `-c` مخفف create است، همچنین می‌توانید گزینه کامل آن یعنی: --create استفاده کنید. +- بازگشت به شاخه‌ای که قبلاً روی آن بودید: `git switch -`. ==== From be74ee3935ebf996ce4400c1bff300217f98b60f Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 30 Jul 2025 11:49:35 +0330 Subject: [PATCH 463/549] translate(03-git-branching): translated rebasing to persian --- .idea/workspace.xml | 29 ++- book/03-git-branching/sections/rebasing.asc | 196 ++++++++++---------- 2 files changed, 111 insertions(+), 114 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 50366fda..3d1ef039 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,7 @@ - - - + @@ -95,19 +93,19 @@ - { - "keyToString": { - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/03-git-branching", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + &quot;keyToString&quot;: { + &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, + &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, + &quot;git-widget-placeholder&quot;: &quot;book/translation/03-git-branching&quot;, + &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, + &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, + &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, + &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, + &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, + &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; } -} +} @@ -137,6 +135,7 @@ + diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index c6653524..c8896bd2 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -1,29 +1,29 @@ [[_rebasing]] -=== Rebasing +=== Rebasing (ریبیس کردن) (((rebasing))) -In Git, there are two main ways to integrate changes from one branch into another: the `merge` and the `rebase`. -In this section you'll learn what rebasing is, how to do it, why it's a pretty amazing tool, and in what cases you won't want to use it. +در گیت، دو روش اصلی برای ادغام تغییرات از یک شاخه به شاخه دیگر وجود دارد: دستور `merge` و دستور `rebase`. +در این بخش خواهید آموخت که بازپایه‌گذاری چیست، چگونه انجام می‌شود، چرا این ابزار بسیار کاربردی است و در چه مواردی بهتر است از آن استفاده نکنید. -==== The Basic Rebase +==== The Basic Rebase (ریبیس کردن پایه) -If you go back to an earlier example from <<_basic_merging>>, you can see that you diverged your work and made commits on two different branches. +اگر به مثالی که در بخش <<_basic_merging>> آوردیم رجوع کنید، می‌بینید که کارتان را از هم جدا کرده‌اید و تغییراتی را روی دو شاخه متفاوت ایجاد کرده‌اید. .Simple divergent history image::images/basic-rebase-1.png[Simple divergent history] -The easiest way to integrate the branches, as we've already covered, is the `merge` command. -It performs a three-way merge between the two latest branch snapshots (`C3` and `C4`) and the most recent common ancestor of the two (`C2`), creating a new snapshot (and commit). +ساده‌ترین روش برای ادغام شاخه‌ها، همان‌طور که پیش‌تر توضیح دادیم، دستور `merge` است. +این دستور یک ادغام سه‌طرفه بین دو آخرین تصویر شاخه‌ها (`C3` و `C4`) و آخرین جد مشترک آن‌ها (`C2`) انجام می‌دهد و یک تصویر (commit) جدید ایجاد می‌کند. [[rebasing-merging-example]] .Merging to integrate diverged work history image::images/basic-rebase-2.png[Merging to integrate diverged work history] -However, there is another way: you can take the patch of the change that was introduced in `C4` and reapply it on top of `C3`. -In Git, this is called _rebasing_. -With the `rebase` command, you can take all the changes that were committed on one branch and replay them on a different branch.(((git commands, rebase))) +اما راه دیگری نیز وجود دارد: می‌توانید تغییراتی را که در `C4` ایجاد شده‌اند برداشته و مجدداً روی `C3` اعمال کنید. +در گیت به این کار «بازپایه‌گذاری» گفته می‌شود. +با دستور `rebase` می‌توانید تمام تغییراتی که در یک شاخه ثبت شده‌اند را گرفته و دوباره روی شاخه‌ای دیگر اجرا کنید. -For this example, you would check out the `experiment` branch, and then rebase it onto the `master` branch as follows: +برای این مثال، ابتدا شاخه `experiment` را چک‌اوت می‌کنید و سپس آن را روی شاخه `master` بازپایه‌گذاری می‌کنید، به این صورت: [source,console] ---- @@ -33,12 +33,12 @@ First, rewinding head to replay your work on top of it... Applying: added staged command ---- -This operation works by going to the common ancestor of the two branches (the one you're on and the one you're rebasing onto), getting the diff introduced by each commit of the branch you're on, saving those diffs to temporary files, resetting the current branch to the same commit as the branch you are rebasing onto, and finally applying each change in turn. +این عملیات با رفتن به جد مشترک دو شاخه (شاخه فعلی و شاخه‌ای که می‌خواهید بازپایه‌گذاری کنید)، گرفتن تفاوت‌هایی که هر کامیت روی شاخه فعلی ایجاد کرده، ذخیره این تفاوت‌ها در فایل‌های موقتی، ریست کردن شاخه فعلی به همان کامیتی که شاخه مقصد دارد، و در نهایت اعمال هر تغییر به ترتیب انجام می‌شود. .Rebasing the change introduced in `C4` onto `C3` image::images/basic-rebase-3.png[Rebasing the change introduced in `C4` onto `C3`] -At this point, you can go back to the `master` branch and do a fast-forward merge. +در این مرحله، می‌توانید دوباره به شاخه `master` برگردید و یک ادغام fast-forward انجام دهید. [source,console] ---- @@ -49,44 +49,44 @@ $ git merge experiment .Fast-forwarding the `master` branch image::images/basic-rebase-4.png[Fast-forwarding the `master` branch] -Now, the snapshot pointed to by `C4'` is exactly the same as the one that was pointed to by `C5` in <>. -There is no difference in the end product of the integration, but rebasing makes for a cleaner history. -If you examine the log of a rebased branch, it looks like a linear history: it appears that all the work happened in series, even when it originally happened in parallel. +اکنون تصویری که شاخه `C4'` به آن اشاره می‌کند دقیقاً همان است که در <> شاخه `C5` به آن اشاره داشت. +در نهایت محصول ادغام تفاوتی ندارد، اما بازپایه‌گذاری تاریخچه‌ای تمیزتر و منظم‌تر ایجاد می‌کند. +اگر لاگ شاخه‌ای که بازپایه‌گذاری شده را بررسی کنید، تاریخچه به صورت خطی دیده می‌شود؛ یعنی انگار همه کارها به صورت سری انجام شده‌اند، حتی اگر در ابتدا به طور موازی بودند. -Often, you'll do this to make sure your commits apply cleanly on a remote branch -- perhaps in a project to which you're trying to contribute but that you don't maintain. -In this case, you'd do your work in a branch and then rebase your work onto `origin/master` when you were ready to submit your patches to the main project. -That way, the maintainer doesn't have to do any integration work -- just a fast-forward or a clean apply. +اغلب این کار را برای اطمینان از اینکه کامیت‌های شما به‌صورت تمیز روی شاخه ریموت اعمال می‌شوند انجام می‌دهید — مثلاً در پروژه‌ای که می‌خواهید در آن مشارکت کنید اما مسئولیت نگهداری آن را ندارید. +در این حالت، کارتان را در یک شاخه انجام می‌دهید و وقتی آماده ارسال تغییرات به پروژه اصلی شدید، کارتان را روی `origin/master` بازپایه‌گذاری می‌کنید. +به این ترتیب، مسئول نگهداری پروژه نیازی به انجام ادغام دستی ندارد — فقط یک fast-forward یا اعمال تمیز تغییرات خواهد بود. -Note that the snapshot pointed to by the final commit you end up with, whether it's the last of the rebased commits for a rebase or the final merge commit after a merge, is the same snapshot -- it's only the history that is different. -Rebasing replays changes from one line of work onto another in the order they were introduced, whereas merging takes the endpoints and merges them together. + توجه داشته باشید که اسنپ‌شاتی که توسط آخرین کامیتی که در نهایت به آن می‌رسید اشاره می‌شود، چه آخرین کامیت‌های بازبیس شده در یک بازبیس باشند یا کامیت نهایی ادغام بعد از یک مرج، همان اسنپ‌شات است — تنها تاریخچه است که متفاوت است. +بازبیس کردن تغییرات را به ترتیبی که معرفی شده‌اند، از یک شاخه کاری روی شاخه دیگری بازپخش می‌کند، در حالی که مرج گرفتن نقاط انتهایی شاخه‌ها را گرفته و آن‌ها را با هم ادغام می‌کند. -==== More Interesting Rebases +==== More Interesting Rebases (ری بیس های جالب تر) -You can also have your rebase replay on something other than the rebase target branch. -Take a history like <>, for example. -You branched a topic branch (`server`) to add some server-side functionality to your project, and made a commit. -Then, you branched off that to make the client-side changes (`client`) and committed a few times. -Finally, you went back to your `server` branch and did a few more commits. +شما همچنین می‌توانید بازبیس خود را روی چیزی غیر از شاخه هدف بازبیس اجرا کنید. +برای مثال، یک تاریخچه مثل <> را در نظر بگیرید. +شما یک شاخه موضوعی به نام `server` ایجاد کردید تا عملکردهای سمت سرور را به پروژه‌تان اضافه کنید و یک کامیت انجام دادید. +سپس، از آن شاخه انشعاب گرفتید تا تغییرات سمت کلاینت (`client`) را ایجاد کنید و چندین بار کامیت کردید. +در نهایت، به شاخه `server` برگشتید و چند کامیت دیگر انجام دادید. [[rbdiag_e]] .A history with a topic branch off another topic branch image::images/interesting-rebase-1.png[A history with a topic branch off another topic branch] -Suppose you decide that you want to merge your client-side changes into your mainline for a release, but you want to hold off on the server-side changes until it's tested further. -You can take the changes on `client` that aren't on `server` (`C8` and `C9`) and replay them on your `master` branch by using the `--onto` option of `git rebase`: +فرض کنید تصمیم گرفته‌اید تغییرات سمت کلاینت را برای انتشار به شاخه اصلی خود مرج کنید، اما می‌خواهید تغییرات سمت سرور را تا زمان آزمایش بیشتر نگه دارید. +شما می‌توانید تغییرات روی شاخه `client` که روی `server` نیستند (`C8` و `C9`) را با گزینه `--onto` در دستور `git rebase` روی شاخه `master` بازپخش کنید: [source,console] ---- $ git rebase --onto master server client ---- -This basically says, "`Take the `client` branch, figure out the patches since it diverged from the `server` branch, and replay these patches in the `client` branch as if it was based directly off the `master` branch instead.`" -It's a bit complex, but the result is pretty cool. +این اساساً می‌گوید: «شاخه `client` را بگیر، پچ‌هایی را که از زمانی که از شاخه `server` جدا شده‌اند پیدا کن، و این پچ‌ها را در شاخه `client` طوری بازپخش کن که گویی مستقیماً روی شاخه `master` پایه‌گذاری شده‌اند.» +این کمی پیچیده است، اما نتیجه بسیار جالب است. .Rebasing a topic branch off another topic branch image::images/interesting-rebase-2.png[Rebasing a topic branch off another topic branch] -Now you can fast-forward your `master` branch (see <>): +حالا می‌توانید شاخه `master` را به‌صورت fast-forward جلو ببرید (نگاه کنید به <>): [source,console] ---- @@ -98,21 +98,21 @@ $ git merge client .Fast-forwarding your `master` branch to include the `client` branch changes image::images/interesting-rebase-3.png[Fast-forwarding your `master` branch to include the `client` branch changes] -Let's say you decide to pull in your `server` branch as well. -You can rebase the `server` branch onto the `master` branch without having to check it out first by running `git rebase ` -- which checks out the topic branch (in this case, `server`) for you and replays it onto the base branch (`master`): +فرض کنید تصمیم می‌گیرید شاخه `server` را هم وارد کنید. +می‌توانید شاخه `server` را بدون نیاز به چک‌اوت کردن قبلی، روی شاخه `master` بازبیس کنید با اجرای دستور `git rebase ` — که شاخه موضوع (در اینجا `server`) را برای شما چک‌اوت می‌کند و روی شاخه پایه (`master`) بازپخش می‌کند: [source,console] ---- $ git rebase master server ---- -This replays your `server` work on top of your `master` work, as shown in <>. +این کار، تغییرات شاخه `server` را روی تغییرات شاخه `master` بازپخش می‌کند، همانطور که در <> نشان داده شده است. [[rbdiag_h]] .Rebasing your `server` branch on top of your `master` branch image::images/interesting-rebase-4.png[Rebasing your `server` branch on top of your `master` branch] -Then, you can fast-forward the base branch (`master`): +سپس می‌توانید شاخه پایه (`master`) را fast-forward کنید: [source,console] ---- @@ -120,7 +120,7 @@ $ git checkout master $ git merge server ---- -You can remove the `client` and `server` branches because all the work is integrated and you don't need them anymore, leaving your history for this entire process looking like <>: +می‌توانید شاخه‌های `client` و `server` را حذف کنید چون تمام کارها ادغام شده و دیگر به آن‌ها نیازی ندارید، و تاریخچه شما برای کل این فرایند مشابه <> خواهد بود. [source,console] ---- @@ -133,108 +133,106 @@ $ git branch -d server image::images/interesting-rebase-5.png[Final commit history] [[_rebase_peril]] -==== The Perils of Rebasing +==== The Perils of Rebasing (خطرات ری بیس کردن) (((rebasing, perils of))) -Ahh, but the bliss of rebasing isn't without its drawbacks, which can be summed up in a single line: +آه، اما لذت بازبیس کردن بدون معایب نیست، که می‌توان آن را در یک جمله خلاصه کرد: -*Do not rebase commits that exist outside your repository and that people may have based work on.* +*کامیت‌هایی را که خارج از مخزن شما وجود دارند و ممکن است دیگران روی آن‌ها کار کرده باشند، بازبیس نکنید.* -If you follow that guideline, you'll be fine. -If you don't, people will hate you, and you'll be scorned by friends and family. +اگر این دستورالعمل را رعایت کنید، مشکلی نخواهید داشت. +اگر رعایت نکنید، دیگران از شما متنفر خواهند شد و دوستان و خانواده شما را تحقیر خواهند کرد. -When you rebase stuff, you're abandoning existing commits and creating new ones that are similar but different. -If you push commits somewhere and others pull them down and base work on them, and then you rewrite those commits with `git rebase` and push them up again, your collaborators will have to re-merge their work and things will get messy when you try to pull their work back into yours. +هنگامی که بازبیس می‌کنید، شما کامیت‌های موجود را رها کرده و کامیت‌های جدیدی می‌سازید که شبیه آن‌ها اما متفاوت هستند. +اگر کامیت‌هایی را جایی پوش کنید و دیگران آن‌ها را کلون و روی آن‌ها کار کنند، سپس شما با `git rebase` آن کامیت‌ها را بازنویسی کرده و دوباره پوش کنید، همکاران شما مجبور خواهند بود کارهایشان را دوباره ادغام کنند و وقتی بخواهید تغییراتشان را به کار خودتان برگردانید، اوضاع پیچیده و نامرتب خواهد شد. -Let's look at an example of how rebasing work that you've made public can cause problems. -Suppose you clone from a central server and then do some work off that. -Your commit history looks like this: +بیایید مثالی از مشکلات بازبیس کردن تغییراتی که عمومی کرده‌اید را بررسی کنیم. +فرض کنید از یک سرور مرکزی کلون کرده‌اید و سپس روی آن کارهایی انجام داده‌اید. +تاریخچه کامیت‌های شما به این شکل است: .Clone a repository, and base some work on it image::images/perils-of-rebasing-1.png["Clone a repository, and base some work on it"] -Now, someone else does more work that includes a merge, and pushes that work to the central server. -You fetch it and merge the new remote branch into your work, making your history look something like this: +حالا، شخص دیگری کار بیشتری انجام می‌دهد که شامل یک ادغام (merge) است و آن کار را به سرور مرکزی ارسال می‌کند. +شما آن را دریافت می‌کنید و شاخه‌ی جدید راه دور را با کار خود ادغام می‌کنید، به طوری که تاریخچه‌ی شما چیزی شبیه به این می‌شود: .Fetch more commits, and merge them into your work image::images/perils-of-rebasing-2.png["Fetch more commits, and merge them into your work"] -Next, the person who pushed the merged work decides to go back and rebase their work instead; they do a `git push --force` to overwrite the history on the server. -You then fetch from that server, bringing down the new commits. +بعداً، همان شخصی که کار ادغام‌شده را ارسال کرده است تصمیم می‌گیرد به عقب برگردد و کار خود را مجدداً بازبیس (rebase) کند؛ او با دستور `git push --force` تاریخچه‌ی سرور را بازنویسی می‌کند. +سپس شما از آن سرور دریافت می‌کنید و کمیت‌های جدید را می‌آورید. [[_pre_merge_rebase_work]] .Someone pushes rebased commits, abandoning commits you've based your work on image::images/perils-of-rebasing-3.png["Someone pushes rebased commits, abandoning commits you've based your work on"] -Now you're both in a pickle. -If you do a `git pull`, you'll create a merge commit which includes both lines of history, and your repository will look like this: +حالا هر دوی شما در وضعیتی دشوار قرار دارید. +اگر دستور `git pull` اجرا کنید، یک کمیت ادغام (merge commit) ایجاد می‌شود که هر دو خط تاریخچه را شامل می‌شود و مخزن شما به این شکل در می‌آید: [[_merge_rebase_work]] .You merge in the same work again into a new merge commit image::images/perils-of-rebasing-4.png[You merge in the same work again into a new merge commit] -If you run a `git log` when your history looks like this, you'll see two commits that have the same author, date, and message, which will be confusing. -Furthermore, if you push this history back up to the server, you'll reintroduce all those rebased commits to the central server, which can further confuse people. -It's pretty safe to assume that the other developer doesn't want `C4` and `C6` to be in the history; that's why they rebased in the first place. +اگر وقتی تاریخچه‌تان به این شکل است دستور `git log` بزنید، دو کمیت با همان نویسنده، تاریخ و پیام خواهید دید که باعث سردرگمی می‌شود. +علاوه بر این، اگر این تاریخچه را دوباره به سرور بفرستید، تمام کمیت‌های بازبیس‌شده را دوباره به سرور مرکزی وارد می‌کنید که ممکن است باعث سردرگمی بیشتر شود. +به طور منطقی می‌توان فرض کرد توسعه‌دهنده‌ی دیگر نمی‌خواهد کمیت‌های `C4` و `C6` در تاریخچه باشند؛ به همین دلیل است که ابتدا کارش را بازبیس کرده بود. [[_rebase_rebase]] -==== Rebase When You Rebase +==== Rebase When You Rebase (ری بیس زمان ری بیس کردن) -If you *do* find yourself in a situation like this, Git has some further magic that might help you out. -If someone on your team force pushes changes that overwrite work that you've based work on, your challenge is to figure out what is yours and what they've rewritten. +اگر در چنین وضعیتی قرار گرفتید، گیت جادوهای دیگری هم دارد که شاید به شما کمک کند. +اگر کسی در تیم شما تغییراتی را با force push ارسال کند که کاری را که شما بر اساس آن کار کرده‌اید بازنویسی کند، چالش شما این است که بفهمید چه چیزی مال شماست و چه چیزی توسط آنها بازنویسی شده است. -It turns out that in addition to the commit SHA-1 checksum, Git also calculates a checksum that is based just on the patch introduced with the commit. -This is called a "`patch-id`". +گیت علاوه بر محاسبه‌ی شناسه SHA-1 کمیت، یک شناسه‌ی دیگری هم بر اساس تغییرات وارد شده در کمیت محاسبه می‌کند که به آن "`patch-id`" می‌گویند. -If you pull down work that was rewritten and rebase it on top of the new commits from your partner, Git can often successfully figure out what is uniquely yours and apply them back on top of the new branch. +اگر شما کاری را که بازنویسی شده دریافت کنید و آن را روی کمیت‌های جدید هم‌تیمی‌تان بازبیس کنید، گیت اغلب می‌تواند تشخیص دهد که چه تغییراتی مختص شماست و آنها را دوباره روی شاخه جدید اعمال کند. -For instance, in the previous scenario, if instead of doing a merge when we're at <<_pre_merge_rebase_work>> we run `git rebase teamone/master`, Git will: +برای مثال، در سناریوی قبلی، اگر به جای ادغام در مرحله‌ی <<_pre_merge_rebase_work>> دستور `git rebase teamone/master` را اجرا کنیم، گیت این کارها را انجام می‌دهد: +* تشخیص می‌دهد چه کارهایی منحصر به شاخه‌ی ماست (`C2`، `C3`، `C4`، `C6`، `C7`) +* تشخیص می‌دهد کدام کمیت‌ها ادغام نیستند (`C2`، `C3`، `C4`) +* تشخیص می‌دهد کدام‌ها هنوز در شاخه‌ی هدف بازنویسی نشده‌اند (فقط `C2` و `C3`، چون `C4` همان تغییر `C4'` است) +* آن کمیت‌ها را روی رأس `teamone/master` اعمال می‌کند -* Determine what work is unique to our branch (`C2`, `C3`, `C4`, `C6`, `C7`) -* Determine which are not merge commits (`C2`, `C3`, `C4`) -* Determine which have not been rewritten into the target branch (just `C2` and `C3`, since `C4` is the same patch as `C4'`) -* Apply those commits to the top of `teamone/master` - -So instead of the result we see in <<_merge_rebase_work>>, we would end up with something more like <<_rebase_rebase_work>>. +پس به جای نتیجه‌ای که در <<_merge_rebase_work>> دیدیم، چیزی شبیه به <<_rebase_rebase_work>> خواهیم داشت. [[_rebase_rebase_work]] .Rebase on top of force-pushed rebase work image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work] -This only works if `C4` and `C4'` that your partner made are almost exactly the same patch. -Otherwise the rebase won't be able to tell that it's a duplicate and will add another `C4`-like patch (which will probably fail to apply cleanly, since the changes would already be at least somewhat there). +این فقط زمانی جواب می‌دهد که `C4` و `C4'` که هم‌تیمی شما ساخته تقریباً همان اصلاحات یکسان باشند. +در غیر این صورت، بازبیس نمی‌تواند تشخیص دهد که این یک نسخه‌ی تکراری است و یک تغییر شبیه `C4` دیگر اضافه خواهد کرد (که احتمالاً به درستی اعمال نمی‌شود، چون تغییرات قبلاً تا حدی وجود دارند). + -You can also simplify this by running a `git pull --rebase` instead of a normal `git pull`. -Or you could do it manually with a `git fetch` followed by a `git rebase teamone/master` in this case. +شما همچنین می‌توانید این کار را با اجرای دستور `git pull --rebase` به جای `git pull` معمولی ساده‌تر کنید. +یا می‌توانید به صورت دستی ابتدا `git fetch` بگیرید و سپس دستور `git rebase teamone/master` را اجرا کنید. -If you are using `git pull` and want to make `--rebase` the default, you can set the `pull.rebase` config value with something like `git config --global pull.rebase true`. +اگر می‌خواهید `git pull` به طور پیش‌فرض با گزینه `--rebase` اجرا شود، می‌توانید مقدار `pull.rebase` را با دستور `git config --global pull.rebase true` تنظیم کنید. -If you only ever rebase commits that have never left your own computer, you'll be just fine. -If you rebase commits that have been pushed, but that no one else has based commits from, you'll also be fine. -If you rebase commits that have already been pushed publicly, and people may have based work on those commits, then you may be in for some frustrating trouble, and the scorn of your teammates. +اگر کمیت‌هایی را بازبیس می‌کنید که هرگز از کامپیوتر خودتان خارج نشده‌اند، هیچ مشکلی نخواهید داشت. +اگر کمیت‌هایی را بازبیس می‌کنید که قبلاً ارسال شده‌اند، اما هیچ کس دیگری بر اساس آن‌ها کار نکرده است، باز هم مشکلی پیش نمی‌آید. +اما اگر کمیت‌هایی را بازبیس کنید که قبلاً به صورت عمومی ارسال شده‌اند و دیگران بر اساس آن‌ها کار کرده‌اند، ممکن است با مشکلات ناامیدکننده‌ای روبرو شوید و همکارانتان از شما ناراضی شوند. -If you or a partner does find it necessary at some point, make sure everyone knows to run `git pull --rebase` to try to make the pain after it happens a little bit simpler. +اگر شما یا هم‌تیمی‌تان در جایی مجبور شدید این کار را انجام دهید، مطمئن شوید همه می‌دانند که باید از دستور `git pull --rebase` استفاده کنند تا دردسرهای بعدی کمی کمتر شود. -==== Rebase vs. Merge +==== Rebase vs. Merge (ری بیس در مقابل مرج) (((rebasing, vs. merging)))(((merging, vs. rebasing))) -Now that you've seen rebasing and merging in action, you may be wondering which one is better. -Before we can answer this, let's step back a bit and talk about what history means. - -One point of view on this is that your repository's commit history is a *record of what actually happened.* -It's a historical document, valuable in its own right, and shouldn't be tampered with. -From this angle, changing the commit history is almost blasphemous; you're _lying_ about what actually transpired. -So what if there was a messy series of merge commits? -That's how it happened, and the repository should preserve that for posterity. - -The opposing point of view is that the commit history is the *story of how your project was made.* -You wouldn't publish the first draft of a book, so why show your messy work? -When you're working on a project, you may need a record of all your missteps and dead-end paths, but when it's time to show your work to the world, you may want to tell a more coherent story of how to get from A to B. -People in this camp use tools like `rebase` and `filter-branch` to rewrite their commits before they're merged into the mainline branch. -They use tools like `rebase` and `filter-branch`, to tell the story in the way that's best for future readers. - -Now, to the question of whether merging or rebasing is better: hopefully you'll see that it's not that simple. -Git is a powerful tool, and allows you to do many things to and with your history, but every team and every project is different. -Now that you know how both of these things work, it's up to you to decide which one is best for your particular situation. - -You can get the best of both worlds: rebase local changes before pushing to clean up your work, but never rebase anything that you've pushed somewhere. +حالا که بازبیس و ادغام را در عمل دیده‌اید، شاید بپرسید کدام بهتر است؟ +قبل از پاسخ دادن، کمی عقب‌تر می‌رویم و درباره‌ی مفهوم تاریخچه صحبت می‌کنیم. + +یک دیدگاه این است که تاریخچه‌ی کمیت‌های مخزن شما، *ثبت آنچه واقعاً اتفاق افتاده* است. +این یک سند تاریخی است که ارزش خاص خود را دارد و نباید دستکاری شود. +از این زاویه، تغییر تاریخچه‌ی کمیت‌ها تقریباً یک عمل ناپسند است؛ انگار درباره‌ی آنچه واقعاً رخ داده دروغ می‌گویید. +پس اگر یک سری کمیت ادغام نامرتب وجود داشته باشد، این همانا همان چیزی است که اتفاق افتاده و مخزن باید این را برای آیندگان حفظ کند. + +دیدگاه مخالف این است که تاریخچه کامیت‌ها، *داستان چگونگی ساخته شدن پروژه شما است.* +شما اولین پیش‌نویس یک کتاب را منتشر نمی‌کنید، پس چرا کار درهم‌وبرهم خود را نشان دهید؟ +وقتی روی پروژه‌ای کار می‌کنید، ممکن است به رکورد تمام اشتباهات و مسیرهای بن‌بست خود نیاز داشته باشید، اما وقتی زمان نمایش کار به جهان می‌رسد، شاید بخواهید داستان منسجم‌تری درباره چگونگی رسیدن از نقطه A به B تعریف کنید. +افراد این دسته از ابزارهایی مانند `rebase` و `filter-branch` برای بازنویسی کامیت‌هایشان قبل از ادغام در شاخه اصلی استفاده می‌کنند. +آن‌ها از این ابزارها برای بیان داستان به شکلی که برای خوانندگان آینده بهتر باشد بهره می‌برند. + +حالا درباره این سؤال که ادغام (merge) بهتر است یا بازپایه‌گذاری (rebase): امیدوارم متوجه شده باشید که پاسخ ساده‌ای ندارد. +گیت ابزاری قدرتمند است و به شما امکان انجام کارهای زیادی روی تاریخچه می‌دهد، اما هر تیم و هر پروژه‌ای متفاوت است. +حالا که می‌دانید هر دو روش چگونه کار می‌کنند، انتخاب بهترین گزینه برای وضعیت خاص خودتان بر عهده شماست. + +می‌توانید بهترین‌های هر دو را داشته باشید: تغییرات محلی را قبل از ارسال با rebase مرتب کنید تا کارتان تمیز شود، اما هرگز چیزی را که جایی ارسال کرده‌اید دوباره بازپایه‌گذاری نکنید. \ No newline at end of file From 2cb1ba87015e7d22344e9ed0e4bdf202105cd6cf Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 5 Aug 2025 18:15:12 +0330 Subject: [PATCH 464/549] translate(03-git-branching): translated remote branches to persian --- .idea/workspace.xml | 83 ++------- .../sections/remote-branches.asc | 174 +++++++++--------- 2 files changed, 107 insertions(+), 150 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3d1ef039..9f99c343 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,9 @@ - + + + @@ -20,29 +22,6 @@ } } - { - "associatedIndex": 5 + "associatedIndex": 0 } - + { "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", "RunOnceActivity.ShowReadmeOnStart": "true", "RunOnceActivity.git.unshallow": "true", "git-widget-placeholder": "book/translation/03-git-branching", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", "node.js.detected.package.eslint": "true", "node.js.detected.package.tslint": "true", "node.js.selected.package.eslint": "(autodetect)", "node.js.selected.package.tslint": "(autodetect)", "nodejs_package_manager_path": "npm", + "to.speed.mode.migration.done": "true", "vue.rearranger.settings.migration": "true" } } - + - - 1747679656503 + + 1741092810677 - 1747679656503 - - - - - - - - - - - - - - - + 1741092810677 + + + + + - - - - \ No newline at end of file diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index adbb8735..96914cfe 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -1,71 +1,70 @@ [[_remote_branches]] -=== Remote Branches +=== Remote Branches (شاخه‌های راه دور) (((branches, remote)))(((references, remote))) -Remote references are references (pointers) in your remote repositories, including branches, tags, and so on. -You can get a full list of remote references explicitly with `git ls-remote `, or `git remote show ` for remote branches as well as more information. -Nevertheless, a more common way is to take advantage of remote-tracking branches. +ارجاعات راه دور، ارجاعاتی (اشاره‌گرها) در مخازن راه دور شما هستند، شامل شاخه‌ها، برچسب‌ها و غیره. +شما می‌توانید فهرست کامل ارجاعات راه دور را به‌طور صریح با دستور `git ls-remote ` یا برای شاخه‌های راه دور و همچنین اطلاعات بیشتر با دستور `git remote show ` دریافت کنید. +با این حال، روش رایج‌تر استفاده از شاخه‌های پیگیری راه دور است. -Remote-tracking branches are references to the state of remote branches. -They're local references that you can't move; Git moves them for you whenever you do any network communication, to make sure they accurately represent the state of the remote repository. -Think of them as bookmarks, to remind you where the branches in your remote repositories were the last time you connected to them. +شاخه‌های پیگیری راه دور، ارجاعاتی به وضعیت شاخه‌های راه دور هستند. +این‌ها ارجاعات محلی‌اند که شما نمی‌توانید آن‌ها را جابه‌جا کنید؛ گیت هر بار که ارتباط شبکه‌ای برقرار می‌کنید، آن‌ها را برای شما به‌روزرسانی می‌کند تا مطمئن شود که دقیقاً وضعیت مخزن راه دور را نشان می‌دهند. +می‌توانید آن‌ها را مانند بوکمارک‌هایی فرض کنید که به شما یادآوری می‌کنند شاخه‌های مخازن راه دور شما آخرین بار که به آن‌ها متصل شده‌اید، در چه وضعیتی بوده‌اند. -Remote-tracking branch names take the form `/`. -For instance, if you wanted to see what the `master` branch on your `origin` remote looked like as of the last time you communicated with it, you would check the `origin/master` branch. -If you were working on an issue with a partner and they pushed up an `iss53` branch, you might have your own local `iss53` branch, but the branch on the server would be represented by the remote-tracking branch `origin/iss53`. +نام شاخه‌های پیگیری راه دور به شکل `/` است. +برای مثال، اگر بخواهید ببینید شاخه `master` روی راه دور `origin` آخرین بار که ارتباط برقرار کرده‌اید چگونه بوده، باید شاخه `origin/master` را بررسی کنید. +اگر روی یک مسئله با همکار خود کار می‌کنید و او شاخه‌ای به نام `iss53` روی سرور منتشر کرده است، ممکن است شما شاخه محلی `iss53` خود را داشته باشید، اما شاخه‌ای که روی سرور است با شاخه پیگیری راه دور `origin/iss53` نشان داده می‌شود. -This may be a bit confusing, so let's look at an example. -Let's say you have a Git server on your network at `git.ourcompany.com`. -If you clone from this, Git's `clone` command automatically names it `origin` for you, pulls down all its data, creates a pointer to where its `master` branch is, and names it `origin/master` locally. -Git also gives you your own local `master` branch starting at the same place as origin's `master` branch, so you have something to work from. +این ممکن است کمی گیج‌کننده باشد، پس بیایید یک مثال ببینیم. +فرض کنید شما یک سرور گیت در شبکه خود دارید به آدرس `git.ourcompany.com`. +اگر از این سرور کلون بگیرید، دستور `git clone` به‌طور خودکار آن را `origin` نام‌گذاری می‌کند، تمام داده‌های آن را دانلود می‌کند، اشاره‌گری به جایگاه شاخه `master` آن ایجاد می‌کند و به‌صورت محلی آن را `origin/master` می‌نامد. +گیت همچنین یک شاخه محلی `master` برای شما ایجاد می‌کند که از همان نقطه شاخه `master` در origin شروع می‌شود، تا شما چیزی برای کار کردن داشته باشید. [NOTE] ."`origin`" is not special ==== -Just like the branch name "`master`" does not have any special meaning in Git, neither does "`origin`". -While "`master`" is the default name for a starting branch when you run `git init` which is the only reason it's widely used, "`origin`" is the default name for a remote when you run `git clone`. -If you run `git clone -o booyah` instead, then you will have `booyah/master` as your default remote branch.(((origin))) +درست مانند اینکه نام شاخه "`master`" در گیت معنای خاصی ندارد، نام "`origin`" هم چنین نیست. +در حالی که "`master`" نام پیش‌فرض شاخه شروعی است وقتی `git init` اجرا می‌کنید و به همین دلیل بسیار استفاده می‌شود، "`origin`" نام پیش‌فرض راه دور است وقتی `git clone` اجرا می‌کنید. +اگر دستور `git clone -o booyah` را بدهید، شاخه پیش‌فرض راه دور شما به جای `origin/master`، `booyah/master` خواهد بود.(((origin))) ==== .Server and local repositories after cloning image::images/remote-branches-1.png[Server and local repositories after cloning] -If you do some work on your local `master` branch, and, in the meantime, someone else pushes to `git.ourcompany.com` and updates its `master` branch, then your histories move forward differently. -Also, as long as you stay out of contact with your `origin` server, your `origin/master` pointer doesn't move. +اگر روی شاخه محلی `master` خود کار کنید و در همین حین شخص دیگری روی سرور `git.ourcompany.com` شاخه `master` را به‌روزرسانی کند، تاریخچه‌های شما به شکل متفاوتی پیش می‌روند. +همچنین تا زمانی که با سرور `origin` ارتباط برقرار نکنید، اشاره‌گر `origin/master` جابه‌جا نمی‌شود. .Local and remote work can diverge image::images/remote-branches-2.png[Local and remote work can diverge] -To synchronize your work with a given remote, you run a `git fetch ` command (in our case, `git fetch origin`). -This command looks up which server "`origin`" is (in this case, it's `git.ourcompany.com`), fetches any data from it that you don't yet have, and updates your local database, moving your `origin/master` pointer to its new, more up-to-date position. + برای همگام‌سازی کار خود با یک ریموت مشخص، فرمان `git fetch ` را اجرا می‌کنید (در مورد ما، `git fetch origin`). +این فرمان سروری که "`origin`" نامیده شده را شناسایی می‌کند (در اینجا، `git.ourcompany.com` است)، هر داده‌ای را که هنوز ندارید از آن دریافت می‌کند و پایگاه داده محلی شما را به‌روزرسانی می‌کند و اشاره‌گر `origin/master` را به موقعیت جدید و به‌روزتر منتقل می‌نماید. .`git fetch` updates your remote-tracking branches image::images/remote-branches-3.png[`git fetch` updates your remote-tracking branches] -To demonstrate having multiple remote servers and what remote branches for those remote projects look like, let's assume you have another internal Git server that is used only for development by one of your sprint teams. -This server is at `git.team1.ourcompany.com`. -You can add it as a new remote reference to the project you're currently working on by running the `git remote add` command as we covered in <>. -Name this remote `teamone`, which will be your shortname for that whole URL. +برای نشان دادن داشتن چند سرور ریموت و مشاهده شاخه‌های ریموت برای آن پروژه‌ها، فرض کنیم سرور Git داخلی دیگری دارید که فقط توسط یکی از تیم‌های اسپرینت شما برای توسعه استفاده می‌شود. +این سرور در آدرس `git.team1.ourcompany.com` قرار دارد. +شما می‌توانید آن را به عنوان یک مرجع ریموت جدید به پروژه‌ای که در حال حاضر روی آن کار می‌کنید اضافه کنید، با اجرای فرمان `git remote add` که در <> توضیح داده شده است. +این ریموت را `teamone` نام‌گذاری کنید، که نام کوتاه شما برای آن URL خواهد بود. .Adding another server as a remote image::images/remote-branches-4.png[Adding another server as a remote] -Now, you can run `git fetch teamone` to fetch everything the remote `teamone` server has that you don't have yet. -Because that server has a subset of the data your `origin` server has right now, Git fetches no data but sets a remote-tracking branch called `teamone/master` to point to the commit that `teamone` has as its `master` branch. +حالا می‌توانید با اجرای `git fetch teamone` همه چیزهایی را که سرور ریموت `teamone` دارد و شما هنوز ندارید دریافت کنید. +از آنجا که این سرور زیرمجموعه‌ای از داده‌هایی را که سرور `origin` شما دارد، در اختیار دارد، گیت داده‌ای دریافت نمی‌کند اما شاخه‌ای به نام `teamone/master` که شاخه ریموت‌ترکینگ است را به تعهدی که `teamone` به عنوان شاخه `master` خود دارد، اشاره می‌دهد. .Remote-tracking branch for `teamone/master` image::images/remote-branches-5.png[Remote-tracking branch for `teamone/master`] [[_pushing_branches]] -==== Pushing +==== Pushing (ارسال) -(((pushing))) -When you want to share a branch with the world, you need to push it up to a remote to which you have write access. -Your local branches aren't automatically synchronized to the remotes you write to -- you have to explicitly push the branches you want to share. -That way, you can use private branches for work you don't want to share, and push up only the topic branches you want to collaborate on. +وقتی می‌خواهید یک شاخه را با دیگران به اشتراک بگذارید، باید آن را به یک ریموتی که دسترسی نوشتن دارید ارسال کنید. +شاخه‌های محلی شما به صورت خودکار با ریموت‌هایی که روی آن‌ها می‌نویسید همگام نمی‌شوند — شما باید به طور صریح شاخه‌هایی را که می‌خواهید به اشتراک بگذارید ارسال (push) کنید. +به این ترتیب، می‌توانید از شاخه‌های خصوصی برای کارهایی که نمی‌خواهید به اشتراک بگذارید استفاده کنید و تنها شاخه‌های موضوعی که می‌خواهید روی آن‌ها همکاری کنید را ارسال نمایید. -If you have a branch named `serverfix` that you want to work on with others, you can push it up the same way you pushed your first branch. -Run `git push `:(((git commands, push))) +اگر شاخه‌ای به نام `serverfix` دارید که می‌خواهید با دیگران روی آن کار کنید، می‌توانید آن را به همان روشی که شاخه اول خود را ارسال کردید، ارسال کنید. +فرمان `git push ` را اجرا کنید: (((git commands، push))) [source,console] ---- @@ -79,26 +78,26 @@ To https://github.com/schacon/simplegit * [new branch] serverfix -> serverfix ---- -This is a bit of a shortcut. -Git automatically expands the `serverfix` branchname out to `refs/heads/serverfix:refs/heads/serverfix`, which means, "`Take my `serverfix` local branch and push it to update the remote's `serverfix` branch.`" -We'll go over the `refs/heads/` part in detail in <>, but you can generally leave it off. -You can also do `git push origin serverfix:serverfix`, which does the same thing -- it says, "`Take my serverfix and make it the remote's serverfix.`" -You can use this format to push a local branch into a remote branch that is named differently. -If you didn't want it to be called `serverfix` on the remote, you could instead run `git push origin serverfix:awesomebranch` to push your local `serverfix` branch to the `awesomebranch` branch on the remote project. +این روش کمی کوتاه شده است. +گیت به طور خودکار نام شاخه `serverfix` را به `refs/heads/serverfix:refs/heads/serverfix` گسترش می‌دهد، که یعنی: «شاخه محلی `serverfix` من را بگیر و شاخه `serverfix` ریموت را به‌روزرسانی کن.» +ما بخش `refs/heads/` را به طور کامل در <> بررسی خواهیم کرد، اما معمولاً می‌توانید آن را نادیده بگیرید. +همچنین می‌توانید از `git push origin serverfix:serverfix` استفاده کنید که همان کار را انجام می‌دهد — یعنی «شاخه `serverfix` من را بگیر و آن را به شاخه `serverfix` ریموت تبدیل کن.» +می‌توانید از این قالب برای ارسال یک شاخه محلی به شاخه‌ای در ریموت با نام متفاوت استفاده کنید. +اگر نمی‌خواستید شاخه ریموت به نام `serverfix` باشد، می‌توانستید به جای آن این فرمان را اجرا کنید: `git push origin serverfix:awesomebranch` تا شاخه محلی `serverfix` را به شاخه `awesomebranch` در پروژه ریموت ارسال کنید. [NOTE] .Don't type your password every time ==== -If you're using an HTTPS URL to push over, the Git server will ask you for your username and password for authentication. -By default it will prompt you on the terminal for this information so the server can tell if you're allowed to push. +اگر از آدرس HTTPS برای ارسال استفاده می‌کنید، سرور گیت از شما نام کاربری و رمز عبور برای احراز هویت می‌خواهد. +به طور پیش‌فرض، این اطلاعات را در ترمینال از شما می‌پرسد تا سرور بفهمد آیا اجازه ارسال دارید یا خیر. -If you don't want to type it every single time you push, you can set up a "`credential cache`". -The simplest is just to keep it in memory for a few minutes, which you can easily set up by running `git config --global credential.helper cache`. +اگر نمی‌خواهید هر بار که ارسال می‌کنید این اطلاعات را تایپ کنید، می‌توانید یک «کش اعتبارسنجی» (credential cache) تنظیم کنید. +ساده‌ترین روش این است که اطلاعات را چند دقیقه‌ای در حافظه نگه دارد که با اجرای فرمان `git config --global credential.helper cache` به راحتی قابل تنظیم است. -For more information on the various credential caching options available, see <>. +برای اطلاعات بیشتر درباره گزینه‌های مختلف کش اعتبارسنجی، به <> مراجعه کنید. ==== -The next time one of your collaborators fetches from the server, they will get a reference to where the server's version of `serverfix` is under the remote branch `origin/serverfix`: +بار بعد که یکی از همکارانتان از سرور داده‌ها را دریافت کند، ارجاعی به این که نسخه سرور از شاخه `serverfix` کجا قرار دارد، تحت شاخه ریموت `origin/serverfix` دریافت خواهد کرد: [source,console] ---- @@ -111,11 +110,11 @@ From https://github.com/schacon/simplegit * [new branch] serverfix -> origin/serverfix ---- -It's important to note that when you do a fetch that brings down new remote-tracking branches, you don't automatically have local, editable copies of them. -In other words, in this case, you don't have a new `serverfix` branch -- you have only an `origin/serverfix` pointer that you can't modify. +مهم است بدانید که وقتی دستوری مانند fetch اجرا می‌کنید که شاخه‌های جدید remote-tracking را دریافت می‌کند، به‌طور خودکار نسخه‌های محلی و قابل ویرایش از آن‌ها ندارید. +به عبارت دیگر، در این حالت، شما شاخه‌ی جدیدی به نام `serverfix` ندارید — بلکه فقط یک اشاره‌گر `origin/serverfix` دارید که نمی‌توانید آن را تغییر دهید. -To merge this work into your current working branch, you can run `git merge origin/serverfix`. -If you want your own `serverfix` branch that you can work on, you can base it off your remote-tracking branch: +برای ادغام این تغییرات در شاخه‌ی کاری فعلی خود، می‌توانید دستور `git merge origin/serverfix` را اجرا کنید. +اگر می‌خواهید شاخه‌ی محلی `serverfix` خود را داشته باشید که بتوانید روی آن کار کنید، می‌توانید آن را بر اساس شاخه‌ی remote-tracking خود بسازید: [source,console] ---- @@ -124,20 +123,21 @@ Branch serverfix set up to track remote branch serverfix from origin. Switched to a new branch 'serverfix' ---- -This gives you a local branch that you can work on that starts where `origin/serverfix` is. +این کار یک شاخه‌ی محلی برای شما ایجاد می‌کند که می‌توانید روی آن کار کنید و شروع آن دقیقاً همان جایی است که `origin/serverfix` قرار دارد. [[_tracking_branches]] -==== Tracking Branches +==== Tracking Branches (شاخه‌های پیگیری) (((branches, tracking)))(((branches, upstream))) -Checking out a local branch from a remote-tracking branch automatically creates what is called a "`tracking branch`" (and the branch it tracks is called an "`upstream branch`"). -Tracking branches are local branches that have a direct relationship to a remote branch. -If you're on a tracking branch and type `git pull`, Git automatically knows which server to fetch from and which branch to merge in. +وقتی یک شاخه‌ی محلی را از روی یک شاخه‌ی remote-tracking برمی‌دارید، به‌طور خودکار چیزی به نام «شاخه‌ی پیگیری» (tracking branch) ایجاد می‌شود (و شاخه‌ای که پیگیری می‌کند، «شاخه‌ی بالادستی» یا upstream branch نامیده می‌شود). +شاخه‌های پیگیری، شاخه‌های محلی‌ای هستند که رابطه‌ی مستقیمی با یک شاخه‌ی ریموت دارند. +اگر روی یک شاخه‌ی پیگیری باشید و دستور `git pull` را بزنید، گیت به‌طور خودکار می‌داند که از کدام سرور باید دریافت کند و کدام شاخه را باید ادغام کند. -When you clone a repository, it generally automatically creates a `master` branch that tracks `origin/master`. -However, you can set up other tracking branches if you wish -- ones that track branches on other remotes, or don't track the `master` branch. -The simple case is the example you just saw, running `git checkout -b /`. -This is a common enough operation that Git provides the `--track` shorthand: + +وقتی یک مخزن را کلون می‌کنید، معمولاً به‌طور خودکار شاخه‌ی `master` ایجاد می‌شود که شاخه‌ی `origin/master` را پیگیری می‌کند. +با این حال، می‌توانید شاخه‌های پیگیری دیگری هم بسازید — شاخه‌هایی که شاخه‌های ریموت دیگری را پیگیری می‌کنند، یا شاخه‌ی `master` را پیگیری نمی‌کنند. +حالت ساده همان مثالی است که دیدید: اجرای دستور `git checkout -b /`. +این عملیات آن‌قدر رایج است که گیت میانبر `--track` را ارائه کرده است: [source,console] ---- @@ -146,8 +146,8 @@ Branch serverfix set up to track remote branch serverfix from origin. Switched to a new branch 'serverfix' ---- -In fact, this is so common that there's even a shortcut for that shortcut. -If the branch name you're trying to checkout (a) doesn't exist and (b) exactly matches a name on only one remote, Git will create a tracking branch for you: +در واقع، این آن‌قدر رایج است که حتی یک میانبر برای همان میانبر وجود دارد. +اگر شاخه‌ای که می‌خواهید چک‌اوت کنید (الف) وجود نداشته باشد و (ب) دقیقاً با نام یک شاخه روی تنها یک ریموت مطابقت داشته باشد، گیت به‌طور خودکار یک شاخه‌ی پیگیری برای شما ایجاد می‌کند: [source,console] ---- @@ -156,7 +156,7 @@ Branch serverfix set up to track remote branch serverfix from origin. Switched to a new branch 'serverfix' ---- -To set up a local branch with a different name than the remote branch, you can easily use the first version with a different local branch name: +برای ساخت یک شاخه‌ی محلی با نامی متفاوت از شاخه‌ی ریموت، می‌توانید به‌راحتی از نسخه‌ی اول با نام شاخه‌ی محلی متفاوت استفاده کنید: [source,console] ---- @@ -165,9 +165,9 @@ Branch sf set up to track remote branch serverfix from origin. Switched to a new branch 'sf' ---- -Now, your local branch `sf` will automatically pull from `origin/serverfix`. +حالا شاخه‌ی محلی شما به نام `sf` به‌طور خودکار از `origin/serverfix` دریافت خواهد کرد. -If you already have a local branch and want to set it to a remote branch you just pulled down, or want to change the upstream branch you're tracking, you can use the `-u` or `--set-upstream-to` option to `git branch` to explicitly set it at any time. +اگر از قبل یک شاخه‌ی محلی دارید و می‌خواهید آن را به شاخه‌ی ریموتی که تازه دریافت کرده‌اید مرتبط کنید، یا می‌خواهید شاخه‌ی بالادستی (upstream) که پیگیری می‌کنید را تغییر دهید، می‌توانید در هر زمان با گزینه‌های `-u` یا `--set-upstream-to` دستور `git branch` این کار را به‌طور صریح انجام دهید. [source,console] ---- @@ -178,12 +178,12 @@ Branch serverfix set up to track remote branch serverfix from origin. [NOTE] .Upstream shorthand ==== -When you have a tracking branch set up, you can reference its upstream branch with the `@{upstream}` or `@{u}` shorthand. -So if you're on the `master` branch and it's tracking `origin/master`, you can say something like `git merge @{u}` instead of `git merge origin/master` if you wish.(((@{u})))(((@{upstream}))) + وقتی یک شاخه رهگیری (tracking branch) تنظیم کرده باشید، می‌توانید شاخه بالادستی آن را با کوتاه‌شده‌های `@{upstream}` یا `@{u}` اشاره کنید. +پس اگر روی شاخه `master` باشید و این شاخه در حال رهگیری `origin/master` باشد، می‌توانید به جای نوشتن `git merge origin/master` بنویسید `git merge @{u}`.(((@{u})))(((@{upstream}))) ==== -If you want to see what tracking branches you have set up, you can use the `-vv` option to `git branch`. -This will list out your local branches with more information including what each branch is tracking and if your local branch is ahead, behind or both. +اگر بخواهید ببینید چه شاخه‌های پیگیری تنظیم کرده‌اید، می‌توانید از گزینه‌ی `-vv` دستور `git branch` استفاده کنید. +این دستور شاخه‌های محلی شما را همراه با اطلاعات بیشتر، از جمله شاخه‌ای که هر کدام پیگیری می‌کند و اینکه شاخه‌ی محلی جلوتر، عقب‌تر یا هر دو است، نمایش می‌دهد. [source,console] ---- @@ -194,36 +194,36 @@ $ git branch -vv testing 5ea463a Try something new ---- -So here we can see that our `iss53` branch is tracking `origin/iss53` and is "`ahead`" by two, meaning that we have two commits locally that are not pushed to the server. -We can also see that our `master` branch is tracking `origin/master` and is up to date. -Next we can see that our `serverfix` branch is tracking the `server-fix-good` branch on our `teamone` server and is ahead by three and behind by one, meaning that there is one commit on the server we haven't merged in yet and three commits locally that we haven't pushed. -Finally we can see that our `testing` branch is not tracking any remote branch. +در اینجا می‌توانیم ببینیم که شاخه‌ی `iss53` ما شاخه‌ی `origin/iss53` را پیگیری می‌کند و «جلو» است به اندازه‌ی دو، یعنی دو کامیت محلی داریم که هنوز به سرور ارسال نشده‌اند. +همچنین می‌بینیم که شاخه‌ی `master` ما شاخه‌ی `origin/master` را پیگیری می‌کند و به‌روز است. +بعد می‌بینیم که شاخه‌ی `serverfix` شاخه‌ی `server-fix-good` روی سرور `teamone` را پیگیری می‌کند و سه کامیت جلو و یک کامیت عقب است، یعنی یک کامیت روی سرور است که هنوز ادغام نکرده‌ایم و سه کامیت محلی داریم که هنوز ارسال نکرده‌ایم. +در نهایت، می‌بینیم که شاخه‌ی `testing` هیچ شاخه‌ی ریموتی را پیگیری نمی‌کند. -It's important to note that these numbers are only since the last time you fetched from each server. -This command does not reach out to the servers, it's telling you about what it has cached from these servers locally. -If you want totally up to date ahead and behind numbers, you'll need to fetch from all your remotes right before running this. -You could do that like this: +مهم است بدانید که این اعداد فقط از آخرین باری که از هر سرور fetch کرده‌اید به روز است. +این دستور به سرورها متصل نمی‌شود، بلکه اطلاعات کش شده از این سرورها را به شما نشان می‌دهد. +اگر بخواهید اعداد جلو یا عقب کاملاً به‌روز باشند، باید درست قبل از اجرای این دستور، از همه‌ی ریموت‌های خود fetch کنید. +می‌توانید این کار را این‌گونه انجام دهید: [source,console] ---- $ git fetch --all; git branch -vv ---- -==== Pulling +==== Pulling (دریافت کردن) (((pulling))) -While the `git fetch` command will fetch all the changes on the server that you don't have yet, it will not modify your working directory at all. -It will simply get the data for you and let you merge it yourself. -However, there is a command called `git pull` which is essentially a `git fetch` immediately followed by a `git merge` in most cases. -If you have a tracking branch set up as demonstrated in the last section, either by explicitly setting it or by having it created for you by the `clone` or `checkout` commands, `git pull` will look up what server and branch your current branch is tracking, fetch from that server and then try to merge in that remote branch. +دستور `git fetch` تمام تغییراتی را که روی سرور وجود دارد و شما هنوز ندارید، دریافت می‌کند، اما اصلاً دایرکتوری کاری شما را تغییر نمی‌دهد. +این دستور فقط داده‌ها را برای شما می‌گیرد و اجازه می‌دهد خودتان آنها را ادغام کنید. +با این حال، دستوری به نام `git pull` وجود دارد که در واقع همان `git fetch` است که بلافاصله در بیشتر موارد با یک `git merge` دنبال می‌شود. +اگر شاخه رهگیری تنظیم کرده باشید، مثل آنچه در بخش قبل توضیح داده شد، چه به صورت دستی تنظیم شده باشد یا به صورت خودکار توسط دستورات `clone` یا `checkout` ایجاد شده باشد، دستور `git pull` بررسی می‌کند که شاخه فعلی شما در حال رهگیری کدام سرور و شاخه است، از آن سرور دریافت می‌کند و سپس تلاش می‌کند آن شاخه راه دور را ادغام کند. [[_delete_branches]] -==== Deleting Remote Branches +==== Deleting Remote Branches (حذف شاخه ها) (((branches, deleting remote))) -Suppose you're done with a remote branch -- say you and your collaborators are finished with a feature and have merged it into your remote's `master` branch (or whatever branch your stable codeline is in). -You can delete a remote branch using the `--delete` option to `git push`. -If you want to delete your `serverfix` branch from the server, you run the following: +فرض کنید دیگر به یک شاخه راه دور نیازی ندارید — مثلاً شما و همکارانتان کار روی یک ویژگی را تمام کرده‌اید و آن را به شاخه `master` راه دور (یا هر شاخه‌ای که خط پایدار کد شما در آن است) ادغام کرده‌اید. +می‌توانید یک شاخه راه دور را با گزینه `--delete` در دستور `git push` حذف کنید. +اگر می‌خواهید شاخه `serverfix` را از سرور حذف کنید، دستور زیر را اجرا می‌کنید: [source,console] ---- @@ -232,5 +232,5 @@ To https://github.com/schacon/simplegit - [deleted] serverfix ---- -Basically all this does is to remove the pointer from the server. -The Git server will generally keep the data there for a while until a garbage collection runs, so if it was accidentally deleted, it's often easy to recover. +در اصل کاری که انجام می‌دهد این است که اشاره‌گر شاخه را از سرور حذف می‌کند. +سرور گیت معمولاً داده‌ها را برای مدتی نگه می‌دارد تا زمانی که عملیات جمع‌آوری زباله انجام شود، بنابراین اگر به اشتباه حذف شده باشد، اغلب بازیابی آن آسان است. \ No newline at end of file From b51d5a061630477a2309aad5b7c9125794fc4f43 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 5 Aug 2025 18:25:00 +0330 Subject: [PATCH 465/549] translate(03-git-branching): translated workflows to persian --- book/03-git-branching/sections/workflows.asc | 65 ++++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index 9e6f3922..0394b5d9 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -1,63 +1,62 @@ -=== Branching Workflows +=== Branching Workflows (جریان‌های کاری شاخه‌ای) -Now that you have the basics of branching and merging down, what can or should you do with them? -In this section, we'll cover some common workflows that this lightweight branching makes possible, so you can decide if you would like to incorporate them into your own development cycle. +حالا که اصول پایه‌ای شاخه‌زنی و ادغام را یاد گرفته‌اید، چه کارهایی می‌توانید یا باید با آن‌ها انجام دهید؟ +در این بخش، به برخی جریان‌های کاری رایجی که این شاخه‌زنی سبک‌وزن امکان‌پذیر می‌کند، می‌پردازیم تا بتوانید تصمیم بگیرید آیا مایلید آن‌ها را در چرخه توسعه خود به کار ببرید یا خیر. -==== Long-Running Branches +==== Long-Running Branches (شاخه‌های بلندمدت) (((branches, long-running))) -Because Git uses a simple three-way merge, merging from one branch into another multiple times over a long period is generally easy to do. -This means you can have several branches that are always open and that you use for different stages of your development cycle; you can merge regularly from some of them into others. +از آنجا که گیت از ادغام سه‌طرفه ساده استفاده می‌کند، ادغام مکرر از یک شاخه به شاخه‌ای دیگر در طول زمان معمولاً کار آسانی است. +این بدین معناست که می‌توانید چندین شاخه همیشه باز داشته باشید که برای مراحل مختلف چرخه توسعه خود از آن‌ها استفاده می‌کنید؛ می‌توانید به‌طور مرتب از برخی شاخه‌ها به شاخه‌های دیگر ادغام انجام دهید. -Many Git developers have a workflow that embraces this approach, such as having only code that is entirely stable in their `master` branch -- possibly only code that has been or will be released. -They have another parallel branch named `develop` or `next` that they work from or use to test stability -- it isn't necessarily always stable, but whenever it gets to a stable state, it can be merged into `master`. -It's used to pull in topic branches (short-lived branches, like your earlier `iss53` branch) when they're ready, to make sure they pass all the tests and don't introduce bugs. +بسیاری از توسعه‌دهندگان گیت دارای جریانی کاری هستند که این رویکرد را در بر می‌گیرد، مثلاً شاخه `master` آن‌ها فقط شامل کدی است که کاملاً پایدار است — احتمالاً تنها کدی که منتشر شده یا قرار است منتشر شود. +آن‌ها شاخه موازی دیگری به نام `develop` یا `next` دارند که از آنجا کار می‌کنند یا برای تست پایداری استفاده می‌کنند — لزوماً همیشه پایدار نیست، اما هرگاه به وضعیت پایداری برسد، می‌توان آن را به `master` ادغام کرد. +این شاخه برای جذب شاخه‌های موضوعی (شاخه‌های کوتاه‌مدت، مانند شاخه `iss53` شما در گذشته) وقتی آماده هستند، استفاده می‌شود تا اطمینان حاصل شود که همه تست‌ها را پاس می‌کنند و خطا وارد نمی‌کنند. -In reality, we're talking about pointers moving up the line of commits you're making. -The stable branches are farther down the line in your commit history, and the bleeding-edge branches are farther up the history. +در واقع، ما درباره اشاره‌گرهایی صحبت می‌کنیم که در خط کامیت‌هایی که ایجاد می‌کنید، به جلو حرکت می‌کنند. +شاخه‌های پایدار در تاریخچه کامیت‌های شما عقب‌تر هستند و شاخه‌های پیشرفته‌تر در بالاتر تاریخچه قرار دارند. .A linear view of progressive-stability branching image::images/lr-branches-1.png[A linear view of progressive-stability branching] -It's generally easier to think about them as work silos, where sets of commits graduate to a more stable silo when they're fully tested. +به‌طور کلی، راحت‌تر است که آن‌ها را به عنوان انبارهای کاری در نظر بگیرید، جایی که مجموعه‌ای از کامیت‌ها وقتی کاملاً تست می‌شوند، به انبار پایدارتر منتقل می‌شوند. [[lrbranch_b]] .A "`silo`" view of progressive-stability branching image::images/lr-branches-2.png[A “silo” view of progressive-stability branching] -You can keep doing this for several levels of stability. -Some larger projects also have a `proposed` or `pu` (proposed updates) branch that has integrated branches that may not be ready to go into the `next` or `master` branch. -The idea is that your branches are at various levels of stability; when they reach a more stable level, they're merged into the branch above them. -Again, having multiple long-running branches isn't necessary, but it's often helpful, especially when you're dealing with very large or complex projects. +می‌توانید این روند را برای چندین سطح پایداری ادامه دهید. +برخی پروژه‌های بزرگ‌تر همچنین شاخه‌ای به نام `proposed` یا `pu` (به‌روزرسانی‌های پیشنهادی) دارند که شاخه‌های ادغام شده‌ای در آن قرار دارد که ممکن است برای وارد شدن به شاخه‌های `next` یا `master` هنوز آماده نباشند. +ایده این است که شاخه‌های شما در سطوح مختلفی از پایداری قرار دارند؛ هنگامی که به سطح پایداری بالاتری رسیدند، به شاخه بالاتر خود ادغام می‌شوند. +دوباره، داشتن چند شاخه بلندمدت ضروری نیست، اما اغلب مفید است، به‌ویژه وقتی با پروژه‌های بسیار بزرگ یا پیچیده سر و کار دارید. [[_topic_branch]] -==== Topic Branches +==== Topic Branches (شاخه‌های موضوعی) (((branches, topic))) -Topic branches, however, are useful in projects of any size. -A topic branch is a short-lived branch that you create and use for a single particular feature or related work. -This is something you've likely never done with a VCS before because it's generally too expensive to create and merge branches. -But in Git it's common to create, work on, merge, and delete branches several times a day. +با این حال، شاخه‌های موضوعی در پروژه‌هایی با هر اندازه‌ای مفید هستند. +شاخه موضوعی یک شاخه کوتاه‌مدت است که شما برای یک ویژگی خاص یا کار مرتبط ایجاد و استفاده می‌کنید. +این کاری است که احتمالاً قبلاً با یک سیستم کنترل نسخه انجام نداده‌اید، زیرا معمولاً ایجاد و ادغام شاخه‌ها هزینه‌بر است. +اما در گیت، ایجاد، کار روی، ادغام و حذف شاخه‌ها چندین بار در روز امری معمول است. -You saw this in the last section with the `iss53` and `hotfix` branches you created. -You did a few commits on them and deleted them directly after merging them into your main branch. -This technique allows you to context-switch quickly and completely -- because your work is separated into silos where all the changes in that branch have to do with that topic, it's easier to see what has happened during code review and such. -You can keep the changes there for minutes, days, or months, and merge them in when they're ready, regardless of the order in which they were created or worked on. +شما این موضوع را در بخش قبلی با شاخه‌های `iss53` و `hotfix` که ایجاد کردید دیدید. +چند کامیت روی آن‌ها انجام دادید و بلافاصله پس از ادغام آن‌ها در شاخه اصلی، آن‌ها را حذف کردید. +این تکنیک به شما امکان می‌دهد سریع و کامل بین زمینه‌ها جابجا شوید — چون کار شما به بخش‌های جداگانه‌ای تقسیم شده که همه تغییرات آن شاخه مربوط به همان موضوع است، دیدن آنچه در بازبینی کد اتفاق افتاده آسان‌تر است. +شما می‌توانید تغییرات را برای چند دقیقه، روز یا ماه نگه دارید و وقتی آماده شدند، آن‌ها را ادغام کنید، بدون توجه به ترتیب ایجاد یا کار روی آن‌ها. -Consider an example of doing some work (on `master`), branching off for an issue (`iss91`), working on it for a bit, branching off the second branch to try another way of handling the same thing (`iss91v2`), going back to your `master` branch and working there for a while, and then branching off there to do some work that you're not sure is a good idea (`dumbidea` branch). -Your commit history will look something like this: +برای مثال، فرض کنید روی شاخه `master` کار می‌کنید، سپس برای یک مسئله شاخه‌ای به نام `iss91` ایجاد می‌کنید، کمی روی آن کار می‌کنید، سپس شاخه دوم `iss91v2` را برای امتحان راه دیگری در همان مسئله ایجاد می‌کنید، به شاخه `master` بازمی‌گردید و مدتی روی آن کار می‌کنید، سپس شاخه‌ای به نام `dumbidea` ایجاد می‌کنید برای کاری که مطمئن نیستید ایده خوبی باشد. +تاریخچه کامیت‌های شما چیزی شبیه به این خواهد بود: .Multiple topic branches image::images/topic-branches-1.png[Multiple topic branches] -Now, let's say you decide you like the second solution to your issue best (`iss91v2`); and you showed the `dumbidea` branch to your coworkers, and it turns out to be genius. -You can throw away the original `iss91` branch (losing commits `C5` and `C6`) and merge in the other two. -Your history then looks like this: +حالا فرض کنید تصمیم می‌گیرید راه‌حل دوم برای مسئله (شاخه `iss91v2`) را بیشتر می‌پسندید؛ و شاخه `dumbidea` را به همکارانتان نشان می‌دهید و معلوم می‌شود ایده‌ای نابغه‌وار است. +می‌توانید شاخه اصلی `iss91` را کنار بگذارید (و کامیت‌های `C5` و `C6` را از دست بدهید) و دو شاخه دیگر را ادغام کنید. +تاریخچه شما در آن صورت چنین خواهد بود: .History after merging `dumbidea` and `iss91v2` image::images/topic-branches-2.png[History after merging `dumbidea` and `iss91v2`] -We will go into more detail about the various possible workflows for your Git project in <>, so before you decide which branching scheme your next project will use, be sure to read that chapter. +ما در بخش <> به جزئیات بیشتری درباره جریان‌های کاری مختلف پروژه گیت شما خواهیم پرداخت، پس قبل از اینکه تصمیم بگیرید کدام طرح شاخه‌بندی را برای پروژه بعدی خود استفاده کنید، حتماً آن فصل را مطالعه نمایید. -It's important to remember when you're doing all this that these branches are completely local. -When you're branching and merging, everything is being done only in your Git repository -- there is no communication with the server. +مهم است که هنگام انجام همه این کارها به خاطر داشته باشید که این شاخه‌ها کاملاً محلی هستند. وقتی شاخه می‌زنید و ادغام می‌کنید، همه کارها فقط در مخزن گیت شما انجام می‌شود — هیچ ارتباطی با سرور برقرار نمی‌شود. \ No newline at end of file From f5daf8f7633a3ee86c0f77db0502941cbda4f15f Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 10:44:50 +0330 Subject: [PATCH 466/549] translate(04-git-server): translated generation ssh key to persian --- .../sections/generating-ssh-key.asc | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index d1a61daf..34534ec5 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -1,13 +1,13 @@ [[_generate_ssh_key]] -=== Generating Your SSH Public Key +=== Generating Your SSH Public Key (ایجاد کلید عمومی SSH شما) (((SSH keys))) -Many Git servers authenticate using SSH public keys. -In order to provide a public key, each user in your system must generate one if they don't already have one. -This process is similar across all operating systems. -First, you should check to make sure you don't already have a key. -By default, a user's SSH keys are stored in that user's `~/.ssh` directory. -You can easily check to see if you have a key already by going to that directory and listing the contents: +بسیاری از سرورهای گیت از کلیدهای عمومی SSH برای احراز هویت استفاده می‌کنند. +برای ارائه یک کلید عمومی، هر کاربر در سیستم شما باید در صورتی که قبلاً کلیدی ندارد، یک کلید جدید ایجاد کند. +این فرآیند در تمامی سیستم‌عامل‌ها مشابه است. +ابتدا باید بررسی کنید که آیا از قبل کلیدی دارید یا خیر. +به‌طور پیش‌فرض، کلیدهای SSH یک کاربر در پوشه‌ی `~/.ssh` همان کاربر ذخیره می‌شوند. +شما می‌توانید به‌راحتی با رفتن به آن پوشه و فهرست کردن محتویات، بررسی کنید که کلید دارید یا نه: [source,console] ---- @@ -17,9 +17,9 @@ authorized_keys2 id_dsa known_hosts config id_dsa.pub ---- -You're looking for a pair of files named something like `id_dsa` or `id_rsa` and a matching file with a `.pub` extension. -The `.pub` file is your public key, and the other file is the corresponding private key. -If you don't have these files (or you don't even have a `.ssh` directory), you can create them by running a program called `ssh-keygen`, which is provided with the SSH package on Linux/macOS systems and comes with Git for Windows: +شما به دنبال جفت فایل‌هایی با نام‌هایی مانند `id_dsa` یا `id_rsa` و یک فایل هم‌نام با پسوند `.pub` هستید. +فایل `.pub` کلید عمومی شما است و فایل دیگر کلید خصوصی متناظر با آن می‌باشد. +اگر این فایل‌ها را ندارید (یا حتی پوشه `.ssh` وجود ندارد)، می‌توانید با اجرای برنامه‌ای به نام `ssh-keygen` آنها را ایجاد کنید. این برنامه در بسته SSH روی سیستم‌های لینوکس و مک‌او‌اس موجود است و همراه با گیت در ویندوز نصب می‌شود: [source,console] ---- @@ -35,13 +35,13 @@ The key fingerprint is: d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local ---- -First it confirms where you want to save the key (`.ssh/id_rsa`), and then it asks twice for a passphrase, which you can leave empty if you don't want to type a password when you use the key. -However, if you do use a password, make sure to add the `-o` option; it saves the private key in a format that is more resistant to brute-force password cracking than is the default format. -You can also use the `ssh-agent` tool to prevent having to enter the password each time. +ابتدا محل ذخیره کلید را تایید می‌کند (`.ssh/id_rsa`) و سپس دو بار از شما می‌خواهد رمز عبوری وارد کنید که اگر نمی‌خواهید هنگام استفاده از کلید رمز بزنید، می‌توانید آن را خالی بگذارید. +با این حال، اگر رمز عبور استفاده می‌کنید، حتماً گزینه `-o` را اضافه کنید؛ این گزینه کلید خصوصی را به فرمتی ذخیره می‌کند که در مقابل حملات حدس رمز مقاوم‌تر از فرمت پیش‌فرض است. +همچنین می‌توانید از ابزار `ssh-agent` استفاده کنید تا مجبور نباشید هر بار رمز عبور را وارد کنید. -Now, each user that does this has to send their public key to you or whoever is administrating the Git server (assuming you're using an SSH server setup that requires public keys). -All they have to do is copy the contents of the `.pub` file and email it. -The public keys look something like this: +اکنون هر کاربری که این کار را انجام می‌دهد باید کلید عمومی خود را برای شما یا مسئول مدیریت سرور گیت ارسال کند (فرض بر این است که از سرور SSH استفاده می‌کنید که به کلیدهای عمومی نیاز دارد). +کافی است محتوای فایل `.pub` را کپی کرده و ایمیل کند. +کلیدهای عمومی معمولاً چیزی شبیه به این هستند: [source,console] ---- @@ -54,4 +54,4 @@ mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local ---- -For a more in-depth tutorial on creating an SSH key on multiple operating systems, see the GitHub guide on SSH keys at https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^]. +برای آموزش جامع‌تر درباره ایجاد کلید SSH در سیستم‌عامل‌های مختلف، راهنمای گیت‌هاب درباره کلیدهای SSH را در آدرس https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent[^] مشاهده کنید. \ No newline at end of file From 734868394b9136aa87d17fabe0f4bd60302bd07a Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 10:49:24 +0330 Subject: [PATCH 467/549] translate(04-git-server): translated git daemon to persian --- book/04-git-server/sections/git-daemon.asc | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/book/04-git-server/sections/git-daemon.asc b/book/04-git-server/sections/git-daemon.asc index 1fe17237..55ded531 100644 --- a/book/04-git-server/sections/git-daemon.asc +++ b/book/04-git-server/sections/git-daemon.asc @@ -1,28 +1,28 @@ -=== Git Daemon +=== Git Daemon (سرویس دهنده گیت) (((serving repositories, git protocol))) -Next we'll set up a daemon serving repositories using the "`Git`" protocol. -This is a common choice for fast, unauthenticated access to your Git data. -Remember that since this is not an authenticated service, anything you serve over this protocol is public within its network. +در مرحله بعد، یک سرویس‌دهنده (daemon) راه‌اندازی می‌کنیم که مخازن را با استفاده از پروتکل «Git» ارائه می‌دهد. +این روش، گزینه‌ای رایج برای دسترسی سریع و بدون احراز هویت به داده‌های Git شماست. +به یاد داشته باشید که از آنجا که این سرویس احراز هویت ندارد، هر چیزی که از طریق این پروتکل ارائه شود در شبکه‌ی مربوطه به صورت عمومی قابل دسترسی خواهد بود. -If you're running this on a server outside your firewall, it should be used only for projects that are publicly visible to the world. -If the server you're running it on is inside your firewall, you might use it for projects that a large number of people or computers (continuous integration or build servers) have read-only access to, when you don't want to have to add an SSH key for each. +اگر این سرویس را روی سروری خارج از دیوار آتش خود اجرا می‌کنید، باید فقط برای پروژه‌هایی استفاده شود که برای عموم قابل مشاهده هستند. +اگر سرور داخل دیوار آتش شما قرار دارد، می‌توانید از آن برای پروژه‌هایی استفاده کنید که تعداد زیادی از افراد یا سیستم‌ها (مانند سرورهای یکپارچه‌سازی مداوم یا ساخت) دسترسی فقط‌خواندنی دارند، و نمی‌خواهید برای هرکدام کلید SSH اضافه کنید. -In any case, the Git protocol is relatively easy to set up. -Basically, you need to run this command in a daemonized manner:(((git commands, daemon))) +در هر صورت، پروتکل Git نسبتاً آسان برای راه‌اندازی است. +در اصل، باید این دستور را به صورت یک سرویس‌دهنده اجرا کنید: (((دستورات git، daemon))) [source,console] ---- $ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ ---- -The `--reuseaddr` option allows the server to restart without waiting for old connections to time out, while the `--base-path` option allows people to clone projects without specifying the entire path, and the path at the end tells the Git daemon where to look for repositories to export. -If you're running a firewall, you'll also need to punch a hole in it at port 9418 on the box you're setting this up on. +گزینه `--reuseaddr` اجازه می‌دهد سرور بدون انتظار برای پایان اتصال‌های قدیمی مجدداً راه‌اندازی شود، در حالی که گزینه `--base-path` امکان کلون کردن پروژه‌ها را بدون نیاز به مشخص کردن مسیر کامل فراهم می‌کند، و مسیری که در انتهای دستور می‌آید به سرویس‌دهنده Git می‌گوید کجا به دنبال مخازن برای ارائه باشد. +اگر دیوارآتش دارید، باید پورت ۹۴۱۸ را روی سیستمی که این سرویس را راه‌اندازی می‌کنید باز کنید. -You can daemonize this process a number of ways, depending on the operating system you're running. +شما می‌توانید این فرآیند را به روش‌های مختلفی به صورت daemon اجرا کنید، بسته به سیستم‌عامل مورد استفاده. -Since `systemd` is the most common init system among modern Linux distributions, you can use it for that purpose. -Simply place a file in `/etc/systemd/system/git-daemon.service` with these contents: +از آنجایی که `systemd` رایج‌ترین سیستم init در توزیع‌های مدرن لینوکس است، می‌توانید از آن برای این منظور استفاده کنید. +کافی است فایلی با محتویات زیر در مسیر `/etc/systemd/system/git-daemon.service` قرار دهید: [source,console] ---- @@ -46,16 +46,16 @@ Group=git WantedBy=multi-user.target ---- -You might have noticed that Git daemon is started here with `git` as both group and user. -Modify it to fit your needs and make sure the provided user exists on the system. -Also, check that the Git binary is indeed located at `/usr/bin/git` and change the path if necessary. +شاید متوجه شده باشید که سرویس‌دهنده Git اینجا با `git` به عنوان گروه و کاربر اجرا شده است. +این موارد را متناسب با نیاز خود تغییر دهید و مطمئن شوید کاربر مربوطه روی سیستم وجود دارد. +همچنین بررسی کنید که فایل اجرایی Git واقعاً در مسیر `/usr/bin/git` قرار دارد و در صورت لزوم مسیر را تغییر دهید. -Finally, you'll run `systemctl enable git-daemon` to automatically start the service on boot, and can start and stop the service with, respectively, `systemctl start git-daemon` and `systemctl stop git-daemon`. +در نهایت، با اجرای دستور `systemctl enable git-daemon` سرویس به صورت خودکار در زمان راه‌اندازی سیستم فعال می‌شود، و می‌توانید سرویس را با دستورهای `systemctl start git-daemon` و `systemctl stop git-daemon` به ترتیب راه‌اندازی و متوقف کنید. -On other systems, you may want to use `xinetd`, a script in your `sysvinit` system, or something else -- as long as you get that command daemonized and watched somehow. +در سیستم‌های دیگر، ممکن است بخواهید از `xinetd`، اسکریپتی در سیستم `sysvinit` یا روش دیگری استفاده کنید — به شرطی که بتوانید آن دستور را به صورت daemon شده اجرا و مدیریت کنید. -Next, you have to tell Git which repositories to allow unauthenticated Git server-based access to. -You can do this in each repository by creating a file named `git-daemon-export-ok`. +در مرحله بعد باید به Git بگویید کدام مخازن اجازه دسترسی بدون احراز هویت از طریق سرور Git را دارند. +برای این کار، در هر مخزن باید فایلی به نام `git-daemon-export-ok` ایجاد کنید. [source,console] ---- @@ -63,4 +63,4 @@ $ cd /path/to/project.git $ touch git-daemon-export-ok ---- -The presence of that file tells Git that it's OK to serve this project without authentication. +وجود این فایل به Git اعلام می‌کند که ارائه این پروژه بدون نیاز به احراز هویت مجاز است. \ No newline at end of file From 667aa7809888162902ec47e9eb8c5c89c1941e0f Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 10:56:57 +0330 Subject: [PATCH 468/549] translate(04-git-server): translated git on a server to persian --- .../sections/git-on-a-server.asc | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/book/04-git-server/sections/git-on-a-server.asc b/book/04-git-server/sections/git-on-a-server.asc index 61847a99..15df7d90 100644 --- a/book/04-git-server/sections/git-on-a-server.asc +++ b/book/04-git-server/sections/git-on-a-server.asc @@ -1,18 +1,18 @@ [[_getting_git_on_a_server]] -=== Getting Git on a Server +=== Getting Git on a Server (راه‌اندازی گیت روی یک سرور) -Now we'll cover setting up a Git service running these protocols on your own server. +حالا به راه‌اندازی سرویس گیت که این پروتکل‌ها را روی سرور خودتان اجرا می‌کند، می‌پردازیم. [NOTE] ==== -Here we'll be demonstrating the commands and steps needed to do basic, simplified installations on a Linux-based server, though it's also possible to run these services on macOS or Windows servers. -Actually setting up a production server within your infrastructure will certainly entail differences in security measures or operating system tools, but hopefully this will give you the general idea of what's involved. +در اینجا دستورات و مراحل لازم برای نصب‌های ساده و پایه روی یک سرور مبتنی بر لینوکس را نشان می‌دهیم، هرچند امکان اجرای این سرویس‌ها روی سرورهای macOS یا ویندوز هم وجود دارد. +راه‌اندازی دقیق یک سرور تولیدی در زیرساخت شما قطعاً به تفاوت‌هایی در اقدامات امنیتی یا ابزارهای سیستم‌عامل نیاز دارد، اما امیدواریم این راهنما ایده کلی آنچه لازم است را به شما بدهد. ==== -In order to initially set up any Git server, you have to export an existing repository into a new bare repository -- a repository that doesn't contain a working directory. -This is generally straightforward to do. -In order to clone your repository to create a new bare repository, you run the clone command with the `--bare` option.(((git commands, clone, bare))) -By convention, bare repository directory names end with the suffix `.git`, like so: +برای راه‌اندازی اولیه هر سرور گیت، باید یک مخزن موجود را به یک مخزن بی‌کاربرد (bare repository) جدید تبدیل کنید — مخزنی که دایرکتوری کاری ندارد. +این کار معمولاً بسیار ساده است. +برای کلون کردن مخزن و ایجاد یک مخزن بی‌کاربرد جدید، دستور clone را با گزینه `--bare` اجرا می‌کنید. (((دستورات گیت، clone، bare))) +طبق قرارداد، نام دایرکتوری مخازن بی‌کاربرد با پسوند `.git` پایان می‌یابد، به این صورت: [source,console] ---- @@ -21,41 +21,41 @@ Cloning into bare repository 'my_project.git'... done. ---- -You should now have a copy of the Git directory data in your `my_project.git` directory. +حالا باید یک نسخه از داده‌های دایرکتوری گیت را در دایرکتوری `my_project.git` خود داشته باشید. -This is roughly equivalent to something like: +این تقریباً معادل چیزی شبیه به: [source,console] ---- $ cp -Rf my_project/.git my_project.git ---- -There are a couple of minor differences in the configuration file but, for your purpose, this is close to the same thing. -It takes the Git repository by itself, without a working directory, and creates a directory specifically for it alone. +چند تفاوت جزئی در فایل پیکربندی وجود دارد اما برای هدف شما تقریباً همان است. +این مخزن گیت را به تنهایی، بدون دایرکتوری کاری، می‌گیرد و دایرکتوری مخصوص به خودش را ایجاد می‌کند. [[_bare_repo]] -==== Putting the Bare Repository on a Server +==== Putting the Bare Repository on a Server (قرار دادن مخزن بی‌کاربرد روی سرور) -Now that you have a bare copy of your repository, all you need to do is put it on a server and set up your protocols. -Let's say you've set up a server called `git.example.com` to which you have SSH access, and you want to store all your Git repositories under the `/srv/git` directory. -Assuming that `/srv/git` exists on that server, you can set up your new repository by copying your bare repository over: +حالا که یک نسخه بی‌کاربرد از مخزن خود دارید، تنها کاری که باید بکنید این است که آن را روی یک سرور قرار داده و پروتکل‌های خود را تنظیم کنید. +فرض کنیم یک سرور به نام `git.example.com` راه‌اندازی کرده‌اید که به آن دسترسی SSH دارید و می‌خواهید تمام مخازن گیت خود را زیر دایرکتوری `/srv/git` ذخیره کنید. +با فرض اینکه دایرکتوری `/srv/git` روی آن سرور وجود دارد، می‌توانید مخزن جدید خود را با کپی کردن مخزن بی‌کاربرد راه‌اندازی کنید: [source,console] ---- $ scp -r my_project.git user@git.example.com:/srv/git ---- -At this point, other users who have SSH-based read access to the `/srv/git` directory on that server can clone your repository by running: +در این مرحله، سایر کاربران که دسترسی خواندن مبتنی بر SSH به دایرکتوری `/srv/git` روی آن سرور دارند، می‌توانند مخزن شما را با اجرای دستور زیر کلون کنند: [source,console] ---- $ git clone user@git.example.com:/srv/git/my_project.git ---- -If a user SSHs into a server and has write access to the `/srv/git/my_project.git` directory, they will also automatically have push access. +اگر کاربری با SSH وارد سرور شود و دسترسی نوشتن به دایرکتوری `/srv/git/my_project.git` داشته باشد، به طور خودکار دسترسی ارسال (push) هم خواهد داشت. -Git will automatically add group write permissions to a repository properly if you run the `git init` command with the `--shared` option. -Note that by running this command, you will not destroy any commits, refs, etc. in the process.(((git commands, init, bare))) +گیت به طور خودکار مجوزهای نوشتن گروهی را به یک مخزن به درستی اضافه می‌کند اگر دستور `git init` را با گزینه `--shared` اجرا کنید. +توجه داشته باشید که اجرای این دستور، هیچ کامیت، مرجع و غیره‌ای را حذف یا تخریب نمی‌کند.(((git commands, init, bare))) [source,console] ---- @@ -64,38 +64,38 @@ $ cd /srv/git/my_project.git $ git init --bare --shared ---- -You see how easy it is to take a Git repository, create a bare version, and place it on a server to which you and your collaborators have SSH access. -Now you're ready to collaborate on the same project. +می‌بینید چقدر آسان است که یک مخزن گیت را گرفته، نسخه بی‌کاربردی از آن بسازید و روی یک سرور قرار دهید که شما و همکارانتان به آن از طریق SSH دسترسی دارید. +حالا آماده‌اید تا روی همان پروژه همکاری کنید. -It's important to note that this is literally all you need to do to run a useful Git server to which several people have access -- just add SSH-able accounts on a server, and stick a bare repository somewhere that all those users have read and write access to. -You're ready to go -- nothing else needed. +مهم است بدانید که واقعاً همین مقدار برای راه‌اندازی یک سرور گیت مفید که چند نفر به آن دسترسی داشته باشند کافی است — فقط باید حساب‌های SSH روی یک سرور اضافه کنید و یک مخزن بی‌کاربرد در جایی قرار دهید که همه کاربران دسترسی خواندن و نوشتن داشته باشند. +آماده‌اید — هیچ چیز دیگری لازم نیست. -In the next few sections, you'll see how to expand to more sophisticated setups. -This discussion will include not having to create user accounts for each user, adding public read access to repositories, setting up web UIs and more. -However, keep in mind that to collaborate with a couple of people on a private project, all you _need_ is an SSH server and a bare repository. +در بخش‌های بعدی خواهید دید چگونه می‌توان به تنظیمات پیشرفته‌تر گسترش داد. +این بحث شامل عدم نیاز به ایجاد حساب کاربری برای هر فرد، افزودن دسترسی خواندن عمومی به مخازن، راه‌اندازی رابط‌های وب و موارد دیگر خواهد بود. +اما به یاد داشته باشید که برای همکاری با چند نفر روی یک پروژه خصوصی، تنها چیزی که _نیاز_ دارید یک سرور SSH و یک مخزن بی‌کاربرد است. -==== Small Setups +==== Small Setups (تنظیمات کوچک) -If you're a small outfit or are just trying out Git in your organization and have only a few developers, things can be simple for you. -One of the most complicated aspects of setting up a Git server is user management. -If you want some repositories to be read-only for certain users and read/write for others, access and permissions can be a bit more difficult to arrange. +اگر یک گروه کوچک هستید یا فقط می‌خواهید گیت را در سازمان خود امتحان کنید و توسعه‌دهندگان کمی دارید، اوضاع می‌تواند برایتان ساده باشد. +یکی از پیچیده‌ترین جنبه‌های راه‌اندازی سرور گیت، مدیریت کاربران است. +اگر بخواهید برخی مخازن فقط برای برخی کاربران فقط خواندنی و برای دیگران خواندنی/نوشتنی باشد، دسترسی‌ها و مجوزها ممکن است کمی سخت‌تر تنظیم شوند. -===== SSH Access +===== SSH Access (دسترسی SSH) (((serving repositories, SSH))) -If you have a server to which all your developers already have SSH access, it's generally easiest to set up your first repository there, because you have to do almost no work (as we covered in the last section). -If you want more complex access control type permissions on your repositories, you can handle them with the normal filesystem permissions of your server's operating system. + اگر سروری دارید که همه توسعه‌دهندگان شما قبلاً به آن دسترسی SSH دارند، معمولاً آسان‌ترین کار این است که اولین مخزن خود را روی همان سرور راه‌اندازی کنید، زیرا تقریباً نیازی به انجام کار اضافی ندارید (همانطور که در بخش قبل توضیح داده شد). +اگر می‌خواهید کنترل دسترسی پیچیده‌تری روی مخازن خود داشته باشید، می‌توانید از مجوزهای معمول سیستم فایل سیستم‌عامل سرور خود استفاده کنید. -If you want to place your repositories on a server that doesn't have accounts for everyone on your team for whom you want to grant write access, then you must set up SSH access for them. -We assume that if you have a server with which to do this, you already have an SSH server installed, and that's how you're accessing the server. +اگر می‌خواهید مخازن خود را روی سروری قرار دهید که حساب کاربری برای همه اعضای تیم شما که می‌خواهید به آنها دسترسی نوشتن بدهید، ندارد، باید برای آنها دسترسی SSH تنظیم کنید. +فرض می‌کنیم اگر سروری برای این کار دارید، قبلاً سرور SSH روی آن نصب شده و شما از طریق همین سرویس به سرور دسترسی دارید. -There are a few ways you can give access to everyone on your team. -The first is to set up accounts for everybody, which is straightforward but can be cumbersome. -You may not want to run `adduser` (or the possible alternative `useradd`) and have to set temporary passwords for every new user. +چند روش برای دادن دسترسی به همه اعضای تیم وجود دارد. +اولین روش ایجاد حساب کاربری برای هر نفر است که ساده است اما ممکن است زمان‌بر باشد. +ممکن است نخواهید برای هر کاربر جدید دستور `adduser` (یا جایگزین احتمالی آن `useradd`) را اجرا کنید و برای هر کدام رمز عبور موقتی تعیین نمایید. -A second method is to create a single 'git' user account on the machine, ask every user who is to have write access to send you an SSH public key, and add that key to the `~/.ssh/authorized_keys` file of that new 'git' account. -At that point, everyone will be able to access that machine via the 'git' account. -This doesn't affect the commit data in any way -- the SSH user you connect as doesn't affect the commits you've recorded. +روش دوم ایجاد یک حساب کاربری واحد به نام «git» روی سرور است، از هر کاربری که قرار است دسترسی نوشتن داشته باشد بخواهید کلید عمومی SSH خود را برای شما ارسال کند و آن کلید را به فایل `~/.ssh/authorized_keys` حساب «git» اضافه کنید. +در این صورت همه می‌توانند از طریق حساب «git» به آن سرور دسترسی پیدا کنند. +این موضوع به هیچ وجه روی داده‌های کامیت تأثیر نمی‌گذارد — کاربری که از طریق SSH به آن وصل می‌شوید، روی کامیت‌های ثبت‌شده تأثیری ندارد. -Another way to do it is to have your SSH server authenticate from an LDAP server or some other centralized authentication source that you may already have set up. -As long as each user can get shell access on the machine, any SSH authentication mechanism you can think of should work. +روش دیگر این است که سرور SSH شما از طریق یک سرور LDAP یا منبع احراز هویت متمرکز دیگری که ممکن است قبلاً راه‌اندازی کرده باشید، کاربران را احراز هویت کند. +تا زمانی که هر کاربر بتواند به شل سرور دسترسی داشته باشد، هر مکانیزم احراز هویتی که به آن فکر کنید باید کار کند. \ No newline at end of file From 51e0eedb8e503240c29daf334ddd38669718c94a Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 11:07:00 +0330 Subject: [PATCH 469/549] translate(04-git-server): translated gitlab to persian --- book/04-git-server/sections/gitlab.asc | 150 ++++++++++++------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 97de7893..9c18a7e9 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -1,99 +1,99 @@ -=== GitLab +=== GitLab (گیت‌لب) (((serving repositories, GitLab)))(((GitLab))) -GitWeb is pretty simplistic though. -If you're looking for a modern, fully featured Git server, there are several open source solutions out there that you can install instead. -As GitLab is one of the popular ones, we'll cover installing and using it as an example. -This is harder than the GitWeb option and will require more maintenance, but it is a fully featured option. +گیت‌وب نسبتاً ساده است. +اگر به دنبال یک سرور گیت مدرن و کامل هستید، چندین راه‌حل متن‌باز وجود دارد که می‌توانید به جای آن نصب کنید. +از آنجایی که گیت‌لب یکی از محبوب‌ترین‌هاست، نصب و استفاده از آن را به عنوان نمونه بررسی می‌کنیم. +این گزینه نسبت به گیت‌وب سخت‌تر است و نیاز به نگهداری بیشتری دارد، اما یک گزینه کاملاً مجهز است. -==== Installation +==== Installation (نصب) -GitLab is a database-backed web application, so its installation is more involved than some other Git servers. -Fortunately, this process is well-documented and supported. -GitLab strongly recommends installing GitLab on your server via the official Omnibus GitLab package. +گیت‌لب یک برنامه وب مبتنی بر پایگاه داده است، بنابراین نصب آن پیچیده‌تر از برخی سرورهای گیت دیگر است. +خوشبختانه این فرایند به خوبی مستندسازی و پشتیبانی شده است. +گیت‌لب به شدت توصیه می‌کند که آن را روی سرور خود از طریق بسته رسمی Omnibus GitLab نصب کنید. -The other installation options are: +گزینه‌های نصب دیگر عبارتند از: -* GitLab Helm chart, for use with Kubernetes. -* Dockerized GitLab packages for use with Docker. -* From the source files. -* Cloud providers such as AWS, Google Cloud Platform, Azure, OpenShift and Digital Ocean. +* چارت Helm گیت‌لب برای استفاده با کوبرنتیز. +* بسته‌های داکریزه شده گیت‌لب برای استفاده با داکر. +* نصب از فایل‌های منبع. +* ارائه‌دهندگان ابری مانند AWS، Google Cloud Platform، Azure، OpenShift و Digital Ocean. -For more information read the https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme^]. +برای اطلاعات بیشتر به https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme^] مراجعه کنید. -==== Administration +==== Administration (مدیریت) -GitLab's administration interface is accessed over the web. -Simply point your browser to the hostname or IP address where GitLab is installed, and log in as the `root` user. -The password will depend on your installation type but by default, Omnibus GitLab automatically generates a password for and stores it to /etc/gitlab/initial_root_password for at least 24 hours. -Follow the documentation for more details. -After you've logged in, click the "`Admin area`" icon in the menu at the top right. +رابط مدیریت گیت‌لب از طریق وب قابل دسترسی است. +فقط مرورگر خود را به نام میزبان یا آدرس IP که گیت‌لب روی آن نصب شده است، هدایت کنید و با کاربر `root` وارد شوید. +رمز عبور بسته به نوع نصب شما متفاوت است اما به طور پیش‌فرض، Omnibus GitLab به صورت خودکار رمز عبوری ایجاد می‌کند و آن را حداقل به مدت ۲۴ ساعت در /etc/gitlab/initial_root_password ذخیره می‌کند. +برای جزئیات بیشتر مستندات را دنبال کنید. +پس از ورود، روی آیکون «منطقه مدیریت» در منوی بالای سمت راست کلیک کنید. [[gitlab_menu]] .The "`Admin area`" item in the GitLab menu image::images/gitlab-menu.png[The “Admin area” item in the GitLab menu] -===== Users +===== Users (کاربران) -Everybody using your GitLab server must have a user account. -User accounts are quite simple, they mainly contain personal information attached to login data. -Each user account has a *namespace*, which is a logical grouping of projects that belong to that user. -If the user +jane+ had a project named +project+, that project's URL would be `http://server/jane/project`. +همه کسانی که از سرور گیت‌لب شما استفاده می‌کنند باید حساب کاربری داشته باشند. +حساب‌های کاربری ساده هستند و عمدتاً شامل اطلاعات شخصی مرتبط با داده‌های ورود به سیستم می‌شوند. +هر حساب کاربری یک *فضای نام* دارد که گروه‌بندی منطقی پروژه‌هایی است که به آن کاربر تعلق دارند. +اگر کاربر +jane+ پروژه‌ای به نام +project+ داشته باشد، آدرس آن پروژه به صورت `http://server/jane/project` خواهد بود. [[gitlab_users]] .The GitLab user administration screen image::images/gitlab-users.png[The GitLab user administration screen] -You can remove a user account in two ways: -"`Blocking`" a user prevents them from logging into the GitLab instance, but all of the data under that user's namespace will be preserved, and commits signed with that user's email address will still link back to their profile. +شما می‌توانید یک حساب کاربری را به دو روش حذف کنید: +«مسدود کردن» کاربر مانع از ورود او به نمونه گیت‌لب می‌شود، اما همه داده‌های زیر فضای نام آن کاربر حفظ می‌شود و کامیت‌هایی که با ایمیل آن کاربر امضا شده‌اند همچنان به پروفایل او لینک می‌شوند. -"`Destroying`" a user, on the other hand, completely removes them from the database and filesystem. -All projects and data in their namespace is removed, and any groups they own will also be removed. -This is obviously a much more permanent and destructive action, and you will rarely need it. +«حذف» کاربر، از سوی دیگر، او را به طور کامل از پایگاه داده و سیستم فایل پاک می‌کند. +تمام پروژه‌ها و داده‌های فضای نام او حذف شده و هر گروهی که مالک آن باشد نیز برداشته می‌شود. +این اقدام بسیار دائمی و مخرب است و به ندرت به آن نیاز خواهید داشت. [[_gitlab_groups_section]] -===== Groups +===== Groups (گروه ها) -A GitLab group is a collection of projects, along with data about how users can access those projects. -Each group has a project namespace (the same way that users do), so if the group +training+ has a project +materials+, its URL would be `http://server/training/materials`. +گروه گیت‌لب مجموعه‌ای از پروژه‌ها به همراه اطلاعاتی درباره نحوه دسترسی کاربران به آن پروژه‌هاست. +هر گروه یک فضای نام پروژه دارد (مانند کاربران)؛ بنابراین اگر گروه +training+ پروژه‌ای به نام +materials+ داشته باشد، آدرس آن پروژه `http://server/training/materials` خواهد بود. [[gitlab_groups]] .The GitLab group administration screen image::images/gitlab-groups.png[The GitLab group administration screen] -Each group is associated with a number of users, each of which has a level of permissions for the group's projects and the group itself. -These range from "`Guest`" (issues and chat only) to "`Owner`" (full control of the group, its members, and its projects). -The types of permissions are too numerous to list here, but GitLab has a helpful link on the administration screen. +هر گروه با تعدادی کاربر مرتبط است که هر کدام سطح دسترسی خاصی به پروژه‌های گروه و خود گروه دارند. +این سطوح از «مهمان» (فقط مسائل و چت) تا «مالک» (کنترل کامل گروه، اعضا و پروژه‌ها) متغیر است. +انواع مجوزها بسیار زیاد است و نمی‌توان همه را اینجا فهرست کرد، اما گیت‌لب لینک مفیدی در صفحه مدیریت دارد. -===== Projects +===== Projects (پروژه ها) -A GitLab project roughly corresponds to a single Git repository. -Every project belongs to a single namespace, either a user or a group. -If the project belongs to a user, the owner of the project has direct control over who has access to the project; if the project belongs to a group, the group's user-level permissions will take effect. +یک پروژه در گیت‌لب تقریباً متناظر با یک مخزن گیت است. +هر پروژه به یک فضای نام تعلق دارد، یا یک کاربر یا یک گروه. +اگر پروژه متعلق به یک کاربر باشد، مالک پروژه مستقیماً کنترل دسترسی به آن را دارد؛ اگر پروژه متعلق به یک گروه باشد، مجوزهای سطح کاربر گروه اعمال می‌شود. -Every project has a visibility level, which controls who has read access to that project's pages and repository. -If a project is _Private_, the project's owner must explicitly grant access to specific users. -An _Internal_ project is visible to any logged-in user, and a _Public_ project is visible to anyone. -Note that this controls both `git fetch` access as well as access to the web UI for that project. +هر پروژه یک سطح دسترسی دارد که مشخص می‌کند چه کسانی می‌توانند به صفحات و مخزن آن دسترسی خواندنی داشته باشند. +اگر پروژه _خصوصی_ باشد، مالک پروژه باید به طور صریح دسترسی به کاربران خاصی بدهد. +پروژه _داخلی_ برای هر کاربر وارد شده قابل مشاهده است و پروژه _عمومی_ برای همه قابل دیدن است. +توجه داشته باشید که این کنترل هم دسترسی `git fetch` و هم دسترسی به رابط وب پروژه را شامل می‌شود. -===== Hooks +===== Hooks (هوک ها) -GitLab includes support for hooks, both at a project or system level. -For either of these, the GitLab server will perform an HTTP POST with some descriptive JSON whenever relevant events occur. -This is a great way to connect your Git repositories and GitLab instance to the rest of your development automation, such as CI servers, chat rooms, or deployment tools. +گیت‌لب از هوک‌ها پشتیبانی می‌کند، هم در سطح پروژه و هم در سطح سیستم. +در هر یک از این موارد، سرور گیت‌لب هر زمان رویدادهای مرتبط رخ دهد، یک درخواست HTTP POST با یک JSON توصیفی ارسال می‌کند. +این راهی عالی برای اتصال مخازن گیت و نمونه گیت‌لب شما به سایر ابزارهای اتوماسیون توسعه مانند سرورهای CI، اتاق‌های گفتگو یا ابزارهای استقرار است. -==== Basic Usage +==== Basic Usage (استفاده پایه) -The first thing you'll want to do with GitLab is create a new project. -You can do this by clicking on the "`+`" icon on the toolbar. -You'll be asked for the project's name, which namespace it should belong to, and what its visibility level should be. -Most of what you specify here isn't permanent, and can be changed later through the settings interface. -Click "`Create Project`", and you're done. + اولین کاری که با گیت‌لب می‌خواهید انجام دهید، ایجاد یک پروژه جدید است. +می‌توانید این کار را با کلیک روی آیکون "`+`" در نوار ابزار انجام دهید. +از شما خواسته می‌شود نام پروژه، فضای نامی که باید به آن تعلق داشته باشد، و سطح دید آن را مشخص کنید. +بیشتر مواردی که اینجا تعیین می‌کنید دائمی نیستند و بعداً می‌توان آنها را از طریق رابط تنظیمات تغییر داد. +روی "`Create Project`" کلیک کنید و کار تمام است. -Once the project exists, you'll probably want to connect it with a local Git repository. -Each project is accessible over HTTPS or SSH, either of which can be used to configure a Git remote. -The URLs are visible at the top of the project's home page. -For an existing local repository, this command will create a remote named `gitlab` to the hosted location: +پس از ایجاد پروژه، احتمالاً می‌خواهید آن را به یک مخزن گیت محلی متصل کنید. +هر پروژه از طریق HTTPS یا SSH قابل دسترسی است و هرکدام می‌توانند برای پیکربندی یک ریموت گیت استفاده شوند. +آدرس‌های URL در بالای صفحه اصلی پروژه قابل مشاهده‌اند. +برای یک مخزن محلی موجود، این فرمان یک ریموت به نام `gitlab` به مکان میزبانی شده ایجاد می‌کند: [source,console] ---- @@ -107,24 +107,24 @@ If you don't have a local copy of the repository, you can simply do this: $ git clone https://server/namespace/project.git ---- -The web UI provides access to several useful views of the repository itself. -Each project's home page shows recent activity, and links along the top will lead you to views of the project's files and commit log. +رابط کاربری وب دسترسی به چندین نمای مفید از خود مخزن را فراهم می‌کند. +صفحه اصلی هر پروژه فعالیت‌های اخیر را نشان می‌دهد و لینک‌های بالای صفحه شما را به نمای فایل‌ها و گزارش کامیت‌های پروژه هدایت می‌کنند. -==== Working Together +==== Working Together (همکاری گروهی) -The simplest way of working together on a GitLab project is by giving each user direct push access to the Git repository. -You can add a user to a project by going to the "`Members`" section of that project's settings, and associating the new user with an access level (the different access levels are discussed a bit in <<_gitlab_groups_section>>). -By giving a user an access level of "`Developer`" or above, that user can push commits and branches directly to the repository. +ساده‌ترین روش برای همکاری در یک پروژه گیت‌لب، دادن دسترسی مستقیم برای پوش به هر کاربر است. +می‌توانید با رفتن به بخش "`Members`" در تنظیمات پروژه، یک کاربر را اضافه کنید و سطح دسترسی مناسبی به او اختصاص دهید (سطوح دسترسی مختلف در <<_gitlab_groups_section>> کمی توضیح داده شده‌اند). +با دادن سطح دسترسی "`Developer`" یا بالاتر به یک کاربر، آن کاربر قادر خواهد بود کامیت‌ها و شاخه‌ها را مستقیماً به مخزن پوش کند. -Another, more decoupled way of collaboration is by using merge requests. -This feature enables any user that can see a project to contribute to it in a controlled way. -Users with direct access can simply create a branch, push commits to it, and open a merge request from their branch back into `master` or any other branch. -Users who don't have push permissions for a repository can "`fork`" it to create their own copy, push commits to _their_ copy, and open a merge request from their fork back to the main project. -This model allows the owner to be in full control of what goes into the repository and when, while allowing contributions from untrusted users. +روش دیگری که همکاری را مستقل‌تر می‌کند، استفاده از درخواست‌های ادغام (merge requests) است. +این ویژگی به هر کاربری که بتواند پروژه را ببیند اجازه می‌دهد به شیوه‌ای کنترل شده مشارکت کند. +کاربرانی که دسترسی مستقیم دارند، می‌توانند به سادگی یک شاخه بسازند، کامیت‌ها را به آن پوش کنند و یک درخواست ادغام از شاخه خود به شاخه `master` یا هر شاخه دیگری باز کنند. +کاربرانی که مجوز پوش ندارند، می‌توانند مخزن را "`fork`" کنند تا نسخه خود را بسازند، کامیت‌ها را به نسخه خود پوش کنند و سپس درخواست ادغام از فورک خود به پروژه اصلی باز کنند. +این مدل به مالک اجازه می‌دهد کنترل کامل روی موارد وارد شده به مخزن و زمان آنها داشته باشد، در حالی که امکان مشارکت کاربران غیرمطمئن را فراهم می‌کند. -Merge requests and issues are the main units of long-lived discussion in GitLab. -Each merge request allows a line-by-line discussion of the proposed change (which supports a lightweight kind of code review), as well as a general overall discussion thread. -Both can be assigned to users, or organized into milestones. +درخواست‌های ادغام و مسائل (issues) واحدهای اصلی بحث‌های طولانی‌مدت در گیت‌لب هستند. +هر درخواست ادغام امکان بحث خط به خط درباره تغییر پیشنهادی (که نوعی بازبینی کد سبک است) و همچنین یک رشته بحث کلی و عمومی را فراهم می‌کند. +همگی می‌توانند به کاربران اختصاص داده شده یا در قالب مایلستون‌ها سازماندهی شوند. -This section is focused mainly on the Git-related features of GitLab, but as a mature project, it provides many other features to help your team work together, such as project wikis and system maintenance tools. -One benefit to GitLab is that, once the server is set up and running, you'll rarely need to tweak a configuration file or access the server via SSH; most administration and general usage can be done through the in-browser interface. +این بخش عمدتاً بر ویژگی‌های مرتبط با گیت در گیت‌لب تمرکز دارد، اما به عنوان یک پروژه بالغ، امکانات بسیاری دیگر برای کمک به همکاری تیمی ارائه می‌دهد، مانند ویکی‌های پروژه و ابزارهای نگهداری سیستم. +یکی از مزایای گیت‌لب این است که پس از راه‌اندازی و اجرای سرور، به ندرت نیاز به تغییر فایل پیکربندی یا دسترسی به سرور از طریق SSH خواهید داشت؛ بیشتر مدیریت و استفاده عمومی از طریق رابط مرورگر انجام می‌شود. \ No newline at end of file From 8a3b84acf59ad4074b4e51eec2644a30a440d814 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 11:15:01 +0330 Subject: [PATCH 470/549] translate(04-git-server): translated gitweb to persian --- book/04-git-server/sections/gitweb.asc | 36 +++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index 1565dc49..2df1947e 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -1,17 +1,17 @@ -=== GitWeb +=== GitWeb (گیت‌وب) (((serving repositories, GitWeb)))(((GitWeb))) -Now that you have basic read/write and read-only access to your project, you may want to set up a simple web-based visualizer. -Git comes with a CGI script called GitWeb that is sometimes used for this. +حال که به پروژه‌تان دسترسی پایه‌ای خواندن/نوشتن و فقط خواندنی دارید، ممکن است بخواهید یک نمایشگر ساده مبتنی بر وب راه‌اندازی کنید. +گیت همراه با یک اسکریپت CGI به نام GitWeb عرضه می‌شود که گاهی برای این منظور استفاده می‌شود. [[gitweb]] .The GitWeb web-based user interface image::images/git-instaweb.png[The GitWeb web-based user interface] -If you want to check out what GitWeb would look like for your project, Git comes with a command to fire up a temporary instance if you have a lightweight web server on your system like `lighttpd` or `webrick`. -On Linux machines, `lighttpd` is often installed, so you may be able to get it to run by typing `git instaweb` in your project directory. -If you're running macOS, Leopard comes preinstalled with Ruby, so `webrick` may be your best bet. -To start `instaweb` with a non-lighttpd handler, you can run it with the `--httpd` option.(((git commands, instaweb))) +اگر می‌خواهید ببینید GitWeb برای پروژه‌تان چگونه خواهد بود، گیت دستوری دارد که می‌تواند یک نمونه موقت راه‌اندازی کند، البته به شرطی که وب‌سرور سبکی مانند `lighttpd` یا `webrick` روی سیستم‌تان نصب باشد. +در سیستم‌های لینوکس، معمولاً `lighttpd` نصب است، پس ممکن است با تایپ کردن `git instaweb` در پوشه پروژه‌تان بتوانید آن را اجرا کنید. +اگر از macOS استفاده می‌کنید، نسخه Leopard به صورت پیش‌فرض Ruby دارد، پس احتمالاً `webrick` بهترین گزینه برای شماست. +برای راه‌اندازی `instaweb` با یک وب‌سرور غیر از lighttpd می‌توانید از گزینه `--httpd` استفاده کنید. [source,console] ---- @@ -20,19 +20,19 @@ $ git instaweb --httpd=webrick [2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0] ---- -That starts up an HTTPD server on port 1234 and then automatically starts a web browser that opens on that page. -It's pretty easy on your part. -When you're done and want to shut down the server, you can run the same command with the `--stop` option: +این دستور یک سرور HTTPD روی پورت ۱۲۳۴ راه‌اندازی می‌کند و به طور خودکار یک مرورگر وب را باز می‌کند که صفحه مربوطه را نمایش می‌دهد. +کار ساده‌ای است. +وقتی کارتان تمام شد و می‌خواهید سرور را خاموش کنید، می‌توانید همان دستور را با گزینه `--stop` اجرا کنید. [source,console] ---- $ git instaweb --httpd=webrick --stop ---- -If you want to run the web interface on a server all the time for your team or for an open source project you're hosting, you'll need to set up the CGI script to be served by your normal web server. -Some Linux distributions have a `gitweb` package that you may be able to install via `apt` or `dnf`, so you may want to try that first. -We'll walk through installing GitWeb manually very quickly. -First, you need to get the Git source code, which GitWeb comes with, and generate the custom CGI script: +اگر می‌خواهید رابط وب را دائماً روی یک سرور برای تیم‌تان یا پروژه متن‌باز میزبانی‌شده راه‌اندازی کنید، باید اسکریپت CGI را طوری تنظیم کنید که توسط وب‌سرور معمولی شما سرو شود. +برخی توزیع‌های لینوکس بسته‌ای به نام `gitweb` دارند که ممکن است بتوانید با `apt` یا `dnf` آن را نصب کنید، پس بهتر است ابتدا این روش را امتحان کنید. +ما به سرعت نصب دستی GitWeb را مرور می‌کنیم. +ابتدا باید کد منبع گیت را دریافت کنید که GitWeb همراه آن است و سپس اسکریپت CGI سفارشی را بسازید: [source,console] ---- @@ -47,8 +47,8 @@ make[2]: `GIT-VERSION-FILE' is up to date. $ sudo cp -Rf gitweb /var/www/ ---- -Notice that you have to tell the command where to find your Git repositories with the `GITWEB_PROJECTROOT` variable. -Now, you need to make Apache use CGI for that script, for which you can add a VirtualHost: +توجه کنید که باید به دستور بگویید مخازن گیت شما کجا قرار دارند، با استفاده از متغیر `GITWEB_PROJECTROOT`. +حالا باید به آپاچی بگویید که از CGI برای این اسکریپت استفاده کند، برای این کار می‌توانید یک VirtualHost اضافه کنید: [source,console] ---- @@ -66,5 +66,5 @@ Now, you need to make Apache use CGI for that script, for which you can add a Vi ---- -Again, GitWeb can be served with any CGI or Perl capable web server; if you prefer to use something else, it shouldn't be difficult to set up. -At this point, you should be able to visit `http://gitserver/` to view your repositories online. +دوباره تأکید می‌کنیم که GitWeb را می‌توان با هر وب‌سرور دارای قابلیت CGI یا Perl سرو کرد؛ اگر ترجیح می‌دهید از چیز دیگری استفاده کنید، راه‌اندازی آن دشوار نخواهد بود. +در این مرحله باید بتوانید با مراجعه به آدرس `http://gitserver/` مخازن خود را به صورت آنلاین مشاهده کنید. \ No newline at end of file From a12543a51d93d361f4cbde9dd6f4f76f1963f227 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Wed, 6 Aug 2025 11:16:07 +0330 Subject: [PATCH 471/549] translate(04-git-server): translated hosted to persian --- book/04-git-server/sections/hosted.asc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index 54eb7933..067803f9 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -1,10 +1,7 @@ -=== Third Party Hosted Options +=== Third Party Hosted Options (گزینه‌های میزبانی توسط شخص ثالث) -If you don't want to go through all of the work involved in setting up your own Git server, you have several options for hosting your Git projects on an external dedicated hosting site. -Doing so offers a number of advantages: a hosting site is generally quick to set up and easy to start projects on, and no server maintenance or monitoring is involved. -Even if you set up and run your own server internally, you may still want to use a public hosting site for your open source code -- it's generally easier for the open source community to find and help you with. +اگر نمی‌خواهید تمام مراحل راه‌اندازی سرور گیت خود را انجام دهید، چندین گزینه برای میزبانی پروژه‌های گیت خود در سایت‌های میزبانی اختصاصی خارجی دارید. استفاده از این روش مزایای زیادی دارد: معمولاً راه‌اندازی یک سایت میزبانی سریع و آسان است و شروع پروژه‌ها در آن ساده است، همچنین نیازی به نگهداری یا نظارت بر سرور نیست. حتی اگر سرور خود را به صورت داخلی راه‌اندازی و مدیریت کنید، ممکن است بخواهید برای کد منبع باز خود از یک سایت میزبانی عمومی استفاده کنید — این کار معمولاً برای جامعه منبع باز آسان‌تر است تا کد شما را پیدا کرده و به شما کمک کنند. -These days, you have a huge number of hosting options to choose from, each with different advantages and disadvantages. -To see an up-to-date list, check out the GitHosting page on the main Git wiki at https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitHosting.html[^]. +امروزه گزینه‌های بسیار زیادی برای میزبانی وجود دارد که هرکدام مزایا و معایب خاص خود را دارند. برای مشاهده فهرست به‌روز، صفحه GitHosting در ویکی اصلی گیت را در آدرس https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/GitHosting.html[^] ببینید. -We'll cover using GitHub in detail in <>, as it is the largest Git host out there and you may need to interact with projects hosted on it in any case, but there are dozens more to choose from should you not want to set up your own Git server. +ما استفاده از گیت‌هاب را به طور مفصل در <> بررسی خواهیم کرد، زیرا بزرگ‌ترین میزبان گیت است و احتمالاً در هر صورت نیاز دارید با پروژه‌های میزبانی شده روی آن تعامل داشته باشید، اما اگر نمی‌خواهید سرور گیت خود را راه‌اندازی کنید، ده‌ها گزینه دیگر نیز وجود دارند که می‌توانید از میان آنها انتخاب کنید. \ No newline at end of file From ad871bca699585ab73694cab2f276a59182f47ee Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Sat, 9 Aug 2025 11:20:47 +0330 Subject: [PATCH 472/549] translate(04-git-server): translated protocols to persian --- .idea/workspace.xml | 46 ++-- book/04-git-server/sections/protocols.asc | 246 +++++++++++----------- 2 files changed, 151 insertions(+), 141 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9f99c343..09271c82 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,7 @@ - - - + @@ -29,6 +27,14 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/03-git-branching", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.git.unshallow": "true", + "git-widget-placeholder": "book/translation/04-git-server", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "settings.editor.selected.configurable": "preferences.keymap", + "to.speed.mode.migration.done": "true", + "vue.rearranger.settings.migration": "true" } -}</component> +} @@ -97,6 +104,7 @@ + diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index ff226d1e..d449c5c3 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -1,98 +1,99 @@ -=== The Protocols +=== The Protocols (پروتکل‌ها) -Git can use four distinct protocols to transfer data: Local, HTTP, Secure Shell (SSH) and Git. -Here we'll discuss what they are and in what basic circumstances you would want (or not want) to use them. +گیت می‌تواند از چهار پروتکل متفاوت برای انتقال داده استفاده کند: محلی، HTTP، شل امن (SSH) و Git. در اینجا توضیح می‌دهیم که هر کدام چه هستند و در چه شرایط پایه‌ای ممکن است بخواهید از آن‌ها استفاده کنید (یا نکنید). -==== Local Protocol +==== Local Protocol (پروتکل های محلی) (((protocols, local))) -The most basic is the _Local protocol_, in which the remote repository is in another directory on the same host. -This is often used if everyone on your team has access to a shared filesystem such as an https://en.wikipedia.org/wiki/Network_File_System[NFS^] mount, or in the less likely case that everyone logs in to the same computer. -The latter wouldn't be ideal, because all your code repository instances would reside on the same computer, making a catastrophic loss much more likely. +اساس‌ترین روش، پروتکل محلی است که در آن مخزن راه دور در دایرکتوری دیگری روی همان میزبان قرار دارد. +این روش اغلب زمانی استفاده می‌شود که همه اعضای تیم به یک سیستم فایل مشترک مانند یک شبکه فایل NFS دسترسی داشته باشند، یا در شرایط کمتر محتمل که همه به یک کامپیوتر واحد وارد شوند. +روش دوم ایده‌آل نیست، زیرا تمام نسخه‌های مخزن کد شما روی یک کامپیوتر واحد قرار می‌گیرند و این احتمال از دست رفتن فاجعه‌بار داده‌ها را افزایش می‌دهد. -If you have a shared mounted filesystem, then you can clone, push to, and pull from a local file-based repository. -To clone a repository like this, or to add one as a remote to an existing project, use the path to the repository as the URL. -For example, to clone a local repository, you can run something like this: +اگر سیستم فایل مشترکی به صورت مونت شده دارید، می‌توانید مخزن محلی مبتنی بر فایل را کلون کنید، به آن پوش دهید و از آن پول بگیرید. +برای کلون کردن چنین مخزنی، یا اضافه کردن آن به عنوان یک ریموت به پروژه موجود، مسیر مخزن را به عنوان URL استفاده کنید. +برای مثال، برای کلون کردن یک مخزن محلی، می‌توانید چیزی شبیه به این را اجرا کنید: [source,console] ---- $ git clone /srv/git/project.git ---- -Or you can do this: +یا می‌توانید این کار را انجام دهید: [source,console] ---- $ git clone file:///srv/git/project.git ---- -Git operates slightly differently if you explicitly specify `file://` at the beginning of the URL. -If you just specify the path, Git tries to use hardlinks or directly copy the files it needs. -If you specify `file://`, Git fires up the processes that it normally uses to transfer data over a network, which is generally much less efficient. -The main reason to specify the `file://` prefix is if you want a clean copy of the repository with extraneous references or objects left out -- generally after an import from another VCS or something similar (see <> for maintenance tasks). -We'll use the normal path here because doing so is almost always faster. + گیت کمی متفاوت عمل می‌کند اگر صراحتاً در ابتدای URL عبارت `file://` را مشخص کنید. +اگر فقط مسیر را مشخص کنید، گیت سعی می‌کند از هاردلینک‌ها استفاده کند یا فایل‌های مورد نیازش را مستقیماً کپی کند. +اگر `file://` را مشخص کنید، گیت فرآیندهایی را راه‌اندازی می‌کند که معمولاً برای انتقال داده‌ها از طریق شبکه به کار می‌برد، که معمولاً بسیار کمتر بهینه است. +دلیل اصلی استفاده از پیشوند `file://` این است که بخواهید یک نسخه تمیز از مخزن داشته باشید که ارجاعات یا اشیاء اضافی در آن حذف شده باشند — معمولاً پس از وارد کردن از یک سیستم کنترل نسخه دیگر یا چیزی مشابه (برای وظایف نگهداری به <> مراجعه کنید). +ما اینجا از مسیر معمولی استفاده می‌کنیم چون تقریباً همیشه سریع‌تر است. -To add a local repository to an existing Git project, you can run something like this: +برای افزودن یک مخزن محلی به یک پروژه گیت موجود، می‌توانید چیزی مانند زیر را اجرا کنید: [source,console] ---- $ git remote add local_proj /srv/git/project.git ---- -Then, you can push to and pull from that remote via your new remote name `local_proj` as though you were doing so over a network. +سپس می‌توانید به صورت عادی، از طریق نام ریموت جدید خود `local_proj` به آن ریموت پوش و پول کنید، همان‌طور که انگار از طریق شبکه این کار را انجام می‌دهید. -===== The Pros +===== The Pros (مزایا) -The pros of file-based repositories are that they're simple and they use existing file permissions and network access. -If you already have a shared filesystem to which your whole team has access, setting up a repository is very easy. -You stick the bare repository copy somewhere everyone has shared access to and set the read/write permissions as you would for any other shared directory. -We'll discuss how to export a bare repository copy for this purpose in <>. +مزیت مخازن مبتنی بر فایل این است که ساده هستند و از مجوزهای فایل و دسترسی شبکه موجود استفاده می‌کنند. +اگر قبلاً یک سیستم فایل مشترک دارید که کل تیم شما به آن دسترسی دارد، راه‌اندازی مخزن بسیار آسان است. +کپی مخزن bare را در جایی قرار می‌دهید که همه به صورت مشترک به آن دسترسی دارند و مجوزهای خواندن/نوشتن را مانند هر دایرکتوری مشترک دیگری تنظیم می‌کنید. +ما درباره نحوه صادر کردن یک کپی bare از مخزن برای این منظور در <> صحبت خواهیم کرد. -This is also a nice option for quickly grabbing work from someone else's working repository. -If you and a co-worker are working on the same project and they want you to check something out, running a command like `git pull /home/john/project` is often easier than them pushing to a remote server and you subsequently fetching from it. +این گزینه همچنین برای گرفتن سریع کار از مخزن کاری شخص دیگری گزینه خوبی است. +اگر شما و همکارانتان روی یک پروژه کار می‌کنید و آنها می‌خواهند شما چیزی را بررسی کنید، اجرای دستوری مانند `git pull /home/john/project` اغلب راحت‌تر از این است که آنها به یک سرور ریموت پوش کنند و سپس شما از آنجا fetch بگیرید. -===== The Cons +===== The Cons (معایب) -The cons of this method are that shared access is generally more difficult to set up and reach from multiple locations than basic network access. -If you want to push from your laptop when you're at home, you have to mount the remote disk, which can be difficult and slow compared to network-based access. +معایب این روش این است که دسترسی مشترک معمولاً سخت‌تر از دسترسی شبکه‌ای ساده است و از چندین مکان قابل دسترسی نیست. +اگر بخواهید از لپ‌تاپ خود در خانه پوش کنید، باید دیسک ریموت را مونت کنید، که در مقایسه با دسترسی مبتنی بر شبکه می‌تواند دشوار و کند باشد. -It's important to mention that this isn't necessarily the fastest option if you're using a shared mount of some kind. -A local repository is fast only if you have fast access to the data. -A repository on NFS is often slower than the repository over SSH on the same server, allowing Git to run off local disks on each system. +مهم است ذکر شود که این لزوماً سریع‌ترین گزینه نیست اگر از یک سیستم فایل مشترک استفاده می‌کنید. +یک مخزن محلی تنها زمانی سریع است که دسترسی سریعی به داده‌ها داشته باشید. +مخزنی که روی NFS است معمولاً کندتر از مخزنی است که روی همان سرور از طریق SSH اجرا می‌شود، چون گیت می‌تواند روی دیسک‌های محلی هر سیستم اجرا شود. -Finally, this protocol does not protect the repository against accidental damage. -Every user has full shell access to the "`remote`" directory, and there is nothing preventing them from changing or removing internal Git files and corrupting the repository. +در نهایت، این پروتکل از مخزن در برابر آسیب‌های تصادفی محافظت نمی‌کند. +هر کاربر دسترسی کامل شل به دایرکتوری "`remote`" دارد و هیچ چیزی مانع تغییر یا حذف فایل‌های داخلی گیت و خراب کردن مخزن نمی‌شود. -==== The HTTP Protocols +==== The HTTP Protocols (پروتکل‌های HTTP) -Git can communicate over HTTP using two different modes. -Prior to Git 1.6.6, there was only one way it could do this which was very simple and generally read-only. -In version 1.6.6, a new, smarter protocol was introduced that involved Git being able to intelligently negotiate data transfer in a manner similar to how it does over SSH. -In the last few years, this new HTTP protocol has become very popular since it's simpler for the user and smarter about how it communicates. -The newer version is often referred to as the _Smart_ HTTP protocol and the older way as _Dumb_ HTTP. -We'll cover the newer Smart HTTP protocol first. +گیت می‌تواند از طریق HTTP با دو حالت مختلف ارتباط برقرار کند. +قبل از گیت نسخه 1.6.6، فقط یک روش ساده و عمدتاً فقط خواندنی وجود داشت. +در نسخه 1.6.6، یک پروتکل جدید و هوشمند معرفی شد که به گیت امکان می‌داد به‌طور هوشمندانه انتقال داده را به شکلی مشابه SSH مذاکره کند. +در چند سال اخیر، این پروتکل HTTP جدید بسیار محبوب شده چون برای کاربر ساده‌تر و در نحوه ارتباط هوشمندانه‌تر است. +نسخه جدید معمولاً به عنوان پروتکل HTTP هوشمند (_Smart_ HTTP) و نسخه قدیمی به عنوان HTTP ساده (_Dumb_ HTTP) شناخته می‌شود. +ما ابتدا پروتکل HTTP هوشمند را بررسی خواهیم کرد. -===== Smart HTTP + +===== Smart HTTP (HTTP هوشمند) (((protocols, smart HTTP))) -Smart HTTP operates very similarly to the SSH or Git protocols but runs over standard HTTPS ports and can use various HTTP authentication mechanisms, meaning it's often easier on the user than something like SSH, since you can use things like username/password authentication rather than having to set up SSH keys. -It has probably become the most popular way to use Git now, since it can be set up to both serve anonymously like the `git://` protocol, and can also be pushed over with authentication and encryption like the SSH protocol. -Instead of having to set up different URLs for these things, you can now use a single URL for both. -If you try to push and the repository requires authentication (which it normally should), the server can prompt for a username and password. -The same goes for read access. +HTTP هوشمند بسیار شبیه به پروتکل‌های SSH یا Git عمل می‌کند اما روی پورت‌های استاندارد HTTPS اجرا می‌شود و می‌تواند از مکانیزم‌های مختلف احراز هویت HTTP استفاده کند، یعنی اغلب برای کاربر آسان‌تر از چیزی مثل SSH است، چون می‌توانید از احراز هویت نام‌کاربری/رمز عبور استفاده کنید و نیازی به تنظیم کلیدهای SSH نیست. + +احتمالاً این محبوب‌ترین روش استفاده از گیت است چون می‌تواند به صورت ناشناس مانند پروتکل `git://` سرویس دهد و همچنین می‌توان با احراز هویت و رمزنگاری مانند پروتکل SSH روی آن پوش کرد. +به جای اینکه برای این کارها URLهای متفاوت تنظیم کنید، اکنون می‌توانید از یک URL واحد برای هر دو استفاده کنید. +اگر هنگام پوش کردن مخزن نیاز به احراز هویت داشت (که معمولاً باید داشته باشد)، سرور می‌تواند درخواست نام‌کاربری و رمز عبور کند. +دسترسی خواندنی هم همین‌طور است. -In fact, for services like GitHub, the URL you use to view the repository online (for example, https://github.com/schacon/simplegit[^]) is the same URL you can use to clone and, if you have access, push over. +در واقع، برای سرویس‌هایی مانند GitHub، URLی که برای مشاهده مخزن به صورت آنلاین استفاده می‌کنید (مثلاً https://github.com/schacon/simplegit[^]) همان URLی است که می‌توانید برای کلون کردن و در صورت دسترسی، پوش کردن استفاده کنید. -===== Dumb HTTP +===== Dumb HTTP (HTTP ساده) (((protocols, dumb HTTP))) -If the server does not respond with a Git HTTP smart service, the Git client will try to fall back to the simpler _Dumb_ HTTP protocol. -The Dumb protocol expects the bare Git repository to be served like normal files from the web server. -The beauty of Dumb HTTP is the simplicity of setting it up. -Basically, all you have to do is put a bare Git repository under your HTTP document root and set up a specific `post-update` hook, and you're done (see <>). -At that point, anyone who can access the web server under which you put the repository can also clone your repository. -To allow read access to your repository over HTTP, do something like this: +اگر سرور به سرویس HTTP هوشمند گیت پاسخ ندهد، کلاینت گیت تلاش می‌کند به پروتکل ساده‌تر _Dumb_ HTTP بازگردد. +پروتکل ساده انتظار دارد مخزن bare گیت مانند فایل‌های معمولی توسط وب سرور سرو شود. +زیبایی HTTP ساده در سادگی راه‌اندازی آن است. +در اصل، فقط کافی است یک مخزن bare گیت زیر دایرکتوری روت اسناد HTTP خود قرار دهید و یک هوک `post-update` خاص راه‌اندازی کنید، و تمام (برای اطلاعات بیشتر به <> مراجعه کنید). +از این پس، هر کسی که بتواند به وب سروری که مخزن روی آن است دسترسی داشته باشد، می‌تواند مخزن شما را کلون کند. +برای اجازه دادن به دسترسی خواندنی به مخزن خود از طریق HTTP، کاری شبیه به این انجام دهید: [source,console] ---- @@ -103,109 +104,110 @@ $ mv hooks/post-update.sample hooks/post-update $ chmod a+x hooks/post-update ---- -That's all.(((hooks, post-update))) -The `post-update` hook that comes with Git by default runs the appropriate command (`git update-server-info`) to make HTTP fetching and cloning work properly. -This command is run when you push to this repository (over SSH perhaps); then, other people can clone via something like: +همین بود. (((hooks, post-update))) +هوک `post-update` که به‌طور پیش‌فرض همراه با گیت عرضه می‌شود، فرمان مناسب (`git update-server-info`) را اجرا می‌کند تا دریافت و کلون کردن از طریق HTTP به‌درستی انجام شود. +این فرمان زمانی اجرا می‌شود که شما به این مخزن پوش کنید (شاید از طریق SSH)؛ سپس دیگران می‌توانند با استفاده از چیزی شبیه به این کلون کنند: [source,console] ---- $ git clone https://example.com/gitproject.git ---- -In this particular case, we're using the `/var/www/htdocs` path that is common for Apache setups, but you can use any static web server -- just put the bare repository in its path. -The Git data is served as basic static files (see the <> chapter for details about exactly how it's served). +در این مورد خاص، ما از مسیر `/var/www/htdocs` استفاده می‌کنیم که برای تنظیمات آپاچی معمول است، اما می‌توانید از هر سرور وب استاتیکی استفاده کنید — فقط مخزن بَری را در مسیر آن قرار دهید. +داده‌های گیت به‌صورت فایل‌های استاتیک ساده سرو می‌شوند (برای جزئیات بیشتر درباره اینکه دقیقاً چگونه سرو می‌شوند، فصل <> را ببینید). -Generally you would either choose to run a read/write Smart HTTP server or simply have the files accessible as read-only in the Dumb manner. -It's rare to run a mix of the two services. +به‌طور کلی، یا باید یک سرور هوشمند HTTP با قابلیت خواندن/نوشتن اجرا کنید یا فقط فایل‌ها را به صورت فقط‌خواندنی و به روش ساده (Dumb) در دسترس قرار دهید. +ترکیب این دو سرویس به‌ندرت انجام می‌شود. -===== The Pros +===== The Pros (مزایا) -We'll concentrate on the pros of the Smart version of the HTTP protocol. +ما روی مزایای نسخه هوشمند پروتکل HTTP تمرکز خواهیم کرد. -The simplicity of having a single URL for all types of access and having the server prompt only when authentication is needed makes things very easy for the end user. -Being able to authenticate with a username and password is also a big advantage over SSH, since users don't have to generate SSH keys locally and upload their public key to the server before being able to interact with it. -For less sophisticated users, or users on systems where SSH is less common, this is a major advantage in usability. -It is also a very fast and efficient protocol, similar to the SSH one. +سادگی داشتن یک URL واحد برای همه نوع دسترسی و اینکه سرور فقط هنگام نیاز به احراز هویت درخواست می‌دهد، کار را برای کاربر نهایی بسیار آسان می‌کند. +توانایی احراز هویت با نام کاربری و رمز عبور نیز مزیت بزرگی نسبت به SSH است، چون کاربران نیازی ندارند کلید SSH محلی بسازند و کلید عمومی خود را روی سرور آپلود کنند تا بتوانند با آن تعامل داشته باشند. +برای کاربران کمتر حرفه‌ای یا کاربران سیستم‌هایی که SSH کمتر رایج است، این یک مزیت بزرگ در استفاده‌پذیری است. +این همچنین یک پروتکل بسیار سریع و کارآمد است، مشابه SSH. -You can also serve your repositories read-only over HTTPS, which means you can encrypt the content transfer; or you can go so far as to make the clients use specific signed SSL certificates. +شما همچنین می‌توانید مخازن خود را فقط‌خواندنی از طریق HTTPS ارائه دهید، که به معنی رمزنگاری انتقال محتواست؛ یا حتی می‌توانید به‌گونه‌ای پیش بروید که کلاینت‌ها از گواهی‌های SSL امضاشده خاص استفاده کنند. -Another nice thing is that HTTP and HTTPS are such commonly used protocols that corporate firewalls are often set up to allow traffic through their ports. +یک نکته خوب دیگر این است که HTTP و HTTPS پروتکل‌هایی بسیار رایج هستند و اغلب دیواره‌های آتش شرکت‌ها به ترافیک این پورت‌ها اجازه عبور می‌دهند. -===== The Cons +===== The Cons (معایب) -Git over HTTPS can be a little more tricky to set up compared to SSH on some servers. -Other than that, there is very little advantage that other protocols have over Smart HTTP for serving Git content. +راه‌اندازی گیت روی HTTPS ممکن است نسبت به SSH روی برخی سرورها کمی پیچیده‌تر باشد. +به‌جز این مورد، مزیت کمی نسبت به دیگر پروتکل‌ها برای ارائه محتوای گیت نسبت به HTTP هوشمند وجود دارد. -If you're using HTTP for authenticated pushing, providing your credentials is sometimes more complicated than using keys over SSH. -There are, however, several credential caching tools you can use, including Keychain access on macOS and Credential Manager on Windows, to make this pretty painless. -Read <> to see how to set up secure HTTP password caching on your system. +اگر از HTTP برای پوش کردن با احراز هویت استفاده می‌کنید، ارائه اطلاعات ورود گاهی پیچیده‌تر از استفاده از کلیدها روی SSH است. +با این حال، چندین ابزار کش کردن اعتبارنامه وجود دارد، از جمله Keychain Access در macOS و Credential Manager در ویندوز، که این کار را به‌طور قابل توجهی ساده می‌کنند. +برای یادگیری نحوه راه‌اندازی کش امن پسورد HTTP روی سیستم‌تان، فصل <> را بخوانید. -==== The SSH Protocol +==== The SSH Protocol (پروتکل SSH) (((protocols, SSH))) -A common transport protocol for Git when self-hosting is over SSH. -This is because SSH access to servers is already set up in most places -- and if it isn't, it's easy to do. -SSH is also an authenticated network protocol and, because it's ubiquitous, it's generally easy to set up and use. +یک پروتکل انتقال رایج برای گیت هنگام میزبانی خودکار، استفاده از SSH است. +زیرا دسترسی SSH به سرورها در اکثر محیط‌ها از پیش تنظیم شده است — و اگر این‌طور نباشد، راه‌اندازی آن آسان است. +SSH همچنین یک پروتکل شبکه احراز هویت شده است و به‌دلیل فراگیر بودن، معمولاً راه‌اندازی و استفاده از آن آسان است. -To clone a Git repository over SSH, you can specify an `ssh://` URL like this: +برای کلون کردن یک مخزن گیت از طریق SSH، می‌توانید یک URL با قالب `ssh://` به این شکل مشخص کنید: [source,console] ---- $ git clone ssh://[user@]server/project.git ---- -Or you can use the shorter scp-like syntax for the SSH protocol: +یا می‌توانید از نحو کوتاه‌تر شبیه scp برای پروتکل SSH استفاده کنید: [source,console] ---- $ git clone [user@]server:project.git ---- -In both cases above, if you don't specify the optional username, Git assumes the user you're currently logged in as. +در هر دو حالت بالا، اگر نام کاربری اختیاری را مشخص نکنید، گیت فرض می‌کند که کاربری که هم‌اکنون وارد شده‌اید، کاربر مورد نظر است. -===== The Pros +===== The Pros (مزایا) -The pros of using SSH are many. -First, SSH is relatively easy to set up -- SSH daemons are commonplace, many network admins have experience with them, and many OS distributions are set up with them or have tools to manage them. -Next, access over SSH is secure -- all data transfer is encrypted and authenticated. -Last, like the HTTPS, Git and Local protocols, SSH is efficient, making the data as compact as possible before transferring it. +مزایای استفاده از SSH بسیار زیاد است. +اول اینکه SSH نسبتاً آسان راه‌اندازی می‌شود — سرویس‌دهنده‌های SSH رایج هستند، بسیاری از مدیران شبکه با آن‌ها آشنایی دارند و بیشتر توزیع‌های سیستم‌عامل با آن‌ها تنظیم شده‌اند یا ابزارهایی برای مدیریت‌شان دارند. +دوم، دسترسی از طریق SSH امن است — تمام انتقال داده رمزنگاری و احراز هویت شده است. +در نهایت، مثل پروتکل‌های HTTPS، گیت و Local، SSH نیز کارآمد است و داده‌ها را تا حد امکان فشرده قبل از انتقال می‌کند. -===== The Cons +===== The Cons (معایب) -The negative aspect of SSH is that it doesn't support anonymous access to your Git repository. -If you're using SSH, people _must_ have SSH access to your machine, even in a read-only capacity, which doesn't make SSH conducive to open source projects for which people might simply want to clone your repository to examine it. -If you're using it only within your corporate network, SSH may be the only protocol you need to deal with. -If you want to allow anonymous read-only access to your projects and also want to use SSH, you'll have to set up SSH for you to push over but something else for others to fetch from. +نکته منفی SSH این است که دسترسی ناشناس به مخزن گیت را پشتیبانی نمی‌کند. +اگر از SSH استفاده می‌کنید، افراد حتماً باید دسترسی SSH به ماشین شما داشته باشند، حتی به صورت فقط‌خواندنی، که این باعث می‌شود SSH برای پروژه‌های متن‌باز که افراد ممکن است فقط بخواهند مخزن شما را کلون کنند، چندان مناسب نباشد. +اگر فقط در شبکه داخلی شرکت خود استفاده می‌کنید، ممکن است SSH تنها پروتکلی باشد که نیاز دارید. +اگر می‌خواهید دسترسی ناشناس فقط‌خواندنی به پروژه‌هایتان بدهید و هم‌زمان بخواهید از SSH استفاده کنید، باید SSH را برای پوش کردن خودتان راه‌اندازی کنید و برای دیگران یک روش دیگر برای دریافت داده‌ها فراهم کنید. -==== The Git Protocol +==== The Git Protocol (پروتکل Git) (((protocols, git))) -Finally, we have the Git protocol. -This is a special daemon that comes packaged with Git; it listens on a dedicated port (9418) that provides a service similar to the SSH protocol, but with absolutely no authentication or cryptography. -In order for a repository to be served over the Git protocol, you must create a `git-daemon-export-ok` file -- the daemon won't serve a repository without that file in it -- but, other than that, there is no security. -Either the Git repository is available for everyone to clone, or it isn't. -This means that there is generally no pushing over this protocol. -You can enable push access but, given the lack of authentication, anyone on the internet who finds your project's URL could push to that project. -Suffice it to say that this is rare. - -===== The Pros - -The Git protocol is often the fastest network transfer protocol available. -If you're serving a lot of traffic for a public project or serving a very large project that doesn't require user authentication for read access, it's likely that you'll want to set up a Git daemon to serve your project. -It uses the same data-transfer mechanism as the SSH protocol but without the encryption and authentication overhead. - -===== The Cons - -Due to the lack of TLS or other cryptography, cloning over `git://` might lead to an arbitrary code execution vulnerability, and should therefore be avoided unless you know what you are doing. - -* If you run `git clone git://example.com/project.git`, an attacker who controls e.g your router can modify the repo you just cloned, inserting malicious code into it. - If you then compile/run the code you just cloned, you will execute the malicious code. - Running `git clone http://example.com/project.git` should be avoided for the same reason. -* Running `git clone https://example.com/project.git` does not suffer from the same problem (unless the attacker can provide a TLS certificate for example.com). - Running `git clone git@example.com:project.git` only suffers from this problem if you accept a wrong SSH key fingerprint. - -It also has no authentication, i.e. anyone can clone the repo (although this is often exactly what you want). -It's also probably the most difficult protocol to set up. -It must run its own daemon, which requires `xinetd` or `systemd` configuration or the like, which isn't always a walk in the park. -It also requires firewall access to port 9418, which isn't a standard port that corporate firewalls always allow. -Behind big corporate firewalls, this obscure port is commonly blocked. +در نهایت، پروتکل Git را داریم. +این یک سرویس‌دهنده خاص است که همراه با گیت عرضه می‌شود؛ روی پورتی اختصاصی (9418) گوش می‌دهد که خدماتی مشابه پروتکل SSH ارائه می‌دهد، اما بدون هیچ‌گونه احراز هویت یا رمزنگاری. +برای اینکه مخزنی از طریق پروتکل Git سرو شود، باید فایل `git-daemon-export-ok` را بسازید — این سرویس‌دهنده بدون وجود این فایل مخزن را سرو نمی‌کند — اما به جز این، هیچ امنیتی وجود ندارد. +یا مخزن گیت برای همه در دسترس است، یا نیست. +این به این معنی است که معمولاً پوش کردن از طریق این پروتکل انجام نمی‌شود. +می‌توانید دسترسی پوش را فعال کنید اما با توجه به نبود احراز هویت، هر کسی در اینترنت که URL پروژه شما را پیدا کند می‌تواند به آن پروژه پوش کند. +کافی است بگوییم این مورد نادر است. + +===== The Pros (مزایا) + +پروتکل گیت معمولاً سریع‌ترین پروتکل انتقال شبکه است. +اگر ترافیک زیادی برای یک پروژه عمومی دارید یا پروژه بسیار بزرگی را ارائه می‌دهید که نیاز به احراز هویت کاربر برای دسترسی خواندن ندارد، احتمالاً می‌خواهید یک سرویس‌دهنده Git راه‌اندازی کنید تا پروژه‌تان را سرو کند. +این پروتکل از همان مکانیزم انتقال داده مانند SSH استفاده می‌کند اما بدون سربار رمزنگاری و احراز هویت. + + +===== The Cons (معایب) + +به دلیل نبود TLS یا رمزنگاری دیگر، کلون کردن از طریق `git://` ممکن است باعث آسیب‌پذیری اجرای کد دلخواه شود، بنابراین مگر اینکه بدانید چه می‌کنید، باید از آن اجتناب کنید. + +* اگر دستور `git clone git://example.com/project.git` را اجرا کنید، یک مهاجم که کنترل مثلاً روتر شما را دارد می‌تواند مخزنی که تازه کلون کرده‌اید را دستکاری کند و کد مخربی در آن قرار دهد. + اگر سپس کدی را که کلون کرده‌اید کامپایل یا اجرا کنید، کد مخرب اجرا خواهد شد. + اجرای `git clone http://example.com/project.git` هم به همین دلیل باید اجتناب شود. +* اجرای `git clone https://example.com/project.git` این مشکل را ندارد (مگر اینکه مهاجم بتواند گواهی TLS برای example.com ارائه دهد). + اجرای `git clone git@example.com:project.git` تنها در صورتی دچار این مشکل می‌شود که اثر انگشت کلید SSH اشتباه را بپذیرید. + +همچنین این پروتکل هیچ احراز هویتی ندارد، یعنی هر کسی می‌تواند مخزن را کلون کند (اگرچه این معمولاً دقیقاً همان چیزی است که می‌خواهید). +احتمالاً دشوارترین پروتکل برای راه‌اندازی نیز هست. +باید سرویس‌دهنده خودش را اجرا کند که نیازمند پیکربندی `xinetd` یا `systemd` یا موارد مشابه است که همیشه کار ساده‌ای نیست. +همچنین نیاز به دسترسی فایروال به پورت 9418 دارد که پورت استانداردی نیست و دیواره‌های آتش شرکتی معمولاً آن را مسدود می‌کنند. +در پشت دیواره‌های آتش بزرگ شرکتی، این پورت ناشناخته معمولاً مسدود است. \ No newline at end of file From 0430d557c338f91ce69b49d2ecb6e75075357c6e Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 12 Aug 2025 12:27:04 +0330 Subject: [PATCH 473/549] translate(05-distributed-git): translated contributing to persian --- .idea/workspace.xml | 53 ++- .../sections/contributing.asc | 390 ++++++++---------- 2 files changed, 194 insertions(+), 249 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 09271c82..9f3557d2 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,10 @@ - + + + + @@ -28,12 +31,16 @@ @@ -105,6 +112,8 @@ + + diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 2c6b0851..5cbdf734 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -1,116 +1,79 @@ [[_contributing_project]] -=== Contributing to a Project +=== Contributing to a Project (مشارکت در یک پروژه) (((contributing))) -The main difficulty with describing how to contribute to a project are the numerous variations on how to do that. -Because Git is very flexible, people can and do work together in many ways, and it's problematic to describe how you should contribute -- every project is a bit different. -Some of the variables involved are active contributor count, chosen workflow, your commit access, and possibly the external contribution method. - -The first variable is active contributor count -- how many users are actively contributing code to this project, and how often? -In many instances, you'll have two or three developers with a few commits a day, or possibly less for somewhat dormant projects. -For larger companies or projects, the number of developers could be in the thousands, with hundreds or thousands of commits coming in each day. -This is important because with more and more developers, you run into more issues with making sure your code applies cleanly or can be easily merged. -Changes you submit may be rendered obsolete or severely broken by work that is merged in while you were working or while your changes were waiting to be approved or applied. -How can you keep your code consistently up to date and your commits valid? - -The next variable is the workflow in use for the project. -Is it centralized, with each developer having equal write access to the main codeline? -Does the project have a maintainer or integration manager who checks all the patches? -Are all the patches peer-reviewed and approved? -Are you involved in that process? -Is a lieutenant system in place, and do you have to submit your work to them first? - -The next variable is your commit access. -The workflow required in order to contribute to a project is much different if you have write access to the project than if you don't. -If you don't have write access, how does the project prefer to accept contributed work? -Does it even have a policy? -How much work are you contributing at a time? -How often do you contribute? - -All these questions can affect how you contribute effectively to a project and what workflows are preferred or available to you. -We'll cover aspects of each of these in a series of use cases, moving from simple to more complex; you should be able to construct the specific workflows you need in practice from these examples. +اصلی‌ترین دشواری در توصیف نحوه مشارکت در یک پروژه، تنوع بسیار زیاد روش‌های انجام این کار است. از آنجا که گیت بسیار منعطف است، افراد می‌توانند به روش‌های مختلفی با هم کار کنند و توصیف اینکه شما دقیقاً چگونه باید مشارکت کنید مشکل است — هر پروژه کمی متفاوت است. برخی از متغیرهای دخیل عبارت‌اند از تعداد مشارکت‌کنندگان فعال، جریان کاری انتخاب‌شده، دسترسی شما به کامیت‌ها و احتمالاً روش مشارکت خارجی. + +اولین متغیر تعداد مشارکت‌کنندگان فعال است — چند کاربر به‌طور فعال کد به این پروژه اضافه می‌کنند و هر چند وقت یکبار؟ در بسیاری از موارد، شما دو یا سه توسعه‌دهنده دارید که روزانه چند کامیت دارند، یا احتمالاً کمتر برای پروژه‌هایی که نسبتاً غیرفعال هستند. برای شرکت‌ها یا پروژه‌های بزرگ‌تر، تعداد توسعه‌دهندگان ممکن است به هزاران نفر برسد و صدها یا هزاران کامیت روزانه وارد شود. این اهمیت دارد چون با افزایش تعداد توسعه‌دهندگان، مشکلات بیشتری در اطمینان از اینکه کد شما به‌درستی اعمال می‌شود یا به‌راحتی ادغام می‌شود، پیش می‌آید. تغییراتی که ارسال می‌کنید ممکن است در حین کار شما یا زمانی که تغییراتتان منتظر تایید یا اعمال هستند، توسط کارهای دیگری که ادغام شده‌اند، منسوخ یا به شدت خراب شوند. چگونه می‌توانید کد خود را همواره به‌روز نگه داشته و کامیت‌های خود را معتبر نگه دارید؟ + +متغیر بعدی جریان کاری مورد استفاده در پروژه است. آیا پروژه متمرکز است و هر توسعه‌دهنده دسترسی نوشتن برابر به شاخه اصلی کد دارد؟ آیا پروژه یک نگهدارنده یا مدیر یکپارچه‌سازی دارد که همه پچ‌ها را بررسی می‌کند؟ آیا همه پچ‌ها بازبینی همتا و تایید می‌شوند؟ آیا شما در این فرآیند دخیل هستید؟ آیا سیستم فرماندهی وجود دارد و باید ابتدا کار خود را به آنها ارائه دهید؟ + +متغیر بعدی دسترسی شما به کامیت است. جریان کاری لازم برای مشارکت در پروژه بسیار متفاوت است اگر شما دسترسی نوشتن به پروژه داشته باشید یا نداشته باشید. اگر دسترسی نوشتن ندارید، پروژه ترجیح می‌دهد چگونه کارهای مشارکتی را بپذیرد؟ آیا اصلاً سیاستی دارد؟ چه مقدار کار را همزمان مشارکت می‌کنید؟ هر چند وقت یک بار مشارکت می‌کنید؟ + +تمام این سوالات می‌توانند بر نحوه مؤثر مشارکت شما در پروژه و جریان‌های کاری مورد ترجیح یا قابل دسترس برای شما تأثیر بگذارند. ما جنبه‌هایی از هر یک را در مجموعه‌ای از موارد کاربردی بررسی خواهیم کرد، از ساده به پیچیده؛ شما باید بتوانید با استفاده از این مثال‌ها جریان‌های کاری خاص مورد نیاز خود را در عمل بسازید. [[_commit_guidelines]] -==== Commit Guidelines +==== Commit Guidelines (راهنمایی‌های کامیت) -Before we start looking at the specific use cases, here's a quick note about commit messages. -Having a good guideline for creating commits and sticking to it makes working with Git and collaborating with others a lot easier. -The Git project provides a document that lays out a number of good tips for creating commits from which to submit patches -- you can read it in the Git source code in the `Documentation/SubmittingPatches` file. +قبل از اینکه به موارد کاربردی خاص بپردازیم، یک نکته کوتاه درباره پیام‌های کامیت داریم. داشتن یک راهنمای خوب برای ایجاد کامیت‌ها و پایبندی به آن، کار با گیت و همکاری با دیگران را بسیار آسان‌تر می‌کند. پروژه گیت یک سند ارائه می‌دهد که تعدادی نکته خوب برای ایجاد کامیت‌های مناسب برای ارسال پچ‌ها را بیان می‌کند — می‌توانید آن را در کد منبع گیت در فایل `Documentation/SubmittingPatches` بخوانید. (((git commands, diff, check))) -First, your submissions should not contain any whitespace errors. -Git provides an easy way to check for this -- before you commit, run `git diff --check`, which identifies possible whitespace errors and lists them for you. +اول اینکه ارسال‌های شما نباید هیچ خطای فاصله سفید داشته باشند. گیت راه ساده‌ای برای بررسی این موضوع دارد — قبل از کامیت کردن، دستور `git diff --check` را اجرا کنید که خطاهای احتمالی فاصله سفید را شناسایی و فهرست می‌کند. .Output of `git diff --check` image::images/git-diff-check.png[Output of `git diff --check`] -If you run that command before committing, you can tell if you're about to commit whitespace issues that may annoy other developers. +اگر قبل از کامیت این دستور را اجرا کنید، می‌توانید بفهمید که آیا در شرف کامیت کردن مشکلات فاصله سفید هستید که ممکن است سایر توسعه‌دهندگان را اذیت کند. -Next, try to make each commit a logically separate changeset. -If you can, try to make your changes digestible -- don't code for a whole weekend on five different issues and then submit them all as one massive commit on Monday. -Even if you don't commit during the weekend, use the staging area on Monday to split your work into at least one commit per issue, with a useful message per commit. -If some of the changes modify the same file, try to use `git add --patch` to partially stage files (covered in detail in <>). -The project snapshot at the tip of the branch is identical whether you do one commit or five, as long as all the changes are added at some point, so try to make things easier on your fellow developers when they have to review your changes. +بعد، سعی کنید هر کامیت یک مجموعه تغییرات منطقی و جداگانه باشد. اگر ممکن است، تغییرات خود را قابل هضم کنید — مثلاً کل آخر هفته روی پنج مسئله مختلف کد نزنید و سپس همه را به صورت یک کامیت عظیم در روز دوشنبه ارسال نکنید. حتی اگر در آخر هفته کامیت نکنید، در روز دوشنبه از منطقه آماده‌سازی استفاده کنید تا کار خود را حداقل به یک کامیت برای هر مسئله تقسیم کنید، با پیام مفید برای هر کامیت. اگر برخی تغییرات فایل یکسانی را ویرایش می‌کنند، سعی کنید از `git add --patch` برای آماده‌سازی جزئی فایل‌ها استفاده کنید (که به تفصیل در <> پوشش داده شده است). تصویر پروژه در انتهای شاخه چه یک کامیت انجام دهید یا پنج کامیت، یکسان است، مادامی که همه تغییرات در نهایت اضافه شوند، پس سعی کنید کار بررسی تغییرات را برای توسعه‌دهندگان دیگر آسان‌تر کنید. -This approach also makes it easier to pull out or revert one of the changesets if you need to later. -<> describes a number of useful Git tricks for rewriting history and interactively staging files -- use these tools to help craft a clean and understandable history before sending the work to someone else. +این روش همچنین برگشت یا حذف یکی از مجموعه تغییرات را در آینده آسان‌تر می‌کند. <> چند ترفند مفید گیت برای بازنویسی تاریخچه و آماده‌سازی تعاملی فایل‌ها را شرح می‌دهد — از این ابزارها برای ایجاد یک تاریخچه تمیز و قابل فهم قبل از ارسال کار به دیگران استفاده کنید. -The last thing to keep in mind is the commit message. -Getting in the habit of creating quality commit messages makes using and collaborating with Git a lot easier. -As a general rule, your messages should start with a single line that's no more than about 50 characters and that describes the changeset concisely, followed by a blank line, followed by a more detailed explanation. -The Git project requires that the more detailed explanation include your motivation for the change and contrast its implementation with previous behavior -- this is a good guideline to follow. -Write your commit message in the imperative: "Fix bug" and not "Fixed bug" or "Fixes bug." -Here is a template you can follow, which we've lightly adapted from one https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[originally written by Tim Pope^]: +آخرین نکته‌ای که باید به آن توجه کنید پیام کامیت است. عادت کردن به نوشتن پیام‌های کامیت با کیفیت، استفاده و همکاری با گیت را بسیار آسان‌تر می‌کند. به طور کلی، پیام‌های شما باید با یک خط کوتاه (حدود ۵۰ کاراکتر یا کمتر) که تغییرات را به‌طور خلاصه توصیف کند شروع شود، سپس یک خط خالی، و بعد توضیح مفصل‌تر بیاید. پروژه گیت از شما می‌خواهد که توضیح مفصل شامل انگیزه شما برای تغییر و مقایسه اجرای آن با رفتار قبلی باشد — این یک راهنمای خوب برای پیروی است. پیام کامیت خود را به صورت امری بنویسید: «Fix bug» نه «Fixed bug» یا «Fixes bug». + +در اینجا قالبی است که می‌توانید دنبال کنید، که ما کمی آن را از نسخه اصلی در https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[که در ابتدا توسط Tim Pope نوشته شده] اقتباس کرده‌ایم: [source,text] ---- -Capitalized, short (50 chars or less) summary +خلاصه‌ای کوتاه با حرف بزرگ (۵۰ کاراکتر یا کمتر) -More detailed explanatory text, if necessary. Wrap it to about 72 -characters or so. In some contexts, the first line is treated as the -subject of an email and the rest of the text as the body. The blank -line separating the summary from the body is critical (unless you omit -the body entirely); tools like rebase will confuse you if you run the -two together. +متن توضیحی مفصل‌تر، در صورت نیاز. آن را تقریباً تا ۷۲ کاراکتر در هر خط بپیچید. در برخی زمینه‌ها، خط اول به عنوان موضوع ایمیل در نظر گرفته می‌شود و بقیه متن به عنوان بدنه. خط خالی جداکننده خلاصه از بدنه ضروری است (مگر اینکه کل بدنه را حذف کنید)؛ ابزارهایی مانند rebase اگر این دو را با هم اجرا کنید شما را گیج می‌کنند. -Write your commit message in the imperative: "Fix bug" and not "Fixed bug" -or "Fixes bug." This convention matches up with commit messages generated -by commands like git merge and git revert. +پیام کامیت خود را به صورت امری بنویسید: «Fix bug» نه «Fixed bug» یا «Fixes bug». این قرارداد با پیام‌های کامیت تولید شده توسط دستورات مثل git merge و git revert همخوانی دارد. -Further paragraphs come after blank lines. +پاراگراف‌های بعدی پس از خطوط خالی می‌آیند. -- Bullet points are okay, too +- نکات گلوله‌ای هم پذیرفته شده‌اند -- Typically a hyphen or asterisk is used for the bullet, followed by a - single space, with blank lines in between, but conventions vary here +- معمولاً از خط تیره یا ستاره برای گلوله استفاده می‌شود، به دنبال آن یک فاصله، با خطوط خالی بین آنها، اما قراردادها متفاوت است -- Use a hanging indent +- از تورفتگی معلق استفاده کنید ---- -If all your commit messages follow this model, things will be much easier for you and the developers with whom you collaborate. -The Git project has well-formatted commit messages -- try running `git log --no-merges` there to see what a nicely-formatted project-commit history looks like. + اگر تمام پیام‌های کامیت شما از این الگو پیروی کنند، کار برای شما و توسعه‌دهندگانی که با آنها همکاری می‌کنید بسیار آسان‌تر خواهد بود. +پروژه Git پیام‌های کامیتی به‌خوبی قالب‌بندی‌شده‌ای دارد—برای دیدن نحوه نمایش تاریخچه پروژه با قالب‌بندی مناسب، دستور `git log --no-merges` را در آن اجرا کنید. [NOTE] .Do as we say, not as we do. ==== -For the sake of brevity, many of the examples in this book don't have nicely-formatted commit messages like this; instead, we simply use the `-m` option to `git commit`. +برای اختصار، بسیاری از مثال‌های این کتاب پیام‌های کامیت به این زیبایی ندارند؛ در عوض، ما صرفاً از گزینه `-m` در دستور `git commit` استفاده می‌کنیم. -In short, do as we say, not as we do. +خلاصه اینکه، کاری را انجام دهید که می‌گوییم، نه کاری را که خودمان انجام می‌دهیم. ==== [[_private_team]] -==== Private Small Team +==== Private Small Team (تیم کوچک خصوصی) (((contributing, private small team))) -The simplest setup you're likely to encounter is a private project with one or two other developers. -"`Private,`" in this context, means closed-source -- not accessible to the outside world. -You and the other developers all have push access to the repository. +ساده‌ترین تنظیمی که احتمالاً با آن مواجه می‌شوید، پروژه‌ای خصوصی با یک یا دو توسعه‌دهنده دیگر است. +در اینجا منظور از «خصوصی» یعنی کد منبع بسته است—برای جهان بیرون قابل دسترسی نیست. +شما و دیگر توسعه‌دهندگان دسترسی برای ارسال تغییرات (push) به مخزن را دارید. -In this environment, you can follow a workflow similar to what you might do when using Subversion or another centralized system. -You still get the advantages of things like offline committing and vastly simpler branching and merging, but the workflow can be very similar; the main difference is that merges happen client-side rather than on the server at commit time. -Let's see what it might look like when two developers start to work together with a shared repository. -The first developer, John, clones the repository, makes a change, and commits locally. -The protocol messages have been replaced with `...` in these examples to shorten them somewhat. +در این محیط، می‌توانید روند کاری مشابه آنچه در Subversion یا دیگر سیستم‌های متمرکز انجام می‌دهید را دنبال کنید. +هنوز هم از مزایایی مانند امکان کامیت به‌صورت آفلاین و مدیریت شاخه‌ها و ادغام‌ها به‌مراتب ساده‌تر بهره‌مند می‌شوید، اما جریان کاری می‌تواند بسیار شبیه باشد؛ تفاوت اصلی این است که ادغام‌ها در سمت کلاینت اتفاق می‌افتند، نه سرور در زمان کامیت. +بیایید ببینیم وقتی دو توسعه‌دهنده با یک مخزن مشترک شروع به کار می‌کنند، اوضاع چگونه است. +توسعه‌دهنده اول، جان، مخزن را کلون می‌کند، تغییراتی ایجاد می‌کند و به صورت محلی کامیت می‌کند. +در این مثال‌ها پیام‌های پروتکل با `...` جایگزین شده‌اند تا کمی کوتاه‌تر شوند. [source,console] ---- @@ -125,7 +88,7 @@ $ git commit -am 'Remove invalid default value' 1 files changed, 1 insertions(+), 1 deletions(-) ---- -The second developer, Jessica, does the same thing -- clones the repository and commits a change: +توسعه‌دهنده دوم، جسیکا، همین کار را انجام می‌دهد -- مخزن را کلون می‌کند و یک تغییر را کامیت می‌کند: [source,console] ---- @@ -140,7 +103,7 @@ $ git commit -am 'Add reset task' 1 files changed, 1 insertions(+), 0 deletions(-) ---- -Now, Jessica pushes her work to the server, which works just fine: +حالا جسیکا کارش را به سرور می‌فرستد (push) و این کار به‌خوبی انجام می‌شود: [source,console] ---- @@ -151,12 +114,12 @@ To jessica@githost:simplegit.git 1edee6b..fbff5bc master -> master ---- -The last line of the output above shows a useful return message from the push operation. -The basic format is `.. fromref -> toref`, where `oldref` means the old reference, `newref` means the new reference, `fromref` is the name of the local reference being pushed, and `toref` is the name of the remote reference being updated. -You'll see similar output like this below in the discussions, so having a basic idea of the meaning will help in understanding the various states of the repositories. -More details are available in the documentation for https://git-scm.com/docs/git-push[git-push^]. +خط آخر خروجی بالا پیام بازگشتی مفیدی از عملیات push را نشان می‌دهد. +قالب کلی آن به صورت `.. fromref -> toref` است، که در آن `oldref` مرجع قدیمی، `newref` مرجع جدید، `fromref` نام مرجع محلی که ارسال می‌شود و `toref` نام مرجع راه دوری است که به‌روزرسانی می‌شود. +شما در ادامه بحث خروجی‌های مشابهی خواهید دید، پس داشتن درک اولیه از معنای آنها به فهم وضعیت‌های مختلف مخزن کمک خواهد کرد. +جزئیات بیشتر در مستندات https://git-scm.com/docs/git-push[git-push^] موجود است. -Continuing with this example, shortly afterwards, John makes some changes, commits them to his local repository, and tries to push them to the same server: +در ادامه همین مثال، کمی بعد، جان تغییراتی ایجاد می‌کند، آنها را به مخزن محلی‌اش کامیت می‌کند و تلاش می‌کند آنها را به همان سرور ارسال کند: [source,console] ---- @@ -167,12 +130,12 @@ To john@githost:simplegit.git error: failed to push some refs to 'john@githost:simplegit.git' ---- -In this case, John's push fails because of Jessica's earlier push of _her_ changes. -This is especially important to understand if you're used to Subversion, because you'll notice that the two developers didn't edit the same file. -Although Subversion automatically does such a merge on the server if different files are edited, with Git, you must _first_ merge the commits locally. -In other words, John must first fetch Jessica's upstream changes and merge them into his local repository before he will be allowed to push. +در این حالت، ارسال (push) جان به دلیل ارسال قبلی جسیکا با شکست مواجه می‌شود. +این موضوع به‌ویژه اگر به Subversion عادت دارید مهم است، چون مشاهده می‌کنید که دو توسعه‌دهنده روی فایل مشابهی کار نکرده‌اند. +اگرچه در Subversion، اگر فایل‌های متفاوتی ویرایش شوند، ادغام به‌صورت خودکار روی سرور انجام می‌شود، اما در Git ابتدا باید کامیت‌ها را به‌صورت محلی ادغام کنید. +به عبارت دیگر، جان باید ابتدا تغییرات جسیکا را دریافت (fetch) و آنها را در مخزن محلی خودش ادغام کند، سپس اجازه ارسال خواهد داشت. -As a first step, John fetches Jessica's work (this only _fetches_ Jessica's upstream work, it does not yet merge it into John's work): +اولین قدم این است که جان کار جسیکا را دریافت می‌کند (این فقط دریافت است و هنوز ادغام انجام نشده): [source,console] ---- @@ -182,12 +145,12 @@ From john@githost:simplegit + 049d078...fbff5bc master -> origin/master ---- -At this point, John's local repository looks something like this: +در این مرحله، مخزن محلی جان چیزی شبیه به این است: .John's divergent history image::images/small-team-1.png[John's divergent history] -Now John can merge Jessica's work that he fetched into his own local work: +حالا جان می‌تواند کارهای جسیکا را که دریافت کرده در کار محلی خودش ادغام کند: [source,console] ---- @@ -197,12 +160,12 @@ Merge made by the 'recursive' strategy. 1 files changed, 1 insertions(+), 0 deletions(-) ---- -As long as that local merge goes smoothly, John's updated history will now look like this: +تا زمانی که این ادغام محلی بدون مشکل پیش برود، تاریخچه به‌روزشده جان به این شکل خواهد بود: .John's repository after merging `origin/master` image::images/small-team-2.png[John's repository after merging `origin/master`] -At this point, John might want to test this new code to make sure none of Jessica's work affects any of his and, as long as everything seems fine, he can finally push the new merged work up to the server: +در این مرحله، جان ممکن است بخواهد کد جدید را تست کند تا مطمئن شود که کارهای جسیکا تأثیری روی کارهای خودش ندارد و اگر همه چیز خوب بود، نهایتاً می‌تواند کار ادغام‌شده جدید را به سرور ارسال کند: [source,console] ---- @@ -212,18 +175,17 @@ To john@githost:simplegit.git fbff5bc..72bbc59 master -> master ---- -In the end, John's commit history will look like this: +در نهایت، تاریخچه کامیت‌های جان به این صورت خواهد بود: .John's history after pushing to the `origin` server image::images/small-team-3.png[John's history after pushing to the `origin` server] -In the meantime, Jessica has created a new topic branch called `issue54`, and made three commits to that branch. -She hasn't fetched John's changes yet, so her commit history looks like this: +در همین حین، جسیکا یک شاخه موضوعی جدید به نام `issue54` ایجاد کرده و سه کامیت به آن شاخه زده است. او هنوز تغییرات جان را دریافت نکرده، بنابراین تاریخچه کامیت‌هایش به این شکل است: .Jessica's topic branch image::images/small-team-4.png[Jessica's topic branch] -Suddenly, Jessica learns that John has pushed some new work to the server and she wants to take a look at it, so she can fetch all new content from the server that she does not yet have with: +در همین حین، جسیکا یک شاخه موضوعی جدید به نام `issue54` ایجاد کرده و سه کامیت به آن شاخه زده است. او هنوز تغییرات جان را دریافت نکرده، بنابراین تاریخچه کامیت‌هایش به این شکل است: [source,console] ---- @@ -234,14 +196,15 @@ From jessica@githost:simplegit fbff5bc..72bbc59 master -> origin/master ---- -That pulls down the work John has pushed up in the meantime. -Jessica's history now looks like this: +این دستور کارهای جان که در این فاصله ارسال شده را به سیستم محلی جسیکا می‌آورد. +اکنون تاریخچه جسیکا به این صورت است: + .Jessica's history after fetching John's changes image::images/small-team-5.png[Jessica's history after fetching John's changes] -Jessica thinks her topic branch is ready, but she wants to know what part of John's fetched work she has to merge into her work so that she can push. -She runs `git log` to find out: +جسیکا فکر می‌کند شاخه موضوعی‌اش آماده است، اما می‌خواهد بداند کدام بخش از کارهای دریافت‌شده جان را باید با کار خودش ادغام کند تا بتواند تغییرات را ارسال کند. او دستور `git log` را اجرا می‌کند تا بفهمد: + [source,console] ---- @@ -253,15 +216,13 @@ Date: Fri May 29 16:01:27 2009 -0700 Remove invalid default value ---- -The `issue54..origin/master` syntax is a log filter that asks Git to display only those commits that are on the latter branch (in this case `origin/master`) and that are not on the first branch (in this case `issue54`). -We'll go over this syntax in detail in <>. +نحوه نوشتن `issue54..origin/master` یک فیلتر لاگ است که از گیت می‌خواهد فقط آن کامیت‌هایی را نمایش دهد که روی شاخه دوم (در اینجا `origin/master`) هستند و روی شاخه اول (در اینجا `issue54`) نیستند. این نحو را در <> به تفصیل بررسی خواهیم کرد. -From the above output, we can see that there is a single commit that John has made that Jessica has not merged into her local work. -If she merges `origin/master`, that is the single commit that will modify her local work. +از خروجی بالا می‌بینیم که تنها یک کامیت وجود دارد که جان ساخته و جسیکا هنوز آن را با کار محلی‌اش ادغام نکرده است. اگر او `origin/master` را ادغام کند، این تنها کامیتی است که کار محلی‌اش را تغییر خواهد داد. -Now, Jessica can merge her topic work into her `master` branch, merge John's work (`origin/master`) into her `master` branch, and then push back to the server again. +حالا، جسیکا می‌تواند کار موضوعی خود را به شاخه `master` ادغام کند، کار جان (`origin/master`) را به شاخه `master` خودش ادغام کند و سپس دوباره به سرور ارسال کند. -First (having committed all of the work on her `issue54` topic branch), Jessica switches back to her `master` branch in preparation for integrating all this work: +ابتدا (بعد از اینکه تمام کارهای شاخه موضوعی `issue54` را کامیت کرده)، جسیکا به شاخه `master` بازمی‌گردد تا برای ادغام همه این کارها آماده شود: [source,console] ---- @@ -270,9 +231,7 @@ Switched to branch 'master' Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded. ---- -Jessica can merge either `origin/master` or `issue54` first -- they're both upstream, so the order doesn't matter. -The end snapshot should be identical no matter which order she chooses; only the history will be different. -She chooses to merge the `issue54` branch first: +جسیکا می‌تواند ابتدا شاخه `origin/master` یا `issue54` را ادغام کند — هر دو شاخه‌های بالادستی هستند، پس ترتیب ادغام مهم نیست. در نهایت تصویر نهایی باید یکسان باشد؛ فقط تاریخچه متفاوت خواهد بود. او تصمیم می‌گیرد ابتدا شاخه `issue54` را ادغام کند: [source,console] ---- @@ -284,8 +243,7 @@ Fast forward 2 files changed, 6 insertions(+), 1 deletions(-) ---- -No problems occur; as you can see it was a simple fast-forward merge. -Jessica now completes the local merging process by merging John's earlier fetched work that is sitting in the `origin/master` branch: +مشکلی پیش نمی‌آید؛ همانطور که می‌بینید این یک ادغام ساده و سریع بود. جسیکا اکنون فرایند ادغام محلی را با ادغام کارهای قبلاً دریافت‌شده جان که در شاخه `origin/master` قرار دارد، کامل می‌کند: [source,console] ---- @@ -296,12 +254,12 @@ Merge made by the 'recursive' strategy. 1 files changed, 1 insertions(+), 1 deletions(-) ---- -Everything merges cleanly, and Jessica's history now looks like this: +همه چیز به شکل تمیز ادغام می‌شود و تاریخچه جسیکا اکنون به این صورت است: .Jessica's history after merging John's changes image::images/small-team-6.png[Jessica's history after merging John's changes] -Now `origin/master` is reachable from Jessica's `master` branch, so she should be able to successfully push (assuming John hasn't pushed even more changes in the meantime): +اکنون شاخه `origin/master` از شاخه `master` جسیکا قابل دسترسی است، بنابراین او باید بتواند با موفقیت تغییرات را ارسال کند (البته اگر جان در این فاصله تغییرات بیشتری ارسال نکرده باشد): [source,console] ---- @@ -311,32 +269,25 @@ To jessica@githost:simplegit.git 72bbc59..8059c15 master -> master ---- -Each developer has committed a few times and merged each other's work successfully. +هر توسعه‌دهنده چند بار کامیت کرده و کار یکدیگر را با موفقیت ادغام کرده‌اند. .Jessica's history after pushing all changes back to the server image::images/small-team-7.png[Jessica's history after pushing all changes back to the server] -That is one of the simplest workflows. -You work for a while (generally in a topic branch), and merge that work into your `master` branch when it's ready to be integrated. -When you want to share that work, you fetch and merge your `master` from `origin/master` if it has changed, and finally push to the `master` branch on the server. -The general sequence is something like this: +این یکی از ساده‌ترین روندهای کاری است. شما برای مدتی کار می‌کنید (معمولاً در یک شاخه موضوعی) و وقتی کار آماده ادغام شد، آن را به شاخه `master` خود ادغام می‌کنید. وقتی می‌خواهید آن کار را به اشتراک بگذارید، شاخه `master` را از `origin/master` دریافت و ادغام می‌کنید اگر تغییر کرده باشد، و در نهایت به شاخه `master` روی سرور ارسال می‌کنید. توالی کلی چیزی شبیه این است: + .General sequence of events for a simple multiple-developer Git workflow image::images/small-team-flow.png[General sequence of events for a simple multiple-developer Git workflow] -==== Private Managed Team +==== Private Managed Team (تیم خصوصی مدیریت‌شده) (((contributing, private managed team))) -In this next scenario, you'll look at contributor roles in a larger private group. -You'll learn how to work in an environment where small groups collaborate on features, after which those team-based contributions are integrated by another party. +در سناریوی بعدی، نقش‌های مشارکت‌کنندگان در یک گروه خصوصی بزرگ‌تر را بررسی می‌کنید. یاد می‌گیرید چگونه در محیطی کار کنید که گروه‌های کوچک روی ویژگی‌ها همکاری می‌کنند و سپس مشارکت‌های تیمی توسط گروه دیگری ادغام می‌شود. -Let's say that John and Jessica are working together on one feature (call this "`featureA`"), while Jessica and a third developer, Josie, are working on a second (say, "`featureB`"). -In this case, the company is using a type of integration-manager workflow where the work of the individual groups is integrated only by certain engineers, and the `master` branch of the main repo can be updated only by those engineers. -In this scenario, all work is done in team-based branches and pulled together by the integrators later. +فرض کنید جان و جسیکا روی یک ویژگی با هم کار می‌کنند (به آن "`featureA`" می‌گوییم)، در حالی که جسیکا و توسعه‌دهنده سومی به نام جوزی روی ویژگی دوم (مثلاً "`featureB`") کار می‌کنند. در این حالت، شرکت از نوعی روند کاری به نام مدیر ادغام استفاده می‌کند که کار گروه‌های فردی تنها توسط مهندسان خاصی ادغام می‌شود و شاخه `master` مخزن اصلی تنها توسط آن مهندسان به‌روزرسانی می‌شود. در این سناریو، همه کارها در شاخه‌های تیمی انجام می‌شود و بعداً توسط ادغام‌کنندگان جمع‌آوری می‌شود. -Let's follow Jessica's workflow as she works on her two features, collaborating in parallel with two different developers in this environment. -Assuming she already has her repository cloned, she decides to work on `featureA` first. -She creates a new branch for the feature and does some work on it there: +بیایید روند کاری جسیکا را دنبال کنیم که روی دو ویژگی خود کار می‌کند و به طور موازی با دو توسعه‌دهنده مختلف در این محیط همکاری دارد. فرض کنیم او قبلاً مخزن خود را کلون کرده است و تصمیم می‌گیرد ابتدا روی `featureA` کار کند. او یک شاخه جدید برای این ویژگی ایجاد می‌کند و روی آن کار می‌کند: [source,console] ---- @@ -349,8 +300,7 @@ $ git commit -am 'Add limit to log function' 1 files changed, 1 insertions(+), 1 deletions(-) ---- -At this point, she needs to share her work with John, so she pushes her `featureA` branch commits up to the server. -Jessica doesn't have push access to the `master` branch -- only the integrators do -- so she has to push to another branch in order to collaborate with John: +در این مرحله، او باید کارش را با جان به اشتراک بگذارد، بنابراین کامیت‌های شاخه `featureA` را به سرور ارسال می‌کند. جسیکا دسترسی ارسال به شاخه `master` ندارد -- فقط ادغام‌کنندگان این دسترسی را دارند — پس باید به شاخه دیگری ارسال کند تا بتواند با جان همکاری کند: [source,console] ---- @@ -360,9 +310,7 @@ To jessica@githost:simplegit.git * [new branch] featureA -> featureA ---- -Jessica emails John to tell him that she's pushed some work into a branch named `featureA` and he can look at it now. -While she waits for feedback from John, Jessica decides to start working on `featureB` with Josie. -To begin, she starts a new feature branch, basing it off the server's `master` branch: +جسیکا به جان ایمیل می‌زند و به او اطلاع می‌دهد که کارش را به شاخه‌ای به نام `featureA` ارسال کرده و اکنون می‌تواند آن را ببیند. در حالی که منتظر بازخورد جان است، جسیکا تصمیم می‌گیرد روی `featureB` با جوزی کار کند. برای شروع، یک شاخه ویژگی جدید ایجاد می‌کند که بر اساس شاخه `master` سرور ساخته شده است: [source,console] ---- @@ -372,7 +320,7 @@ $ git checkout -b featureB origin/master Switched to a new branch 'featureB' ---- -Now, Jessica makes a couple of commits on the `featureB` branch: +اکنون، جسیکا چند کامیت روی شاخه `featureB` انجام می‌دهد: [source,console] ---- @@ -386,14 +334,12 @@ $ git commit -am 'Add ls-files' 1 files changed, 5 insertions(+), 0 deletions(-) ---- -Jessica's repository now looks like this: +مخزن جسیکا اکنون به این صورت است: .Jessica's initial commit history image::images/managed-team-1.png[Jessica's initial commit history] -She's ready to push her work, but gets an email from Josie that a branch with some initial "`featureB`" work on it was already pushed to the server as the `featureBee` branch. -Jessica needs to merge those changes with her own before she can push her work to the server. -Jessica first fetches Josie's changes with `git fetch`: +او آماده است که تغییراتش را به سرور ارسال کند، اما ایمیلی از جوزی دریافت می‌کند که شاخه‌ای با مقداری کار اولیه روی "`featureB`" قبلاً به عنوان شاخه `featureBee` به سرور فرستاده شده است. جسیکا باید پیش از ارسال تغییراتش به سرور، این تغییرات را با کار خودش ادغام کند. او ابتدا تغییرات جوزی را با دستور `git fetch` دریافت می‌کند: [source,console] ---- @@ -403,7 +349,7 @@ From jessica@githost:simplegit * [new branch] featureBee -> origin/featureBee ---- -Assuming Jessica is still on her checked-out `featureB` branch, she can now merge Josie's work into that branch with `git merge`: +فرض کنیم جسیکا همچنان روی شاخه‌ی `featureB` که چک‌اوت کرده است، قرار دارد. اکنون می‌تواند با دستور `git merge` کار جوزی را به آن شاخه ادغام کند: [source,console] ---- @@ -414,8 +360,8 @@ Merge made by the 'recursive' strategy. 1 files changed, 4 insertions(+), 0 deletions(-) ---- -At this point, Jessica wants to push all of this merged "`featureB`" work back to the server, but she doesn't want to simply push her own `featureB` branch. -Rather, since Josie has already started an upstream `featureBee` branch, Jessica wants to push to _that_ branch, which she does with: +در این مرحله، جسیکا می‌خواهد تمام کار ادغام شده‌ی "`featureB`" را به سرور ارسال کند، اما نمی‌خواهد صرفاً شاخه‌ی `featureB` خود را پوش کند. +در عوض، چون جوزی قبلاً شاخه‌ی بالادستی `featureBee` را ایجاد کرده است، جسیکا می‌خواهد به همان شاخه پوش کند، که این کار را با دستور زیر انجام می‌دهد: [source,console] ---- @@ -425,12 +371,12 @@ To jessica@githost:simplegit.git fba9af8..cd685d1 featureB -> featureBee ---- -This is called a _refspec_. -See <> for a more detailed discussion of Git refspecs and different things you can do with them. -Also notice the `-u` flag; this is short for `--set-upstream`, which configures the branches for easier pushing and pulling later. +به این اصطلاحاً _refspec_ گفته می‌شود. +برای بحث مفصل‌تر درباره‌ی refspecهای گیت و کارهای مختلفی که می‌توانید با آن‌ها انجام دهید، به <> مراجعه کنید. +همچنین به پرچم `-u` توجه کنید؛ این کوتاه‌شده‌ی `--set-upstream` است که شاخه‌ها را برای پوشیدن و دریافت آسان‌تر در آینده تنظیم می‌کند. -Suddenly, Jessica gets email from John, who tells her he's pushed some changes to the `featureA` branch on which they are collaborating, and he asks Jessica to take a look at them. -Again, Jessica runs a simple `git fetch` to fetch _all_ new content from the server, including (of course) John's latest work: +ناگهان، جسیکا ایمیلی از جان دریافت می‌کند که به او می‌گوید برخی تغییرات را روی شاخه‌ی `featureA` که با هم روی آن همکاری می‌کنند، پوش کرده است و از جسیکا می‌خواهد آن‌ها را بررسی کند. +دوباره، جسیکا با اجرای دستور ساده‌ی `git fetch` تمام محتوای جدید از سرور، از جمله آخرین کار جان را دریافت می‌کند: [source,console] ---- @@ -440,7 +386,7 @@ From jessica@githost:simplegit 3300904..aad881d featureA -> origin/featureA ---- -Jessica can display the log of John's new work by comparing the content of the newly-fetched `featureA` branch with her local copy of the same branch: +جسیکا می‌تواند با مقایسه محتوای شاخه‌ی `featureA` که تازه دریافت شده با نسخه‌ی محلی خودش از همان شاخه، لاگ کار جدید جان را نمایش دهد: [source,console] ---- @@ -452,7 +398,7 @@ Date: Fri May 29 19:57:33 2009 -0700 Increase log output to 30 from 25 ---- -If Jessica likes what she sees, she can merge John's new work into her local `featureA` branch with: +اگر جسیکا از آنچه می‌بیند راضی بود، می‌تواند کار جدید جان را با دستور زیر به شاخه‌ی محلی `featureA` خود ادغام کند: [source,console] ---- @@ -465,7 +411,7 @@ Fast forward 1 files changed, 9 insertions(+), 1 deletions(-) ---- -Finally, Jessica might want to make a couple minor changes to all that merged content, so she is free to make those changes, commit them to her local `featureA` branch, and push the end result back to the server: +در نهایت، جسیکا ممکن است بخواهد چند تغییر کوچک در تمام آن محتوای ادغام شده اعمال کند، پس آزاد است تغییرات را انجام دهد، آن‌ها را به شاخه‌ی محلی `featureA` خود کامیت کند و نتیجه نهایی را به سرور پوش کند: [source,console] ---- @@ -478,36 +424,36 @@ To jessica@githost:simplegit.git 3300904..774b3ed featureA -> featureA ---- -Jessica's commit history now looks something like this: +حالا تاریخچه‌ی کامیت‌های جسیکا چیزی شبیه به این است: .Jessica's history after committing on a feature branch image::images/managed-team-2.png[Jessica's history after committing on a feature branch] -At some point, Jessica, Josie, and John inform the integrators that the `featureA` and `featureBee` branches on the server are ready for integration into the mainline. -After the integrators merge these branches into the mainline, a fetch will bring down the new merge commit, making the history look like this: +در مقطعی، جسیکا، جوزی و جان به یکپارچه‌سازها اطلاع می‌دهند که شاخه‌های `featureA` و `featureBee` روی سرور آماده‌ی ادغام در شاخه‌ی اصلی هستند. +پس از اینکه یکپارچه‌سازها این شاخه‌ها را در شاخه‌ی اصلی ادغام کردند، یک fetch جدید، کامیت ادغام را دریافت می‌کند و تاریخچه به شکل زیر درمی‌آید: .Jessica's history after merging both her topic branches image::images/managed-team-3.png[Jessica's history after merging both her topic branches] -Many groups switch to Git because of this ability to have multiple teams working in parallel, merging the different lines of work late in the process. -The ability of smaller subgroups of a team to collaborate via remote branches without necessarily having to involve or impede the entire team is a huge benefit of Git. -The sequence for the workflow you saw here is something like this: +بسیاری از گروه‌ها به خاطر این قابلیت که چند تیم بتوانند به‌طور موازی کار کنند و خطوط مختلف کاری را در پایان فرآیند با هم ادغام کنند، به گیت روی می‌آورند. +توانایی گروه‌های کوچک‌تر تیم برای همکاری از طریق شاخه‌های راه دور بدون آنکه مجبور باشند کل تیم را درگیر یا مانع کار آن‌ها شوند، یکی از مزایای بزرگ گیت است. +دنباله‌ی کاری که در اینجا دیدید به این صورت است: .Basic sequence of this managed-team workflow image::images/managed-team-flow.png[Basic sequence of this managed-team workflow] [[_public_project]] -==== Forked Public Project +==== Forked Public Project (پروژه‌ی عمومی فورک شده) (((contributing, public small project))) -Contributing to public projects is a bit different. -Because you don't have the permissions to directly update branches on the project, you have to get the work to the maintainers some other way. -This first example describes contributing via forking on Git hosts that support easy forking. -Many hosting sites support this (including GitHub, BitBucket, repo.or.cz, and others), and many project maintainers expect this style of contribution. -The next section deals with projects that prefer to accept contributed patches via email. +مشارکت در پروژه‌های عمومی کمی متفاوت است. +چون شما اجازه‌ی به‌روزرسانی مستقیم شاخه‌ها روی پروژه را ندارید، باید کار خود را به مدیران پروژه به روش دیگری برسانید. +این مثال اول، مشارکت از طریق فورک کردن روی میزبان‌های گیت که فورک آسان را پشتیبانی می‌کنند، را شرح می‌دهد. +بسیاری از سایت‌های میزبانی این ویژگی را دارند (از جمله GitHub، BitBucket، repo.or.cz و غیره) و بسیاری از مدیران پروژه این سبک مشارکت را انتظار دارند. +بخش بعدی به پروژه‌هایی می‌پردازد که ترجیح می‌دهند پچ‌های ارسالی از طریق ایمیل دریافت کنند. -First, you'll probably want to clone the main repository, create a topic branch for the patch or patch series you're planning to contribute, and do your work there. -The sequence looks basically like this: +ابتدا احتمالاً می‌خواهید مخزن اصلی را کلون کنید، یک شاخه موضوعی برای پچ یا سری پچ‌هایی که قصد مشارکت دارید ایجاد کنید و کار خود را در آنجا انجام دهید. +دنباله کاری به‌طور کلی به این شکل است: [source,console] ---- @@ -522,23 +468,23 @@ $ git commit [NOTE] ==== -You may want to use `rebase -i` to squash your work down to a single commit, or rearrange the work in the commits to make the patch easier for the maintainer to review -- see <> for more information about interactive rebasing. +شاید بخواهید از `rebase -i` برای فشرده کردن کار خود به یک کامیت واحد استفاده کنید، یا ترتیب کامیت‌ها را تغییر دهید تا پچ برای مدیر پروژه راحت‌تر بررسی شود — برای اطلاعات بیشتر درباره بازنویسی تاریخچه تعاملی، به <> مراجعه کنید. ==== -When your branch work is finished and you're ready to contribute it back to the maintainers, go to the original project page and click the "`Fork`" button, creating your own writable fork of the project. -You then need to add this repository URL as a new remote of your local repository; in this example, let's call it `myfork`: +وقتی کار روی شاخه‌تان تمام شد و آماده بودید که آن را به مدیران پروژه بازگردانید، به صفحه اصلی پروژه بروید و روی دکمه‌ی "`Fork`" کلیک کنید تا فورک قابل نوشتن خودتان از پروژه را بسازید. +سپس باید URL این مخزن را به‌عنوان یک ریموت جدید به مخزن محلی‌تان اضافه کنید؛ در این مثال، فرض کنیم نام آن را `myfork` می‌گذاریم: [source,console] ---- $ git remote add myfork ---- -You then need to push your new work to this repository. -It's easiest to push the topic branch you're working on to your forked repository, rather than merging that work into your `master` branch and pushing that. -The reason is that if your work isn't accepted or is cherry-picked, you don't have to rewind your `master` branch (the Git `cherry-pick` operation is covered in more detail in <>). -If the maintainers `merge`, `rebase`, or `cherry-pick` your work, you'll eventually get it back via pulling from their repository anyhow. +سپس باید کار جدید خود را به این مخزن پوش کنید. +پوش کردن شاخه موضوعی که روی آن کار می‌کنید به مخزن فورک شده‌تان آسان‌تر است، تا اینکه آن کار را در شاخه‌ی `master` خود ادغام کرده و آن را پوش کنید. +دلیل این موضوع این است که اگر کار شما پذیرفته نشود یا به‌صورت cherry-pick انتخاب شود، نیازی به عقب بردن شاخه‌ی `master` خود ندارید (عملیات `cherry-pick` در گیت با جزئیات بیشتر در <> توضیح داده شده). +اگر مدیران پروژه کار شما را `merge`، `rebase` یا `cherry-pick` کنند، در نهایت از طریق pull گرفتن از مخزن آن‌ها دوباره آن را دریافت خواهید کرد. -In any event, you can push your work with: +در هر صورت، می‌توانید کار خود را با دستور زیر پوش کنید: [source,console] ---- @@ -546,11 +492,9 @@ $ git push -u myfork featureA ---- (((git commands, request-pull))) -Once your work has been pushed to your fork of the repository, you need to notify the maintainers of the original project that you have work you'd like them to merge. -This is often called a _pull request_, and you typically generate such a request either via the website -- GitHub has its own "`Pull Request`" mechanism that we'll go over in <> -- or you can run the `git request-pull` command and email the subsequent output to the project maintainer manually. +پس از اینکه کارتان به مخزن فورک شده‌تان ارسال شد، باید به نگهدارندگان پروژه اصلی اطلاع دهید که تغییراتی دارید که می‌خواهید ادغام کنند. این معمولاً به «درخواست کشیدن» (_pull request_) معروف است و معمولاً این درخواست را یا از طریق وب‌سایت — گیت‌هاب مکانیزم مخصوص خودش به نام «Pull Request» دارد که در <> بررسی خواهیم کرد — یا با اجرای دستور `git request-pull` ایجاد می‌کنید و خروجی آن را به صورت دستی از طریق ایمیل برای نگهدارنده پروژه می‌فرستید. -The `git request-pull` command takes the base branch into which you want your topic branch pulled and the Git repository URL you want them to pull from, and produces a summary of all the changes you're asking to be pulled. -For instance, if Jessica wants to send John a pull request, and she's done two commits on the topic branch she just pushed, she can run this: +دستور `git request-pull` شاخه پایه‌ای که می‌خواهید شاخه موضوعی‌تان به آن کشیده شود و آدرس مخزن گیت که می‌خواهید از آن کشیده شود را می‌گیرد و خلاصه‌ای از همه تغییراتی که درخواست کشیدن آنها را دارید، تولید می‌کند. برای مثال، اگر جسیکا بخواهد برای جان درخواست کشیدن بفرستد و دو کامیت روی شاخه موضوعی که تازه ارسال کرده انجام داده باشد، می‌تواند این دستور را اجرا کند: [source,console] ---- @@ -571,11 +515,9 @@ Jessica Smith (2): 1 files changed, 9 insertions(+), 1 deletions(-) ---- -This output can be sent to the maintainer -- it tells them where the work was branched from, summarizes the commits, and identifies from where the new work is to be pulled. +این خروجی را می‌توان برای نگهدارنده فرستاد — این خروجی به آنها می‌گوید شاخه کار از کجا منشعب شده، کامیت‌ها را خلاصه می‌کند و مشخص می‌کند کار جدید از کجا باید کشیده شود. -On a project for which you're not the maintainer, it's generally easier to have a branch like `master` always track `origin/master` and to do your work in topic branches that you can easily discard if they're rejected. -Having work themes isolated into topic branches also makes it easier for you to rebase your work if the tip of the main repository has moved in the meantime and your commits no longer apply cleanly. -For example, if you want to submit a second topic of work to the project, don't continue working on the topic branch you just pushed up -- start over from the main repository's `master` branch: +در پروژه‌ای که شما نگهدارنده آن نیستید، معمولاً راحت‌تر است که شاخه‌ای مثل `master` همیشه شاخه `origin/master` را دنبال کند و کارتان را در شاخه‌های موضوعی انجام دهید که در صورت رد شدن بتوانید به آسانی آنها را حذف کنید. جدا کردن موضوعات کاری در شاخه‌های جداگانه همچنین کار بازپایه‌گذاری (rebase) را آسان‌تر می‌کند، اگر در این فاصله نوک مخزن اصلی تغییر کرده باشد و کامیت‌های شما به صورت تمیز اعمال نشوند. برای مثال، اگر بخواهید موضوع دومی را به پروژه ارائه دهید، روی همان شاخه موضوعی که تازه ارسال کرده‌اید کار نکنید — از شاخه `master` مخزن اصلی شروع کنید: [source,console] ---- @@ -588,13 +530,12 @@ $ git request-pull origin/master myfork $ git fetch origin ---- -Now, each of your topics is contained within a silo -- similar to a patch queue -- that you can rewrite, rebase, and modify without the topics interfering or interdepending on each other, like so: +اکنون هر یک از موضوعات کاری شما در یک محفظه جداگانه قرار دارد — مشابه صف پچ‌ها — که می‌توانید به دلخواه بازنویسی، بازپایه‌گذاری و اصلاح کنید بدون اینکه موضوعات کاری با هم تداخل یا وابستگی داشته باشند، مانند شکل زیر: .Initial commit history with `featureB` work image::images/public-small-1.png[Initial commit history with `featureB` work] -Let's say the project maintainer has pulled in a bunch of other patches and tried your first branch, but it no longer cleanly merges. -In this case, you can try to rebase that branch on top of `origin/master`, resolve the conflicts for the maintainer, and then resubmit your changes: +فرض کنید نگهدارنده پروژه تعدادی پچ دیگر را دریافت کرده و شاخه اول شما را امتحان کرده، اما دیگر به صورت تمیز ادغام نمی‌شود. در این حالت می‌توانید شاخه را روی `origin/master` بازپایه‌گذاری کرده، تعارض‌ها را برای نگهدارنده حل کنید و سپس تغییراتتان را دوباره ارسال نمایید: [source,console] ---- @@ -603,18 +544,15 @@ $ git rebase origin/master $ git push -f myfork featureA ---- -This rewrites your history to now look like <>. +این کار تاریخچه شما را طوری بازنویسی می‌کند که شبیه <> شود. [[psp_b]] .Commit history after `featureA` work image::images/public-small-2.png[Commit history after `featureA` work] -Because you rebased the branch, you have to specify the `-f` to your push command in order to be able to replace the `featureA` branch on the server with a commit that isn't a descendant of it. -An alternative would be to push this new work to a different branch on the server (perhaps called `featureAv2`). +چون شاخه را بازپایه‌گذاری کرده‌اید، باید هنگام ارسال تغییرات گزینه `-f` را به دستور push اضافه کنید تا بتوانید شاخه `featureA` روی سرور را با کامیتی جایگزین کنید که فرزند آن نیست. راه دیگر این است که این کار جدید را به شاخه متفاوتی روی سرور (مثلاً `featureAv2`) ارسال کنید. -Let's look at one more possible scenario: the maintainer has looked at work in your second branch and likes the concept but would like you to change an implementation detail. -You'll also take this opportunity to move the work to be based off the project's current `master` branch. -You start a new branch based off the current `origin/master` branch, squash the `featureB` changes there, resolve any conflicts, make the implementation change, and then push that as a new branch: +یک سناریوی دیگر را بررسی کنیم: نگهدارنده پروژه کار روی شاخه دوم شما را دیده و ایده آن را می‌پسندد، اما می‌خواهد جزئیات پیاده‌سازی‌ای را تغییر دهید. همچنین از این فرصت استفاده می‌کنید تا کار را بر اساس شاخه `master` فعلی پروژه بسازید. یک شاخه جدید بر اساس شاخه `origin/master` فعلی می‌سازید، تغییرات `featureB` را با گزینه `--squash` ادغام می‌کنید، تعارض‌ها را حل می‌کنید، تغییر پیاده‌سازی را انجام می‌دهید و آن را به عنوان شاخه جدید ارسال می‌کنید: (((git commands, merge, squash))) [source,console] @@ -626,25 +564,23 @@ $ git commit $ git push myfork featureBv2 ---- -The `--squash` option takes all the work on the merged branch and squashes it into one changeset producing the repository state as if a real merge happened, without actually making a merge commit. -This means your future commit will have one parent only and allows you to introduce all the changes from another branch and then make more changes before recording the new commit. -Also the `--no-commit` option can be useful to delay the merge commit in case of the default merge process. +گزینه `--squash` همه تغییرات شاخه ادغام شده را در یک تغییر واحد جمع می‌کند و حالت مخزن را به گونه‌ای تولید می‌کند که انگار ادغام واقعی انجام شده، بدون اینکه کامیت ادغام ساخته شود. این یعنی کامیت بعدی شما فقط یک والد خواهد داشت و به شما امکان می‌دهد همه تغییرات شاخه دیگر را وارد کرده و سپس قبل از ثبت کامیت جدید، تغییرات بیشتری اعمال کنید. همچنین گزینه `--no-commit` می‌تواند مفید باشد تا ثبت کامیت ادغام را در فرآیند ادغام پیش‌فرض به تعویق بیندازد. -At this point, you can notify the maintainer that you've made the requested changes, and that they can find those changes in your `featureBv2` branch. +در این مرحله می‌توانید به نگهدارنده اطلاع دهید که تغییرات خواسته شده را انجام داده‌اید و آنها می‌توانند این تغییرات را در شاخه `featureBv2` شما پیدا کنند. .Commit history after `featureBv2` work image::images/public-small-3.png[Commit history after `featureBv2` work] [[_project_over_email]] -==== Public Project over Email +==== Public Project over Email (پروژه عمومی از طریق ایمیل) (((contributing, public large project))) -Many projects have established procedures for accepting patches -- you'll need to check the specific rules for each project, because they will differ. -Since there are several older, larger projects which accept patches via a developer mailing list, we'll go over an example of that now. + بسیاری از پروژه‌ها رویه‌های مشخصی برای پذیرش اصلاحات (پچ‌ها) دارند — باید قوانین خاص هر پروژه را بررسی کنید، زیرا این قوانین متفاوت خواهند بود. +از آنجا که چندین پروژه قدیمی و بزرگ وجود دارند که اصلاحات را از طریق لیست پستی توسعه‌دهندگان می‌پذیرند، اکنون مثالی از این روش را بررسی می‌کنیم. -The workflow is similar to the previous use case -- you create topic branches for each patch series you work on. -The difference is how you submit them to the project. -Instead of forking the project and pushing to your own writable version, you generate email versions of each commit series and email them to the developer mailing list: +روند کار مشابه حالت قبلی است — برای هر سری اصلاحاتی که روی آن کار می‌کنید، شاخه‌های موضوعی ایجاد می‌کنید. +تفاوت در نحوه ارسال آن‌ها به پروژه است. +به جای فورک کردن پروژه و ارسال تغییرات به نسخه قابل نوشتن خودتان، نسخه‌های ایمیلی هر سری کامیت را تولید کرده و آن‌ها را به لیست پستی توسعه‌دهندگان ارسال می‌کنید: [source,console] ---- @@ -656,9 +592,9 @@ $ git commit ---- (((git commands, format-patch))) -Now you have two commits that you want to send to the mailing list. -You use `git format-patch` to generate the mbox-formatted files that you can email to the list -- it turns each commit into an email message with the first line of the commit message as the subject and the rest of the message plus the patch that the commit introduces as the body. -The nice thing about this is that applying a patch from an email generated with `format-patch` preserves all the commit information properly. +حالا شما دو کامیت دارید که می‌خواهید آنها را به فهرست پستی ارسال کنید. +از دستور `git format-patch` استفاده می‌کنید تا فایل‌هایی با فرمت mbox تولید کنید که می‌توانید آنها را به فهرست پستی ایمیل کنید — این دستور هر کامیت را به یک پیام ایمیل تبدیل می‌کند که خط اول پیام کامیت موضوع ایمیل است و بقیه پیام به همراه پچی که کامیت ایجاد کرده، در بدنه ایمیل قرار می‌گیرد. +نکته خوب این است که اعمال پچی که از ایمیلی تولید شده با `format-patch` گرفته شده، تمام اطلاعات کامیت را به درستی حفظ می‌کند. [source,console] ---- @@ -667,9 +603,9 @@ $ git format-patch -M origin/master 0002-increase-log-output-to-30-from-25.patch ---- -The `format-patch` command prints out the names of the patch files it creates. -The `-M` switch tells Git to look for renames. -The files end up looking like this: +دستور `format-patch` نام فایل‌های پچی که ایجاد می‌کند را نمایش می‌دهد. +کلید `-M` به گیت می‌گوید که به دنبال تغییر نام فایل‌ها بگردد. +فایل‌ها به این شکل خواهند بود: [source,console] ---- @@ -702,17 +638,17 @@ index 76f47bc..f9815f1 100644 2.1.0 ---- -You can also edit these patch files to add more information for the email list that you don't want to show up in the commit message. -If you add text between the `---` line and the beginning of the patch (the `diff --git` line), the developers can read it, but that content is ignored by the patching process. +همچنین می‌توانید این فایل‌های پچ را ویرایش کنید تا اطلاعات بیشتری برای فهرست پستی اضافه کنید که نمی‌خواهید در پیام کامیت نمایش داده شود. +اگر متنی بین خط `---` و ابتدای پچ (خط `diff --git`) اضافه کنید، توسعه‌دهندگان آن را می‌خوانند اما این محتوا توسط فرآیند پچ اعمال نادیده گرفته می‌شود. -To email this to a mailing list, you can either paste the file into your email program or send it via a command-line program. -Pasting the text often causes formatting issues, especially with "`smarter`" clients that don't preserve newlines and other whitespace appropriately. -Luckily, Git provides a tool to help you send properly formatted patches via IMAP, which may be easier for you. -We'll demonstrate how to send a patch via Gmail, which happens to be the email agent we know best; you can read detailed instructions for a number of mail programs at the end of the aforementioned `Documentation/SubmittingPatches` file in the Git source code. +برای ارسال این فایل به فهرست پستی، می‌توانید فایل را در برنامه ایمیل خود کپی کنید یا از برنامه خط فرمان استفاده کنید. +کپی کردن متن اغلب باعث مشکلات قالب‌بندی می‌شود، به‌ویژه در کلاینت‌های "`هوشمندتر`" که خطوط جدید و فاصله‌های سفید را به درستی حفظ نمی‌کنند. +خوشبختانه، گیت ابزاری برای ارسال پچ‌های قالب‌بندی‌شده به صورت صحیح از طریق IMAP فراهم کرده که ممکن است برای شما آسان‌تر باشد. +ما نحوه ارسال پچ از طریق جیمیل را نشان می‌دهیم که ما آن را بهتر می‌شناسیم؛ می‌توانید دستورالعمل‌های دقیق برای چند برنامه ایمیل مختلف را در انتهای فایل `Documentation/SubmittingPatches` در کد منبع گیت بخوانید. (((git commands, config)))(((email))) -First, you need to set up the imap section in your `~/.gitconfig` file. -You can set each value separately with a series of `git config` commands, or you can add them manually, but in the end your config file should look something like this: +ابتدا باید بخش imap را در فایل `~/.gitconfig` خود تنظیم کنید. +می‌توانید هر مقدار را به صورت جداگانه با چند دستور `git config` تنظیم کنید یا آنها را به صورت دستی اضافه کنید، اما در نهایت فایل پیکربندی شما باید چیزی شبیه به این باشد: [source,ini] ---- @@ -725,8 +661,8 @@ You can set each value separately with a series of `git config` commands, or you sslverify = false ---- -If your IMAP server doesn't use SSL, the last two lines probably aren't necessary, and the host value will be `imap://` instead of `imaps://`. -When that is set up, you can use `git imap-send` to place the patch series in the Drafts folder of the specified IMAP server: +اگر سرور IMAP شما از SSL استفاده نمی‌کند، احتمالاً دو خط آخر لازم نیست و مقدار میزبان به جای `imaps://`، `imap://` خواهد بود. +وقتی این تنظیمات انجام شد، می‌توانید از `git imap-send` برای قرار دادن سری پچ‌ها در پوشه Drafts سرور IMAP مشخص‌شده استفاده کنید: [source,console] ---- @@ -738,10 +674,10 @@ sending 2 messages 100% (2/2) done ---- -At this point, you should be able to go to your Drafts folder, change the To field to the mailing list you're sending the patch to, possibly CC the maintainer or person responsible for that section, and send it off. +در این مرحله، باید بتوانید به پوشه Drafts خود بروید، فیلد گیرنده (To) را به فهرست پستی که پچ را به آن ارسال می‌کنید تغییر دهید، احتمالاً نفر مسئول یا نگهدارنده بخش را CC کنید و ایمیل را ارسال نمایید. -You can also send the patches through an SMTP server. -As before, you can set each value separately with a series of `git config` commands, or you can add them manually in the sendemail section in your `~/.gitconfig` file: +همچنین می‌توانید پچ‌ها را از طریق سرور SMTP ارسال کنید. +مانند قبل، می‌توانید هر مقدار را جداگانه با چند دستور `git config` تنظیم کنید یا آنها را به صورت دستی در بخش sendemail فایل `~/.gitconfig` اضافه کنید: [source,ini] ---- @@ -752,7 +688,7 @@ As before, you can set each value separately with a series of `git config` comma smtpserverport = 587 ---- -After this is done, you can use `git send-email` to send your patches: +After this is done, you can use `git پس از انجام این کار، می‌توانید از دستور `git send-email` برای ارسال پچ‌های خود استفاده کنید: -email` to send your patches: [source,console] ---- @@ -765,7 +701,7 @@ Who should the emails be sent to? jessica@example.com Message-ID to be used as In-Reply-To for the first email? y ---- -Then, Git spits out a bunch of log information looking something like this for each patch you're sending: +سپس، گیت برای هر پچی که ارسال می‌کنید، یک سری اطلاعات لاگ مشابه این را نمایش می‌دهد: [source,text] ---- @@ -787,16 +723,16 @@ Result: OK [TIP] ==== -For help on configuring your system and email, more tips and tricks, and a sandbox to send a trial patch via email, go to https://git-send-email.io[git-send-email.io^]. +برای دریافت کمک در تنظیم سیستم و ایمیل، نکات و ترفندهای بیشتر، و محیط آزمایشی برای ارسال پچ آزمایشی از طریق ایمیل، به https://git-send-email.io مراجعه کنید. ==== -==== Summary +==== Summary (خلاصه) -In this section, we covered multiple workflows, and talked about the differences between working as part of a small team on closed-source projects vs contributing to a big public project. -You know to check for white-space errors before committing, and can write a great commit message. -You learned how to format patches, and e-mail them to a developer mailing list. -Dealing with merges was also covered in the context of the different workflows. -You are now well prepared to collaborate on any project. +در این بخش، چندین روند کاری را بررسی کردیم و تفاوت‌های کار در یک تیم کوچک روی پروژه‌های کد بسته را با مشارکت در پروژه‌های بزرگ و عمومی توضیح دادیم. +شما یاد گرفتید که قبل از کامیت کردن، خطاهای فاصله سفید را چک کنید و یک پیام کامیت عالی بنویسید. +یاد گرفتید چگونه پچ‌ها را قالب‌بندی کرده و آنها را به فهرست پستی توسعه‌دهندگان ایمیل کنید. +پرداختن به ادغام‌ها نیز در چارچوب روندهای کاری مختلف پوشش داده شد. +اکنون به خوبی آماده همکاری در هر پروژه‌ای هستید. -Next, you'll see how to work the other side of the coin: maintaining a Git project. -You'll learn how to be a benevolent dictator or integration manager. +در ادامه، خواهید دید چگونه سمت دیگر ماجرا را مدیریت کنید: نگهداری یک پروژه گیت. +یاد می‌گیرید چگونه یک دیکتاتور خیرخواه یا مدیر ادغام باشید. \ No newline at end of file From 92bb28408784af653e795b06f786a38db906ecf7 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 12 Aug 2025 12:29:31 +0330 Subject: [PATCH 474/549] translate(05-distributed-git): translated contributing to persian --- book/05-distributed-git/sections/contributing.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 5cbdf734..4544ffbd 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -688,7 +688,7 @@ sending 2 messages smtpserverport = 587 ---- -After this is done, you can use `git پس از انجام این کار، می‌توانید از دستور `git send-email` برای ارسال پچ‌های خود استفاده کنید: -email` to send your patches: +پس از انجام این کار، می‌توانید از دستور `git send-email` برای ارسال پچ‌های خود استفاده کنید: [source,console] ---- From 20d755091593f7a6509317c4051b3f3c07d06bc7 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 12 Aug 2025 12:36:00 +0330 Subject: [PATCH 475/549] translate(05-distributed-git): translated distributed-workflows to persian --- .../sections/distributed-workflows.asc | 124 +++++++++--------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index b61289dc..3ba74ca1 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -1,102 +1,102 @@ -=== Distributed Workflows +=== Distributed Workflows (جریان‌های کاری توزیع‌شده) (((workflows))) -In contrast with Centralized Version Control Systems (CVCSs), the distributed nature of Git allows you to be far more flexible in how developers collaborate on projects. -In centralized systems, every developer is a node working more or less equally with a central hub. -In Git, however, every developer is potentially both a node and a hub; that is, every developer can both contribute code to other repositories and maintain a public repository on which others can base their work and which they can contribute to. -This presents a vast range of workflow possibilities for your project and/or your team, so we'll cover a few common paradigms that take advantage of this flexibility. -We'll go over the strengths and possible weaknesses of each design; you can choose a single one to use, or you can mix and match features from each. +برخلاف سیستم‌های کنترل نسخه متمرکز (CVCSها)، ماهیت توزیع‌شده گیت به شما اجازه می‌دهد که در همکاری توسعه‌دهندگان روی پروژه‌ها بسیار انعطاف‌پذیرتر عمل کنید. +در سیستم‌های متمرکز، هر توسعه‌دهنده یک گره است که به طور مساوی با یک هاب مرکزی کار می‌کند. +اما در گیت، هر توسعه‌دهنده می‌تواند هم گره باشد و هم هاب؛ یعنی هر توسعه‌دهنده می‌تواند هم به مخازن دیگر کد بدهد و هم یک مخزن عمومی نگهداری کند که دیگران بتوانند روی آن کار کنند و به آن مشارکت دهند. +این موضوع امکان‌های گسترده‌ای از جریان‌های کاری را برای پروژه و/یا تیم شما فراهم می‌کند، بنابراین ما چند الگوی رایج که از این انعطاف‌پذیری بهره می‌برند را بررسی خواهیم کرد. +ما نقاط قوت و ضعف احتمالی هر طراحی را مرور می‌کنیم؛ شما می‌توانید یکی از آنها را برای استفاده انتخاب کنید یا ویژگی‌های مختلف را ترکیب کنید. -==== Centralized Workflow +==== Centralized Workflow (جریان کاری متمرکز) (((workflows, centralized))) -In centralized systems, there is generally a single collaboration model -- the centralized workflow. -One central hub, or _repository_, can accept code, and everyone synchronizes their work with it. -A number of developers are nodes -- consumers of that hub -- and synchronize with that centralized location. +در سیستم‌های متمرکز معمولاً یک مدل همکاری وجود دارد — جریان کاری متمرکز. +یک هاب مرکزی یا _مخزن_ وجود دارد که کد را می‌پذیرد و همه کارهای خود را با آن همگام‌سازی می‌کنند. +تعدادی توسعه‌دهنده به عنوان گره — مصرف‌کنندگان آن هاب — کار می‌کنند و با آن مکان مرکزی همگام می‌شوند. .Centralized workflow image::images/centralized_workflow.png[Centralized workflow] -This means that if two developers clone from the hub and both make changes, the first developer to push their changes back up can do so with no problems. -The second developer must merge in the first one's work before pushing changes up, so as not to overwrite the first developer's changes. -This concept is as true in Git as it is in Subversion(((Subversion))) (or any CVCS), and this model works perfectly well in Git. +این بدان معناست که اگر دو توسعه‌دهنده از هاب کلون کنند و هر دو تغییراتی ایجاد کنند، اولین توسعه‌دهنده‌ای که تغییراتش را به سرور ارسال کند، بدون مشکل می‌تواند این کار را انجام دهد. +توسعه‌دهنده دوم باید قبل از ارسال تغییرات خود، کار توسعه‌دهنده اول را با تغییرات خود ادغام کند تا تغییرات توسعه‌دهنده اول بازنویسی نشود. +این مفهوم در گیت همانقدر درست است که در ساب‌ورژن(((Subversion))) (یا هر CVCS دیگری) درست است، و این مدل در گیت به خوبی کار می‌کند. -If you are already comfortable with a centralized workflow in your company or team, you can easily continue using that workflow with Git. -Simply set up a single repository, and give everyone on your team push access; Git won't let users overwrite each other. +اگر شما قبلاً با جریان کاری متمرکز در شرکت یا تیم خود راحت هستید، می‌توانید به راحتی با گیت نیز از همین مدل استفاده کنید. +فقط کافی است یک مخزن راه‌اندازی کنید و به همه اعضای تیم دسترسی ارسال (push) بدهید؛ گیت اجازه نمی‌دهد کاربران تغییرات همدیگر را بازنویسی کنند. -Say John and Jessica both start working at the same time. -John finishes his change and pushes it to the server. -Then Jessica tries to push her changes, but the server rejects them. -She is told that she's trying to push non-fast-forward changes and that she won't be able to do so until she fetches and merges. -This workflow is attractive to a lot of people because it's a paradigm that many are familiar and comfortable with. +فرض کنیم جان و جسیکا هر دو همزمان شروع به کار می‌کنند. +جان تغییراتش را تکمیل می‌کند و آنها را به سرور ارسال می‌کند. +سپس جسیکا تلاش می‌کند تغییراتش را ارسال کند اما سرور آن را رد می‌کند. +به او گفته می‌شود که در تلاش برای ارسال تغییرات غیرپیشرو (non-fast-forward) است و نمی‌تواند این کار را انجام دهد مگر اینکه تغییرات را بگیرد (fetch) و ادغام (merge) کند. +این جریان کاری برای بسیاری جذاب است چون الگویی است که بسیاری با آن آشنا و راحت هستند. -This is also not limited to small teams. -With Git's branching model, it's possible for hundreds of developers to successfully work on a single project through dozens of branches simultaneously. +این مدل محدود به تیم‌های کوچک نیست. +با مدل شاخه‌بندی گیت، صدها توسعه‌دهنده می‌توانند به طور همزمان از طریق ده‌ها شاخه روی یک پروژه کار کنند. [[_integration_manager]] -==== Integration-Manager Workflow +==== Integration-Manager Workflow (جریان کاری مدیر ادغام) (((workflows, integration manager))) -Because Git allows you to have multiple remote repositories, it's possible to have a workflow where each developer has write access to their own public repository and read access to everyone else's. -This scenario often includes a canonical repository that represents the "`official`" project. -To contribute to that project, you create your own public clone of the project and push your changes to it. -Then, you can send a request to the maintainer of the main project to pull in your changes. -The maintainer can then add your repository as a remote, test your changes locally, merge them into their branch, and push back to their repository. -The process works as follows (see <>): - -1. The project maintainer pushes to their public repository. -2. A contributor clones that repository and makes changes. -3. The contributor pushes to their own public copy. -4. The contributor sends the maintainer an email asking them to pull changes. -5. The maintainer adds the contributor's repository as a remote and merges locally. -6. The maintainer pushes merged changes to the main repository. +چون گیت به شما اجازه می‌دهد چند مخزن راه دور داشته باشید، امکان استفاده از جریانی وجود دارد که هر توسعه‌دهنده به مخزن عمومی خودش دسترسی نوشتن دارد و به مخازن دیگران دسترسی خواندن. +این حالت معمولاً شامل یک مخزن مرجع است که نمایانگر پروژه "`رسمی`" است. +برای مشارکت در آن پروژه، شما یک کلون عمومی از پروژه ایجاد می‌کنید و تغییرات خود را به آن ارسال می‌کنید. +سپس می‌توانید درخواست دهید که نگهدارنده پروژه اصلی تغییرات شما را دریافت کند. +نگهدارنده می‌تواند مخزن شما را به عنوان یک مخزن راه دور اضافه کند، تغییرات شما را به صورت محلی تست و ادغام کند، و سپس به مخزن خودش ارسال کند. +فرآیند به این صورت است (نگاه کنید به <>): + +1. نگهدارنده پروژه تغییرات را به مخزن عمومی خودش ارسال می‌کند. +2. یک مشارکت‌کننده آن مخزن را کلون می‌کند و تغییراتی ایجاد می‌کند. +3. مشارکت‌کننده تغییراتش را به نسخه عمومی خودش ارسال می‌کند. +4. مشارکت‌کننده ایمیلی به نگهدارنده می‌فرستد و درخواست می‌کند تغییرات را دریافت کند. +5. نگهدارنده مخزن مشارکت‌کننده را به عنوان مخزن راه دور اضافه می‌کند و تغییرات را به صورت محلی ادغام می‌کند. +6. نگهدارنده تغییرات ادغام شده را به مخزن اصلی ارسال می‌کند. [[wfdiag_b]] .Integration-manager workflow image::images/integration-manager.png[Integration-manager workflow] (((forking))) -This is a very common workflow with hub-based tools like GitHub or GitLab, where it's easy to fork a project and push your changes into your fork for everyone to see. -One of the main advantages of this approach is that you can continue to work, and the maintainer of the main repository can pull in your changes at any time. -Contributors don't have to wait for the project to incorporate their changes -- each party can work at their own pace. +این یک جریان کاری بسیار رایج با ابزارهای مبتنی بر هاب مانند GitHub یا GitLab است که در آن به راحتی می‌توان پروژه را فورک کرد و تغییرات را در فورک خود به اشتراک گذاشت. +یکی از مزایای اصلی این روش این است که شما می‌توانید به کار خود ادامه دهید و نگهدارنده مخزن اصلی هر زمان که بخواهد تغییرات شما را دریافت کند. +مشارکت‌کنندگان نیازی ندارند منتظر بمانند تا پروژه تغییراتشان را بپذیرد — هر طرف می‌تواند با سرعت خودش کار کند. -==== Dictator and Lieutenants Workflow +==== Dictator and Lieutenants Workflow (جریان کاری دیکتاتور و معاونان) (((workflows, dictator and lieutenants))) -This is a variant of a multiple-repository workflow. -It's generally used by huge projects with hundreds of collaborators; one famous example is the Linux kernel. -Various integration managers are in charge of certain parts of the repository; they're called _lieutenants_. -All the lieutenants have one integration manager known as the benevolent dictator. -The benevolent dictator pushes from their directory to a reference repository from which all the collaborators need to pull. -The process works like this (see <>): - -1. Regular developers work on their topic branch and rebase their work on top of `master`. - The `master` branch is that of the reference repository to which the dictator pushes. -2. Lieutenants merge the developers' topic branches into their `master` branch. -3. The dictator merges the lieutenants' `master` branches into the dictator's `master` branch. -4. Finally, the dictator pushes that `master` branch to the reference repository so the other developers can rebase on it. +این یک زیرمجموعه از جریان کاری چند مخزنه است. +معمولاً در پروژه‌های بسیار بزرگ با صدها همکار استفاده می‌شود؛ یک مثال مشهور کرنل لینوکس است. +چند مدیر ادغام مسئول بخش‌هایی از مخزن هستند؛ به آنها _معاونان_ گفته می‌شود. +تمام معاونان یک مدیر ادغام دارند که به او دیکتاتور خیرخواه گفته می‌شود. +دیکتاتور خیرخواه از شاخه خودش به مخزن مرجع که همه همکاران باید از آن بگیرند، ارسال می‌کند. +فرآیند به این صورت است (نگاه کنید به <>): + +1. توسعه‌دهندگان معمولی روی شاخه موضوعی خود کار می‌کنند و کارشان را روی شاخه `master` بازپایه (rebase) می‌کنند. + شاخه `master` متعلق به مخزن مرجعی است که دیکتاتور به آن ارسال می‌کند. +2. معاونان شاخه‌های موضوعی توسعه‌دهندگان را در شاخه `master` خود ادغام می‌کنند. +3. دیکتاتور شاخه‌های `master` معاونان را در شاخه `master` خودش ادغام می‌کند. +4. در نهایت دیکتاتور آن شاخه `master` را به مخزن مرجع ارسال می‌کند تا سایر توسعه‌دهندگان بتوانند روی آن بازپایه کنند. [[wfdiag_c]] .Benevolent dictator workflow image::images/benevolent-dictator.png[Benevolent dictator workflow] -This kind of workflow isn't common, but can be useful in very big projects, or in highly hierarchical environments. -It allows the project leader (the dictator) to delegate much of the work and collect large subsets of code at multiple points before integrating them. +این نوع جریان کاری رایج نیست، اما در پروژه‌های بسیار بزرگ یا محیط‌های سلسله‌مراتبی بسیار مفید است. +این امکان را به رهبر پروژه (دیکتاتور) می‌دهد که بخش زیادی از کار را واگذار کند و مجموعه‌های بزرگی از کد را در چند مرحله جمع‌آوری و سپس ادغام کند. [[_patterns_for_managing_source_code_branches]] -==== Patterns for Managing Source Code Branches +==== Patterns for Managing Source Code Branches (الگوهایی برای مدیریت شاخه‌های کد منبع) [NOTE] ==== -Martin Fowler has made a guide "Patterns for Managing Source Code Branches". -This guide covers all the common Git workflows, and explains how/when to use them. -There's also a section comparing high and low integration frequencies. +مارتین فاولر راهنمایی به نام "الگوهایی برای مدیریت شاخه‌های کد منبع" تهیه کرده است. +این راهنما تمام جریان‌های کاری رایج گیت را پوشش می‌دهد و توضیح می‌دهد که چگونه و چه زمانی از آنها استفاده کنیم. +بخشی نیز دارد که فرکانس‌های بالای ادغام و پایین را مقایسه می‌کند. https://martinfowler.com/articles/branching-patterns.html[^] ==== -==== Workflows Summary +==== Workflows Summary (خلاصه جریان‌های کاری) -These are some commonly used workflows that are possible with a distributed system like Git, but you can see that many variations are possible to suit your particular real-world workflow. -Now that you can (hopefully) determine which workflow combination may work for you, we'll cover some more specific examples of how to accomplish the main roles that make up the different flows. -In the next section, you'll learn about a few common patterns for contributing to a project. +این‌ها برخی جریان‌های کاری رایج هستند که با یک سیستم توزیع‌شده مانند گیت امکان‌پذیرند، اما می‌بینید که تنوع زیادی برای تطبیق با جریان کاری واقعی شما وجود دارد. +اکنون که (امیدواریم) بتوانید ترکیب مناسبی از جریان‌های کاری را برای خود مشخص کنید، به بررسی مثال‌های مشخص‌تری از چگونگی انجام نقش‌های اصلی در جریان‌های مختلف می‌پردازیم. +در بخش بعد، با چند الگوی رایج برای مشارکت در یک پروژه آشنا خواهید شد. \ No newline at end of file From b1ba38f91f7fb990cc697a13309e2737f65f4359 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Sun, 17 Aug 2025 20:12:43 +0330 Subject: [PATCH 476/549] translate(05-distributed-git): translated maintaining to persian --- .idea/workspace.xml | 27 +- .../sections/maintaining.asc | 363 +++++++++--------- 2 files changed, 208 insertions(+), 182 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9f3557d2..7330afff 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,8 +5,7 @@ - - + @@ -23,6 +22,29 @@ } } + diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index c377bb68..a933894a 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -1,59 +1,59 @@ -=== Maintaining a Project +=== Maintaining a Project (نگهداری یک پروژه) (((maintaining a project))) -In addition to knowing how to contribute effectively to a project, you'll likely need to know how to maintain one. -This can consist of accepting and applying patches generated via `format-patch` and emailed to you, or integrating changes in remote branches for repositories you've added as remotes to your project. -Whether you maintain a canonical repository or want to help by verifying or approving patches, you need to know how to accept work in a way that is clearest for other contributors and sustainable by you over the long run. +علاوه بر دانستن نحوه مشارکت مؤثر در یک پروژه، احتمالاً باید بدانید چگونه آن را نگهداری کنید. +این کار می‌تواند شامل پذیرش و اعمال اصلاحاتی باشد که از طریق `format-patch` ایجاد شده و به شما ایمیل شده‌اند، یا ادغام تغییرات در شاخه‌های راه دور برای مخازنی که به عنوان ریموت به پروژه خود اضافه کرده‌اید. +چه شما مسئول نگهداری یک مخزن رسمی باشید و چه بخواهید با تأیید یا تصویب اصلاحات کمک کنید، باید بدانید چگونه کار را به گونه‌ای بپذیرید که برای سایر مشارکت‌کنندگان واضح باشد و در درازمدت برای شما پایدار بماند. -==== Working in Topic Branches +==== Working in Topic Branches (کار در شاخه‌های موضوعی) (((branches, topic))) -When you're thinking of integrating new work, it's generally a good idea to try it out in a _topic branch_ -- a temporary branch specifically made to try out that new work. -This way, it's easy to tweak a patch individually and leave it if it's not working until you have time to come back to it. -If you create a simple branch name based on the theme of the work you're going to try, such as `ruby_client` or something similarly descriptive, you can easily remember it if you have to abandon it for a while and come back later. -The maintainer of the Git project tends to namespace these branches as well -- such as `sc/ruby_client`, where `sc` is short for the person who contributed the work. -As you'll remember, you can create the branch based off your `master` branch like this: +وقتی قصد دارید کاری جدید را ادغام کنید، معمولاً بهتر است آن را در یک _شاخه موضوعی_ امتحان کنید — شاخه‌ای موقتی که به طور خاص برای آزمایش آن کار جدید ایجاد می‌شود. +به این ترتیب، می‌توانید به راحتی یک اصلاحیه را به صورت جداگانه تنظیم کنید و اگر کار نمی‌کند آن را کنار بگذارید تا وقتی که وقت داشته باشید دوباره به آن برگردید. +اگر نام ساده‌ای برای شاخه بر اساس موضوع کاری که می‌خواهید امتحان کنید انتخاب کنید، مانند `ruby_client` یا چیزی مشابه که توصیفی باشد، به راحتی می‌توانید آن را به خاطر بسپارید اگر مجبور شوید برای مدتی آن را رها کنید و بعداً برگردید. +نگهدارنده پروژه Git معمولاً این شاخه‌ها را نیز با نام‌گذاری فضا (namespace) مشخص می‌کند — مثلاً `sc/ruby_client` که در آن `sc` مخفف نام شخصی است که کار را ارائه داده است. +همان‌طور که به یاد دارید، می‌توانید شاخه را بر اساس شاخه `master` خود اینگونه ایجاد کنید: [source,console] ---- $ git branch sc/ruby_client master ---- -Or, if you want to also switch to it immediately, you can use the `checkout -b` option: +یا اگر می‌خواهید بلافاصله به آن سوئیچ کنید، می‌توانید از گزینه `checkout -b` استفاده کنید: [source,console] ---- $ git checkout -b sc/ruby_client master ---- -Now you're ready to add the contributed work that you received into this topic branch and determine if you want to merge it into your longer-term branches. +حالا آماده‌اید که کار ارسالی را که دریافت کرده‌اید به این شاخه موضوعی اضافه کنید و تصمیم بگیرید که آیا می‌خواهید آن را به شاخه‌های بلندمدت خود ادغام کنید یا خیر. [[_patches_from_email]] -==== Applying Patches from Email +==== Applying Patches from Email (اعمال اصلاحات از طریق ایمیل) (((email, applying patches from))) -If you receive a patch over email that you need to integrate into your project, you need to apply the patch in your topic branch to evaluate it. -There are two ways to apply an emailed patch: with `git apply` or with `git am`. +اگر اصلاحیه‌ای از طریق ایمیل دریافت کردید که باید آن را در پروژه خود ادغام کنید، لازم است ابتدا آن اصلاحیه را در شاخه موضوعی خود اعمال کنید تا آن را ارزیابی نمایید. +دو روش برای اعمال اصلاحیه ایمیلی وجود دارد: با `git apply` یا با `git am`. -===== Applying a Patch with `apply` +===== Applying a Patch with `apply` (اعمال اصلاحیه با `apply`) (((git commands, apply))) -If you received the patch from someone who generated it with `git diff` or some variation of the Unix `diff` command (which is not recommended; see the next section), you can apply it with the `git apply` command. -Assuming you saved the patch at `/tmp/patch-ruby-client.patch`, you can apply the patch like this: +اگر اصلاحیه را از کسی دریافت کردید که آن را با `git diff` یا نسخه‌ای از دستور یونیکس `diff` ایجاد کرده است (که توصیه نمی‌شود؛ بخش بعدی را ببینید)، می‌توانید آن را با فرمان `git apply` اعمال کنید. +فرض کنیم اصلاحیه را در مسیر `/tmp/patch-ruby-client.patch` ذخیره کرده‌اید، می‌توانید به این صورت اعمالش کنید: [source,console] ---- $ git apply /tmp/patch-ruby-client.patch ---- -This modifies the files in your working directory. -It's almost identical to running a `patch -p1` command to apply the patch, although it's more paranoid and accepts fewer fuzzy matches than patch. -It also handles file adds, deletes, and renames if they're described in the `git diff` format, which `patch` won't do. -Finally, `git apply` is an "`apply all or abort all`" model where either everything is applied or nothing is, whereas `patch` can partially apply patchfiles, leaving your working directory in a weird state. -`git apply` is overall much more conservative than `patch`. -It won't create a commit for you -- after running it, you must stage and commit the changes introduced manually. +این کار فایل‌ها را در دایرکتوری کاری شما تغییر می‌دهد. +این تقریباً مشابه اجرای دستور `patch -p1` برای اعمال اصلاحیه است، با این تفاوت که `git apply` محتاط‌تر است و تطابق‌های مبهم کمتری را می‌پذیرد. +همچنین اگر افزودن، حذف یا تغییر نام فایل‌ها در فرمت `git diff` توصیف شده باشد، آن را مدیریت می‌کند، کاری که `patch` انجام نمی‌دهد. +در نهایت، `git apply` یک مدل "همه را اعمال کن یا همه را لغو کن" است، یعنی یا همه اصلاحات اعمال می‌شوند یا هیچ‌کدام، در حالی که `patch` ممکن است اصلاحات را به صورت ناقص اعمال کند و دایرکتوری کاری شما را در وضعیت نامناسبی قرار دهد. +در مجموع، `git apply` بسیار محافظه‌کارانه‌تر از `patch` است. +این فرمان برای شما کامیت ایجاد نمی‌کند — بعد از اجرای آن باید تغییرات را به صورت دستی استیج و کامیت کنید. -You can also use `git apply` to see if a patch applies cleanly before you try actually applying it -- you can run `git apply --check` with the patch: +همچنین می‌توانید از `git apply` استفاده کنید تا ببینید آیا اصلاحیه به صورت تمیز اعمال می‌شود یا خیر، قبل از اینکه واقعاً آن را اعمال کنید — می‌توانید با گزینه `--check` این کار را انجام دهید: [source,console] ---- @@ -62,20 +62,20 @@ error: patch failed: ticgit.gemspec:1 error: ticgit.gemspec: patch does not apply ---- -If there is no output, then the patch should apply cleanly. -This command also exits with a non-zero status if the check fails, so you can use it in scripts if you want. +اگر خروجی‌ای نداشت، یعنی اصلاحیه باید به‌خوبی اعمال شود. +این فرمان همچنین در صورت شکست بررسی، با کد خطای غیر صفر خارج می‌شود، بنابراین می‌توانید آن را در اسکریپت‌ها به کار ببرید. [[_git_am]] -===== Applying a Patch with `am` +===== Applying a Patch with `am` (اعمال اصلاحیه با `am`) (((git commands, am))) -If the contributor is a Git user and was good enough to use the `format-patch` command to generate their patch, then your job is easier because the patch contains author information and a commit message for you. -If you can, encourage your contributors to use `format-patch` instead of `diff` to generate patches for you. -You should only have to use `git apply` for legacy patches and things like that. +اگر مشارکت‌کننده از کاربران گیت باشد و به اندازه کافی حرفه‌ای باشد که از فرمان `format-patch` برای تولید پچ خود استفاده کند، کار شما آسان‌تر خواهد بود چون پچ شامل اطلاعات نویسنده و پیام کامیت برای شما است. +اگر می‌توانید، مشارکت‌کنندگان خود را تشویق کنید تا به جای استفاده از `diff`، برای تولید پچ‌ها از `format-patch` استفاده کنند. +شما معمولاً فقط برای پچ‌های قدیمی و موارد مشابه نیاز دارید از `git apply` استفاده کنید. -To apply a patch generated by `format-patch`, you use `git am` (the command is named `am` as it is used to "apply a series of patches from a mailbox"). -Technically, `git am` is built to read an mbox file, which is a simple, plain-text format for storing one or more email messages in one text file. -It looks something like this: +برای اعمال پچی که با `format-patch` تولید شده است، از `git am` استفاده می‌کنید (نام فرمان `am` به این دلیل است که برای «اعمال مجموعه‌ای از پچ‌ها از یک صندوق پستی» به کار می‌رود). +از نظر فنی، `git am` برای خواندن فایل mbox طراحی شده است، که یک فرمت ساده و متنی برای ذخیره‌سازی یک یا چند ایمیل در یک فایل متنی است. +این فرمت چیزی شبیه به این است: [source,console] ---- @@ -87,11 +87,11 @@ Subject: [PATCH 1/2] Add limit to log function Limit log functionality to the first 20 ---- -This is the beginning of the output of the `git format-patch` command that you saw in the previous section; it also represents a valid mbox email format. -If someone has emailed you the patch properly using `git send-email`, and you download that into an mbox format, then you can point `git am` to that mbox file, and it will start applying all the patches it sees. -If you run a mail client that can save several emails out in mbox format, you can save entire patch series into a file and then use `git am` to apply them one at a time. +این ابتدای خروجی فرمان `git format-patch` است که در بخش قبل دیدید؛ همچنین نمایانگر یک فرمت ایمیل معتبر mbox است. +اگر کسی پچ را به درستی از طریق `git send-email` برای شما ایمیل کرده باشد و شما آن را در قالب mbox دانلود کنید، می‌توانید به `git am` اشاره کنید که آن فایل mbox را بخواند و شروع به اعمال همه پچ‌های موجود در آن کند. +اگر از یک کلاینت ایمیل استفاده می‌کنید که می‌تواند چند ایمیل را در قالب mbox ذخیره کند، می‌توانید کل سری پچ‌ها را در یک فایل ذخیره کرده و سپس با `git am` آنها را یکی‌یکی اعمال کنید. -However, if someone uploaded a patch file generated via `git format-patch` to a ticketing system or something similar, you can save the file locally and then pass that file saved on your disk to `git am` to apply it: +با این حال، اگر کسی فایل پچی که با `git format-patch` تولید شده را در یک سیستم تیکتینگ یا مشابه آن بارگذاری کرده باشد، می‌توانید آن فایل را به صورت محلی ذخیره کرده و سپس آن فایل ذخیره شده روی دیسک را به `git am` بدهید تا اعمال شود: [source,console] ---- @@ -99,9 +99,9 @@ $ git am 0001-limit-log-function.patch Applying: Add limit to log function ---- -You can see that it applied cleanly and automatically created the new commit for you. -The author information is taken from the email's `From` and `Date` headers, and the message of the commit is taken from the `Subject` and body (before the patch) of the email. -For example, if this patch was applied from the mbox example above, the commit generated would look something like this: +می‌بینید که پچ به‌صورت تمیز اعمال شده و به طور خودکار کامیت جدیدی برای شما ساخته است. +اطلاعات نویسنده از سربرگ‌های `From` و `Date` ایمیل گرفته شده و پیام کامیت نیز از `Subject` و متن ایمیل (قبل از پچ) استخراج می‌شود. +برای مثال، اگر این پچ از نمونه mbox بالا اعمال شده باشد، کامیت تولید شده چیزی شبیه به این خواهد بود: [source,console] ---- @@ -117,12 +117,12 @@ CommitDate: Thu Apr 9 09:19:06 2009 -0700 Limit log functionality to the first 20 ---- -The `Commit` information indicates the person who applied the patch and the time it was applied. -The `Author` information is the individual who originally created the patch and when it was originally created. +اطلاعات `Commit` فردی را نشان می‌دهد که پچ را اعمال کرده و زمان اعمال آن را، +اطلاعات `Author` فردی را که پچ را در اصل ایجاد کرده و زمان ایجاد آن را نشان می‌دهد. -But it's possible that the patch won't apply cleanly. -Perhaps your main branch has diverged too far from the branch the patch was built from, or the patch depends on another patch you haven't applied yet. -In that case, the `git am` process will fail and ask you what you want to do: +اما ممکن است پچ به‌صورت تمیز اعمال نشود. +شاید شاخه اصلی شما خیلی از شاخه‌ای که پچ بر اساس آن ساخته شده فاصله گرفته باشد، یا پچ به پچ دیگری وابسته باشد که هنوز آن را اعمال نکرده‌اید. +در این صورت، فرآیند `git am` شکست می‌خورد و از شما می‌پرسد که چه کاری می‌خواهید انجام دهید: [source,console] ---- @@ -136,8 +136,8 @@ If you would prefer to skip this patch, instead run "git am --skip". To restore the original branch and stop patching run "git am --abort". ---- -This command puts conflict markers in any files it has issues with, much like a conflicted merge or rebase operation. -You solve this issue much the same way -- edit the file to resolve the conflict, stage the new file, and then run `git am --resolved` to continue to the next patch: +این فرمان، مارکرهای تداخل را در فایل‌های دارای مشکل قرار می‌دهد، مشابه زمانی که در یک عملیات ادغام یا بازپایه‌گذاری (rebase) به تداخل برخورد می‌کنید. +شما این مشکل را به همان روش حل می‌کنید — فایل را ویرایش کرده و تداخل را برطرف می‌کنید، فایل جدید را استیج می‌کنید، و سپس دستور `git am --resolved` را اجرا می‌کنید تا به پچ بعدی بروید: [source,console] ---- @@ -147,9 +147,9 @@ $ git am --resolved Applying: See if this helps the gem ---- -If you want Git to try a bit more intelligently to resolve the conflict, you can pass a `-3` option to it, which makes Git attempt a three-way merge. -This option isn't on by default because it doesn't work if the commit the patch says it was based on isn't in your repository. -If you do have that commit -- if the patch was based on a public commit -- then the `-3` option is generally much smarter about applying a conflicting patch: +اگر می‌خواهید گیت کمی هوشمندانه‌تر تلاش کند تا تداخل را حل کند، می‌توانید گزینه `-3` را به آن بدهید که باعث می‌شود گیت یک ادغام سه‌طرفه انجام دهد. +این گزینه به طور پیش‌فرض فعال نیست چون در صورتی که کامیتی که پچ گفته بر اساس آن ساخته شده در مخزن شما نباشد، کار نمی‌کند. +اگر آن کامیت را دارید — یعنی اگر پچ بر اساس یک کامیت عمومی ساخته شده — گزینه `-3` معمولاً در اعمال پچ‌های دارای تداخل هوشمندانه‌تر عمل می‌کند: [source,console] ---- @@ -162,10 +162,10 @@ Falling back to patching base and 3-way merge... No changes -- Patch already applied. ---- -In this case, without the `-3` option the patch would have been considered as a conflict. -Since the `-3` option was used the patch applied cleanly. +در این حالت، بدون گزینه `-3` پچ به عنوان تداخل در نظر گرفته می‌شد. +اما چون گزینه `-3` استفاده شده، پچ به‌صورت تمیز اعمال شده است. -If you're applying a number of patches from an mbox, you can also run the `am` command in interactive mode, which stops at each patch it finds and asks if you want to apply it: +اگر تعدادی پچ از یک فایل mbox اعمال می‌کنید، می‌توانید فرمان `am` را در حالت تعاملی (interactive) اجرا کنید که در هر پچ متوقف شده و از شما می‌پرسد آیا می‌خواهید آن را اعمال کنید یا خیر: [source,console] ---- @@ -177,17 +177,17 @@ See if this helps the gem Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all ---- -This is nice if you have a number of patches saved, because you can view the patch first if you don't remember what it is, or not apply the patch if you've already done so. +این حالت برای زمانی که چند پچ ذخیره شده دارید مفید است، چون می‌توانید ابتدا پچ را ببینید اگر یادآوری نمی‌کنید چیست، یا اگر قبلاً آن را اعمال کرده‌اید، از اعمال دوباره آن صرف‌نظر کنید. -When all the patches for your topic are applied and committed into your branch, you can choose whether and how to integrate them into a longer-running branch. +وقتی همه پچ‌های مربوط به موضوع شما اعمال و کامیت شدند، می‌توانید تصمیم بگیرید که آیا و چگونه آنها را در شاخه‌ای با عمر طولانی‌تر ادغام کنید. [[_checking_out_remotes]] -==== Checking Out Remote Branches +==== Checking Out Remote Branches (بررسی شاخه‌های ریموت) (((branches, remote))) -If your contribution came from a Git user who set up their own repository, pushed a number of changes into it, and then sent you the URL to the repository and the name of the remote branch the changes are in, you can add them as a remote and do merges locally. +اگر مشارکت شما از طرف یک کاربر گیت باشد که مخزن خودش را راه‌اندازی کرده، تعدادی تغییر را در آن پوش کرده و سپس URL مخزن و نام شاخه ریموتی که تغییرات در آن هستند را برای شما ارسال کرده است، می‌توانید آن را به عنوان یک ریموت اضافه کرده و ادغام‌ها را به صورت محلی انجام دهید. -For instance, if Jessica sends you an email saying that she has a great new feature in the `ruby-client` branch of her repository, you can test it by adding the remote and checking out that branch locally: +برای مثال، اگر جسیکا ایمیلی برای شما بفرستد و بگوید که یک ویژگی عالی جدید در شاخه `ruby-client` مخزن خودش دارد، می‌توانید با اضافه کردن ریموت و چک‌اوت آن شاخه به صورت محلی آن را تست کنید: [source,console] ---- @@ -196,18 +196,18 @@ $ git fetch jessica $ git checkout -b rubyclient jessica/ruby-client ---- -If she emails you again later with another branch containing another great feature, you could directly `fetch` and `checkout` because you already have the remote setup. + اگر او بعداً دوباره برای شما ایمیل بزند و شاخه‌ای دیگر با ویژگی دیگری عالی ارسال کند، می‌توانید مستقیماً با استفاده از `fetch` و سپس `checkout` آن را دریافت کنید چون قبلاً تنظیم ریموت را انجام داده‌اید. -This is most useful if you're working with a person consistently. -If someone only has a single patch to contribute once in a while, then accepting it over email may be less time consuming than requiring everyone to run their own server and having to continually add and remove remotes to get a few patches. -You're also unlikely to want to have hundreds of remotes, each for someone who contributes only a patch or two. -However, scripts and hosted services may make this easier -- it depends largely on how you develop and how your contributors develop. +این روش بیشتر وقتی مفید است که شما به طور مداوم با یک نفر کار می‌کنید. +اگر کسی فقط گهگاه یک پچ ارسال می‌کند، پذیرش آن از طریق ایمیل ممکن است کمتر وقت‌گیر باشد تا اینکه از همه بخواهید سرور خود را راه‌اندازی کنند و به طور مداوم ریموت‌ها را اضافه و حذف کنید تا چند پچ دریافت کنید. +همچنین احتمالاً نمی‌خواهید صدها ریموت داشته باشید که هر کدام فقط مربوط به کسی باشد که یک یا دو پچ ارسال کرده است. +با این حال، اسکریپت‌ها و سرویس‌های میزبانی شده می‌توانند این کار را آسان‌تر کنند — این بستگی زیادی به نحوه توسعه شما و توسعه‌دهندگان شما دارد. -The other advantage of this approach is that you get the history of the commits as well. -Although you may have legitimate merge issues, you know where in your history their work is based; a proper three-way merge is the default rather than having to supply a `-3` and hope the patch was generated off a public commit to which you have access. +مزیت دیگر این روش این است که تاریخچه کامیت‌ها را نیز به دست می‌آورید. +اگرچه ممکن است با مشکلات ادغام منطقی روبرو شوید، اما می‌دانید که کار آن‌ها بر اساس کجای تاریخچه شماست؛ ادغام سه‌طرفه مناسب به طور پیش‌فرض انجام می‌شود و نیازی نیست که گزینه `-3` را بدهید و امیدوار باشید پچ بر اساس یک کامیت عمومی تولید شده که به آن دسترسی دارید. -If you aren't working with a person consistently but still want to pull from them in this way, you can provide the URL of the remote repository to the `git pull` command. -This does a one-time pull and doesn't save the URL as a remote reference: +اگر با فردی به طور مداوم کار نمی‌کنید ولی همچنان می‌خواهید به این شکل از او pull کنید، می‌توانید آدرس URL مخزن ریموت را به دستور `git pull` بدهید. +این کار یک بار pull انجام می‌دهد و URL را به عنوان ریموت ذخیره نمی‌کند: [source,console] ---- @@ -218,17 +218,17 @@ Merge made by the 'recursive' strategy. ---- [[_what_is_introduced]] -==== Determining What Is Introduced +==== Determining What Is Introduced (تعیین تغییرات معرفی شده) (((branches, diffing))) -Now you have a topic branch that contains contributed work. -At this point, you can determine what you'd like to do with it. -This section revisits a couple of commands so you can see how you can use them to review exactly what you'll be introducing if you merge this into your main branch. +حالا شما یک شاخه موضوعی دارید که کارهای ارسالی را شامل می‌شود. +در این مرحله می‌توانید تصمیم بگیرید که با آن چه کاری انجام دهید. +این بخش چند دستور را مرور می‌کند تا ببینید چگونه می‌توانید دقیقاً بررسی کنید چه چیزی را قرار است با ادغام این شاخه به شاخه اصلی خود وارد کنید. -It's often helpful to get a review of all the commits that are in this branch but that aren't in your `master` branch. -You can exclude commits in the `master` branch by adding the `--not` option before the branch name. -This does the same thing as the `master..contrib` format that we used earlier. -For example, if your contributor sends you two patches and you create a branch called `contrib` and applied those patches there, you can run this: +معمولاً مفید است که تمام کامیت‌هایی که در این شاخه هستند ولی در شاخه `master` شما نیستند را بررسی کنید. +می‌توانید با افزودن گزینه `--not` قبل از نام شاخه، کامیت‌های موجود در شاخه `master` را حذف کنید. +این کار همان کاری را انجام می‌دهد که فرمت `master..contrib` که قبلاً استفاده کردیم انجام می‌داد. +برای مثال، اگر همکارتان دو پچ برای شما فرستاده و شما شاخه‌ای به نام `contrib` ساخته و آن‌ها را روی آن اعمال کرده‌اید، می‌توانید این دستور را اجرا کنید: [source,console] ---- @@ -246,27 +246,27 @@ Date: Mon Oct 22 19:38:36 2008 -0700 Update gemspec to hopefully work better ---- -To see what changes each commit introduces, remember that you can pass the `-p` option to `git log` and it will append the diff introduced to each commit. +برای دیدن تغییراتی که هر کامیت معرفی می‌کند، به یاد داشته باشید که می‌توانید گزینه `-p` را به `git log` بدهید تا تفاوت‌های مربوط به هر کامیت به خروجی اضافه شود. -To see a full diff of what would happen if you were to merge this topic branch with another branch, you may have to use a weird trick to get the correct results. -You may think to run this: +برای دیدن تفاوت کامل اینکه اگر این شاخه موضوعی را با شاخه‌ای دیگر ادغام کنید چه اتفاقی می‌افتد، ممکن است مجبور شوید از یک ترفند عجیب استفاده کنید تا نتایج صحیح را بگیرید. +ممکن است فکر کنید این دستور را اجرا کنید: [source,console] ---- $ git diff master ---- -This command gives you a diff, but it may be misleading. -If your `master` branch has moved forward since you created the topic branch from it, then you'll get seemingly strange results. -This happens because Git directly compares the snapshots of the last commit of the topic branch you're on and the snapshot of the last commit on the `master` branch. -For example, if you've added a line in a file on the `master` branch, a direct comparison of the snapshots will look like the topic branch is going to remove that line. +این دستور یک diff به شما می‌دهد ولی ممکن است گمراه‌کننده باشد. +اگر شاخه `master` شما از زمان ایجاد شاخه موضوعی پیش رفته باشد، نتایج به نظر عجیب می‌رسند. +این به این دلیل است که گیت مستقیماً اسنپ‌شات آخرین کامیت شاخه موضوعی را با اسنپ‌شات آخرین کامیت شاخه `master` مقایسه می‌کند. +برای مثال، اگر شما در شاخه `master` یک خط به فایلی اضافه کرده باشید، مقایسه مستقیم اسنپ‌شات‌ها باعث می‌شود شاخه موضوعی به نظر برسد که آن خط را حذف می‌کند. -If `master` is a direct ancestor of your topic branch, this isn't a problem; but if the two histories have diverged, the diff will look like you're adding all the new stuff in your topic branch and removing everything unique to the `master` branch. +اگر `master` یک جد مستقیم شاخه موضوعی شما باشد، این مشکل نیست؛ اما اگر دو تاریخچه متفاوت شده باشند، diff طوری به نظر می‌رسد که شما دارید همه چیز جدید شاخه موضوعی را اضافه می‌کنید و همه چیز منحصر به فرد شاخه `master` را حذف می‌کنید. -What you really want to see are the changes added to the topic branch -- the work you'll introduce if you merge this branch with `master`. -You do that by having Git compare the last commit on your topic branch with the first common ancestor it has with the `master` branch. +آنچه واقعاً می‌خواهید ببینید، تغییراتی است که به شاخه موضوعی اضافه شده است — کاری که اگر این شاخه را با `master` ادغام کنید وارد می‌کنید. +این کار را با این روش انجام می‌دهید که گیت آخرین کامیت شاخه موضوعی شما را با اولین جد مشترک آن با شاخه `master` مقایسه کند. -Technically, you can do that by explicitly figuring out the common ancestor and then running your diff on it: +از نظر فنی، می‌توانید با یافتن صریح جد مشترک و سپس اجرای diff روی آن این کار را انجام دهید: [source,console] ---- @@ -275,39 +275,39 @@ $ git merge-base contrib master $ git diff 36c7db ---- -or, more concisely: +یا به صورت خلاصه‌تر: [source,console] ---- $ git diff $(git merge-base contrib master) ---- -However, neither of those is particularly convenient, so Git provides another shorthand for doing the same thing: the triple-dot syntax. -In the context of the `git diff` command, you can put three periods after another branch to do a `diff` between the last commit of the branch you're on and its common ancestor with another branch: +با این حال، هیچ‌کدام از این روش‌ها خیلی راحت نیستند، پس گیت یک میانبر دیگر برای انجام همین کار ارائه می‌دهد: نحو سه‌نقطه‌ای. +در زمینه دستور `git diff`، می‌توانید سه نقطه بعد از نام شاخه دیگر قرار دهید تا diff بین آخرین کامیت شاخه‌ای که روی آن هستید و جد مشترک آن با شاخه دیگر گرفته شود: [source,console] ---- $ git diff master...contrib ---- -This command shows you only the work your current topic branch has introduced since its common ancestor with `master`. -That is a very useful syntax to remember. +این دستور فقط کاری که شاخه موضوعی شما پس از جد مشترکش با `master` انجام داده را نشان می‌دهد. +این نحو بسیار مفیدی است که باید به خاطر بسپارید. -==== Integrating Contributed Work +==== Integrating Contributed Work (ادغام کارهای ارسالی) (((integrating work))) -When all the work in your topic branch is ready to be integrated into a more mainline branch, the question is how to do it. -Furthermore, what overall workflow do you want to use to maintain your project? -You have a number of choices, so we'll cover a few of them. +وقتی همه کارهای شاخه موضوعی شما آماده ادغام به شاخه اصلی‌تر شدند، سوال این است که چگونه این کار را انجام دهید. +علاوه بر این، چه روش کاری کلی را می‌خواهید برای مدیریت پروژه خود استفاده کنید؟ +شما چندین گزینه دارید، پس چند مورد از آن‌ها را بررسی می‌کنیم. -===== Merging Workflows +===== Merging Workflows (روش‌های ادغام) (((workflows, merging))) -One basic workflow is to simply merge all that work directly into your `master` branch. -In this scenario, you have a `master` branch that contains basically stable code. -When you have work in a topic branch that you think you've completed, or work that someone else has contributed and you've verified, you merge it into your master branch, delete that just-merged topic branch, and repeat. + یکی از روش‌های پایه‌ای کار این است که تمام تغییرات را مستقیماً در شاخه‌ی `master` خود ادغام کنید. +در این حالت، شاخه‌ی `master` شما عمدتاً شامل کد پایدار است. +وقتی کاری در یک شاخه‌ی موضوعی انجام داده‌اید که فکر می‌کنید تمام شده است، یا کاری که شخص دیگری انجام داده و شما بررسی کرده‌اید، آن را به شاخه‌ی master خود ادغام می‌کنید، سپس آن شاخه‌ی موضوعی که تازه ادغام شده را حذف می‌کنید و این روند را تکرار می‌کنید. -For instance, if we have a repository with work in two branches named `ruby_client` and `php_client` that looks like <>, and we merge `ruby_client` followed by `php_client`, your history will end up looking like <>. +برای مثال، اگر مخزنی داشته باشیم که کار در دو شاخه به نام‌های `ruby_client` و `php_client` انجام شده و وضعیت آن مانند <> باشد، و ابتدا `ruby_client` سپس `php_client` را ادغام کنیم، تاریخچه‌ی شما به شکل <> خواهد بود. [[merwf_a]] .History with several topic branches @@ -317,12 +317,12 @@ image::images/merging-workflows-1.png[History with several topic branches] .After a topic branch merge image::images/merging-workflows-2.png[After a topic branch merge] -That is probably the simplest workflow, but it can possibly be problematic if you're dealing with larger or more stable projects where you want to be really careful about what you introduce. +این احتمالاً ساده‌ترین روش کاری است، اما ممکن است در پروژه‌های بزرگ‌تر یا پایدارتر که می‌خواهید واقعاً مراقب تغییراتی باشید که وارد می‌کنید، مشکل‌ساز شود. -If you have a more important project, you might want to use a two-phase merge cycle. -In this scenario, you have two long-running branches, `master` and `develop`, in which you determine that `master` is updated only when a very stable release is cut and all new code is integrated into the `develop` branch. -You regularly push both of these branches to the public repository. -Each time you have a new topic branch to merge in (<>), you merge it into `develop` (<>); then, when you tag a release, you fast-forward `master` to wherever the now-stable `develop` branch is (<>). +اگر پروژه‌ی مهم‌تری دارید، ممکن است بخواهید از چرخه‌ی ادغام دو مرحله‌ای استفاده کنید. +در این حالت، دو شاخه‌ی بلندمدت دارید، `master` و `develop`، که در آن تعیین شده است فقط وقتی نسخه‌ی بسیار پایداری منتشر می‌شود، `master` به‌روزرسانی شود و تمام کدهای جدید در شاخه‌ی `develop` ادغام شوند. +شما هر دو شاخه را به طور منظم به مخزن عمومی ارسال می‌کنید. +هر بار که شاخه‌ی موضوعی جدیدی برای ادغام دارید (<>)، آن را به `develop` ادغام می‌کنید (<>). سپس، وقتی یک نسخه منتشر می‌کنید، شاخه‌ی `master` را به محل شاخه‌ی `develop` که حالا پایدار است، به‌صورت fast-forward می‌برید (<>). [[merwf_c]] .Before a topic branch merge @@ -336,55 +336,58 @@ image::images/merging-workflows-4.png[After a topic branch merge] .After a project release image::images/merging-workflows-5.png[After a project release] -This way, when people clone your project's repository, they can either check out `master` to build the latest stable version and keep up to date on that easily, or they can check out `develop`, which is the more cutting-edge content. -You can also extend this concept by having an `integrate` branch where all the work is merged together. -Then, when the codebase on that branch is stable and passes tests, you merge it into a `develop` branch; and when that has proven itself stable for a while, you fast-forward your `master` branch. +به این ترتیب، وقتی افراد مخزن پروژه‌ی شما را کلون می‌کنند، می‌توانند یا شاخه‌ی `master` را چک‌اوت کنند تا آخرین نسخه‌ی پایدار را بسازند و به‌راحتی به‌روز بمانند، یا شاخه‌ی `develop` را که محتویات پیشرفته‌تر و جدیدتری دارد، بررسی کنند. +شما می‌توانید این مفهوم را با داشتن یک شاخه‌ی `integrate` که تمام کارها در آنجا ادغام می‌شود، گسترش دهید. +سپس وقتی کد روی آن شاخه پایدار و تست‌ها را پاس کرد، آن را به شاخه‌ی `develop` ادغام می‌کنید؛ و وقتی آن شاخه برای مدتی پایدار بود، شاخه‌ی `master` خود را fast-forward می‌کنید. -===== Large-Merging Workflows +===== Large-Merging Workflows (گردش‌کارهای ادغام بزرگ) (((workflows, "merging (large)"))) -The Git project has four long-running branches: `master`, `next`, and `seen` (formerly 'pu' -- proposed updates) for new work, and `maint` for maintenance backports. -When new work is introduced by contributors, it's collected into topic branches in the maintainer's repository in a manner similar to what we've described (see <>). -At this point, the topics are evaluated to determine whether they're safe and ready for consumption or whether they need more work. -If they're safe, they're merged into `next`, and that branch is pushed up so everyone can try the topics integrated together. +پروژه‌ی Git چهار شاخه‌ی بلندمدت دارد: `master`، `next`، و `seen` (قبلاً "pu" به معنای به‌روزرسانی‌های پیشنهادی) برای کارهای جدید، و `maint` برای پشتیبانی و نگهداری. +وقتی کار جدیدی توسط مشارکت‌کنندگان ارائه می‌شود، در شاخه‌های موضوعی در مخزن نگهدارنده جمع‌آوری می‌شود، مشابه آنچه شرح داده شد (نگاه کنید به <>). +در این مرحله، موضوع‌ها ارزیابی می‌شوند تا مشخص شود آیا امن و آماده‌ی استفاده هستند یا نیاز به کار بیشتری دارند. +اگر امن باشند، به شاخه‌ی `next` ادغام می‌شوند و آن شاخه به مخزن عمومی ارسال می‌شود تا همه بتوانند موضوع‌ها را به صورت یکپارچه امتحان کنند. [[merwf_f]] .Managing a complex series of parallel contributed topic branches image::images/large-merges-1.png[Managing a complex series of parallel contributed topic branches] -If the topics still need work, they're merged into `seen` instead. -When it's determined that they're totally stable, the topics are re-merged into `master`. -The `next` and `seen` branches are then rebuilt from the `master`. -This means `master` almost always moves forward, `next` is rebased occasionally, and `seen` is rebased even more often: +اگر موضوع‌ها هنوز نیاز به کار دارند، به شاخه‌ی `seen` ادغام می‌شوند. +وقتی مشخص شود کاملاً پایدار هستند، موضوع‌ها دوباره به `master` ادغام می‌شوند. +شاخه‌های `next` و `seen` سپس از روی `master` بازسازی می‌شوند. +این یعنی شاخه‌ی `master` تقریباً همیشه جلو می‌رود، `next` گاهی بازبیس می‌شود و `seen` حتی بیشتر بازبیس می‌شود. .Merging contributed topic branches into long-term integration branches image::images/large-merges-2.png[Merging contributed topic branches into long-term integration branches] -When a topic branch has finally been merged into `master`, it's removed from the repository. -The Git project also has a `maint` branch that is forked off from the last release to provide backported patches in case a maintenance release is required. -Thus, when you clone the Git repository, you have four branches that you can check out to evaluate the project in different stages of development, depending on how cutting edge you want to be or how you want to contribute; and the maintainer has a structured workflow to help them vet new contributions. -The Git project's workflow is specialized. -To clearly understand this you could check out the https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide^]. + +وقتی شاخه‌ی موضوعی نهایتاً به `master` ادغام شد، از مخزن حذف می‌شود. +پروژه‌ی Git همچنین یک شاخه‌ی `maint` دارد که از آخرین نسخه فورک شده تا در صورت نیاز به انتشار نگهداری، اصلاحات به عقب منتقل شوند. +بنابراین، وقتی مخزن Git را کلون می‌کنید، چهار شاخه دارید که می‌توانید برای ارزیابی پروژه در مراحل مختلف توسعه آن‌ها را بررسی کنید، بسته به اینکه چقدر پیشرفته بودن برایتان مهم است یا چگونه می‌خواهید مشارکت کنید؛ و نگهدارنده هم یک گردش‌کار ساختاریافته دارد تا به آن‌ها در بررسی مشارکت‌های جدید کمک کند. +گردش‌کار پروژه‌ی Git تخصصی است. +برای درک دقیق‌تر می‌توانید راهنمای نگهدارنده‌ی Git را در +https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git Maintainer's guide^]. +مطالعه کنید [[_rebase_cherry_pick]] -===== Rebasing and Cherry-Picking Workflows +===== Rebasing and Cherry-Picking Workflows (گردش‌کارهای بازبیس و چری‌پیکینگ) (((workflows, rebasing and cherry-picking))) -Other maintainers prefer to rebase or cherry-pick contributed work on top of their `master` branch, rather than merging it in, to keep a mostly linear history. -When you have work in a topic branch and have determined that you want to integrate it, you move to that branch and run the rebase command to rebuild the changes on top of your current `master` (or `develop`, and so on) branch. -If that works well, you can fast-forward your `master` branch, and you'll end up with a linear project history. +نگهدارندگان دیگر ترجیح می‌دهند کارهای ارائه شده را روی شاخه‌ی `master` خود بازبیس یا چری‌پیک کنند، به جای ادغام مستقیم، تا تاریخچه‌ای تقریباً خطی داشته باشند. +وقتی کاری در شاخه‌ی موضوعی دارید و تصمیم گرفته‌اید آن را ادغام کنید، به آن شاخه می‌روید و فرمان بازبیس را اجرا می‌کنید تا تغییرات را روی شاخه‌ی فعلی `master` (یا `develop` و غیره) بازسازی کنید. +اگر این کار خوب پیش رفت، می‌توانید شاخه‌ی `master` را fast-forward کنید و تاریخچه‌ی پروژه به صورت خطی باقی می‌ماند. (((git commands, cherry-pick))) -The other way to move introduced work from one branch to another is to cherry-pick it. -A cherry-pick in Git is like a rebase for a single commit. -It takes the patch that was introduced in a commit and tries to reapply it on the branch you're currently on. -This is useful if you have a number of commits on a topic branch and you want to integrate only one of them, or if you only have one commit on a topic branch and you'd prefer to cherry-pick it rather than run rebase. -For example, suppose you have a project that looks like this: +راه دیگر انتقال کار انجام‌شده از یک شاخه به شاخه‌ی دیگر، چری‌پیک کردن است. +چری‌پیک در Git مانند بازبیس برای یک کامیت است. +این عمل پچ معرفی شده در یک کامیت را گرفته و سعی می‌کند روی شاخه‌ای که هم‌اکنون روی آن هستید دوباره اعمال کند. +این روش زمانی مفید است که چند کامیت در شاخه‌ی موضوعی دارید ولی می‌خواهید فقط یکی از آن‌ها را ادغام کنید، یا وقتی فقط یک کامیت در شاخه‌ی موضوعی دارید و ترجیح می‌دهید به جای بازبیس، آن را چری‌پیک کنید. +برای مثال، فرض کنید پروژه‌ای دارید که به این شکل است: .Example history before a cherry-pick image::images/rebasing-1.png[Example history before a cherry-pick] -If you want to pull commit `e43a6` into your `master` branch, you can run: +اگر می‌خواهید کامیت `e43a6` را به شاخه‌ی `master` خود وارد کنید، می‌توانید این دستور را اجرا کنید: [source,console] ---- @@ -394,44 +397,44 @@ Finished one cherry-pick. 3 files changed, 17 insertions(+), 3 deletions(-) ---- -This pulls the same change introduced in `e43a6`, but you get a new commit SHA-1 value, because the date applied is different. -Now your history looks like this: +این دستور همان تغییر اعمال شده در `e43a6` را وارد می‌کند، اما یک مقدار جدید SHA-1 برای کامیت دریافت خواهید کرد، چون تاریخ اعمال آن متفاوت است. +اکنون تاریخچه‌ی شما به این شکل خواهد بود: .History after cherry-picking a commit on a topic branch image::images/rebasing-2.png[History after cherry-picking a commit on a topic branch] -Now you can remove your topic branch and drop the commits you didn't want to pull in. +حالا می‌توانید شاخه موضوعی خود را حذف کنید و کامیت‌هایی که نمی‌خواستید وارد شوند را کنار بگذارید. ===== Rerere (((git commands, rerere)))(((rerere))) -If you're doing lots of merging and rebasing, or you're maintaining a long-lived topic branch, Git has a feature called "`rerere`" that can help. +اگر زیاد عملیات ادغام (merge) و بازپایه‌گذاری (rebase) انجام می‌دهید یا شاخه‌ی موضوعی بلندمدتی را نگهداری می‌کنید، گیت ویژگی‌ای به نام "`rerere`" دارد که می‌تواند به شما کمک کند. -Rerere stands for "`reuse recorded resolution`" -- it's a way of shortcutting manual conflict resolution. -When rerere is enabled, Git will keep a set of pre- and post-images from successful merges, and if it notices that there's a conflict that looks exactly like one you've already fixed, it'll just use the fix from last time, without bothering you with it. +Rerere مخفف "`reuse recorded resolution`" است — روشی برای کوتاه‌کردن فرآیند حل تعارضات به صورت دستی. +وقتی rerere فعال باشد، گیت مجموعه‌ای از تصاویر قبل و بعد از ادغام‌های موفق را نگه می‌دارد، و اگر متوجه شود تعارضی مشابه تعارضی که قبلاً حل کرده‌اید رخ داده، به جای اینکه دوباره از شما بخواهد آن را حل کنید، به‌طور خودکار همان حل قبلی را به کار می‌برد. -This feature comes in two parts: a configuration setting and a command. -The configuration setting is `rerere.enabled`, and it's handy enough to put in your global config: +این ویژگی دو بخش دارد: یک تنظیم پیکربندی و یک دستور. +تنظیم پیکربندی `rerere.enabled` است، که به اندازه‌ای مفید است که بهتر است در تنظیمات سراسری (global) قرار بگیرد: [source,console] ---- $ git config --global rerere.enabled true ---- -Now, whenever you do a merge that resolves conflicts, the resolution will be recorded in the cache in case you need it in the future. +از این پس هر بار که ادغامی انجام دهید و تعارض‌ها را حل کنید، این حل تعارض در حافظه کش ذخیره می‌شود تا در آینده در صورت نیاز دوباره استفاده شود. -If you need to, you can interact with the rerere cache using the `git rerere` command. -When it's invoked alone, Git checks its database of resolutions and tries to find a match with any current merge conflicts and resolve them (although this is done automatically if `rerere.enabled` is set to `true`). -There are also subcommands to see what will be recorded, to erase specific resolution from the cache, and to clear the entire cache. -We will cover rerere in more detail in <>. +اگر لازم باشد، می‌توانید با استفاده از دستور `git rerere` با کش rerere تعامل داشته باشید. +وقتی این دستور به تنهایی اجرا شود، گیت پایگاه داده حل تعارض‌های خود را بررسی می‌کند و سعی می‌کند با تعارض‌های فعلی مطابقت پیدا کند و آن‌ها را حل کند (اگر `rerere.enabled` روی `true` تنظیم شده باشد این کار به صورت خودکار انجام می‌شود). +همچنین زیردستورات مختلفی وجود دارد تا ببینید چه مواردی ثبت خواهد شد، حل تعارض خاصی را از کش پاک کنید و یا کل کش را خالی نمایید. +ما در بخش <> به جزئیات بیشتری درباره rerere خواهیم پرداخت. [[_tagging_releases]] -==== Tagging Your Releases +==== Tagging Your Releases (برچسب‌گذاری نسخه‌های خود) (((tags)))(((tags, signing))) -When you've decided to cut a release, you'll probably want to assign a tag so you can re-create that release at any point going forward. -You can create a new tag as discussed in <>. -If you decide to sign the tag as the maintainer, the tagging may look something like this: +وقتی تصمیم می‌گیرید یک نسخه منتشر کنید، احتمالاً می‌خواهید یک برچسب (tag) اختصاص دهید تا بتوانید آن نسخه را در هر زمانی در آینده دوباره ایجاد کنید. +می‌توانید برچسب جدیدی ایجاد کنید، همانطور که در <> توضیح داده شده است. +اگر تصمیم دارید برچسب را به عنوان نگهدارنده امضا کنید، برچسب‌گذاری ممکن است چیزی شبیه به این باشد: [source,console] ---- @@ -441,9 +444,9 @@ user: "Scott Chacon " 1024-bit DSA key, ID F721C45A, created 2009-02-09 ---- -If you do sign your tags, you may have the problem of distributing the public PGP key used to sign your tags. -The maintainer of the Git project has solved this issue by including their public key as a blob in the repository and then adding a tag that points directly to that content. -To do this, you can figure out which key you want by running `gpg --list-keys`: +اگر برچسب‌های خود را امضا کنید، ممکن است با مشکل توزیع کلید عمومی PGP که برای امضای برچسب‌ها استفاده می‌شود مواجه شوید. +نگهدارنده پروژه گیت این مشکل را با قرار دادن کلید عمومی خود به صورت یک blob در مخزن و سپس اضافه کردن یک برچسب که مستقیماً به آن محتوا اشاره می‌کند، حل کرده است. +برای این کار، می‌توانید کلیدی که می‌خواهید را با اجرای دستور `gpg --list-keys` پیدا کنید: [source,console] ---- @@ -455,7 +458,7 @@ uid Scott Chacon sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09] ---- -Then, you can directly import the key into the Git database by exporting it and piping that through `git hash-object`, which writes a new blob with those contents into Git and gives you back the SHA-1 of the blob: +سپس می‌توانید کلید را با صادر کردن آن و عبور دادن خروجی از طریق `git hash-object` مستقیماً در پایگاه داده گیت وارد کنید، که یک blob جدید با این محتویات در گیت می‌نویسد و مقدار SHA-1 آن blob را به شما برمی‌گرداند: [source,console] ---- @@ -463,30 +466,30 @@ $ gpg -a --export F721C45A | git hash-object -w --stdin 659ef797d181633c87ec71ac3f9ba29fe5775b92 ---- -Now that you have the contents of your key in Git, you can create a tag that points directly to it by specifying the new SHA-1 value that the `hash-object` command gave you: +حالا که محتویات کلید شما در گیت است، می‌توانید برچسبی بسازید که مستقیماً به آن اشاره کند با مشخص کردن مقدار SHA-1 جدیدی که دستور `hash-object` به شما داده است: [source,console] ---- $ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92 ---- -If you run `git push --tags`, the `maintainer-pgp-pub` tag will be shared with everyone. -If anyone wants to verify a tag, they can directly import your PGP key by pulling the blob directly out of the database and importing it into GPG: +اگر دستور `git push --tags` را اجرا کنید، برچسب `maintainer-pgp-pub` با همه به اشتراک گذاشته خواهد شد. +اگر کسی بخواهد برچسبی را تأیید کند، می‌تواند کلید PGP شما را با استخراج مستقیم blob از پایگاه داده و وارد کردن آن در GPG به صورت مستقیم وارد کند: [source,console] ---- $ git show maintainer-pgp-pub | gpg --import ---- -They can use that key to verify all your signed tags. -Also, if you include instructions in the tag message, running `git show ` will let you give the end user more specific instructions about tag verification. +آن‌ها می‌توانند از آن کلید برای تأیید تمام برچسب‌های امضا شده شما استفاده کنند. +همچنین، اگر دستورالعمل‌هایی در پیام برچسب درج کنید، اجرای `git show ` به کاربر نهایی اجازه می‌دهد دستورالعمل‌های خاص‌تری درباره تأیید برچسب دریافت کند. [[_build_number]] -==== Generating a Build Number +==== Generating a Build Number (تولید شماره ساخت) (((build numbers)))(((git commands, describe))) -Because Git doesn't have monotonically increasing numbers like 'v123' or the equivalent to go with each commit, if you want to have a human-readable name to go with a commit, you can run `git describe` on that commit. -In response, Git generates a string consisting of the name of the most recent tag earlier than that commit, followed by the number of commits since that tag, followed finally by a partial SHA-1 value of the commit being described (prefixed with the letter "g" meaning Git): +چون گیت شماره‌هایی که به صورت پیوسته افزایش یابند مانند 'v123' یا معادل آن برای هر کامیت ندارد، اگر بخواهید نامی قابل خواندن برای انسان همراه با کامیت داشته باشید، می‌توانید دستور `git describe` را روی آن کامیت اجرا کنید. +در پاسخ، گیت رشته‌ای تولید می‌کند که شامل نام آخرین برچسبی است که قبل از آن کامیت وجود داشته، به همراه تعداد کامیت‌هایی که از آن برچسب گذشته است، و در نهایت بخشی از مقدار SHA-1 کامیتی که توصیف می‌شود (با پیشوند حرف "g" که مخفف Git است): [source,console] ---- @@ -494,21 +497,21 @@ $ git describe master v1.6.2-rc1-20-g8c5b85c ---- -This way, you can export a snapshot or build and name it something understandable to people. -In fact, if you build Git from source code cloned from the Git repository, `git --version` gives you something that looks like this. -If you're describing a commit that you have directly tagged, it gives you simply the tag name. + به این ترتیب، می‌توانید یک تصویر فوری (snapshot) یا نسخه‌ای بسازید و آن را به گونه‌ای نام‌گذاری کنید که برای دیگران قابل فهم باشد. +در واقع، اگر گیت را از کد منبعی که از مخزن گیت کلون شده بسازید، دستور `git --version` چیزی شبیه به این به شما می‌دهد. +اگر شما یک کامیت را که مستقیماً تگ زده‌اید توضیح دهید، فقط نام تگ را نشان می‌دهد. -By default, the `git describe` command requires annotated tags (tags created with the `-a` or `-s` flag); if you want to take advantage of lightweight (non-annotated) tags as well, add the `--tags` option to the command. -You can also use this string as the target of a `git checkout` or `git show` command, although it relies on the abbreviated SHA-1 value at the end, so it may not be valid forever. -For instance, the Linux kernel recently jumped from 8 to 10 characters to ensure SHA-1 object uniqueness, so older `git describe` output names were invalidated. +به طور پیش‌فرض، دستور `git describe` به تگ‌های حاشیه‌نویسی شده (annotated tags) نیاز دارد (تگ‌هایی که با فلگ‌های `-a` یا `-s` ساخته شده‌اند)؛ اگر می‌خواهید از تگ‌های سبک‌وزن (lightweight tags) یا غیرحاشیه‌نویسی شده نیز استفاده کنید، گزینه `--tags` را به دستور اضافه کنید. +شما همچنین می‌توانید این رشته را به عنوان هدف دستور `git checkout` یا `git show` استفاده کنید، اگرچه این روش به مقدار کوتاه‌شده SHA-1 در انتها وابسته است، پس ممکن است همیشه معتبر نباشد. +برای مثال، هسته لینوکس اخیراً تعداد کاراکترهای SHA-1 را از ۸ به ۱۰ افزایش داده است تا یکتایی اشیاء SHA-1 را تضمین کند، بنابراین نام‌های خروجی قدیمی `git describe` نامعتبر شده‌اند. [[_preparing_release]] -==== Preparing a Release +==== Preparing a Release (آماده‌سازی نسخه انتشار) (((releasing)))(((git commands, archive))) -Now you want to release a build. -One of the things you'll want to do is create an archive of the latest snapshot of your code for those poor souls who don't use Git. -The command to do this is `git archive`: +حالا می‌خواهید نسخه‌ای منتشر کنید. +یکی از کارهایی که می‌خواهید انجام دهید، ایجاد یک آرشیو از آخرین تصویر فوری کدتان برای آن دسته از افراد است که از گیت استفاده نمی‌کنند. +دستور این کار `git archive` است: [source,console] ---- @@ -517,23 +520,23 @@ $ ls *.tar.gz v1.6.2-rc1-20-g8c5b85c.tar.gz ---- -If someone opens that tarball, they get the latest snapshot of your project under a `project` directory. -You can also create a zip archive in much the same way, but by passing the `--format=zip` option to `git archive`: +اگر کسی آن فایل tar را باز کند، آخرین تصویر پروژه شما را در دایرکتوری‌ای به نام `project` دریافت می‌کند. +شما همچنین می‌توانید به روشی مشابه یک آرشیو zip ایجاد کنید، اما با افزودن گزینه `--format=zip` به دستور `git archive`: [source,console] ---- $ git archive master --prefix='project/' --format=zip > `git describe master`.zip ---- -You now have a nice tarball and a zip archive of your project release that you can upload to your website or email to people. +اکنون شما یک فایل tar و یک آرشیو zip زیبا از نسخه پروژه‌تان دارید که می‌توانید آن را در وب‌سایت خود بارگذاری کنید یا برای دیگران ایمیل کنید. [[_the_shortlog]] -==== The Shortlog +==== The Shortlog (گزارش کوتاه) (((git commands, shortlog))) -It's time to email your mailing list of people who want to know what's happening in your project. -A nice way of quickly getting a sort of changelog of what has been added to your project since your last release or email is to use the `git shortlog` command. -It summarizes all the commits in the range you give it; for example, the following gives you a summary of all the commits since your last release, if your last release was named `v1.0.1`: +وقت آن است که به فهرست ایمیل افرادی که می‌خواهند بدانند در پروژه شما چه خبر است اطلاع دهید. +یک روش خوب برای به دست آوردن سریع نوعی گزارش تغییرات (changelog) از آنچه از آخرین انتشار یا ایمیل شما به پروژه اضافه شده، استفاده از دستور `git shortlog` است. +این دستور خلاصه‌ای از تمام کامیت‌ها در بازه‌ای که به آن می‌دهید ارائه می‌دهد؛ برای مثال، دستور زیر خلاصه‌ای از تمام کامیت‌ها از زمان آخرین انتشار شما، اگر آخرین انتشار شما با نام `v1.0.1` بوده باشد، به شما می‌دهد: [source,console] ---- @@ -553,4 +556,4 @@ Tom Preston-Werner (4): Regenerated gemspec for version 1.0.2 ---- -You get a clean summary of all the commits since `v1.0.1`, grouped by author, that you can email to your list. +شما یک خلاصه مرتب و تمیز از تمام کامیت‌ها از `v1.0.1` به بعد، به تفکیک نویسنده، دریافت می‌کنید که می‌توانید آن را به فهرست ایمیل خود ارسال کنید. \ No newline at end of file From cd48206b16efd6640f58d132e558877444b90189 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Sun, 17 Aug 2025 20:24:39 +0330 Subject: [PATCH 477/549] translate(06-github): translated setting up account to persian --- .../sections/1-setting-up-account.asc | 68 +++++++------------ 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 2ab023ec..77a190dd 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -1,97 +1,79 @@ -=== Account Setup and Configuration +=== Account Setup and Configuration (راه‌اندازی و پیکربندی حساب کاربری) (((GitHub, user accounts))) -The first thing you need to do is set up a free user account. -Simply visit https://github.com[^], choose a user name that isn't already taken, provide an email address and a password, and click the big green "`Sign up for GitHub`" button. +اولین کاری که باید انجام دهید، ایجاد یک حساب کاربری رایگان است. کافی است به https://github.com مراجعه کنید، یک نام کاربری که قبلاً استفاده نشده است انتخاب کنید، یک ایمیل و رمز عبور وارد کنید و روی دکمه بزرگ سبز رنگ «Sign up for GitHub» کلیک کنید. .The GitHub sign-up form image::images/signup.png[The GitHub sign-up form] -The next thing you'll see is the pricing page for upgraded plans, but it's safe to ignore this for now. -GitHub will send you an email to verify the address you provided. -Go ahead and do this; it's pretty important (as we'll see later). +مرحله بعدی صفحه قیمت‌گذاری طرح‌های ارتقا یافته است که فعلاً می‌توانید آن را نادیده بگیرید. گیت‌هاب ایمیلی برای تأیید آدرس ایمیل شما ارسال خواهد کرد. حتماً این کار را انجام دهید؛ این مرحله بسیار مهم است (که بعداً به آن خواهیم پرداخت). [NOTE] ==== -GitHub provides almost all of its functionality with free accounts, except some advanced features. +گیت‌هاب تقریباً تمام امکانات خود را با حساب‌های رایگان ارائه می‌دهد، به جز برخی ویژگی‌های پیشرفته. -GitHub's paid plans include advanced tools and features as well as increased limits for free services, but we won't be covering those in this book. -To get more information about available plans and their comparison, visit https://github.com/pricing[^]. +طرح‌های پولی گیت‌هاب شامل ابزارها و امکانات پیشرفته به همراه افزایش محدودیت‌ها برای خدمات رایگان هستند، اما در این کتاب به آن‌ها نخواهیم پرداخت. برای کسب اطلاعات بیشتر درباره طرح‌های موجود و مقایسه آن‌ها، به https://github.com/pricing[^] مراجعه کنید. ==== -Clicking the Octocat logo at the top-left of the screen will take you to your dashboard page. -You're now ready to use GitHub. +کلیک روی لوگوی Octocat در بالای صفحه سمت چپ، شما را به صفحه داشبوردتان هدایت می‌کند. اکنون آماده استفاده از گیت‌هاب هستید. -==== SSH Access +==== SSH Access (دسترسی SSH) (((SSH keys, with GitHub))) -As of right now, you're fully able to connect with Git repositories using the `https://` protocol, authenticating with the username and password you just set up. -However, to simply clone public projects, you don't even need to sign up - the account we just created comes into play when we fork projects and push to our forks a bit later. +در حال حاضر، شما می‌توانید با استفاده از پروتکل `https://` به مخازن گیت متصل شوید و با نام کاربری و رمز عبوری که همین الان ساخته‌اید، احراز هویت کنید. با این حال، برای کلون کردن پروژه‌های عمومی حتی نیازی به ثبت‌نام هم ندارید — حساب کاربری که ساختیم زمانی به کار می‌آید که بخواهیم پروژه‌ای را فورک کنیم و سپس تغییرات را به فورک خودمان ارسال کنیم. -If you'd like to use SSH remotes, you'll need to configure a public key. -If you don't already have one, see <>. -Open up your account settings using the link at the top-right of the window: +اگر می‌خواهید از دسترسی SSH استفاده کنید، باید یک کلید عمومی تنظیم کنید. اگر هنوز کلیدی ندارید، به بخش <> مراجعه کنید. تنظیمات حساب خود را از طریق لینک بالای سمت راست صفحه باز کنید: .The "`Account settings`" link image::images/account-settings.png[The “Account settings” link] -Then select the "`SSH keys`" section along the left-hand side. +سپس بخش "SSH keys" را از ستون سمت چپ انتخاب کنید. .The "`SSH keys`" link image::images/ssh-keys.png[The “SSH keys” link] -From there, click the "`Add an SSH key`" button, give your key a name, paste the contents of your `~/.ssh/id_rsa.pub` (or whatever you named it) public-key file into the text area, and click "`Add key`". +در آنجا روی دکمه «Add an SSH key» کلیک کنید، به کلید خود یک نام بدهید، محتوای فایل کلید عمومی خود مانند `~/.ssh/id_rsa.pub` (یا هر نامی که به آن داده‌اید) را در کادر متن قرار دهید و روی «Add key» کلیک کنید. [NOTE] ==== -Be sure to name your SSH key something you can remember. -You can name each of your keys (e.g. "My Laptop" or "Work Account") so that if you need to revoke a key later, you can easily tell which one you're looking for. +حتماً به کلید SSH خود نامی بدهید که بتوانید به راحتی به خاطر بسپارید. می‌توانید هر کلید را به نامی خاص مثل «لپ‌تاپ من» یا «حساب کاری» نام‌گذاری کنید تا اگر بعدها نیاز به لغو یک کلید داشتید، به راحتی متوجه شوید که کدام کلید را می‌خواهید حذف کنید. ==== [[_personal_avatar]] -==== Your Avatar - -Next, if you wish, you can replace the avatar that is generated for you with an image of your choosing. -First go to the "`Profile`" tab (above the SSH Keys tab) and click "`Upload new picture`". +==== Your Avatar (آواتار) +اگر تمایل دارید، می‌توانید تصویری که به صورت پیش‌فرض برایتان ساخته شده را با عکس دلخواه خود جایگزین کنید. ابتدا به تب «Profile» (بالای تب SSH Keys) بروید و روی «Upload new picture» کلیک کنید. .The "`Profile`" link image::images/your-profile.png[The “Profile” link] -We'll choose a copy of the Git logo that is on our hard drive and then we get a chance to crop it. +ما یک کپی از لوگوی گیت که روی هارد داریم انتخاب می‌کنیم و سپس فرصت برش دادن تصویر را خواهیم داشت. .Crop your uploaded avatar image::images/avatar-crop.png[Crop your uploaded avatar] -Now anywhere you interact on the site, people will see your avatar next to your username. +از این پس، در هر جایی که در سایت فعالیت می‌کنید، دیگران آواتار شما را کنار نام کاربریتان خواهند دید. -If you happen to have uploaded an avatar to the popular Gravatar service (often used for WordPress accounts), that avatar will be used by default and you don't need to do this step. +اگر قبلاً تصویری در سرویس محبوب Gravatar (که اغلب برای حساب‌های وردپرس استفاده می‌شود) آپلود کرده باشید، آن تصویر به طور پیش‌فرض استفاده خواهد شد و نیازی به انجام این مرحله ندارید. -==== Your Email Addresses +==== Your Email Addresses (آدرس‌های ایمیل شما) -The way that GitHub maps your Git commits to your user is by email address. -If you use multiple email addresses in your commits and you want GitHub to link them up properly, you need to add all the email addresses you have used to the Emails section of the admin section. +گیت‌هاب برای ثبت ارتباط کامیت‌های گیت با حساب شما از آدرس ایمیل استفاده می‌کند. اگر در کامیت‌های خود از چندین ایمیل استفاده می‌کنید و می‌خواهید گیت‌هاب آن‌ها را به درستی به حساب شما مرتبط کند، باید همه آدرس‌های ایمیل استفاده شده را در بخش Emails در تنظیمات حساب اضافه کنید. [[_add_email_addresses]] .Add all your email addresses image::images/email-settings.png[Add all your email addresses] -In <<_add_email_addresses>> we can see some of the different states that are possible. -The top address is verified and set as the primary address, meaning that is where you'll get any notifications and receipts. -The second address is verified and so can be set as the primary if you wish to switch them. -The final address is unverified, meaning that you can't make it your primary address. -If GitHub sees any of these in commit messages in any repository on the site, it will be linked to your user now. +در <<_add_email_addresses>> می‌توانید برخی از وضعیت‌های ممکن را ببینید. آدرس بالایی تأیید شده و به عنوان آدرس اصلی تنظیم شده است، یعنی اطلاعیه‌ها و رسیدها به آن ارسال می‌شود. آدرس دوم تأیید شده است و می‌توانید در صورت تمایل آن را به عنوان آدرس اصلی انتخاب کنید. آدرس آخر تأیید نشده است، بنابراین نمی‌توانید آن را به عنوان آدرس اصلی انتخاب کنید. اگر گیت‌هاب هر یک از این ایمیل‌ها را در پیام‌های کامیت در هر مخزن روی سایت ببیند، آن‌ها را به حساب شما پیوند خواهد داد. -==== Two Factor Authentication +==== Two Factor Authentication (احراز هویت دو مرحله‌ای) -Finally, for extra security, you should definitely set up Two-factor Authentication or "`2FA`". -Two-factor Authentication is an authentication mechanism that is becoming more and more popular recently to mitigate the risk of your account being compromised if your password is stolen somehow. -Turning it on will make GitHub ask you for two different methods of authentication, so that if one of them is compromised, an attacker will not be able to access your account. +در نهایت، برای امنیت بیشتر، حتماً باید احراز هویت دو مرحله‌ای یا «2FA» را فعال کنید. احراز هویت دو مرحله‌ای مکانیزمی است که اخیراً محبوبیت زیادی پیدا کرده تا ریسک هک شدن حساب در صورت لو رفتن رمز عبور را کاهش دهد. فعال کردن این ویژگی باعث می‌شود گیت‌هاب از شما دو روش مختلف احراز هویت بخواهد، به طوری که اگر یکی از آن‌ها درز کند، مهاجم نتواند به حساب شما دسترسی پیدا کند. -You can find the Two-factor Authentication setup under the Security tab of your Account settings. +تنظیمات احراز هویت دو مرحله‌ای را می‌توانید در تب Security در تنظیمات حساب خود بیابید. .2FA in the Security Tab image::images/2fa-1.png[2FA in the Security Tab] -If you click on the "`Set up two-factor authentication`" button, it will take you to a configuration page where you can choose to use a phone app to generate your secondary code (a "`time based one-time password`"), or you can have GitHub send you a code via SMS each time you need to log in. +اگر روی دکمه «Set up two-factor authentication» کلیک کنید، به صفحه‌ای هدایت می‌شوید که می‌توانید انتخاب کنید از اپلیکیشن تلفن همراه برای تولید کد ثانویه (یک «رمز عبور یک‌بارمصرف مبتنی بر زمان») استفاده کنید یا گیت‌هاب برای هر بار ورود، کد را از طریق پیامک ارسال کند. -After you choose which method you prefer and follow the instructions for setting up 2FA, your account will then be a little more secure and you will have to provide a code in addition to your password whenever you log into GitHub. +پس از انتخاب روش مورد نظر و دنبال کردن دستورالعمل‌ها برای راه‌اندازی 2FA، حساب شما کمی امن‌تر خواهد شد و هر بار که وارد گیت‌هاب می‌شوید، علاوه بر رمز عبور باید کد مربوطه را نیز وارد کنید. \ No newline at end of file From e27aaf05d01d79723693022d6ef2f21a0b74de30 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Mon, 18 Aug 2025 11:28:43 +0330 Subject: [PATCH 478/549] translate(06-github): translated contributing to persian --- .idea/workspace.xml | 48 ++- book/06-github/sections/2-contributing.asc | 403 ++++++++++----------- 2 files changed, 218 insertions(+), 233 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7330afff..e252f2bc 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,7 +5,7 @@ - + @@ -52,6 +52,10 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/05-distributed-git", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.git.unshallow": "true", + "git-widget-placeholder": "book/translation/06-github", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "settings.editor.selected.configurable": "preferences.keymap", + "to.speed.mode.migration.done": "true", + "vue.rearranger.settings.migration": "true" } -}</component> +} diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index 1dffbd9a..a6f32ef4 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -1,74 +1,74 @@ -=== Contributing to a Project +=== Contributing to a Project (مشارکت در یک پروژه) -Now that our account is set up, let's walk through some details that could be useful in helping you contribute to an existing project. +حالا که حساب کاربری‌مان راه‌اندازی شده است، بیایید به جزئیاتی بپردازیم که می‌تواند در کمک به شما برای مشارکت در یک پروژه موجود مفید باشد. -==== Forking Projects +==== Forking Projects (فورک کردن پروژه‌ها) (((forking))) -If you want to contribute to an existing project to which you don't have push access, you can "`fork`" the project. -When you "`fork`" a project, GitHub will make a copy of the project that is entirely yours; it lives in your namespace, and you can push to it. +اگر می‌خواهید در پروژه‌ای موجود مشارکت کنید که دسترسی ارسال (push) به آن را ندارید، می‌توانید پروژه را «`fork`» کنید. +وقتی پروژه‌ای را «`fork`» می‌کنید، گیت‌هاب یک نسخه کپی از پروژه ایجاد می‌کند که کاملاً متعلق به شماست؛ این نسخه در فضای نام شما قرار دارد و می‌توانید به آن ارسال (push) انجام دهید. [NOTE] ==== -Historically, the term "`fork`" has been somewhat negative in context, meaning that someone took an open source project in a different direction, sometimes creating a competing project and splitting the contributors. -In GitHub, a "`fork`" is simply the same project in your own namespace, allowing you to make changes to a project publicly as a way to contribute in a more open manner. +تاریخچه اصطلاح «فورک» کمی منفی بوده است؛ به این معنا که کسی پروژه متن‌باز را به سمت مسیر متفاوتی برده و گاهی پروژه‌ای رقیب ایجاد کرده و مشارکت‌کنندگان را تقسیم کرده است. +اما در گیت‌هاب، «`fork`» صرفاً همان پروژه در فضای نام شماست که به شما امکان می‌دهد به صورت عمومی تغییراتی در پروژه ایجاد کنید و به این ترتیب به شکلی بازتر مشارکت کنید. ==== -This way, projects don't have to worry about adding users as collaborators to give them push access. -People can fork a project, push to it, and contribute their changes back to the original repository by creating what's called a Pull Request, which we'll cover next. -This opens up a discussion thread with code review, and the owner and the contributor can then communicate about the change until the owner is happy with it, at which point the owner can merge it in. +بدین ترتیب، پروژه‌ها نیازی به افزودن کاربران به عنوان همکار برای دادن دسترسی ارسال ندارند. +افراد می‌توانند پروژه را فورک کنند، به آن ارسال انجام دهند و تغییرات خود را با ساختن چیزی به نام Pull Request به مخزن اصلی بازگردانند که در ادامه آن را بررسی خواهیم کرد. +این کار یک رشته بحث با بازبینی کد ایجاد می‌کند و مالک پروژه و مشارکت‌کننده می‌توانند درباره تغییرات گفتگو کنند تا زمانی که مالک از آن رضایت داشته باشد و سپس آن را ادغام کند. -To fork a project, visit the project page and click the "`Fork`" button at the top-right of the page. +برای فورک کردن پروژه، به صفحه پروژه مراجعه کرده و روی دکمه «Fork» در بالای سمت راست صفحه کلیک کنید. .The "`Fork`" button image::images/forkbutton.png[The “Fork” button] -After a few seconds, you'll be taken to your new project page, with your own writeable copy of the code. +پس از چند ثانیه، به صفحه پروژه جدید خود هدایت می‌شوید که نسخه قابل نوشتن کد متعلق به خودتان است. [[ch06-github_flow]] -==== The GitHub Flow +==== The GitHub Flow (روند کاری گیت‌هاب) (((GitHub, Flow))) -GitHub is designed around a particular collaboration workflow, centered on Pull Requests. -This flow works whether you're collaborating with a tightly-knit team in a single shared repository, or a globally-distributed company or network of strangers contributing to a project through dozens of forks. -It is centered on the <> workflow covered in <>. +گیت‌هاب حول یک روند همکاری خاص طراحی شده است که مرکز آن Pull Requestها هستند. +این روند چه در همکاری با تیمی کوچک در یک مخزن مشترک و چه در شرکتی جهانی یا شبکه‌ای از افراد ناشناس که از طریق ده‌ها فورک به پروژه‌ای مشارکت می‌کنند، کارآمد است. +مرکز این روند، روش <> است که در <> شرح داده شده است. -Here's how it generally works: +روند کار معمولاً به این صورت است: -1. Fork the project. -2. Create a topic branch from `master`. -3. Make some commits to improve the project. -4. Push this branch to your GitHub project. -5. Open a Pull Request on GitHub. -6. Discuss, and optionally continue committing. -7. The project owner merges or closes the Pull Request. -8. Sync the updated `master` back to your fork. +1. پروژه را فورک کنید. +2. شاخه موضوعی (topic branch) از شاخه `master` بسازید. +3. چند کامیت برای بهبود پروژه انجام دهید. +4. این شاخه را به پروژه گیت‌هاب خود ارسال کنید. +5. یک Pull Request روی گیت‌هاب باز کنید. +6. در مورد آن بحث کنید و در صورت نیاز به ارسال کامیت‌های بیشتر ادامه دهید. +7. مالک پروژه Pull Request را ادغام یا ببندد. +8. شاخه `master` به‌روزشده را به فورک خود سینک کنید. -This is basically the Integration Manager workflow covered in <>, but instead of using email to communicate and review changes, teams use GitHub's web based tools. +این اساساً همان روند کاری Integration Manager است که در <> توضیح داده شده، با این تفاوت که به جای استفاده از ایمیل برای ارتباط و بررسی تغییرات، تیم‌ها از ابزارهای وب‌محور گیت‌هاب استفاده می‌کنند. -Let's walk through an example of proposing a change to an open source project hosted on GitHub using this flow. +بیایید یک مثال از پیشنهاد تغییر در یک پروژه متن‌باز میزبانی شده روی گیت‌هاب را با استفاده از این روند بررسی کنیم. [TIP] ==== -You can use the official *GitHub CLI* tool instead of the GitHub web interface for most things. -The tool can be used on Windows, macOS, and Linux systems. -Go to the https://cli.github.com/[GitHub CLI homepage^] for installation instructions and the manual. +به جای استفاده از رابط وب گیت‌هاب، می‌توانید از ابزار رسمی *GitHub CLI* نیز استفاده کنید. +این ابزار روی ویندوز، مک‌او‌اس و لینوکس قابل استفاده است. +برای دستورالعمل نصب و راهنمای استفاده به https://cli.github.com/ مراجعه کنید. ==== -===== Creating a Pull Request +===== Creating a Pull Request (ایجاد یک Pull Request) -Tony is looking for code to run on his Arduino programmable microcontroller and has found a great program file on GitHub at https://github.com/schacon/blink[^]. +تونی به دنبال کدی برای اجرای روی میکروکنترلر برنامه‌پذیر Arduino خود است و برنامه بسیار خوبی در گیت‌هاب به آدرس https://github.com/schacon/blink پیدا کرده است. .The project we want to contribute to image::images/blink-01-start.png[The project we want to contribute to] -The only problem is that the blinking rate is too fast. -We think it's much nicer to wait 3 seconds instead of 1 in between each state change. -So let's improve the program and submit it back to the project as a proposed change. +تنها مشکلی که وجود دارد این است که نرخ چشمک زدن خیلی سریع است. +ما فکر می‌کنیم بهتر است به جای ۱ ثانیه، بین هر تغییر حالت ۳ ثانیه صبر کنیم. +پس بیایید برنامه را بهبود دهیم و آن را به عنوان یک تغییر پیشنهادی به پروژه ارسال کنیم. -First, we click the 'Fork' button as mentioned earlier to get our own copy of the project. -Our user name here is "`tonychacon`" so our copy of this project is at `https://github.com/tonychacon/blink` and that's where we can edit it. -We will clone it locally, create a topic branch, make the code change and finally push that change back up to GitHub. +ابتدا، همانطور که پیش‌تر گفته شد، روی دکمه «Fork» کلیک می‌کنیم تا نسخه خودمان از پروژه را داشته باشیم. +نام کاربری ما در اینجا «tonychacon» است، پس نسخه ما از این پروژه در آدرس `https://github.com/tonychacon/blink` قرار دارد و می‌توانیم آن را ویرایش کنیم. +ما آن را به صورت محلی کلون می‌کنیم، یک شاخه موضوعی می‌سازیم، تغییر در کد را انجام می‌دهیم و در نهایت آن را به گیت‌هاب ارسال می‌کنیم. [source,console] ---- @@ -113,135 +113,127 @@ To https://github.com/tonychacon/blink * [new branch] slow-blink -> slow-blink ---- -<1> Clone our fork of the project locally. -<2> Create a descriptive topic branch. -<3> Make our change to the code. -<4> Check that the change is good. -<5> Commit our change to the topic branch. -<6> Push our new topic branch back up to our GitHub fork. +<1> فورک پروژه را به صورت محلی کلون کنیم. +<2> یک شاخه موضوعی با نام توصیفی بسازیم. +<3> تغییر مورد نظر را در کد اعمال کنیم. +<4> مطمئن شویم که تغییر خوب است. +<5> تغییر را به شاخه موضوعی کامیت کنیم. +<6> شاخه موضوعی جدید را به فورک گیت‌هاب خود ارسال کنیم. -Now if we go back to our fork on GitHub, we can see that GitHub noticed that we pushed a new topic branch up and presents us with a big green button to check out our changes and open a Pull Request to the original project. +حالا اگر به فورک خود در گیت‌هاب برگردیم، می‌بینیم که گیت‌هاب متوجه شده شاخه موضوعی جدیدی ارسال کرده‌ایم و دکمه بزرگی به رنگ سبز برای بررسی تغییرات و باز کردن Pull Request به پروژه اصلی به ما نشان می‌دهد. -You can alternatively go to the "`Branches`" page at `\https://github.com///branches` to locate your branch and open a new Pull Request from there. +همچنین می‌توانید به صفحه «`Branches`» در آدرس `https://github.com///branches` بروید، شاخه خود را پیدا کنید و از آنجا Pull Request جدید باز کنید. .Pull Request button image::images/blink-02-pr.png[Pull Request button] (((GitHub, pull requests))) -If we click that green button, we'll see a screen that asks us to give our Pull Request a title and description. -It is almost always worthwhile to put some effort into this, since a good description helps the owner of the original project determine what you were trying to do, whether your proposed changes are correct, and whether accepting the changes would improve the original project. +اگر روی آن دکمه سبز کلیک کنیم، صفحه‌ای ظاهر می‌شود که از ما می‌خواهد عنوان و توضیحی برای Pull Request خود بنویسیم. +تقریباً همیشه ارزش دارد که برای این کار وقت بگذارید، چون توضیح خوب به مالک پروژه اصلی کمک می‌کند بفهمد هدف شما چیست، آیا تغییرات پیشنهادی درست هستند و آیا پذیرفتن آن‌ها پروژه اصلی را بهتر می‌کند یا خیر. -We also see a list of the commits in our topic branch that are "`ahead`" of the `master` branch (in this case, just the one) and a unified diff of all the changes that will be made should this branch get merged by the project owner. +همچنین فهرستی از کامیت‌های شاخه موضوعی را می‌بینیم که نسبت به شاخه `master` «جلوتر» هستند (در این مورد فقط یک کامیت) و یک diff یکپارچه از تمام تغییراتی که در صورت ادغام این شاخه توسط مالک پروژه اعمال خواهند شد. .Pull Request creation page image::images/blink-03-pull-request-open.png[Pull Request creation page] -When you hit the 'Create pull request' button on this screen, the owner of the project you forked will get a notification that someone is suggesting a change and will link to a page that has all of this information on it. +وقتی روی دکمه «Create pull request» در این صفحه کلیک می‌کنید، صاحب پروژه‌ای که آن را فورک کرده‌اید، اطلاع دریافت می‌کند که کسی تغییراتی را پیشنهاد داده است و به صفحه‌ای لینک می‌شود که تمام این اطلاعات را دارد. [NOTE] ==== -Though Pull Requests are used commonly for public projects like this when the contributor has a complete change ready to be made, it's also often used in internal projects _at the beginning_ of the development cycle. -Since you can keep pushing to the topic branch even *after* the Pull Request is opened, it's often opened early and used as a way to iterate on work as a team within a context, rather than opened at the very end of the process. +اگرچه درخواست‌های pull معمولاً برای پروژه‌های عمومی مانند این استفاده می‌شوند وقتی که مشارکت‌کننده تغییر کاملی آماده کرده است، اما اغلب در پروژه‌های داخلی _در ابتدای_ چرخه توسعه هم استفاده می‌شوند. +از آنجا که می‌توانید حتی *بعد از* باز شدن درخواست pull به شاخه موضوعی، تغییرات جدید ارسال کنید، معمولاً این درخواست زود باز می‌شود و به عنوان راهی برای همکاری تیمی و انجام اصلاحات در یک زمینه مشخص استفاده می‌شود، نه اینکه در پایان فرایند باز شود. ==== -===== Iterating on a Pull Request +===== Iterating on a Pull Request (تکرار و اصلاح روی یک Pull Request) -At this point, the project owner can look at the suggested change and merge it, reject it or comment on it. -Let's say that he likes the idea, but would prefer a slightly longer time for the light to be off than on. +در این مرحله، صاحب پروژه می‌تواند تغییر پیشنهادی را بررسی کرده و آن را ادغام کند، رد کند یا نظر دهد. +فرض کنیم او ایده را دوست دارد، اما ترجیح می‌دهد مدت زمان خاموش بودن چراغ کمی بیشتر از روشن بودن آن باشد. -Where this conversation may take place over email in the workflows presented in <>, on GitHub this happens online. -The project owner can review the unified diff and leave a comment by clicking on any of the lines. +جایی که این گفتگو ممکن است در ایمیل انجام شود، در جریان کاری که در <> توضیح داده شده، در گیت‌هاب این تعامل به صورت آنلاین انجام می‌شود. +صاحب پروژه می‌تواند تفاوت‌های یکپارچه شده (unified diff) را بررسی کرده و با کلیک روی هر خط، نظر خود را ثبت کند. .Comment on a specific line of code in a Pull Request image::images/blink-04-pr-comment.png[Comment on a specific line of code in a Pull Request] -Once the maintainer makes this comment, the person who opened the Pull Request (and indeed, anyone else watching the repository) will get a notification. -We'll go over customizing this later, but if he had email notifications turned on, Tony would get an email like this: +وقتی نگهدارنده پروژه این نظر را ثبت کند، فردی که درخواست pull را باز کرده (و در واقع هر کسی که مخزن را دنبال می‌کند) یک اطلاعیه دریافت خواهد کرد. +بعداً درباره تنظیمات سفارشی این اطلاعیه‌ها صحبت خواهیم کرد، اما اگر او اعلان‌های ایمیلی را فعال کرده باشد، تونی ایمیلی شبیه این دریافت می‌کند: [[_email_notification]] .Comments sent as email notifications image::images/blink-04-email.png[Comments sent as email notifications] -Anyone can also leave general comments on the Pull Request. -In <<_pr_discussion>> we can see an example of the project owner both commenting on a line of code and then leaving a general comment in the discussion section. -You can see that the code comments are brought into the conversation as well. +هر کسی همچنین می‌تواند نظر کلی درباره درخواست pull بگذارد. +در <<_pr_discussion>> مثالی می‌بینیم که صاحب پروژه هم روی یک خط کد نظر می‌دهد و سپس در بخش بحث نظر کلی می‌گذارد. +می‌توانید ببینید که نظرات کد نیز در گفتگو وارد شده‌اند. [[_pr_discussion]] .Pull Request discussion page image::images/blink-05-general-comment.png[Pull Request discussion page] -Now the contributor can see what they need to do in order to get their change accepted. -Luckily this is very straightforward. -Where over email you may have to re-roll your series and resubmit it to the mailing list, with GitHub you simply commit to the topic branch again and push, which will automatically update the Pull Request. -In <<_pr_final>> you can also see that the old code comment has been collapsed in the updated Pull Request, since it was made on a line that has since been changed. +حالا مشارکت‌کننده می‌تواند ببیند برای پذیرفته شدن تغییرش چه کاری باید انجام دهد. +خوشبختانه این کار بسیار ساده است. +جایی که در ایمیل ممکن است مجبور باشید سری تغییرات خود را بازنویسی و مجدداً ارسال کنید، در گیت‌هاب فقط کافی است دوباره روی شاخه موضوعی commit کرده و push کنید که به طور خودکار درخواست pull را به‌روزرسانی می‌کند. +در <<_pr_final>> نیز می‌توانید ببینید که نظر قدیمی روی کد در درخواست pull به‌روزرسانی شده جمع شده است، چون روی خطی گذاشته شده بود که بعداً تغییر کرده است. -Adding commits to an existing Pull Request doesn't trigger a notification, so once Tony has pushed his corrections he decides to leave a comment to inform the project owner that he made the requested change. +افزودن commit به یک درخواست pull موجود اعلان جدیدی ایجاد نمی‌کند، بنابراین وقتی تونی اصلاحات خود را push می‌کند، تصمیم می‌گیرد نظری بگذارد تا به صاحب پروژه اطلاع دهد که تغییر خواسته شده اعمال شده است. [[_pr_final]] .Pull Request final image::images/blink-06-final.png[Pull Request final] -An interesting thing to notice is that if you click on the "`Files Changed`" tab on this Pull Request, you'll get the "`unified`" diff -- that is, the total aggregate difference that would be introduced to your main branch if this topic branch was merged in. -In `git diff` terms, it basically automatically shows you `git diff master...` for the branch this Pull Request is based on. -See <> for more about this type of diff. +یک نکته جالب این است که اگر روی تب «Files Changed» این درخواست pull کلیک کنید، «unified diff» را مشاهده می‌کنید — یعنی تفاوت کلی که در صورت ادغام این شاخه موضوعی، به شاخه اصلی اضافه خواهد شد. +به زبان git diff، این تقریباً همان نمایش خودکار `git diff master...` برای شاخه‌ای است که این درخواست pull بر اساس آن است. +برای اطلاعات بیشتر درباره این نوع diff به <> مراجعه کنید. -The other thing you'll notice is that GitHub checks to see if the Pull Request merges cleanly and provides a button to do the merge for you on the server. -This button only shows up if you have write access to the repository and a trivial merge is possible. -If you click it GitHub will perform a "`non-fast-forward`" merge, meaning that even if the merge *could* be a fast-forward, it will still create a merge commit. +موضوع دیگری که متوجه خواهید شد این است که گیت‌هاب بررسی می‌کند که آیا این درخواست pull به صورت تمیز قابل ادغام است یا نه و دکمه‌ای برای ادغام روی سرور به شما ارائه می‌دهد. +این دکمه فقط زمانی نمایش داده می‌شود که شما دسترسی نوشتن به مخزن داشته باشید و ادغام ساده‌ای ممکن باشد. +اگر روی آن کلیک کنید، گیت‌هاب یک ادغام «non-fast-forward» انجام می‌دهد، یعنی حتی اگر ادغام می‌توانست fast-forward باشد، باز هم یک commit ادغام ایجاد خواهد کرد. -If you would prefer, you can simply pull the branch down and merge it locally. -If you merge this branch into the `master` branch and push it to GitHub, the Pull Request will automatically be closed. +اگر ترجیح می‌دهید، می‌توانید شاخه را به صورت محلی pull کرده و ادغام کنید. +اگر این شاخه را در شاخه `master` ادغام کنید و به گیت‌هاب push کنید، درخواست pull به طور خودکار بسته خواهد شد. -This is the basic workflow that most GitHub projects use. -Topic branches are created, Pull Requests are opened on them, a discussion ensues, possibly more work is done on the branch and eventually the request is either closed or merged. +این جریان کاری پایه‌ای است که بیشتر پروژه‌های گیت‌هاب استفاده می‌کنند. +شاخه‌های موضوعی ساخته می‌شوند، درخواست‌های pull روی آن‌ها باز می‌شود، بحثی شکل می‌گیرد، احتمالاً کار بیشتری روی شاخه انجام می‌شود و در نهایت درخواست بسته یا ادغام می‌شود. [NOTE] .Not Only Forks ==== -It's important to note that you can also open a Pull Request between two branches in the same repository. -If you're working on a feature with someone and you both have write access to the project, you can push a topic branch to the repository and open a Pull Request on it to the `master` branch of that same project to initiate the code review and discussion process. -No forking necessary. +مهم است بدانید که می‌توانید درخواست pull را بین دو شاخه در یک مخزن نیز باز کنید. +اگر با کسی روی یک ویژگی کار می‌کنید و هر دو دسترسی نوشتن به پروژه دارید، می‌توانید شاخه موضوعی را به مخزن push کنید و روی آن درخواست pull به شاخه `master` همان پروژه باز کنید تا فرایند بازبینی کد و بحث شروع شود. +نیازی به فورک کردن نیست. ==== -==== Advanced Pull Requests +==== Advanced Pull Requests (درخواست‌های پیشرفته برای ادغام) -Now that we've covered the basics of contributing to a project on GitHub, let's cover a few interesting tips and tricks about Pull Requests so you can be more effective in using them. +حالا که اصول اولیه مشارکت در یک پروژه در گیت‌هاب را پوشش دادیم، بیایید چند نکته و ترفند جالب درباره‌ی درخواست‌های ادغام را بررسی کنیم تا بتوانید استفاده موثرتری از آن‌ها داشته باشید. -===== Pull Requests as Patches +===== Pull Requests as Patches (درخواست‌های ادغام به عنوان پچ‌ها) -It's important to understand that many projects don't really think of Pull Requests as queues of perfect patches that should apply cleanly in order, as most mailing list-based projects think of patch series contributions. -Most GitHub projects think about Pull Request branches as iterative conversations around a proposed change, culminating in a unified diff that is applied by merging. +مهم است که بدانید بسیاری از پروژه‌ها درخواست‌های ادغام را به عنوان صفی از پچ‌های کامل و بدون نقص که باید به ترتیب و بدون خطا اعمال شوند، نمی‌بینند، برخلاف پروژه‌های مبتنی بر فهرست‌های پستی که سری‌های پچ را به این شکل می‌بینند. بیشتر پروژه‌های گیت‌هاب شاخه‌های درخواست ادغام را به عنوان گفتگوهای تکرارشونده درباره‌ی یک تغییر پیشنهادی در نظر می‌گیرند که در نهایت به یک دیف متحد منجر می‌شود که با ادغام اعمال می‌شود. -This is an important distinction, because generally the change is suggested before the code is thought to be perfect, which is far more rare with mailing list based patch series contributions. -This enables an earlier conversation with the maintainers so that arriving at the proper solution is more of a community effort. -When code is proposed with a Pull Request and the maintainers or community suggest a change, the patch series is generally not re-rolled, but instead the difference is pushed as a new commit to the branch, moving the conversation forward with the context of the previous work intact. +این تفاوت مهمی است، زیرا معمولاً تغییر قبل از این که کد کامل و بی‌نقص باشد پیشنهاد می‌شود، چیزی که در مشارکت‌های سری‌های پچ مبتنی بر فهرست‌های پستی بسیار نادر است. این امکان گفتگوی زودتر با نگهدارندگان پروژه را فراهم می‌کند تا رسیدن به راه حل مناسب بیشتر یک تلاش جمعی باشد. وقتی کدی با یک درخواست ادغام پیشنهاد می‌شود و نگهداران یا جامعه تغییری را پیشنهاد می‌دهند، معمولاً سری پچ دوباره ارائه نمی‌شود، بلکه تفاوت به صورت یک کامیت جدید به شاخه اضافه می‌شود و گفتگو را با حفظ زمینه‌ی کار قبلی ادامه می‌دهد. -For instance, if you go back and look again at <<_pr_final>>, you'll notice that the contributor did not rebase his commit and send another Pull Request. -Instead they added new commits and pushed them to the existing branch. -This way if you go back and look at this Pull Request in the future, you can easily find all of the context of why decisions were made. -Pushing the "`Merge`" button on the site purposefully creates a merge commit that references the Pull Request so that it's easy to go back and research the original conversation if necessary. +برای مثال، اگر دوباره به <<_pr_final>> نگاه کنید، متوجه می‌شوید که مشارکت‌کننده کامیت خود را ری‌بیس نکرده و درخواست ادغام جدیدی نفرستاده است. بلکه کامیت‌های جدیدی اضافه کرده و آن‌ها را به شاخه موجود پوش کرده است. بدین ترتیب اگر در آینده به این درخواست ادغام مراجعه کنید، می‌توانید به راحتی تمام زمینه‌ی تصمیم‌گیری‌ها را پیدا کنید. زدن دکمه «Merge» در سایت عمداً یک کامیت ادغام ایجاد می‌کند که به درخواست ادغام اشاره دارد تا در صورت نیاز به سادگی بتوان به گفتگوی اصلی بازگشت و آن را بررسی کرد. -===== Keeping up with Upstream +===== Keeping up with Upstream (به‌روز بودن با شاخه اصلی) -If your Pull Request becomes out of date or otherwise doesn't merge cleanly, you will want to fix it so the maintainer can easily merge it. -GitHub will test this for you and let you know at the bottom of every Pull Request if the merge is trivial or not. +اگر درخواست ادغام شما قدیمی شود یا به هر دلیلی به‌طور تمیز ادغام نشود، باید آن را اصلاح کنید تا نگهدارنده بتواند به آسانی آن را ادغام کند. گیت‌هاب این موضوع را برای شما آزمایش می‌کند و در پایین هر درخواست ادغام به شما می‌گوید که ادغام ساده است یا خیر. [[_pr_fail]] .Pull Request does not merge cleanly image::images/pr-01-fail.png[Pull Request does not merge cleanly] -If you see something like <<_pr_fail>>, you'll want to fix your branch so that it turns green and the maintainer doesn't have to do extra work. +اگر درخواست ادغام شما قدیمی شود یا به هر دلیلی به‌طور تمیز ادغام نشود، باید آن را اصلاح کنید تا نگهدارنده بتواند به آسانی آن را ادغام کند. گیت‌هاب این موضوع را برای شما آزمایش می‌کند و در پایین هر درخواست ادغام به شما می‌گوید که ادغام ساده است یا خیر. -You have two main options in order to do this. -You can either rebase your branch on top of whatever the target branch is (normally the `master` branch of the repository you forked), or you can merge the target branch into your branch. +اگر چیزی شبیه به <<_pr_fail>> دیدید، باید شاخه خود را اصلاح کنید تا به رنگ سبز در بیاید و نگهدارنده مجبور به انجام کار اضافی نشود. -Most developers on GitHub will choose to do the latter, for the same reasons we just went over in the previous section. -What matters is the history and the final merge, so rebasing isn't getting you much other than a slightly cleaner history and in return is *far* more difficult and error prone. +برای این کار دو گزینه اصلی دارید. می‌توانید شاخه خود را روی شاخه هدف (معمولاً شاخه `master` مخزن فورک شده) ری‌بیس کنید یا شاخه هدف را در شاخه خود ادغام کنید. -If you want to merge in the target branch to make your Pull Request mergeable, you would add the original repository as a new remote, fetch from it, merge the main branch of that repository into your topic branch, fix any issues and finally push it back up to the same branch you opened the Pull Request on. +بیشتر توسعه‌دهندگان در گیت‌هاب گزینه دوم را انتخاب می‌کنند، به دلایلی که در بخش قبلی توضیح دادیم. آنچه اهمیت دارد تاریخچه و ادغام نهایی است، پس ری‌بیس کردن جز داشتن تاریخچه‌ای کمی مرتب‌تر، مزیت زیادی ندارد و در عوض بسیار دشوارتر و مستعد خطا است. -For example, let's say that in the "`tonychacon`" example we were using before, the original author made a change that would create a conflict in the Pull Request. -Let's go through those steps. +اگر می‌خواهید شاخه هدف را ادغام کنید تا درخواست ادغام شما قابل ادغام شود، باید مخزن اصلی را به عنوان یک ریموت جدید اضافه کنید، از آن ریموت دریافت کنید، شاخه اصلی آن مخزن را در شاخه موضوعی خود ادغام کنید، مشکلات را برطرف کنید و در نهایت آن را به همان شاخه‌ای که درخواست ادغام را باز کرده‌اید پوش کنید. + +برای مثال فرض کنید در مثال "`tonychacon`"، نویسنده اصلی تغییراتی داده که باعث ایجاد تعارض در درخواست ادغام می‌شود. مراحل زیر را طی می‌کنیم: [source,console] ---- @@ -276,87 +268,84 @@ To https://github.com/tonychacon/blink ef4725c..3c8d735 slower-blink -> slow-blink ---- -<1> Add the original repository as a remote named `upstream`. -<2> Fetch the newest work from that remote. -<3> Merge the main branch of that repository into your topic branch. -<4> Fix the conflict that occurred. -<5> Push back up to the same topic branch. +<1> مخزن اصلی را به عنوان ریموتی به نام `upstream` اضافه کنید. +<2> جدیدترین تغییرات را از آن ریموت دریافت کنید. +<3> شاخه اصلی آن مخزن را در شاخه موضوعی خود ادغام کنید. +<4> تعارض پیش آمده را برطرف کنید. +<5> تغییرات را به همان شاخه موضوعی پوش کنید. -Once you do that, the Pull Request will be automatically updated and re-checked to see if it merges cleanly. +وقتی این کار را انجام دهید، درخواست ادغام به طور خودکار به‌روزرسانی شده و دوباره بررسی می‌شود تا ببیند آیا به‌طور تمیز ادغام می‌شود یا خیر. [[_pr_merge_fix]] .Pull Request now merges cleanly image::images/pr-02-merge-fix.png[Pull Request now merges cleanly] -One of the great things about Git is that you can do that continuously. -If you have a very long-running project, you can easily merge from the target branch over and over again and only have to deal with conflicts that have arisen since the last time that you merged, making the process very manageable. +یکی از مزایای بزرگ گیت این است که می‌توانید این کار را به صورت مداوم انجام دهید. اگر پروژه‌ای طولانی‌مدت دارید، می‌توانید بارها و بارها از شاخه هدف ادغام بگیرید و تنها با تعارض‌هایی که از آخرین ادغام به وجود آمده‌اند مواجه شوید که این روند را بسیار قابل مدیریت می‌کند. -If you absolutely wish to rebase the branch to clean it up, you can certainly do so, but it is highly encouraged to not force push over the branch that the Pull Request is already opened on. -If other people have pulled it down and done more work on it, you run into all of the issues outlined in <>. -Instead, push the rebased branch to a new branch on GitHub and open a brand new Pull Request referencing the old one, then close the original. +اگر واقعاً می‌خواهید شاخه را ری‌بیس کنید تا آن را تمیز کنید، قطعاً می‌توانید این کار را انجام دهید، اما اکیداً توصیه می‌شود که روی شاخه‌ای که درخواست ادغام روی آن باز است، پوش فورس انجام ندهید. اگر افراد دیگری آن را دریافت و روی آن کار کرده باشند، با مشکلات بسیار زیادی مواجه خواهید شد که در <> توضیح داده شده است. در عوض، شاخه ری‌بیس شده را به شاخه جدیدی در گیت‌هاب پوش کنید و درخواست ادغام جدیدی باز کنید که به درخواست قبلی ارجاع دهد، سپس درخواست اصلی را ببندید. -===== References +===== References (ارجاع‌ها) -Your next question may be "`How do I reference the old Pull Request?`". -It turns out there are many, many ways to reference other things almost anywhere you can write in GitHub. +شاید سؤال بعدی شما این باشد: «چگونه به درخواست ادغام قدیمی ارجاع دهم؟» +واقعیت این است که راه‌های بسیار زیادی برای ارجاع به چیزهای دیگر تقریباً در هر جایی که در گیت‌هاب می‌توانید بنویسید وجود دارد. -Let's start with how to cross-reference another Pull Request or an Issue. -All Pull Requests and Issues are assigned numbers and they are unique within the project. -For example, you can't have Pull Request +#3+ _and_ Issue +#3+. -If you want to reference any Pull Request or Issue from any other one, you can simply put `+#+` in any comment or description. -You can also be more specific if the Issue or Pull request lives somewhere else; write `username#` if you're referring to an Issue or Pull Request in a fork of the repository you're in, or `username/repo#` to reference something in another repository. +بیایید با نحوه ارجاع به درخواست ادغام یا مسئله‌ی دیگر شروع کنیم. +تمام درخواست‌های ادغام و مسائل شماره‌گذاری شده و این شماره‌ها در پروژه یکتا هستند. +برای مثال، نمی‌توانید درخواست ادغام شماره ۳ و مسئله شماره ۳ داشته باشید که هر دو در یک پروژه باشند. +اگر بخواهید به هر درخواست ادغام یا مسئله‌ای از هر درخواست یا مسئله‌ی دیگر ارجاع دهید، کافی است `#<شماره>` را در هر کامنت یا توضیحی بنویسید. +همچنین می‌توانید دقیق‌تر باشید اگر مسئله یا درخواست ادغام در جای دیگری است؛ برای ارجاع به مسئله یا درخواست ادغام در فورکی از مخزنی که در آن هستید، `username#<شماره>` را بنویسید، یا برای ارجاع به چیزی در مخزن دیگر، `username/repo#<شماره>` را استفاده کنید. -Let's look at an example. -Say we rebased the branch in the previous example, created a new pull request for it, and now we want to reference the old pull request from the new one. -We also want to reference an issue in the fork of the repository and an issue in a completely different project. -We can fill out the description just like <<_pr_references>>. + بیایید یک مثال را بررسی کنیم. +فرض کنید در مثال قبلی، شاخه را بازبیس (rebase) کرده‌ایم، یک درخواست کشش (pull request) جدید برای آن ساخته‌ایم و حالا می‌خواهیم از درخواست کشش قدیمی در درخواست جدید ارجاع دهیم. +همچنین می‌خواهیم به یک مسئله (issue) در فورک مخزن و یک مسئله در پروژه‌ای کاملاً متفاوت اشاره کنیم. +می‌توانیم توضیحات را دقیقاً مانند <<_pr_references>> پر کنیم. [[_pr_references]] .Cross references in a Pull Request image::images/mentions-01-syntax.png[Cross references in a Pull Request] -When we submit this pull request, we'll see all of that rendered like <<_pr_references_render>>. +وقتی این درخواست کشش را ارسال کنیم، همه این موارد به شکل <<_pr_references_render>> نمایش داده می‌شوند. [[_pr_references_render]] .Cross references rendered in a Pull Request image::images/mentions-02-render.png[Cross references rendered in a Pull Request] -Notice that the full GitHub URL we put in there was shortened to just the information needed. +توجه کنید که URL کامل گیت‌هاب که وارد کرده‌ایم، به اطلاعات مورد نیاز خلاصه شده است. -Now if Tony goes back and closes out the original Pull Request, we can see that by mentioning it in the new one, GitHub has automatically created a trackback event in the Pull Request timeline. -This means that anyone who visits this Pull Request and sees that it is closed can easily link back to the one that superseded it. -The link will look something like <<_pr_closed>>. +حالا اگر تونی برگردد و درخواست کشش اصلی را ببندد، می‌بینیم که با اشاره به آن در درخواست جدید، گیت‌هاب به صورت خودکار یک رویداد پیگیری (trackback) در جدول زمانی درخواست کشش ایجاد کرده است. +این بدان معناست که هر کسی که این درخواست کشش را مشاهده کند و ببیند که بسته شده، به راحتی می‌تواند به آن درخواست کشش که این را جایگزین کرده، لینک بزند. +این لینک چیزی شبیه به <<_pr_closed>> خواهد بود. [[_pr_closed]] .Link back to the new Pull Request in the closed Pull Request timeline image::images/mentions-03-closed.png[Link back to the new Pull Request in the closed Pull Request timeline] -In addition to issue numbers, you can also reference a specific commit by SHA-1. -You have to specify a full 40 character SHA-1, but if GitHub sees that in a comment, it will link directly to the commit. -Again, you can reference commits in forks or other repositories in the same way you did with issues. +علاوه بر شماره مسائل، می‌توانید به یک کامیت خاص با شناسه SHA-1 هم ارجاع دهید. +باید یک SHA-1 کامل ۴۰ حرفی مشخص کنید، اما اگر گیت‌هاب آن را در یک کامنت ببیند، مستقیماً به کامیت لینک می‌دهد. +دوباره، می‌توانید به کامیت‌ها در فورک‌ها یا مخازن دیگر به همان روشی که به مسائل اشاره می‌کنید، ارجاع دهید. -==== GitHub Flavored Markdown +==== GitHub Flavored Markdown (مارک‌داون با طعم گیت‌هاب) -Linking to other Issues is just the beginning of interesting things you can do with almost any text box on GitHub. -In Issue and Pull Request descriptions, comments, code comments and more, you can use what is called "`GitHub Flavored Markdown`". -Markdown is like writing in plain text but which is rendered richly. +لینک دادن به مسائل دیگر تنها آغاز کارهای جالبی است که می‌توانید در تقریباً هر کادر متنی در گیت‌هاب انجام دهید. +در توضیحات مسائل و درخواست‌های کشش، کامنت‌ها، کامنت‌های کد و موارد دیگر، می‌توانید از چیزی به نام «مارک‌داون با طعم گیت‌هاب» استفاده کنید. +مارک‌داون شبیه نوشتن متن ساده است اما به صورت غنی نمایش داده می‌شود. -See <<_example_markdown>> for an example of how comments or text can be written and then rendered using Markdown. +برای نمونه‌ای از نحوه نوشتن و نمایش کامنت‌ها یا متن با استفاده از مارک‌داون، به <<_example_markdown>> مراجعه کنید. [[_example_markdown]] .An example of GitHub Flavored Markdown as written and as rendered image::images/markdown-01-example.png[An example of GitHub Flavored Markdown as written and as rendered] -The GitHub flavor of Markdown adds more things you can do beyond the basic Markdown syntax. -These can all be really useful when creating useful Pull Request or Issue comments or descriptions. +طعم گیت‌هاب از مارک‌داون امکانات بیشتری فراتر از نحو پایه مارک‌داون اضافه می‌کند. +این امکانات هنگام نوشتن کامنت‌ها یا توضیحات مفید برای درخواست‌های کشش یا مسائل بسیار کاربردی هستند. -===== Task Lists +===== Task Lists (فهرست وظایف) -The first really useful GitHub specific Markdown feature, especially for use in Pull Requests, is the Task List. -A task list is a list of checkboxes of things you want to get done. -Putting them into an Issue or Pull Request normally indicates things that you want to get done before you consider the item complete. +اولین ویژگی واقعاً کاربردی مارک‌داون مخصوص گیت‌هاب، به ویژه برای استفاده در درخواست‌های کشش، فهرست وظایف است. +فهرست وظایف، فهرستی از جعبه‌های انتخاب (checkbox) است که کارهایی را که می‌خواهید انجام دهید نشان می‌دهد. +قرار دادن آن‌ها در یک مسئله یا درخواست کشش معمولاً به این معناست که این کارها باید انجام شوند تا آن موضوع کامل در نظر گرفته شود. -You can create a task list like this: +می‌توانید فهرست وظایف را این‌گونه بسازید: [source,text] ---- @@ -365,33 +354,33 @@ You can create a task list like this: - [ ] Document the code ---- -If we include this in the description of our Pull Request or Issue, we'll see it rendered like <<_eg_task_lists>>. +اگر این را در توضیحات درخواست کشش یا مسئله بگنجانید، به شکل <<_eg_task_lists>> نمایش داده می‌شود. [[_eg_task_lists]] .Task lists rendered in a Markdown comment image::images/markdown-02-tasks.png[Task lists rendered in a Markdown comment] -This is often used in Pull Requests to indicate what all you would like to get done on the branch before the Pull Request will be ready to merge. -The really cool part is that you can simply click the checkboxes to update the comment -- you don't have to edit the Markdown directly to check tasks off. +این اغلب در درخواست‌های کشش استفاده می‌شود تا نشان دهد چه کارهایی باید روی شاخه انجام شود تا درخواست کشش آماده ادغام شود. +قسمت جالب این است که می‌توانید صرفاً با کلیک روی جعبه‌های انتخاب، کامنت را به‌روزرسانی کنید — نیازی نیست خود مارک‌داون را مستقیماً ویرایش کنید تا وظایف را تیک بزنید. -What's more, GitHub will look for task lists in your Issues and Pull Requests and show them as metadata on the pages that list them out. -For example, if you have a Pull Request with tasks and you look at the overview page of all Pull Requests, you can see how far done it is. -This helps people break down Pull Requests into subtasks and helps other people track the progress of the branch. -You can see an example of this in <<_task_list_progress>>. +علاوه بر این، گیت‌هاب در مسائل و درخواست‌های کشش به دنبال فهرست‌های وظایف می‌گردد و آن‌ها را به صورت فراداده (metadata) در صفحاتی که لیست می‌کنند نمایش می‌دهد. +برای مثال، اگر یک درخواست کشش با وظایف داشته باشید و صفحه نمای کلی تمام درخواست‌های کشش را ببینید، می‌توانید میزان پیشرفت آن را مشاهده کنید. +این به افراد کمک می‌کند درخواست‌های کشش را به وظایف خردتر تقسیم کنند و دیگران را در جریان پیشرفت شاخه قرار دهد. +می‌توانید نمونه‌ای از این را در <<_task_list_progress>> ببینید. [[_task_list_progress]] .Task list summary in the Pull Request list image::images/markdown-03-task-summary.png[Task list summary in the Pull Request list] -These are incredibly useful when you open a Pull Request early and use it to track your progress through the implementation of the feature. +این‌ها زمانی که درخواست کشش را زود باز می‌کنید و از آن برای پیگیری پیشرفت پیاده‌سازی ویژگی استفاده می‌کنید، فوق‌العاده کاربردی هستند. -===== Code Snippets +===== Code Snippets (قطعه‌های کد) -You can also add code snippets to comments. -This is especially useful if you want to present something that you _could_ try to do before actually implementing it as a commit on your branch. -This is also often used to add example code of what is not working or what this Pull Request could implement. +همچنین می‌توانید قطعه‌های کد را به کامنت‌ها اضافه کنید. +این وقتی مفید است که بخواهید چیزی را نشان دهید که ممکن است قبل از پیاده‌سازی آن به عنوان یک کامیت روی شاخه، امتحانش کنید. +اغلب برای افزودن کد نمونه‌ای از چیزی که کار نمی‌کند یا چیزی که این درخواست کشش می‌تواند پیاده‌سازی کند، استفاده می‌شود. -To add a snippet of code you have to "`fence`" it in backticks. +برای افزودن قطعه کد باید آن را در بک‌تیک (backticks) «محصور» کنید. [source,text] ---- @@ -403,20 +392,20 @@ for(int i=0 ; i < 5 ; i++) ``` ---- -If you add a language name like we did there with 'java', GitHub will also try to syntax highlight the snippet. -In the case of the above example, it would end up rendering like <<_md_code>>. + اگر نام یک زبان برنامه‌نویسی مثل «java» را اضافه کنید، همان‌طور که در مثال بالا انجام دادیم، گیت‌هاب نیز سعی می‌کند کد را با برجسته‌سازی نحوی نمایش دهد. +در مورد مثال بالا، خروجی به صورت <<_md_code>> خواهد بود. [[_md_code]] .Rendered fenced code example image::images/markdown-04-fenced-code.png[Rendered fenced code example] -===== Quoting +===== Quoting (نقل قول) -If you're responding to a small part of a long comment, you can selectively quote out of the other comment by preceding the lines with the `>` character. -In fact, this is so common and so useful that there is a keyboard shortcut for it. -If you highlight text in a comment that you want to directly reply to and hit the `r` key, it will quote that text in the comment box for you. +اگر می‌خواهید به بخش کوچکی از یک نظر طولانی پاسخ دهید، می‌توانید به‌صورت انتخابی بخشی از آن نظر را با گذاشتن علامت `>` در ابتدای خطوط نقل قول کنید. +در واقع، این کار به قدری رایج و مفید است که یک میانبر صفحه‌کلید برای آن وجود دارد. +اگر متنی را در یک نظر هایلایت کرده و کلید `r` را فشار دهید، آن متن به‌صورت نقل قول در جعبه نظر برای شما درج می‌شود. -The quotes look something like this: +نقل قول‌ها چیزی شبیه به این هستند: [source,text] ---- @@ -426,25 +415,25 @@ The quotes look something like this: How big are these slings and in particular, these arrows? ---- -Once rendered, the comment will look like <<_md_quote>>. +وقتی نمایش داده شوند، نظر به صورت <<_md_quote>> دیده خواهد شد. [[_md_quote]] .Rendered quoting example image::images/markdown-05-quote.png[Rendered quoting example] -===== Emoji +===== Emoji (ایموجی) -Finally, you can also use emoji in your comments. -This is actually used quite extensively in comments you see on many GitHub Issues and Pull Requests. -There is even an emoji helper in GitHub. -If you are typing a comment and you start with a `:` character, an autocompleter will help you find what you're looking for. +در نهایت، شما می‌توانید در نظرات خود از ایموجی هم استفاده کنید. +این کار در نظرات بسیاری از مسائل و درخواست‌های pull در گیت‌هاب به‌طور گسترده‌ای به کار می‌رود. +حتی یک راهنمای ایموجی در گیت‌هاب وجود دارد. +اگر در حال نوشتن نظر باشید و با کاراکتر `:` شروع کنید، یک تکمیل‌کننده خودکار به شما کمک می‌کند ایموجی مورد نظر خود را پیدا کنید. [[_md_emoji_auto]] .Emoji autocompleter in action image::images/markdown-06-emoji-complete.png[Emoji autocompleter in action] -Emojis take the form of `::` anywhere in the comment. -For instance, you could write something like this: +ایموجی‌ها به شکل `::` در هر جای نظر قابل استفاده هستند. +برای مثال، می‌توانید چیزی شبیه به این بنویسید: [source,text] ---- @@ -457,50 +446,50 @@ I :eyes: that :bug: and I :cold_sweat:. :clap::tada::panda_face: ---- -When rendered, it would look something like <<_md_emoji>>. +زمانی که نمایش داده شود، چیزی شبیه <<_md_emoji>> خواهد بود. [[_md_emoji]] .Heavy emoji commenting image::images/markdown-07-emoji.png[Heavy emoji commenting] -Not that this is incredibly useful, but it does add an element of fun and emotion to a medium that is otherwise hard to convey emotion in. +ممکن است این ابزار خیلی ضروری به نظر نرسد، اما به محیطی که انتقال احساس در آن سخت است، عنصر سرگرمی و احساس اضافه می‌کند. [NOTE] ==== -There are actually quite a number of web services that make use of emoji characters these days. -A great cheat sheet to reference to find emoji that expresses what you want to say can be found at: +امروزه سرویس‌های وب زیادی از کاراکترهای ایموجی استفاده می‌کنند. +یک راهنمای کامل و مفید برای پیدا کردن ایموجی‌های مناسب، در لینک زیر موجود است: https://www.webfx.com/tools/emoji-cheat-sheet/[^] ==== -===== Images +===== Images (تصاویر) -This isn't technically GitHub Flavored Markdown, but it is incredibly useful. -In addition to adding Markdown image links to comments, which can be difficult to find and embed URLs for, GitHub allows you to drag and drop images into text areas to embed them. +این تکنیک به‌طور فنی بخشی از Markdown مخصوص گیت‌هاب نیست، اما بسیار کاربردی است. +علاوه بر افزودن لینک‌های تصویر Markdown به نظرات که یافتن و جایگذاری آدرس‌های URL آنها ممکن است دشوار باشد، گیت‌هاب امکان کشیدن و رها کردن تصاویر در ناحیه متن برای افزودن آنها را فراهم می‌کند. [[_md_drag]] .Drag and drop images to upload them and auto-embed them image::images/markdown-08-drag-drop.png[Drag and drop images to upload them and auto-embed them] -If you look at <<_md_drag>>, you can see a small "`Parsed as Markdown`" hint above the text area. -Clicking on that will give you a full cheat sheet of everything you can do with Markdown on GitHub. +اگر به <<_md_drag>> نگاه کنید، می‌توانید یک راهنمای کوچک با عنوان «Parsed as Markdown» را بالای ناحیه متن ببینید. +کلیک روی آن، یک راهنمای کامل از همه قابلیت‌های Markdown روی گیت‌هاب را به شما نشان می‌دهد. [[_fetch_and_push_on_different_repositories]] -==== Keep your GitHub public repository up-to-date +==== Keep your GitHub public repository up-to-date (به‌روزرسانی مخزن عمومی گیت‌هاب خود را حفظ کنید) -Once you've forked a GitHub repository, your repository (your "fork") exists independently from the original. -In particular, when the original repository has new commits, GitHub informs you by a message like: +پس از فورک کردن یک مخزن گیت‌هاب، مخزن شما (یا همان «فورک» شما) به‌صورت مستقل از مخزن اصلی وجود خواهد داشت. +به‌خصوص وقتی مخزن اصلی کامیت‌های جدیدی دارد، گیت‌هاب با پیامی مانند زیر به شما اطلاع می‌دهد: [source,text] ---- This branch is 5 commits behind progit:master. ---- -But your GitHub repository will never be automatically updated by GitHub; this is something that you must do yourself. -Fortunately, this is very easy to do. +اما مخزن گیت‌هاب شما هرگز به‌طور خودکار توسط گیت‌هاب به‌روزرسانی نمی‌شود؛ این کاری است که باید خودتان انجام دهید. +خوشبختانه، این کار بسیار آسان است. -One possibility to do this requires no configuration. -For example, if you forked from `https://github.com/progit/progit2.git`, you can keep your `master` branch up-to-date like this: +یکی از روش‌های انجام این کار بدون نیاز به تنظیمات خاص این است که: +برای مثال، اگر شما از `https://github.com/progit/progit2.git` فورک گرفته‌اید، می‌توانید شاخه‌ی `master` خود را به این شکل به‌روز نگه دارید: [source,console] ---- @@ -509,12 +498,12 @@ $ git pull https://github.com/progit/progit2.git <2> $ git push origin master <3> ---- -<1> If you were on another branch, return to `master`. -<2> Fetch changes from `https://github.com/progit/progit2.git` and merge them into `master`. -<3> Push your `master` branch to `origin`. +<1> اگر روی شاخه‌ای دیگر بودید، به شاخهٔ `master` بازگردید. +<2> تغییرات را از `https://github.com/progit/progit2.git` دریافت کرده و با شاخهٔ `master` ادغام کنید. +<3> شاخهٔ `master` خود را به مخزن `origin` ارسال کنید. -This works, but it is a little tedious having to spell out the fetch URL every time. -You can automate this work with a bit of configuration: +این روش کار می‌کند، اما هر بار باید آدرس URL دریافت را به صورت کامل وارد کنید که کمی خسته‌کننده است. +می‌توانید با کمی تنظیمات این کار را خودکار کنید [source,console] ---- @@ -524,13 +513,13 @@ $ git branch --set-upstream-to=progit/master master <3> $ git config --local remote.pushDefault origin <4> ---- -<1> Add the source repository and give it a name. - Here, I have chosen to call it `progit`. -<2> Get a reference on progit's branches, in particular `master`. -<3> Set your `master` branch to fetch from the `progit` remote. -<4> Define the default push repository to `origin`. +<1> مخزن منبع را اضافه کرده و نامی برای آن انتخاب کنید. + در اینجا من نام `progit` را انتخاب کرده‌ام. +<2> مرجع شاخه‌های progit، به ویژه `master` را دریافت کنید. +<3> شاخهٔ `master` خود را طوری تنظیم کنید که از مخزن راه دور `progit` دریافت کند. +<4> مخزن پیش‌فرض برای ارسال تغییرات را روی `origin` تعریف کنید. -Once this is done, the workflow becomes much simpler: +پس از انجام این تنظیمات، روند کار بسیار ساده‌تر می‌شود: [source,console] ---- @@ -539,10 +528,10 @@ $ git pull <2> $ git push <3> ---- -<1> If you were on another branch, return to `master`. -<2> Fetch changes from `progit` and merge changes into `master`. -<3> Push your `master` branch to `origin`. +<1> اگر روی شاخه‌ای دیگر بودید، به شاخهٔ `master` بازگردید. +<2> تغییرات را از `progit` دریافت کرده و با شاخهٔ `master` ادغام کنید. +<3> شاخهٔ `master` خود را به مخزن `origin` ارسال کنید. -This approach can be useful, but it's not without downsides. -Git will happily do this work for you silently, but it won't warn you if you make a commit to `master`, pull from `progit`, then push to `origin` -- all of those operations are valid with this setup. -So you'll have to take care never to commit directly to `master`, since that branch effectively belongs to the upstream repository. +این روش ممکن است مفید باشد، اما بدون معایب نیست. +گیت با خوشحالی این کار را به صورت پنهان برای شما انجام می‌دهد، اما اگر شما مستقیماً روی `master` کامیت بزنید، سپس از `progit` دریافت کنید و بعد به `origin` ارسال کنید، هشدار نخواهد داد — همهٔ این عملیات‌ها با این تنظیمات معتبر هستند. +بنابراین باید مراقب باشید که هرگز مستقیماً روی `master` کامیت نزنید، چون این شاخه عملاً متعلق به مخزن بالادستی است. \ No newline at end of file From 96ee5cab3a8b34f124d90ffa5e001f9a54d8b5f1 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 19 Aug 2025 22:53:17 +0330 Subject: [PATCH 479/549] translate(06-github): translated maintaining to persian --- .idea/workspace.xml | 39 ++- book/06-github/sections/3-maintaining.asc | 312 +++++++++++----------- 2 files changed, 173 insertions(+), 178 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e252f2bc..3cd95ed7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,7 @@ - - - + @@ -91,24 +89,24 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/06-github", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + &quot;keyToString&quot;: { + &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;, + &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, + &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, + &quot;git-widget-placeholder&quot;: &quot;book/translation/06-github&quot;, + &quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;, + &quot;last_opened_file_path&quot;: &quot;/Users/mac/Projects/WebstormProjects/Github/progit2-fa&quot;, + &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, + &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, + &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, + &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, + &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, + &quot;settings.editor.selected.configurable&quot;: &quot;preferences.keymap&quot;, + &quot;to.speed.mode.migration.done&quot;: &quot;true&quot;, + &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; } -} +} @@ -133,6 +131,7 @@ + diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index 2505e86a..65bd401f 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -1,12 +1,12 @@ [[_maintaining_gh_project]] -=== Maintaining a Project +=== Maintaining a Project (نگهداری یک پروژه) -Now that we're comfortable contributing to a project, let's look at the other side: creating, maintaining and administering your own project. +حالا که در مشارکت در یک پروژه راحت شده‌ایم، بیایید به سمت دیگر قضیه نگاه کنیم: ایجاد، نگهداری و مدیریت پروژه‌ی خودتان. -==== Creating a New Repository +==== Creating a New Repository (ایجاد یک مخزن جدید) -Let's create a new repository to share our project code with. -Start by clicking the "`New repository`" button on the right-hand side of the dashboard, or from the `+` button in the top toolbar next to your username as seen in <<_new_repo_dropdown>>. +بیایید یک مخزن جدید بسازیم تا کد پروژه‌مان را به اشتراک بگذاریم. +با کلیک روی دکمه‌ی «New repository» در سمت راست داشبورد شروع کنید، یا از دکمه‌ی «+» در نوار ابزار بالای صفحه کنار نام کاربری‌تان استفاده کنید، همانطور که در <<_new_repo_dropdown>> دیده می‌شود. .The "`Your repositories`" area image::images/newrepo.png[The “Your repositories” area] @@ -15,120 +15,117 @@ image::images/newrepo.png[The “Your repositories” area] .The "`New repository`" dropdown image::images/new-repo.png[The “New repository” dropdown] -This takes you to the "`new repository`" form: +این شما را به فرم "`new repository`" هدایت می‌کند: .The "`new repository`" form image::images/newrepoform.png[The “new repository” form] -All you really have to do here is provide a project name; the rest of the fields are completely optional. -For now, just click the "`Create Repository`" button, and boom -- you have a new repository on GitHub, named `/`. +تنها کاری که واقعاً باید انجام دهید این است که نام پروژه را وارد کنید؛ بقیه فیلدها کاملاً اختیاری هستند. +فعلاً فقط روی دکمه‌ی «Create Repository» کلیک کنید، و همین‌طور — یک مخزن جدید روی گیت‌هاب با نام `/` دارید. -Since you have no code there yet, GitHub will show you instructions for how to create a brand-new Git repository, or connect an existing Git project. -We won't belabor this here; if you need a refresher, check out <>. +از آنجا که هنوز هیچ کدی در این مخزن نیست، گیت‌هاب به شما دستورالعمل‌هایی برای ساخت یک مخزن گیت کاملاً جدید یا اتصال یک پروژه‌ی گیت موجود نشان می‌دهد. +ما اینجا وارد جزئیات نمی‌شویم؛ اگر نیاز به بازخوانی دارید، بخش <> را مطالعه کنید. -Now that your project is hosted on GitHub, you can give the URL to anyone you want to share your project with. -Every project on GitHub is accessible over HTTPS as `\https://github.com//`, and over SSH as `\git@github.com:/`. -Git can fetch from and push to both of these URLs, but they are access-controlled based on the credentials of the user connecting to them. +حالا که پروژه‌ی شما روی گیت‌هاب میزبانی شده است، می‌توانید آدرس URL آن را به هر کسی که می‌خواهید پروژه را با او به اشتراک بگذارید، بدهید. +هر پروژه‌ای روی گیت‌هاب از طریق HTTPS به صورت `https://github.com//` و از طریق SSH به صورت `git@github.com:/` قابل دسترسی است. +گیت می‌تواند از هر دو URL دریافت و ارسال کند، اما دسترسی به آن‌ها بر اساس اعتبارنامه‌های کاربری که به آن‌ها متصل می‌شوند کنترل می‌شود. [NOTE] ==== -It is often preferable to share the HTTPS based URL for a public project, since the user does not have to have a GitHub account to access it for cloning. -Users will have to have an account and an uploaded SSH key to access your project if you give them the SSH URL. -The HTTPS one is also exactly the same URL they would paste into a browser to view the project there. +اغلب ترجیح داده می‌شود که URL مبتنی بر HTTPS را برای پروژه‌های عمومی به اشتراک بگذارید، چرا که کاربر برای کلون کردن نیازی به حساب کاربری گیت‌هاب ندارد. +اگر URL SSH را بدهید، کاربران باید حساب کاربری و کلید SSH آپلود شده داشته باشند تا بتوانند به پروژه دسترسی پیدا کنند. +همچنین، URL HTTPS همان آدرسی است که آن‌ها می‌توانند در مرورگر خود برای مشاهده پروژه وارد کنند. ==== -==== Adding Collaborators +==== Adding Collaborators (اضافه کردن همکاران) -If you're working with other people who you want to give commit access to, you need to add them as "`collaborators`". -If Ben, Jeff, and Louise all sign up for accounts on GitHub, and you want to give them push access to your repository, you can add them to your project. -Doing so will give them "`push`" access, which means they have both read and write access to the project and Git repository. +اگر با افرادی کار می‌کنید که می‌خواهید دسترسی تعهد (commit) به آن‌ها بدهید، باید آن‌ها را به عنوان «collaborators» اضافه کنید. +اگر بن، جف و لوئیس همه در گیت‌هاب حساب کاربری بسازند و شما بخواهید دسترسی push به مخزن خود بدهید، می‌توانید آن‌ها را به پروژه اضافه کنید. +این کار به آن‌ها دسترسی «push» می‌دهد، بدین معنا که هم به پروژه و مخزن گیت خواندن و نوشتن دارند. -Click the "`Settings`" link at the bottom of the right-hand sidebar. +روی لینک "`Setting`" در پایین نوار کناری سمت راست کلیک کنید. .The repository settings link image::images/reposettingslink.png[The repository settings link] -Then select "`Collaborators`" from the menu on the left-hand side. -Then, just type a username into the box, and click "`Add collaborator.`" -You can repeat this as many times as you like to grant access to everyone you like. -If you need to revoke access, just click the "`X`" on the right-hand side of their row. +سپس از منوی سمت چپ «Collaborators» را انتخاب کنید. +بعد، فقط نام کاربری را در کادر تایپ کنید و روی «Add collaborator» کلیک کنید. +می‌توانید این کار را به هر تعداد که دوست دارید تکرار کنید تا به همه‌ی افراد دلخواه دسترسی بدهید. +اگر نیاز به لغو دسترسی داشتید، فقط روی «X» در سمت راست ردیف آن‌ها کلیک کنید. .The repository collaborators box image::images/collaborators.png[The repository collaborators box] -==== Managing Pull Requests +==== Managing Pull Requests (مدیریت درخواست‌های Pull) -Now that you have a project with some code in it and maybe even a few collaborators who also have push access, let's go over what to do when you get a Pull Request yourself. +حالا که یک پروژه با مقداری کد دارید و شاید چند همکار که دسترسی push دارند، بیایید ببینیم وقتی خودتان یک Pull Request دریافت می‌کنید، چه کار باید بکنید. -Pull Requests can either come from a branch in a fork of your repository or they can come from another branch in the same repository. -The only difference is that the ones in a fork are often from people where you can't push to their branch and they can't push to yours, whereas with internal Pull Requests generally both parties can access the branch. +درخواست‌های Pull می‌توانند یا از یک شاخه در یک فورک مخزن شما بیایند یا از شاخه‌ای دیگر در همان مخزن. +تنها تفاوت این است که درخواست‌های Pull در فورک‌ها اغلب از افرادی هستند که شما نمی‌توانید به شاخه آن‌ها push کنید و آن‌ها هم نمی‌توانند به شاخه شما push کنند، در حالی که در درخواست‌های Pull داخلی معمولاً هر دو طرف به شاخه دسترسی دارند. -For these examples, let's assume you are "`tonychacon`" and you've created a new Arduino code project named "`fade`". +برای این مثال‌ها فرض کنیم شما "`tonychacon`" هستید و یک پروژه کد آردوینو به نام «fade» ساخته‌اید. [[_email_notifications]] -===== Email Notifications +===== Email Notifications (اعلان‌های ایمیلی) -Someone comes along and makes a change to your code and sends you a Pull Request. -You should get an email notifying you about the new Pull Request and it should look something like <<_email_pr>>. +کسی می‌آید و تغییری در کد شما ایجاد می‌کند و یک Pull Request برای شما ارسال می‌کند. +شما باید ایمیلی دریافت کنید که در مورد Pull Request جدید اطلاع دهد و این ایمیل باید چیزی شبیه به <<_email_pr>> باشد. [[_email_pr]] .Email notification of a new Pull Request image::images/maint-01-email.png[Email notification of a new Pull Request] -There are a few things to notice about this email. -It will give you a small diffstat -- a list of files that have changed in the Pull Request and by how much. -It gives you a link to the Pull Request on GitHub. -It also gives you a few URLs that you can use from the command line. + چند نکته درباره این ایمیل وجود دارد که باید بدانید. +این ایمیل یک خلاصه کوچک از تغییرات (diffstat) به شما می‌دهد — فهرستی از فایل‌هایی که در درخواست Pull تغییر کرده‌اند و میزان تغییرات آن‌ها. +همچنین یک لینک به درخواست Pull در گیت‌هاب به شما ارائه می‌کند. +چند URL نیز دارد که می‌توانید از طریق خط فرمان از آن‌ها استفاده کنید. -If you notice the line that says `git pull patch-1`, this is a simple way to merge in a remote branch without having to add a remote. -We went over this quickly in <>. -If you wish, you can create and switch to a topic branch and then run this command to merge in the Pull Request changes. +اگر به خطی که نوشته `git pull patch-1` دقت کنید، این یک روش ساده برای ادغام یک شاخه از راه دور بدون نیاز به اضافه کردن remote است. +ما این موضوع را سریعاً در <> مرور کردیم. +اگر بخواهید، می‌توانید یک شاخه موضوعی (topic branch) ایجاد و به آن سوئیچ کنید و سپس این دستور را اجرا کنید تا تغییرات درخواست Pull را ادغام کنید. -The other interesting URLs are the `.diff` and `.patch` URLs, which as you may guess, provide unified diff and patch versions of the Pull Request. -You could technically merge in the Pull Request work with something like this: +URLهای جالب دیگر، URLهای `.diff` و `.patch` هستند که همان‌طور که حدس می‌زنید، نسخه‌های unified diff و patch از درخواست Pull را ارائه می‌دهند. +از نظر فنی، می‌توانید کار درخواست Pull را با چیزی شبیه به این ادغام کنید: [source,console] ---- $ curl https://github.com/tonychacon/fade/pull/1.patch | git am ---- -===== Collaborating on the Pull Request +===== Collaborating on the Pull Request (همکاری روی درخواست Pull ) -As we covered in <>, you can now have a conversation with the person who opened the Pull Request. -You can comment on specific lines of code, comment on whole commits or comment on the entire Pull Request itself, using GitHub Flavored Markdown everywhere. +همان‌طور که در <> توضیح دادیم، اکنون می‌توانید با شخصی که درخواست Pull را باز کرده است گفتگو کنید. +می‌توانید روی خطوط خاصی از کد نظر بگذارید، روی کامیت‌های کامل یا کل درخواست Pull نظر بدهید و در همه جا از Markdown با سبک GitHub استفاده کنید. -Every time someone else comments on the Pull Request you will continue to get email notifications so you know there is activity happening. -They will each have a link to the Pull Request where the activity is happening and you can also directly respond to the email to comment on the Pull Request thread. +هر بار که شخص دیگری روی درخواست Pull نظر می‌دهد، شما ایمیل اطلاع‌رسانی دریافت می‌کنید تا بدانید فعالیتی در حال انجام است. +هر ایمیل شامل لینکی به درخواست Pull است که فعالیت در آنجا اتفاق می‌افتد و همچنین می‌توانید مستقیماً به ایمیل پاسخ دهید و در همان رشته (thread) درخواست Pull نظر بگذارید. .Responses to emails are included in the thread image::images/maint-03-email-resp.png[Responses to emails are included in the thread] -Once the code is in a place you like and want to merge it in, you can either pull the code down and merge it locally, either with the `git pull ` syntax we saw earlier, or by adding the fork as a remote and fetching and merging. +وقتی کد به جایی رسید که راضی بودید و می‌خواهید آن را ادغام کنید، می‌توانید کد را دانلود کرده و محلی ادغام کنید، یا با دستور `git pull ` که قبلاً دیدیم، یا با افزودن فورک به عنوان remote و گرفتن و ادغام آن. -If the merge is trivial, you can also just hit the "`Merge`" button on the GitHub site. -This will do a "`non-fast-forward`" merge, creating a merge commit even if a fast-forward merge was possible. -This means that no matter what, every time you hit the merge button, a merge commit is created. -As you can see in <<_merge_button>>, GitHub gives you all of this information if you click the hint link. +اگر ادغام ساده باشد، می‌توانید به سادگی روی دکمه «Merge» در سایت گیت‌هاب کلیک کنید. +این کار یک ادغام «non-fast-forward» انجام می‌دهد، یعنی یک کامیت ادغام ایجاد می‌کند حتی اگر ادغام fast-forward ممکن باشد. +این یعنی هر بار که دکمه merge را می‌زنید، یک کامیت ادغام ساخته می‌شود. +همان‌طور که در <<_merge_button>> می‌بینید، گیت‌هاب همه این اطلاعات را اگر روی لینک راهنما کلیک کنید، به شما نشان می‌دهد. [[_merge_button]] .Merge button and instructions for merging a Pull Request manually image::images/maint-02-merge.png[Merge button and instructions for merging a Pull Request manually] -If you decide you don't want to merge it, you can also just close the Pull Request and the person who opened it will be notified. +اگر تصمیم گرفتید که نمی‌خواهید ادغام کنید، می‌توانید فقط درخواست Pull را ببندید و شخصی که آن را باز کرده است، مطلع خواهد شد. [[_pr_refs]] -===== Pull Request Refs +===== Pull Request Refs (ارجاعات درخواست Pull) -If you're dealing with a *lot* of Pull Requests and don't want to add a bunch of remotes or do one time pulls every time, there is a neat trick that GitHub allows you to do. -This is a bit of an advanced trick and we'll go over the details of this a bit more in <>, but it can be pretty useful. +گیت‌هاب در واقع شاخه‌های درخواست Pull را به عنوان شاخه‌های شبه (pseudo-branches) روی سرور تبلیغ می‌کند. +به طور پیش‌فرض وقتی کلون می‌کنید آن‌ها را دریافت نمی‌کنید، اما به شکلی پنهان وجود دارند و می‌توانید به راحتی به آن‌ها دسترسی پیدا کنید. -GitHub actually advertises the Pull Request branches for a repository as sort of pseudo-branches on the server. -By default you don't get them when you clone, but they are there in an obscured way and you can access them pretty easily. +برای نشان دادن این موضوع، از یک دستور سطح پایین (که اغلب به آن دستور «لوله‌کشی» یا plumbing گفته می‌شود و در <> بیشتر درباره آن می‌خوانیم) به نام `ls-remote` استفاده می‌کنیم. +این دستور معمولاً در عملیات روزمره گیت استفاده نمی‌شود اما مفید است برای اینکه به ما نشان دهد چه ارجاعاتی روی سرور وجود دارد. -To demonstrate this, we're going to use a low-level command (often referred to as a "`plumbing`" command, which we'll read about more in <>) called `ls-remote`. -This command is generally not used in day-to-day Git operations but it's useful to show us what references are present on the server. - -If we run this command against the "`blink`" repository we were using earlier, we will get a list of all the branches and tags and other references in the repository. +اگر این دستور را روی مخزن "`blink`" که قبلاً استفاده می‌کردیم اجرا کنیم، فهرستی از همه شاخه‌ها، تگ‌ها و ارجاعات دیگر در مخزن به ما می‌دهد. [source,console] ---- @@ -143,16 +140,15 @@ a5a7751a33b7e86c5e9bb07b26001bb17d775d1a refs/pull/4/head 31a45fc257e8433c8d8804e3e848cf61c9d3166c refs/pull/4/merge ---- -Of course, if you're in your repository and you run `git ls-remote origin` or whatever remote you want to check, it will show you something similar to this. +البته، اگر در مخزن خود باشید و دستور `git ls-remote origin` یا هر ریموت دیگری که می‌خواهید بررسی کنید را اجرا کنید، چیزی مشابه این مشاهده خواهید کرد. -If the repository is on GitHub and you have any Pull Requests that have been opened, you'll get these references that are prefixed with `refs/pull/`. -These are basically branches, but since they're not under `refs/heads/` you don't get them normally when you clone or fetch from the server -- the process of fetching ignores them normally. +اگر مخزن روی GitHub باشد و هر درخواست Pull (Pull Request) باز شده‌ای داشته باشید، این ارجاعات را خواهید دید که با `refs/pull/` شروع می‌شوند. این‌ها اساساً شاخه هستند، اما چون زیر `refs/heads/` نیستند، معمولاً هنگام کلون کردن یا fetch گرفتن از سرور به شما نمایش داده نمی‌شوند — فرایند fetch معمولاً آن‌ها را نادیده می‌گیرد. -There are two references per Pull Request - the one that ends in `/head` points to exactly the same commit as the last commit in the Pull Request branch. -So if someone opens a Pull Request in our repository and their branch is named `bug-fix` and it points to commit `a5a775`, then in *our* repository we will not have a `bug-fix` branch (since that's in their fork), but we _will_ have `pull//head` that points to `a5a775`. -This means that we can pretty easily pull down every Pull Request branch in one go without having to add a bunch of remotes. +برای هر درخواست Pull دو ارجاع وجود دارد — ارجاعی که به `/head` ختم می‌شود دقیقاً به همان کامیتی اشاره می‌کند که آخرین کامیت در شاخه درخواست Pull است. +پس اگر کسی در مخزن ما یک درخواست Pull باز کند و شاخه‌اش به نام `bug-fix` باشد و به کامیت `a5a775` اشاره کند، در *مخزن خودمان* شاخه‌ای به نام `bug-fix` نخواهیم داشت (چون آن در فورک آن‌ها است)، اما _داشتن_ ارجاع `pull//head` که به `a5a775` اشاره می‌کند، خواهیم داشت. +این یعنی می‌توانیم به آسانی همه شاخه‌های درخواست Pull را یکجا دریافت کنیم بدون اینکه مجبور باشیم تعداد زیادی ریموت اضافه کنیم. -Now, you could do something like fetching the reference directly. +حالا، می‌توانید کاری مانند دریافت مستقیم ارجاع را انجام دهید. [source,console] ---- @@ -161,14 +157,14 @@ From https://github.com/libgit2/libgit2 * branch refs/pull/958/head -> FETCH_HEAD ---- -This tells Git, "`Connect to the `origin` remote, and download the ref named `refs/pull/958/head`.`" -Git happily obeys, and downloads everything you need to construct that ref, and puts a pointer to the commit you want under `.git/FETCH_HEAD`. -You can follow that up with `git merge FETCH_HEAD` into a branch you want to test it in, but that merge commit message looks a bit weird. -Also, if you're reviewing a *lot* of pull requests, this gets tedious. +این به Git می‌گوید: «`به ریموت `origin` وصل شو، و ارجاع به نام `refs/pull/958/head` را دانلود کن.`» +Git با کمال میل این کار را انجام می‌دهد و همه چیز لازم برای ساختن آن ارجاع را دانلود می‌کند و اشاره‌گری به کامیتی که می‌خواهید را زیر `.git/FETCH_HEAD` قرار می‌دهد. +شما می‌توانید بعد از آن با دستور `git merge FETCH_HEAD` این را در شاخه‌ای که می‌خواهید تست کنید ادغام کنید، اما پیام کامیت ادغام کمی عجیب به نظر می‌رسد. +همچنین، اگر تعداد زیادی درخواست Pull را بررسی می‌کنید، این کار خسته‌کننده می‌شود. -There's also a way to fetch _all_ of the pull requests, and keep them up to date whenever you connect to the remote. -Open up `.git/config` in your favorite editor, and look for the `origin` remote. -It should look a bit like this: +یک روش هم برای دریافت _تمام_ درخواست‌های Pull و به‌روزرسانی آن‌ها هر بار که به ریموت وصل می‌شوید وجود دارد. +فایل `.git/config` را در ویرایشگر مورد علاقه‌تان باز کنید و دنبال ریموت `origin` بگردید. +باید چیزی شبیه به این باشد: [source,ini] ---- @@ -177,10 +173,10 @@ It should look a bit like this: fetch = +refs/heads/*:refs/remotes/origin/* ---- -That line that begins with `fetch =` is a "`refspec.`" -It's a way of mapping names on the remote with names in your local `.git` directory. -This particular one tells Git, "the things on the remote that are under `refs/heads` should go in my local repository under `refs/remotes/origin`." -You can modify this section to add another refspec: +خطی که با `fetch =` شروع می‌شود، یک "`refspec`" است. +روشی برای نگاشت نام‌ها در ریموت با نام‌ها در دایرکتوری محلی `.git` شماست. +این refspec خاص به Git می‌گوید: «مواردی که در ریموت زیر `refs/heads` هستند باید در مخزن محلی من زیر `refs/remotes/origin` ذخیره شوند.» +می‌توانید این بخش را اصلاح کنید و یک refspec دیگر اضافه کنید: [source,ini] ---- @@ -190,8 +186,8 @@ You can modify this section to add another refspec: fetch = +refs/pull/*/head:refs/remotes/origin/pr/* ---- -That last line tells Git, "`All the refs that look like `refs/pull/123/head` should be stored locally like `refs/remotes/origin/pr/123`.`" -Now, if you save that file, and do a `git fetch`: +خط آخر به Git می‌گوید: «تمام ارجاع‌هایی که شبیه `refs/pull/123/head` هستند باید به صورت محلی مانند `refs/remotes/origin/pr/123` ذخیره شوند.» +حالا اگر آن فایل را ذخیره کنید و دستور `git fetch` را اجرا کنید: [source,console] ---- @@ -203,8 +199,8 @@ $ git fetch # … ---- -Now all of the remote pull requests are represented locally with refs that act much like tracking branches; they're read-only, and they update when you do a fetch. -This makes it super easy to try the code from a pull request locally: +اکنون همه درخواست‌های Pull ریموت به صورت محلی با ارجاع‌هایی نمایش داده می‌شوند که مثل شاخه‌های پیگیری عمل می‌کنند؛ فقط خواندنی هستند و هر بار که fetch می‌کنید به‌روزرسانی می‌شوند. +این کار بسیار ساده می‌کند تا کد یک درخواست Pull را به صورت محلی تست کنید: [source,console] ---- @@ -214,85 +210,85 @@ Branch pr/2 set up to track remote branch pr/2 from origin. Switched to a new branch 'pr/2' ---- -The eagle-eyed among you would note the `head` on the end of the remote portion of the refspec. -There's also a `refs/pull/#/merge` ref on the GitHub side, which represents the commit that would result if you push the "`merge`" button on the site. -This can allow you to test the merge before even hitting the button. +کسانی که با دقت نگاه می‌کنند متوجه `head` در انتهای بخش ریموت refspec خواهند شد. +همچنین یک ارجاع `refs/pull/#/merge` در سمت GitHub وجود دارد که نشان‌دهنده کامیتی است که در صورت زدن دکمه "`merge`" در سایت حاصل می‌شود. +این امکان را فراهم می‌کند که قبل از زدن دکمه، ادغام را تست کنید. -===== Pull Requests on Pull Requests +===== Pull Requests on Pull Requests (درخواست‌های Pull روی درخواست‌های Pull) -Not only can you open Pull Requests that target the main or `master` branch, you can actually open a Pull Request targeting any branch in the network. -In fact, you can even target another Pull Request. +شما می‌توانید نه تنها درخواست‌های Pull را به شاخه‌ی اصلی یا `master` ارسال کنید، بلکه در واقع می‌توانید درخواست Pull را به هر شاخه‌ای در شبکه هدف قرار دهید. +در واقع، حتی می‌توانید یک درخواست Pull را هدف بگیرید. -If you see a Pull Request that is moving in the right direction and you have an idea for a change that depends on it or you're not sure is a good idea, or you just don't have push access to the target branch, you can open a Pull Request directly to it. +اگر درخواست Pull ای را دیدید که در مسیر درستی حرکت می‌کند و ایده‌ای برای تغییر دارید که به آن وابسته است، یا مطمئن نیستید که ایده‌ی خوبی باشد، یا دسترسی برای ارسال مستقیم به شاخه هدف را ندارید، می‌توانید مستقیماً درخواست Pull را به آن ارسال کنید. -When you go to open a Pull Request, there is a box at the top of the page that specifies which branch you're requesting to pull to and which you're requesting to pull from. -If you hit the "`Edit`" button at the right of that box you can change not only the branches but also which fork. +وقتی می‌خواهید درخواست Pull باز کنید، در بالای صفحه جعبه‌ای وجود دارد که مشخص می‌کند شما درخواست ادغام از کدام شاخه به کدام شاخه را دارید. +اگر روی دکمه‌ی "`Edit`" در سمت راست آن جعبه کلیک کنید، می‌توانید نه تنها شاخه‌ها بلکه فورک مورد نظر را نیز تغییر دهید. [[_pr_targets]] .Manually change the Pull Request target fork and branch image::images/maint-04-target.png[Manually change the Pull Request target fork and branch] -Here you can fairly easily specify to merge your new branch into another Pull Request or another fork of the project. +در اینجا می‌توانید به‌راحتی مشخص کنید که شاخه جدیدتان را به یک درخواست Pull دیگر یا فورک دیگری از پروژه ادغام کنید. -==== Mentions and Notifications +==== Mentions and Notifications (اشاره‌ها و اعلان‌ها) -GitHub also has a pretty nice notifications system built in that can come in handy when you have questions or need feedback from specific individuals or teams. +گیت‌هاب همچنین سیستم اعلان‌های بسیار خوبی دارد که وقتی سوالی دارید یا به بازخورد از افراد یا تیم‌های خاص نیاز دارید، بسیار مفید است. -In any comment you can start typing a `@` character and it will begin to autocomplete with the names and usernames of people who are collaborators or contributors in the project. +در هر کامنت می‌توانید کاراکتر `@` را تایپ کنید و گیت‌هاب شروع به تکمیل خودکار نام‌ها و نام‌کاربری افرادی می‌کند که همکار یا مشارکت‌کننده در پروژه هستند. .Start typing @ to mention someone image::images/maint-05-mentions.png[Start typing @ to mention someone] -You can also mention a user who is not in that dropdown, but often the autocompleter can make it faster. +همچنین می‌توانید کاربری را که در آن لیست نیست، به صورت دستی ذکر کنید، اما اغلب تکمیل خودکار کار را سریع‌تر می‌کند. -Once you post a comment with a user mention, that user will be notified. -This means that this can be a really effective way of pulling people into conversations rather than making them poll. -Very often in Pull Requests on GitHub people will pull in other people on their teams or in their company to review an Issue or Pull Request. +پس از ارسال کامنت با ذکر کاربر، آن کاربر مطلع خواهد شد. +این یعنی این روش می‌تواند بسیار مؤثر باشد برای جلب توجه افراد به مکالمات، به جای اینکه آن‌ها را مجبور به رصد کردن کنید. +اغلب در درخواست‌های Pull در گیت‌هاب، افراد دیگر اعضای تیم یا شرکت خود را برای بررسی یک Issue یا Pull Request وارد گفتگو می‌کنند. -If someone gets mentioned on a Pull Request or Issue, they will be "`subscribed`" to it and will continue getting notifications any time some activity occurs on it. -You will also be subscribed to something if you opened it, if you're watching the repository or if you comment on something. -If you no longer wish to receive notifications, there is an "`Unsubscribe`" button on the page you can click to stop receiving updates on it. +اگر کسی در یک درخواست Pull یا Issue ذکر شود، به آن مورد "`subscribed`" می‌شود و هر بار که فعالیتی روی آن انجام شود، اعلان دریافت خواهد کرد. +شما هم به مواردی که باز کرده‌اید، یا مخزن را دنبال می‌کنید، یا در آن نظر داده‌اید، به‌طور خودکار عضو می‌شوید. +اگر دیگر نمی‌خواهید اعلان دریافت کنید، دکمه‌ی "`Unsubscribe`" در صفحه وجود دارد که می‌توانید با کلیک روی آن، دریافت به‌روزرسانی‌ها را متوقف کنید. .Unsubscribe from an Issue or Pull Request image::images/maint-06-unsubscribe.png[Unsubscribe from an Issue or Pull Request] -===== The Notifications Page +===== The Notifications Page (صفحه اعلان‌ها) -When we mention "`notifications`" here with respect to GitHub, we mean a specific way that GitHub tries to get in touch with you when events happen and there are a few different ways you can configure them. -If you go to the "`Notification center`" tab from the settings page, you can see some of the options you have. +وقتی درباره‌ی "`اعلان‌ها`" در گیت‌هاب صحبت می‌کنیم، منظورمان روشی خاص است که گیت‌هاب برای اطلاع‌رسانی به شما هنگام رخ دادن رویدادها دارد و شما می‌توانید آن‌ها را به چند روش مختلف تنظیم کنید. +اگر به تب "`Notification center`" در صفحه تنظیمات بروید، می‌توانید برخی از گزینه‌های موجود را ببینید. .Notification center options image::images/maint-07-notifications.png[Notification center options] -The two choices are to get notifications over "`Email`" and over "`Web`" and you can choose either, neither or both for when you actively participate in things and for activity on repositories you are watching. +دو گزینه اصلی دریافت اعلان‌ها از طریق "`ایمیل`" و "`وب`" هستند و می‌توانید برای زمانی که در فعالیت‌ها شرکت می‌کنید و فعالیت روی مخازنی که دنبال می‌کنید، هر دو، هیچ‌کدام یا یکی‌شان را انتخاب کنید. -====== Web Notifications +====== Web Notifications (اعلان‌های وب) -Web notifications only exist on GitHub and you can only check them on GitHub. -If you have this option selected in your preferences and a notification is triggered for you, you will see a small blue dot over your notifications icon at the top of your screen as seen in <<_not_center>>. +اعلان‌های وب فقط در گیت‌هاب وجود دارند و فقط می‌توانید آن‌ها را در گیت‌هاب مشاهده کنید. +اگر این گزینه را در تنظیمات خود فعال کرده باشید و اعلان جدیدی برای شما ایجاد شود، یک نقطه‌ی کوچک آبی روی آیکون اعلان‌ها در بالای صفحه ظاهر می‌شود، همان‌طور که در <<_not_center>> دیده می‌شود. [[_not_center]] .Notification center image::images/maint-08-notifications-page.png[Notification center] -If you click on that, you will see a list of all the items you have been notified about, grouped by project. -You can filter to the notifications of a specific project by clicking on its name in the left hand sidebar. -You can also acknowledge the notification by clicking the checkmark icon next to any notification, or acknowledge _all_ of the notifications in a project by clicking the checkmark at the top of the group. -There is also a mute button next to each checkmark that you can click to not receive any further notifications on that item. +با کلیک روی آن، فهرستی از تمام مواردی که اعلان دریافت کرده‌اید، به تفکیک پروژه نمایش داده می‌شود. +می‌توانید با کلیک روی نام پروژه در نوار کناری سمت چپ، اعلان‌های یک پروژه خاص را فیلتر کنید. +همچنین می‌توانید با کلیک روی آیکون تیک کنار هر اعلان، آن را تأیید کنید، یا تمام اعلان‌های یک پروژه را با کلیک روی تیک بالای گروه تأیید نمایید. +دکمه‌ی سایلنت (بی‌صدا) نیز کنار هر تیک وجود دارد که اگر کلیک کنید، دیگر اعلان‌های آن مورد خاص را دریافت نخواهید کرد. -All of these tools are very useful for handling large numbers of notifications. -Many GitHub power users will simply turn off email notifications entirely and manage all of their notifications through this screen. +تمام این ابزارها برای مدیریت تعداد زیادی اعلان بسیار کاربردی هستند. +بسیاری از کاربران حرفه‌ای گیت‌هاب، اعلان‌های ایمیل را کاملاً غیرفعال می‌کنند و تمام اعلان‌های خود را از طریق این صفحه مدیریت می‌کنند. -====== Email Notifications +====== Email Notifications (اعلان‌های ایمیل) -Email notifications are the other way you can handle notifications through GitHub. -If you have this turned on you will get emails for each notification. -We saw examples of this in <<_email_notification>> and <<_email_pr>>. -The emails will also be threaded properly, which is nice if you're using a threading email client. +اعلان‌های ایمیل روش دیگری برای دریافت اعلان‌ها از طریق گیت‌هاب هستند. +اگر این گزینه را فعال کنید، برای هر اعلان یک ایمیل دریافت خواهید کرد. +ما نمونه‌هایی از این اعلان‌ها را در <<_email_notification>> و <<_email_pr>> دیدیم. +ایمیل‌ها همچنین به‌صورت موضوع‌بندی شده (Threaded) ارسال می‌شوند، که اگر از کلاینت ایمیل با پشتیبانی از این قابلیت استفاده کنید، بسیار مناسب است. -There is also a fair amount of metadata embedded in the headers of the emails that GitHub sends you, which can be really helpful for setting up custom filters and rules. +علاوه بر این، مقدار قابل توجهی از فراداده (metadata) در هدرهای ایمیل‌هایی که گیت‌هاب ارسال می‌کند وجود دارد، که برای تنظیم فیلترها و قوانین سفارشی بسیار مفید است. -For instance, if we look at the actual email headers sent to Tony in the email shown in <<_email_pr>>, we will see the following among the information sent: +برای مثال، اگر به هدرهای ایمیل واقعی که به تونی در ایمیل نشان داده‌شده در <<_email_pr>> ارسال شده نگاه کنیم، اطلاعات زیر در میان داده‌های ارسالی دیده می‌شود: [source,mbox] ---- @@ -307,71 +303,71 @@ List-Unsubscribe: ,... X-GitHub-Recipient-Address: tchacon@example.com ---- -There are a couple of interesting things here. -If you want to highlight or re-route emails to this particular project or even Pull Request, the information in `Message-ID` gives you all the data in `///` format. -If this was an issue, for example, the `` field would have been "`issues`" rather than "`pull`". + چند نکته جالب در اینجا وجود دارد. +اگر بخواهید ایمیل‌ها را به این پروژه خاص یا حتی درخواست پول (Pull Request) مشخصی هدایت یا برجسته کنید، اطلاعات موجود در `Message-ID` تمام داده‌ها را به فرمت `///` در اختیار شما قرار می‌دهد. +برای مثال، اگر این یک مسئله (Issue) بود، فیلد `` به جای "`pull`" مقدار "`issues`" را داشت. -The `List-Post` and `List-Unsubscribe` fields mean that if you have a mail client that understands those, you can easily post to the list or "`Unsubscribe`" from the thread. -That would be essentially the same as clicking the "`mute`" button on the web version of the notification or "`Unsubscribe`" on the Issue or Pull Request page itself. +فیلدهای `List-Post` و `List-Unsubscribe` به این معنا هستند که اگر کلاینت ایمیل شما این قابلیت‌ها را پشتیبانی کند، به راحتی می‌توانید به لیست ایمیل ارسال کنید یا از دریافت این موضوع خاص لغو اشتراک کنید. +این عملکرد عملاً معادل کلیک روی دکمه "`mute`" در نسخه وب اعلان یا گزینه "`Unsubscribe`" در صفحه Issue یا Pull Request است. -It's also worth noting that if you have both email and web notifications enabled and you read the email version of the notification, the web version will be marked as read as well if you have images allowed in your mail client. +همچنین شایان ذکر است که اگر اعلان‌های ایمیل و وب هر دو فعال باشند و شما نسخه ایمیلی اعلان را بخوانید، نسخه وب نیز به عنوان خوانده شده علامت‌گذاری می‌شود، البته به شرطی که در کلاینت ایمیل خود اجازه نمایش تصاویر را داده باشید. -==== Special Files +==== Special Files (فایل‌های ویژه) -There are a couple of special files that GitHub will notice if they are present in your repository. +چند فایل ویژه وجود دارند که اگر در مخزن شما باشند، گیت‌هاب آن‌ها را تشخیص می‌دهد. ==== README -The first is the `README` file, which can be of nearly any format that GitHub recognizes as prose. -For example, it could be `README`, `README.md`, `README.asciidoc`, etc. -If GitHub sees a `README` file in your source, it will render it on the landing page of the project. +اولین فایل `README` است که می‌تواند تقریباً هر فرمتی داشته باشد که گیت‌هاب به عنوان متن قابل خواندن بشناسد. +مثلاً می‌تواند `README`، `README.md`، `README.asciidoc` و غیره باشد. +اگر گیت‌هاب فایل `README` را در سورس شما ببیند، آن را در صفحه اصلی پروژه نمایش می‌دهد. -Many teams use this file to hold all the relevant project information for someone who might be new to the repository or project. -This generally includes things like: +بسیاری از تیم‌ها از این فایل استفاده می‌کنند تا تمام اطلاعات مرتبط با پروژه را برای کسی که تازه با مخزن یا پروژه آشنا شده، ارائه دهند. +معمولاً این اطلاعات شامل موارد زیر است: -* What the project is for -* How to configure and install it -* An example of how to use it or get it running -* The license that the project is offered under -* How to contribute to it +* هدف پروژه چیست +* چگونه آن را پیکربندی و نصب کنیم +* نمونه‌ای از نحوه استفاده یا اجرای آن +* مجوزی که پروژه تحت آن عرضه شده است +* نحوه مشارکت در پروژه -Since GitHub will render this file, you can embed images or links in it for added ease of understanding. +از آنجا که گیت‌هاب این فایل را نمایش می‌دهد، می‌توانید تصاویر یا لینک‌هایی در آن بگنجانید تا فهم آن آسان‌تر شود. -==== CONTRIBUTING +==== CONTRIBUTING (مشارکت) -The other special file that GitHub recognizes is the `CONTRIBUTING` file. -If you have a file named `CONTRIBUTING` with any file extension, GitHub will show <<_contrib_file>> when anyone starts opening a Pull Request. +فایل ویژه دیگری که گیت‌هاب آن را تشخیص می‌دهد، فایل `CONTRIBUTING` است. +اگر فایل `CONTRIBUTING` با هر پسوندی داشته باشید، گیت‌هاب زمانی که کسی درخواست پول جدیدی باز می‌کند، <<_contrib_file>> را نمایش می‌دهد. [[_contrib_file]] .Opening a Pull Request when a CONTRIBUTING file exists image::images/maint-09-contrib.png[Opening a Pull Request when a CONTRIBUTING file exists] -The idea here is that you can specify specific things you want or don't want in a Pull Request sent to your project. -This way people may actually read the guidelines before opening the Pull Request. +ایده این است که شما می‌توانید قواعد خاصی که می‌خواهید یا نمی‌خواهید در یک Pull Request به پروژه شما ارسال شود را مشخص کنید. +به این ترتیب، افراد احتمالاً قبل از باز کردن درخواست پول، دستورالعمل‌ها را مطالعه خواهند کرد. -==== Project Administration +==== Project Administration (مدیریت پروژه) -Generally there are not a lot of administrative things you can do with a single project, but there are a couple of items that might be of interest. +به طور کلی امکانات مدیریتی زیادی برای یک پروژه واحد وجود ندارد، اما چند مورد ممکن است برای شما جالب باشد. -===== Changing the Default Branch +===== Changing the Default Branch (تغییر شاخه پیش‌فرض) -If you are using a branch other than "`master`" as your default branch that you want people to open Pull Requests on or see by default, you can change that in your repository's settings page under the "`Options`" tab. +اگر شاخه‌ای غیر از "`master`" را به عنوان شاخه پیش‌فرض که می‌خواهید افراد روی آن درخواست پول باز کنند یا به صورت پیش‌فرض ببینند، استفاده می‌کنید، می‌توانید این تنظیم را در صفحه تنظیمات مخزن خود زیر تب "`Options`" تغییر دهید. [[_default_branch]] .Change the default branch for a project image::images/maint-10-default-branch.png[Change the default branch for a project] -Simply change the default branch in the dropdown and that will be the default for all major operations from then on, including which branch is checked out by default when someone clones the repository. +به سادگی شاخه پیش‌فرض را در منوی کشویی تغییر دهید و از آن پس تمام عملیات اصلی با آن شاخه به عنوان پیش‌فرض انجام خواهد شد، از جمله شاخه‌ای که هنگام کلون کردن مخزن به صورت پیش‌فرض بررسی می‌شود. -===== Transferring a Project +===== Transferring a Project (انتقال یک پروژه) -If you would like to transfer a project to another user or an organization in GitHub, there is a "`Transfer ownership`" option at the bottom of the same "`Options`" tab of your repository settings page that allows you to do this. +اگر بخواهید پروژه‌ای را به کاربر یا سازمان دیگری در گیت‌هاب منتقل کنید، گزینه‌ای با عنوان "`Transfer ownership`" در پایین همان تب "`Options`" در صفحه تنظیمات مخزن شما وجود دارد که این امکان را فراهم می‌کند. [[_transfer_project]] .Transfer a project to another GitHub user or Organization image::images/maint-11-transfer.png[Transfer a project to another GitHub user or Organization] -This is helpful if you are abandoning a project and someone wants to take it over, or if your project is getting bigger and want to move it into an organization. +این قابلیت زمانی مفید است که شما پروژه را رها می‌کنید و کسی می‌خواهد آن را به عهده بگیرد، یا پروژه شما بزرگ‌تر شده و می‌خواهید آن را به یک سازمان منتقل کنید. -Not only does this move the repository along with all its watchers and stars to another place, it also sets up a redirect from your URL to the new place. -It will also redirect clones and fetches from Git, not just web requests. +این کار نه تنها مخزن را همراه با تمام دنبال‌کنندگان و ستاره‌های آن به مکان جدید منتقل می‌کند، بلکه یک ریدایرکت از URL قبلی شما به مکان جدید نیز ایجاد می‌کند. +همچنین این ریدایرکت شامل کلون‌ها و دریافت‌ها از طریق گیت می‌شود، نه فقط درخواست‌های وب. \ No newline at end of file From 34cd07c615141463be6958ee50678714d1af54d1 Mon Sep 17 00:00:00 2001 From: YasinDehfuli Date: Tue, 19 Aug 2025 22:56:59 +0330 Subject: [PATCH 480/549] translate(06-github): translated managing organization to persian --- .../sections/4-managing-organization.asc | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index cdb2447a..3c65340a 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -1,72 +1,72 @@ [[ch06-github_orgs]] -=== Managing an organization +=== Managing an organization (مدیریت یک سازمان) (((GitHub, organizations))) -In addition to single-user accounts, GitHub has what are called Organizations. -Like personal accounts, Organizational accounts have a namespace where all their projects exist, but many other things are different. -These accounts represent a group of people with shared ownership of projects, and there are many tools to manage subgroups of those people. -Normally these accounts are used for Open Source groups (such as "`perl`" or "`rails`") or companies (such as "`google`" or "`twitter`"). +علاوه بر حساب‌های کاربری تک‌نفره، گیت‌هاب چیزی به نام سازمان‌ها دارد. +مانند حساب‌های شخصی، حساب‌های سازمانی یک فضای نام دارند که همه پروژه‌هایشان در آن قرار دارد، اما بسیاری از جنبه‌های دیگر متفاوت است. +این حساب‌ها نماینده گروهی از افراد با مالکیت مشترک پروژه‌ها هستند و ابزارهای زیادی برای مدیریت زیرگروه‌های این افراد وجود دارد. +معمولاً این حساب‌ها برای گروه‌های متن‌باز (مانند "`perl`" یا "`rails`") یا شرکت‌ها (مانند "`google`" یا "`twitter`") استفاده می‌شوند. -==== Organization Basics +==== اصول اولیه سازمان -An organization is pretty easy to create; just click on the "`+`" icon at the top-right of any GitHub page, and select "`New organization`" from the menu. +ایجاد یک سازمان بسیار آسان است؛ کافی است روی آیکون "`+`" در بالا و سمت راست هر صفحه گیت‌هاب کلیک کنید و از منو گزینه "`New organization`" را انتخاب کنید. .The "`New organization`" menu item image::images/neworg.png[The “New organization” menu item] -First you'll need to name your organization and provide an email address for a main point of contact for the group. -Then you can invite other users to be co-owners of the account if you want to. +ابتدا باید نام سازمان خود را انتخاب کنید و یک آدرس ایمیل برای نقطه تماس اصلی گروه وارد نمایید. +سپس می‌توانید در صورت تمایل دیگر کاربران را به عنوان هم‌مالک حساب دعوت کنید. -Follow these steps and you'll soon be the owner of a brand-new organization. -Like personal accounts, organizations are free if everything you plan to store there will be open source. +با دنبال کردن این مراحل به زودی مالک یک سازمان کاملاً جدید خواهید بود. +مانند حساب‌های شخصی، سازمان‌ها رایگان هستند اگر همه چیزهایی که قصد دارید در آن‌ها نگهداری کنید متن‌باز باشند. -As an owner in an organization, when you fork a repository, you'll have the choice of forking it to your organization's namespace. -When you create new repositories you can create them either under your personal account or under any of the organizations that you are an owner in. -You also automatically "`watch`" any new repository created under these organizations. +به عنوان مالک یک سازمان، وقتی مخزنی را فورک می‌کنید، می‌توانید انتخاب کنید که آن را به فضای نام سازمان خود فورک کنید. +وقتی مخازن جدید ایجاد می‌کنید، می‌توانید آن‌ها را یا تحت حساب شخصی خود یا تحت هر یک از سازمان‌هایی که مالک آن هستید بسازید. +همچنین به طور خودکار هر مخزن جدیدی که تحت این سازمان‌ها ایجاد شود را "`watch`" می‌کنید. -Just like in <<_personal_avatar>>, you can upload an avatar for your organization to personalize it a bit. -Also just like personal accounts, you have a landing page for the organization that lists all of your repositories and can be viewed by other people. +دقیقاً مانند <<_personal_avatar>>، می‌توانید یک آواتار برای سازمان خود آپلود کنید تا کمی آن را شخصی‌سازی کنید. +همچنین مانند حساب‌های شخصی، یک صفحه فرود برای سازمان دارید که تمام مخازن شما را فهرست می‌کند و دیگران می‌توانند آن را مشاهده کنند. -Now let's cover some of the things that are a bit different with an organizational account. +حال بیایید برخی از ویژگی‌هایی که در حساب سازمانی کمی متفاوت هستند را بررسی کنیم. -==== Teams +==== Teams (تیم ها) -Organizations are associated with individual people by way of teams, which are simply a grouping of individual user accounts and repositories within the organization and what kind of access those people have in those repositories. +سازمان‌ها از طریق تیم‌ها با افراد مرتبط می‌شوند، که در واقع گروه‌بندی حساب‌های کاربری فردی و مخازن درون سازمان و نوع دسترسی آن افراد به آن مخازن است. -For example, say your company has three repositories: `frontend`, `backend`, and `deployscripts`. -You'd want your HTML/CSS/JavaScript developers to have access to `frontend` and maybe `backend`, and your Operations people to have access to `backend` and `deployscripts`. -Teams make this easy, without having to manage the collaborators for every individual repository. +برای مثال، فرض کنید شرکت شما سه مخزن دارد: `frontend`، `backend` و `deployscripts`. +شما می‌خواهید توسعه‌دهندگان HTML/CSS/JavaScript به `frontend` و شاید `backend` دسترسی داشته باشند، و تیم عملیات به `backend` و `deployscripts` دسترسی داشته باشند. +تیم‌ها این کار را ساده می‌کنند، بدون اینکه مجبور باشید مشارکت‌کنندگان هر مخزن را به صورت جداگانه مدیریت کنید. -The Organization page shows you a simple dashboard of all the repositories, users and teams that are under this organization. +صفحه سازمان یک داشبورد ساده از تمام مخازن، کاربران و تیم‌هایی که زیر این سازمان هستند را به شما نشان می‌دهد. [[_org_page]] .The Organization page image::images/orgs-01-page.png[The Organization page] -To manage your Teams, you can click on the Teams sidebar on the right hand side of the page in <<_org_page>>. -This will bring you to a page you can use to add members to the team, add repositories to the team or manage the settings and access control levels for the team. -Each team can have read only, read/write or administrative access to the repositories. -You can change that level by clicking the "`Settings`" button in <<_team_page>>. +برای مدیریت تیم‌های خود، می‌توانید در صفحه <<_org_page>> روی نوار کناری تیم‌ها در سمت راست صفحه کلیک کنید. +این شما را به صفحه‌ای می‌برد که می‌توانید اعضا را به تیم اضافه کنید، مخازن را به تیم اضافه کنید یا تنظیمات و سطوح دسترسی تیم را مدیریت کنید. +هر تیم می‌تواند دسترسی فقط خواندنی، خواندن/نوشتن یا دسترسی مدیریتی به مخازن داشته باشد. +می‌توانید این سطح را با کلیک روی دکمه "`Settings`" در <<_team_page>> تغییر دهید. [[_team_page]] .The Team page image::images/orgs-02-teams.png[The Team page] -When you invite someone to a team, they will get an email letting them know they've been invited. +وقتی کسی را به تیم دعوت می‌کنید، ایمیلی دریافت می‌کند که اطلاع می‌دهد دعوت شده است. -Additionally, team `@mentions` (such as `@acmecorp/frontend`) work much the same as they do with individual users, except that *all* members of the team are then subscribed to the thread. -This is useful if you want the attention from someone on a team, but you don't know exactly who to ask. +علاوه بر این، اشاره به تیم‌ها با `@mention` (مانند `@acmecorp/frontend`) تقریباً همانند اشاره به کاربران فردی عمل می‌کند، با این تفاوت که *تمام* اعضای تیم در آن بحث عضو می‌شوند. +این ویژگی زمانی مفید است که می‌خواهید توجه کسی از تیم را جلب کنید ولی دقیقاً نمی‌دانید از چه کسی باید سؤال کنید. -A user can belong to any number of teams, so don't limit yourself to only access-control teams. -Special-interest teams like `ux`, `css`, or `refactoring` are useful for certain kinds of questions, and others like `legal` and `colorblind` for an entirely different kind. +یک کاربر می‌تواند عضو هر تعداد تیم باشد، پس خود را محدود به تیم‌های صرفاً کنترل دسترسی نکنید. +تیم‌های علاقه‌مند خاص مانند `ux`، `css` یا `refactoring` برای نوع خاصی از سوالات مفید هستند و تیم‌هایی مانند `legal` و `colorblind` برای موضوعات کاملاً متفاوت کاربرد دارند. -==== Audit Log +==== Audit Log (گزارش بازرسی) -Organizations also give owners access to all the information about what went on under the organization. -You can go to the 'Audit Log' tab and see what events have happened at an organization level, who did them and where in the world they were done. +سازمان‌ها همچنین به مالکین دسترسی به تمام اطلاعات مربوط به اتفاقاتی که در سازمان رخ داده را می‌دهند. +می‌توانید به تب 'Audit Log' بروید و ببینید چه رویدادهایی در سطح سازمان اتفاق افتاده، چه کسی آن‌ها را انجام داده و در کجا در جهان انجام شده‌اند. [[_the_audit_log]] .The Audit log image::images/orgs-03-audit.png[The Audit log] -You can also filter down to specific types of events, specific places or specific people. +همچنین می‌توانید بر اساس نوع خاصی از رویدادها، مکان‌های خاص یا افراد خاص فیلتر کنید. \ No newline at end of file From 9b9f02b3f365e0cbdedd8687692124aae3da4c57 Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 20 Aug 2025 14:26:59 +0330 Subject: [PATCH 481/549] translate(06-github): translated scripting to persian --- .idea/workspace.xml | 19 ++- book/06-github/sections/5-scripting.asc | 178 ++++++++++++------------ 2 files changed, 107 insertions(+), 90 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3cd95ed7..dc64c49e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,10 @@ - + + + + @@ -39,6 +42,17 @@ + + + + @@ -132,6 +146,9 @@ + + + diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index c755afa1..011a8980 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -1,63 +1,63 @@ -=== Scripting GitHub +=== Scripting GitHub (اسکریپتنویسی در گیتهاب) -So now we've covered all of the major features and workflows of GitHub, but any large group or project will have customizations they may want to make or external services they may want to integrate. +حالا که همهٔ ویژگیها و روندهای اصلی گیتهاب را بررسی کردیم، هر گروه یا پروژهٔ بزرگی ممکن است بخواهد تغییرات سفارشی یا سرویسهای خارجی خاصی را به آن اضافه کند. -Luckily for us, GitHub is really quite hackable in many ways. -In this section we'll cover how to use the GitHub hooks system and its API to make GitHub work how we want it to. +خوشبختانه، گیتهاب به طرق مختلف بسیار قابل تنظیم است. +در این بخش، نحوهٔ استفاده از سیستم هوکهای گیتهاب و API آن را بررسی میکنیم تا گیتهاب را مطابق خواستههایمان به کار بگیریم. -==== Services and Hooks +==== Services and Hooks (سرویسها و هوکها) -The Hooks and Services section of GitHub repository administration is the easiest way to have GitHub interact with external systems. +بخش هوکها و سرویسها در مدیریت مخزن گیتهاب سادهترین راه برای تعامل گیتهاب با سیستمهای خارجی است. -===== Services +===== Services (سرویسها) -First we'll take a look at Services. -Both the Hooks and Services integrations can be found in the Settings section of your repository, where we previously looked at adding Collaborators and changing the default branch of your project. -Under the "`Webhooks and Services`" tab you will see something like <<_services_hooks>>. +ابتدا نگاهی به سرویسها میاندازیم. +هر دو نوع ادغام هوکها و سرویسها را میتوانید در بخش تنظیمات مخزن خود پیدا کنید؛ جایی که قبلاً افزودن همکاران و تغییر شاخه پیشفرض پروژه را بررسی کردیم. +در تب «Webhooks and Services» چیزی شبیه <<_services_hooks>> مشاهده خواهید کرد. [[_services_hooks]] .Services and Hooks configuration section image::images/scripting-01-services.png[Services and Hooks configuration section] -There are dozens of services you can choose from, most of them integrations into other commercial and open source systems. -Most of them are for Continuous Integration services, bug and issue trackers, chat room systems and documentation systems. -We'll walk through setting up a very simple one, the Email hook. -If you choose "`email`" from the "`Add Service`" dropdown, you'll get a configuration screen like <<_service_config>>. +دهها سرویس مختلف برای انتخاب وجود دارد که بیشتر آنها ادغام با سیستمهای تجاری و متنباز دیگر هستند. +اکثر آنها برای خدمات یکپارچهسازی مداوم، ردیابهای اشکال و مسائل، سیستمهای چت گروهی و مستندسازی کاربرد دارند. +ما با راهاندازی یک سرویس بسیار ساده، یعنی هوک ایمیل، پیش میرویم. +اگر از منوی کشویی "`Add Service`" گزینه "`email`" را انتخاب کنید، صفحه تنظیمات مانند <<_service_config>> ظاهر میشود. [[_service_config]] .Email service configuration image::images/scripting-02-email-service.png[Email service configuration] -In this case, if we hit the "`Add service`" button, the email address we specified will get an email every time someone pushes to the repository. -Services can listen for lots of different types of events, but most only listen for push events and then do something with that data. +در این حالت، اگر روی دکمه «Add service» کلیک کنیم، آدرس ایمیلی که مشخص کردهایم هر بار که کسی به مخزن پوش کند، ایمیلی دریافت خواهد کرد. +سرویسها میتوانند به انواع مختلفی از رویدادها گوش دهند، اما بیشترشان فقط به رویدادهای پوش حساساند و سپس کاری با آن دادهها انجام میدهند. -If there is a system you are using that you would like to integrate with GitHub, you should check here to see if there is an existing service integration available. -For example, if you're using Jenkins to run tests on your codebase, you can enable the Jenkins builtin service integration to kick off a test run every time someone pushes to your repository. +اگر سیستمی دارید که میخواهید با گیتهاب ادغام کنید، ابتدا اینجا را بررسی کنید تا ببینید آیا ادغام سرویس موجود هست یا نه. +برای مثال، اگر از Jenkins برای اجرای تستهای کد خود استفاده میکنید، میتوانید سرویس داخلی Jenkins را فعال کنید تا هر بار که کسی به مخزن شما پوش میکند، یک اجرای تست شروع شود. -===== Hooks +===== Hooks (هوکها) -If you need something more specific or you want to integrate with a service or site that is not included in this list, you can instead use the more generic hooks system. -GitHub repository hooks are pretty simple. -You specify a URL and GitHub will post an HTTP payload to that URL on any event you want. +اگر به چیزی خاصتر نیاز دارید یا میخواهید با سرویسی یا سایتی که در این فهرست نیست ادغام کنید، میتوانید از سیستم عمومیتر هوکها استفاده کنید. +هوکهای مخزن گیتهاب بسیار سادهاند. +شما یک URL مشخص میکنید و گیتهاب در هر رویدادی که بخواهید، یک بارگذاری HTTP به آن URL ارسال میکند. -Generally the way this works is you can setup a small web service to listen for a GitHub hook payload and then do something with the data when it is received. +معمولاً این کار به این شکل انجام میشود که یک سرویس وب کوچک راهاندازی میکنید تا به بارگذاری هوک گیتهاب گوش دهد و سپس وقتی داده دریافت شد، کاری با آن انجام دهد. -To enable a hook, you click the "`Add webhook`" button in <<_services_hooks>>. -This will bring you to a page that looks like <<_web_hook>>. +برای فعالسازی یک هوک، روی دکمه "`Add webhook`" در <<_services_hooks>> کلیک کنید. +این شما را به صفحهای مانند <<_web_hook>> میبرد. [[_web_hook]] .Web hook configuration image::images/scripting-03-webhook.png[Web hook configuration] -The configuration for a web hook is pretty simple. -In most cases you simply enter a URL and a secret key and hit "`Add webhook`". -There are a few options for which events you want GitHub to send you a payload for -- the default is to only get a payload for the `push` event, when someone pushes new code to any branch of your repository. +تنظیمات یک وب هوک بسیار ساده است. +معمولاً کافی است یک URL و کلید مخفی وارد کنید و روی "`Add webhook`" کلیک کنید. +چند گزینه برای انتخاب رویدادهایی که میخواهید گیتهاب برایشان بارگذاری ارسال کند وجود دارد — پیشفرض این است که فقط بارگذاری برای رویداد `push` دریافت کنید، یعنی وقتی کسی کد جدیدی به هر شاخهای از مخزن شما پوش میکند. -Let's see a small example of a web service you may set up to handle a web hook. -We'll use the Ruby web framework Sinatra since it's fairly concise and you should be able to easily see what we're doing. +بیایید یک مثال کوچک از سرویس وبی که ممکن است برای مدیریت یک وب هوک راهاندازی کنید ببینیم. +ما از فریمورک وب Ruby به نام Sinatra استفاده میکنیم چون بسیار مختصر است و به راحتی میتوانید کاری که انجام میدهیم را ببینید. -Let's say we want to get an email if a specific person pushes to a specific branch of our project modifying a specific file. -We could fairly easily do that with code like this: +فرض کنیم میخواهیم وقتی شخص خاصی به شاخه خاصی از پروژه ما پوش میکند و یک فایل خاص را تغییر میدهد، ایمیلی دریافت کنیم. +میتوانیم این کار را به سادگی با کدی مانند این انجام دهیم: [source,ruby] ---- @@ -93,37 +93,37 @@ post '/payload' do end ---- -Here we're taking the JSON payload that GitHub delivers us and looking up who pushed it, what branch they pushed to and what files were touched in all the commits that were pushed. -Then we check that against our criteria and send an email if it matches. +اینجا، ما بارگذاری JSON را که گیتهاب ارسال میکند دریافت میکنیم و بررسی میکنیم چه کسی پوش کرده، به کدام شاخه پوش شده و چه فایلهایی در همهٔ کامیتهای پوش شده تغییر کردهاند. +سپس آن را با معیارهای خود مقایسه میکنیم و اگر تطابق داشت، ایمیل ارسال میکنیم. -In order to develop and test something like this, you have a nice developer console in the same screen where you set the hook up. -You can see the last few deliveries that GitHub has tried to make for that webhook. -For each hook you can dig down into when it was delivered, if it was successful and the body and headers for both the request and the response. -This makes it incredibly easy to test and debug your hooks. +برای توسعه و آزمایش چنین چیزی، یک کنسول توسعهدهندهٔ خوب در همان صفحه راهاندازی هوک دارید. +میتوانید آخرین چند بارگذاری که گیتهاب سعی کرده به آن هوک ارسال کند را ببینید. +برای هر هوک میتوانید جزئیات زمان ارسال، موفقیتآمیز بودن، بدنه و هدرهای درخواست و پاسخ را بررسی کنید. +این باعث میشود تست و اشکالزدایی هوکها بسیار آسان شود. [[_web_hook_debug]] .Web hook debugging information image::images/scripting-04-webhook-debug.png[Web hook debugging information] -The other great feature of this is that you can redeliver any of the payloads to test your service easily. +ویژگی عالی دیگر این است که میتوانید هر یک از بارگذاریها را دوباره ارسال کنید تا سرویس خود را به راحتی آزمایش کنید. -For more information on how to write webhooks and all the different event types you can listen for, go to the GitHub Developer documentation at https://docs.github.com/en/webhooks-and-events/webhooks/about-webhooks[^]. +برای اطلاعات بیشتر دربارهٔ نحوهٔ نوشتن وب هوکها و انواع مختلف رویدادهایی که میتوانید به آنها گوش دهید، به مستندات توسعهدهندگان گیتهاب در https://docs.github.com/en/webhooks-and-events/webhooks/about-webhooks[^] مراجعه کنید. -==== The GitHub API +==== The GitHub API (API گیتهاب) (((GitHub, API))) -Services and hooks give you a way to receive push notifications about events that happen on your repositories, but what if you need more information about these events? -What if you need to automate something like adding collaborators or labeling issues? +سرویسها و هوکها به شما این امکان را میدهند که اعلانهایی دربارهٔ رویدادهای رخداده در مخازن خود دریافت کنید، اما اگر نیاز به اطلاعات بیشتری دربارهٔ این رویدادها داشته باشید چه؟ +اگر بخواهید کارهایی مانند افزودن همکار یا برچسبگذاری مسائل را به صورت خودکار انجام دهید چه؟ -This is where the GitHub API comes in handy. -GitHub has tons of API endpoints for doing nearly anything you can do on the website in an automated fashion. -In this section we'll learn how to authenticate and connect to the API, how to comment on an issue and how to change the status of a Pull Request through the API. +در اینجا API گیتهاب به کمک شما میآید. +گیتهاب تعداد زیادی نقطهٔ پایانی (endpoint) API دارد که تقریباً هر کاری را که میتوانید روی وبسایت انجام دهید به صورت خودکار امکانپذیر میکند. +در این بخش یاد میگیریم چگونه احراز هویت کنیم و به API متصل شویم، چگونه روی یک مسئله نظر بگذاریم و چگونه وضعیت یک Pull Request را از طریق API تغییر دهیم. -==== Basic Usage +==== Basic Usage (استفادهٔ پایه) -The most basic thing you can do is a simple GET request on an endpoint that doesn't require authentication. -This could be a user or read-only information on an open source project. -For example, if we want to know more about a user named "`schacon`", we can run something like this: +سادهترین کاری که میتوانید انجام دهید، درخواست GET ساده به نقطه پایانی است که نیاز به احراز هویت ندارد. +این میتواند اطلاعات یک کاربر یا دادههای فقط خواندنی دربارهٔ یک پروژه متنباز باشد. +برای مثال، اگر بخواهیم دربارهٔ کاربری به نام "`schacon`" اطلاعات بیشتری بدانیم، میتوانیم چیزی شبیه این اجرا کنیم: [source,javascript] ---- @@ -141,8 +141,8 @@ $ curl https://api.github.com/users/schacon } ---- -There are tons of endpoints like this to get information about organizations, projects, issues, commits -- just about anything you can publicly see on GitHub. -You can even use the API to render arbitrary Markdown or find a `.gitignore` template. + تعداد بسیار زیادی نقطه انتهایی (endpoint) مانند این وجود دارد که میتوانید از طریق آنها اطلاعات مربوط به سازمانها، پروژهها، مسائل، کامیتها — تقریباً هر چیزی که بهصورت عمومی روی گیتهاب قابل مشاهده است — را دریافت کنید. +حتی میتوانید از API برای رندر کردن Markdown دلخواه یا پیدا کردن قالب `.gitignore` استفاده کنید. [source,javascript] ---- @@ -165,32 +165,32 @@ hs_err_pid* } ---- -==== Commenting on an Issue +==== Commenting on an Issue (نظر دادن درباره یک Issue) -However, if you want to do an action on the website such as comment on an Issue or Pull Request or if you want to view or interact with private content, you'll need to authenticate. +با این حال، اگر بخواهید عملی روی وبسایت انجام دهید، مانند نظر دادن درباره یک Issue یا Pull Request، یا اگر بخواهید محتوای خصوصی را مشاهده یا با آن تعامل کنید، باید احراز هویت کنید. -There are several ways to authenticate. -You can use basic authentication with just your username and password, but generally it's a better idea to use a personal access token. -You can generate this from the "`Applications`" tab of your settings page. +روشهای مختلفی برای احراز هویت وجود دارد. +میتوانید از احراز هویت پایه تنها با نام کاربری و رمز عبور خود استفاده کنید، اما معمولاً بهتر است از یک توکن دسترسی شخصی استفاده کنید. +میتوانید این توکن را از تب «Applications» در صفحه تنظیمات خود ایجاد کنید. [[_access_token]] .Generate your access token from the "`Applications`" tab of your settings page image::images/scripting-05-access-token.png[Generate your access token from the “Applications” tab of your settings page] -It will ask you which scopes you want for this token and a description. -Make sure to use a good description so you feel comfortable removing the token when your script or application is no longer used. +از شما خواسته میشود که دامنههای دسترسی (scopes) مورد نیاز برای این توکن و توضیحی درباره آن را مشخص کنید. +حتماً توضیح مناسبی بنویسید تا وقتی اسکریپت یا برنامه شما دیگر استفاده نشد، راحت بتوانید توکن را حذف کنید. -GitHub will only show you the token once, so be sure to copy it. -You can now use this to authenticate in your script instead of using a username and password. -This is nice because you can limit the scope of what you want to do and the token is revocable. +GitHub این توکن را فقط یک بار به شما نشان میدهد، پس حتماً آن را کپی کنید. +اکنون میتوانید به جای استفاده از نام کاربری و رمز عبور، از این توکن برای احراز هویت در اسکریپت خود استفاده کنید. +این روش خوب است چون میتوانید دامنههای دسترسی را محدود کنید و توکن قابل لغو است. -This also has the added advantage of increasing your rate limit. -Without authenticating, you will be limited to 60 requests per hour. -If you authenticate you can make up to 5,000 requests per hour. +این روش مزیت دیگری هم دارد که محدودیت نرخ درخواست شما را افزایش میدهد. +اگر احراز هویت نکنید، محدود به ۶۰ درخواست در ساعت خواهید بود. +اما با احراز هویت میتوانید تا ۵۰۰۰ درخواست در ساعت ارسال کنید. -So let's use it to make a comment on one of our issues. -Let's say we want to leave a comment on a specific issue, Issue #6. -To do so we have to do an HTTP POST request to `repos///issues//comments` with the token we just generated as an Authorization header. +پس بیایید از این روش برای گذاشتن نظر روی یکی از Issues خود استفاده کنیم. +فرض کنیم میخواهیم نظر روی یک Issue مشخص، مثلاً Issue شماره ۶، بگذاریم. +برای این کار باید یک درخواست HTTP POST به آدرس repos///issues//comments با توکنی که ایجاد کردیم، به عنوان هدر Authorization ارسال کنیم. [source,javascript] ---- @@ -214,23 +214,23 @@ $ curl -H "Content-Type: application/json" \ } ---- -Now if you go to that issue, you can see the comment that we just successfully posted as in <<_api_comment>>. +حالا اگر به آن Issue بروید، میتوانید نظر موفقیتآمیز خود را مشاهده کنید. [[_api_comment]] .A comment posted from the GitHub API image::images/scripting-06-comment.png[A comment posted from the GitHub API] -You can use the API to do just about anything you can do on the website -- creating and setting milestones, assigning people to Issues and Pull Requests, creating and changing labels, accessing commit data, creating new commits and branches, opening, closing or merging Pull Requests, creating and editing teams, commenting on lines of code in a Pull Request, searching the site and on and on. +میتوانید با API تقریباً هر کاری که در وبسایت میتوانید انجام دهید، انجام دهید — ایجاد و تنظیم milestones، اختصاص دادن افراد به Issues و Pull Requests، ایجاد و تغییر برچسبها، دسترسی به دادههای commit، ایجاد commit و branch جدید، باز کردن، بستن یا ادغام Pull Requests، ایجاد و ویرایش تیمها، نظر دادن روی خطوط کد در یک Pull Request، جستجو در سایت و غیره. -==== Changing the Status of a Pull Request +==== Changing the Status of a Pull Request (تغییر وضعیت یک Pull Request) -There is one final example we'll look at since it's really useful if you're working with Pull Requests. -Each commit can have one or more statuses associated with it and there is an API to add and query that status. +یک مثال نهایی که بسیار مفید است اگر با Pull Requests کار میکنید، بررسی میکنیم. +هر commit میتواند یک یا چند وضعیت (status) مرتبط داشته باشد و API وجود دارد که میتوانید این وضعیتها را اضافه یا بررسی کنید. -Most of the Continuous Integration and testing services make use of this API to react to pushes by testing the code that was pushed, and then report back if that commit has passed all the tests. -You could also use this to check if the commit message is properly formatted, if the submitter followed all your contribution guidelines, if the commit was validly signed -- any number of things. +اکثر سرویسهای Continuous Integration و تست از این API استفاده میکنند تا بعد از push کردن، کد را تست کنند و سپس گزارش دهند که آیا commit مورد نظر همه تستها را گذرانده است یا خیر. +شما همچنین میتوانید از این روش استفاده کنید تا بررسی کنید که آیا پیام commit به درستی فرمت شده، آیا ارسالکننده همه دستورالعملهای مشارکت را رعایت کرده، آیا commit به درستی امضا شده — هر تعداد چیز دیگر. -Let's say you set up a webhook on your repository that hits a small web service that checks for a `Signed-off-by` string in the commit message. +فرض کنید یک webhook روی مخزن خود تنظیم کردهاید که به یک سرویس وب کوچک ضربه میزند و بررسی میکند که آیا در پیام commit عبارت «Signed-off-by» وجود دارد یا خیر. [source,ruby] ---- @@ -275,27 +275,27 @@ post '/payload' do end ---- -Hopefully this is fairly simple to follow. -In this web hook handler we look through each commit that was just pushed, we look for the string 'Signed-off-by' in the commit message and finally we POST via HTTP to the `/repos///statuses/` API endpoint with the status. +امیدوارم این موضوع نسبتاً ساده باشد. +در این webhook handler، هر commit که تازه push شده را بررسی میکنیم، به دنبال عبارت «Signed-off-by» در پیام commit میگردیم و در نهایت با یک درخواست HTTP POST به endpoint /repos///statuses/ وضعیت را ارسال میکنیم. -In this case you can send a state ('success', 'failure', 'error'), a description of what happened, a target URL the user can go to for more information and a "`context`" in case there are multiple statuses for a single commit. -For example, a testing service may provide a status and a validation service like this may also provide a status -- the "`context`" field is how they're differentiated. +در این حالت میتوانید یک state ('success'، 'failure'، 'error')، توضیحی درباره اتفاقی که افتاده، یک URL هدف که کاربر میتواند برای اطلاعات بیشتر به آن مراجعه کند و یک «context» ارسال کنید تا اگر برای یک commit چند وضعیت وجود داشت، آنها از هم متمایز شوند. +برای مثال، یک سرویس تست ممکن است یک وضعیت ارائه دهد و یک سرویس اعتبارسنجی مانند این نیز وضعیت دیگری بدهد — فیلد «context» برای تمایز بین آنهاست. -If someone opens a new Pull Request on GitHub and this hook is set up, you may see something like <<_commit_status>>. +اگر کسی یک Pull Request جدید در GitHub باز کند و این webhook تنظیم شده باشد، ممکن است چیزی شبیه <<_commit_status>> ببینید. [[_commit_status]] .Commit status via the API image::images/scripting-07-status.png[Commit status via the API] -You can now see a little green check mark next to the commit that has a "`Signed-off-by`" string in the message and a red cross through the one where the author forgot to sign off. -You can also see that the Pull Request takes the status of the last commit on the branch and warns you if it is a failure. -This is really useful if you're using this API for test results so you don't accidentally merge something where the last commit is failing tests. +اکنون میتوانید یک علامت تأیید سبز کوچک کنار commit که در پیام آن عبارت «Signed-off-by» وجود دارد ببینید و یک علامت ضربدر قرمز روی آن که نویسنده فراموش کرده امضا کند. +همچنین مشاهده میکنید که Pull Request وضعیت آخرین commit روی شاخه را گرفته و اگر آن وضعیت failure باشد به شما هشدار میدهد. +این بسیار مفید است اگر از این API برای نتایج تست استفاده میکنید تا به اشتباه چیزی را که آخرین commit آن تستها را رد کرده، ادغام نکنید. ==== Octokit -Though we've been doing nearly everything through `curl` and simple HTTP requests in these examples, several open-source libraries exist that make this API available in a more idiomatic way. -At the time of this writing, the supported languages include Go, Objective-C, Ruby, and .NET. -Check out https://github.com/octokit[^] for more information on these, as they handle much of the HTTP for you. +اگرچه در این مثالها تقریباً همه کارها را با curl و درخواستهای ساده HTTP انجام دادهایم، چندین کتابخانه متنباز وجود دارد که این API را به شکلی طبیعیتر در اختیار شما قرار میدهند. +در زمان نگارش این متن، زبانهای پشتیبانی شده شامل Go، Objective-C، Ruby و .NET هستند. +برای اطلاعات بیشتر به https://github.com/octokit[^] مراجعه کنید، زیرا این کتابخانهها بخش عمدهای از کارهای HTTP را برای شما مدیریت میکنند. -Hopefully these tools can help you customize and modify GitHub to work better for your specific workflows. -For complete documentation on the entire API as well as guides for common tasks, check out https://docs.github.com/[^]. +امیدوارم این ابزارها به شما کمک کنند تا GitHub را بهتر و متناسب با جریان کاری خاص خودتان سفارشی کنید. +برای مستندات کامل تمام API و راهنمایی برای کارهای معمول، به https://docs.github.com/[^] مراجعه کنید. \ No newline at end of file From 3852e5dd848265427d264175da4ad8d06e49075c Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 20 Aug 2025 14:52:25 +0330 Subject: [PATCH 482/549] translate(07-git-tools): translated advanced merging to persian --- .../sections/advanced-merging.asc | 318 +++++++++--------- 1 file changed, 151 insertions(+), 167 deletions(-) diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index 7ace27bc..c8560936 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -1,28 +1,28 @@ [[_advanced_merging]] -=== Advanced Merging +=== Advanced Merging (ادغام پیشرفته) -Merging in Git is typically fairly easy. -Since Git makes it easy to merge another branch multiple times, it means that you can have a very long lived branch but you can keep it up to date as you go, solving small conflicts often, rather than be surprised by one enormous conflict at the end of the series. +ادغام در گیت معمولاً نسبتاً آسان است. +از آنجا که گیت ادغام شاخه‌ای دیگر را چندین بار آسان می‌کند، این بدان معناست که می‌توانید یک شاخه بسیار طولانی‌مدت داشته باشید و در عین حال آن را به‌روز نگه دارید، به‌گونه‌ای که اغلب تعارضات کوچک را حل کنید، به جای اینکه در پایان با یک تعارض عظیم و ناگهانی مواجه شوید. -However, sometimes tricky conflicts do occur. -Unlike some other version control systems, Git does not try to be overly clever about merge conflict resolution. -Git's philosophy is to be smart about determining when a merge resolution is unambiguous, but if there is a conflict, it does not try to be clever about automatically resolving it. -Therefore, if you wait too long to merge two branches that diverge quickly, you can run into some issues. +با این حال، گاهی اوقات تعارضات پیچیده‌ای پیش می‌آید. +برخلاف برخی سیستم‌های کنترل نسخه دیگر، گیت سعی نمی‌کند بسیار هوشمندانه تعارض‌های ادغام را به صورت خودکار حل کند. +فلسفه گیت این است که در تعیین اینکه آیا راه‌حل ادغام بدون ابهام است هوشمندانه عمل کند، اما اگر تعارضی وجود داشته باشد، تلاش نمی‌کند به طور خودکار و هوشمندانه آن را حل کند. +بنابراین، اگر برای ادغام دو شاخه‌ای که سریع از هم جدا شده‌اند زمان زیادی صبر کنید، ممکن است با مشکلاتی مواجه شوید. -In this section, we'll go over what some of those issues might be and what tools Git gives you to help handle these more tricky situations. -We'll also cover some of the different, non-standard types of merges you can do, as well as see how to back out of merges that you've done. +در این بخش، به بررسی برخی از این مشکلات و ابزارهایی که گیت برای مدیریت این موقعیت‌های پیچیده در اختیار شما می‌گذارد، می‌پردازیم. +همچنین انواع مختلف و غیرمعمول ادغام‌هایی که می‌توانید انجام دهید را بررسی می‌کنیم و نحوه بازگرداندن ادغام‌هایی که انجام داده‌اید را نیز مرور خواهیم کرد. -==== Merge Conflicts +==== Merge Conflicts (تعارض‌های ادغام) -While we covered some basics on resolving merge conflicts in <>, for more complex conflicts, Git provides a few tools to help you figure out what's going on and how to better deal with the conflict. +در حالی که برخی اصول اولیه حل تعارض‌های ادغام را در <> پوشش دادیم، برای تعارض‌های پیچیده‌تر، گیت چند ابزار فراهم می‌کند تا به شما کمک کند بفهمید چه اتفاقی می‌افتد و چگونه بهتر با تعارض برخورد کنید. -First of all, if at all possible, try to make sure your working directory is clean before doing a merge that may have conflicts. -If you have work in progress, either commit it to a temporary branch or stash it. -This makes it so that you can undo *anything* you try here. -If you have unsaved changes in your working directory when you try a merge, some of these tips may help you preserve that work. +اول از همه، اگر ممکن است، قبل از انجام ادغامی که ممکن است تعارض داشته باشد، مطمئن شوید که شاخه کاری شما پاک (clean) است. +اگر روی کاری در حال پیشرفت هستید، آن را یا به یک شاخه موقت کامیت کنید یا از طریق stash ذخیره کنید. +این کار به شما امکان می‌دهد هر کاری که در این مرحله انجام می‌دهید را به راحتی برگردانید. +اگر در شاخه کاری خود تغییرات ذخیره‌نشده دارید و ادغام را امتحان می‌کنید، برخی از این نکات می‌تواند به حفظ آن تغییرات کمک کند. -Let's walk through a very simple example. -We have a super simple Ruby file that prints 'hello world'. +بیایید با یک مثال بسیار ساده پیش برویم. +یک فایل روبی بسیار ساده داریم که `hello world` را چاپ می‌کند. [source,ruby] ---- @@ -35,8 +35,8 @@ end hello() ---- -In our repository, we create a new branch named `whitespace` and proceed to change all the Unix line endings to DOS line endings, essentially changing every line of the file, but just with whitespace. -Then we change the line "`hello world`" to "`hello mundo`". +در مخزن خود، یک شاخه جدید به نام `whitespace` ایجاد می‌کنیم و تمام انتهای خطوط یونیکس را به انتهای خطوط DOS تغییر می‌دهیم، به عبارتی هر خط فایل را فقط از نظر فضای سفید تغییر می‌دهیم. +سپس خط "hello world" را به "hello mundo" تغییر می‌دهیم. [source,console] ---- @@ -70,7 +70,7 @@ $ git commit -am 'Use Spanish instead of English' 1 file changed, 1 insertion(+), 1 deletion(-) ---- -Now we switch back to our `master` branch and add some documentation for the function. +حالا برمی‌گردیم به شاخه `master` و مقداری مستندات برای تابع اضافه می‌کنیم. [source,console] ---- @@ -96,7 +96,7 @@ $ git commit -am 'Add comment documenting the function' 1 file changed, 1 insertion(+) ---- -Now we try to merge in our `whitespace` branch and we'll get conflicts because of the whitespace changes. +اکنون سعی می‌کنیم شاخه `whitespace` را ادغام کنیم و به دلیل تغییرات فضای سفید با تعارض مواجه می‌شویم. [source,console] ---- @@ -107,11 +107,11 @@ Automatic merge failed; fix conflicts and then commit the result. ---- [[_abort_merge]] -===== Aborting a Merge +===== Aborting a Merge (لغو ادغام) -We now have a few options. -First, let's cover how to get out of this situation. -If you perhaps weren't expecting conflicts and don't want to quite deal with the situation yet, you can simply back out of the merge with `git merge --abort`. +حالا چند گزینه داریم. +اول، بیایید بررسی کنیم چگونه از این وضعیت خارج شویم. +اگر انتظار تعارض نداشتید و نمی‌خواهید فعلاً با آن درگیر شوید، می‌توانید به سادگی با دستور `git merge --abort` از ادغام خارج شوید. [source,console] ---- @@ -125,21 +125,15 @@ $ git status -sb ## master ---- -The `git merge --abort` option tries to revert back to your state before you ran the merge. -The only cases where it may not be able to do this perfectly would be if you had unstashed, uncommitted changes in your working directory when you ran it, otherwise it should work fine. +گزینه `git merge --abort` تلاش می‌کند تا به حالتی که قبل از اجرای عملیات ادغام (merge) داشتید برگردد. تنها زمانی ممکن است این کار را به‌طور کامل نتواند انجام دهد که هنگام اجرای ادغام، تغییراتی بدون ذخیره‌سازی (unstashed) یا بدون کامیت در دایرکتوری کاری خود داشته باشید؛ در غیر این صورت، این گزینه به‌خوبی کار خواهد کرد. -If for some reason you just want to start over, you can also run `git reset --hard HEAD`, and your repository will be back to the last committed state. -Remember that any uncommitted work will be lost, so make sure you don't want any of your changes. +اگر به هر دلیلی بخواهید از اول شروع کنید، می‌توانید دستور `git reset --hard HEAD` را اجرا کنید تا مخزن شما به آخرین حالت کامیت شده بازگردد. توجه داشته باشید که هر تغییر ذخیره‌نشده‌ای از دست خواهد رفت؛ پس مطمئن شوید که هیچ کدام از تغییرات خود را نمی‌خواهید حفظ کنید. -===== Ignoring Whitespace +===== Ignoring Whitespace (نادیده گرفتن فاصله‌ها) -In this specific case, the conflicts are whitespace related. -We know this because the case is simple, but it's also pretty easy to tell in real cases when looking at the conflict because every line is removed on one side and added again on the other. -By default, Git sees all of these lines as being changed, so it can't merge the files. +در این مورد خاص، تداخل‌ها به دلیل فاصله‌ها هستند. این موضوع را می‌دانیم چون مسئله ساده است، اما در موارد واقعی هم وقتی به تداخل نگاه می‌کنید، به‌راحتی قابل تشخیص است چون هر خط در یک طرف حذف شده و دوباره در طرف دیگر اضافه شده است. به‌طور پیش‌فرض، گیت تمام این خطوط را به‌عنوان تغییر یافته می‌بیند و نمی‌تواند فایل‌ها را ادغام کند. -The default merge strategy can take arguments though, and a few of them are about properly ignoring whitespace changes. -If you see that you have a lot of whitespace issues in a merge, you can simply abort it and do it again, this time with `-Xignore-all-space` or `-Xignore-space-change`. -The first option ignores whitespace *completely* when comparing lines, the second treats sequences of one or more whitespace characters as equivalent. +با این حال، استراتژی پیش‌فرض ادغام می‌تواند آرگومان‌هایی دریافت کند که برخی از آنها مربوط به نادیده گرفتن صحیح فاصله‌ها هستند. اگر در یک ادغام با مشکلات زیادی درباره فاصله مواجه شدید، می‌توانید به‌سادگی ادغام را لغو کنید و دوباره اجرا کنید، این‌بار با گزینه‌های `-Xignore-all-space` یا `-Xignore-space-change`. گزینه اول هنگام مقایسه خطوط، فاصله‌ها را *کاملاً* نادیده می‌گیرد و گزینه دوم دنباله‌ای از یک یا چند کاراکتر فاصله را معادل در نظر می‌گیرد. [source,console] ---- @@ -150,28 +144,22 @@ Merge made by the 'recursive' strategy. 1 file changed, 1 insertion(+), 1 deletion(-) ---- -Since in this case, the actual file changes were not conflicting, once we ignore the whitespace changes, everything merges just fine. +از آنجا که در این مورد تغییرات واقعی فایل‌ها با هم تداخل نداشتند، وقتی فاصله‌ها را نادیده می‌گیریم، همه چیز به‌خوبی ادغام می‌شود. -This is a lifesaver if you have someone on your team who likes to occasionally reformat everything from spaces to tabs or vice-versa. +این قابلیت بسیار مفید است اگر در تیم شما کسی باشد که گاهی همه چیز را از فضاها به تب‌ها یا برعکس تغییر فرمت می‌دهد. [[_manual_remerge]] -===== Manual File Re-merging +===== Manual File Re-merging (ادغام مجدد دستی فایل‌ها) -Though Git handles whitespace pre-processing pretty well, there are other types of changes that perhaps Git can't handle automatically, but are scriptable fixes. -As an example, let's pretend that Git could not handle the whitespace change and we needed to do it by hand. +اگرچه گیت پیش‌پردازش فاصله‌ها را به‌خوبی مدیریت می‌کند، انواع دیگری از تغییرات وجود دارند که شاید گیت نتواند به‌طور خودکار آنها را مدیریت کند، اما می‌توان آنها را با اسکریپت اصلاح کرد. به‌عنوان مثال، فرض کنیم گیت نتواند تغییر فاصله‌ها را مدیریت کند و مجبور باشیم این کار را دستی انجام دهیم. -What we really need to do is run the file we're trying to merge in through a `dos2unix` program before trying the actual file merge. -So how would we do that? +کاری که باید انجام دهیم این است که فایل مورد نظر برای ادغام را قبل از تلاش برای ادغام واقعی، با برنامه‌ای مانند `dos2unix` پردازش کنیم. چگونه این کار را انجام دهیم؟ -First, we get into the merge conflict state. -Then we want to get copies of our version of the file, their version (from the branch we're merging in) and the common version (from where both sides branched off). -Then we want to fix up either their side or our side and re-try the merge again for just this single file. +ابتدا وارد حالت تداخل ادغام می‌شویم. سپس باید نسخه‌های فایل خودمان، نسخه طرف مقابل (از شاخه‌ای که می‌خواهیم ادغام کنیم) و نسخه مشترک (جایی که هر دو شاخه منشعب شده‌اند) را تهیه کنیم. بعد باید طرف خودمان یا طرف مقابل را اصلاح کنیم و دوباره ادغام را فقط برای این فایل امتحان کنیم. -Getting the three file versions is actually pretty easy. -Git stores all of these versions in the index under "`stages`" which each have numbers associated with them. -Stage 1 is the common ancestor, stage 2 is your version and stage 3 is from the `MERGE_HEAD`, the version you're merging in ("`theirs`"). +تهیه سه نسخه فایل کار چندان دشواری نیست. گیت همه این نسخه‌ها را در ایندکس تحت عنوان "مرحله‌ها" (stages) نگه می‌دارد که هر کدام شماره‌ای دارند. مرحله ۱ نسخه اجدادی مشترک است، مرحله ۲ نسخه شما و مرحله ۳ نسخه‌ای است که از `MERGE_HEAD` می‌آید، یعنی نسخه‌ای که می‌خواهید ادغام کنید ("طرف مقابل"). -You can extract a copy of each of these versions of the conflicted file with the `git show` command and a special syntax. +می‌توانید هر یک از این نسخه‌های فایل درگیر در تداخل را با دستور `git show` و یک نحو خاص استخراج کنید. [source,console] ---- @@ -180,7 +168,7 @@ $ git show :2:hello.rb > hello.ours.rb $ git show :3:hello.rb > hello.theirs.rb ---- -If you want to get a little more hard core, you can also use the `ls-files -u` plumbing command to get the actual SHA-1s of the Git blobs for each of these files. +اگر بخواهید کمی حرفه‌ای‌تر عمل کنید، می‌توانید با دستور کمکی `ls-files -u` شناسه SHA-1 بلاک‌های گیت برای هر یک از این فایل‌ها را به دست آورید. [source,console] ---- @@ -190,9 +178,9 @@ $ git ls-files -u 100755 e85207e04dfdd5eb0a1e9febbc67fd837c44a1cd 3 hello.rb ---- -The `:1:hello.rb` is just a shorthand for looking up that blob SHA-1. +`:1:hello.rb` فقط یک کوتاه‌نویسی برای جستجوی آن شناسه SHA-1 بلاک است. -Now that we have the content of all three stages in our working directory, we can manually fix up theirs to fix the whitespace issue and re-merge the file with the little-known `git merge-file` command which does just that. +حالا که محتوای هر سه مرحله را در دایرکتوری کاری خود داریم، می‌توانیم نسخه طرف مقابل را به‌صورت دستی برای رفع مشکل فاصله اصلاح کنیم و سپس با دستور کمتر شناخته شده `git merge-file` فایل را مجدداً ادغام کنیم. [source,console] ---- @@ -219,14 +207,11 @@ index 36c06c8,e85207e..0000000 hello() ---- -At this point we have nicely merged the file. -In fact, this actually works better than the `ignore-space-change` option because this actually fixes the whitespace changes before merge instead of simply ignoring them. -In the `ignore-space-change` merge, we actually ended up with a few lines with DOS line endings, making things mixed. +در این مرحله فایل به‌خوبی ادغام شده است. در واقع، این روش بهتر از گزینه `ignore-space-change` عمل می‌کند چون ابتدا مشکل فاصله‌ها را رفع می‌کند و بعد ادغام می‌کند، نه اینکه فقط آنها را نادیده بگیرد. در ادغام با گزینه `ignore-space-change`، در واقع چند خط دارای انتهای خط DOS باقی می‌ماند که باعث مخلوط شدن فرمت‌ها می‌شود. -If you want to get an idea before finalizing this commit about what was actually changed between one side or the other, you can ask `git diff` to compare what is in your working directory that you're about to commit as the result of the merge to any of these stages. -Let's go through them all. +اگر بخواهید قبل از نهایی کردن این کامیت، ایده‌ای از تغییرات واقعی بین یک طرف و طرف دیگر داشته باشید، می‌توانید از `git diff` استفاده کنید تا تغییرات موجود در دایرکتوری کاری که می‌خواهید به‌عنوان نتیجه ادغام کامیت کنید را با هر یک از این مرحله‌ها مقایسه کنید. بیایید همه آنها را مرور کنیم. -To compare your result to what you had in your branch before the merge, in other words, to see what the merge introduced, you can run `git diff --ours`: +برای مقایسه نتیجه خود با آنچه قبل از ادغام در شاخه‌تان داشتید، یعنی دیدن تغییراتی که ادغام وارد کرده است، می‌توانید دستور `git diff --ours` را اجرا کنید: [source,console] ---- @@ -247,10 +232,9 @@ index 36c06c8..44d0a25 100755 hello() ---- -So here we can easily see that what happened in our branch, what we're actually introducing to this file with this merge, is changing that single line. +اینجا به‌راحتی می‌بینیم که در شاخه خودمان چه اتفاقی افتاده، یعنی دقیقاً چه چیزی را با این ادغام به فایل اضافه می‌کنیم، که تغییر یک خط است. -If we want to see how the result of the merge differed from what was on their side, you can run `git diff --theirs`. -In this and the following example, we have to use `-b` to strip out the whitespace because we're comparing it to what is in Git, not our cleaned up `hello.theirs.rb` file. +اگر بخواهید ببینید نتیجه ادغام چقدر با نسخه طرف مقابل تفاوت دارد، می‌توانید دستور `git diff --theirs` را اجرا کنید. در این مثال و مثال بعدی، باید گزینه `-b` را اضافه کنید تا فاصله‌ها حذف شوند، چون مقایسه را با آنچه در گیت است انجام می‌دهیم، نه فایل پاک‌سازی‌شده `hello.theirs.rb` خودمان. [source,console] ---- @@ -269,7 +253,7 @@ index e85207e..44d0a25 100755 end ---- -Finally, you can see how the file has changed from both sides with `git diff --base`. +در نهایت، می‌توانید ببینید که فایل از هر دو طرف چگونه تغییر کرده است با دستور `git diff --base`. [source,console] ---- @@ -291,7 +275,7 @@ index ac51efd..44d0a25 100755 hello() ---- -At this point we can use the `git clean` command to clear out the extra files we created to do the manual merge but no longer need. +در این مرحله می‌توانیم از دستور `git clean` استفاده کنیم تا فایل‌های اضافی‌ای که برای انجام ادغام دستی ایجاد کرده‌ایم ولی دیگر نیازی به آن‌ها نداریم را پاک کنیم. [source,console] ---- @@ -302,12 +286,12 @@ Removing hello.theirs.rb ---- [[_checking_out_conflicts]] -===== Checking Out Conflicts +===== Checking Out Conflicts (بررسی تعارض‌ها) -Perhaps we're not happy with the resolution at this point for some reason, or maybe manually editing one or both sides still didn't work well and we need more context. +شاید به دلیلی از نتیجه حل تعارض راضی نیستیم، یا شاید ویرایش دستی یک یا هر دو طرف هنوز خوب جواب نداده و به زمینه‌ی بیشتری نیاز داریم. -Let's change up the example a little. -For this example, we have two longer lived branches that each have a few commits in them but create a legitimate content conflict when merged. +بیایید مثال را کمی تغییر دهیم. +در این مثال، دو شاخه بلندمدت داریم که هر کدام چند کامیت در خود دارند ولی هنگام ادغام، یک تعارض محتوایی واقعی ایجاد می‌کنند. [source,console] ---- @@ -322,8 +306,8 @@ $ git log --graph --oneline --decorate --all * b7dcc89 Initial hello world code ---- -We now have three unique commits that live only on the `master` branch and three others that live on the `mundo` branch. -If we try to merge the `mundo` branch in, we get a conflict. +اکنون سه کامیت منحصر به فرد داریم که فقط روی شاخه `master` هستند و سه کامیت دیگر که روی شاخه `mundo` قرار دارند. +اگر بخواهیم شاخه `mundo` را ادغام کنیم، با تعارض مواجه می‌شویم. [source,console] ---- @@ -333,8 +317,8 @@ CONFLICT (content): Merge conflict in hello.rb Automatic merge failed; fix conflicts and then commit the result. ---- -We would like to see what the merge conflict is. -If we open up the file, we'll see something like this: +می‌خواهیم ببینیم تعارض ادغام چیست. +اگر فایل را باز کنیم، چیزی شبیه این می‌بینیم: [source,ruby] ---- @@ -351,25 +335,25 @@ end hello() ---- -Both sides of the merge added content to this file, but some of the commits modified the file in the same place that caused this conflict. +هر دو طرف ادغام محتوایی به این فایل اضافه کرده‌اند، اما برخی از کامیت‌ها فایل را در یک نقطه مشابه تغییر داده‌اند که باعث این تعارض شده است. -Let's explore a couple of tools that you now have at your disposal to determine how this conflict came to be. -Perhaps it's not obvious how exactly you should fix this conflict. -You need more context. +بیایید چند ابزار که اکنون در اختیار دارید را بررسی کنیم تا بفهمیم این تعارض چگونه به وجود آمده است. +شاید واضح نباشد که دقیقاً چگونه باید این تعارض را رفع کنید. +به زمینه‌ی بیشتری نیاز دارید. -One helpful tool is `git checkout` with the `--conflict` option. -This will re-checkout the file again and replace the merge conflict markers. -This can be useful if you want to reset the markers and try to resolve them again. +یکی از ابزارهای مفید، دستور `git checkout` با گزینه `--conflict` است. +این دستور فایل را دوباره چک‌اوت می‌کند و نشانگرهای تعارض ادغام را جایگزین می‌کند. +این می‌تواند زمانی مفید باشد که بخواهید نشانگرها را ریست کرده و دوباره سعی کنید آن‌ها را حل کنید. -You can pass `--conflict` either `diff3` or `merge` (which is the default). -If you pass it `diff3`, Git will use a slightly different version of conflict markers, not only giving you the "`ours`" and "`theirs`" versions, but also the "`base`" version inline to give you more context. +می‌توانید به `--conflict` مقدار `diff3` یا `merge` (که پیش‌فرض است) بدهید. +اگر `diff3` را بدهید، گیت از نسخه‌ای کمی متفاوت از نشانگرهای تعارض استفاده می‌کند که نه تنها نسخه‌های "`ours`" و "`theirs`" بلکه نسخه "`base`" را هم به صورت درون‌خطی نشان می‌دهد تا زمینه بیشتری به شما بدهد. [source,console] ---- $ git checkout --conflict=diff3 hello.rb ---- -Once we run that, the file will look like this instead: +وقتی این دستور را اجرا کنیم، فایل به این شکل خواهد بود: [source,ruby] ---- @@ -388,25 +372,25 @@ end hello() ---- -If you like this format, you can set it as the default for future merge conflicts by setting the `merge.conflictstyle` setting to `diff3`. +اگر این فرمت را دوست دارید، می‌توانید آن را به عنوان پیش‌فرض برای تعارض‌های ادغام آینده با تنظیم گزینه `merge.conflictstyle` روی `diff3` قرار دهید. [source,console] ---- $ git config --global merge.conflictstyle diff3 ---- -The `git checkout` command can also take `--ours` and `--theirs` options, which can be a really fast way of just choosing either one side or the other without merging things at all. +دستور `git checkout` همچنین گزینه‌های `--ours` و `--theirs` را می‌پذیرد که راه بسیار سریعی برای انتخاب فقط یکی از دو طرف بدون انجام ادغام کامل است. -This can be particularly useful for conflicts of binary files where you can simply choose one side, or where you only want to merge certain files in from another branch -- you can do the merge and then checkout certain files from one side or the other before committing. +این برای تعارض‌های فایل‌های باینری که می‌توانید به سادگی یکی از دو طرف را انتخاب کنید، یا زمانی که فقط می‌خواهید برخی فایل‌ها را از شاخه دیگر ادغام کنید، بسیار مفید است — می‌توانید ادغام را انجام دهید و سپس قبل از کامیت، فایل‌های خاصی را از یکی از دو طرف چک‌اوت کنید. [[_merge_log]] -===== Merge Log +===== Merge Log (گزارش ادغام) -Another useful tool when resolving merge conflicts is `git log`. -This can help you get context on what may have contributed to the conflicts. -Reviewing a little bit of history to remember why two lines of development were touching the same area of code can be really helpful sometimes. +ابزار مفید دیگری که هنگام حل تعارض‌های ادغام کاربرد دارد، `git log` است. +این می‌تواند به شما کمک کند تا بفهمید چه چیزی ممکن است به ایجاد تعارض‌ها کمک کرده باشد. +مرور کمی از تاریخچه برای به یاد آوردن اینکه چرا دو خط توسعه به یک بخش مشابه از کد دست زده‌اند، گاهی بسیار مفید است. -To get a full list of all of the unique commits that were included in either branch involved in this merge, we can use the "`triple dot`" syntax that we learned in <>. +برای دریافت فهرست کامل تمام کامیت‌های منحصر به فردی که در هر یک از شاخه‌های دخیل در این ادغام وجود دارند، می‌توانیم از نحو «سه نقطه» که در <> یاد گرفته‌ایم استفاده کنیم. [source,console] ---- @@ -419,10 +403,10 @@ $ git log --oneline --left-right HEAD...MERGE_HEAD > c3ffff1 Change text to 'hello mundo' ---- -That's a nice list of the six total commits involved, as well as which line of development each commit was on. +این فهرست خوبی از شش کامیت کلی درگیر است، همچنین مشخص می‌کند هر کامیت مربوط به کدام شاخه توسعه بوده است. -We can further simplify this though to give us much more specific context. -If we add the `--merge` option to `git log`, it will only show the commits in either side of the merge that touch a file that's currently conflicted. +اما ما می‌توانیم این را ساده‌تر کنیم تا زمینه بسیار مشخص‌تری به دست بیاوریم. +اگر گزینه `--merge` را به `git log` اضافه کنیم، فقط کامیت‌هایی را نشان می‌دهد که در هر دو طرف عملیات ادغام ویرایشی روی فایلی داشته‌اند که در حال حاضر دچار تعارض است. [source,console] ---- @@ -431,15 +415,15 @@ $ git log --oneline --left-right --merge > c3ffff1 Change text to 'hello mundo' ---- -If you run that with the `-p` option instead, you get just the diffs to the file that ended up in conflict. -This can be *really* helpful in quickly giving you the context you need to help understand why something conflicts and how to more intelligently resolve it. +اگر به جای آن، این فرمان را با گزینه `-p` اجرا کنید، فقط تفاوت‌های مربوط به فایلی که در نهایت دچار تعارض شده را خواهید دید. +این می‌تواند بسیار مفید باشد تا سریعاً زمینه‌ای که به شما کمک می‌کند بفهمید چرا تعارض رخ داده و چگونه می‌توان آن را با هوشمندی بیشتری حل کرد را به دست آورید. -===== Combined Diff Format +===== Combined Diff Format (قالب تفاوت ترکیبی) -Since Git stages any merge results that are successful, when you run `git diff` while in a conflicted merge state, you only get what is currently still in conflict. -This can be helpful to see what you still have to resolve. +از آنجا که گیت هر نتیجه ادغامی که موفق باشد را مرحله‌بندی می‌کند، وقتی در حالت ادغام دچار تعارض هستید و `git diff` را اجرا می‌کنید، فقط مواردی را می‌بینید که هنوز دچار تعارض هستند. +این می‌تواند به شما کمک کند ببینید چه چیزهایی هنوز باید حل و فصل شود. -When you run `git diff` directly after a merge conflict, it will give you information in a rather unique diff output format. +وقتی که بلافاصله پس از یک تعارض ادغام `git diff` را اجرا می‌کنید، اطلاعاتی در قالب خروجی تفاوتی نسبتاً منحصر به فرد دریافت خواهید کرد. [source,console] ---- @@ -462,13 +446,13 @@ index 0399cd5,59727f0..0000000 hello() ---- -The format is called "`Combined Diff`" and gives you two columns of data next to each line. -The first column shows you if that line is different (added or removed) between the "`ours`" branch and the file in your working directory and the second column does the same between the "`theirs`" branch and your working directory copy. +این قالب به نام "تفاوت ترکیبی" شناخته می‌شود و دو ستون داده کنار هر خط به شما نشان می‌دهد. +ستون اول نشان می‌دهد که آیا آن خط بین شاخه "`ours`" و فایل در دایرکتوری کاری شما متفاوت است (حذف یا اضافه شده) و ستون دوم همین را بین شاخه "`theirs`" و کپی دایرکتوری کاری شما نشان می‌دهد. -So in that example you can see that the `<<<<<<<` and `>>>>>>>` lines are in the working copy but were not in either side of the merge. -This makes sense because the merge tool stuck them in there for our context, but we're expected to remove them. +مثلاً در این مثال می‌بینید خطوط `<<<<<<<` و `>>>>>>>` در کپی کاری وجود دارند اما در هیچ‌کدام از دو طرف ادغام نیستند. +این منطقی است چون ابزار ادغام آن‌ها را برای زمینه ما قرار داده، اما انتظار می‌رود که آن‌ها را حذف کنیم. -If we resolve the conflict and run `git diff` again, we'll see the same thing, but it's a little more useful. +اگر تعارض را حل کنیم و دوباره `git diff` را اجرا کنیم، همان خروجی را می‌بینیم ولی کمی مفیدتر است. [source,console] ---- @@ -490,11 +474,11 @@ index 0399cd5,59727f0..0000000 hello() ---- -This shows us that "`hola world`" was in our side but not in the working copy, that "`hello mundo`" was in their side but not in the working copy and finally that "`hola mundo`" was not in either side but is now in the working copy. -This can be useful to review before committing the resolution. +این به ما نشان می‌دهد که "`hola world`" در سمت ما بوده ولی در کپی کاری نیست، "`hello mundo`" در سمت آن‌ها بوده ولی در کپی کاری نیست و در نهایت "`hola mundo`" در هیچ‌کدام از دو طرف نبوده ولی اکنون در کپی کاری وجود دارد. +این برای بازبینی قبل از ثبت نهایی حل تعارض مفید است. -You can also get this from the `git log` for any merge to see how something was resolved after the fact. -Git will output this format if you run `git show` on a merge commit, or if you add a `--cc` option to a `git log -p` (which by default only shows patches for non-merge commits). +شما همچنین می‌توانید این خروجی را از `git log` هر ادغام ببینید تا بفهمید بعد از ادغام چگونه مسئله حل شده است. +گیت این قالب را وقتی `git show` را روی یک کامیت ادغام اجرا کنید یا اگر گزینه `--cc` را به `git log -p` اضافه کنید (که به طور پیش‌فرض فقط پچ‌های کامیت‌های غیرادغام را نشان می‌دهد) نمایش می‌دهد. [source,console] ---- @@ -526,44 +510,44 @@ index 0399cd5,59727f0..e1d0799 ---- [[_undoing_merges]] -==== Undoing Merges +==== Undoing Merges (بازگرداندن ادغام‌ها) -Now that you know how to create a merge commit, you'll probably make some by mistake. -One of the great things about working with Git is that it's okay to make mistakes, because it's possible (and in many cases easy) to fix them. +حالا که می‌دانید چگونه یک کامیت ادغام ایجاد کنید، احتمالاً بعضی را اشتباهی خواهید ساخت. +یکی از چیزهای عالی در کار با گیت این است که اشتباه کردن اشکالی ندارد، چون امکان اصلاح آن وجود دارد و در بسیاری موارد آسان است. -Merge commits are no different. -Let's say you started work on a topic branch, accidentally merged it into `master`, and now your commit history looks like this: +کامیت‌های ادغام هم همین‌طور هستند. +فرض کنید روی یک شاخه موضوعی کار می‌کردید، اشتباهی آن را به `master` ادغام کردید و حالا تاریخچه کامیت شما این‌گونه شده است: .Accidental merge commit image::images/undomerge-start.png[Accidental merge commit] -There are two ways to approach this problem, depending on what your desired outcome is. +دو راه برای رفع این مشکل وجود دارد، بسته به اینکه نتیجه دلخواه شما چیست. -===== Fix the references +===== Fix the references (اصلاح اشاره‌گرها) -If the unwanted merge commit only exists on your local repository, the easiest and best solution is to move the branches so that they point where you want them to. -In most cases, if you follow the errant `git merge` with `git reset --hard HEAD~`, this will reset the branch pointers so they look like this: +اگر کامیت ادغام ناخواسته فقط روی مخزن محلی شما وجود دارد، ساده‌ترین و بهترین راه این است که شاخه‌ها را جابجا کنید تا به جایگاه دلخواه برسند. +در بیشتر موارد، اگر بعد از ادغام اشتباهی `git merge`، دستور `git reset --hard HEAD~` را اجرا کنید، اشاره‌گر شاخه‌ها را به این شکل تنظیم می‌کند: .History after `git reset --hard HEAD~` image::images/undomerge-reset.png[History after `git reset --hard HEAD~`] -We covered `reset` back in <>, so it shouldn't be too hard to figure out what's going on here. -Here's a quick refresher: `reset --hard` usually goes through three steps: +ما پیش‌تر `reset` را در <> پوشش داده‌ایم، بنابراین نباید دشوار باشد که بفهمید اینجا چه اتفاقی می‌افتد. +یک یادآوری سریع: `reset --hard` معمولاً سه مرحله دارد: -. Move the branch HEAD points to. - In this case, we want to move `master` to where it was before the merge commit (`C6`). -. Make the index look like HEAD. -. Make the working directory look like the index. +1. حرکت دادن شاخه‌ای که HEAD به آن اشاره می‌کند. + در این مورد، می‌خواهیم `master` را به جایی که پیش از کامیت ادغام بود (`C6`) برگردانیم. +2. همسان‌سازی شاخص (index) با HEAD. +3. همسان‌سازی دایرکتوری کاری با شاخص. -The downside of this approach is that it's rewriting history, which can be problematic with a shared repository. -Check out <> for more on what can happen; the short version is that if other people have the commits you're rewriting, you should probably avoid `reset`. -This approach also won't work if any other commits have been created since the merge; moving the refs would effectively lose those changes. +نقطه ضعف این روش این است که تاریخچه را بازنویسی می‌کند، که در مخزن مشترک می‌تواند مشکل‌ساز باشد. +برای اطلاعات بیشتر در این زمینه به <> مراجعه کنید؛ خلاصه این است که اگر دیگران کامیت‌هایی که شما بازنویسی می‌کنید را دارند، بهتر است از `reset` استفاده نکنید. +همچنین این روش زمانی کار نمی‌کند که کامیت‌های دیگری بعد از ادغام ساخته شده باشند؛ جابجایی اشاره‌گرها باعث از دست رفتن آن تغییرات خواهد شد. [[_reverse_commit]] -===== Reverse the commit +===== Reverse the commit (معکوس کردن کامیت) -If moving the branch pointers around isn't going to work for you, Git gives you the option of making a new commit which undoes all the changes from an existing one. -Git calls this operation a "`revert`", and in this particular scenario, you'd invoke it like this: +اگر جابجا کردن اشاره‌گر شاخه‌ها برای شما مناسب نیست، گیت این امکان را می‌دهد که کامیت جدیدی بسازید که تمام تغییرات یک کامیت موجود را برگرداند. +گیت این عملیات را "`revert`" می‌نامد و در این موقعیت خاص، دستور به این شکل است: [source,console] ---- @@ -571,17 +555,17 @@ $ git revert -m 1 HEAD [master b1d8379] Revert "Merge branch 'topic'" ---- -The `-m 1` flag indicates which parent is the "`mainline`" and should be kept. -When you invoke a merge into `HEAD` (`git merge topic`), the new commit has two parents: the first one is `HEAD` (`C6`), and the second is the tip of the branch being merged in (`C4`). -In this case, we want to undo all the changes introduced by merging in parent #2 (`C4`), while keeping all the content from parent #1 (`C6`). +پرچم `-m 1` مشخص می‌کند کدام والد "`mainline`" است و باید نگه داشته شود. +وقتی یک ادغام را روی `HEAD` اجرا می‌کنید (`git merge topic`)، کامیت جدید دو والد دارد: اولی `HEAD` (`C6`) است و دومی سر شاخه‌ای که ادغام شده (`C4`). +در اینجا می‌خواهیم همه تغییراتی که از ادغام والد شماره ۲ (`C4`) آمده را برگردانیم و همه محتویات والد شماره ۱ (`C6`) را نگه داریم. -The history with the revert commit looks like this: +تاریخچه با کامیت ریورت شده این‌گونه خواهد بود: .History after `git revert -m 1` image::images/undomerge-revert.png[History after `git revert -m 1`] -The new commit `^M` has exactly the same contents as `C6`, so starting from here it's as if the merge never happened, except that the now-unmerged commits are still in ``HEAD```'s history. -Git will get confused if you try to merge ``topic`` into ``master`` again: +کامیت جدید `^M` دقیقاً همان محتوای `C6` را دارد، بنابراین از اینجا به بعد انگار ادغام هرگز انجام نشده، البته کامیت‌های ادغام نشده هنوز در تاریخچه `HEAD` باقی هستند. +اگر بخواهید دوباره شاخه `topic` را به `master` ادغام کنید، گیت گیج خواهد شد: [source,console] ---- @@ -589,13 +573,13 @@ $ git merge topic Already up-to-date. ---- -There's nothing in `topic` that isn't already reachable from `master`. -What's worse, if you add work to `topic` and merge again, Git will only bring in the changes _since_ the reverted merge: +هیچ چیزی در شاخه‌ی `topic` وجود ندارد که قبلاً از شاخه‌ی `master` قابل دسترسی نباشد. +بدتر از آن، اگر روی `topic` کار اضافه کنید و دوباره ادغام (merge) کنید، گیت فقط تغییراتی را که _بعد از_ ادغام معکوس شده ایجاد شده‌اند وارد می‌کند: .History with a bad merge image::images/undomerge-revert2.png[History with a bad merge] -The best way around this is to un-revert the original merge, since now you want to bring in the changes that were reverted out, *then* create a new merge commit: +بهترین راه برای حل این مشکل این است که ادغام اصلی را لغو معکوس نکنید، چون حالا می‌خواهید تغییراتی که قبلاً معکوس شده‌اند را وارد کنید، *سپس* یک کامیت ادغام جدید ایجاد کنید: [source,console] ---- @@ -607,28 +591,28 @@ $ git merge topic .History after re-merging a reverted merge image::images/undomerge-revert3.png[History after re-merging a reverted merge] -In this example, `M` and `^M` cancel out. -`^^M` effectively merges in the changes from `C3` and `C4`, and `C8` merges in the changes from `C7`, so now `topic` is fully merged. +در این مثال، `M` و `^M` همدیگر را خنثی می‌کنند. +`^^M` عملاً تغییرات از `C3` و `C4` را ادغام می‌کند و `C8` تغییرات از `C7` را وارد می‌کند، بنابراین اکنون شاخه‌ی `topic` کاملاً ادغام شده است. -==== Other Types of Merges +==== Other Types of Merges (انواع دیگر ادغام‌ها) -So far we've covered the normal merge of two branches, normally handled with what is called the "`recursive`" strategy of merging. -There are other ways to merge branches together however. -Let's cover a few of them quickly. +تا اینجا ما ادغام معمول دو شاخه را پوشش دادیم که معمولاً با استراتژی ادغام به نام "`recursive`" انجام می‌شود. +اما روش‌های دیگری هم برای ادغام شاخه‌ها وجود دارد. +بیایید چند مورد از آن‌ها را سریع بررسی کنیم. -===== Our or Theirs Preference +===== Our or Theirs Preference (اولویت ما یا آن‌ها) -First of all, there is another useful thing we can do with the normal "`recursive`" mode of merging. -We've already seen the `ignore-all-space` and `ignore-space-change` options which are passed with a `-X` but we can also tell Git to favor one side or the other when it sees a conflict. +اول از همه، یک قابلیت مفید دیگر در حالت معمول ادغام "`recursive`" وجود دارد. +ما قبلاً گزینه‌های `ignore-all-space` و `ignore-space-change` را که با `-X` منتقل می‌شوند دیدیم، اما می‌توانیم به گیت بگوییم که در صورت بروز تعارض، طرف یکی از شاخه‌ها را ترجیح دهد. -By default, when Git sees a conflict between two branches being merged, it will add merge conflict markers into your code and mark the file as conflicted and let you resolve it. -If you would prefer for Git to simply choose a specific side and ignore the other side instead of letting you manually resolve the conflict, you can pass the `merge` command either a `-Xours` or `-Xtheirs`. +به طور پیش‌فرض، وقتی گیت تعارضی بین دو شاخه در حال ادغام می‌بیند، نشانگرهای تعارض را در کد اضافه می‌کند و فایل را به حالت تعارض‌دار درمی‌آورد تا شما آن را حل کنید. +اگر ترجیح می‌دهید گیت به‌جای اینکه شما دستی تعارض را حل کنید، یکی از طرفین را به طور کامل انتخاب کند و طرف دیگر را نادیده بگیرد، می‌توانید به دستور `merge` گزینه‌های `-Xours` یا `-Xtheirs` را بدهید. -If Git sees this, it will not add conflict markers. -Any differences that are mergeable, it will merge. -Any differences that conflict, it will simply choose the side you specify in whole, including binary files. +اگر گیت این گزینه‌ها را ببیند، نشانگر تعارض نمی‌گذارد. +هر تفاوتی که قابل ادغام باشد را ادغام می‌کند. +هر تفاوتی که تعارض داشته باشد، به سادگی طرف مشخص شده توسط شما را به طور کامل انتخاب می‌کند، حتی فایل‌های باینری را. -If we go back to the "`hello world`" example we were using before, we can see that merging in our branch causes conflicts. +اگر به مثال "`hello world`" که قبلاً داشتیم برگردیم، می‌بینیم ادغام شاخه‌ی ما باعث تعارض می‌شود. [source,console] ---- @@ -639,7 +623,7 @@ Resolved 'hello.rb' using previous resolution. Automatic merge failed; fix conflicts and then commit the result. ---- -However if we run it with `-Xours` or `-Xtheirs` it does not. +اما اگر با `-Xours` یا `-Xtheirs` اجرا شود، تعارضی ایجاد نمی‌شود. [source,console] ---- @@ -652,17 +636,17 @@ Merge made by the 'recursive' strategy. create mode 100644 test.sh ---- -In that case, instead of getting conflict markers in the file with "`hello mundo`" on one side and "`hola world`" on the other, it will simply pick "`hola world`". -However, all the other non-conflicting changes on that branch are merged successfully in. +در این حالت، به جای اینکه نشانگرهای تعارض در فایل با "`hello mundo`" در یک طرف و "`hola world`" در طرف دیگر ظاهر شود، به سادگی "`hola world`" را انتخاب می‌کند. +با این حال، تمام تغییرات غیر متعارض دیگر در آن شاخه به درستی ادغام می‌شوند. -This option can also be passed to the `git merge-file` command we saw earlier by running something like `git merge-file --ours` for individual file merges. +این گزینه همچنین می‌تواند به دستور `git merge-file` که قبلاً دیدیم داده شود، مثلاً با اجرای `git merge-file --ours` برای ادغام فایل‌های جداگانه. -If you want to do something like this but not have Git even try to merge changes from the other side in, there is a more draconian option, which is the "`ours`" merge _strategy_. -This is different from the "`ours`" recursive merge _option_. +اگر بخواهید کاری مشابه انجام دهید اما نخواهید گیت حتی تلاش کند تغییرات طرف دیگر را ادغام کند، گزینه‌ی سختگیرانه‌تری به نام استراتژی ادغام "`ours`" وجود دارد. +این متفاوت است از گزینه‌ی "`ours`" در ادغام بازگشتی. -This will basically do a fake merge. -It will record a new merge commit with both branches as parents, but it will not even look at the branch you're merging in. -It will simply record as the result of the merge the exact code in your current branch. +این عملاً یک ادغام جعلی انجام می‌دهد. +یک کامیت ادغام جدید با هر دو شاخه به عنوان والدین ثبت می‌کند، اما حتی به شاخه‌ای که می‌خواهید ادغام کنید نگاه نمی‌کند. +در نتیجه ادغام، دقیقاً کد شاخه‌ی فعلی شما ثبت می‌شود. [source,console] ---- @@ -672,11 +656,11 @@ $ git diff HEAD HEAD~ $ ---- -You can see that there is no difference between the branch we were on and the result of the merge. +می‌بینید که هیچ تفاوتی بین شاخه‌ای که روی آن بودیم و نتیجه ادغام وجود ندارد. -This can often be useful to basically trick Git into thinking that a branch is already merged when doing a merge later on. -For example, say you branched off a `release` branch and have done some work on it that you will want to merge back into your `master` branch at some point. -In the meantime some bugfix on `master` needs to be backported into your `release` branch. -You can merge the bugfix branch into the `release` branch and also `merge -s ours` the same branch into your `master` branch (even though the fix is already there) so when you later merge the `release` branch again, there are no conflicts from the bugfix. +این اغلب مفید است تا گیت را فریب دهید که شاخه‌ای قبلاً ادغام شده است وقتی بعداً می‌خواهید ادغام کنید. +برای مثال، فرض کنید از شاخه‌ی `release` یک شاخه گرفته‌اید و روی آن کاری انجام داده‌اید که می‌خواهید بعداً به شاخه‌ی `master` بازگردانید. +در همین حین، یک رفع اشکال روی `master` نیاز به انتقال به شاخه‌ی `release` دارد. +می‌توانید شاخه‌ی رفع اشکال را به `release` ادغام کنید و همچنین همان شاخه را با گزینه‌ی `merge -s ours` به `master` ادغام کنید (حتی اگر رفع اشکال قبلاً در آن باشد) تا وقتی بعداً شاخه‌ی `release` را دوباره ادغام می‌کنید، تعارضی از رفع اشکال پیش نیاید. include::subtree-merges.asc[] From e4f8cf4974b9013dca5d94694dcaae70aad8445f Mon Sep 17 00:00:00 2001 From: Yasin Date: Fri, 22 Aug 2025 22:40:46 +0330 Subject: [PATCH 483/549] translate(07-git-tools): translated bundeling to persian --- .idea/workspace.xml | 47 +++++++++--------- book/07-git-tools/sections/bundling.asc | 64 ++++++++----------------- 2 files changed, 43 insertions(+), 68 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dc64c49e..2c144c97 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,7 @@ - - - - + @@ -65,12 +62,12 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/06-github", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.git.unshallow": "true", + "git-widget-placeholder": "book/translation/07-git-tools", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "settings.editor.selected.configurable": "preferences.keymap", + "to.speed.mode.migration.done": "true", + "vue.rearranger.settings.migration": "true" } -}</component> +} diff --git a/book/07-git-tools/sections/bundling.asc b/book/07-git-tools/sections/bundling.asc index 79cb1b8a..1d3f1ce5 100644 --- a/book/07-git-tools/sections/bundling.asc +++ b/book/07-git-tools/sections/bundling.asc @@ -1,20 +1,13 @@ [[_bundling]] -=== Bundling +=== Bundling (بسته‌بندی) -Though we've covered the common ways to transfer Git data over a network (HTTP, SSH, etc), there is actually one more way to do so that is not commonly used but can actually be quite useful. +اگرچه روش‌های معمول انتقال داده‌های Git از طریق شبکه (HTTP، SSH و غیره) را بررسی کرده‌ایم، اما در واقع یک روش دیگر هم برای این کار وجود دارد که معمولاً کمتر استفاده می‌شود اما می‌تواند بسیار کاربردی باشد. -Git is capable of "`bundling`" its data into a single file. -This can be useful in various scenarios. -Maybe your network is down and you want to send changes to your co-workers. -Perhaps you're working somewhere offsite and don't have access to the local network for security reasons. -Maybe your wireless/ethernet card just broke. -Maybe you don't have access to a shared server for the moment, you want to email someone updates and you don't want to transfer 40 commits via `format-patch`. +Git قادر است داده‌های خود را در قالب یک فایل واحد «بسته‌بندی» (bundle) کند. این قابلیت در موقعیت‌های مختلفی مفید است. شاید شبکه شما قطع شده و می‌خواهید تغییرات را به همکارانتان ارسال کنید. شاید در مکانی خارج از محل کار هستید و به دلایل امنیتی به شبکه محلی دسترسی ندارید. ممکن است کارت بی‌سیم یا اترنت شما خراب شده باشد. یا شاید در حال حاضر به سرور مشترک دسترسی ندارید و می‌خواهید به کسی به‌روزرسانی‌ها را ایمیل کنید بدون اینکه بخواهید ۴۰ کامیت را از طریق `format-patch` ارسال کنید. -This is where the `git bundle` command can be helpful. -The `bundle` command will package up everything that would normally be pushed over the wire with a `git push` command into a binary file that you can email to someone or put on a flash drive, then unbundle into another repository. +در اینجا دستور `git bundle` می‌تواند به کمک شما بیاید. دستور `bundle` همه چیزهایی را که معمولاً با دستور `git push` روی شبکه ارسال می‌شود، در قالب یک فایل باینری بسته‌بندی می‌کند که می‌توانید آن را برای کسی ایمیل کنید یا روی یک فلش‌درایو بگذارید و سپس در مخزن دیگری از حالت بسته خارج (unbundle) کنید. -Let's see a simple example. -Let's say you have a repository with two commits: +بیایید یک مثال ساده ببینیم. فرض کنید مخزنی با دو کامیت دارید: [source,console] ---- @@ -32,7 +25,7 @@ Date: Wed Mar 10 07:34:01 2010 -0800 First commit ---- -If you want to send that repository to someone and you don't have access to a repository to push to, or simply don't want to set one up, you can bundle it with `git bundle create`. +اگر بخواهید این مخزن را برای کسی بفرستید و دسترسی به مخزنی برای push کردن ندارید، یا اصلاً نمی‌خواهید یک مخزن تنظیم کنید، می‌توانید با دستور `git bundle create` آن را بسته‌بندی کنید. [source,console] ---- @@ -44,14 +37,11 @@ Writing objects: 100% (6/6), 441 bytes, done. Total 6 (delta 0), reused 0 (delta 0) ---- -Now you have a file named `repo.bundle` that has all the data needed to re-create the repository's `master` branch. -With the `bundle` command you need to list out every reference or specific range of commits that you want to be included. -If you intend for this to be cloned somewhere else, you should add HEAD as a reference as well as we've done here. +حالا یک فایل به نام `repo.bundle` دارید که همه داده‌های لازم برای بازسازی شاخه `master` مخزن را در خود دارد. هنگام استفاده از دستور `bundle` باید همه مرجع‌ها (references) یا بازه‌های مشخصی از کامیت‌ها که می‌خواهید در بسته قرار بگیرند را لیست کنید. اگر قصد دارید این بسته در جای دیگری کلون شود، باید HEAD را هم به عنوان مرجع اضافه کنید، همانطور که اینجا انجام دادیم. -You can email this `repo.bundle` file to someone else, or put it on a USB drive and walk it over. +می‌توانید فایل `repo.bundle` را برای شخص دیگری ایمیل کنید یا روی یک فلش‌درایو کپی کرده و به او تحویل دهید. -On the other side, say you are sent this `repo.bundle` file and want to work on the project. -You can clone from the binary file into a directory, much like you would from a URL. +طرف مقابل، وقتی این فایل `repo.bundle` را دریافت کرد و خواست روی پروژه کار کند، می‌تواند مانند کلون کردن از یک URL، از روی این فایل باینری کلون کند. [source,console] ---- @@ -64,9 +54,9 @@ $ git log --oneline b1ec324 First commit ---- -If you don't include HEAD in the references, you have to also specify `-b master` or whatever branch is included because otherwise it won't know what branch to check out. +اگر HEAD را در مراجع وارد نکنید، باید با گزینه `-b master` یا هر شاخه‌ای که شامل آن است، مشخص کنید که چه شاخه‌ای باید چک‌اوت شود، وگرنه Git نمی‌داند کدام شاخه را باید باز کند. -Now let's say you do three commits on it and want to send the new commits back via a bundle on a USB stick or email. +حالا فرض کنیم سه کامیت جدید روی آن انجام دادید و می‌خواهید این کامیت‌های جدید را از طریق بسته‌بندی روی فلش‌درایو یا ایمیل ارسال کنید. [source,console] ---- @@ -78,14 +68,9 @@ c99cf5b Fourth commit - second repo b1ec324 First commit ---- -First we need to determine the range of commits we want to include in the bundle. -Unlike the network protocols which figure out the minimum set of data to transfer over the network for us, we'll have to figure this out manually. -Now, you could just do the same thing and bundle the entire repository, which will work, but it's better to just bundle up the difference - just the three commits we just made locally. +ابتدا باید بازه کامیت‌هایی که می‌خواهید در بسته قرار دهید را مشخص کنیم. برخلاف پروتکل‌های شبکه که حداقل داده موردنیاز برای انتقال را به طور اتوماتیک تشخیص می‌دهند، اینجا باید خودمان این کار را انجام دهیم. البته می‌توانید کل مخزن را بسته‌بندی کنید که جواب می‌دهد، اما بهتر است فقط تفاوت‌ها یعنی همان سه کامیتی که به صورت محلی اضافه کرده‌اید را بسته‌بندی کنید. -In order to do that, you'll have to calculate the difference. -As we described in <>, you can specify a range of commits in a number of ways. -To get the three commits that we have in our `master` branch that weren't in the branch we originally cloned, we can use something like `origin/master..master` or `master ^origin/master`. -You can test that with the `log` command. +برای این کار باید تفاوت را محاسبه کنید. همانطور که در <> توضیح داده‌ایم، می‌توانید بازه کامیت‌ها را به روش‌های مختلف مشخص کنید. برای گرفتن سه کامیتی که در شاخه `master` داریم و در شاخه‌ای که ابتدا کلون کرده‌ایم نبود، می‌توانیم از عباراتی مانند `origin/master..master` یا `master ^origin/master` استفاده کنیم. می‌توانید این را با دستور `log` آزمایش کنید. [source,console] ---- @@ -95,8 +80,7 @@ c99cf5b Fourth commit - second repo 7011d3d Third commit - second repo ---- -So now that we have the list of commits we want to include in the bundle, let's bundle them up. -We do that with the `git bundle create` command, giving it a filename we want our bundle to be and the range of commits we want to go into it. +حالا که لیست کامیت‌هایی که می‌خواهیم در بسته قرار دهیم را داریم، آن‌ها را بسته‌بندی می‌کنیم. این کار را با دستور `git bundle create` انجام می‌دهیم، به آن نام فایلی که می‌خواهیم بسته ما داشته باشد و بازه کامیت‌ها را می‌دهیم. [source,console] ---- @@ -108,11 +92,9 @@ Writing objects: 100% (9/9), 775 bytes, done. Total 9 (delta 0), reused 0 (delta 0) ---- -Now we have a `commits.bundle` file in our directory. -If we take that and send it to our partner, she can then import it into the original repository, even if more work has been done there in the meantime. +حالا فایل `commits.bundle` در دایرکتوری ما ایجاد شده است. اگر این فایل را برای همکارتان ارسال کنیم، او می‌تواند آن را در مخزن اصلی وارد کند، حتی اگر در این فاصله کارهای بیشتری روی مخزن انجام شده باشد. -When she gets the bundle, she can inspect it to see what it contains before she imports it into her repository. -The first command is the `bundle verify` command that will make sure the file is actually a valid Git bundle and that you have all the necessary ancestors to reconstitute it properly. +وقتی او بسته را دریافت کرد، می‌تواند قبل از وارد کردن آن به مخزنش، محتویات آن را بررسی کند. اولین دستور، `bundle verify` است که مطمئن می‌شود فایل واقعاً یک بسته معتبر Git است و همه پیشینه‌های لازم برای بازسازی آن را دارید. [source,console] ---- @@ -124,8 +106,7 @@ The bundle requires these 1 ref ../commits.bundle is okay ---- -If the bundler had created a bundle of just the last two commits they had done, rather than all three, the original repository would not be able to import it, since it is missing requisite history. -The `verify` command would have looked like this instead: +اگر بسته‌بند فقط آخرین دو کامیتی که انجام داده بود را بسته‌بندی کرده بود به جای هر سه، مخزن اصلی قادر به وارد کردن آن نبود چون تاریخچه لازم ناقص بود. دستور `verify` به این صورت بود: [source,console] ---- @@ -134,8 +115,7 @@ error: Repository lacks these prerequisite commits: error: 7011d3d8fc200abe0ad561c011c3852a4b7bbe95 Third commit - second repo ---- -However, our first bundle is valid, so we can fetch in commits from it. -If you want to see what branches are in the bundle that can be imported, there is also a command to just list the heads: +اما بسته اول ما معتبر است، پس می‌توانیم کامیت‌ها را از آن دریافت کنیم. اگر بخواهید ببینید چه شاخه‌هایی در بسته وجود دارد که می‌توان وارد کرد، دستور جداگانه‌ای برای لیست کردن سرشاخه‌ها (heads) وجود دارد: [source,console] ---- @@ -143,9 +123,7 @@ $ git bundle list-heads ../commits.bundle 71b84daaf49abed142a373b6e5c59a22dc6560dc refs/heads/master ---- -The `verify` sub-command will tell you the heads as well. -The point is to see what can be pulled in, so you can use the `fetch` or `pull` commands to import commits from this bundle. -Here we'll fetch the `master` branch of the bundle to a branch named `other-master` in our repository: +دستور `verify` هم به شما سرشاخه‌ها را نشان می‌دهد. هدف این است که ببینید چه چیزی قابل دریافت است، تا بتوانید از دستورات `fetch` یا `pull` برای وارد کردن کامیت‌ها از این بسته استفاده کنید. در اینجا شاخه `master` بسته را به شاخه‌ای به نام `other-master` در مخزن خود fetch می‌کنیم: [source,console] ---- @@ -154,7 +132,7 @@ From ../commits.bundle * [new branch] master -> other-master ---- -Now we can see that we have the imported commits on the `other-master` branch as well as any commits we've done in the meantime in our own `master` branch. +حالا می‌بینیم که کامیت‌های وارد شده در شاخه `other-master` وجود دارند و همچنین هر کامیتی که در همین فاصله روی شاخه `master` خودمان انجام داده‌ایم. [source,console] ---- @@ -168,4 +146,4 @@ $ git log --oneline --decorate --graph --all * b1ec324 First commit ---- -So, `git bundle` can be really useful for sharing or doing network-type operations when you don't have the proper network or shared repository to do so. +پس، دستور `git bundle` می‌تواند بسیار مفید باشد برای به اشتراک‌گذاری یا انجام عملیات مشابه شبکه وقتی که دسترسی به شبکه یا مخزن مشترک مناسب ندارید. \ No newline at end of file From dd59c29b1a99130a44f1412d45d8458d5d93db1a Mon Sep 17 00:00:00 2001 From: Yasin Date: Fri, 22 Aug 2025 22:48:16 +0330 Subject: [PATCH 484/549] translate(07-git-tools): translated credentials to persian --- book/07-git-tools/sections/credentials.asc | 172 ++++++++++----------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index 7c7bc6ed..bf2e7c5b 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -1,50 +1,50 @@ [[_credential_caching]] -=== Credential Storage +=== Credential Storage (ذخیره‌سازی اطلاعات ورود) (((credentials))) (((git commands, credential))) -If you use the SSH transport for connecting to remotes, it's possible for you to have a key without a passphrase, which allows you to securely transfer data without typing in your username and password. -However, this isn't possible with the HTTP protocols -- every connection needs a username and password. -This gets even harder for systems with two-factor authentication, where the token you use for a password is randomly generated and unpronounceable. - -Fortunately, Git has a credentials system that can help with this. -Git has a few options provided in the box: - -* The default is not to cache at all. - Every connection will prompt you for your username and password. -* The "`cache`" mode keeps credentials in memory for a certain period of time. - None of the passwords are ever stored on disk, and they are purged from the cache after 15 minutes. -* The "`store`" mode saves the credentials to a plain-text file on disk, and they never expire. - This means that until you change your password for the Git host, you won't ever have to type in your credentials again. - The downside of this approach is that your passwords are stored in cleartext in a plain file in your home directory. -* If you're using macOS, Git comes with an "`osxkeychain`" mode, which caches credentials in the secure keychain that's attached to your system account. - This method stores the credentials on disk, and they never expire, but they're encrypted with the same system that stores HTTPS certificates and Safari auto-fills. -* If you're using Windows, you can enable the *Git Credential Manager* feature when installing https://gitforwindows.org/[Git for Windows] or separately install https://github.com/git-ecosystem/git-credential-manager/releases/latest[the latest GCM] as a standalone service. - This is similar to the "`osxkeychain`" helper described above, but uses the Windows Credential Store to control sensitive information. - It can also serve credentials to WSL1 or WSL2. - See https://github.com/git-ecosystem/git-credential-manager#readme[GCM Install Instructions] for more information. - -You can choose one of these methods by setting a Git configuration value: +اگر از پروتکل SSH برای اتصال به مخازن راه دور استفاده می‌کنید، ممکن است کلیدی بدون عبارت رمز داشته باشید که به شما اجازه می‌دهد بدون وارد کردن نام کاربری و رمز عبور، به‌صورت امن داده‌ها را منتقل کنید. +با این حال، این امکان در پروتکل‌های HTTP وجود ندارد — هر اتصال نیازمند نام کاربری و رمز عبور است. +این موضوع برای سیستم‌هایی که از احراز هویت دو مرحله‌ای استفاده می‌کنند، دشوارتر می‌شود؛ جایی که توکنی که به‌عنوان رمز عبور استفاده می‌کنید به‌صورت تصادفی تولید شده و غیرقابل تلفظ است. + +خوشبختانه، گیت یک سیستم مدیریت اطلاعات ورود دارد که می‌تواند در این زمینه کمک کند. +گیت چند گزینه پیش‌فرض ارائه می‌دهد: + +* حالت پیش‌فرض، عدم کش کردن است. + در این حالت هر بار اتصال، از شما نام کاربری و رمز عبور درخواست می‌شود. +* حالت "`cache`" اطلاعات ورود را به‌صورت موقت در حافظه نگه می‌دارد. + هیچ رمز عبوری روی دیسک ذخیره نمی‌شود و پس از ۱۵ دقیقه از حافظه پاک می‌شوند. +* حالت "`store`" اطلاعات ورود را در فایلی به‌صورت متن ساده روی دیسک ذخیره می‌کند و هیچ‌گاه منقضی نمی‌شوند. + این بدان معناست که تا زمانی که رمز عبور خود را در میزبان گیت تغییر ندهید، دیگر نیازی به وارد کردن دوباره اطلاعات ورود نخواهید داشت. + نقطه ضعف این روش این است که رمزهای عبور به‌صورت متن ساده در فایلی در پوشه خانگی شما ذخیره می‌شوند. +* اگر از macOS استفاده می‌کنید، گیت دارای حالت "`osxkeychain`" است که اطلاعات ورود را در زنجیره کلید ایمن سیستم شما ذخیره می‌کند. + این روش اطلاعات را روی دیسک ذخیره می‌کند و هیچ‌گاه منقضی نمی‌شوند، اما با همان سیستمی رمزگذاری می‌شوند که گواهی‌های HTTPS و پرکردن خودکار سافاری را نگه می‌دارد. +* اگر از ویندوز استفاده می‌کنید، می‌توانید هنگام نصب https://gitforwindows.org/ [گیت برای ویندوز] قابلیت *Git Credential Manager* را فعال کنید یا به‌صورت جداگانه جدیدترین نسخه https://github.com/git-ecosystem/git-credential-manager/releases/latest [GCM] را به‌عنوان سرویس مستقل نصب نمایید. + این سیستم مشابه کمک‌یار "`osxkeychain`" است ولی از فروشگاه اعتبار ویندوز برای مدیریت اطلاعات حساس استفاده می‌کند. + همچنین می‌تواند اطلاعات ورود را به WSL1 یا WSL2 ارائه دهد. + برای اطلاعات بیشتر به https://github.com/git-ecosystem/git-credential-manager#readme [دستورالعمل نصب GCM] مراجعه کنید. + +شما می‌توانید یکی از این روش‌ها را با تنظیم مقدار پیکربندی گیت انتخاب کنید: [source,console] ---- $ git config --global credential.helper cache ---- -Some of these helpers have options. -The "`store`" helper can take a `--file ` argument, which customizes where the plain-text file is saved (the default is `~/.git-credentials`). -The "`cache`" helper accepts the `--timeout ` option, which changes the amount of time its daemon is kept running (the default is "`900`", or 15 minutes). -Here's an example of how you'd configure the "`store`" helper with a custom file name: +برخی از این کمک‌یارها گزینه‌هایی دارند. +کمک‌یار "`store`" می‌تواند آرگومان `--file <مسیر>` را دریافت کند که محل ذخیره‌سازی فایل متن ساده را تعیین می‌کند (به‌صورت پیش‌فرض `~/.git-credentials` است). +کمک‌یار "`cache`" گزینه `--timeout <ثانیه>` را می‌پذیرد که مدت زمان فعال بودن سرویس را تغییر می‌دهد (پیش‌فرض "`900`" ثانیه یا ۱۵ دقیقه است). +در اینجا نمونه‌ای از چگونگی پیکربندی کمک‌یار "`store`" با نام فایل سفارشی آمده است: [source,console] ---- $ git config --global credential.helper 'store --file ~/.my-credentials' ---- -Git even allows you to configure several helpers. -When looking for credentials for a particular host, Git will query them in order, and stop after the first answer is provided. -When saving credentials, Git will send the username and password to *all* of the helpers in the list, and they can choose what to do with them. -Here's what a `.gitconfig` would look like if you had a credentials file on a thumb drive, but wanted to use the in-memory cache to save some typing if the drive isn't plugged in: +گیت حتی اجازه می‌دهد چندین کمک‌یار را پیکربندی کنید. +هنگام جستجوی اطلاعات ورود برای یک میزبان خاص، گیت به ترتیب از آنها می‌پرسد و بعد از دریافت اولین پاسخ متوقف می‌شود. +هنگام ذخیره‌سازی اطلاعات، گیت نام کاربری و رمز عبور را به *تمام* کمک‌یارهای فهرست ارسال می‌کند و هر کدام می‌توانند تصمیم بگیرند چه کاری انجام دهند. +در اینجا نمونه‌ای از فایل `.gitconfig` است که فایل اطلاعات ورود روی یک درایو فلش ذخیره شده اما می‌خواهید از کش حافظه برای کاهش تایپ در صورت عدم اتصال درایو استفاده کنید: [source,ini] ---- @@ -53,14 +53,14 @@ Here's what a `.gitconfig` would look like if you had a credentials file on a th helper = cache --timeout 30000 ---- -==== Under the Hood +==== Under the Hood (پشت صحنه) -How does this all work? -Git's root command for the credential-helper system is `git credential`, which takes a command as an argument, and then more input through stdin. +این سیستم چگونه کار می‌کند؟ +فرمان اصلی گیت برای سیستم کمک‌یار اطلاعات ورود، `git credential` است که یک فرمان را به‌عنوان آرگومان می‌گیرد و سپس ورودی بیشتری از طریق stdin دریافت می‌کند. -This might be easier to understand with an example. -Let's say that a credential helper has been configured, and the helper has stored credentials for `mygithost`. -Here's a session that uses the "`fill`" command, which is invoked when Git is trying to find credentials for a host: +این موضوع با یک مثال آسان‌تر درک می‌شود. +فرض کنید کمک‌یار اطلاعات ورود پیکربندی شده و اطلاعات ورود برای `mygithost` ذخیره شده است. +در اینجا جلسه‌ای است که از فرمان "`fill`" استفاده می‌کند، فرمانی که هنگام تلاش گیت برای یافتن اطلاعات ورود برای یک میزبان فراخوانی می‌شود: [source,console] ---- @@ -84,15 +84,15 @@ username=bob password=s3cre7 ---- -<1> This is the command line that initiates the interaction. -<2> Git-credential is then waiting for input on stdin. - We provide it with the things we know: the protocol and hostname. -<3> A blank line indicates that the input is complete, and the credential system should answer with what it knows. -<4> Git-credential then takes over, and writes to stdout with the bits of information it found. -<5> If credentials are not found, Git asks the user for the username and password, and provides them back to the invoking stdout (here they're attached to the same console). +<1> این خط فرمان است که تعامل را آغاز می‌کند. +<2> سپس git-credential منتظر ورودی روی stdin می‌ماند. + اطلاعاتی که می‌دانیم را می‌دهیم: پروتکل و نام میزبان. +<3> یک خط خالی نشان می‌دهد که ورودی کامل است و سیستم اطلاعات ورود باید پاسخ دهد. +<4> سپس git-credential کنترل را به دست می‌گیرد و اطلاعاتی که یافته را روی stdout می‌نویسد. +<5> اگر اطلاعات ورود یافت نشود، گیت از کاربر نام کاربری و رمز عبور را می‌پرسد و آنها را به خروجی می‌فرستد (که در اینجا به همان کنسول متصل است). -The credential system is actually invoking a program that's separate from Git itself; which one and how depends on the `credential.helper` configuration value. -There are several forms it can take: +سیستم اطلاعات ورود در واقع برنامه‌ای جدا از خود گیت را اجرا می‌کند؛ اینکه کدام برنامه و چگونه بستگی به مقدار پیکربندی `credential.helper` دارد. +این برنامه‌ها اشکال مختلفی دارند: [options="header"] |====== @@ -103,20 +103,20 @@ There are several forms it can take: | `!f() { echo "password=s3cre7"; }; f` | Code after `!` evaluated in shell |====== -So the helpers described above are actually named `git-credential-cache`, `git-credential-store`, and so on, and we can configure them to take command-line arguments. -The general form for this is "`git-credential-foo [args] .`" -The stdin/stdout protocol is the same as git-credential, but they use a slightly different set of actions: +پس کمک‌یارهای بالا در واقع برنامه‌های `git-credential-cache`، `git-credential-store` و غیره هستند و می‌توانیم آنها را با آرگومان‌های خط فرمان پیکربندی کنیم. +شکل کلی این است: "`git-credential-foo [آرگومان‌ها] <عمل>.`" +پروتکل stdin/stdout همان `git-credential` است اما مجموعه‌ای کمی متفاوت از اعمال را به کار می‌برند: -* `get` is a request for a username/password pair. -* `store` is a request to save a set of credentials in this helper's memory. -* `erase` purge the credentials for the given properties from this helper's memory. +* `get` درخواست جفت نام کاربری/رمز عبور است. +* `store` درخواست ذخیره یک مجموعه اطلاعات ورود در حافظه این کمک‌یار است. +* `erase` پاک کردن اطلاعات ورود مربوط به مشخصات داده شده از حافظه این کمک‌یار است. -For the `store` and `erase` actions, no response is required (Git ignores it anyway). -For the `get` action, however, Git is very interested in what the helper has to say. -If the helper doesn't know anything useful, it can simply exit with no output, but if it does know, it should augment the provided information with the information it has stored. -The output is treated like a series of assignment statements; anything provided will replace what Git already knows. +برای اعمال `store` و `erase` پاسخی لازم نیست (گیت آن را نادیده می‌گیرد). +اما برای `get` گیت بسیار علاقه‌مند است به آنچه کمک‌یار می‌گوید. +اگر کمک‌یار اطلاعات مفیدی نداشته باشد، می‌تواند بدون خروجی خارج شود، اما اگر داشته باشد، باید اطلاعات ارائه شده را با داده‌های ذخیره شده خودش تکمیل کند. +خروجی مانند یک سری دستورات انتساب تلقی می‌شود؛ هر چیزی که ارائه شود جایگزین آنچه گیت قبلاً می‌دانسته می‌شود. -Here's the same example from above, but skipping `git-credential` and going straight for `git-credential-store`: +در اینجا همان مثال بالا آمده است، اما به جای `git-credential` مستقیم به `git-credential-store` می‌رویم: [source,console] ---- @@ -133,52 +133,52 @@ username=bob <3> password=s3cre7 ---- -<1> Here we tell `git-credential-store` to save some credentials: the username "`bob`" and the password "`s3cre7`" are to be used when `https://mygithost` is accessed. -<2> Now we'll retrieve those credentials. - We provide the parts of the connection we already know (`https://mygithost`), and an empty line. -<3> `git-credential-store` replies with the username and password we stored above. +<1> اینجا به `git-credential-store` می‌گوییم که اطلاعات ورود را ذخیره کند: نام کاربری "`bob`" و رمز عبور "`s3cre7`" برای دسترسی به `https://mygithost`. +<2> حالا می‌خواهیم این اطلاعات را بازیابی کنیم. + اجزای ارتباطی که می‌دانیم (`https://mygithost`) را می‌دهیم و سپس یک خط خالی. +<3> `git-credential-store` با نام کاربری و رمز عبوری که ذخیره کرده بودیم پاسخ می‌دهد. -Here's what the `~/git.store` file looks like: +فایل `~/git.store` به این شکل است: [source,ini] ---- https://bob:s3cre7@mygithost ---- -It's just a series of lines, each of which contains a credential-decorated URL. -The `osxkeychain` and `wincred` helpers use the native format of their backing stores, while `cache` uses its own in-memory format (which no other process can read). +فقط یک سری خطوط است که هر کدام شامل یک آدرس URL همراه با اطلاعات ورود است. +کمک‌یارهای `osxkeychain` و `wincred` از فرمت بومی فروشگاه‌های پشتیبان خود استفاده می‌کنند، در حالی که `cache` از فرمت حافظه داخلی خود استفاده می‌کند (که هیچ فرآیند دیگری نمی‌تواند بخواند). -==== A Custom Credential Cache +==== A Custom Credential Cache (کش اطلاعات ورود سفارشی) -Given that `git-credential-store` and friends are separate programs from Git, it's not much of a leap to realize that _any_ program can be a Git credential helper. -The helpers provided by Git cover many common use cases, but not all. -For example, let's say your team has some credentials that are shared with the entire team, perhaps for deployment. -These are stored in a shared directory, but you don't want to copy them to your own credential store, because they change often. -None of the existing helpers cover this case; let's see what it would take to write our own. -There are several key features this program needs to have: +با توجه به اینکه `git-credential-store` و دوستان برنامه‌هایی جدا از گیت هستند، به‌راحتی می‌توان فهمید که _هر_ برنامه‌ای می‌تواند کمک‌یار اطلاعات ورود گیت باشد. +کمک‌یارهای ارائه شده توسط گیت بسیاری از موارد رایج را پوشش می‌دهند، اما همه را نه. +مثلاً فرض کنید تیم شما اطلاعات ورود مشترکی دارد که بین همه اعضا به اشتراک گذاشته شده، مثلاً برای استقرار. +این اطلاعات در پوشه مشترکی ذخیره شده اما نمی‌خواهید آن‌ها را در فروشگاه اطلاعات ورود خود کپی کنید چون مرتباً تغییر می‌کنند. +هیچ‌کدام از کمک‌یارهای موجود این حالت را پوشش نمی‌دهند؛ بیایید ببینیم برای نوشتن یکی از آنها چه باید کرد. +ویژگی‌های کلیدی که این برنامه باید داشته باشد: -. The only action we need to pay attention to is `get`; `store` and `erase` are write operations, so we'll just exit cleanly when they're received. -. The file format of the shared-credential file is the same as that used by `git-credential-store`. -. The location of that file is fairly standard, but we should allow the user to pass a custom path just in case. +. تنها عملی که باید به آن توجه کنیم `get` است؛ `store` و `erase` عملیات نوشتن هستند، پس هنگام دریافت آن‌ها به‌سادگی به‌خوبی خارج می‌شویم. +. فرمت فایل اطلاعات ورود مشترک همان فرمت استفاده شده توسط `git-credential-store` است. +. محل آن فایل نسبتاً استاندارد است، اما باید اجازه داد کاربر مسیر دلخواهش را نیز وارد کند. -Once again, we'll write this extension in Ruby, but any language will work so long as Git can execute the finished product. -Here's the full source code of our new credential helper: +دوباره این افزونه را با زبان روبی می‌نویسیم، اما هر زبان دیگری هم مناسب است مادامی که گیت بتواند آن را اجرا کند. +در اینجا کد کامل منبع کمک‌یار جدید ما آمده است: [source,ruby] ---- include::../git-credential-read-only[] ---- -<1> Here we parse the command-line options, allowing the user to specify the input file. - The default is `~/.git-credentials`. -<2> This program only responds if the action is `get` and the backing-store file exists. -<3> This loop reads from stdin until the first blank line is reached. - The inputs are stored in the `known` hash for later reference. -<4> This loop reads the contents of the storage file, looking for matches. - If the protocol, host, and username from `known` match this line, the program prints the results to stdout and exits. +<1> اینجا گزینه‌های خط فرمان را تجزیه می‌کنیم و اجازه می‌دهیم کاربر مسیر فایل ورودی را مشخص کند. + پیش‌فرض `~/.git-credentials` است. +<2> این برنامه تنها وقتی پاسخ می‌دهد که عمل `get` باشد و فایل ذخیره‌سازی موجود باشد. +<3> این حلقه از stdin می‌خواند تا خط خالی اول برسد. + ورودی‌ها در هش `known` برای مراجعه بعدی ذخیره می‌شوند. +<4> این حلقه محتوای فایل ذخیره‌سازی را می‌خواند و به دنبال تطابق می‌گردد. + اگر پروتکل، میزبان و نام کاربری در `known` با این خط تطابق داشت، برنامه نتایج را به stdout چاپ می‌کند و خارج می‌شود. -We'll save our helper as `git-credential-read-only`, put it somewhere in our `PATH` and mark it executable. -Here's what an interactive session looks like: +کمک‌یار خود را به نام `git-credential-read-only` ذخیره کنید، آن را در جایی از مسیر سیستم قرار دهید و اجرایی کنید. +در اینجا نمونه جلسه تعاملی آمده است: [source,console] ---- @@ -193,11 +193,11 @@ username=bob password=s3cre7 ---- -Since its name starts with "`git-`", we can use the simple syntax for the configuration value: +از آنجا که نام آن با «git-» شروع می‌شود، می‌توانیم از دستور ساده برای مقدار پیکربندی استفاده کنیم: [source,console] ---- $ git config --global credential.helper 'read-only --file /mnt/shared/creds' ---- -As you can see, extending this system is pretty straightforward, and can solve some common problems for you and your team. +همان‌طور که می‌بینید، گسترش این سیستم بسیار ساده است و می‌تواند برخی مشکلات رایج شما و تیم‌تان را حل کند. \ No newline at end of file From 3ed1896ca5ee7e139d33301ffa9a7b0098d181f5 Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 26 Aug 2025 10:49:26 +0330 Subject: [PATCH 485/549] translate(07-git-tools): translated debugging to persian --- .idea/workspace.xml | 39 +++++----- book/07-git-tools/sections/debugging.asc | 92 ++++++++++++------------ 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2c144c97..f5499d5b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,9 @@ - + + + @@ -100,24 +102,24 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/07-git-tools", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + &quot;keyToString&quot;: { + &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;, + &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, + &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, + &quot;git-widget-placeholder&quot;: &quot;book/translation/07-git-tools&quot;, + &quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;, + &quot;last_opened_file_path&quot;: &quot;/Users/mac/Projects/WebstormProjects/Github/progit2-fa&quot;, + &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, + &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, + &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, + &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, + &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, + &quot;settings.editor.selected.configurable&quot;: &quot;preferences.keymap&quot;, + &quot;to.speed.mode.migration.done&quot;: &quot;true&quot;, + &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; } -} +} @@ -146,6 +148,7 @@ + diff --git a/book/07-git-tools/sections/debugging.asc b/book/07-git-tools/sections/debugging.asc index dd615c1c..fd0c1495 100644 --- a/book/07-git-tools/sections/debugging.asc +++ b/book/07-git-tools/sections/debugging.asc @@ -1,16 +1,16 @@ -=== Debugging with Git +=== Debugging with Git (اشکال‌زدایی با گیت) -In addition to being primarily for version control, Git also provides a couple commands to help you debug your source code projects. -Because Git is designed to handle nearly any type of content, these tools are pretty generic, but they can often help you hunt for a bug or culprit when things go wrong. +علاوه بر اینکه گیت عمدتاً برای کنترل نسخه طراحی شده، چند فرمان نیز دارد که به شما در اشکال‌زدایی پروژه‌های کد منبع کمک می‌کند. +از آنجا که گیت برای مدیریت تقریباً هر نوع محتوایی طراحی شده، این ابزارها بسیار کلی هستند، اما اغلب می‌توانند هنگام بروز مشکل به شما در پیدا کردن باگ یا مقصر کمک کنند. [[_file_annotation]] -==== File Annotation +==== File Annotation (حاشیه‌نویسی فایل) -If you track down a bug in your code and want to know when it was introduced and why, file annotation is often your best tool. -It shows you what commit was the last to modify each line of any file. -So if you see that a method in your code is buggy, you can annotate the file with `git blame` to determine which commit was responsible for the introduction of that line. +اگر باگی در کدتان پیدا کردید و می‌خواهید بدانید کی و چرا به وجود آمده، حاشیه‌نویسی فایل معمولاً بهترین ابزار شماست. +این ابزار نشان می‌دهد که آخرین کمیت (commit) که هر خط از هر فایلی را تغییر داده، کدام است. +پس اگر متدی در کد شما مشکل دارد، می‌توانید با دستور `git blame` فایل را حاشیه‌نویسی کنید تا مشخص شود کدام کمیت مسئول ایجاد آن خط بوده است. -The following example uses `git blame` to determine which commit and committer was responsible for lines in the top-level Linux kernel `Makefile` and, further, uses the `-L` option to restrict the output of the annotation to lines 69 through 82 of that file: +مثال زیر از `git blame` برای تعیین کمیت و کمیت‌کننده مسئول خطوطی در فایل `Makefile` هسته لینوکس در سطح بالایی استفاده می‌کند و همچنین با گزینه `-L` خروجی حاشیه‌نویسی را به خطوط ۶۹ تا ۸۲ آن فایل محدود می‌کند: [source,console] ---- @@ -31,18 +31,18 @@ b8b0618cf6fab (Cheng Renquan 2009-05-26 16:03:07 +0800 70) KBUILD_VERBOSE = $ 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 82) endif ---- -Notice that the first field is the partial SHA-1 of the commit that last modified that line. -The next two fields are values extracted from that commit -- the author name and the authored date of that commit -- so you can easily see who modified that line and when. -After that come the line number and the content of the file. -Also note the `^1da177e4c3f4` commit lines, where the `^` prefix designates lines that were introduced in the repository's initial commit and have remained unchanged ever since. -This is a tad confusing, because now you've seen at least three different ways that Git uses the `^` to modify a commit SHA-1, but that is what it means here. +توجه کنید که فیلد اول، شناسه SHA-1 جزئی کمیتی است که آخرین تغییر را روی آن خط اعمال کرده. +دو فیلد بعدی اطلاعاتی از آن کمیت هستند — نام نویسنده و تاریخ نوشتن کمیت — تا به راحتی بفهمید چه کسی و چه زمانی آن خط را تغییر داده است. +بعد از آن شماره خط و محتوای فایل نمایش داده می‌شود. +همچنین به خطوط کمیت‌هایی که با `^1da177e4c3f4` شروع می‌شوند توجه کنید؛ پیشوند `^` نشان می‌دهد این خطوط از اولین کمیت مخزن آمده‌اند و از آن زمان تاکنون تغییر نکرده‌اند. +این کمی گیج‌کننده است، چون تاکنون حداقل سه کاربرد مختلف `^` را در گیت دیده‌اید، ولی این معنی آن در اینجا است. -Another cool thing about Git is that it doesn't track file renames explicitly. -It records the snapshots and then tries to figure out what was renamed implicitly, after the fact. -One of the interesting features of this is that you can ask it to figure out all sorts of code movement as well. -If you pass `-C` to `git blame`, Git analyzes the file you're annotating and tries to figure out where snippets of code within it originally came from if they were copied from elsewhere. -For example, say you are refactoring a file named `GITServerHandler.m` into multiple files, one of which is `GITPackUpload.m`. -By blaming `GITPackUpload.m` with the `-C` option, you can see where sections of the code originally came from: +یکی دیگر از نکات جالب گیت این است که تغییر نام فایل‌ها را به طور صریح دنبال نمی‌کند. +گیت تنها اسنپ‌شات‌ها را ثبت می‌کند و بعداً به طور ضمنی تلاش می‌کند بفهمد چه چیزی تغییر نام داده است. +یکی از ویژگی‌های جالب این موضوع این است که می‌توانید از گیت بخواهید انواع حرکات کد را هم تشخیص دهد. +اگر به `git blame` گزینه `-C` را بدهید، گیت فایل حاشیه‌نویسی شده را تحلیل می‌کند و سعی می‌کند بفهمد بخش‌هایی از کد که در آن وجود دارد در اصل از کجا کپی شده‌اند. +مثلاً فرض کنید دارید فایلی به نام `GITServerHandler.m` را به چند فایل تقسیم‌بندی می‌کنید که یکی از آن‌ها `GITPackUpload.m` است. +با اجرای `git blame` روی `GITPackUpload.m` همراه گزینه `-C` می‌توانید ببینید بخش‌های مختلف کد قبلاً از کجا آمده‌اند: [source,console] ---- @@ -62,22 +62,22 @@ ad11ac80 GITPackUpload.m (Scott 2009-03-24 150) 56ef2caf GITServerHandler.m (Scott 2009-01-05 153) ---- -This is really useful. -Normally, you get as the original commit the commit where you copied the code over, because that is the first time you touched those lines in this file. -Git tells you the original commit where you wrote those lines, even if it was in another file. + این واقعاً مفید است. +معمولاً، شما به عنوان کامیت اصلی، کامیتی را می‌گیرید که کد را از آنجا کپی کرده‌اید، زیرا آن اولین باری است که آن خطوط را در این فایل تغییر داده‌اید. +گیت به شما کامیت اصلی که آن خطوط را نوشته‌اید نشان می‌دهد، حتی اگر آن کد در فایل دیگری بوده باشد. [[_binary_search]] -==== Binary Search +==== Binary Search (سرچ باینری) -Annotating a file helps if you know where the issue is to begin with. -If you don't know what is breaking, and there have been dozens or hundreds of commits since the last state where you know the code worked, you'll likely turn to `git bisect` for help. -The `bisect` command does a binary search through your commit history to help you identify as quickly as possible which commit introduced an issue. +حاشیه‌نویسی یک فایل زمانی مفید است که بدانید مشکل از کجا شروع شده است. +اگر نمی‌دانید چه چیزی باعث خطا شده و از آخرین وضعیتی که مطمئن بودید کد درست کار می‌کرده، ده‌ها یا صدها کامیت انجام شده باشد، احتمالاً به سراغ `git bisect` می‌روید تا کمک بگیرید. +دستور `bisect` یک جستجوی دودویی در تاریخچه کامیت‌ها انجام می‌دهد تا به شما کمک کند هرچه سریع‌تر مشخص کنید کدام کامیت مشکل را ایجاد کرده است. -Let's say you just pushed out a release of your code to a production environment, you're getting bug reports about something that wasn't happening in your development environment, and you can't imagine why the code is doing that. -You go back to your code, and it turns out you can reproduce the issue, but you can't figure out what is going wrong. -You can _bisect_ the code to find out. -First you run `git bisect start` to get things going, and then you use `git bisect bad` to tell the system that the current commit you're on is broken. -Then, you must tell bisect when the last known good state was, using `git bisect good `: +فرض کنیم به تازگی نسخه‌ای از کد خود را به محیط تولید فرستاده‌اید، گزارش باگ دریافت می‌کنید که در محیط توسعه شما رخ نمی‌داده و نمی‌توانید تصور کنید چرا کد اینگونه رفتار می‌کند. +به کد خود برمی‌گردید و متوجه می‌شوید که می‌توانید مشکل را بازتولید کنید، اما نمی‌توانید بفهمید چه چیزی اشتباه است. +می‌توانید با _bisect_ کردن کد، علت را پیدا کنید. +ابتدا با دستور `git bisect start` کار را آغاز می‌کنید، سپس با `git bisect bad` به سیستم می‌گویید که کامیتی که در حال حاضر روی آن هستید خراب است. +بعد باید به bisect بگویید آخرین وضعیت خوب کی بوده، با استفاده از دستور `git bisect good `: [source,console] ---- @@ -88,10 +88,10 @@ Bisecting: 6 revisions left to test after this [ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] Error handling on repo ---- -Git figured out that about 12 commits came between the commit you marked as the last good commit (v1.0) and the current bad version, and it checked out the middle one for you. -At this point, you can run your test to see if the issue exists as of this commit. -If it does, then it was introduced sometime before this middle commit; if it doesn't, then the problem was introduced sometime after the middle commit. -It turns out there is no issue here, and you tell Git that by typing `git bisect good` and continue your journey: +گیت متوجه می‌شود که حدود ۱۲ کامیت بین کامیتی که به عنوان آخرین کامیت خوب مشخص کرده‌اید (مثلاً v1.0) و نسخه خراب فعلی وجود دارد، و کامیت وسط را برای شما چک‌اوت می‌کند. +در این مرحله می‌توانید تست خود را اجرا کنید تا ببینید مشکل در این کامیت وجود دارد یا خیر. +اگر وجود داشت، یعنی مشکل قبل از این کامیت وسطی رخ داده؛ اگر نبود، مشکل بعد از این کامیت وسطی ایجاد شده است. +فرض کنید در این کامیت مشکلی نیست، پس با تایپ `git bisect good` به گیت اطلاع می‌دهید و ادامه می‌دهید: [source,console] ---- @@ -100,8 +100,8 @@ Bisecting: 3 revisions left to test after this [b047b02ea83310a70fd603dc8cd7a6cd13d15c04] Secure this thing ---- -Now you're on another commit, halfway between the one you just tested and your bad commit. -You run your test again and find that this commit is broken, so you tell Git that with `git bisect bad`: +حالا روی کامیت دیگری هستید، دقیقاً در نیمه‌راه بین کامیتی که تست کردید و کامیت خراب. +دوباره تست را اجرا می‌کنید و می‌بینید این کامیت خراب است، پس با `git bisect bad` به گیت اطلاع می‌دهید: [source,console] ---- @@ -110,8 +110,8 @@ Bisecting: 1 revisions left to test after this [f71ce38690acf49c1f3c9bea38e09d82a5ce6014] Drop exceptions table ---- -This commit is fine, and now Git has all the information it needs to determine where the issue was introduced. -It tells you the SHA-1 of the first bad commit and shows some of the commit information and which files were modified in that commit so you can figure out what happened that may have introduced this bug: +این کامیت خوب است و حالا گیت تمام اطلاعات لازم را دارد تا محل ایجاد مشکل را مشخص کند. +گیت شناسه SHA-1 اولین کامیت خراب را نشان می‌دهد و بخشی از اطلاعات کامیت و فایل‌هایی که در آن تغییر کرده‌اند را نمایش می‌دهد تا بتوانید بفهمید چه اتفاقی افتاده که این باگ ایجاد شده است: [source,console] ---- @@ -127,17 +127,17 @@ Date: Tue Jan 27 14:48:32 2009 -0800 f24d3c6ebcfc639b1a3814550e62d60b8e68a8e4 M config ---- -When you're finished, you should run `git bisect reset` to reset your HEAD to where you were before you started, or you'll end up in a weird state: +وقتی کارتان تمام شد، باید دستور `git bisect reset` را اجرا کنید تا HEAD به جایی که قبل از شروع بودید بازگردد، وگرنه در وضعیت عجیبی قرار می‌گیرید: [source,console] ---- $ git bisect reset ---- -This is a powerful tool that can help you check hundreds of commits for an introduced bug in minutes. -In fact, if you have a script that will exit 0 if the project is good or non-0 if the project is bad, you can fully automate `git bisect`. -First, you again tell it the scope of the bisect by providing the known bad and good commits. -You can do this by listing them with the `bisect start` command if you want, listing the known bad commit first and the known good commit second: +این ابزار قدرتمندی است که می‌تواند در عرض چند دقیقه صدها کامیت را برای یافتن باگی که ایجاد شده بررسی کند. +در واقع، اگر اسکریپتی داشته باشید که اگر پروژه سالم بود مقدار ۰ خروجی دهد و اگر خراب بود مقدار غیرصفر، می‌توانید `git bisect` را به طور کامل خودکار کنید. +ابتدا دوباره محدوده bisect را مشخص می‌کنید با ارائه کامیت‌های خراب و سالم شناخته شده. +می‌توانید این کار را با دستور `bisect start` انجام دهید، ابتدا کامیت خراب و سپس کامیت سالم را وارد کنید: [source,console] ---- @@ -145,5 +145,5 @@ $ git bisect start HEAD v1.0 $ git bisect run test-error.sh ---- -Doing so automatically runs `test-error.sh` on each checked-out commit until Git finds the first broken commit. -You can also run something like `make` or `make tests` or whatever you have that runs automated tests for you. +با این کار، به طور خودکار اسکریپت `test-error.sh` روی هر کامیت چک‌اوت شده اجرا می‌شود تا گیت اولین کامیت خراب را پیدا کند. +همچنین می‌توانید چیزی مانند `make` یا `make tests` یا هر چیزی که برای اجرای تست‌های خودکار دارید را اجرا کنید. \ No newline at end of file From 0ae7b9218127c9b0f55cfb0801338edf1094198c Mon Sep 17 00:00:00 2001 From: Yasin Date: Tue, 26 Aug 2025 23:00:34 +0330 Subject: [PATCH 486/549] translate(07-git-tools): translated interactive staging to persian --- .idea/workspace.xml | 41 ++++++----- .../sections/interactive-staging.asc | 72 +++++++++---------- 2 files changed, 58 insertions(+), 55 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f5499d5b..05eb5861 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,7 +5,8 @@ - + + @@ -102,28 +103,29 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/07-git-tools", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.git.unshallow": "true", + "git-widget-placeholder": "book/translation/07-git-tools", + "junie.onboarding.icon.badge.shown": "true", + "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "settings.editor.selected.configurable": "preferences.keymap", + "to.speed.mode.migration.done": "true", + "vue.rearranger.settings.migration": "true" } -}</component> +} - + @@ -149,6 +151,7 @@ + diff --git a/book/07-git-tools/sections/interactive-staging.asc b/book/07-git-tools/sections/interactive-staging.asc index 1f7a5635..42c976b1 100644 --- a/book/07-git-tools/sections/interactive-staging.asc +++ b/book/07-git-tools/sections/interactive-staging.asc @@ -1,11 +1,11 @@ [[_interactive_staging]] -=== Interactive Staging +=== Interactive Staging (مرحله‌بندی تعاملی) -In this section, you'll look at a few interactive Git commands that can help you craft your commits to include only certain combinations and parts of files. -These tools are helpful if you modify a number of files extensively, then decide that you want those changes to be partitioned into several focused commits rather than one big messy commit. -This way, you can make sure your commits are logically separate changesets and can be reviewed easily by the developers working with you. +در این بخش، با چند دستور تعاملی Git آشنا می‌شوید که به شما کمک می‌کنند کامیت‌های خود را طوری تنظیم کنید که تنها شامل ترکیب‌ها و بخش‌های مشخصی از فایل‌ها باشند. +این ابزارها زمانی مفیدند که شما تغییرات زیادی در چندین فایل ایجاد کرده‌اید و بعد تصمیم می‌گیرید که این تغییرات به جای یک کامیت بزرگ و نامنظم، به چند کامیت متمرکز و جداگانه تقسیم شوند. +به این ترتیب، می‌توانید مطمئن شوید که کامیت‌های شما مجموعه تغییرات منطقی و جداگانه‌ای هستند که به راحتی توسط توسعه‌دهندگان دیگر قابل بررسی می‌باشند. -If you run `git add` with the `-i` or `--interactive` option, Git enters an interactive shell mode, displaying something like this: +اگر دستور `git add` را با گزینه `-i` یا `--interactive` اجرا کنید، Git وارد حالت تعاملی می‌شود و چیزی شبیه به این نمایش داده می‌شود: [source,console] ---- @@ -21,14 +21,14 @@ $ git add -i What now> ---- -You can see that this command shows you a much different view of your staging area than you're probably used to -- basically, the same information you get with `git status` but a bit more succinct and informative. -It lists the changes you've staged on the left and unstaged changes on the right. +شما می‌بینید که این دستور نمایی کاملاً متفاوت از ناحیه مرحله‌بندی (staging area) نشان می‌دهد که احتمالا به آن عادت ندارید — اساساً همان اطلاعاتی که با `git status` می‌گیرید اما به صورت خلاصه‌تر و مفیدتر. +تغییراتی که مرحله‌بندی شده‌اند در سمت چپ و تغییرات مرحله‌بندی نشده در سمت راست فهرست می‌شوند. -After this comes a "`Commands`" section, which allows you to do a number of things like staging and unstaging files, staging parts of files, adding untracked files, and displaying diffs of what has been staged. +پس از آن بخش «دستورات» قرار دارد که به شما اجازه می‌دهد کارهای متعددی مانند مرحله‌بندی و بازگرداندن فایل‌ها، مرحله‌بندی بخش‌هایی از فایل‌ها، افزودن فایل‌های دنبال‌نشده، و نمایش تفاوت‌های مرحله‌بندی شده را انجام دهید. -==== Staging and Unstaging Files +==== Staging and Unstaging Files (مرحله‌بندی و بازگرداندن فایل‌ها) -If you type `u` or `2` (for update) at the `What now>` prompt, you're prompted for which files you want to stage: +اگر در پرامپت `What now>` حرف `u` یا عدد `2` (برای update) را تایپ کنید، از شما پرسیده می‌شود که کدام فایل‌ها را می‌خواهید مرحله‌بندی کنید: [source,console] ---- @@ -40,7 +40,7 @@ What now> u Update>> ---- -To stage the `TODO` and `index.html` files, you can type the numbers: +برای مرحله‌بندی فایل‌های `TODO` و `index.html` می‌توانید شماره‌های مربوطه را وارد کنید: [source,console] ---- @@ -52,8 +52,8 @@ Update>> 1,2 Update>> ---- -The `*` next to each file means the file is selected to be staged. -If you press Enter after typing nothing at the `Update>>` prompt, Git takes anything selected and stages it for you: +علامت `*` کنار هر فایل به این معناست که آن فایل برای مرحله‌بندی انتخاب شده است. +اگر پس از تایپ نکردن هیچ چیز در پرامپت `Update>>` کلید Enter را فشار دهید، Git هر چیزی که انتخاب شده باشد را مرحله‌بندی می‌کند: [source,console] ---- @@ -70,8 +70,8 @@ What now> s 3: unchanged +5/-1 lib/simplegit.rb ---- -Now you can see that the `TODO` and `index.html` files are staged and the `simplegit.rb` file is still unstaged. -If you want to unstage the `TODO` file at this point, you use the `r` or `3` (for revert) option: +اکنون می‌توانید ببینید که فایل‌های `TODO` و `index.html` مرحله‌بندی شده‌اند و فایل `simplegit.rb` هنوز مرحله‌بندی نشده است. +اگر در این مرحله بخواهید فایل `TODO` را از مرحله‌بندی خارج کنید، باید گزینه `r` یا عدد `3` (برای revert) را استفاده کنید: [source,console] ---- @@ -92,7 +92,7 @@ Revert>> [enter] reverted one path ---- -Looking at your Git status again, you can see that you've unstaged the `TODO` file: +اگر دوباره وضعیت Git خود را بررسی کنید، می‌بینید که فایل `TODO` از مرحله‌بندی خارج شده است: [source,console] ---- @@ -106,9 +106,9 @@ What now> s 3: unchanged +5/-1 lib/simplegit.rb ---- -To see the diff of what you've staged, you can use the `d` or `6` (for diff) command. -It shows you a list of your staged files, and you can select the ones for which you would like to see the staged diff. -This is much like specifying `git diff --cached` on the command line: +برای مشاهده تفاوت آنچه که مرحله‌بندی کرده‌اید، می‌توانید از دستور `d` یا عدد `6` (برای diff) استفاده کنید. +این دستور فهرستی از فایل‌های مرحله‌بندی شده را نشان می‌دهد و می‌توانید فایل‌هایی که می‌خواهید تفاوت‌های مرحله‌بندی آن‌ها را ببینید انتخاب کنید. +این کار مشابه اجرای `git diff --cached` در خط فرمان است: [source,console] ---- @@ -133,14 +133,14 @@ index 4d07108..4335f49 100644 \ No newline at end of file diff --git a/A-git-in-other-environments.asc b/A-git-in-other-environments.asc index 32d7f616..eb2f94ca 100644 --- a/A-git-in-other-environments.asc +++ b/A-git-in-other-environments.asc @@ -1,11 +1,11 @@ [[A-git-in-other-environments]] [appendix] -== Git in Other Environments +== گیت در محیط‌های دیگر (Git in Other Environments) -If you read through the whole book, you've learned a lot about how to use Git at the command line. -You can work with local files, connect your repository to others over a network, and work effectively with others. -But the story doesn't end there; Git is usually used as part of a larger ecosystem, and the terminal isn't always the best way to work with it. -Now we'll take a look at some of the other kinds of environments where Git can be useful, and how other applications (including yours) work alongside Git. + اگر کل کتاب را خوانده باشید، چیزهای زیادی دربارهٔ استفاده از گیت از طریق خط فرمان آموخته‌اید. +می‌توانید با فایل‌های محلی کار کنید، مخزن خود را از طریق شبکه به مخازن دیگر متصل کنید و به‌صورت مؤثر با دیگران همکاری کنید. +اما داستان به همین‌جا ختم نمی‌شود؛ گیت معمولاً بخشی از یک اکوسیستم بزرگ‌تر است و ترمینال همیشه بهترین راه کار با آن نیست. +حال به چند نوع دیگر از محیط‌هایی که گیت در آن‌ها کاربردی است نگاهی می‌اندازیم و بررسی می‌کنیم که چگونه برنامه‌های دیگر (از جمله برنامه‌های شما) در کنار گیت کار می‌کنند. include::book/A-git-in-other-environments/sections/guis.asc[] @@ -23,6 +23,6 @@ include::book/A-git-in-other-environments/sections/zsh.asc[] include::book/A-git-in-other-environments/sections/powershell.asc[] -=== Summary +=== خلاصه (Summary) -You've learned how to harness Git's power from inside the tools that you use during your everyday work, and also how to access Git repositories from your own programs. +آموخته‌اید چگونه از قدرت گیت درون ابزارهایی که در کار روزمره‌تان استفاده می‌کنید بهره ببرید و همچنین چگونه به مخازن گیت از طریق برنامه‌های خود دسترسی پیدا کنید. \ No newline at end of file From 988a6a55d5262bfd0ab76ff7d8046bc06f9f36b9 Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 24 Sep 2025 11:03:43 +0330 Subject: [PATCH 534/549] translate(sections-overview): translated B-embedding-git-in-your-applications to persian --- B-embedding-git-in-your-applications.asc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/B-embedding-git-in-your-applications.asc b/B-embedding-git-in-your-applications.asc index f3e60297..768b8f63 100644 --- a/B-embedding-git-in-your-applications.asc +++ b/B-embedding-git-in-your-applications.asc @@ -1,12 +1,12 @@ [[B-embedding-git-in-your-applications]] [appendix] -== Embedding Git in your Applications +== گنجاندن گیت در برنامه‌های شما (Embedding Git in your Applications) -If your application is for developers, chances are good that it could benefit from integration with source control. -Even non-developer applications, such as document editors, could potentially benefit from version-control features, and Git's model works very well for many different scenarios. +اگر برنامهٔ شما برای توسعه‌دهندگان است، احتمال زیادی وجود دارد که از یکپارچگی با سیستم کنترل نسخه بهره‌مند شود. +حتی برنامه‌های غیردِولپر، مانند ویرایشگرهای اسناد، نیز می‌توانند از قابلیت‌های کنترل نسخه سود ببرند و مدل گیت برای بسیاری از سناریوها به‌خوبی کار می‌کند. -If you need to integrate Git with your application, you have essentially two options: spawn a shell and call the `git` command-line program, or embed a Git library into your application. -Here we'll cover command-line integration and several of the most popular embeddable Git libraries. +اگر لازم است گیت را با برنامهٔ خود یکپارچه کنید، در اصل دو گزینه دارید: یک پوسته (شِل) اجرا کنید و برنامهٔ خط فرمان git را فراخوانی کنید، یا یک کتابخانهٔ گیت را در برنامهٔ خود جاسازی کنید. +در اینجا به یکپارچه‌سازی از طریق خط فرمان و چند مورد از محبوب‌ترین کتابخانه‌های قابل‌جاسازیِ گیت می‌پردازیم. include::book/B-embedding-git/sections/command-line.asc[] From 03966543a35c6c7fc29901b89eb789ff37f8df83 Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 24 Sep 2025 16:29:21 +0330 Subject: [PATCH 535/549] fix(headings): fixed headings titles format & translate untranslated sections --- .idea/git_toolbox_prj.xml | 15 ++++++ book/01-introduction/sections/installing.asc | 10 ++-- book/01-introduction/sections/what-is-git.asc | 12 ++--- book/02-git-basics/sections/aliases.asc | 2 +- .../sections/getting-a-repository.asc | 6 +-- .../sections/recording-changes.asc | 22 ++++---- book/02-git-basics/sections/remotes.asc | 12 ++--- book/02-git-basics/sections/tagging.asc | 30 +++++------ book/02-git-basics/sections/undoing.asc | 12 ++--- .../sections/viewing-history.asc | 4 +- .../sections/basic-branching-and-merging.asc | 8 +-- .../sections/branch-management.asc | 8 +-- book/03-git-branching/sections/nutshell.asc | 6 +-- book/03-git-branching/sections/rebasing.asc | 12 ++--- .../sections/remote-branches.asc | 8 +-- book/03-git-branching/sections/workflows.asc | 6 +-- .../sections/generating-ssh-key.asc | 2 +- book/04-git-server/sections/git-daemon.asc | 2 +- .../sections/git-on-a-server.asc | 8 +-- book/04-git-server/sections/gitlab.asc | 18 +++---- book/04-git-server/sections/gitweb.asc | 2 +- book/04-git-server/sections/hosted.asc | 2 +- book/04-git-server/sections/protocols.asc | 30 +++++------ .../sections/setting-up-server.asc | 2 +- book/04-git-server/sections/smart-http.asc | 46 ++++++++-------- .../sections/contributing.asc | 14 ++--- .../sections/distributed-workflows.asc | 12 ++--- .../sections/maintaining.asc | 32 ++++++------ .../sections/1-setting-up-account.asc | 12 ++--- book/06-github/sections/2-contributing.asc | 32 ++++++------ book/06-github/sections/3-maintaining.asc | 36 ++++++------- .../sections/4-managing-organization.asc | 8 +-- book/06-github/sections/5-scripting.asc | 18 +++---- .../sections/advanced-merging.asc | 24 ++++----- book/07-git-tools/sections/bundling.asc | 2 +- book/07-git-tools/sections/credentials.asc | 6 +-- book/07-git-tools/sections/debugging.asc | 6 +-- .../sections/interactive-staging.asc | 6 +-- book/07-git-tools/sections/replace.asc | 2 +- book/07-git-tools/sections/rerere.asc | 2 +- book/07-git-tools/sections/reset.asc | 32 ++++++------ .../sections/revision-selection.asc | 24 ++++----- .../sections/rewriting-history.asc | 20 +++---- book/07-git-tools/sections/searching.asc | 8 +-- book/07-git-tools/sections/signing.asc | 10 ++-- .../sections/stashing-cleaning.asc | 10 ++-- book/07-git-tools/sections/submodules.asc | 24 ++++----- book/07-git-tools/sections/subtree-merges.asc | 2 +- .../sections/attributes.asc | 18 +++---- book/08-customizing-git/sections/config.asc | 52 +++++++++---------- book/08-customizing-git/sections/hooks.asc | 20 +++---- book/08-customizing-git/sections/policy.asc | 12 ++--- .../sections/client-hg.asc | 12 ++--- .../sections/client-p4.asc | 28 +++++----- .../sections/client-svn.asc | 32 ++++++------ .../sections/import-custom.asc | 2 +- .../sections/import-hg.asc | 2 +- .../sections/import-p4.asc | 6 +-- .../sections/import-svn.asc | 2 +- .../10-git-internals/sections/environment.asc | 18 +++---- .../10-git-internals/sections/maintenance.asc | 8 +-- book/10-git-internals/sections/objects.asc | 8 +-- book/10-git-internals/sections/packfiles.asc | 2 +- .../sections/plumbing-porcelain.asc | 2 +- book/10-git-internals/sections/refs.asc | 8 +-- book/10-git-internals/sections/refspec.asc | 4 +- .../sections/transfer-protocols.asc | 20 +++---- .../sections/bash.asc | 2 +- .../sections/guis.asc | 14 ++--- .../sections/jetbrainsides.asc | 2 +- .../sections/powershell.asc | 12 ++--- .../sections/sublimetext.asc | 2 +- .../sections/visualstudio.asc | 2 +- .../sections/visualstudiocode.asc | 2 +- .../sections/zsh.asc | 2 +- .../B-embedding-git/sections/command-line.asc | 2 +- book/B-embedding-git/sections/dulwich.asc | 4 +- book/B-embedding-git/sections/go-git.asc | 6 +-- book/B-embedding-git/sections/jgit.asc | 10 ++-- book/B-embedding-git/sections/libgit2.asc | 14 ++--- book/contributors.asc | 2 +- book/preface_ben.asc | 2 +- 82 files changed, 488 insertions(+), 473 deletions(-) create mode 100644 .idea/git_toolbox_prj.xml diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 00000000..02b915b8 --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/book/01-introduction/sections/installing.asc b/book/01-introduction/sections/installing.asc index 8821ea61..bf658487 100644 --- a/book/01-introduction/sections/installing.asc +++ b/book/01-introduction/sections/installing.asc @@ -1,4 +1,4 @@ -=== Installing Git (نصب گیت) +=== نصب گیت (Installing Git) قبل از اینکه شروع به استفاده از گیت کنید، باید آن را روی کامپیوتر خود در دسترس قرار دهید. حتی اگر قبلاً نصب شده باشد، احتمالاً به‌روزرسانی به آخرین نسخه ایده خوبی است. شما می‌توانید آن را به‌صورت بسته نرم‌افزاری یا از طریق یک نصب‌کننده دیگر نصب کنید، یا کد منبع را دانلود کرده و خودتان آن را کامپایل کنید. @@ -9,7 +9,7 @@ اگرچه بیشتر دستورات استفاده‌شده حتی در نسخه‌های قدیمی‌تر گیت نیز باید کار کنند، اما ممکن است برخی از آن‌ها کار نکنند یا کمی متفاوت رفتار کنند. ==== -==== Installing on Linux (نصب در لینوکس) +==== نصب در لینوکس (Installing on Linux) (((Linux, installing))) اگر می‌خواهید ابزارهای پایه گیت را روی لینوکس از طریق یک نصب‌کننده باینری نصب کنید، معمولاً می‌توانید این کار را با استفاده از ابزار مدیریت بسته‌ای که همراه توزیع شماست انجام دهید. @@ -29,7 +29,7 @@ $ sudo apt install git-all برای گزینه‌های بیشتر، دستورالعمل نصب در چند توزیع مختلف یونیکس در وب‌سایت گیت به نشانی https://git-scm.com/download/linux[^] موجود است. -==== Installing on macOS (نصب در مک) +==== نصب در مک (Installing on macOS) (((macOS, installing))) روش‌های مختلفی برای نصب گیت روی مک‌اواس وجود دارد. @@ -49,7 +49,7 @@ $ git --version .Git macOS installer image::images/git-osx-installer.png[Git macOS installer] -==== Installing on Windows (نصب در ویندوز) +==== نصب در ویندوز (Installing on Windows) چند روش مختلف برای نصب گیت بر روی ویندوز وجود دارد. رسمی‌ترین نسخه را می‌توانید از وب‌سایت گیت دانلود کنید. @@ -59,7 +59,7 @@ image::images/git-osx-installer.png[Git macOS installer] برای نصب خودکار می‌توانید از بسته گیت در Chocolatey به آدرس https://community.chocolatey.org/packages/git استفاده کنید. توجه داشته باشید که بسته Chocolatey توسط جامعه کاربران نگهداری می‌شود. -==== Installing from Source (نصب از طریق سورس) +==== نصب از طریق سورس (Installing from Source) برخی افراد ممکن است ترجیح دهند Git را از سورس نصب کنند، زیرا نسخه به‌روزتری دریافت می‌کنند. نصب‌کننده‌های باینری معمولاً کمی عقب‌تر هستند، اما با پیشرفت Git در سال‌های اخیر، این تفاوت کمتر شده است. diff --git a/book/01-introduction/sections/what-is-git.asc b/book/01-introduction/sections/what-is-git.asc index 1060d3ac..2a6919db 100644 --- a/book/01-introduction/sections/what-is-git.asc +++ b/book/01-introduction/sections/what-is-git.asc @@ -1,10 +1,10 @@ [[what_is_git_section]] -=== What is Git? (گیت چیست؟) +=== گیت چیست؟ (What is Git?) پس، گیت به طور خلاصه چیست؟ این بخش مهمی است که باید به خوبی درک شود، زیرا اگر بفهمید گیت چیست و اصول پایه‌ای نحوه کار آن چگونه است، استفاده مؤثر از گیت برای شما احتمالاً بسیار آسان‌تر خواهد بود. وقتی در حال یادگیری گیت هستید، سعی کنید ذهن خود را از چیزهایی که ممکن است درباره سایر سیستم‌های کنترل نسخه مانند CVS، ساب‌ورژن یا پروفورس بدانید پاک کنید — این کار به شما کمک می‌کند تا هنگام استفاده از این ابزار از سردرگمی‌های ظریف جلوگیری کنید. اگرچه رابط کاربری گیت تا حدی شبیه به این سیستم‌های کنترل نسخه است، گیت اطلاعات را به روشی بسیار متفاوت ذخیره و پردازش می‌کند و درک این تفاوت‌ها به شما کمک می‌کند تا هنگام استفاده از آن دچار سردرگمی نشوید. -==== Snapshots, Not Differences (اسنپ شات ها، بدون تغییرات) +==== اسنپ شات ها، بدون تغییرات (Snapshots, Not Differences) تفاوت اصلی بین گیت و هر سیستم کنترل نسخه‌ی دیگری (از جمله ساب‌ورژن و مشابه‌ها) در نحوه‌ی تفکر گیت درباره داده‌هایش است. به طور مفهومی، بیشتر سیستم‌های دیگر اطلاعات را به صورت فهرستی از تغییرات مبتنی بر فایل ذخیره می‌کنند. این سیستم‌های دیگر (CVS، ساب‌ورژن، پروفورس و غیره) اطلاعاتی که ذخیره می‌کنند را به عنوان مجموعه‌ای از فایل‌ها و تغییراتی که در هر فایل در طول زمان ایجاد شده است، در نظر می‌گیرند (که معمولاً به آن کنترل نسخه مبتنی بر دلتا گفته می‌شود). @@ -25,7 +25,7 @@ image::images/snapshots.png[Git stores data as snapshots of the project over tim این باعث می شود که گیت بیشتر شبیه به یک فایل سیستم کوچک با برخی از ابزارهای فوق العاده قدرتمند ساخته شده در بالای آن باشد، نه فقط یک VCS. ما برخی از مزایایی را که با فکر کردن به داده های خود به این شکل به دست می آورید، بررسی خواهیم کرد وقتی که شاخه سازی گیت را در <> پوشش می دهیم. -==== Nearly Every Operation Is Local (تقریبا همه عملیات ها محلی هستند) +==== تقریبا همه عملیات ها محلی هستند (Nearly Every Operation Is Local) بیشتر عملیات در گیت فقط به فایل ها و منابع محلی برای کار نیاز دارد -- به طور کلی هیچ اطلاعاتی از کامپیوتر دیگری در شبکه شما مورد نیاز نیست. اگر شما به CVCS عادت کرده اید که در آن بیشتر عملیات ها دارای آن تاخیر شبکه هستند، این جنبه از گیت شما را به فکر می اندازد که خدایان سرعت، گیت را با قدرت های غیرمستقیم برکت داده اند. @@ -42,7 +42,7 @@ image::images/snapshots.png[Git stores data as snapshots of the project over tim به عنوان مثال، در Perforce، وقتی به سرور متصل نیستید، نمی توانید کارهای زیادی انجام دهید؛ در Subversion و CVS، می توانید فایل ها را ویرایش کنید، اما نمی توانید تغییرات را در پایگاه داده خود انجام دهید (زیرا پایگاه داده شما آفلاین است). این شاید چیز بزرگی به نظر نرسد، اما ممکن است تعجب کنید که چه تفاوت بزرگی می تواند ایجاد کند. -==== Git Has Integrity (گیت دارای یکپارچگی است) +==== گیت دارای یکپارچگی است (Git Has Integrity) همه چیز در گیت قبل از ذخیره شدن چک سوم می شود و سپس با آن چک سوم ارجاع داده می شود. این بدان معنی است که تغییر محتویات هر فایل یا دایرکتوری بدون اطلاع گیت غیرممکن است. @@ -61,7 +61,7 @@ image::images/snapshots.png[Git stores data as snapshots of the project over tim شما این ارزش های هش را در همه جا در گیت خواهید دید چون از آنها بسیار استفاده می کند. در واقع، گیت همه چیز را در پایگاه داده خود نه با نام فایل بلکه با ارزش هش محتوای آن ذخیره می کند. -==== Git Generally Only Adds Data (گیت به طور کلی فقط داده ها را اضافه می کند) +==== گیت به طور کلی فقط داده ها را اضافه می کند (Git Generally Only Adds Data) هنگامی که شما در گیت اعمال انجام می دهید، تقریبا همه آنها فقط داده ها را به پایگاه داده گیت اضافه می کنند. سخت است که سیستم کاری را انجام دهد که غیر قابل برگشت نباشد یا به هیچ وجه داده ها را پاک کند. @@ -70,7 +70,7 @@ image::images/snapshots.png[Git stores data as snapshots of the project over tim این باعث می شود استفاده از گیت لذت بخش باشد زیرا ما می دانیم که می توانیم بدون خطر به شدت خراب کردن چیزها آزمایش کنیم. برای نگاهی عمیق تر به نحوه ذخیره داده های گیت و چگونگی بازیابی داده هایی که به نظر می رسد گم شده اند، به <> مراجعه کنید. -==== The Three States (سه مرحله) +==== سه مرحله (The Three States) حالا توجه کنید -- این مهم ترین چیزی است که باید در مورد گیت به خاطر بسپارید اگر می خواهید بقیه فرآیند یادگیری شما بدون مشکل پیش برود. گیت سه حالت اصلی دارد که فایل های شما می توانند در آن باشند: _modified_، _staged_، و _committed_: diff --git a/book/02-git-basics/sections/aliases.asc b/book/02-git-basics/sections/aliases.asc index 6876f56e..0b24659b 100644 --- a/book/02-git-basics/sections/aliases.asc +++ b/book/02-git-basics/sections/aliases.asc @@ -1,5 +1,5 @@ [[_git_aliases]] -=== Git Aliases (نام مستعار گیت) +=== نام مستعار گیت (Git Aliases) (((aliases))) نام مستعار Git قبل از اینکه به فصل بعدی برویم، می خواهیم یک ویژگی را معرفی کنیم که می تواند تجربه Git شما را ساده تر، آسان تر و آشنا تر کند: نام مستعار. diff --git a/book/02-git-basics/sections/getting-a-repository.asc b/book/02-git-basics/sections/getting-a-repository.asc index af9c2777..dae171b6 100644 --- a/book/02-git-basics/sections/getting-a-repository.asc +++ b/book/02-git-basics/sections/getting-a-repository.asc @@ -1,5 +1,5 @@ [[_getting_a_repo]] -=== Getting a Git Repository (گرفتن یک مخزن گیت) +=== گرفتن یک مخزن گیت (Getting a Git Repository) شما معمولاً یک مخزن گیت را به یکی از دو روش بدست می آورید: @@ -8,7 +8,7 @@ در هر صورت، شما یک مخزن گیت در ماشین محلی خود دارید که آماده کار است. -==== Initializing a Repository in an Existing Directory (شروع یک مخزن در یک دایرکتوری موجود) +==== ایجاد مخزن در یک پوشه موجود (Initializing a Repository in an Existing Directory) اگر یک دایرکتوری پروژه دارید که در حال حاضر تحت کنترل نسخه نیست و می خواهید با گیت شروع به کنترل آن کنید، ابتدا باید به دایرکتوری آن پروژه بروید. اگر شما هرگز این کار را انجام نداده اید، بسته به اینکه کدام سیستم را اجرا می کنید، کمی متفاوت به نظر می رسد: @@ -54,7 +54,7 @@ $ git commit -m 'Initial project version' در این مرحله، شما یک مخزن گیت با فایل های ردیابی شده و یک commit اولیه دارید. [[_git_cloning]] -==== Cloning an Existing Repository (کلون کردن یک مخزن موجود) +==== کلون کردن یک مخزن موجود (Cloning an Existing Repository) اگر می خواهید یک کپی از یک مخزن Git موجود را دریافت کنید - به عنوان مثال، پروژه ای که می خواهید در آن مشارکت کنید - دستور مورد نیاز شما `git clone` است. اگر با سایر سیستم های VCS مانند Subversion آشنا هستید، متوجه خواهید شد که دستور "clone" است و نه "checkout". diff --git a/book/02-git-basics/sections/recording-changes.asc b/book/02-git-basics/sections/recording-changes.asc index 58b8c95a..f239b92e 100644 --- a/book/02-git-basics/sections/recording-changes.asc +++ b/book/02-git-basics/sections/recording-changes.asc @@ -1,4 +1,4 @@ -=== Recording Changes to the Repository (ثبت تغییرات در مخزن) +=== ثبت تغییرات در مخزن (Recording Changes to the Repository) در این مرحله، شما باید یک مخزن _bona fide_Git در ماشین محلی خود داشته باشید، و یک نسخه چک کردن یا کار کردن از تمام فایل های آن در مقابل شما. به طور معمول، شما می خواهید شروع به ایجاد تغییرات و ارسال عکس از آن تغییرات به مخزن خود را هر بار که پروژه به یک دولت شما می خواهید به ثبت برسد. @@ -17,7 +17,7 @@ image::images/lifecycle.png[The lifecycle of the status of your files] [[_checking_status]] -==== Checking the Status of Your Files (بررسی وضعیت فایل های شما) +==== بررسی وضعیت فایل های شما (Checking the Status of Your Files) ابزار اصلی که شما برای تعیین اینکه کدام فایل ها در کدام حالت هستند استفاده می کنید دستور `git status` است. اگر شما این دستور را مستقیماً بعد از یک کلان اجرا کنید، چیزی شبیه به این خواهید دید: @@ -68,7 +68,7 @@ Untracked اساساً به این معنی است که Git یک فایل را شما می خواهید شروع به شامل 'README' کنید، پس بیایید پرونده را ردیابی کنیم. [[_tracking_files]] -==== Tracking New Files (دنبال کردن فایل های جدید) +==== دنبال کردن فایل های جدید (Tracking New Files) برای شروع ردیابی یک فایل جدید، از دستور `git add` استفاده می کنید. برای شروع به ردیابی فایل "README" می توانید این را اجرا کنید: @@ -97,7 +97,7 @@ Changes to be committed: ممکن است به یاد داشته باشید که وقتی قبلاً `git init` را اجرا کردید، سپس `git add ` را اجرا کردید -- که برای شروع ردیابی فایل ها در دایرکتوری شما بود. دستور `git add` نام مسیر را برای یک فایل یا یک دایرکتوری می گیرد. اگر یک دایرکتوری باشد، دستور تمام فایل های موجود در آن دایرکتوری را به صورت تکراری اضافه می کند. -==== Staging Modified Files (مرحله بندی فایل های اصلاح شده) +==== مرحله بندی فایل های اصلاح شده (Staging Modified Files) بیایید یک فایل که قبلا ردیابی شده بود را تغییر دهیم. اگر شما یک فایل ردیابی شده قبلی به نام `CONTRIBUTING.md` را تغییر دهید و سپس دستور `git status` خود را دوباره اجرا کنید، چیزی شبیه به این را دریافت می کنید: @@ -184,7 +184,7 @@ Changes to be committed: modified: CONTRIBUTING.md ---- -==== Short Status (خلاصه وضعیت) +==== خلاصه وضعیت (Short Status) در حالی که خروجی وضعیت `git ` کاملاً جامع است ، اما کاملاً کلمه ای است. گیت همچنین دارای یک پرچم وضعیت کوتاه است تا بتوانید تغییرات خود را به روشی جمع و جور تر مشاهده کنید. @@ -206,7 +206,7 @@ M lib/simplegit.rb `Rakefile` اصلاح شد، مرحله ای شد و سپس دوباره اصلاح شد، بنابراین تغییراتی در آن وجود دارد که هم مرحله ای و هم غیر مرحله ای است. [[_ignoring]] -==== Ignoring Files (فایل های ایگنور شده) +==== فایل های ایگنور شده (Ignoring Files) اغلب، شما یک کلاس از فایل هایی دارید که نمی خواهید گیت به طور خودکار آنها را اضافه کند یا حتی به شما نشان دهد که آنها ردیابی نشده اند. این فایل ها به طور کلی به طور خودکار تولید می شوند مانند فایل های لاگ یا فایل هایی که توسط سیستم ساخت شما تولید می شوند. @@ -276,7 +276,7 @@ doc/**/*.pdf ==== [[_git_diff_staged]] -==== Viewing Your Staged and Unstaged Changes (مشاهده تغییرات مرحله ای و غیر مرحله ای شما) +==== مشاهده تغییرات آماده و آماده‌نشده (Viewing Your Staged and Unstaged Changes) اگر دستور `git status` برای شما مبهم است - شما می خواهید دقیقا بدانید که چه چیزی را تغییر داده اید، نه فقط اینکه کدام فایل ها تغییر کرده اند - شما می توانید از دستور `git diff` استفاده کنید. ما بعداً به جزئیات بیشتری در مورد "git diff" می پردازیم، اما احتمالاً بیشتر از همه برای پاسخ به این دو سوال از آن استفاده خواهید کرد: چه چیزی را تغییر داده اید اما هنوز اجرا نشده اید؟ @@ -414,7 +414,7 @@ index 8ebb991..643e24f 100644 ==== [[_committing_changes]] -==== Committing Your Changes (کامیت کردن تغییراتتان) +==== کامیت کردن تغییراتتان (Committing Your Changes) حالا که منطقه آماده سازی شما به روشی که می خواهید تنظیم شده، می توانید تغییرات خود را انجام دهید. به یاد داشته باشید که هر چیزی که هنوز مرحله ای نشده است - هر فایل ای که ایجاد کرده اید یا اصلاح کرده اید که از زمانی که آنها را ویرایش کرده اید اجرا نکرده اید - به این ارتکاب نمی رود. @@ -482,7 +482,7 @@ $ git commit -m "Story 182: fix benchmarks for speed" هر چیزی که شما تنظیم نکرده اید هنوز در آنجا اصلاح شده است؛ شما می توانید یک تعهد دیگر برای اضافه کردن آن به تاریخچه خود انجام دهید. هر بار که یک commit را انجام می دهید، یک عکس از پروژه خود را ضبط می کنید که می توانید بعداً به آن بازگردید یا با آن مقایسه کنید. -==== Skipping the Staging Area (عبور از محدوده استیج) +==== عبور از محدوده استیج (Skipping the Staging Area) (((staging area, skipping))) اگر چه می تواند برای ساخت commit ها به طور دقیق به همان شکل که می خواهید مفید باشد، اما منطقه ی مرحله بندی گاهی کمی پیچیده تر از آنچه در جریان کار شما نیاز دارید است. @@ -511,7 +511,7 @@ $ git commit -a -m 'Add new benchmarks' این کار راحت است، اما مراقب باشید؛ گاهی اوقات این پرچم باعث می شود تغییرات ناخواسته ای را وارد کنید. [[_removing_files]] -==== Removing Files (حذف فایل ها) +==== حذف فایل ها (Removing Files) (((files, removing))) برای حذف یک فایل از گیت، باید آن را از فایل های ردیابی شده خود حذف کنید (به طور دقیق تر، آن را از منطقه ردیابی شده خود حذف کنید) و سپس commit کنید. @@ -584,7 +584,7 @@ $ git rm \*~ این دستور تمام فایل هایی که نامشان با یک `~` به پایان می رسد را حذف می کند. [[_git_mv]] -==== Moving Files (جا به جایی فایل ها) +==== جا به جایی فایل ها (Moving Files) (((files, moving))) برخلاف بسیاری از VCS های دیگر، گیت به طور صریح حرکت فایل را ردیابی نمی کند. diff --git a/book/02-git-basics/sections/remotes.asc b/book/02-git-basics/sections/remotes.asc index 985ec7d6..1e43c863 100644 --- a/book/02-git-basics/sections/remotes.asc +++ b/book/02-git-basics/sections/remotes.asc @@ -1,5 +1,5 @@ [[_remote_repos]] -=== Working with Remotes (کار کردن با ریموت ها) +=== کار کردن با ریموت ها (Working with Remotes) برای اینکه بتوانید در هر پروژه گیت همکاری کنید، باید بدانید که چگونه مخازن از راه دور خود را مدیریت کنید. مخازن از راه دور نسخه هایی از پروژه شما هستند که در اینترنت یا شبکه جایی میزبانی می شوند. @@ -16,7 +16,7 @@ کار با چنین مخزن از راه دور هنوز هم شامل تمام استاندارد فشار، کشیدن و گرفتن عملیات به عنوان با هر از راه دور دیگر. ==== -==== Showing Your Remotes (نمایش ریموت ها) +==== نمایش ریموت ها (Showing Your Remotes) برای دیدن اینکه کدام سرورهای از راه دور را پیکربندی کرده اید، می توانید دستور `git remote` را اجرا کنید. نام های کوتاه هر دستگیره ای که مشخص کرده اید را لیست می کند. @@ -69,7 +69,7 @@ origin git@github.com:mojombo/grit.git (push) توجه داشته باشید که این کنترل های از راه دور از پروتکل های مختلفی استفاده می کنند؛ ما بیشتر در مورد این موضوع در <> صحبت خواهیم کرد. -==== Adding Remote Repositories (اضافه کردن مخازن از راه دور) +==== افزودن مخازن راه‌دور (Adding Remote Repositories) ما اشاره کرده ایم و برخی از تظاهرات را نشان داده ایم که چگونه دستور `git clone ` به طور ضمنی ریموت `origin ` را برای شما اضافه می کند. در اینجا نحوه اضافه کردن یک ریموت جدید به طور صریح است. @@ -106,7 +106,7 @@ From https://github.com/paulboone/ticgit ما در <> درباره شاخه ها و نحوه استفاده از آنها به طور مفصل تر صحبت خواهیم کرد. [[_fetching_and_pulling]] -==== Fetching and Pulling from Your Remotes (فچ و پول کردن از ریموت های شما) +==== فچ و پول کردن از ریموت های شما (Fetching and Pulling from Your Remotes) همانطور که دیدید، برای دریافت داده ها از پروژه های از راه دور، می توانید دستورات (((git commands, fetch))) را اجرا کنید. @@ -158,7 +158,7 @@ $ git push origin master برای اطلاعات دقیق تر در مورد نحوه ارسال به سرورهای از راه دور، به <> مراجعه کنید. [[_inspecting_remote]] -==== Inspecting a Remote (بازرسی ریموت) +==== بررسی مخزن راه‌دور (Inspecting a Remote) اگر می خواهید اطلاعات بیشتری در مورد یک ریموت خاص مشاهده کنید، می توانید از دستور `git remote show ` استفاده کنید.(((git commands, remote))) اگر شما این دستور را با یک نام کوتاه خاص اجرا کنید، مانند `origin`، چیزی شبیه به این به دست می آورید: @@ -213,7 +213,7 @@ $ git remote show origin این دستور نشان می دهد که چه شاخه ای به طور خودکار فشار داده می شود زمانی که شما `git push` را در حالی که در شاخه های خاص اجرا می کنید. همچنین به شما نشان می دهد که چه شاخه های از راه دور در سرور شما هنوز وجود ندارد، چه شاخه های از راه دور شما از سرور حذف شده است، و چندین شاخه محلی که قادر به ادغام به طور خودکار با شاخه های ردیابی از راه دور خود را هنگامی که شما اجرا `git pull`. -==== Renaming and Removing Remotes (تغییر نام یا حذف ریموت) +==== تغییر نام یا حذف ریموت (Renaming and Removing Remotes) شما می توانید `git remote rename` را اجرا کنید تا نام کوتاه یک ریموت را تغییر دهید. diff --git a/book/02-git-basics/sections/tagging.asc b/book/02-git-basics/sections/tagging.asc index cbaeb6dd..34aa5ac7 100644 --- a/book/02-git-basics/sections/tagging.asc +++ b/book/02-git-basics/sections/tagging.asc @@ -1,12 +1,12 @@ [[_git_tagging]] -=== Tagging (تگ کردن) +=== تگ کردن (Tagging) (((tags))) مانند اکثر VCS ها، گیت توانایی برچسب گذاری نقاط خاص در تاریخچه یک مخزن را به عنوان مهم دارد. به طور معمول، مردم از این قابلیت برای مشخص کردن نقاط انتشار (`v1.0`، `v2.0` و غیره) استفاده می کنند. در این بخش، شما یاد خواهید گرفت که چگونه برچسب های موجود را لیست کنید، چگونه برچسب ها را ایجاد و حذف کنید، و انواع مختلف برچسب ها چیست. -==== Listing Your Tags (لیست کردن تگ ها) +==== لیست کردن تگ ها (Listing Your Tags) فهرست کردن تگ های موجود در گیت ساده است. فقط تایپ کنید `git tag` (با اختیاری `-l` یا `--list`):(((git commands, tag))) @@ -47,7 +47,7 @@ v1.8.5.5 با این حال، اگر شما در حال ارائه یک الگوی کارد جوینده برای مطابقت با نام های برچسب هستید، استفاده از `-l` یا `--list` اجباری است. ==== -==== Creating Tags (ساخت تگ) +==== ساخت تگ (Creating Tags) گیت از دو نوع تگ پشتیبانی می کند: _lightweight_ و _annotated_. @@ -58,7 +58,7 @@ v1.8.5.5 به طور کلی توصیه می شود که شما برچسب های تفسیر شده ایجاد کنید تا بتوانید تمام این اطلاعات را داشته باشید؛ اما اگر شما یک برچسب موقت می خواهید یا به دلایلی نمی خواهید اطلاعات دیگر را نگه دارید، برچسب های سبک وزن نیز در دسترس هستند. [[_annotated_tags]] -==== Annotated Tags (برچسب های توضیح دار) +==== تگ‌های حاشیه‌گذاری‌شده (Annotated Tags) (((tags, annotated))) ایجاد یک برچسب با یادداشت در گیت ساده است. @@ -97,7 +97,7 @@ Date: Mon Mar 17 21:52:11 2008 -0700 این اطلاعات برچسب دار را نشان می دهد، تاریخ برچسب گذاری commit، و پیام تبصری قبل از نمایش اطلاعات commit. -==== Lightweight Tags (برچسب های سبک) +==== تگ‌های سبک (Lightweight Tags) (((tags, lightweight))) راه دیگری برای برچسب گذاری commit ها با یک برچسب سبک وزن است. @@ -128,7 +128,7 @@ Date: Mon Mar 17 21:52:11 2008 -0700 Change version number ---- -==== Tagging Later (بعداً برچسب می‌زنم) +==== برچسب‌گذاری بعدی (Tagging Later) شما همچنین می توانید بعد از اینکه از آنها گذشته اید، آنها را برچسب بزنید. فرض کنید که سابقه ی commit شما اینگونه باشد: @@ -185,7 +185,7 @@ Date: Sun Apr 27 20:43:35 2008 -0700 ---- [[_sharing_tags]] -==== Sharing Tags (اشتراک گذاری تگ ها) +==== اشتراک گذاری تگ ها (Sharing Tags) به طور پیش فرض، دستور `git push` برچسب ها را به سرورهای از راه دور منتقل نمی کند. شما باید به طور صریح تگ ها را به یک سرور مشترک پس از ایجاد آنها ارسال کنید. @@ -204,8 +204,8 @@ To git@github.com:schacon/simplegit.git * [new tag] v1.5 -> v1.5 ---- -If you have a lot of tags that you want to push up at once, you can also use the `--tags` option to the `git push` command. -This will transfer all of your tags to the remote server that are not already there. +اگر تعداد زیادی **tag** دارید که می‌خواهید همزمان ارسال کنید، می‌توانید از گزینه `--tags` در دستور `git push` استفاده کنید. +این کار تمام **tag**هایی را که هنوز در سرور راه‌دور وجود ندارند، منتقل می‌کند. [source,console] ---- @@ -223,11 +223,11 @@ To git@github.com:schacon/simplegit.git [NOTE] .`git push` pushes both types of tags ==== -`git push --tags` will push both lightweight and annotated tags. -There is currently no option to push only lightweight tags, but if you use `git push --follow-tags` only annotated tags will be pushed to the remote. +دستور `git push --tags` هر دو نوع **lightweight** و **annotated tag** را ارسال می‌کند. +در حال حاضر گزینه‌ای برای ارسال فقط **lightweight tags** وجود ندارد، اما اگر از `git push --follow-tags` استفاده کنید، تنها **annotated tags** به سرور راه‌دور ارسال خواهند شد. ==== -==== Deleting Tags (حذف تگ ها) +==== حذف تگ ها (Deleting Tags) برای حذف یک برچسب در مخزن محلی خود، می توانید از `git tag -d ` استفاده کنید. به عنوان مثال، می توانیم برچسب سبک وزن بالا را به صورت زیر حذف کنیم: @@ -259,7 +259,7 @@ To /git@github.com:schacon/simplegit.git $ git push origin --delete ---- -==== Checking out Tags (چک کردن تگ ها) +==== چک کردن تگ ها (Checking out Tags) اگر می خواهید نسخه های فایل هایی که یک برچسب به آنها اشاره دارد را مشاهده کنید، می توانید یک چکآوت `git از آن برچسب را انجام دهید، اگرچه این مخزن شما را در حالت "`detached HEAD`" قرار می دهد، که دارای برخی از عوارض جانبی بد است: @@ -291,8 +291,8 @@ Previous HEAD position was 99ada87... Merge pull request #89 from schacon/append HEAD is now at df3f601... Add atlas.json and cover image ---- -In "`detached HEAD`" state, if you make changes and then create a commit, the tag will stay the same, but your new commit won't belong to any branch and will be unreachable, except by the exact commit hash. -Thus, if you need to make changes -- say you're fixing a bug on an older version, for instance -- you will generally want to create a branch: +در حالت **`detached HEAD`**، اگر تغییراتی ایجاد کنید و سپس یک **commit** بسازید، **tag** بدون تغییر می‌ماند، اما **commit** جدید به هیچ شاخه‌ای تعلق نخواهد داشت و تنها از طریق **hash دقیق commit** قابل دسترسی است. +بنابراین، اگر نیاز به اعمال تغییرات دارید — برای مثال اصلاح یک باگ در نسخه‌ای قدیمی — معمولاً بهتر است یک **branch** ایجاد کنید: [source,console] ---- diff --git a/book/02-git-basics/sections/undoing.asc b/book/02-git-basics/sections/undoing.asc index a23242b7..5fa5f498 100644 --- a/book/02-git-basics/sections/undoing.asc +++ b/book/02-git-basics/sections/undoing.asc @@ -1,5 +1,5 @@ [[_undoing]] -=== Undoing Things (بازگرداندن تغییرات) +=== بازگرداندن تغییرات (Undoing Things) در هر مرحله ممکن است بخواهید کاری را بازگردانید. در اینجا، چند ابزار پایه برای بازگرداندن تغییراتی که ایجاد کرده‌اید مرور می‌کنیم. @@ -46,7 +46,7 @@ $ git commit --amend ==== [[_unstaging]] -==== Unstaging a Staged File (لغو مرحله‌بندی یک فایل مرحله‌بندی شده) +==== لغو آماده‌سازی یک فایل آماده‌شده (Unstaging a Staged File) دو بخش بعدی نحوه کار با ناحیه مرحله‌بندی و تغییرات دایرکتوری کاری شما را نشان می‌دهد. @@ -101,7 +101,7 @@ Changes not staged for commit: فعلا همین فراخوانی جادویی تمام چیزی است که باید درباره دستور `git reset` بدانید. در <> جزئیات بیشتری درباره عملکرد `reset` و چگونگی تسلط بر آن برای انجام کارهای جالب خواهیم گفت. -==== Unmodifying a Modified File (بازگرداندن تغییرات فایل تغییر یافته) +==== برگرداندن فایل تغییر یافته (Unmodifying a Modified File) اگر متوجه شدید که نمی‌خواهید تغییرات فایل `CONTRIBUTING.md` را نگه دارید، چه می‌کنید؟ چطور می‌توانید به سادگی آن را به حالتی برگردانید که در آخرین کامیت (یا در ابتدا هنگام کلون کردن، یا هرطور که وارد دایرکتوری کاری‌تان شده) بود؟ @@ -147,7 +147,7 @@ Changes to be committed: اما هر چیزی که از دست بدهید و هرگز کامیت نشده باشد، احتمالا دیگر قابل بازیابی نیست. [[undoing_git_restore]] -==== Undoing things with git restore (بازگردانی تغییرات با git restore) +==== بازگردانی تغییرات با git restore (Undoing things with git restore) نسخه ۲.۲۳.۰ گیت یک دستور جدید معرفی کرد: `git restore`. این در واقع جایگزینی برای `git reset` است که همین حالا بررسی کردیم. @@ -155,7 +155,7 @@ Changes to be committed: بیایید دوباره مراحل را طی کنیم و با `git restore` به جای `git reset` عملیات بازگردانی را انجام دهیم. -===== Unstaging a Staged File with git restore (خارج کردن فایل استیج شده از حالت استیج با git restore ) +===== لغو آماده‌سازی یک فایل با git restore (Unstaging a Staged File with git restore) دو بخش بعدی نشان می‌دهند چگونه با استفاده از `git restore` با تغییرات در منطقه استیج و دایرکتوری کاری کار کنیم. نکته خوب این است که دستوری که برای مشاهده وضعیت این دو ناحیه استفاده می‌کنید، به شما یادآوری می‌کند چطور تغییراتشان را بازگردانید. @@ -196,7 +196,7 @@ Changes not staged for commit: فایل `CONTRIBUTING.md` تغییر یافته اما دوباره unstaged شده است. -===== Unmodifying a Modified File with git restore (بازگرداندن تغییرات فایل تغییر یافته با git restore) +===== برگرداندن فایل تغییر یافته با git restore (Unmodifying a Modified File with git restore) اگر متوجه شدید که نمی‌خواهید تغییرات فایل `CONTRIBUTING.md` را نگه دارید، چطور می‌توانید به سادگی آن را به حالتی برگردانید که در آخرین کامیت بود؟ خوشبختانه، `git status` به شما می‌گوید چطور این کار را انجام دهید. diff --git a/book/02-git-basics/sections/viewing-history.asc b/book/02-git-basics/sections/viewing-history.asc index 4f6fe330..b9edfd7d 100644 --- a/book/02-git-basics/sections/viewing-history.asc +++ b/book/02-git-basics/sections/viewing-history.asc @@ -1,5 +1,5 @@ [[_viewing_history]] -=== Viewing the Commit History (مشاهده تاریخچه کامیت‌ها) +=== مشاهده تاریخچه کامیت‌ها (Viewing the Commit History) بعد از این که چندین کامیت ایجاد کردید یا اگر یک مخزن با تاریخچه کامیت‌های موجود را کلون کردید، احتمالاً می‌خواهید به عقب برگردید و ببینید چه اتفاقی افتاده است. ابزار اصلی و قدرتمند برای انجام این کار دستور `git log` است. @@ -223,7 +223,7 @@ $ git log --pretty=format:"%h %s" --graph | `--oneline` | Shorthand for `--pretty=oneline --abbrev-commit` used together. |================================ -==== Limiting Log Output (محدود کردن خروجی لاگ) +==== محدود کردن خروجی لاگ (Limiting Log Output) علاوه بر گزینه‌های فرمت‌بندی خروجی، دستور `git log` چندین گزینه محدودکننده مفید دارد؛ یعنی گزینه‌هایی که به شما اجازه می‌دهند تنها زیرمجموعه‌ای از کامیت‌ها را نمایش دهید. شما قبلاً یکی از این گزینه‌ها را دیده‌اید — گزینه `-2` که فقط دو کامیت آخر را نشان می‌دهد. diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index e668e093..94e26e6b 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -1,4 +1,4 @@ -=== Basic Branching and Merging (شاخه‌بندی و ادغام پایه‌ای) +=== شاخه‌بندی و ادغام پایه‌ای (Basic Branching and Merging) بیایید یک مثال ساده از شاخه‌بندی و ادغام را با یک گردش کاری که ممکن است در دنیای واقعی استفاده کنید، بررسی کنیم. شما این مراحل را دنبال خواهید کرد: @@ -16,7 +16,7 @@ .به شاخه‌ی داستان کاربری اصلی خود بازگشته و به کار ادامه دهید [[_basic_branching]] -==== Basic Branching (شاخه‌بندی پایه‌ای) +==== شاخه‌بندی پایه‌ای (Basic Branching) (((branches, basic workflow))) فرض کنیم که روی پروژه خود کار می‌کنید و چند کامیت روی شاخه‌ی `master` انجام داده‌اید. @@ -142,7 +142,7 @@ image::images/basic-branching-6.png[Work continues on `iss53`] اگر نیاز دارید آن را وارد کنید، می‌توانید شاخه‌ی `master` را به `iss53` ادغام کنید با اجرای دستور `git merge master`، یا می‌توانید صبر کنید تا این تغییرات را زمانی که تصمیم گرفتید شاخه‌ی `iss53` را به `master` برگردانید، ادغام کنید. [[_basic_merging]] -==== Basic Merging (ادغام پایه‌ای) +==== ادغام پایه‌ای (Basic Merging) (((branches, merging)))(((merging))) فرض کنید تصمیم گرفته‌اید کار روی مسئله‌ی شماره ۵۳ کامل شده و آماده‌ی ادغام به شاخه‌ی `master` است. @@ -182,7 +182,7 @@ $ git branch -d iss53 ---- [[_basic_merge_conflicts]] -==== Basic Merge Conflicts (مرج کانفیلیکت پایه) +==== مرج کانفیلیکت پایه (Basic Merge Conflicts) (((merging, conflicts))) گاهی اوقات این روند به‌صورت روان پیش نمی‌رود. diff --git a/book/03-git-branching/sections/branch-management.asc b/book/03-git-branching/sections/branch-management.asc index 30a747e4..c9b250a2 100644 --- a/book/03-git-branching/sections/branch-management.asc +++ b/book/03-git-branching/sections/branch-management.asc @@ -1,5 +1,5 @@ [[_branch_management]] -=== Branch Management (مدیریت شاخه‌ها) +=== مدیریت شاخه‌ها (Branch Management) (((branches, managing))) حال که شاخه‌هایی را ایجاد، ادغام و حذف کرده‌اید، بیایید نگاهی به ابزارهای مدیریت شاخه بیندازیم که هنگام استفاده مداوم از شاخه‌ها به کارتان خواهند آمد. @@ -75,7 +75,7 @@ $ git branch --no-merged master ---- ==== -==== Changing a branch name (تغییر نام شاخه) +==== تغییر نام شاخه (Changing a branch name) [CAUTION] ==== @@ -87,7 +87,7 @@ $ git branch --no-merged master همچنین می‌خواهید نام شاخه را روی ریموت (GitHub، GitLab، یا سرور دیگر) تغییر دهید. چگونه این کار را انجام دهید؟ -Rename the branch locally with the `git branch --move` command: +برای تغییر نام محلی یک برنچ از دستور `git branch --move` استفاده میکنیم: [source, console] ---- @@ -125,7 +125,7 @@ $ git push origin --delete bad-branch-name حالا نام شاخه اشتباه کاملاً با نام اصلاح‌شده جایگزین شده است. [[_changing_master]] -===== Changing the master branch name (تغییر نام شاخه اصلی) +===== تغییر نام شاخه اصلی (Changing the master branch name) [WARNING] ==== diff --git a/book/03-git-branching/sections/nutshell.asc b/book/03-git-branching/sections/nutshell.asc index 17c60b02..22cb2676 100644 --- a/book/03-git-branching/sections/nutshell.asc +++ b/book/03-git-branching/sections/nutshell.asc @@ -1,5 +1,5 @@ [[_git_branches_overview]] -=== Branches in a Nutshell (شاخه‌ها به طور خلاصه) +=== شاخه‌ها در یک نگاه (Branches in a Nutshell) برای درک واقعی نحوه‌ی شاخه‌بندی در گیت، باید یک قدم به عقب برداریم و بررسی کنیم گیت داده‌های خود را چگونه ذخیره می‌کند. @@ -38,7 +38,7 @@ image::images/commits-and-parents.png[Commits and their parents] image::images/branch-and-history.png[A branch and its commit history] [[_create_new_branch]] -==== Creating a New Branch (ایجاد یک شاخه جدید) +==== ایجاد یک شاخه جدید (Creating a New Branch) (((branches, creating))) وقتی یک شاخه جدید ایجاد می‌کنید چه اتفاقی می‌افتد؟ خب، این کار یک اشاره‌گر جدید برای شما ایجاد می‌کند تا جابجا کنید. فرض کنید می‌خواهید شاخه جدیدی به نام testing بسازید. این کار را با دستور git branch انجام می‌دهید:(((git commands, branch))) @@ -71,7 +71,7 @@ f30ab (HEAD -> master, testing) Add feature #32 - ability to add new formats to شما می‌توانید شاخه‌های `master` و `testing` را ببینید که درست کنار کامیت `f30ab` قرار دارند. [[_switching_branches]] -==== Switching Branches (تغییر شاخه) +==== تغییر شاخه (Switching Branches) (((branches, switching))) برای تغییر به یک شاخه موجود، دستور `git checkout` را اجرا کنید.(((git commands، checkout))) بیایید به شاخه جدید testing سوئیچ کنیم: diff --git a/book/03-git-branching/sections/rebasing.asc b/book/03-git-branching/sections/rebasing.asc index c8896bd2..5d687fcc 100644 --- a/book/03-git-branching/sections/rebasing.asc +++ b/book/03-git-branching/sections/rebasing.asc @@ -1,11 +1,11 @@ [[_rebasing]] -=== Rebasing (ریبیس کردن) +=== بازپایه‌گذاری (Rebasing) (((rebasing))) در گیت، دو روش اصلی برای ادغام تغییرات از یک شاخه به شاخه دیگر وجود دارد: دستور `merge` و دستور `rebase`. در این بخش خواهید آموخت که بازپایه‌گذاری چیست، چگونه انجام می‌شود، چرا این ابزار بسیار کاربردی است و در چه مواردی بهتر است از آن استفاده نکنید. -==== The Basic Rebase (ریبیس کردن پایه) +==== بازپایه‌گذاری پایه (The Basic Rebase) اگر به مثالی که در بخش <<_basic_merging>> آوردیم رجوع کنید، می‌بینید که کارتان را از هم جدا کرده‌اید و تغییراتی را روی دو شاخه متفاوت ایجاد کرده‌اید. @@ -60,7 +60,7 @@ image::images/basic-rebase-4.png[Fast-forwarding the `master` branch] توجه داشته باشید که اسنپ‌شاتی که توسط آخرین کامیتی که در نهایت به آن می‌رسید اشاره می‌شود، چه آخرین کامیت‌های بازبیس شده در یک بازبیس باشند یا کامیت نهایی ادغام بعد از یک مرج، همان اسنپ‌شات است — تنها تاریخچه است که متفاوت است. بازبیس کردن تغییرات را به ترتیبی که معرفی شده‌اند، از یک شاخه کاری روی شاخه دیگری بازپخش می‌کند، در حالی که مرج گرفتن نقاط انتهایی شاخه‌ها را گرفته و آن‌ها را با هم ادغام می‌کند. -==== More Interesting Rebases (ری بیس های جالب تر) +==== بازپایه‌گذاری‌های جالب‌تر (More Interesting Rebases) شما همچنین می‌توانید بازبیس خود را روی چیزی غیر از شاخه هدف بازبیس اجرا کنید. برای مثال، یک تاریخچه مثل <> را در نظر بگیرید. @@ -133,7 +133,7 @@ $ git branch -d server image::images/interesting-rebase-5.png[Final commit history] [[_rebase_peril]] -==== The Perils of Rebasing (خطرات ری بیس کردن) +==== خطرات بازپایه‌گذاری (The Perils of Rebasing) (((rebasing, perils of))) آه، اما لذت بازبیس کردن بدون معایب نیست، که می‌توان آن را در یک جمله خلاصه کرد: @@ -178,7 +178,7 @@ image::images/perils-of-rebasing-4.png[You merge in the same work again into a n به طور منطقی می‌توان فرض کرد توسعه‌دهنده‌ی دیگر نمی‌خواهد کمیت‌های `C4` و `C6` در تاریخچه باشند؛ به همین دلیل است که ابتدا کارش را بازبیس کرده بود. [[_rebase_rebase]] -==== Rebase When You Rebase (ری بیس زمان ری بیس کردن) +==== بازپایه‌گذاری هنگام بازپایه‌گذاری (Rebase When You Rebase) اگر در چنین وضعیتی قرار گرفتید، گیت جادوهای دیگری هم دارد که شاید به شما کمک کند. اگر کسی در تیم شما تغییراتی را با force push ارسال کند که کاری را که شما بر اساس آن کار کرده‌اید بازنویسی کند، چالش شما این است که بفهمید چه چیزی مال شماست و چه چیزی توسط آنها بازنویسی شده است. @@ -214,7 +214,7 @@ image::images/perils-of-rebasing-5.png[Rebase on top of force-pushed rebase work اگر شما یا هم‌تیمی‌تان در جایی مجبور شدید این کار را انجام دهید، مطمئن شوید همه می‌دانند که باید از دستور `git pull --rebase` استفاده کنند تا دردسرهای بعدی کمی کمتر شود. -==== Rebase vs. Merge (ری بیس در مقابل مرج) +==== بازپایه‌گذاری در مقابل ادغام (Rebase vs. Merge) (((rebasing, vs. merging)))(((merging, vs. rebasing))) حالا که بازبیس و ادغام را در عمل دیده‌اید، شاید بپرسید کدام بهتر است؟ diff --git a/book/03-git-branching/sections/remote-branches.asc b/book/03-git-branching/sections/remote-branches.asc index 96914cfe..8adf109a 100644 --- a/book/03-git-branching/sections/remote-branches.asc +++ b/book/03-git-branching/sections/remote-branches.asc @@ -1,5 +1,5 @@ [[_remote_branches]] -=== Remote Branches (شاخه‌های راه دور) +=== شاخه‌های راه دور (Remote Branches) (((branches, remote)))(((references, remote))) ارجاعات راه دور، ارجاعاتی (اشاره‌گرها) در مخازن راه دور شما هستند، شامل شاخه‌ها، برچسب‌ها و غیره. @@ -57,7 +57,7 @@ image::images/remote-branches-4.png[Adding another server as a remote] image::images/remote-branches-5.png[Remote-tracking branch for `teamone/master`] [[_pushing_branches]] -==== Pushing (ارسال) +==== ارسال (Pushing) وقتی می‌خواهید یک شاخه را با دیگران به اشتراک بگذارید، باید آن را به یک ریموتی که دسترسی نوشتن دارید ارسال کنید. شاخه‌های محلی شما به صورت خودکار با ریموت‌هایی که روی آن‌ها می‌نویسید همگام نمی‌شوند — شما باید به طور صریح شاخه‌هایی را که می‌خواهید به اشتراک بگذارید ارسال (push) کنید. @@ -126,7 +126,7 @@ Switched to a new branch 'serverfix' این کار یک شاخه‌ی محلی برای شما ایجاد می‌کند که می‌توانید روی آن کار کنید و شروع آن دقیقاً همان جایی است که `origin/serverfix` قرار دارد. [[_tracking_branches]] -==== Tracking Branches (شاخه‌های پیگیری) +==== شاخه‌های دنبال‌کننده (Tracking Branches) (((branches, tracking)))(((branches, upstream))) وقتی یک شاخه‌ی محلی را از روی یک شاخه‌ی remote-tracking برمی‌دارید، به‌طور خودکار چیزی به نام «شاخه‌ی پیگیری» (tracking branch) ایجاد می‌شود (و شاخه‌ای که پیگیری می‌کند، «شاخه‌ی بالادستی» یا upstream branch نامیده می‌شود). @@ -218,7 +218,7 @@ $ git fetch --all; git branch -vv اگر شاخه رهگیری تنظیم کرده باشید، مثل آنچه در بخش قبل توضیح داده شد، چه به صورت دستی تنظیم شده باشد یا به صورت خودکار توسط دستورات `clone` یا `checkout` ایجاد شده باشد، دستور `git pull` بررسی می‌کند که شاخه فعلی شما در حال رهگیری کدام سرور و شاخه است، از آن سرور دریافت می‌کند و سپس تلاش می‌کند آن شاخه راه دور را ادغام کند. [[_delete_branches]] -==== Deleting Remote Branches (حذف شاخه ها) +==== حذف شاخه ها (Deleting Remote Branches) (((branches, deleting remote))) فرض کنید دیگر به یک شاخه راه دور نیازی ندارید — مثلاً شما و همکارانتان کار روی یک ویژگی را تمام کرده‌اید و آن را به شاخه `master` راه دور (یا هر شاخه‌ای که خط پایدار کد شما در آن است) ادغام کرده‌اید. diff --git a/book/03-git-branching/sections/workflows.asc b/book/03-git-branching/sections/workflows.asc index 0394b5d9..dcab5f99 100644 --- a/book/03-git-branching/sections/workflows.asc +++ b/book/03-git-branching/sections/workflows.asc @@ -1,9 +1,9 @@ -=== Branching Workflows (جریان‌های کاری شاخه‌ای) +=== روندهای کاری شاخه‌ها (Branching Workflows) حالا که اصول پایه‌ای شاخه‌زنی و ادغام را یاد گرفته‌اید، چه کارهایی می‌توانید یا باید با آن‌ها انجام دهید؟ در این بخش، به برخی جریان‌های کاری رایجی که این شاخه‌زنی سبک‌وزن امکان‌پذیر می‌کند، می‌پردازیم تا بتوانید تصمیم بگیرید آیا مایلید آن‌ها را در چرخه توسعه خود به کار ببرید یا خیر. -==== Long-Running Branches (شاخه‌های بلندمدت) +==== شاخه‌های بلندمدت (Long-Running Branches) (((branches, long-running))) از آنجا که گیت از ادغام سه‌طرفه ساده استفاده می‌کند، ادغام مکرر از یک شاخه به شاخه‌ای دیگر در طول زمان معمولاً کار آسانی است. @@ -31,7 +31,7 @@ image::images/lr-branches-2.png[A “silo” view of progressive-stability branc دوباره، داشتن چند شاخه بلندمدت ضروری نیست، اما اغلب مفید است، به‌ویژه وقتی با پروژه‌های بسیار بزرگ یا پیچیده سر و کار دارید. [[_topic_branch]] -==== Topic Branches (شاخه‌های موضوعی) +==== شاخه‌های موضوعی (Topic Branches) (((branches, topic))) با این حال، شاخه‌های موضوعی در پروژه‌هایی با هر اندازه‌ای مفید هستند. diff --git a/book/04-git-server/sections/generating-ssh-key.asc b/book/04-git-server/sections/generating-ssh-key.asc index 34534ec5..e19c359c 100644 --- a/book/04-git-server/sections/generating-ssh-key.asc +++ b/book/04-git-server/sections/generating-ssh-key.asc @@ -1,5 +1,5 @@ [[_generate_ssh_key]] -=== Generating Your SSH Public Key (ایجاد کلید عمومی SSH شما) +=== ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key) (((SSH keys))) بسیاری از سرورهای گیت از کلیدهای عمومی SSH برای احراز هویت استفاده می‌کنند. diff --git a/book/04-git-server/sections/git-daemon.asc b/book/04-git-server/sections/git-daemon.asc index 55ded531..ff13087f 100644 --- a/book/04-git-server/sections/git-daemon.asc +++ b/book/04-git-server/sections/git-daemon.asc @@ -1,4 +1,4 @@ -=== Git Daemon (سرویس دهنده گیت) +=== سرویس‌دهنده گیت (Git Daemon) (((serving repositories, git protocol))) در مرحله بعد، یک سرویس‌دهنده (daemon) راه‌اندازی می‌کنیم که مخازن را با استفاده از پروتکل «Git» ارائه می‌دهد. diff --git a/book/04-git-server/sections/git-on-a-server.asc b/book/04-git-server/sections/git-on-a-server.asc index 15df7d90..01548dea 100644 --- a/book/04-git-server/sections/git-on-a-server.asc +++ b/book/04-git-server/sections/git-on-a-server.asc @@ -1,5 +1,5 @@ [[_getting_git_on_a_server]] -=== Getting Git on a Server (راه‌اندازی گیت روی یک سرور) +=== راه‌اندازی گیت روی یک سرور (Getting Git on a Server) حالا به راه‌اندازی سرویس گیت که این پروتکل‌ها را روی سرور خودتان اجرا می‌کند، می‌پردازیم. @@ -34,7 +34,7 @@ $ cp -Rf my_project/.git my_project.git این مخزن گیت را به تنهایی، بدون دایرکتوری کاری، می‌گیرد و دایرکتوری مخصوص به خودش را ایجاد می‌کند. [[_bare_repo]] -==== Putting the Bare Repository on a Server (قرار دادن مخزن بی‌کاربرد روی سرور) +==== قرار دادن مخزن خالی روی سرور (Putting the Bare Repository on a Server) حالا که یک نسخه بی‌کاربرد از مخزن خود دارید، تنها کاری که باید بکنید این است که آن را روی یک سرور قرار داده و پروتکل‌های خود را تنظیم کنید. فرض کنیم یک سرور به نام `git.example.com` راه‌اندازی کرده‌اید که به آن دسترسی SSH دارید و می‌خواهید تمام مخازن گیت خود را زیر دایرکتوری `/srv/git` ذخیره کنید. @@ -74,13 +74,13 @@ $ git init --bare --shared این بحث شامل عدم نیاز به ایجاد حساب کاربری برای هر فرد، افزودن دسترسی خواندن عمومی به مخازن، راه‌اندازی رابط‌های وب و موارد دیگر خواهد بود. اما به یاد داشته باشید که برای همکاری با چند نفر روی یک پروژه خصوصی، تنها چیزی که _نیاز_ دارید یک سرور SSH و یک مخزن بی‌کاربرد است. -==== Small Setups (تنظیمات کوچک) +==== راه‌اندازی‌های کوچک (Small Setups) اگر یک گروه کوچک هستید یا فقط می‌خواهید گیت را در سازمان خود امتحان کنید و توسعه‌دهندگان کمی دارید، اوضاع می‌تواند برایتان ساده باشد. یکی از پیچیده‌ترین جنبه‌های راه‌اندازی سرور گیت، مدیریت کاربران است. اگر بخواهید برخی مخازن فقط برای برخی کاربران فقط خواندنی و برای دیگران خواندنی/نوشتنی باشد، دسترسی‌ها و مجوزها ممکن است کمی سخت‌تر تنظیم شوند. -===== SSH Access (دسترسی SSH) +===== دسترسی SSH (SSH Access) (((serving repositories, SSH))) اگر سروری دارید که همه توسعه‌دهندگان شما قبلاً به آن دسترسی SSH دارند، معمولاً آسان‌ترین کار این است که اولین مخزن خود را روی همان سرور راه‌اندازی کنید، زیرا تقریباً نیازی به انجام کار اضافی ندارید (همانطور که در بخش قبل توضیح داده شد). diff --git a/book/04-git-server/sections/gitlab.asc b/book/04-git-server/sections/gitlab.asc index 9c18a7e9..6959ac15 100644 --- a/book/04-git-server/sections/gitlab.asc +++ b/book/04-git-server/sections/gitlab.asc @@ -1,4 +1,4 @@ -=== GitLab (گیت‌لب) +=== گیت‌لب (GitLab) (((serving repositories, GitLab)))(((GitLab))) گیت‌وب نسبتاً ساده است. @@ -6,7 +6,7 @@ از آنجایی که گیت‌لب یکی از محبوب‌ترین‌هاست، نصب و استفاده از آن را به عنوان نمونه بررسی می‌کنیم. این گزینه نسبت به گیت‌وب سخت‌تر است و نیاز به نگهداری بیشتری دارد، اما یک گزینه کاملاً مجهز است. -==== Installation (نصب) +==== نصب (Installation) گیت‌لب یک برنامه وب مبتنی بر پایگاه داده است، بنابراین نصب آن پیچیده‌تر از برخی سرورهای گیت دیگر است. خوشبختانه این فرایند به خوبی مستندسازی و پشتیبانی شده است. @@ -21,7 +21,7 @@ برای اطلاعات بیشتر به https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md[GitLab Community Edition (CE) readme^] مراجعه کنید. -==== Administration (مدیریت) +==== مدیریت (Administration) رابط مدیریت گیت‌لب از طریق وب قابل دسترسی است. فقط مرورگر خود را به نام میزبان یا آدرس IP که گیت‌لب روی آن نصب شده است، هدایت کنید و با کاربر `root` وارد شوید. @@ -33,7 +33,7 @@ .The "`Admin area`" item in the GitLab menu image::images/gitlab-menu.png[The “Admin area” item in the GitLab menu] -===== Users (کاربران) +===== کاربران (Users) همه کسانی که از سرور گیت‌لب شما استفاده می‌کنند باید حساب کاربری داشته باشند. حساب‌های کاربری ساده هستند و عمدتاً شامل اطلاعات شخصی مرتبط با داده‌های ورود به سیستم می‌شوند. @@ -52,7 +52,7 @@ image::images/gitlab-users.png[The GitLab user administration screen] این اقدام بسیار دائمی و مخرب است و به ندرت به آن نیاز خواهید داشت. [[_gitlab_groups_section]] -===== Groups (گروه ها) +===== گروه ها (Groups) گروه گیت‌لب مجموعه‌ای از پروژه‌ها به همراه اطلاعاتی درباره نحوه دسترسی کاربران به آن پروژه‌هاست. هر گروه یک فضای نام پروژه دارد (مانند کاربران)؛ بنابراین اگر گروه +training+ پروژه‌ای به نام +materials+ داشته باشد، آدرس آن پروژه `http://server/training/materials` خواهد بود. @@ -65,7 +65,7 @@ image::images/gitlab-groups.png[The GitLab group administration screen] این سطوح از «مهمان» (فقط مسائل و چت) تا «مالک» (کنترل کامل گروه، اعضا و پروژه‌ها) متغیر است. انواع مجوزها بسیار زیاد است و نمی‌توان همه را اینجا فهرست کرد، اما گیت‌لب لینک مفیدی در صفحه مدیریت دارد. -===== Projects (پروژه ها) +===== پروژه ها (Projects) یک پروژه در گیت‌لب تقریباً متناظر با یک مخزن گیت است. هر پروژه به یک فضای نام تعلق دارد، یا یک کاربر یا یک گروه. @@ -76,13 +76,13 @@ image::images/gitlab-groups.png[The GitLab group administration screen] پروژه _داخلی_ برای هر کاربر وارد شده قابل مشاهده است و پروژه _عمومی_ برای همه قابل دیدن است. توجه داشته باشید که این کنترل هم دسترسی `git fetch` و هم دسترسی به رابط وب پروژه را شامل می‌شود. -===== Hooks (هوک ها) +===== هوک ها (Hooks) گیت‌لب از هوک‌ها پشتیبانی می‌کند، هم در سطح پروژه و هم در سطح سیستم. در هر یک از این موارد، سرور گیت‌لب هر زمان رویدادهای مرتبط رخ دهد، یک درخواست HTTP POST با یک JSON توصیفی ارسال می‌کند. این راهی عالی برای اتصال مخازن گیت و نمونه گیت‌لب شما به سایر ابزارهای اتوماسیون توسعه مانند سرورهای CI، اتاق‌های گفتگو یا ابزارهای استقرار است. -==== Basic Usage (استفاده پایه) +==== استفاده پایه (Basic Usage) اولین کاری که با گیت‌لب می‌خواهید انجام دهید، ایجاد یک پروژه جدید است. می‌توانید این کار را با کلیک روی آیکون "`+`" در نوار ابزار انجام دهید. @@ -110,7 +110,7 @@ $ git clone https://server/namespace/project.git رابط کاربری وب دسترسی به چندین نمای مفید از خود مخزن را فراهم می‌کند. صفحه اصلی هر پروژه فعالیت‌های اخیر را نشان می‌دهد و لینک‌های بالای صفحه شما را به نمای فایل‌ها و گزارش کامیت‌های پروژه هدایت می‌کنند. -==== Working Together (همکاری گروهی) +==== همکاری گروهی (Working Together) ساده‌ترین روش برای همکاری در یک پروژه گیت‌لب، دادن دسترسی مستقیم برای پوش به هر کاربر است. می‌توانید با رفتن به بخش "`Members`" در تنظیمات پروژه، یک کاربر را اضافه کنید و سطح دسترسی مناسبی به او اختصاص دهید (سطوح دسترسی مختلف در <<_gitlab_groups_section>> کمی توضیح داده شده‌اند). diff --git a/book/04-git-server/sections/gitweb.asc b/book/04-git-server/sections/gitweb.asc index 2df1947e..d9da5657 100644 --- a/book/04-git-server/sections/gitweb.asc +++ b/book/04-git-server/sections/gitweb.asc @@ -1,4 +1,4 @@ -=== GitWeb (گیت‌وب) +=== گیت‌وب (GitWeb) (((serving repositories, GitWeb)))(((GitWeb))) حال که به پروژه‌تان دسترسی پایه‌ای خواندن/نوشتن و فقط خواندنی دارید، ممکن است بخواهید یک نمایشگر ساده مبتنی بر وب راه‌اندازی کنید. diff --git a/book/04-git-server/sections/hosted.asc b/book/04-git-server/sections/hosted.asc index 067803f9..7ce0316f 100644 --- a/book/04-git-server/sections/hosted.asc +++ b/book/04-git-server/sections/hosted.asc @@ -1,4 +1,4 @@ -=== Third Party Hosted Options (گزینه‌های میزبانی توسط شخص ثالث) +=== گزینه‌های میزبانی شخص ثالث (Third Party Hosted Options) اگر نمی‌خواهید تمام مراحل راه‌اندازی سرور گیت خود را انجام دهید، چندین گزینه برای میزبانی پروژه‌های گیت خود در سایت‌های میزبانی اختصاصی خارجی دارید. استفاده از این روش مزایای زیادی دارد: معمولاً راه‌اندازی یک سایت میزبانی سریع و آسان است و شروع پروژه‌ها در آن ساده است، همچنین نیازی به نگهداری یا نظارت بر سرور نیست. حتی اگر سرور خود را به صورت داخلی راه‌اندازی و مدیریت کنید، ممکن است بخواهید برای کد منبع باز خود از یک سایت میزبانی عمومی استفاده کنید — این کار معمولاً برای جامعه منبع باز آسان‌تر است تا کد شما را پیدا کرده و به شما کمک کنند. diff --git a/book/04-git-server/sections/protocols.asc b/book/04-git-server/sections/protocols.asc index d449c5c3..2aa9e8ab 100644 --- a/book/04-git-server/sections/protocols.asc +++ b/book/04-git-server/sections/protocols.asc @@ -1,8 +1,8 @@ -=== The Protocols (پروتکل‌ها) +=== پروتکل‌ها (The Protocols) گیت می‌تواند از چهار پروتکل متفاوت برای انتقال داده استفاده کند: محلی، HTTP، شل امن (SSH) و Git. در اینجا توضیح می‌دهیم که هر کدام چه هستند و در چه شرایط پایه‌ای ممکن است بخواهید از آن‌ها استفاده کنید (یا نکنید). -==== Local Protocol (پروتکل های محلی) +==== پروتکل های محلی (Local Protocol) (((protocols, local))) اساس‌ترین روش، پروتکل محلی است که در آن مخزن راه دور در دایرکتوری دیگری روی همان میزبان قرار دارد. @@ -40,7 +40,7 @@ $ git remote add local_proj /srv/git/project.git سپس می‌توانید به صورت عادی، از طریق نام ریموت جدید خود `local_proj` به آن ریموت پوش و پول کنید، همان‌طور که انگار از طریق شبکه این کار را انجام می‌دهید. -===== The Pros (مزایا) +===== مزایا (The Pros) مزیت مخازن مبتنی بر فایل این است که ساده هستند و از مجوزهای فایل و دسترسی شبکه موجود استفاده می‌کنند. اگر قبلاً یک سیستم فایل مشترک دارید که کل تیم شما به آن دسترسی دارد، راه‌اندازی مخزن بسیار آسان است. @@ -50,7 +50,7 @@ $ git remote add local_proj /srv/git/project.git این گزینه همچنین برای گرفتن سریع کار از مخزن کاری شخص دیگری گزینه خوبی است. اگر شما و همکارانتان روی یک پروژه کار می‌کنید و آنها می‌خواهند شما چیزی را بررسی کنید، اجرای دستوری مانند `git pull /home/john/project` اغلب راحت‌تر از این است که آنها به یک سرور ریموت پوش کنند و سپس شما از آنجا fetch بگیرید. -===== The Cons (معایب) +===== معایب (The Cons) معایب این روش این است که دسترسی مشترک معمولاً سخت‌تر از دسترسی شبکه‌ای ساده است و از چندین مکان قابل دسترسی نیست. اگر بخواهید از لپ‌تاپ خود در خانه پوش کنید، باید دیسک ریموت را مونت کنید، که در مقایسه با دسترسی مبتنی بر شبکه می‌تواند دشوار و کند باشد. @@ -62,7 +62,7 @@ $ git remote add local_proj /srv/git/project.git در نهایت، این پروتکل از مخزن در برابر آسیب‌های تصادفی محافظت نمی‌کند. هر کاربر دسترسی کامل شل به دایرکتوری "`remote`" دارد و هیچ چیزی مانع تغییر یا حذف فایل‌های داخلی گیت و خراب کردن مخزن نمی‌شود. -==== The HTTP Protocols (پروتکل‌های HTTP) +==== پروتکل‌های HTTP (The HTTP Protocols) گیت می‌تواند از طریق HTTP با دو حالت مختلف ارتباط برقرار کند. قبل از گیت نسخه 1.6.6، فقط یک روش ساده و عمدتاً فقط خواندنی وجود داشت. @@ -72,7 +72,7 @@ $ git remote add local_proj /srv/git/project.git ما ابتدا پروتکل HTTP هوشمند را بررسی خواهیم کرد. -===== Smart HTTP (HTTP هوشمند) +===== HTTP هوشمند (Smart HTTP) (((protocols, smart HTTP))) @@ -85,7 +85,7 @@ HTTP هوشمند بسیار شبیه به پروتکل‌های SSH یا Git ع در واقع، برای سرویس‌هایی مانند GitHub، URLی که برای مشاهده مخزن به صورت آنلاین استفاده می‌کنید (مثلاً https://github.com/schacon/simplegit[^]) همان URLی است که می‌توانید برای کلون کردن و در صورت دسترسی، پوش کردن استفاده کنید. -===== Dumb HTTP (HTTP ساده) +===== HTTP ساده (Dumb HTTP) (((protocols, dumb HTTP))) اگر سرور به سرویس HTTP هوشمند گیت پاسخ ندهد، کلاینت گیت تلاش می‌کند به پروتکل ساده‌تر _Dumb_ HTTP بازگردد. @@ -119,7 +119,7 @@ $ git clone https://example.com/gitproject.git به‌طور کلی، یا باید یک سرور هوشمند HTTP با قابلیت خواندن/نوشتن اجرا کنید یا فقط فایل‌ها را به صورت فقط‌خواندنی و به روش ساده (Dumb) در دسترس قرار دهید. ترکیب این دو سرویس به‌ندرت انجام می‌شود. -===== The Pros (مزایا) +===== مزایا (The Pros) ما روی مزایای نسخه هوشمند پروتکل HTTP تمرکز خواهیم کرد. @@ -132,7 +132,7 @@ $ git clone https://example.com/gitproject.git یک نکته خوب دیگر این است که HTTP و HTTPS پروتکل‌هایی بسیار رایج هستند و اغلب دیواره‌های آتش شرکت‌ها به ترافیک این پورت‌ها اجازه عبور می‌دهند. -===== The Cons (معایب) +===== معایب (The Cons) راه‌اندازی گیت روی HTTPS ممکن است نسبت به SSH روی برخی سرورها کمی پیچیده‌تر باشد. به‌جز این مورد، مزیت کمی نسبت به دیگر پروتکل‌ها برای ارائه محتوای گیت نسبت به HTTP هوشمند وجود دارد. @@ -141,7 +141,7 @@ $ git clone https://example.com/gitproject.git با این حال، چندین ابزار کش کردن اعتبارنامه وجود دارد، از جمله Keychain Access در macOS و Credential Manager در ویندوز، که این کار را به‌طور قابل توجهی ساده می‌کنند. برای یادگیری نحوه راه‌اندازی کش امن پسورد HTTP روی سیستم‌تان، فصل <> را بخوانید. -==== The SSH Protocol (پروتکل SSH) +==== پروتکل SSH (The SSH Protocol) (((protocols, SSH))) یک پروتکل انتقال رایج برای گیت هنگام میزبانی خودکار، استفاده از SSH است. @@ -164,21 +164,21 @@ $ git clone [user@]server:project.git در هر دو حالت بالا، اگر نام کاربری اختیاری را مشخص نکنید، گیت فرض می‌کند که کاربری که هم‌اکنون وارد شده‌اید، کاربر مورد نظر است. -===== The Pros (مزایا) +===== مزایا (The Pros) مزایای استفاده از SSH بسیار زیاد است. اول اینکه SSH نسبتاً آسان راه‌اندازی می‌شود — سرویس‌دهنده‌های SSH رایج هستند، بسیاری از مدیران شبکه با آن‌ها آشنایی دارند و بیشتر توزیع‌های سیستم‌عامل با آن‌ها تنظیم شده‌اند یا ابزارهایی برای مدیریت‌شان دارند. دوم، دسترسی از طریق SSH امن است — تمام انتقال داده رمزنگاری و احراز هویت شده است. در نهایت، مثل پروتکل‌های HTTPS، گیت و Local، SSH نیز کارآمد است و داده‌ها را تا حد امکان فشرده قبل از انتقال می‌کند. -===== The Cons (معایب) +===== معایب (The Cons) نکته منفی SSH این است که دسترسی ناشناس به مخزن گیت را پشتیبانی نمی‌کند. اگر از SSH استفاده می‌کنید، افراد حتماً باید دسترسی SSH به ماشین شما داشته باشند، حتی به صورت فقط‌خواندنی، که این باعث می‌شود SSH برای پروژه‌های متن‌باز که افراد ممکن است فقط بخواهند مخزن شما را کلون کنند، چندان مناسب نباشد. اگر فقط در شبکه داخلی شرکت خود استفاده می‌کنید، ممکن است SSH تنها پروتکلی باشد که نیاز دارید. اگر می‌خواهید دسترسی ناشناس فقط‌خواندنی به پروژه‌هایتان بدهید و هم‌زمان بخواهید از SSH استفاده کنید، باید SSH را برای پوش کردن خودتان راه‌اندازی کنید و برای دیگران یک روش دیگر برای دریافت داده‌ها فراهم کنید. -==== The Git Protocol (پروتکل Git) +==== پروتکل Git (The Git Protocol) (((protocols, git))) در نهایت، پروتکل Git را داریم. @@ -189,14 +189,14 @@ $ git clone [user@]server:project.git می‌توانید دسترسی پوش را فعال کنید اما با توجه به نبود احراز هویت، هر کسی در اینترنت که URL پروژه شما را پیدا کند می‌تواند به آن پروژه پوش کند. کافی است بگوییم این مورد نادر است. -===== The Pros (مزایا) +===== مزایا (The Pros) پروتکل گیت معمولاً سریع‌ترین پروتکل انتقال شبکه است. اگر ترافیک زیادی برای یک پروژه عمومی دارید یا پروژه بسیار بزرگی را ارائه می‌دهید که نیاز به احراز هویت کاربر برای دسترسی خواندن ندارد، احتمالاً می‌خواهید یک سرویس‌دهنده Git راه‌اندازی کنید تا پروژه‌تان را سرو کند. این پروتکل از همان مکانیزم انتقال داده مانند SSH استفاده می‌کند اما بدون سربار رمزنگاری و احراز هویت. -===== The Cons (معایب) +===== معایب (The Cons) به دلیل نبود TLS یا رمزنگاری دیگر، کلون کردن از طریق `git://` ممکن است باعث آسیب‌پذیری اجرای کد دلخواه شود، بنابراین مگر اینکه بدانید چه می‌کنید، باید از آن اجتناب کنید. diff --git a/book/04-git-server/sections/setting-up-server.asc b/book/04-git-server/sections/setting-up-server.asc index 4b1848c5..7e717aa2 100644 --- a/book/04-git-server/sections/setting-up-server.asc +++ b/book/04-git-server/sections/setting-up-server.asc @@ -1,5 +1,5 @@ [[_setting_up_server]] -=== نصب و راه‌اندازی سرور +=== نصب و راه‌اندازی سرور (Setting up server) اجازه دهید تا گام به گام به راه‌اندازی دسترسی SSH روی سرور بپردازیم. در این مثال شما از متد `authorized_keys` برای تصدیق هویت کاربرانتان استفاده خواهید کرد. diff --git a/book/04-git-server/sections/smart-http.asc b/book/04-git-server/sections/smart-http.asc index 753d34cd..809c5a8e 100644 --- a/book/04-git-server/sections/smart-http.asc +++ b/book/04-git-server/sections/smart-http.asc @@ -1,14 +1,14 @@ -=== Smart HTTP +=== HTTP هوشمند (Smart HTTP) (((serving repositories, HTTP))) -We now have authenticated access through SSH and unauthenticated access through `git://`, but there is also a protocol that can do both at the same time. -Setting up Smart HTTP is basically just enabling a CGI script that is provided with Git called `git-http-backend` on the server.(((git commands, "http-backend"))) -This CGI will read the path and headers sent by a `git fetch` or `git push` to an HTTP URL and determine if the client can communicate over HTTP (which is true for any client since version 1.6.6). -If the CGI sees that the client is smart, it will communicate smartly with it; otherwise it will fall back to the dumb behavior (so it is backward compatible for reads with older clients). +ما اکنون دسترسی احراز هویت شده از طریق SSH و دسترسی بدون احراز هویت از طریق `git://` داریم، اما پروتکلی نیز وجود دارد که می‌تواند هر دو را همزمان انجام دهد. +راه‌اندازی Smart HTTP اساساً فقط فعال کردن یک اسکریپت CGI است که با گیت ارائه می‌شود و در سرور `git-http-backend` نام دارد. (دستورات گیت، "http-backend") +این CGI مسیر و هدرهای ارسال شده توسط `git fetch` یا `git push` به یک URL HTTP را می‌خواند و تعیین می‌کند که آیا کلاینت می‌تواند از طریق HTTP ارتباط برقرار کند (که برای هر کلاینتی از نسخه ۱.۶.۶ به بعد درست است). +اگر CGI ببیند که مشتری باهوش است، با او هوشمندانه ارتباط برقرار می‌کند؛ در غیر این صورت به رفتار ساده‌لوحانه بازمی‌گردد (بنابراین برای خواندن با مشتریان قدیمی‌تر سازگار با نسخه‌های قبلی است). -Let's walk through a very basic setup. -We'll set this up with Apache as the CGI server. -If you don't have Apache setup, you can do so on a Linux box with something like this:(((Apache))) +بیایید یک راه‌اندازی بسیار ساده را مرور کنیم. +ما این را با آپاچی به عنوان سرور CGI راه‌اندازی خواهیم کرد. +اگر آپاچی را راه‌اندازی نکرده‌اید، می‌توانید این کار را روی یک سرور لینوکس با چیزی شبیه این انجام دهید:(((Apache))) [source,console] ---- @@ -16,16 +16,16 @@ $ sudo apt-get install apache2 apache2-utils $ a2enmod cgi alias env ---- -This also enables the `mod_cgi`, `mod_alias`, and `mod_env` modules, which are all needed for this to work properly. +این همچنین ماژول‌های `mod_cgi`، `mod_alias` و `mod_env` را فعال می‌کند که همگی برای عملکرد صحیح این کار لازم هستند. -You'll also need to set the Unix user group of the `/srv/git` directories to `www-data` so your web server can read- and write-access the repositories, because the Apache instance running the CGI script will (by default) be running as that user: +همچنین باید گروه کاربری یونیکس دایرکتوری‌های `/srv/git` را روی `www-data` تنظیم کنید تا سرور وب شما بتواند به مخازن دسترسی خواندن و نوشتن داشته باشد، زیرا نمونه آپاچی که اسکریپت CGI را اجرا می‌کند (به طور پیش‌فرض) با آن کاربر اجرا خواهد شد: [source,console] ---- $ chgrp -R www-data /srv/git ---- -Next we need to add some things to the Apache configuration to run the `git-http-backend` as the handler for anything coming into the `/git` path of your web server. +بعداً باید چیزهایی به پیکربندی آپاچی اضافه کنیم تا `git-http-backend` را به عنوان هندلر هر چیزی که به مسیر `/git` سرور وب شما می‌آید، اجرا کنیم. [source,console] ---- @@ -34,9 +34,9 @@ SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ ---- -If you leave out `GIT_HTTP_EXPORT_ALL` environment variable, then Git will only serve to unauthenticated clients the repositories with the `git-daemon-export-ok` file in them, just like the Git daemon did. +اگر متغیر محیطی `GIT_HTTP_EXPORT_ALL` را حذف کنید، گیت فقط مخزن‌هایی را که فایل `git-daemon-export-ok` در آن‌ها وجود دارد، درست مانند گیت دیمون، به کلاینت‌های بدون احراز هویت سرویس می‌دهد. -Finally you'll want to tell Apache to allow requests to `git-http-backend` and make writes be authenticated somehow, possibly with an Auth block like this: +در نهایت، می‌خواهید به آپاچی بگویید که درخواست‌ها به `git-http-backend` را مجاز کند و نوشتن‌ها را به نوعی احراز هویت کند، احتمالاً با یک بلوک Auth مانند این: [source,console] ---- @@ -49,24 +49,24 @@ Finally you'll want to tell Apache to allow requests to `git-http-backend` and m ---- -That will require you to create a `.htpasswd` file containing the passwords of all the valid users. -Here is an example of adding a "`schacon`" user to the file: +این کار مستلزم ایجاد یک فایل `.htpasswd` است که حاوی رمز عبور تمام کاربران معتبر باشد. +در اینجا نمونه‌ای از اضافه کردن کاربر "`schacon`" به فایل آورده شده است: [source,console] ---- $ htpasswd -c /srv/git/.htpasswd schacon ---- -There are tons of ways to have Apache authenticate users, you'll have to choose and implement one of them. -This is just the simplest example we could come up with. -You'll also almost certainly want to set this up over SSL so all this data is encrypted. +راه‌های زیادی برای احراز هویت کاربران توسط آپاچی وجود دارد، شما باید یکی از آن‌ها را انتخاب و پیاده‌سازی کنید. +این فقط ساده‌ترین مثالی بود که توانستیم به آن برسیم. +همچنین تقریباً مطمئناً می‌خواهید این را روی SSL راه‌اندازی کنید تا تمام این داده‌ها رمزگذاری شوند. -We don't want to go too far down the rabbit hole of Apache configuration specifics, since you could well be using a different server or have different authentication needs. -The idea is that Git comes with a CGI called `git-http-backend` that when invoked will do all the negotiation to send and receive data over HTTP. -It does not implement any authentication itself, but that can easily be controlled at the layer of the web server that invokes it. -You can do this with nearly any CGI-capable web server, so go with the one that you know best. +ما نمی‌خواهیم خیلی وارد جزئیات پیکربندی آپاچی شویم، زیرا ممکن است شما از سرور دیگری استفاده کنید یا نیازهای احراز هویت متفاوتی داشته باشید. +ایده این است که گیت همراه با یک CGI به نام `git-http-backend` ارائه می‌شود که هنگام فراخوانی، تمام مذاکرات برای ارسال و دریافت داده‌ها از طریق HTTP را انجام می‌دهد. +خودش هیچ احرازی هویت را پیاده‌سازی نمی‌کند، اما این را می‌توان به راحتی در لایه وب سروری که آن را فراخوانی می‌کند، کنترل کرد. +شما می‌توانید این کار را تقریباً با هر سرور وب دارای قابلیت CGI انجام دهید، بنابراین سروری را انتخاب کنید که بهترین شناخت را از آن دارید. [NOTE] ==== -For more information on configuring authentication in Apache, check out the Apache docs here: https://httpd.apache.org/docs/current/howto/auth.html[^]. +برای اطلاعات بیشتر در مورد پیکربندی احراز هویت در آپاچی، مستندات آپاچی را در اینجا بررسی کنید: https://httpd.apache.org/docs/current/howto/auth.html [^]. ==== diff --git a/book/05-distributed-git/sections/contributing.asc b/book/05-distributed-git/sections/contributing.asc index 4544ffbd..5563c0af 100644 --- a/book/05-distributed-git/sections/contributing.asc +++ b/book/05-distributed-git/sections/contributing.asc @@ -1,5 +1,5 @@ [[_contributing_project]] -=== Contributing to a Project (مشارکت در یک پروژه) +=== مشارکت در یک پروژه (Contributing to a Project) (((contributing))) اصلی‌ترین دشواری در توصیف نحوه مشارکت در یک پروژه، تنوع بسیار زیاد روش‌های انجام این کار است. از آنجا که گیت بسیار منعطف است، افراد می‌توانند به روش‌های مختلفی با هم کار کنند و توصیف اینکه شما دقیقاً چگونه باید مشارکت کنید مشکل است — هر پروژه کمی متفاوت است. برخی از متغیرهای دخیل عبارت‌اند از تعداد مشارکت‌کنندگان فعال، جریان کاری انتخاب‌شده، دسترسی شما به کامیت‌ها و احتمالاً روش مشارکت خارجی. @@ -13,7 +13,7 @@ تمام این سوالات می‌توانند بر نحوه مؤثر مشارکت شما در پروژه و جریان‌های کاری مورد ترجیح یا قابل دسترس برای شما تأثیر بگذارند. ما جنبه‌هایی از هر یک را در مجموعه‌ای از موارد کاربردی بررسی خواهیم کرد، از ساده به پیچیده؛ شما باید بتوانید با استفاده از این مثال‌ها جریان‌های کاری خاص مورد نیاز خود را در عمل بسازید. [[_commit_guidelines]] -==== Commit Guidelines (راهنمایی‌های کامیت) +==== راهنمایی‌های کامیت (Commit Guidelines) قبل از اینکه به موارد کاربردی خاص بپردازیم، یک نکته کوتاه درباره پیام‌های کامیت داریم. داشتن یک راهنمای خوب برای ایجاد کامیت‌ها و پایبندی به آن، کار با گیت و همکاری با دیگران را بسیار آسان‌تر می‌کند. پروژه گیت یک سند ارائه می‌دهد که تعدادی نکته خوب برای ایجاد کامیت‌های مناسب برای ارسال پچ‌ها را بیان می‌کند — می‌توانید آن را در کد منبع گیت در فایل `Documentation/SubmittingPatches` بخوانید. @@ -62,7 +62,7 @@ image::images/git-diff-check.png[Output of `git diff --check`] ==== [[_private_team]] -==== Private Small Team (تیم کوچک خصوصی) +==== تیم کوچک خصوصی (Private Small Team) (((contributing, private small team))) ساده‌ترین تنظیمی که احتمالاً با آن مواجه می‌شوید، پروژه‌ای خصوصی با یک یا دو توسعه‌دهنده دیگر است. @@ -280,7 +280,7 @@ image::images/small-team-7.png[Jessica's history after pushing all changes back .General sequence of events for a simple multiple-developer Git workflow image::images/small-team-flow.png[General sequence of events for a simple multiple-developer Git workflow] -==== Private Managed Team (تیم خصوصی مدیریت‌شده) +==== تیم خصوصی مدیریت‌شده (Private Managed Team) (((contributing, private managed team))) در سناریوی بعدی، نقش‌های مشارکت‌کنندگان در یک گروه خصوصی بزرگ‌تر را بررسی می‌کنید. یاد می‌گیرید چگونه در محیطی کار کنید که گروه‌های کوچک روی ویژگی‌ها همکاری می‌کنند و سپس مشارکت‌های تیمی توسط گروه دیگری ادغام می‌شود. @@ -443,7 +443,7 @@ image::images/managed-team-3.png[Jessica's history after merging both her topic image::images/managed-team-flow.png[Basic sequence of this managed-team workflow] [[_public_project]] -==== Forked Public Project (پروژه‌ی عمومی فورک شده) +==== پروژه‌ی عمومی فورک شده (Forked Public Project) (((contributing, public small project))) مشارکت در پروژه‌های عمومی کمی متفاوت است. @@ -572,7 +572,7 @@ $ git push myfork featureBv2 image::images/public-small-3.png[Commit history after `featureBv2` work] [[_project_over_email]] -==== Public Project over Email (پروژه عمومی از طریق ایمیل) +==== پروژه عمومی از طریق ایمیل (Public Project over Email) (((contributing, public large project))) بسیاری از پروژه‌ها رویه‌های مشخصی برای پذیرش اصلاحات (پچ‌ها) دارند — باید قوانین خاص هر پروژه را بررسی کنید، زیرا این قوانین متفاوت خواهند بود. @@ -726,7 +726,7 @@ Result: OK برای دریافت کمک در تنظیم سیستم و ایمیل، نکات و ترفندهای بیشتر، و محیط آزمایشی برای ارسال پچ آزمایشی از طریق ایمیل، به https://git-send-email.io مراجعه کنید. ==== -==== Summary (خلاصه) +==== خلاصه (Summary) در این بخش، چندین روند کاری را بررسی کردیم و تفاوت‌های کار در یک تیم کوچک روی پروژه‌های کد بسته را با مشارکت در پروژه‌های بزرگ و عمومی توضیح دادیم. شما یاد گرفتید که قبل از کامیت کردن، خطاهای فاصله سفید را چک کنید و یک پیام کامیت عالی بنویسید. diff --git a/book/05-distributed-git/sections/distributed-workflows.asc b/book/05-distributed-git/sections/distributed-workflows.asc index 3ba74ca1..76a45513 100644 --- a/book/05-distributed-git/sections/distributed-workflows.asc +++ b/book/05-distributed-git/sections/distributed-workflows.asc @@ -1,4 +1,4 @@ -=== Distributed Workflows (جریان‌های کاری توزیع‌شده) +=== جریان‌های کاری توزیع‌شده (Distributed Workflows) (((workflows))) برخلاف سیستم‌های کنترل نسخه متمرکز (CVCSها)، ماهیت توزیع‌شده گیت به شما اجازه می‌دهد که در همکاری توسعه‌دهندگان روی پروژه‌ها بسیار انعطاف‌پذیرتر عمل کنید. @@ -7,7 +7,7 @@ این موضوع امکان‌های گسترده‌ای از جریان‌های کاری را برای پروژه و/یا تیم شما فراهم می‌کند، بنابراین ما چند الگوی رایج که از این انعطاف‌پذیری بهره می‌برند را بررسی خواهیم کرد. ما نقاط قوت و ضعف احتمالی هر طراحی را مرور می‌کنیم؛ شما می‌توانید یکی از آنها را برای استفاده انتخاب کنید یا ویژگی‌های مختلف را ترکیب کنید. -==== Centralized Workflow (جریان کاری متمرکز) +==== جریان کاری متمرکز (Centralized Workflow) (((workflows, centralized))) در سیستم‌های متمرکز معمولاً یک مدل همکاری وجود دارد — جریان کاری متمرکز. @@ -34,7 +34,7 @@ image::images/centralized_workflow.png[Centralized workflow] با مدل شاخه‌بندی گیت، صدها توسعه‌دهنده می‌توانند به طور همزمان از طریق ده‌ها شاخه روی یک پروژه کار کنند. [[_integration_manager]] -==== Integration-Manager Workflow (جریان کاری مدیر ادغام) +==== جریان کاری مدیر ادغام (Integration-Manager Workflow) (((workflows, integration manager))) چون گیت به شما اجازه می‌دهد چند مخزن راه دور داشته باشید، امکان استفاده از جریانی وجود دارد که هر توسعه‌دهنده به مخزن عمومی خودش دسترسی نوشتن دارد و به مخازن دیگران دسترسی خواندن. @@ -60,7 +60,7 @@ image::images/integration-manager.png[Integration-manager workflow] یکی از مزایای اصلی این روش این است که شما می‌توانید به کار خود ادامه دهید و نگهدارنده مخزن اصلی هر زمان که بخواهد تغییرات شما را دریافت کند. مشارکت‌کنندگان نیازی ندارند منتظر بمانند تا پروژه تغییراتشان را بپذیرد — هر طرف می‌تواند با سرعت خودش کار کند. -==== Dictator and Lieutenants Workflow (جریان کاری دیکتاتور و معاونان) +==== جریان کاری دیکتاتور و معاونان (Dictator and Lieutenants Workflow) (((workflows, dictator and lieutenants))) این یک زیرمجموعه از جریان کاری چند مخزنه است. @@ -84,7 +84,7 @@ image::images/benevolent-dictator.png[Benevolent dictator workflow] این امکان را به رهبر پروژه (دیکتاتور) می‌دهد که بخش زیادی از کار را واگذار کند و مجموعه‌های بزرگی از کد را در چند مرحله جمع‌آوری و سپس ادغام کند. [[_patterns_for_managing_source_code_branches]] -==== Patterns for Managing Source Code Branches (الگوهایی برای مدیریت شاخه‌های کد منبع) +==== الگوهایی برای مدیریت شاخه‌های کد منبع (Patterns for Managing Source Code Branches) [NOTE] ==== @@ -95,7 +95,7 @@ image::images/benevolent-dictator.png[Benevolent dictator workflow] https://martinfowler.com/articles/branching-patterns.html[^] ==== -==== Workflows Summary (خلاصه جریان‌های کاری) +==== خلاصه جریان‌های کاری (Workflows Summary) این‌ها برخی جریان‌های کاری رایج هستند که با یک سیستم توزیع‌شده مانند گیت امکان‌پذیرند، اما می‌بینید که تنوع زیادی برای تطبیق با جریان کاری واقعی شما وجود دارد. اکنون که (امیدواریم) بتوانید ترکیب مناسبی از جریان‌های کاری را برای خود مشخص کنید، به بررسی مثال‌های مشخص‌تری از چگونگی انجام نقش‌های اصلی در جریان‌های مختلف می‌پردازیم. diff --git a/book/05-distributed-git/sections/maintaining.asc b/book/05-distributed-git/sections/maintaining.asc index a933894a..c2b5ef33 100644 --- a/book/05-distributed-git/sections/maintaining.asc +++ b/book/05-distributed-git/sections/maintaining.asc @@ -1,11 +1,11 @@ -=== Maintaining a Project (نگهداری یک پروژه) +=== نگهداری یک پروژه (Maintaining a Project) (((maintaining a project))) علاوه بر دانستن نحوه مشارکت مؤثر در یک پروژه، احتمالاً باید بدانید چگونه آن را نگهداری کنید. این کار می‌تواند شامل پذیرش و اعمال اصلاحاتی باشد که از طریق `format-patch` ایجاد شده و به شما ایمیل شده‌اند، یا ادغام تغییرات در شاخه‌های راه دور برای مخازنی که به عنوان ریموت به پروژه خود اضافه کرده‌اید. چه شما مسئول نگهداری یک مخزن رسمی باشید و چه بخواهید با تأیید یا تصویب اصلاحات کمک کنید، باید بدانید چگونه کار را به گونه‌ای بپذیرید که برای سایر مشارکت‌کنندگان واضح باشد و در درازمدت برای شما پایدار بماند. -==== Working in Topic Branches (کار در شاخه‌های موضوعی) +==== کار در شاخه‌های موضوعی (Working in Topic Branches) (((branches, topic))) وقتی قصد دارید کاری جدید را ادغام کنید، معمولاً بهتر است آن را در یک _شاخه موضوعی_ امتحان کنید — شاخه‌ای موقتی که به طور خاص برای آزمایش آن کار جدید ایجاد می‌شود. @@ -29,13 +29,13 @@ $ git checkout -b sc/ruby_client master حالا آماده‌اید که کار ارسالی را که دریافت کرده‌اید به این شاخه موضوعی اضافه کنید و تصمیم بگیرید که آیا می‌خواهید آن را به شاخه‌های بلندمدت خود ادغام کنید یا خیر. [[_patches_from_email]] -==== Applying Patches from Email (اعمال اصلاحات از طریق ایمیل) +==== اعمال اصلاحات از طریق ایمیل (Applying Patches from Email) (((email, applying patches from))) اگر اصلاحیه‌ای از طریق ایمیل دریافت کردید که باید آن را در پروژه خود ادغام کنید، لازم است ابتدا آن اصلاحیه را در شاخه موضوعی خود اعمال کنید تا آن را ارزیابی نمایید. دو روش برای اعمال اصلاحیه ایمیلی وجود دارد: با `git apply` یا با `git am`. -===== Applying a Patch with `apply` (اعمال اصلاحیه با `apply`) +===== اعمال یک پچ با `apply` (Applying a Patch with `apply`) (((git commands, apply))) اگر اصلاحیه را از کسی دریافت کردید که آن را با `git diff` یا نسخه‌ای از دستور یونیکس `diff` ایجاد کرده است (که توصیه نمی‌شود؛ بخش بعدی را ببینید)، می‌توانید آن را با فرمان `git apply` اعمال کنید. @@ -66,7 +66,7 @@ error: ticgit.gemspec: patch does not apply این فرمان همچنین در صورت شکست بررسی، با کد خطای غیر صفر خارج می‌شود، بنابراین می‌توانید آن را در اسکریپت‌ها به کار ببرید. [[_git_am]] -===== Applying a Patch with `am` (اعمال اصلاحیه با `am`) +===== اعمال پچ با `am` (Applying a Patch with `am`) (((git commands, am))) اگر مشارکت‌کننده از کاربران گیت باشد و به اندازه کافی حرفه‌ای باشد که از فرمان `format-patch` برای تولید پچ خود استفاده کند، کار شما آسان‌تر خواهد بود چون پچ شامل اطلاعات نویسنده و پیام کامیت برای شما است. @@ -182,7 +182,7 @@ Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all وقتی همه پچ‌های مربوط به موضوع شما اعمال و کامیت شدند، می‌توانید تصمیم بگیرید که آیا و چگونه آنها را در شاخه‌ای با عمر طولانی‌تر ادغام کنید. [[_checking_out_remotes]] -==== Checking Out Remote Branches (بررسی شاخه‌های ریموت) +==== بررسی شاخه‌های ریموت (Checking Out Remote Branches) (((branches, remote))) اگر مشارکت شما از طرف یک کاربر گیت باشد که مخزن خودش را راه‌اندازی کرده، تعدادی تغییر را در آن پوش کرده و سپس URL مخزن و نام شاخه ریموتی که تغییرات در آن هستند را برای شما ارسال کرده است، می‌توانید آن را به عنوان یک ریموت اضافه کرده و ادغام‌ها را به صورت محلی انجام دهید. @@ -218,7 +218,7 @@ Merge made by the 'recursive' strategy. ---- [[_what_is_introduced]] -==== Determining What Is Introduced (تعیین تغییرات معرفی شده) +==== تشخیص تغییرات ایجاد شده (Determining What Is Introduced) (((branches, diffing))) حالا شما یک شاخه موضوعی دارید که کارهای ارسالی را شامل می‌شود. @@ -293,14 +293,14 @@ $ git diff master...contrib این دستور فقط کاری که شاخه موضوعی شما پس از جد مشترکش با `master` انجام داده را نشان می‌دهد. این نحو بسیار مفیدی است که باید به خاطر بسپارید. -==== Integrating Contributed Work (ادغام کارهای ارسالی) +==== ادغام کارهای ارسالی (Integrating Contributed Work) (((integrating work))) وقتی همه کارهای شاخه موضوعی شما آماده ادغام به شاخه اصلی‌تر شدند، سوال این است که چگونه این کار را انجام دهید. علاوه بر این، چه روش کاری کلی را می‌خواهید برای مدیریت پروژه خود استفاده کنید؟ شما چندین گزینه دارید، پس چند مورد از آن‌ها را بررسی می‌کنیم. -===== Merging Workflows (روش‌های ادغام) +===== روش‌های ادغام (Merging Workflows) (((workflows, merging))) یکی از روش‌های پایه‌ای کار این است که تمام تغییرات را مستقیماً در شاخه‌ی `master` خود ادغام کنید. @@ -340,7 +340,7 @@ image::images/merging-workflows-5.png[After a project release] شما می‌توانید این مفهوم را با داشتن یک شاخه‌ی `integrate` که تمام کارها در آنجا ادغام می‌شود، گسترش دهید. سپس وقتی کد روی آن شاخه پایدار و تست‌ها را پاس کرد، آن را به شاخه‌ی `develop` ادغام می‌کنید؛ و وقتی آن شاخه برای مدتی پایدار بود، شاخه‌ی `master` خود را fast-forward می‌کنید. -===== Large-Merging Workflows (گردش‌کارهای ادغام بزرگ) +===== روندهای کاری ادغام بزرگ (Large-Merging Workflows) (((workflows, "merging (large)"))) پروژه‌ی Git چهار شاخه‌ی بلندمدت دارد: `master`، `next`، و `seen` (قبلاً "pu" به معنای به‌روزرسانی‌های پیشنهادی) برای کارهای جدید، و `maint` برای پشتیبانی و نگهداری. @@ -370,7 +370,7 @@ https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt[Git مطالعه کنید [[_rebase_cherry_pick]] -===== Rebasing and Cherry-Picking Workflows (گردش‌کارهای بازبیس و چری‌پیکینگ) +===== روندهای کاری بازپایه‌گذاری و انتخاب گزینشی (Rebasing and Cherry-Picking Workflows) (((workflows, rebasing and cherry-picking))) نگهدارندگان دیگر ترجیح می‌دهند کارهای ارائه شده را روی شاخه‌ی `master` خود بازبیس یا چری‌پیک کنند، به جای ادغام مستقیم، تا تاریخچه‌ای تقریباً خطی داشته باشند. @@ -405,7 +405,7 @@ image::images/rebasing-2.png[History after cherry-picking a commit on a topic br حالا می‌توانید شاخه موضوعی خود را حذف کنید و کامیت‌هایی که نمی‌خواستید وارد شوند را کنار بگذارید. -===== Rerere +===== بازاستفاده خودکار از حل تضادها (Rerere) (((git commands, rerere)))(((rerere))) اگر زیاد عملیات ادغام (merge) و بازپایه‌گذاری (rebase) انجام می‌دهید یا شاخه‌ی موضوعی بلندمدتی را نگهداری می‌کنید، گیت ویژگی‌ای به نام "`rerere`" دارد که می‌تواند به شما کمک کند. @@ -429,7 +429,7 @@ $ git config --global rerere.enabled true ما در بخش <> به جزئیات بیشتری درباره rerere خواهیم پرداخت. [[_tagging_releases]] -==== Tagging Your Releases (برچسب‌گذاری نسخه‌های خود) +==== برچسب‌گذاری نسخه‌های خود (Tagging Your Releases) (((tags)))(((tags, signing))) وقتی تصمیم می‌گیرید یک نسخه منتشر کنید، احتمالاً می‌خواهید یک برچسب (tag) اختصاص دهید تا بتوانید آن نسخه را در هر زمانی در آینده دوباره ایجاد کنید. @@ -485,7 +485,7 @@ $ git show maintainer-pgp-pub | gpg --import همچنین، اگر دستورالعمل‌هایی در پیام برچسب درج کنید، اجرای `git show ` به کاربر نهایی اجازه می‌دهد دستورالعمل‌های خاص‌تری درباره تأیید برچسب دریافت کند. [[_build_number]] -==== Generating a Build Number (تولید شماره ساخت) +==== تولید شماره ساخت (Generating a Build Number) (((build numbers)))(((git commands, describe))) چون گیت شماره‌هایی که به صورت پیوسته افزایش یابند مانند 'v123' یا معادل آن برای هر کامیت ندارد، اگر بخواهید نامی قابل خواندن برای انسان همراه با کامیت داشته باشید، می‌توانید دستور `git describe` را روی آن کامیت اجرا کنید. @@ -506,7 +506,7 @@ v1.6.2-rc1-20-g8c5b85c برای مثال، هسته لینوکس اخیراً تعداد کاراکترهای SHA-1 را از ۸ به ۱۰ افزایش داده است تا یکتایی اشیاء SHA-1 را تضمین کند، بنابراین نام‌های خروجی قدیمی `git describe` نامعتبر شده‌اند. [[_preparing_release]] -==== Preparing a Release (آماده‌سازی نسخه انتشار) +==== آماده‌سازی نسخه انتشار (Preparing a Release) (((releasing)))(((git commands, archive))) حالا می‌خواهید نسخه‌ای منتشر کنید. @@ -531,7 +531,7 @@ $ git archive master --prefix='project/' --format=zip > `git describe master`.zi اکنون شما یک فایل tar و یک آرشیو zip زیبا از نسخه پروژه‌تان دارید که می‌توانید آن را در وب‌سایت خود بارگذاری کنید یا برای دیگران ایمیل کنید. [[_the_shortlog]] -==== The Shortlog (گزارش کوتاه) +==== گزارش کوتاه (The Shortlog) (((git commands, shortlog))) وقت آن است که به فهرست ایمیل افرادی که می‌خواهند بدانند در پروژه شما چه خبر است اطلاع دهید. diff --git a/book/06-github/sections/1-setting-up-account.asc b/book/06-github/sections/1-setting-up-account.asc index 77a190dd..397cbbdb 100644 --- a/book/06-github/sections/1-setting-up-account.asc +++ b/book/06-github/sections/1-setting-up-account.asc @@ -1,7 +1,7 @@ -=== Account Setup and Configuration (راه‌اندازی و پیکربندی حساب کاربری) +=== راه‌اندازی و پیکربندی حساب کاربری (Account Setup and Configuration) (((GitHub, user accounts))) -اولین کاری که باید انجام دهید، ایجاد یک حساب کاربری رایگان است. کافی است به https://github.com مراجعه کنید، یک نام کاربری که قبلاً استفاده نشده است انتخاب کنید، یک ایمیل و رمز عبور وارد کنید و روی دکمه بزرگ سبز رنگ «Sign up for GitHub» کلیک کنید. +اولین کاری که باید انجام دهید، ایجاد یک حساب کاربری رایگان است. کافی است به `https://github.com` مراجعه کنید، یک نام کاربری که قبلاً استفاده نشده است انتخاب کنید، یک ایمیل و رمز عبور وارد کنید و روی دکمه بزرگ سبز رنگ «`Sign up for GitHub`» کلیک کنید. .The GitHub sign-up form image::images/signup.png[The GitHub sign-up form] @@ -17,7 +17,7 @@ image::images/signup.png[The GitHub sign-up form] کلیک روی لوگوی Octocat در بالای صفحه سمت چپ، شما را به صفحه داشبوردتان هدایت می‌کند. اکنون آماده استفاده از گیت‌هاب هستید. -==== SSH Access (دسترسی SSH) +==== دسترسی SSH (SSH Access) (((SSH keys, with GitHub))) در حال حاضر، شما می‌توانید با استفاده از پروتکل `https://` به مخازن گیت متصل شوید و با نام کاربری و رمز عبوری که همین الان ساخته‌اید، احراز هویت کنید. با این حال، برای کلون کردن پروژه‌های عمومی حتی نیازی به ثبت‌نام هم ندارید — حساب کاربری که ساختیم زمانی به کار می‌آید که بخواهیم پروژه‌ای را فورک کنیم و سپس تغییرات را به فورک خودمان ارسال کنیم. @@ -40,7 +40,7 @@ image::images/ssh-keys.png[The “SSH keys” link] ==== [[_personal_avatar]] -==== Your Avatar (آواتار) +==== آواتار شما (Your Avatar) اگر تمایل دارید، می‌توانید تصویری که به صورت پیش‌فرض برایتان ساخته شده را با عکس دلخواه خود جایگزین کنید. ابتدا به تب «Profile» (بالای تب SSH Keys) بروید و روی «Upload new picture» کلیک کنید. .The "`Profile`" link @@ -55,7 +55,7 @@ image::images/avatar-crop.png[Crop your uploaded avatar] اگر قبلاً تصویری در سرویس محبوب Gravatar (که اغلب برای حساب‌های وردپرس استفاده می‌شود) آپلود کرده باشید، آن تصویر به طور پیش‌فرض استفاده خواهد شد و نیازی به انجام این مرحله ندارید. -==== Your Email Addresses (آدرس‌های ایمیل شما) +==== آدرس‌های ایمیل شما (Your Email Addresses) گیت‌هاب برای ثبت ارتباط کامیت‌های گیت با حساب شما از آدرس ایمیل استفاده می‌کند. اگر در کامیت‌های خود از چندین ایمیل استفاده می‌کنید و می‌خواهید گیت‌هاب آن‌ها را به درستی به حساب شما مرتبط کند، باید همه آدرس‌های ایمیل استفاده شده را در بخش Emails در تنظیمات حساب اضافه کنید. @@ -65,7 +65,7 @@ image::images/email-settings.png[Add all your email addresses] در <<_add_email_addresses>> می‌توانید برخی از وضعیت‌های ممکن را ببینید. آدرس بالایی تأیید شده و به عنوان آدرس اصلی تنظیم شده است، یعنی اطلاعیه‌ها و رسیدها به آن ارسال می‌شود. آدرس دوم تأیید شده است و می‌توانید در صورت تمایل آن را به عنوان آدرس اصلی انتخاب کنید. آدرس آخر تأیید نشده است، بنابراین نمی‌توانید آن را به عنوان آدرس اصلی انتخاب کنید. اگر گیت‌هاب هر یک از این ایمیل‌ها را در پیام‌های کامیت در هر مخزن روی سایت ببیند، آن‌ها را به حساب شما پیوند خواهد داد. -==== Two Factor Authentication (احراز هویت دو مرحله‌ای) +==== احراز هویت دو مرحله‌ای (Two Factor Authentication) در نهایت، برای امنیت بیشتر، حتماً باید احراز هویت دو مرحله‌ای یا «2FA» را فعال کنید. احراز هویت دو مرحله‌ای مکانیزمی است که اخیراً محبوبیت زیادی پیدا کرده تا ریسک هک شدن حساب در صورت لو رفتن رمز عبور را کاهش دهد. فعال کردن این ویژگی باعث می‌شود گیت‌هاب از شما دو روش مختلف احراز هویت بخواهد، به طوری که اگر یکی از آن‌ها درز کند، مهاجم نتواند به حساب شما دسترسی پیدا کند. diff --git a/book/06-github/sections/2-contributing.asc b/book/06-github/sections/2-contributing.asc index a6f32ef4..f3279353 100644 --- a/book/06-github/sections/2-contributing.asc +++ b/book/06-github/sections/2-contributing.asc @@ -1,8 +1,8 @@ -=== Contributing to a Project (مشارکت در یک پروژه) +=== مشارکت در یک پروژه (Contributing to a Project) حالا که حساب کاربری‌مان راه‌اندازی شده است، بیایید به جزئیاتی بپردازیم که می‌تواند در کمک به شما برای مشارکت در یک پروژه موجود مفید باشد. -==== Forking Projects (فورک کردن پروژه‌ها) +==== فورک کردن پروژه‌ها (Forking Projects) (((forking))) اگر می‌خواهید در پروژه‌ای موجود مشارکت کنید که دسترسی ارسال (push) به آن را ندارید، می‌توانید پروژه را «`fork`» کنید. @@ -26,7 +26,7 @@ image::images/forkbutton.png[The “Fork” button] پس از چند ثانیه، به صفحه پروژه جدید خود هدایت می‌شوید که نسخه قابل نوشتن کد متعلق به خودتان است. [[ch06-github_flow]] -==== The GitHub Flow (روند کاری گیت‌هاب) +==== روند کاری گیت‌هاب (The GitHub Flow) (((GitHub, Flow))) گیت‌هاب حول یک روند همکاری خاص طراحی شده است که مرکز آن Pull Requestها هستند. @@ -55,7 +55,7 @@ image::images/forkbutton.png[The “Fork” button] برای دستورالعمل نصب و راهنمای استفاده به https://cli.github.com/ مراجعه کنید. ==== -===== Creating a Pull Request (ایجاد یک Pull Request) +===== ایجاد یک Pull Request (Creating a Pull Request) تونی به دنبال کدی برای اجرای روی میکروکنترلر برنامه‌پذیر Arduino خود است و برنامه بسیار خوبی در گیت‌هاب به آدرس https://github.com/schacon/blink پیدا کرده است. @@ -144,7 +144,7 @@ image::images/blink-03-pull-request-open.png[Pull Request creation page] از آنجا که می‌توانید حتی *بعد از* باز شدن درخواست pull به شاخه موضوعی، تغییرات جدید ارسال کنید، معمولاً این درخواست زود باز می‌شود و به عنوان راهی برای همکاری تیمی و انجام اصلاحات در یک زمینه مشخص استفاده می‌شود، نه اینکه در پایان فرایند باز شود. ==== -===== Iterating on a Pull Request (تکرار و اصلاح روی یک Pull Request) +===== تکرار روی یک درخواست کشش (Iterating on a Pull Request) در این مرحله، صاحب پروژه می‌تواند تغییر پیشنهادی را بررسی کرده و آن را ادغام کند، رد کند یا نظر دهد. فرض کنیم او ایده را دوست دارد، اما ترجیح می‌دهد مدت زمان خاموش بودن چراغ کمی بیشتر از روشن بودن آن باشد. @@ -203,11 +203,11 @@ image::images/blink-06-final.png[Pull Request final] نیازی به فورک کردن نیست. ==== -==== Advanced Pull Requests (درخواست‌های پیشرفته برای ادغام) +==== درخواست‌های پیشرفته برای ادغام (Advanced Pull Requests) حالا که اصول اولیه مشارکت در یک پروژه در گیت‌هاب را پوشش دادیم، بیایید چند نکته و ترفند جالب درباره‌ی درخواست‌های ادغام را بررسی کنیم تا بتوانید استفاده موثرتری از آن‌ها داشته باشید. -===== Pull Requests as Patches (درخواست‌های ادغام به عنوان پچ‌ها) +===== درخواست‌های ادغام به عنوان پچ‌ها (Pull Requests as Patches) مهم است که بدانید بسیاری از پروژه‌ها درخواست‌های ادغام را به عنوان صفی از پچ‌های کامل و بدون نقص که باید به ترتیب و بدون خطا اعمال شوند، نمی‌بینند، برخلاف پروژه‌های مبتنی بر فهرست‌های پستی که سری‌های پچ را به این شکل می‌بینند. بیشتر پروژه‌های گیت‌هاب شاخه‌های درخواست ادغام را به عنوان گفتگوهای تکرارشونده درباره‌ی یک تغییر پیشنهادی در نظر می‌گیرند که در نهایت به یک دیف متحد منجر می‌شود که با ادغام اعمال می‌شود. @@ -215,7 +215,7 @@ image::images/blink-06-final.png[Pull Request final] برای مثال، اگر دوباره به <<_pr_final>> نگاه کنید، متوجه می‌شوید که مشارکت‌کننده کامیت خود را ری‌بیس نکرده و درخواست ادغام جدیدی نفرستاده است. بلکه کامیت‌های جدیدی اضافه کرده و آن‌ها را به شاخه موجود پوش کرده است. بدین ترتیب اگر در آینده به این درخواست ادغام مراجعه کنید، می‌توانید به راحتی تمام زمینه‌ی تصمیم‌گیری‌ها را پیدا کنید. زدن دکمه «Merge» در سایت عمداً یک کامیت ادغام ایجاد می‌کند که به درخواست ادغام اشاره دارد تا در صورت نیاز به سادگی بتوان به گفتگوی اصلی بازگشت و آن را بررسی کرد. -===== Keeping up with Upstream (به‌روز بودن با شاخه اصلی) +===== به‌روز بودن با شاخه اصلی (Keeping up with Upstream) اگر درخواست ادغام شما قدیمی شود یا به هر دلیلی به‌طور تمیز ادغام نشود، باید آن را اصلاح کنید تا نگهدارنده بتواند به آسانی آن را ادغام کند. گیت‌هاب این موضوع را برای شما آزمایش می‌کند و در پایین هر درخواست ادغام به شما می‌گوید که ادغام ساده است یا خیر. @@ -284,7 +284,7 @@ image::images/pr-02-merge-fix.png[Pull Request now merges cleanly] اگر واقعاً می‌خواهید شاخه را ری‌بیس کنید تا آن را تمیز کنید، قطعاً می‌توانید این کار را انجام دهید، اما اکیداً توصیه می‌شود که روی شاخه‌ای که درخواست ادغام روی آن باز است، پوش فورس انجام ندهید. اگر افراد دیگری آن را دریافت و روی آن کار کرده باشند، با مشکلات بسیار زیادی مواجه خواهید شد که در <> توضیح داده شده است. در عوض، شاخه ری‌بیس شده را به شاخه جدیدی در گیت‌هاب پوش کنید و درخواست ادغام جدیدی باز کنید که به درخواست قبلی ارجاع دهد، سپس درخواست اصلی را ببندید. -===== References (ارجاع‌ها) +===== ارجاع‌ها (References) شاید سؤال بعدی شما این باشد: «چگونه به درخواست ادغام قدیمی ارجاع دهم؟» واقعیت این است که راه‌های بسیار زیادی برای ارجاع به چیزهای دیگر تقریباً در هر جایی که در گیت‌هاب می‌توانید بنویسید وجود دارد. @@ -324,7 +324,7 @@ image::images/mentions-03-closed.png[Link back to the new Pull Request in the cl باید یک SHA-1 کامل ۴۰ حرفی مشخص کنید، اما اگر گیت‌هاب آن را در یک کامنت ببیند، مستقیماً به کامیت لینک می‌دهد. دوباره، می‌توانید به کامیت‌ها در فورک‌ها یا مخازن دیگر به همان روشی که به مسائل اشاره می‌کنید، ارجاع دهید. -==== GitHub Flavored Markdown (مارک‌داون با طعم گیت‌هاب) +==== مارک‌داون با قابلیت‌های گیت‌هاب (GitHub Flavored Markdown) لینک دادن به مسائل دیگر تنها آغاز کارهای جالبی است که می‌توانید در تقریباً هر کادر متنی در گیت‌هاب انجام دهید. در توضیحات مسائل و درخواست‌های کشش، کامنت‌ها، کامنت‌های کد و موارد دیگر، می‌توانید از چیزی به نام «مارک‌داون با طعم گیت‌هاب» استفاده کنید. @@ -339,7 +339,7 @@ image::images/markdown-01-example.png[An example of GitHub Flavored Markdown as طعم گیت‌هاب از مارک‌داون امکانات بیشتری فراتر از نحو پایه مارک‌داون اضافه می‌کند. این امکانات هنگام نوشتن کامنت‌ها یا توضیحات مفید برای درخواست‌های کشش یا مسائل بسیار کاربردی هستند. -===== Task Lists (فهرست وظایف) +===== فهرست وظایف (Task Lists) اولین ویژگی واقعاً کاربردی مارک‌داون مخصوص گیت‌هاب، به ویژه برای استفاده در درخواست‌های کشش، فهرست وظایف است. فهرست وظایف، فهرستی از جعبه‌های انتخاب (checkbox) است که کارهایی را که می‌خواهید انجام دهید نشان می‌دهد. @@ -374,7 +374,7 @@ image::images/markdown-03-task-summary.png[Task list summary in the Pull Request این‌ها زمانی که درخواست کشش را زود باز می‌کنید و از آن برای پیگیری پیشرفت پیاده‌سازی ویژگی استفاده می‌کنید، فوق‌العاده کاربردی هستند. -===== Code Snippets (قطعه‌های کد) +===== قطعه‌های کد (Code Snippets) همچنین می‌توانید قطعه‌های کد را به کامنت‌ها اضافه کنید. این وقتی مفید است که بخواهید چیزی را نشان دهید که ممکن است قبل از پیاده‌سازی آن به عنوان یک کامیت روی شاخه، امتحانش کنید. @@ -399,7 +399,7 @@ for(int i=0 ; i < 5 ; i++) .Rendered fenced code example image::images/markdown-04-fenced-code.png[Rendered fenced code example] -===== Quoting (نقل قول) +===== نقل قول (Quoting) اگر می‌خواهید به بخش کوچکی از یک نظر طولانی پاسخ دهید، می‌توانید به‌صورت انتخابی بخشی از آن نظر را با گذاشتن علامت `>` در ابتدای خطوط نقل قول کنید. در واقع، این کار به قدری رایج و مفید است که یک میانبر صفحه‌کلید برای آن وجود دارد. @@ -421,7 +421,7 @@ How big are these slings and in particular, these arrows? .Rendered quoting example image::images/markdown-05-quote.png[Rendered quoting example] -===== Emoji (ایموجی) +===== ایموجی (Emoji) در نهایت، شما می‌توانید در نظرات خود از ایموجی هم استفاده کنید. این کار در نظرات بسیاری از مسائل و درخواست‌های pull در گیت‌هاب به‌طور گسترده‌ای به کار می‌رود. @@ -462,7 +462,7 @@ image::images/markdown-07-emoji.png[Heavy emoji commenting] https://www.webfx.com/tools/emoji-cheat-sheet/[^] ==== -===== Images (تصاویر) +===== تصاویر (Images) این تکنیک به‌طور فنی بخشی از Markdown مخصوص گیت‌هاب نیست، اما بسیار کاربردی است. علاوه بر افزودن لینک‌های تصویر Markdown به نظرات که یافتن و جایگذاری آدرس‌های URL آنها ممکن است دشوار باشد، گیت‌هاب امکان کشیدن و رها کردن تصاویر در ناحیه متن برای افزودن آنها را فراهم می‌کند. @@ -475,7 +475,7 @@ image::images/markdown-08-drag-drop.png[Drag and drop images to upload them and کلیک روی آن، یک راهنمای کامل از همه قابلیت‌های Markdown روی گیت‌هاب را به شما نشان می‌دهد. [[_fetch_and_push_on_different_repositories]] -==== Keep your GitHub public repository up-to-date (به‌روزرسانی مخزن عمومی گیت‌هاب خود را حفظ کنید) +==== به‌روز نگه داشتن مخزن عمومی گیت‌هاب شما (Keep your GitHub public repository up-to-date) پس از فورک کردن یک مخزن گیت‌هاب، مخزن شما (یا همان «فورک» شما) به‌صورت مستقل از مخزن اصلی وجود خواهد داشت. به‌خصوص وقتی مخزن اصلی کامیت‌های جدیدی دارد، گیت‌هاب با پیامی مانند زیر به شما اطلاع می‌دهد: diff --git a/book/06-github/sections/3-maintaining.asc b/book/06-github/sections/3-maintaining.asc index 65bd401f..d3c46333 100644 --- a/book/06-github/sections/3-maintaining.asc +++ b/book/06-github/sections/3-maintaining.asc @@ -1,9 +1,9 @@ [[_maintaining_gh_project]] -=== Maintaining a Project (نگهداری یک پروژه) +=== نگهداری یک پروژه (Maintaining a Project) حالا که در مشارکت در یک پروژه راحت شده‌ایم، بیایید به سمت دیگر قضیه نگاه کنیم: ایجاد، نگهداری و مدیریت پروژه‌ی خودتان. -==== Creating a New Repository (ایجاد یک مخزن جدید) +==== ایجاد یک مخزن جدید (Creating a New Repository) بیایید یک مخزن جدید بسازیم تا کد پروژه‌مان را به اشتراک بگذاریم. با کلیک روی دکمه‌ی «New repository» در سمت راست داشبورد شروع کنید، یا از دکمه‌ی «+» در نوار ابزار بالای صفحه کنار نام کاربری‌تان استفاده کنید، همانطور که در <<_new_repo_dropdown>> دیده می‌شود. @@ -37,7 +37,7 @@ image::images/newrepoform.png[The “new repository” form] همچنین، URL HTTPS همان آدرسی است که آن‌ها می‌توانند در مرورگر خود برای مشاهده پروژه وارد کنند. ==== -==== Adding Collaborators (اضافه کردن همکاران) +==== اضافه کردن همکاران (Adding Collaborators) اگر با افرادی کار می‌کنید که می‌خواهید دسترسی تعهد (commit) به آن‌ها بدهید، باید آن‌ها را به عنوان «collaborators» اضافه کنید. اگر بن، جف و لوئیس همه در گیت‌هاب حساب کاربری بسازند و شما بخواهید دسترسی push به مخزن خود بدهید، می‌توانید آن‌ها را به پروژه اضافه کنید. @@ -56,7 +56,7 @@ image::images/reposettingslink.png[The repository settings link] .The repository collaborators box image::images/collaborators.png[The repository collaborators box] -==== Managing Pull Requests (مدیریت درخواست‌های Pull) +==== مدیریت درخواست‌های کشش (Managing Pull Requests) حالا که یک پروژه با مقداری کد دارید و شاید چند همکار که دسترسی push دارند، بیایید ببینیم وقتی خودتان یک Pull Request دریافت می‌کنید، چه کار باید بکنید. @@ -66,7 +66,7 @@ image::images/collaborators.png[The repository collaborators box] برای این مثال‌ها فرض کنیم شما "`tonychacon`" هستید و یک پروژه کد آردوینو به نام «fade» ساخته‌اید. [[_email_notifications]] -===== Email Notifications (اعلان‌های ایمیلی) +===== اعلان‌های ایمیلی (Email Notifications) کسی می‌آید و تغییری در کد شما ایجاد می‌کند و یک Pull Request برای شما ارسال می‌کند. شما باید ایمیلی دریافت کنید که در مورد Pull Request جدید اطلاع دهد و این ایمیل باید چیزی شبیه به <<_email_pr>> باشد. @@ -92,7 +92,7 @@ URLهای جالب دیگر، URLهای `.diff` و `.patch` هستند که هم $ curl https://github.com/tonychacon/fade/pull/1.patch | git am ---- -===== Collaborating on the Pull Request (همکاری روی درخواست Pull ) +===== همکاری روی درخواست کشش (Collaborating on the Pull Request) همان‌طور که در <> توضیح دادیم، اکنون می‌توانید با شخصی که درخواست Pull را باز کرده است گفتگو کنید. می‌توانید روی خطوط خاصی از کد نظر بگذارید، روی کامیت‌های کامل یا کل درخواست Pull نظر بدهید و در همه جا از Markdown با سبک GitHub استفاده کنید. @@ -117,7 +117,7 @@ image::images/maint-02-merge.png[Merge button and instructions for merging a Pul اگر تصمیم گرفتید که نمی‌خواهید ادغام کنید، می‌توانید فقط درخواست Pull را ببندید و شخصی که آن را باز کرده است، مطلع خواهد شد. [[_pr_refs]] -===== Pull Request Refs (ارجاعات درخواست Pull) +===== رفرنس‌های درخواست کشش (Pull Request Refs) گیت‌هاب در واقع شاخه‌های درخواست Pull را به عنوان شاخه‌های شبه (pseudo-branches) روی سرور تبلیغ می‌کند. به طور پیش‌فرض وقتی کلون می‌کنید آن‌ها را دریافت نمی‌کنید، اما به شکلی پنهان وجود دارند و می‌توانید به راحتی به آن‌ها دسترسی پیدا کنید. @@ -214,7 +214,7 @@ Switched to a new branch 'pr/2' همچنین یک ارجاع `refs/pull/#/merge` در سمت GitHub وجود دارد که نشان‌دهنده کامیتی است که در صورت زدن دکمه "`merge`" در سایت حاصل می‌شود. این امکان را فراهم می‌کند که قبل از زدن دکمه، ادغام را تست کنید. -===== Pull Requests on Pull Requests (درخواست‌های Pull روی درخواست‌های Pull) +===== درخواست‌های کشش روی درخواست‌های کشش (Pull Requests on Pull Requests) شما می‌توانید نه تنها درخواست‌های Pull را به شاخه‌ی اصلی یا `master` ارسال کنید، بلکه در واقع می‌توانید درخواست Pull را به هر شاخه‌ای در شبکه هدف قرار دهید. در واقع، حتی می‌توانید یک درخواست Pull را هدف بگیرید. @@ -230,7 +230,7 @@ image::images/maint-04-target.png[Manually change the Pull Request target fork a در اینجا می‌توانید به‌راحتی مشخص کنید که شاخه جدیدتان را به یک درخواست Pull دیگر یا فورک دیگری از پروژه ادغام کنید. -==== Mentions and Notifications (اشاره‌ها و اعلان‌ها) +==== ذکرها و اعلان‌ها (Mentions and Notifications) گیت‌هاب همچنین سیستم اعلان‌های بسیار خوبی دارد که وقتی سوالی دارید یا به بازخورد از افراد یا تیم‌های خاص نیاز دارید، بسیار مفید است. @@ -252,7 +252,7 @@ image::images/maint-05-mentions.png[Start typing @ to mention someone] .Unsubscribe from an Issue or Pull Request image::images/maint-06-unsubscribe.png[Unsubscribe from an Issue or Pull Request] -===== The Notifications Page (صفحه اعلان‌ها) +===== صفحه اعلان‌ها (The Notifications Page) وقتی درباره‌ی "`اعلان‌ها`" در گیت‌هاب صحبت می‌کنیم، منظورمان روشی خاص است که گیت‌هاب برای اطلاع‌رسانی به شما هنگام رخ دادن رویدادها دارد و شما می‌توانید آن‌ها را به چند روش مختلف تنظیم کنید. اگر به تب "`Notification center`" در صفحه تنظیمات بروید، می‌توانید برخی از گزینه‌های موجود را ببینید. @@ -262,7 +262,7 @@ image::images/maint-07-notifications.png[Notification center options] دو گزینه اصلی دریافت اعلان‌ها از طریق "`ایمیل`" و "`وب`" هستند و می‌توانید برای زمانی که در فعالیت‌ها شرکت می‌کنید و فعالیت روی مخازنی که دنبال می‌کنید، هر دو، هیچ‌کدام یا یکی‌شان را انتخاب کنید. -====== Web Notifications (اعلان‌های وب) +====== اعلان‌های وب (Web Notifications) اعلان‌های وب فقط در گیت‌هاب وجود دارند و فقط می‌توانید آن‌ها را در گیت‌هاب مشاهده کنید. اگر این گزینه را در تنظیمات خود فعال کرده باشید و اعلان جدیدی برای شما ایجاد شود، یک نقطه‌ی کوچک آبی روی آیکون اعلان‌ها در بالای صفحه ظاهر می‌شود، همان‌طور که در <<_not_center>> دیده می‌شود. @@ -279,7 +279,7 @@ image::images/maint-08-notifications-page.png[Notification center] تمام این ابزارها برای مدیریت تعداد زیادی اعلان بسیار کاربردی هستند. بسیاری از کاربران حرفه‌ای گیت‌هاب، اعلان‌های ایمیل را کاملاً غیرفعال می‌کنند و تمام اعلان‌های خود را از طریق این صفحه مدیریت می‌کنند. -====== Email Notifications (اعلان‌های ایمیل) +====== اعلان‌های ایمیل (Email Notifications) اعلان‌های ایمیل روش دیگری برای دریافت اعلان‌ها از طریق گیت‌هاب هستند. اگر این گزینه را فعال کنید، برای هر اعلان یک ایمیل دریافت خواهید کرد. @@ -312,11 +312,11 @@ X-GitHub-Recipient-Address: tchacon@example.com همچنین شایان ذکر است که اگر اعلان‌های ایمیل و وب هر دو فعال باشند و شما نسخه ایمیلی اعلان را بخوانید، نسخه وب نیز به عنوان خوانده شده علامت‌گذاری می‌شود، البته به شرطی که در کلاینت ایمیل خود اجازه نمایش تصاویر را داده باشید. -==== Special Files (فایل‌های ویژه) +==== فایل‌های ویژه (Special Files) چند فایل ویژه وجود دارند که اگر در مخزن شما باشند، گیت‌هاب آن‌ها را تشخیص می‌دهد. -==== README +==== فایل معرفی (README) اولین فایل `README` است که می‌تواند تقریباً هر فرمتی داشته باشد که گیت‌هاب به عنوان متن قابل خواندن بشناسد. مثلاً می‌تواند `README`، `README.md`، `README.asciidoc` و غیره باشد. @@ -333,7 +333,7 @@ X-GitHub-Recipient-Address: tchacon@example.com از آنجا که گیت‌هاب این فایل را نمایش می‌دهد، می‌توانید تصاویر یا لینک‌هایی در آن بگنجانید تا فهم آن آسان‌تر شود. -==== CONTRIBUTING (مشارکت) +==== مشارکت (CONTRIBUTING) فایل ویژه دیگری که گیت‌هاب آن را تشخیص می‌دهد، فایل `CONTRIBUTING` است. اگر فایل `CONTRIBUTING` با هر پسوندی داشته باشید، گیت‌هاب زمانی که کسی درخواست پول جدیدی باز می‌کند، <<_contrib_file>> را نمایش می‌دهد. @@ -345,11 +345,11 @@ image::images/maint-09-contrib.png[Opening a Pull Request when a CONTRIBUTING fi ایده این است که شما می‌توانید قواعد خاصی که می‌خواهید یا نمی‌خواهید در یک Pull Request به پروژه شما ارسال شود را مشخص کنید. به این ترتیب، افراد احتمالاً قبل از باز کردن درخواست پول، دستورالعمل‌ها را مطالعه خواهند کرد. -==== Project Administration (مدیریت پروژه) +==== مدیریت پروژه (Project Administration) به طور کلی امکانات مدیریتی زیادی برای یک پروژه واحد وجود ندارد، اما چند مورد ممکن است برای شما جالب باشد. -===== Changing the Default Branch (تغییر شاخه پیش‌فرض) +===== تغییر شاخه پیش‌فرض (Changing the Default Branch) اگر شاخه‌ای غیر از "`master`" را به عنوان شاخه پیش‌فرض که می‌خواهید افراد روی آن درخواست پول باز کنند یا به صورت پیش‌فرض ببینند، استفاده می‌کنید، می‌توانید این تنظیم را در صفحه تنظیمات مخزن خود زیر تب "`Options`" تغییر دهید. @@ -359,7 +359,7 @@ image::images/maint-10-default-branch.png[Change the default branch for a projec به سادگی شاخه پیش‌فرض را در منوی کشویی تغییر دهید و از آن پس تمام عملیات اصلی با آن شاخه به عنوان پیش‌فرض انجام خواهد شد، از جمله شاخه‌ای که هنگام کلون کردن مخزن به صورت پیش‌فرض بررسی می‌شود. -===== Transferring a Project (انتقال یک پروژه) +===== انتقال یک پروژه (Transferring a Project) اگر بخواهید پروژه‌ای را به کاربر یا سازمان دیگری در گیت‌هاب منتقل کنید، گزینه‌ای با عنوان "`Transfer ownership`" در پایین همان تب "`Options`" در صفحه تنظیمات مخزن شما وجود دارد که این امکان را فراهم می‌کند. diff --git a/book/06-github/sections/4-managing-organization.asc b/book/06-github/sections/4-managing-organization.asc index 3c65340a..8659b853 100644 --- a/book/06-github/sections/4-managing-organization.asc +++ b/book/06-github/sections/4-managing-organization.asc @@ -1,5 +1,5 @@ [[ch06-github_orgs]] -=== Managing an organization (مدیریت یک سازمان) +=== مدیریت یک سازمان (Managing an organization) (((GitHub, organizations))) علاوه بر حساب‌های کاربری تک‌نفره، گیت‌هاب چیزی به نام سازمان‌ها دارد. @@ -7,7 +7,7 @@ این حساب‌ها نماینده گروهی از افراد با مالکیت مشترک پروژه‌ها هستند و ابزارهای زیادی برای مدیریت زیرگروه‌های این افراد وجود دارد. معمولاً این حساب‌ها برای گروه‌های متن‌باز (مانند "`perl`" یا "`rails`") یا شرکت‌ها (مانند "`google`" یا "`twitter`") استفاده می‌شوند. -==== اصول اولیه سازمان +==== اصول اولیه سازمان (organization basics) ایجاد یک سازمان بسیار آسان است؛ کافی است روی آیکون "`+`" در بالا و سمت راست هر صفحه گیت‌هاب کلیک کنید و از منو گزینه "`New organization`" را انتخاب کنید. @@ -29,7 +29,7 @@ image::images/neworg.png[The “New organization” menu item] حال بیایید برخی از ویژگی‌هایی که در حساب سازمانی کمی متفاوت هستند را بررسی کنیم. -==== Teams (تیم ها) +==== تیم ها (Teams) سازمان‌ها از طریق تیم‌ها با افراد مرتبط می‌شوند، که در واقع گروه‌بندی حساب‌های کاربری فردی و مخازن درون سازمان و نوع دسترسی آن افراد به آن مخازن است. @@ -60,7 +60,7 @@ image::images/orgs-02-teams.png[The Team page] یک کاربر می‌تواند عضو هر تعداد تیم باشد، پس خود را محدود به تیم‌های صرفاً کنترل دسترسی نکنید. تیم‌های علاقه‌مند خاص مانند `ux`، `css` یا `refactoring` برای نوع خاصی از سوالات مفید هستند و تیم‌هایی مانند `legal` و `colorblind` برای موضوعات کاملاً متفاوت کاربرد دارند. -==== Audit Log (گزارش بازرسی) +==== گزارش بازرسی (Audit Log) سازمان‌ها همچنین به مالکین دسترسی به تمام اطلاعات مربوط به اتفاقاتی که در سازمان رخ داده را می‌دهند. می‌توانید به تب 'Audit Log' بروید و ببینید چه رویدادهایی در سطح سازمان اتفاق افتاده، چه کسی آن‌ها را انجام داده و در کجا در جهان انجام شده‌اند. diff --git a/book/06-github/sections/5-scripting.asc b/book/06-github/sections/5-scripting.asc index 011a8980..23cd82ef 100644 --- a/book/06-github/sections/5-scripting.asc +++ b/book/06-github/sections/5-scripting.asc @@ -1,15 +1,15 @@ -=== Scripting GitHub (اسکریپتنویسی در گیتهاب) +=== اسکریپتنویسی در گیتهاب (Scripting GitHub) حالا که همهٔ ویژگیها و روندهای اصلی گیتهاب را بررسی کردیم، هر گروه یا پروژهٔ بزرگی ممکن است بخواهد تغییرات سفارشی یا سرویسهای خارجی خاصی را به آن اضافه کند. خوشبختانه، گیتهاب به طرق مختلف بسیار قابل تنظیم است. در این بخش، نحوهٔ استفاده از سیستم هوکهای گیتهاب و API آن را بررسی میکنیم تا گیتهاب را مطابق خواستههایمان به کار بگیریم. -==== Services and Hooks (سرویسها و هوکها) +==== سرویسها و هوکها (Services and Hooks) بخش هوکها و سرویسها در مدیریت مخزن گیتهاب سادهترین راه برای تعامل گیتهاب با سیستمهای خارجی است. -===== Services (سرویسها) +===== سرویسها (Services) ابتدا نگاهی به سرویسها میاندازیم. هر دو نوع ادغام هوکها و سرویسها را میتوانید در بخش تنظیمات مخزن خود پیدا کنید؛ جایی که قبلاً افزودن همکاران و تغییر شاخه پیشفرض پروژه را بررسی کردیم. @@ -34,7 +34,7 @@ image::images/scripting-02-email-service.png[Email service configuration] اگر سیستمی دارید که میخواهید با گیتهاب ادغام کنید، ابتدا اینجا را بررسی کنید تا ببینید آیا ادغام سرویس موجود هست یا نه. برای مثال، اگر از Jenkins برای اجرای تستهای کد خود استفاده میکنید، میتوانید سرویس داخلی Jenkins را فعال کنید تا هر بار که کسی به مخزن شما پوش میکند، یک اجرای تست شروع شود. -===== Hooks (هوکها) +===== هوکها (Hooks) اگر به چیزی خاصتر نیاز دارید یا میخواهید با سرویسی یا سایتی که در این فهرست نیست ادغام کنید، میتوانید از سیستم عمومیتر هوکها استفاده کنید. هوکهای مخزن گیتهاب بسیار سادهاند. @@ -109,7 +109,7 @@ image::images/scripting-04-webhook-debug.png[Web hook debugging information] برای اطلاعات بیشتر دربارهٔ نحوهٔ نوشتن وب هوکها و انواع مختلف رویدادهایی که میتوانید به آنها گوش دهید، به مستندات توسعهدهندگان گیتهاب در https://docs.github.com/en/webhooks-and-events/webhooks/about-webhooks[^] مراجعه کنید. -==== The GitHub API (API گیتهاب) +==== API گیتهاب (The GitHub API) (((GitHub, API))) سرویسها و هوکها به شما این امکان را میدهند که اعلانهایی دربارهٔ رویدادهای رخداده در مخازن خود دریافت کنید، اما اگر نیاز به اطلاعات بیشتری دربارهٔ این رویدادها داشته باشید چه؟ @@ -119,7 +119,7 @@ image::images/scripting-04-webhook-debug.png[Web hook debugging information] گیتهاب تعداد زیادی نقطهٔ پایانی (endpoint) API دارد که تقریباً هر کاری را که میتوانید روی وبسایت انجام دهید به صورت خودکار امکانپذیر میکند. در این بخش یاد میگیریم چگونه احراز هویت کنیم و به API متصل شویم، چگونه روی یک مسئله نظر بگذاریم و چگونه وضعیت یک Pull Request را از طریق API تغییر دهیم. -==== Basic Usage (استفادهٔ پایه) +==== استفادهٔ پایه (Basic Usage) سادهترین کاری که میتوانید انجام دهید، درخواست GET ساده به نقطه پایانی است که نیاز به احراز هویت ندارد. این میتواند اطلاعات یک کاربر یا دادههای فقط خواندنی دربارهٔ یک پروژه متنباز باشد. @@ -165,7 +165,7 @@ hs_err_pid* } ---- -==== Commenting on an Issue (نظر دادن درباره یک Issue) +==== نظر دادن روی یک مسئله (Commenting on an Issue) با این حال، اگر بخواهید عملی روی وبسایت انجام دهید، مانند نظر دادن درباره یک Issue یا Pull Request، یا اگر بخواهید محتوای خصوصی را مشاهده یا با آن تعامل کنید، باید احراز هویت کنید. @@ -222,7 +222,7 @@ image::images/scripting-06-comment.png[A comment posted from the GitHub API] میتوانید با API تقریباً هر کاری که در وبسایت میتوانید انجام دهید، انجام دهید — ایجاد و تنظیم milestones، اختصاص دادن افراد به Issues و Pull Requests، ایجاد و تغییر برچسبها، دسترسی به دادههای commit، ایجاد commit و branch جدید، باز کردن، بستن یا ادغام Pull Requests، ایجاد و ویرایش تیمها، نظر دادن روی خطوط کد در یک Pull Request، جستجو در سایت و غیره. -==== Changing the Status of a Pull Request (تغییر وضعیت یک Pull Request) +==== تغییر وضعیت یک درخواست کشش (Changing the Status of a Pull Request) یک مثال نهایی که بسیار مفید است اگر با Pull Requests کار میکنید، بررسی میکنیم. هر commit میتواند یک یا چند وضعیت (status) مرتبط داشته باشد و API وجود دارد که میتوانید این وضعیتها را اضافه یا بررسی کنید. @@ -291,7 +291,7 @@ image::images/scripting-07-status.png[Commit status via the API] همچنین مشاهده میکنید که Pull Request وضعیت آخرین commit روی شاخه را گرفته و اگر آن وضعیت failure باشد به شما هشدار میدهد. این بسیار مفید است اگر از این API برای نتایج تست استفاده میکنید تا به اشتباه چیزی را که آخرین commit آن تستها را رد کرده، ادغام نکنید. -==== Octokit +==== کتابخانه رسمی گیت‌هاب (Octokit) اگرچه در این مثالها تقریباً همه کارها را با curl و درخواستهای ساده HTTP انجام دادهایم، چندین کتابخانه متنباز وجود دارد که این API را به شکلی طبیعیتر در اختیار شما قرار میدهند. در زمان نگارش این متن، زبانهای پشتیبانی شده شامل Go، Objective-C، Ruby و .NET هستند. diff --git a/book/07-git-tools/sections/advanced-merging.asc b/book/07-git-tools/sections/advanced-merging.asc index c8560936..15152651 100644 --- a/book/07-git-tools/sections/advanced-merging.asc +++ b/book/07-git-tools/sections/advanced-merging.asc @@ -1,5 +1,5 @@ [[_advanced_merging]] -=== Advanced Merging (ادغام پیشرفته) +=== ادغام پیشرفته (Advanced Merging) ادغام در گیت معمولاً نسبتاً آسان است. از آنجا که گیت ادغام شاخه‌ای دیگر را چندین بار آسان می‌کند، این بدان معناست که می‌توانید یک شاخه بسیار طولانی‌مدت داشته باشید و در عین حال آن را به‌روز نگه دارید، به‌گونه‌ای که اغلب تعارضات کوچک را حل کنید، به جای اینکه در پایان با یک تعارض عظیم و ناگهانی مواجه شوید. @@ -12,7 +12,7 @@ در این بخش، به بررسی برخی از این مشکلات و ابزارهایی که گیت برای مدیریت این موقعیت‌های پیچیده در اختیار شما می‌گذارد، می‌پردازیم. همچنین انواع مختلف و غیرمعمول ادغام‌هایی که می‌توانید انجام دهید را بررسی می‌کنیم و نحوه بازگرداندن ادغام‌هایی که انجام داده‌اید را نیز مرور خواهیم کرد. -==== Merge Conflicts (تعارض‌های ادغام) +==== تعارض‌های ادغام (Merge Conflicts) در حالی که برخی اصول اولیه حل تعارض‌های ادغام را در <> پوشش دادیم، برای تعارض‌های پیچیده‌تر، گیت چند ابزار فراهم می‌کند تا به شما کمک کند بفهمید چه اتفاقی می‌افتد و چگونه بهتر با تعارض برخورد کنید. @@ -107,7 +107,7 @@ Automatic merge failed; fix conflicts and then commit the result. ---- [[_abort_merge]] -===== Aborting a Merge (لغو ادغام) +===== لغو ادغام (Aborting a Merge) حالا چند گزینه داریم. اول، بیایید بررسی کنیم چگونه از این وضعیت خارج شویم. @@ -129,7 +129,7 @@ $ git status -sb اگر به هر دلیلی بخواهید از اول شروع کنید، می‌توانید دستور `git reset --hard HEAD` را اجرا کنید تا مخزن شما به آخرین حالت کامیت شده بازگردد. توجه داشته باشید که هر تغییر ذخیره‌نشده‌ای از دست خواهد رفت؛ پس مطمئن شوید که هیچ کدام از تغییرات خود را نمی‌خواهید حفظ کنید. -===== Ignoring Whitespace (نادیده گرفتن فاصله‌ها) +===== نادیده گرفتن فاصله‌ها (Ignoring Whitespace) در این مورد خاص، تداخل‌ها به دلیل فاصله‌ها هستند. این موضوع را می‌دانیم چون مسئله ساده است، اما در موارد واقعی هم وقتی به تداخل نگاه می‌کنید، به‌راحتی قابل تشخیص است چون هر خط در یک طرف حذف شده و دوباره در طرف دیگر اضافه شده است. به‌طور پیش‌فرض، گیت تمام این خطوط را به‌عنوان تغییر یافته می‌بیند و نمی‌تواند فایل‌ها را ادغام کند. @@ -149,7 +149,7 @@ Merge made by the 'recursive' strategy. این قابلیت بسیار مفید است اگر در تیم شما کسی باشد که گاهی همه چیز را از فضاها به تب‌ها یا برعکس تغییر فرمت می‌دهد. [[_manual_remerge]] -===== Manual File Re-merging (ادغام مجدد دستی فایل‌ها) +===== ادغام مجدد دستی فایل‌ها (Manual File Re-merging) اگرچه گیت پیش‌پردازش فاصله‌ها را به‌خوبی مدیریت می‌کند، انواع دیگری از تغییرات وجود دارند که شاید گیت نتواند به‌طور خودکار آنها را مدیریت کند، اما می‌توان آنها را با اسکریپت اصلاح کرد. به‌عنوان مثال، فرض کنیم گیت نتواند تغییر فاصله‌ها را مدیریت کند و مجبور باشیم این کار را دستی انجام دهیم. @@ -384,7 +384,7 @@ $ git config --global merge.conflictstyle diff3 این برای تعارض‌های فایل‌های باینری که می‌توانید به سادگی یکی از دو طرف را انتخاب کنید، یا زمانی که فقط می‌خواهید برخی فایل‌ها را از شاخه دیگر ادغام کنید، بسیار مفید است — می‌توانید ادغام را انجام دهید و سپس قبل از کامیت، فایل‌های خاصی را از یکی از دو طرف چک‌اوت کنید. [[_merge_log]] -===== Merge Log (گزارش ادغام) +===== گزارش ادغام (Merge Log) ابزار مفید دیگری که هنگام حل تعارض‌های ادغام کاربرد دارد، `git log` است. این می‌تواند به شما کمک کند تا بفهمید چه چیزی ممکن است به ایجاد تعارض‌ها کمک کرده باشد. @@ -418,7 +418,7 @@ $ git log --oneline --left-right --merge اگر به جای آن، این فرمان را با گزینه `-p` اجرا کنید، فقط تفاوت‌های مربوط به فایلی که در نهایت دچار تعارض شده را خواهید دید. این می‌تواند بسیار مفید باشد تا سریعاً زمینه‌ای که به شما کمک می‌کند بفهمید چرا تعارض رخ داده و چگونه می‌توان آن را با هوشمندی بیشتری حل کرد را به دست آورید. -===== Combined Diff Format (قالب تفاوت ترکیبی) +===== قالب تفاوت ترکیبی (Combined Diff Format) از آنجا که گیت هر نتیجه ادغامی که موفق باشد را مرحله‌بندی می‌کند، وقتی در حالت ادغام دچار تعارض هستید و `git diff` را اجرا می‌کنید، فقط مواردی را می‌بینید که هنوز دچار تعارض هستند. این می‌تواند به شما کمک کند ببینید چه چیزهایی هنوز باید حل و فصل شود. @@ -510,7 +510,7 @@ index 0399cd5,59727f0..e1d0799 ---- [[_undoing_merges]] -==== Undoing Merges (بازگرداندن ادغام‌ها) +==== بازگرداندن ادغام‌ها (Undoing Merges) حالا که می‌دانید چگونه یک کامیت ادغام ایجاد کنید، احتمالاً بعضی را اشتباهی خواهید ساخت. یکی از چیزهای عالی در کار با گیت این است که اشتباه کردن اشکالی ندارد، چون امکان اصلاح آن وجود دارد و در بسیاری موارد آسان است. @@ -523,7 +523,7 @@ image::images/undomerge-start.png[Accidental merge commit] دو راه برای رفع این مشکل وجود دارد، بسته به اینکه نتیجه دلخواه شما چیست. -===== Fix the references (اصلاح اشاره‌گرها) +===== اصلاح اشاره‌گرها (Fix the references) اگر کامیت ادغام ناخواسته فقط روی مخزن محلی شما وجود دارد، ساده‌ترین و بهترین راه این است که شاخه‌ها را جابجا کنید تا به جایگاه دلخواه برسند. در بیشتر موارد، اگر بعد از ادغام اشتباهی `git merge`، دستور `git reset --hard HEAD~` را اجرا کنید، اشاره‌گر شاخه‌ها را به این شکل تنظیم می‌کند: @@ -544,7 +544,7 @@ image::images/undomerge-reset.png[History after `git reset --hard HEAD~`] همچنین این روش زمانی کار نمی‌کند که کامیت‌های دیگری بعد از ادغام ساخته شده باشند؛ جابجایی اشاره‌گرها باعث از دست رفتن آن تغییرات خواهد شد. [[_reverse_commit]] -===== Reverse the commit (معکوس کردن کامیت) +===== معکوس کردن کامیت (Reverse the commit) اگر جابجا کردن اشاره‌گر شاخه‌ها برای شما مناسب نیست، گیت این امکان را می‌دهد که کامیت جدیدی بسازید که تمام تغییرات یک کامیت موجود را برگرداند. گیت این عملیات را "`revert`" می‌نامد و در این موقعیت خاص، دستور به این شکل است: @@ -594,13 +594,13 @@ image::images/undomerge-revert3.png[History after re-merging a reverted merge] در این مثال، `M` و `^M` همدیگر را خنثی می‌کنند. `^^M` عملاً تغییرات از `C3` و `C4` را ادغام می‌کند و `C8` تغییرات از `C7` را وارد می‌کند، بنابراین اکنون شاخه‌ی `topic` کاملاً ادغام شده است. -==== Other Types of Merges (انواع دیگر ادغام‌ها) +==== انواع دیگر ادغام‌ها (Other Types of Merges) تا اینجا ما ادغام معمول دو شاخه را پوشش دادیم که معمولاً با استراتژی ادغام به نام "`recursive`" انجام می‌شود. اما روش‌های دیگری هم برای ادغام شاخه‌ها وجود دارد. بیایید چند مورد از آن‌ها را سریع بررسی کنیم. -===== Our or Theirs Preference (اولویت ما یا آن‌ها) +===== اولویت ما یا آن‌ها (Our or Theirs Preference) اول از همه، یک قابلیت مفید دیگر در حالت معمول ادغام "`recursive`" وجود دارد. ما قبلاً گزینه‌های `ignore-all-space` و `ignore-space-change` را که با `-X` منتقل می‌شوند دیدیم، اما می‌توانیم به گیت بگوییم که در صورت بروز تعارض، طرف یکی از شاخه‌ها را ترجیح دهد. diff --git a/book/07-git-tools/sections/bundling.asc b/book/07-git-tools/sections/bundling.asc index 1d3f1ce5..d8d2fc5c 100644 --- a/book/07-git-tools/sections/bundling.asc +++ b/book/07-git-tools/sections/bundling.asc @@ -1,5 +1,5 @@ [[_bundling]] -=== Bundling (بسته‌بندی) +=== بسته‌بندی (Bundling) اگرچه روش‌های معمول انتقال داده‌های Git از طریق شبکه (HTTP، SSH و غیره) را بررسی کرده‌ایم، اما در واقع یک روش دیگر هم برای این کار وجود دارد که معمولاً کمتر استفاده می‌شود اما می‌تواند بسیار کاربردی باشد. diff --git a/book/07-git-tools/sections/credentials.asc b/book/07-git-tools/sections/credentials.asc index bf2e7c5b..0a2db137 100644 --- a/book/07-git-tools/sections/credentials.asc +++ b/book/07-git-tools/sections/credentials.asc @@ -1,5 +1,5 @@ [[_credential_caching]] -=== Credential Storage (ذخیره‌سازی اطلاعات ورود) +=== ذخیره‌سازی اطلاعات ورود (Credential Storage) (((credentials))) (((git commands, credential))) @@ -53,7 +53,7 @@ $ git config --global credential.helper 'store --file ~/.my-credentials' helper = cache --timeout 30000 ---- -==== Under the Hood (پشت صحنه) +==== پشت صحنه (Under the Hood) این سیستم چگونه کار می‌کند؟ فرمان اصلی گیت برای سیستم کمک‌یار اطلاعات ورود، `git credential` است که یک فرمان را به‌عنوان آرگومان می‌گیرد و سپس ورودی بیشتری از طریق stdin دریافت می‌کند. @@ -148,7 +148,7 @@ https://bob:s3cre7@mygithost فقط یک سری خطوط است که هر کدام شامل یک آدرس URL همراه با اطلاعات ورود است. کمک‌یارهای `osxkeychain` و `wincred` از فرمت بومی فروشگاه‌های پشتیبان خود استفاده می‌کنند، در حالی که `cache` از فرمت حافظه داخلی خود استفاده می‌کند (که هیچ فرآیند دیگری نمی‌تواند بخواند). -==== A Custom Credential Cache (کش اطلاعات ورود سفارشی) +==== کش اعتبارنامهٔ سفارشی (A Custom Credential Cache) با توجه به اینکه `git-credential-store` و دوستان برنامه‌هایی جدا از گیت هستند، به‌راحتی می‌توان فهمید که _هر_ برنامه‌ای می‌تواند کمک‌یار اطلاعات ورود گیت باشد. کمک‌یارهای ارائه شده توسط گیت بسیاری از موارد رایج را پوشش می‌دهند، اما همه را نه. diff --git a/book/07-git-tools/sections/debugging.asc b/book/07-git-tools/sections/debugging.asc index fd0c1495..3a14dfb0 100644 --- a/book/07-git-tools/sections/debugging.asc +++ b/book/07-git-tools/sections/debugging.asc @@ -1,10 +1,10 @@ -=== Debugging with Git (اشکال‌زدایی با گیت) +=== اشکال‌زدایی با گیت (Debugging with Git) علاوه بر اینکه گیت عمدتاً برای کنترل نسخه طراحی شده، چند فرمان نیز دارد که به شما در اشکال‌زدایی پروژه‌های کد منبع کمک می‌کند. از آنجا که گیت برای مدیریت تقریباً هر نوع محتوایی طراحی شده، این ابزارها بسیار کلی هستند، اما اغلب می‌توانند هنگام بروز مشکل به شما در پیدا کردن باگ یا مقصر کمک کنند. [[_file_annotation]] -==== File Annotation (حاشیه‌نویسی فایل) +==== حاشیه‌نویسی فایل (File Annotation) اگر باگی در کدتان پیدا کردید و می‌خواهید بدانید کی و چرا به وجود آمده، حاشیه‌نویسی فایل معمولاً بهترین ابزار شماست. این ابزار نشان می‌دهد که آخرین کمیت (commit) که هر خط از هر فایلی را تغییر داده، کدام است. @@ -67,7 +67,7 @@ ad11ac80 GITPackUpload.m (Scott 2009-03-24 150) گیت به شما کامیت اصلی که آن خطوط را نوشته‌اید نشان می‌دهد، حتی اگر آن کد در فایل دیگری بوده باشد. [[_binary_search]] -==== Binary Search (سرچ باینری) +==== سرچ باینری (Binary Search) حاشیه‌نویسی یک فایل زمانی مفید است که بدانید مشکل از کجا شروع شده است. اگر نمی‌دانید چه چیزی باعث خطا شده و از آخرین وضعیتی که مطمئن بودید کد درست کار می‌کرده، ده‌ها یا صدها کامیت انجام شده باشد، احتمالاً به سراغ `git bisect` می‌روید تا کمک بگیرید. diff --git a/book/07-git-tools/sections/interactive-staging.asc b/book/07-git-tools/sections/interactive-staging.asc index 42c976b1..3dc20e73 100644 --- a/book/07-git-tools/sections/interactive-staging.asc +++ b/book/07-git-tools/sections/interactive-staging.asc @@ -1,5 +1,5 @@ [[_interactive_staging]] -=== Interactive Staging (مرحله‌بندی تعاملی) +=== مرحله‌بندی تعاملی (Interactive Staging) در این بخش، با چند دستور تعاملی Git آشنا می‌شوید که به شما کمک می‌کنند کامیت‌های خود را طوری تنظیم کنید که تنها شامل ترکیب‌ها و بخش‌های مشخصی از فایل‌ها باشند. این ابزارها زمانی مفیدند که شما تغییرات زیادی در چندین فایل ایجاد کرده‌اید و بعد تصمیم می‌گیرید که این تغییرات به جای یک کامیت بزرگ و نامنظم، به چند کامیت متمرکز و جداگانه تقسیم شوند. @@ -26,7 +26,7 @@ What now> پس از آن بخش «دستورات» قرار دارد که به شما اجازه می‌دهد کارهای متعددی مانند مرحله‌بندی و بازگرداندن فایل‌ها، مرحله‌بندی بخش‌هایی از فایل‌ها، افزودن فایل‌های دنبال‌نشده، و نمایش تفاوت‌های مرحله‌بندی شده را انجام دهید. -==== Staging and Unstaging Files (مرحله‌بندی و بازگرداندن فایل‌ها) +==== مرحله‌بندی و بازگرداندن فایل‌ها (Staging and Unstaging Files) اگر در پرامپت `What now>` حرف `u` یا عدد `2` (برای update) را تایپ کنید، از شما پرسیده می‌شود که کدام فایل‌ها را می‌خواهید مرحله‌بندی کنید: @@ -135,7 +135,7 @@ index 4d07108..4335f49 100644 با این دستورات پایه، می‌توانید با حالت تعاملی `git add` ناحیه مرحله‌بندی خود را راحت‌تر مدیریت کنید. -==== Staging Patches (مرحله‌بندی بخش‌هایی از فایل‌ها) +==== مرحله‌بندی بخش‌هایی از فایل‌ها (Staging Patches) همچنین امکان مرحله‌بندی _بخش‌هایی_ از فایل‌ها و نه کل فایل وجود دارد. مثلاً اگر در فایل `simplegit.rb` دو تغییر ایجاد کرده‌اید و می‌خواهید یکی را مرحله‌بندی کنید و دیگری را نه، این کار در Git بسیار ساده است. diff --git a/book/07-git-tools/sections/replace.asc b/book/07-git-tools/sections/replace.asc index e457ac31..83e820b2 100644 --- a/book/07-git-tools/sections/replace.asc +++ b/book/07-git-tools/sections/replace.asc @@ -1,5 +1,5 @@ [[_replace]] -=== Replace (جایگزینی) +=== جایگزینی (Replace) دستور `replace` به شما اجازه می‌دهد یک شیء در گیت مشخص کنید و بگویید «هر بار که به این شیء ارجاع داده می‌شود، تظاهر کن که این شیء، شیء دیگری است». این بیشتر برای جایگزینی یک کامیت در تاریخچه شما با کامیت دیگری مفید است بدون اینکه مجبور باشید کل تاریخچه را مثلاً با `git filter-branch` بازسازی کنید. diff --git a/book/07-git-tools/sections/rerere.asc b/book/07-git-tools/sections/rerere.asc index 0f8566d4..ad4eca43 100644 --- a/book/07-git-tools/sections/rerere.asc +++ b/book/07-git-tools/sections/rerere.asc @@ -1,5 +1,5 @@ [[ref_rerere]] -=== Rerere +=== بازاستفاده خودکار از حل تضادها (Rerere) قابلیت `git rerere` کمی ویژگی پنهانی است. نام آن مخفف "reuse recorded resolution" به معنی «استفاده مجدد از راه‌حل ثبت‌شده» است و همانطور که از نامش پیداست، به شما اجازه می‌دهد به گیت بگویید چگونه یک تعارض در یک بخش از کد را حل کرده‌اید تا دفعه بعد که همان تعارض را ببیند، بتواند به صورت خودکار آن را برای شما حل کند. diff --git a/book/07-git-tools/sections/reset.asc b/book/07-git-tools/sections/reset.asc index 4bc80fa7..a9ea400a 100644 --- a/book/07-git-tools/sections/reset.asc +++ b/book/07-git-tools/sections/reset.asc @@ -1,12 +1,12 @@ [[_git_reset]] -=== Reset Demystified (بازنشانی به زبان ساده) +=== بازنشانی به زبان ساده (Reset Demystified) قبل از پرداختن به ابزارهای تخصصی‌تر، بیایید درباره دستورات `reset` و `checkout` در گیت صحبت کنیم. این دستورات از گیج‌کننده‌ترین بخش‌های گیت هستند که در ابتدا با آنها مواجه می‌شوید. آن‌ها کارهای زیادی انجام می‌دهند که فهمیدن و به کارگیری درست‌شان به نظر ناامیدکننده می‌رسد. برای درک بهتر، یک استعاره ساده پیشنهاد می‌کنیم. -==== The Three Trees (سه درخت) +==== سه درخت (The Three Trees) راه ساده‌تر برای فکر کردن درباره `reset` و `checkout` این است که گیت را به عنوان مدیر محتوای سه درخت مختلف در نظر بگیریم. در اینجا منظور از «درخت» در واقع «مجموعه‌ای از فایل‌ها» است و نه لزوماً ساختار داده‌ای درختی. @@ -22,7 +22,7 @@ | Working Directory | Sandbox |================================ -===== The HEAD (نشانگر رفرنس) +===== نشانگر رفرنس (The HEAD) HEAD اشاره‌گری است به مرجع شاخه فعلی، که خود اشاره‌گری است به آخرین کامیت انجام شده روی آن شاخه. این یعنی HEAD والد کامیت بعدی خواهد بود که ایجاد می‌شود. @@ -49,7 +49,7 @@ $ git ls-tree -r HEAD دستورات `cat-file` و `ls-tree` در گیت دستوراتی از نوع «لوله‌کشی» (plumbing) هستند که برای کارهای سطح پایین استفاده می‌شوند و معمولاً در کار روزمره کاربرد ندارند، اما به ما کمک می‌کنند ببینیم چه اتفاقی در اینجا می‌افتد. [[_the_index]] -===== The Index (شاخص) +===== شاخص (The Index) _index_، *کامیت پیشنهادی بعدی شما* است. ما این مفهوم را به عنوان «منطقه آماده‌سازی» (Staging Area) گیت نیز می‌شناسیم، زیرا گیت هنگام اجرای `git commit` به آن نگاه می‌کند. @@ -69,7 +69,7 @@ $ git ls-files -s شاخص از لحاظ فنی ساختار درختی ندارد – در واقع به صورت یک فهرست ساده شده پیاده‌سازی شده است – اما برای اهداف ما به اندازه کافی شبیه به درخت است. -===== The Working Directory (دایرکتوری کاری) +===== دایرکتوری کاری (The Working Directory) در نهایت، دایرکتوری کاری شما است (که معمولاً به آن «درخت کاری» هم گفته می‌شود). دو درخت دیگر محتوای خود را به صورت کارآمد اما نامناسب در داخل پوشه `.git` ذخیره می‌کنند. @@ -88,7 +88,7 @@ $ tree 1 directory, 3 files ---- -==== The Workflow (روند کار) +==== روند کار (The Workflow) روند معمولی گیت این است که با دستکاری این سه درخت، عکس‌هایی از پروژه‌تان را در حالت‌های بهبود یافته متوالی ذخیره کند. @@ -154,7 +154,7 @@ image::images/reset-start.png[Git repository with three commits] این دستور به طور مستقیم این سه درخت را به روشی ساده و قابل پیش‌بینی دستکاری می‌کند. `reset` تا سه عملیات پایه‌ای انجام می‌دهد. -===== Step 1: Move HEAD (مرحله ۱: جابجایی HEAD) +===== مرحله ۱: جابجایی HEAD (Step 1: Move HEAD) اولین کاری که دستور `reset` انجام می‌دهد، جابجا کردن چیزی است که HEAD به آن اشاره می‌کند. این با تغییر خود HEAD متفاوت است (کاری که `checkout` انجام می‌دهد)؛ در واقع `reset` شاخه‌ای که HEAD به آن اشاره دارد را جابجا می‌کند. @@ -171,7 +171,7 @@ image::images/reset-soft.png[Soft reset] وقتی با `reset` به `HEAD~` (والد HEAD) بازمی‌گردید، شاخه را به موقعیت قبلی‌اش برمی‌گردانید بدون اینکه ایندکس یا دایرکتوری کاری تغییر کند. حالا می‌توانید ایندکس را به‌روزرسانی کنید و دوباره `git commit` اجرا کنید تا همان کاری را انجام دهید که `git commit --amend` انجام می‌دهد (ببینید <<_git_amend>>). -===== Step 2: Updating the Index (`--mixed`) (مرحله ۲: به‌روزرسانی ایندکس (`--mixed`)) +===== مرحله ۲: به‌روزرسانی ایندکس (`--mixed`) (Step 2: Updating the Index (`--mixed`)) توجه کنید که اگر حالا `git status` اجرا کنید، تفاوت بین ایندکس و HEAD جدید را به رنگ سبز می‌بینید. @@ -186,7 +186,7 @@ image::images/reset-mixed.png[Mixed reset] حالا دوباره به آن نمودار نگاه کنید و ببینید چه اتفاقی افتاد: باز هم آخرین کامیت شما را لغو کرد، اما همچنین همه فایل‌ها را از حالت staged خارج کرد. شما به قبل از اجرای تمام دستورات `git add` و `git commit` بازگشتید. -===== Step 3: Updating the Working Directory (`--hard`) (مرحله ۳: به‌روزرسانی دایرکتوری کاری (`--hard`)) +===== مرحله ۳: به‌روزرسانی دایرکتوری کاری (`--hard`) (Step 3: Updating the Working Directory (`--hard`)) سومین کاری که `reset` انجام می‌دهد این است که دایرکتوری کاری را شبیه ایندکس کند. اگر گزینه `--hard` را بدهید، دستور تا این مرحله ادامه پیدا می‌کند. @@ -201,7 +201,7 @@ image::images/reset-hard.png[Hard reset] هر اجرای دیگری از `reset` را می‌توان تقریباً به راحتی بازگرداند، اما گزینه `--hard` نمی‌تواند، چون فایل‌های دایرکتوری کاری را به زور بازنویسی می‌کند. در این مورد خاص، نسخه *v3* فایل ما هنوز در یک کامیت در پایگاه داده گیت موجود است و می‌توانیم آن را از طریق `reflog` بازیابی کنیم، اما اگر آن را کامیت نکرده بودیم، گیت فایل را بازنویسی کرده و بازیابی آن غیرممکن می‌شد. -===== Recap (جمع‌بندی) +===== جمع‌بندی (Recap) دستور `reset` این سه درخت را به ترتیب خاصی بازنویسی می‌کند و هر بار که شما بخواهید متوقف می‌شود: @@ -209,7 +209,7 @@ image::images/reset-hard.png[Hard reset] ۲. ایندکس را شبیه HEAD می‌کند _(اگر گزینه‌ای جز `--hard` نباشد، اینجا متوقف می‌شود)_. ۳. دایرکتوری کاری را شبیه ایندکس می‌کند. -==== Reset With a Path (reset همراه با مسیر فایل) +==== ریست با مسیر مشخص (Reset With a Path) این توضیحات مربوط به رفتار پایه‌ای `reset` بود، اما شما می‌توانید یک مسیر فایل به آن بدهید تا فقط روی آن عمل کند. اگر مسیری مشخص کنید، مرحله اول را رد می‌کند و باقی مراحل را فقط روی فایل یا فایل‌های مشخص شده اجرا می‌کند. @@ -247,7 +247,7 @@ image::images/reset-path3.png[Soft reset with a path to a specific commit] نکته جالب دیگر این است که مانند `git add`، فرمان `reset` نیز گزینه `--patch` را می‌پذیرد تا بتوانید محتوا را به صورت تکه به تکه از مرحله استیج خارج یا بازگردانید. پس می‌توانید محتوا را به صورت انتخابی از مرحله استیج خارج یا بازگردانید. -==== Squashing (ادغام کامیت‌ها) +==== ادغام کامیت‌ها (Squashing) بگذارید ببینیم چگونه می‌توان با این قدرت تازه یافته کاری جالب انجام داد — ادغام چند کامیت. @@ -274,12 +274,12 @@ image::images/reset-squash-r3.png[Git repository with squashed commit] حالا می‌بینید که تاریخچه قابل دسترس شما، یعنی همان تاریخی که ارسال می‌کنید، به گونه‌ای شده که انگار یک کامیت با نسخه *v1* از `file-a.txt` داشته‌اید و سپس کامیتی دوم که هم فایل `file-a.txt` را به نسخه *v3* تغییر داده و هم فایل `file-b.txt` را اضافه کرده است. کامیتی که نسخه *v2* فایل را داشت دیگر در تاریخچه نیست. -==== Check It Out (بررسی تفاوت‌ها) +==== بررسی تفاوت‌ها (Check It Out) در نهایت ممکن است بپرسید تفاوت بین `checkout` و `reset` چیست. مانند `reset`، `checkout` نیز سه درخت را دستکاری می‌کند و کمی متفاوت عمل می‌کند بسته به اینکه به آن مسیر فایل بدهید یا نه. -===== Without Paths (بدون مسیر فایل) +===== بدون مسیر فایل (Without Paths) اجرای `git checkout [branch]` بسیار شبیه به اجرای `git reset --hard [branch]` است، به این صورت که هر سه درخت را به حالت `[branch]` به‌روز می‌کند، اما دو تفاوت مهم دارد. @@ -300,7 +300,7 @@ image::images/reset-squash-r3.png[Git repository with squashed commit] .`git checkout` and `git reset` image::images/reset-checkout.png[`git checkout` and `git reset`] -===== With Paths (با مسیر فایل) +===== با مسیر فایل (With Paths) روش دیگر اجرای `checkout` دادن مسیر فایل است که مانند `reset`، HEAD را جابجا نمی‌کند. این دقیقاً مانند `git reset [branch] file` عمل می‌کند به این صورت که ایندکس را با آن فایل در آن کامیت به‌روزرسانی می‌کند ولی همچنین فایل را در شاخه کاری بازنویسی می‌کند. @@ -308,7 +308,7 @@ image::images/reset-checkout.png[`git checkout` and `git reset`] همچنین، مانند `git reset` و `git add`، `checkout` نیز گزینه `--patch` را می‌پذیرد تا بتوانید محتویات فایل را به صورت تکه به تکه بازگردانید. -==== Summary (خلاصه) +==== خلاصه (Summary) امیدوارم اکنون فرمان `reset` را بهتر درک کرده و با آن راحت‌تر شده باشید، اما احتمالاً هنوز کمی در مورد تفاوت دقیق آن با `checkout` گیج هستید و نمی‌توانید همه قواعد مختلف اجراها را به خاطر بسپارید. diff --git a/book/07-git-tools/sections/revision-selection.asc b/book/07-git-tools/sections/revision-selection.asc index 337da3b5..5b5b5db1 100644 --- a/book/07-git-tools/sections/revision-selection.asc +++ b/book/07-git-tools/sections/revision-selection.asc @@ -1,13 +1,13 @@ [[_revision_selection]] -=== Revision Selection (انتخاب بازبینی) +=== انتخاب بازبینی (Revision Selection) گیت به شما اجازه می‌دهد به یک کامیت، مجموعه‌ای از کامیت‌ها، یا بازه‌ای از کامیت‌ها به روش‌های مختلف اشاره کنید. این روش‌ها همیشه واضح نیستند اما دانستن آن‌ها مفید است. -==== Single Revisions (بازبینی‌های تکی) +==== بازبینی‌های تکی (Single Revisions) واضح است که می‌توانید به هر کامیت تکی با استفاده از هش کامل SHA-1 با ۴۰ کاراکتر آن اشاره کنید، اما راه‌های انسانی‌پسندتری نیز برای اشاره به کامیت‌ها وجود دارد. این بخش روش‌های مختلفی که می‌توانید به هر کامیت اشاره کنید را توضیح می‌دهد. -==== Short SHA-1 (هش کوتاه) +==== SHA-1 کوتاه (Short SHA-1) گیت به اندازه کافی هوشمند است که اگر چند کاراکتر اول هش SHA-1 را وارد کنید، تشخیص دهد به کدام کامیت اشاره می‌کنید، به شرطی که آن هش جزئی حداقل چهار کاراکتر بوده و بدون ابهام باشد؛ یعنی هیچ شیء دیگری در پایگاه داده اشیاء هش مشابهی با همین پیشوند نداشته باشد. @@ -85,7 +85,7 @@ a11bef0 Initial commit ==== [[_branch_references]] -==== Branch References (ارجاعات شاخه‌ها) +==== ارجاعات شاخه‌ها (Branch References) یک روش ساده برای اشاره به یک کامیت خاص این است که اگر آن کامیت سر شاخه یک شاخه باشد؛ در این صورت می‌توانید به‌سادگی از نام شاخه در هر دستور گیت که انتظار دارد مرجعی به یک کامیت داده شود استفاده کنید. برای مثال، اگر می‌خواهید آخرین شیء کامیت روی یک شاخه را بررسی کنید، دستورات زیر معادل هم هستند، با فرض اینکه شاخه `topic1` به کامیت `ca82a6d...` اشاره کند: @@ -108,11 +108,11 @@ ca82a6dff817ec66f44342007202690a93763949 ---- [[_git_reflog]] -==== RefLog Shortnames (نام‌های کوتاه RefLog) +==== نام‌های کوتاه RefLog (RefLog Shortnames) -One of the things Git does in the background while you're working away is keep a "`reflog`" -- a log of where your HEAD and branch references have been for the last few months. +یکی از کارهایی که گیت در پس‌زمینه انجام می‌دهد در حالی که شما مشغول کار هستید، نگهداری از "reflog" است - گزارشی از مکان‌های مرجع HEAD و شاخه‌های شما در چند ماه گذشته. -You can see your reflog by using `git reflog`: +شما می‌توانید با استفاده از `git reflog` reflog خود را مشاهده کنید: [source,console] ---- @@ -194,7 +194,7 @@ $ git show "HEAD@{0}" # OK ==== -==== Ancestry References (ارجاعات اجدادی) +==== ارجاعات اجدادی (Ancestry References) روش اصلی دیگر برای مشخص کردن یک کامیت، استفاده از اجداد آن است. اگر در انتهای یک مرجع علامت `^` (کرت) قرار دهید، گیت آن را به معنی والد آن کامیت تفسیر می‌کند. @@ -293,12 +293,12 @@ Date: Fri Nov 7 13:47:59 2008 -0500 شما همچنین می‌توانید این نحوها را ترکیب کنید -- مثلاً برای گرفتن والد دوم مرجع قبلی (فرض کنید یک کامیت ادغام باشد)، می‌توانید از `HEAD~3^2` استفاده کنید، و به همین ترتیب. [[_commit_ranges]] -==== Commit Ranges (بازه‌های کامیت) +==== بازه‌های کامیت (Commit Ranges) حال که می‌توانید کامیت‌های تکی را مشخص کنید، بیایید ببینیم چگونه می‌توان بازه‌ای از کامیت‌ها را تعیین کرد. این موضوع به خصوص برای مدیریت شاخه‌ها بسیار مفید است — اگر شاخه‌های زیادی داشته باشید، می‌توانید با تعیین بازه‌ها به سوالاتی مانند «چه کارهایی روی این شاخه انجام شده که هنوز به شاخه اصلی من ادغام نشده‌اند؟» پاسخ دهید. -===== Double Dot (دو نقطه دوگانه) +===== دو نقطه (Double Dot) رایج‌ترین نحو تعیین بازه، نحو دو نقطه دوگانه است. این در واقع از گیت می‌خواهد بازه‌ای از کامیت‌ها را که از یک کامیت قابل دسترسی‌اند اما از کامیت دیگر قابل دسترسی نیستند، مشخص کند. @@ -342,7 +342,7 @@ $ git log origin/master..HEAD همچنین می‌توانید یکی از طرفین نحو را حذف کنید تا Git به طور پیش‌فرض `HEAD` را فرض کند. برای مثال، می‌توانید همان نتایج مثال قبلی را با تایپ `git log origin/master..` به دست آورید — اگر یکی از طرف‌ها حذف شود، Git به جای آن `HEAD` را جایگزین می‌کند. -===== Multiple Points (چند نقطه) +===== چند نقطه (Multiple Points) نحو دو نقطه به عنوان یک روش کوتاه مفید است، اما ممکن است بخواهید بیش از دو شاخه برای مشخص کردن بازنگری خود تعیین کنید، مثلاً ببینید چه کامیت‌هایی در هر یک از چند شاخه وجود دارد که در شاخه‌ای که اکنون روی آن هستید نیست. Git به شما اجازه می‌دهد این کار را با استفاده از کاراکتر `^` یا `--not` قبل از هر مرجعی که نمی‌خواهید کامیت‌های قابل دسترسی از آن را ببینید انجام دهید. @@ -367,7 +367,7 @@ $ git log refA refB --not refC این سیستم پرس‌وجوی بازنگری بسیار قدرتمندی ایجاد می‌کند که به شما کمک می‌کند بفهمید چه چیزهایی در شاخه‌های شما وجود دارد. [[_triple_dot]] -===== Triple Dot (سه نقطه) +===== سه نقطه (Triple Dot) آخرین نحو اصلی انتخاب بازه، نحو سه نقطه است که همه‌ی کامیت‌هایی را مشخص می‌کند که توسط _هر یک_ از دو مرجع قابل دسترسی هستند اما توسط هر دوی آن‌ها نیستند. به تاریخچه‌ی کامیت مثال در <> نگاه کنید. diff --git a/book/07-git-tools/sections/rewriting-history.asc b/book/07-git-tools/sections/rewriting-history.asc index 00af0159..5e04627b 100644 --- a/book/07-git-tools/sections/rewriting-history.asc +++ b/book/07-git-tools/sections/rewriting-history.asc @@ -1,5 +1,5 @@ [[_rewriting_history]] -=== Rewriting History (بازنویسی تاریخچه) +=== بازنویسی تاریخچه (Rewriting History) بارها هنگام کار با گیت ممکن است بخواهید تاریخچه‌ی کامیت‌های محلی خود را بازبینی کنید. یکی از ویژگی‌های عالی گیت این است که به شما اجازه می‌دهد تصمیمات را در آخرین لحظه ممکن بگیرید. می‌توانید تصمیم بگیرید که کدام فایل‌ها در کدام کامیت قرار بگیرند درست قبل از اینکه کامیت کنید با استفاده از فضای استیجینگ، می‌توانید با دستور `git stash` مشخص کنید که هنوز قصد ندارید روی چیزی کار کنید، و می‌توانید کامیت‌هایی که قبلاً انجام شده‌اند را بازنویسی کنید تا طوری به نظر برسد که به شکل متفاوتی انجام شده‌اند. این کار می‌تواند شامل تغییر ترتیب کامیت‌ها، تغییر پیام‌ها یا اصلاح فایل‌ها در یک کامیت، ادغام یا تقسیم کامیت‌ها، یا حذف کامل کامیت‌ها باشد — همه این‌ها قبل از اینکه کار خود را با دیگران به اشتراک بگذارید. @@ -12,7 +12,7 @@ ==== [[_git_amend]] -==== Changing the Last Commit (تغییر آخرین کامیت) +==== تغییر آخرین کامیت (Changing the Last Commit) تغییر آخرین کامیت شما احتمالاً رایج‌ترین نوع بازنویسی تاریخچه است که انجام می‌دهید. معمولاً دو کار اصلی روی آخرین کامیت انجام می‌دهید: یا صرفاً پیام کامیت را تغییر می‌دهید، یا محتوای واقعی کامیت را با افزودن، حذف یا اصلاح فایل‌ها تغییر می‌دهید. @@ -44,7 +44,7 @@ $ git commit --amend --no-edit ==== [[_changing_multiple]] -==== Changing Multiple Commit Messages (تغییر پیام چندین کامیت) +==== تغییر پیام چندین کامیت (Changing Multiple Commit Messages) برای اصلاح کامیتی که در تاریخچه‌ی شما عقب‌تر است، باید از ابزارهای پیچیده‌تری استفاده کنید. گیت ابزار مستقیمی برای ویرایش تاریخچه ندارد، اما می‌توانید از ابزار ری‌بیس برای ری‌بیس کردن سری‌ای از کامیت‌ها روی HEAD که قبلاً بر اساس آن بودند استفاده کنید به جای اینکه آن‌ها را روی یک نقطه‌ی دیگر منتقل کنید. با ابزار ری‌بیس تعاملی می‌توانید بعد از هر کامیتی که می‌خواهید اصلاح کنید متوقف شده و پیام را تغییر دهید، فایل اضافه کنید یا هر کار دیگری انجام دهید. می‌توانید ری‌بیس را به صورت تعاملی با افزودن گزینه `-i` به دستور `git rebase` اجرا کنید. باید مشخص کنید تا چه اندازه عقب می‌خواهید تاریخچه را بازنویسی کنید با تعیین کامیتی که می‌خواهید ری‌بیس روی آن انجام شود. @@ -156,7 +156,7 @@ $ git rebase --continue اگر `pick` را در چند خط به `edit` تغییر دهید، می‌توانید این مراحل را برای هر کامیتی که به `edit` تغییر داده‌اید تکرار کنید. هر بار گیت متوقف می‌شود، اجازه می‌دهد کامیت را اصلاح کنید و وقتی تمام کردید ادامه می‌دهد. -==== Reordering Commits (مرتب‌سازی مجدد کامیت‌ها) +==== مرتب‌سازی مجدد کامیت‌ها (Reordering Commits) می‌توانید از بازپایه‌گذاری تعاملی برای مرتب‌کردن دوباره یا حذف کامل کامیت‌ها هم استفاده کنید. اگر می‌خواهید کامیت "`Add cat-file`" را حذف کنید و ترتیب دو کامیت دیگر را تغییر دهید، می‌توانید اسکریپت بازپایه‌گذاری را از این حالت به این شکل تغییر دهید: @@ -180,7 +180,7 @@ pick f7f3f6d Change my name a bit شما عملاً ترتیب این کامیت‌ها را تغییر داده و کامیت "`Add cat-file`" را به طور کامل حذف کرده‌اید. [[_squashing]] -==== Squashing Commits (اسکواش کامیت ها) +==== اسکواش کامیت ها (Squashing Commits) با ابزار بازپایه‌گذاری تعاملی می‌توانید چندین کامیت را به یک کامیت فشرده کنید. اسکریپت دستورالعمل‌های مفیدی در پیام بازپایه‌گذاری می‌گذارد: @@ -242,7 +242,7 @@ Add cat-file وقتی پیام را ذخیره کنید، یک کامیت واحد دارید که تغییرات هر سه کامیت قبلی را معرفی می‌کند. -==== Splitting a Commit (تقسیم یک کامیت) +==== تقسیم یک کامیت (Splitting a Commit) تقسیم یک کامیت یعنی بازگرداندن آن کامیت و سپس مرحله‌بندی و کامیت کردن بخش‌هایی از آن به تعداد کامیت‌هایی که می‌خواهید داشته باشید. مثلاً فرض کنید می‌خواهید کامیت وسط از سه کامیت را تقسیم کنید. @@ -286,7 +286,7 @@ f7f3f6d Change my name a bit توجه داشته باشید که آخرین کامیت (`f7f3f6d`) در لیست بدون تغییر باقی مانده است. با وجود اینکه این کامیت در اسکریپت نشان داده شده است، چون با علامت "`pick`" مشخص شده و قبل از هر تغییر ری‌بیس اعمال شده، گیت آن کامیت را دست‌نخورده باقی می‌گذارد. -==== Deleting a commit (حذف یک کامیت) +==== حذف یک کامیت (Deleting a commit) اگر می‌خواهید یک کامیت را حذف کنید، می‌توانید با استفاده از اسکریپت `rebase -i` این کار را انجام دهید. در لیست کامیت‌ها، کلمه "`drop`" را قبل از کامیتی که می‌خواهید حذف کنید قرار دهید (یا به سادگی آن خط را از اسکریپت ری‌بیس حذف کنید): @@ -313,7 +313,7 @@ drop 5aecc10 This commit is broken می‌توانید آن را در این آدرس پیدا کنید: https://git-rebase.io/[^] ==== -==== The Nuclear Option: filter-branch (گزینه هسته‌ای: filter-branch) +==== گزینه هسته‌ای: filter-branch (The Nuclear Option: filter-branch) گزینه دیگری برای بازنویسی تاریخچه وجود دارد که می‌توانید وقتی نیاز به بازنویسی تعداد زیادی کامیت به صورت اسکریپتی دارید، از آن استفاده کنید — مثلاً تغییر آدرس ایمیل خود به صورت سراسری یا حذف یک فایل از هر کامیت. این دستور `filter-branch` است و می‌تواند بخش‌های بسیار بزرگی از تاریخچه شما را بازنویسی کند، بنابراین احتمالاً نباید از آن استفاده کنید مگر اینکه پروژه شما هنوز عمومی نشده و افراد دیگری روی کامیت‌هایی که می‌خواهید بازنویسی کنید کار نکرده باشند. @@ -328,7 +328,7 @@ drop 5aecc10 This commit is broken ==== [[_removing_file_every_commit]] -===== Removing a File from Every Commit (حذف یک فایل از همه کامیت‌ها) +===== حذف یک فایل از همه کامیت‌ها (Removing a File from Every Commit) این مورد نسبتاً رایج است. کسی به اشتباه یک فایل باینری بزرگ را با دستور بی‌فکر `git add .` کامیت کرده و شما می‌خواهید آن را از همه جا حذف کنید. @@ -366,7 +366,7 @@ Ref 'refs/heads/master' was rewritten حالا ریشه جدید پروژه شما همان چیزی است که در هر بار زیرشاخه `trunk` بوده است. گیت همچنین به طور خودکار کامیت‌هایی را که روی آن زیرشاخه تأثیر نداشته‌اند حذف می‌کند. -===== Changing Email Addresses Globally (تغییر آدرس ایمیل به صورت سراسری) +===== تغییر آدرس ایمیل به صورت سراسری (Changing Email Addresses Globally) یک مورد رایج دیگر این است که فراموش کرده‌اید قبل از شروع کار، `git config` را برای تنظیم نام و ایمیل خود اجرا کنید، یا شاید بخواهید پروژه‌ای که در محل کار دارید را متن‌باز کنید و همه آدرس‌های ایمیل کاری را به آدرس شخصی خود تغییر دهید. در هر صورت، می‌توانید آدرس‌های ایمیل را در چندین کامیت به صورت دسته‌ای با `filter-branch` تغییر دهید. diff --git a/book/07-git-tools/sections/searching.asc b/book/07-git-tools/sections/searching.asc index c4d5d87d..5b1d4c5a 100644 --- a/book/07-git-tools/sections/searching.asc +++ b/book/07-git-tools/sections/searching.asc @@ -1,12 +1,12 @@ [[_searching]] -=== Searching (جستجو) +=== جستجو (Searching) در هر اندازه‌ای از کد، اغلب لازم است بدانید یک تابع کجا فراخوانی یا تعریف شده است، یا تاریخچه یک متد را مشاهده کنید. گیت چند ابزار مفید برای جستجوی سریع و آسان در کد و کامیت‌های ذخیره شده در پایگاه داده خود ارائه می‌دهد. در ادامه چند نمونه از آن‌ها را بررسی می‌کنیم. [[_git_grep]] -==== Git Grep (گلوبال سرچ گیت) +==== گلوبال سرچ گیت (Git Grep) گیت با دستوری به نام `grep` عرضه می‌شود که به شما امکان می‌دهد به سادگی در هر درخت کامیت شده، دایرکتوری کاری یا حتی ایندکس، به دنبال یک رشته یا عبارت منظم بگردید. در مثال‌های بعدی، کد منبع خود گیت را جستجو خواهیم کرد. @@ -91,7 +91,7 @@ v1.8.0:zlib.c اول اینکه بسیار سریع است، دوم اینکه می‌توانید در هر درخت گیت جستجو کنید، نه فقط دایرکتوری کاری. همانطور که در مثال بالا دیدیم، ما در نسخه قدیمی‌تر کد منبع گیت جستجو کردیم، نه نسخه‌ای که در حال حاضر چک‌اوت شده بود. -==== Git Log Searching (جستجوی تاریخچه گیت) +==== جستجوی تاریخچه گیت (Git Log Searching) شاید شما به دنبال _محل_ یک عبارت نیستید، بلکه می‌خواهید بدانید _چه زمانی_ آن وجود داشت یا معرفی شده است. دستور `git log` ابزارهای قدرتمندی برای یافتن کامیت‌های خاص بر اساس محتوای پیام‌ها یا حتی محتوای تغییراتی که ایجاد کرده‌اند، دارد. @@ -109,7 +109,7 @@ ef49a7a zlib: zlib can only process 4GB at a time اگر نیاز به جستجوی دقیق‌تری دارید، می‌توانید با گزینه `-G` یک عبارت منظم برای جستجو ارائه دهید. -===== Line Log Search (جستجوی تاریخچه خط) +===== جستجوی تاریخچه خط (Line Log Search) یکی دیگر از جستجوهای پیشرفته ولی بسیار مفید، جستجوی تاریخچه یک خط است. کافی است دستور `git log` را با گزینه `-L` اجرا کنید تا تاریخچه یک تابع یا خط کد در کدبیس شما نشان داده شود. diff --git a/book/07-git-tools/sections/signing.asc b/book/07-git-tools/sections/signing.asc index cd501c4d..0950a45a 100644 --- a/book/07-git-tools/sections/signing.asc +++ b/book/07-git-tools/sections/signing.asc @@ -4,7 +4,7 @@ گیت از نظر رمزنگاری امن است، اما کامل و بی‌نقص نیست. اگر کار دیگران را از اینترنت دریافت می‌کنید و می‌خواهید مطمئن شوید که کامیت‌ها واقعاً از منبعی معتبر هستند، گیت چند روش برای امضا و تأیید کارها با استفاده از GPG دارد. -==== GPG Introduction (معرفی GPG) +==== معرفی GPG (GPG Introduction) اول از همه، اگر می‌خواهید چیزی را امضا کنید، باید GPG را پیکربندی کرده و کلید شخصی خود را نصب کنید. @@ -34,7 +34,7 @@ $ git config --global user.signingkey 0A46826A! حالا گیت به طور پیش‌فرض از کلید شما برای امضای تگ‌ها و کامیت‌ها استفاده خواهد کرد، در صورت تمایل شما. -==== Signing Tags (امضای تگ‌ها) +==== امضای تگ‌ها (Signing Tags) اگر کلید خصوصی GPG خود را راه‌اندازی کرده‌اید، حالا می‌توانید از آن برای امضای تگ‌های جدید استفاده کنید. کافی است به جای `-a` از گزینه `-s` استفاده کنید: @@ -77,7 +77,7 @@ Date: Mon Mar 17 21:52:11 2008 -0700 Change version number ---- -==== Verifying Tags (تأیید تگ‌ها) +==== تأیید تگ‌ها (Verifying Tags) برای تأیید یک تگ امضا شده، از دستور `git tag -v ` استفاده کنید. این دستور از GPG برای تأیید امضا بهره می‌برد. @@ -110,7 +110,7 @@ error: could not verify the tag 'v1.4.2.1' ---- [[_signing_commits]] -==== Signing Commits (امضای کامیت‌ها) +==== امضای کامیت‌ها (Signing Commits) در نسخه‌های جدیدتر گیت (نسخه ۱.۷.۹ به بالا)، شما می‌توانید کامیت‌های تک‌تک را هم امضا کنید. اگر می‌خواهید به جای فقط امضای تگ‌ها، کامیت‌ها را مستقیماً امضا کنید، کافی است گزینه `-S` را به دستور `git commit` اضافه کنید. @@ -196,7 +196,7 @@ Merge made by the 'recursive' strategy. 1 file changed, 2 insertions(+) ---- -==== Everyone Must Sign (همه باید امضا کنند) +==== همه باید امضا کنند (Everyone Must Sign) امضای تگ‌ها و کامیت‌ها بسیار خوب است، اما اگر تصمیم بگیرید این روش را در جریان کاری معمول خود به‌کار ببرید، باید مطمئن شوید که همه اعضای تیم شما نحوه انجام این کار را بلد باشند. برای این کار می‌توانید از همه افراد بخواهید دستور `git config --local commit.gpgsign true` را اجرا کنند تا همه کامیت‌هایشان در مخزن به طور خودکار امضا شود. diff --git a/book/07-git-tools/sections/stashing-cleaning.asc b/book/07-git-tools/sections/stashing-cleaning.asc index 4e34ac1d..c0036a2f 100644 --- a/book/07-git-tools/sections/stashing-cleaning.asc +++ b/book/07-git-tools/sections/stashing-cleaning.asc @@ -1,5 +1,5 @@ [[_git_stashing]] -=== Stashing and Cleaning (ذخیره موقت و پاک‌سازی) +=== ذخیره موقت و پاک‌سازی (Stashing and Cleaning) اغلب، وقتی روی بخشی از پروژه‌تان کار می‌کنید، وضعیت کار به‌هم‌ریخته می‌شود و می‌خواهید برای مدتی به شاخه‌ای دیگر بروید تا روی موضوع دیگری کار کنید. مشکل اینجاست که نمی‌خواهید کار نیمه‌کاره‌تان را به‌صورت یک کامیت ذخیره کنید فقط برای اینکه بعداً به همین نقطه برگردید. پاسخ این مسئله دستور `git stash` است. @@ -16,7 +16,7 @@ اما ممکن است بخواهید برای بهره‌مندی از قابلیت‌های جدید به تدریج به جایگزین `push` مهاجرت کنید. ==== -==== Stashing Your Work (ذخیره موقت کار خود) +==== ذخیره موقت کار خود (Stashing Your Work) برای نشان دادن نحوه ذخیره موقت، وارد پروژه خود شوید و روی چند فایل کار کنید و شاید یکی از تغییرات را هم آماده (stage) کنید. اگر دستور `git status` را اجرا کنید، وضعیت ناپاک خود را خواهید دید: @@ -128,7 +128,7 @@ Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43) همچنین می‌توانید از دستور `git stash pop` استفاده کنید تا stash را اعمال کرده و بلافاصله از پشته حذف کند. -==== Creative Stashing (ذخیره موقت خلاقانه) +==== ذخیره موقت خلاقانه (Creative Stashing) چند نوع ذخیره موقت وجود دارد که ممکن است مفید باشند. گزینه اول که بسیار محبوب است، گزینه `--keep-index` برای دستور `git stash` است. @@ -190,7 +190,7 @@ Stash this hunk [y,n,q,a,d,/,e,?]? y Saved working directory and index state WIP on master: 1b65b17 added the index file ---- -==== Creating a Branch from a Stash (ایجاد شاخه‌ای از یک stash) +==== ایجاد شاخه‌ای از یک stash (Creating a Branch from a Stash) اگر کاری را stash کنید، آن را مدتی رها کنید و سپس در همان شاخه‌ای که کار را stash کرده بودید ادامه دهید، ممکن است هنگام اعمال دوباره‌ی آن کار به مشکل بربخورید. اگر اعمال تغییرات بخواهد فایلی را که شما در این فاصله تغییر داده‌اید اصلاح کند، با یک تداخل ادغام (merge conflict) مواجه خواهید شد و باید آن را حل کنید. اگر می‌خواهید راه ساده‌تری برای آزمایش دوباره‌ی تغییرات stash شده داشته باشید، می‌توانید دستور `git stash branch <نام شاخه جدید>` را اجرا کنید؛ این دستور شاخه‌ای جدید با نام انتخابی شما ایجاد می‌کند، به تعهد (commit) ای که هنگام stash کردن روی آن بودید می‌رود، تغییرات شما را دوباره اعمال می‌کند و اگر با موفقیت اعمال شد، stash را حذف می‌کند. @@ -218,7 +218,7 @@ Dropped refs/stash@{0} (29d385a81d163dfd45a452a2ce816487a6b8b014) این یک راه میانبر خوب برای بازیابی آسان کار stash شده و ادامه‌ی کار روی آن در یک شاخه جدید است. [[_git_clean]] -==== Cleaning your Working Directory (پاک‌سازی شاخه کاری (Working Directory)) +==== پاک‌سازی شاخه کاری (Working Directory) (Cleaning your Working Directory) در نهایت، ممکن است نخواهید برخی کارها یا فایل‌ها را stash کنید، بلکه صرفاً بخواهید آن‌ها را حذف کنید؛ برای این منظور دستور `git clean` طراحی شده است. diff --git a/book/07-git-tools/sections/submodules.asc b/book/07-git-tools/sections/submodules.asc index aadaf5c7..2cb2f45f 100644 --- a/book/07-git-tools/sections/submodules.asc +++ b/book/07-git-tools/sections/submodules.asc @@ -1,5 +1,5 @@ [[_git_submodules]] -=== Submodules (سابماژول ها) +=== سابماژول ها (Submodules) اغلب پیش می‌آید که هنگام کار روی یک پروژه، نیاز داشته باشید از پروژه دیگری در داخل آن استفاده کنید. شاید این پروژه یک کتابخانه باشد که توسط شخص ثالث توسعه یافته یا شما آن را جداگانه توسعه می‌دهید و در چند پروژه اصلی استفاده می‌کنید. @@ -17,7 +17,7 @@ این امکان را می‌دهد که مخزن دیگری را در پروژه خود کلون کرده و کامیت‌های خود را جداگانه نگه دارید. [[_starting_submodules]] -==== Starting with Submodules (شروع با سابماژول ها) +==== شروع با سابماژول ها (Starting with Submodules) ما قدم به قدم توسعه یک پروژه ساده را که به پروژه اصلی و چند زیرپروژه تقسیم شده، بررسی می‌کنیم. @@ -134,7 +134,7 @@ $ git push origin master ---- [[_cloning_submodules]] -==== Cloning a Project with Submodules (کلون کردن یک پروژه با ساب‌ماژول‌ها) +==== کلون کردن یک پروژه با ساب‌ماژول‌ها (Cloning a Project with Submodules) در اینجا پروژه‌ای با ساب‌ماژول درون آن را کلون می‌کنیم. وقتی چنین پروژه‌ای را کلون می‌کنید، به طور پیش‌فرض پوشه‌هایی که ساب‌ماژول دارند دریافت می‌شوند، اما هیچ فایلی در درون آن‌ها هنوز وجود ندارد: @@ -209,11 +209,11 @@ Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b2 اگر قبلاً پروژه را کلون کرده‌اید و فراموش کرده‌اید `--recurse-submodules` را استفاده کنید، می‌توانید مراحل `git submodule init` و `git submodule update` را با اجرای `git submodule update --init` ترکیب کنید. برای مقداردهی اولیه، دریافت و چک‌اوت هر زیرماژول تو در تو، می‌توانید از دستور مطمئن `git submodule update --init --recursive` استفاده کنید. -==== Working on a Project with Submodules (کار کردن روی پروژه‌ای با ساب‌ماژول‌ها) +==== کار کردن روی پروژه‌ای با ساب‌ماژول‌ها (Working on a Project with Submodules) اکنون یک نسخه از پروژه با ساب‌ماژول‌ها داریم و قصد داریم با هم‌تیمی‌هایمان روی هر دو پروژه اصلی و پروژه ساب‌ماژول همکاری کنیم. -===== Pulling in Upstream Changes from the Submodule Remote (دریافت تغییرات جدید از مخزن ساب‌ماژول) +===== دریافت تغییرات جدید از مخزن ساب‌ماژول (Pulling in Upstream Changes from the Submodule Remote) ساده‌ترین مدل استفاده از ساب‌ماژول در یک پروژه وقتی است که شما فقط مصرف‌کننده یک زیرپروژه باشید و بخواهید به‌صورت دوره‌ای به‌روزرسانی‌های آن را دریافت کنید، بدون اینکه در نسخه محلی خود تغییری ایجاد کنید. اجازه دهید یک مثال ساده را مرور کنیم. @@ -376,7 +376,7 @@ Submodule DbConnector c3f01dc..c87d55d: گیت به طور پیش‌فرض سعی می‌کند تمام زیرماژول‌های شما را هنگام اجرای `git submodule update --remote` به‌روزرسانی کند. اگر تعداد زیادی زیرماژول دارید، ممکن است بخواهید فقط نام زیرماژولی که می‌خواهید به‌روزرسانی کنید را وارد کنید. -===== Pulling Upstream Changes from the Project Remote (دریافت تغییرات از مخزن پروژه اصلی) +===== دریافت تغییرات از مخزن پروژه اصلی (Pulling Upstream Changes from the Project Remote) حالا بیایید خود را به جای همکار شما بگذاریم که کلون محلی خودش از مخزن MainProject را دارد. اجرای ساده `git pull` برای دریافت تغییرات تازه کامیت‌شده کافی نیست: @@ -452,7 +452,7 @@ $ git submodule sync --recursive $ git submodule update --init --recursive ---- -===== Working on a Submodule (کار کردن روی یک زیرماژول) +===== کار کردن روی یک زیرماژول (Working on a Submodule) احتمالاً اگر از زیرماژول‌ها استفاده می‌کنید، دلیلش این است که واقعاً می‌خواهید همزمان روی کد زیرماژول و کد پروژه اصلی (یا چند زیرماژول مختلف) کار کنید. در غیر این صورت، احتمالاً از یک سیستم مدیریت وابستگی ساده‌تر مانند Maven یا Rubygems استفاده می‌کردید. @@ -565,7 +565,7 @@ Unable to merge 'c75e92a2b3855c9e5b66f915308390d9db204aca' in submodule path 'Db می‌توانید به پوشه زیرماژول بروید و تداخل را همان‌طور که معمولاً انجام می‌دهید، رفع کنید. [[_publishing_submodules]] -===== Publishing Submodule Changes +===== انتشار تغییرات زیرماژول (Publishing Submodule Changes) حالا ما تغییراتی در پوشه زیرماژول داریم. بعضی از این تغییرات از طریق به‌روزرسانی‌های upstream دریافت شده‌اند و بعضی دیگر به‌صورت محلی ایجاد شده‌اند و هنوز برای هیچکس دیگری در دسترس نیستند چون آن‌ها را هنوز ارسال (push) نکرده‌ایم. @@ -636,7 +636,7 @@ To https://github.com/chaconinc/MainProject اگر push زیرماژول به هر دلیلی شکست بخورد، push پروژه اصلی نیز شکست خواهد خورد. می‌توانید این رفتار را با دستور `git config push.recurseSubmodules on-demand` به‌صورت پیش‌فرض تنظیم کنید. -===== Merging Submodule Changes (ادغام تغییرات زیرماژول) +===== ادغام تغییرات زیرماژول (Merging Submodule Changes) اگر همزمان با شخص دیگری مرجع زیرماژول را تغییر دهید، ممکن است با مشکلاتی مواجه شوید. یعنی اگر تاریخچه‌های زیرماژول از هم جدا شده و در شاخه‌های متفاوتی در پروژه اصلی ثبت شده باشند، ممکن است کمی زمان ببرد تا آن را حل کنید. @@ -784,11 +784,11 @@ $ git commit -am 'Fast forward to a common submodule child' این کار همان نتیجه را می‌دهد، اما حداقل این‌طوری می‌توانید مطمئن شوید که همه چیز درست است و کد در دایرکتوری ساب‌ماژول شما هست وقتی کارتان تمام شد. -==== Submodule Tips (نکاتی درباره ساب‌ماژول‌ها) +==== نکاتی درباره ساب‌ماژول‌ها (Submodule Tips) چند کار وجود دارد که می‌توانید برای آسان‌تر کردن کار با ساب‌ماژول‌ها انجام دهید. -===== Submodule Foreach (دستور foreach در ساب‌ماژول‌ها) +===== حلقه foreach روی زیرماژول‌ها (Submodule Foreach) دستوری به نام `foreach` برای ساب‌ماژول‌ها وجود دارد که به شما اجازه می‌دهد یک دستور دلخواه را در هر ساب‌ماژول اجرا کنید. این خیلی مفید است اگر چندین ساب‌ماژول در یک پروژه داشته باشید. @@ -859,7 +859,7 @@ index 1aaefb6..5297645 100644 در اینجا می‌بینیم که یک تابع در یک ساب‌ماژول تعریف شده و در پروژه اصلی فراخوانی می‌شود. این یک مثال ساده‌شده است، اما امیدوارم ایده‌ای از کاربرد آن به شما بدهد. -===== Useful Aliases (نام‌های مستعار مفید) +===== نام‌های مستعار مفید (Useful Aliases) شاید بخواهید برای برخی از این دستورات نام مستعار تعریف کنید چون ممکن است طولانی باشند و نمی‌توانید گزینه‌های پیکربندی برای بیشتر آن‌ها تنظیم کنید تا به صورت پیش‌فرض باشند. در <> نحوه تنظیم نام‌های مستعار گیت را پوشش دادیم، اما اینجا مثالی است از چیزی که ممکن است بخواهید اگر قصد دارید زیاد با ساب‌ماژول‌ها کار کنید، تنظیم کنید. diff --git a/book/07-git-tools/sections/subtree-merges.asc b/book/07-git-tools/sections/subtree-merges.asc index 9d86a1fd..5986f3e9 100644 --- a/book/07-git-tools/sections/subtree-merges.asc +++ b/book/07-git-tools/sections/subtree-merges.asc @@ -1,5 +1,5 @@ [[_subtree_merge]] -===== Subtree Merging (ادغام Subtree) +===== ادغام Subtree (Subtree Merging) ایده‌ی ادغام subtree این است که شما دو پروژه دارید، و یکی از این پروژه‌ها به یک زیرشاخه (subdirectory) از پروژه‌ی دیگر نگاشت می‌شود. وقتی شما یک ادغام subtree مشخص می‌کنید، Git اغلب به اندازه کافی هوشمند است که تشخیص دهد یکی زیرمجموعه‌ی دیگری است و آن‌ها را به درستی ادغام کند. diff --git a/book/08-customizing-git/sections/attributes.asc b/book/08-customizing-git/sections/attributes.asc index 7465839b..ef6772b2 100644 --- a/book/08-customizing-git/sections/attributes.asc +++ b/book/08-customizing-git/sections/attributes.asc @@ -1,4 +1,4 @@ -=== Git Attributes (ویژگی‌های گیت) +=== ویژگی‌های گیت (Git Attributes) (((attributes))) @@ -8,7 +8,7 @@ با استفاده از ویژگی‌ها، می‌توانید کارهایی مانند تعیین استراتژی‌های ادغام جداگانه برای فایل‌ها یا دایرکتوری‌های خاص پروژه، اطلاع دادن به گیت درباره نحوه مقایسه فایل‌های غیرمتنی، یا فیلتر کردن محتوا قبل از ثبت یا استخراج آن در گیت، انجام دهید. در این بخش، با برخی از ویژگی‌هایی که می‌توانید روی مسیرهای پروژه گیت خود تنظیم کنید آشنا می‌شوید و چند مثال عملی از کاربرد این قابلیت خواهید دید. -==== Binary Files (فایل‌های باینری) +==== فایل‌های باینری (Binary Files) (((binary files))) @@ -16,7 +16,7 @@ مثلاً برخی فایل‌های متنی ممکن است به صورت ماشینی ساخته شده باشند و قابلیت مقایسه (diff) نداشته باشند، در حالی که برخی فایل‌های باینری قابلیت مقایسه شدن دارند. شما خواهید آموخت چگونه به گیت بگویید کدام فایل‌ها باینری هستند و کدام نیستند. -===== Identifying Binary Files (شناسایی فایل‌های باینری) +===== شناسایی فایل‌های باینری (Identifying Binary Files) برخی فایل‌ها شبیه فایل متنی به نظر می‌رسند، اما باید به عنوان داده باینری با آنها رفتار شود. برای مثال، پروژه‌های Xcode در macOS شامل فایلی با پسوند `.pbxproj` هستند که اساساً یک مجموعه داده JSON (فرمت داده جاوااسکریپت به صورت متن ساده) است که توسط محیط توسعه (IDE) روی دیسک نوشته شده و تنظیمات ساخت و غیره را ذخیره می‌کند. @@ -33,7 +33,7 @@ اکنون گیت سعی نمی‌کند این فایل‌ها را تبدیل کند یا مشکلات CRLF را اصلاح کند؛ همچنین وقتی دستور `git show` یا `git diff` را روی پروژه اجرا می‌کنید، سعی نمی‌کند تفاوت‌ها را محاسبه یا نمایش دهد. -===== Diffing Binary Files (مقایسه فایل‌های باینری) +===== مقایسه فایل‌های باینری (Diffing Binary Files) شما همچنین می‌توانید از قابلیت ویژگی‌های گیت برای مقایسه مؤثر فایل‌های باینری استفاده کنید. این کار را با گفتن به گیت درباره چگونگی تبدیل داده‌های باینری به فرمت متنی که بتوان به روش معمول diff مقایسه کرد، انجام می‌دهید. @@ -154,7 +154,7 @@ index 88839c4..4afcb7c 100644 شما به‌راحتی می‌توانید ببینید که اندازه فایل و ابعاد تصویر هر دو تغییر کرده‌اند. [[_keyword_expansion]] -==== Keyword Expansion (گسترش کلیدواژه) +==== گسترش کلمات کلیدی (Keyword Expansion) (((keyword expansion))) گسترش کلیدواژه به سبک SVN یا CVS اغلب توسط توسعه‌دهندگانی که به این سیستم‌ها عادت دارند درخواست می‌شود. @@ -277,12 +277,12 @@ $ cat date_test.txt اما باید مراقب باشید، چون فایل `.gitattributes` همراه پروژه کامیت و منتقل می‌شود، اما درایور (در اینجا `dater`) اینطور نیست، بنابراین در همه جا کار نخواهد کرد. وقتی این فیلترها را طراحی می‌کنید، باید طوری باشند که در صورت شکست، به آرامی عمل کنند و پروژه همچنان به درستی کار کند. -==== Exporting Your Repository (خروجی گرفتن از مخزن شما) +==== خروجی گرفتن از مخزن شما (Exporting Your Repository) (((archiving))) داده‌های ویژگی Git همچنین به شما امکان می‌دهد هنگام استخراج آرشیو پروژه خود، کارهای جالبی انجام دهید. -===== `export-ignore` +===== نادیده‌گرفتن هنگام خروجی گرفتن (`export-ignore`) شما می‌توانید به گیت بگویید که هنگام ساخت آرشیو، برخی فایل‌ها یا پوشه‌ها را صادر نکند. اگر زیرپوشه یا فایلی وجود دارد که نمی‌خواهید در فایل آرشیو قرار بگیرد ولی می‌خواهید در پروژه‌تان ثبت شود، می‌توانید این فایل‌ها را با استفاده از صفت `export-ignore` مشخص کنید. @@ -297,7 +297,7 @@ test/ export-ignore حالا وقتی دستور `git archive` را برای ساخت tarball پروژه اجرا کنید، آن پوشه در آرشیو قرار نخواهد گرفت. -===== `export-subst` +===== جایگزینی هنگام خروجی گرفتن (`export-subst`) وقتی فایل‌ها را برای استقرار (deployment) صادر می‌کنید، می‌توانید قالب‌بندی و جایگزینی کلمات کلیدی (keyword-expansion) دستور `git log` را روی بخش‌های انتخاب‌شده‌ای از فایل‌ها که با صفت `export-subst` علامت‌گذاری شده‌اند، اعمال کنید. @@ -345,7 +345,7 @@ Last commit: 312ccc8 by Jim Hill at Fri May 8 09:14:04 2015 -0700 آرشیو حاصل برای کارهای استقرار مناسب است، اما مانند هر آرشیو صادر شده‌ای برای توسعه‌های بعدی مناسب نیست. -==== Merge Strategies (استراتژی‌های ادغام) +==== استراتژی‌های ادغام (Merge Strategies) (((merging, strategies))) شما همچنین می‌توانید از ویژگی‌های Git استفاده کنید تا به Git بگویید برای فایل‌های خاص در پروژه‌تان از استراتژی‌های ادغام متفاوتی استفاده کند. diff --git a/book/08-customizing-git/sections/config.asc b/book/08-customizing-git/sections/config.asc index 41395231..ca8511fe 100644 --- a/book/08-customizing-git/sections/config.asc +++ b/book/08-customizing-git/sections/config.asc @@ -1,5 +1,5 @@ [[_git_config]] -=== Git Configuration (پیکربندی گیت) +=== پیکربندی گیت (Git Configuration) (((git commands, config))) همان‌طور که به‌طور خلاصه در <> خواندید، می‌توانید تنظیمات پیکربندی گیت را با دستور `git config` مشخص کنید. @@ -28,31 +28,31 @@ $ git config --global user.email johndoe@example.com [NOTE] ==== -Git's configuration files are plain-text, so you can also set these values by manually editing the file and inserting the correct syntax. -It's generally easier to run the `git config` command, though. +فایل‌های پیکربندی گیت متن ساده هستند، بنابراین می‌توانید این مقادیر را با ویرایش دستی فایل و درج نحو صحیح نیز تنظیم کنید. +با این حال، اجرای دستور `git config` به طور کلی آسان‌تر است. ==== -==== Basic Client Configuration +==== پیکربندی پایهٔ کلاینت (Basic Client Configuration) -The configuration options recognized by Git fall into two categories: client-side and server-side. -The majority of the options are client-side -- configuring your personal working preferences. -Many, _many_ configuration options are supported, but a large fraction of them are useful only in certain edge cases; we'll cover just the most common and useful options here. -If you want to see a list of all the options your version of Git recognizes, you can run: +گزینه‌های پیکربندی که توسط گیت شناخته می‌شوند به دو دسته تقسیم می‌شوند: سمت کلاینت و سمت سرور. +اکثر گزینه‌ها سمت کلاینت هستند - پیکربندی ترجیحات شخصی کار شما. +گزینه‌های پیکربندی بسیار زیادی پشتیبانی می‌شوند، اما بخش بزرگی از آن‌ها فقط در موارد خاص و حاشیه‌ای مفید هستند؛ ما فقط رایج‌ترین و مفیدترین گزینه‌ها را در اینجا پوشش خواهیم داد. +اگر می‌خواهید لیستی از تمام گزینه‌هایی که نسخه شما از گیت می‌شناسد را ببینید، می‌توانید دستور زیر را اجرا کنید: [source,console] ---- $ man git-config ---- -This command lists all the available options in quite a bit of detail. -You can also find this reference material at https://git-scm.com/docs/git-config[^]. +این دستور تمام گزینه‌های موجود را با جزئیات زیادی فهرست می‌کند. +شما همچنین می‌توانید این مطالب مرجع را در https://git-scm.com/docs/git-config[^] پیدا کنید. [NOTE] ==== -For advanced use cases you may want to look up "Conditional includes" in the documentation mentioned above. +برای موارد استفاده پیشرفته ممکن است بخواهید "شامل‌های شرطی" را در مستندات ذکر شده در بالا جستجو کنید. ==== -===== `core.editor` +===== ویرایشگر اصلی (`core.editor`) ((($EDITOR)))((($VISUAL, see $EDITOR))) به طور پیش‌فرض، گیت از ویرایشگری که به عنوان ویرایشگر متنی پیش‌فرض خود از طریق یکی از متغیرهای محیطی شل `VISUAL` یا `EDITOR` تنظیم کرده‌اید استفاده می‌کند، و در غیر این صورت به ویرایشگر `vi` بازمی‌گردد تا پیام‌های کامیت و تگ شما را ایجاد و ویرایش کند. @@ -65,7 +65,7 @@ $ git config --global core.editor emacs اکنون، صرف‌نظر از اینکه ویرایشگر پیش‌فرض شل شما چه باشد، گیت برای ویرایش پیام‌ها Emacs را اجرا خواهد کرد. -===== `commit.template` +===== قالب کامیت (`commit.template`) (((commit templates))) اگر این مقدار را به مسیر یک فایل در سیستم خود تنظیم کنید، گیت آن فایل را به عنوان پیام اولیه پیش‌فرض هنگام کامیت استفاده خواهد کرد. @@ -118,7 +118,7 @@ feel free to be detailed. اگر تیم شما سیاست مشخصی برای پیام‌های commit دارد، قرار دادن یک قالب برای آن سیاست در سیستم خود و تنظیم Git برای استفاده پیش‌فرض از آن، می‌تواند شانس پیروی منظم از آن سیاست را افزایش دهد. -===== `core.pager` +===== صفحه‌بند اصلی (`core.pager`) (((pager))) این تنظیم تعیین می‌کند که هنگام نمایش خروجی‌هایی مانند `log` و `diff`، از کدام صفحه‌بند (pager) استفاده شود. می‌توانید آن را روی `more` یا صفحه‌بند مورد علاقه خود تنظیم کنید (به طور پیش‌فرض `less` است)، یا با تنظیم آن روی رشته خالی، آن را غیرفعال کنید: @@ -130,7 +130,7 @@ $ git config --global core.pager '' اگر این دستور را اجرا کنید، Git تمام خروجی تمام دستورات را چاپ می‌کند، بدون توجه به طول آن‌ها. -===== `user.signingkey` +===== کلید امضای کاربر (`user.signingkey`) (((GPG))) اگر در حال ساختن تگ‌های Annotated امضا شده هستید (همانطور که در <> بحث شده)، تنظیم کلید امضای GPG خود به عنوان یک تنظیمات پیکربندی کار را آسان‌تر می‌کند. شناسه کلید خود را به این شکل تنظیم کنید: @@ -165,7 +165,7 @@ $ git tag -s …و دستور `git config --global core.excludesfile ~/.gitignore_global` را اجرا کنید، Git دیگر هرگز شما را درباره این فایل‌ها اذیت نخواهد کرد. -===== `help.autocorrect` +===== اصلاح خودکار راهنما (`help.autocorrect`) (((autocorrect))) اگر دستوری را اشتباه تایپ کنید، چیزی شبیه به این به شما نمایش داده می‌شود: @@ -194,13 +194,13 @@ in 0.1 seconds automatically... `help.autocorrect` در واقع یک عدد صحیح است که دهم ثانیه را نشان می‌دهد. بنابراین اگر آن را روی ۵۰ تنظیم کنید، گیت به شما ۵ ثانیه فرصت می‌دهد تا قبل از اجرای دستور تصحیح‌شده خودکار، نظر خود را تغییر دهید. -==== Colors in Git (رنگ ها در گیت) +==== رنگ ها در گیت (Colors in Git) (((color))) گیت به طور کامل از خروجی رنگی ترمینال پشتیبانی می‌کند که به سرعت و به راحتی به تجزیه بصری خروجی دستورات کمک شایانی می‌کند. تعدادی گزینه می‌توانند به شما در تنظیم رنگ‌بندی بر اساس ترجیحاتتان کمک کنند. -===== `color.ui` +===== رنگ‌بندی رابط کاربری (`color.ui`) گیت به طور خودکار بیشتر خروجی خود را رنگی می‌کند، اما اگر این رفتار را دوست ندارید، یک کلید اصلی وجود دارد. برای خاموش کردن تمام خروجی‌های رنگی ترمینال گیت، این کار را انجام دهید: @@ -216,7 +216,7 @@ $ git config --global color.ui false شما به ندرت این را می‌خواهید؛ در بیشتر سناریوها، اگر کدهای رنگی در خروجی هدایت‌شده خود می‌خواهید، می‌توانید به جای آن پرچم `--color` را به دستور گیت پاس دهید تا آن را مجبور به استفاده از کدهای رنگی کند. تنظیمات پیش‌فرض تقریباً همیشه همان چیزی است که می‌خواهید. -===== `color.*` +===== تنظیمات رنگ‌بندی عمومی (`color.*`) اگر می‌خواهید در مورد اینکه کدام دستورات رنگی هستند و چگونه، دقیق‌تر باشید، گیت تنظیمات رنگ‌آمیزی خاص فعل را ارائه می‌دهد. هر یک از این موارد را می‌توان روی `true`، `false` یا `always` تنظیم کرد: @@ -238,7 +238,7 @@ $ git config --global color.diff.meta "blue black bold" اگر می‌خواهید ویژگی‌ای مانند پررنگ در مثال قبلی داشته باشید، می‌توانید از بین `bold` (پررنگ)، `dim` (کم‌نور)، `ul` (زیرخط)، `blink` (چشمک زدن) و `reverse` (جابجایی پیش‌زمینه و پس‌زمینه) انتخاب کنید. [[_external_merge_tools]] -==== External Merge and Diff Tools +==== ابزارهای خارجی ادغام و مقایسه (External Merge and Diff Tools) (((mergetool)))(((difftool))) اگرچه گیت پیاده‌سازی داخلی برای diff دارد که همان چیزی است که ما در این کتاب نشان داده‌ایم، اما می‌توانید به جای آن یک ابزار خارجی را راه‌اندازی کنید. @@ -379,14 +379,14 @@ $ git config --global merge.tool kdiff3 اگر این را اجرا کنید و به‌جای ایجاد فایل‌های `extMerge` و `extDiff`، گیت از KDiff3 برای حل تداخل‌ها و از ابزار معمولی diff گیت برای مقایسه‌ها استفاده خواهد کرد. -==== Formatting and Whitespace (قالب‌بندی و وایت اسپیس) +==== قالب‌بندی و وایت اسپیس (Formatting and Whitespace) (((whitespace))) مسائل مربوط به قالب‌بندی و فاصله‌های سفید از جمله مشکلات خسته‌کننده و ظریفی هستند که بسیاری از توسعه‌دهندگان هنگام همکاری، به‌ویژه در محیط‌های چندسکویی، با آن‌ها مواجه می‌شوند. خیلی آسان است که پَچ‌ها یا دیگر کارهای مشترک تغییرات ظریف در فاصله‌های سفید ایجاد کنند، زیرا ویرایشگرها این تغییرات را به‌صورت پنهانی اعمال می‌کنند، و اگر فایل‌های شما به سیستمی با ویندوز برسند ممکن است پایان خط‌ها (line endings) جایگزین شوند. گیت چند گزینهٔ پیکربندی برای کمک به این مسائل دارد. -===== `core.autocrlf` +===== تبدیل خودکار پایان خط‌ها (`core.autocrlf`) (((crlf)))(((line endings))) اگر روی ویندوز برنامه‌نویسی می‌کنید و با افرادی کار می‌کنید که روی ویندوز نیستند (یا بالعکس)، احتمالاً دیر یا زود با مشکل پایان‌خط‌ها روبه‌رو خواهید شد. @@ -419,7 +419,7 @@ $ git config --global core.autocrlf input $ git config --global core.autocrlf false ---- -===== `core.whitespace` +===== تنظیمات فاصله‌ها (Whitespace) اصلی (`core.whitespace`) Git به‌صورت پیش‌فرض برخی از مشکلات فاصله‌گذاری (whitespace) را تشخیص داده و تصحیح می‌کند. این ابزار می‌تواند به‌دنبال شش مشکل اصلی مربوط به فاصله‌ها بگردد -- سه مورد به‌طور پیش‌فرض فعال هستند و قابل خاموش کردن‌اند، و سه مورد به‌طور پیش‌فرض غیرفعال‌اند اما قابل فعال‌سازی هستند. @@ -474,7 +474,7 @@ $ git apply --whitespace=fix گزینه‌های پیکربندی سمت سرور گیت به اندازه سمت کلاینت زیاد نیستند، اما چند گزینهٔ جالب وجود دارد که شاید بخواهید به آن‌ها توجه کنید. -===== `receive.fsckObjects` +===== بررسی صحت اشیاء هنگام دریافت (`receive.fsckObjects`) گیت قادر است بررسی کند هر آبجکت دریافتی در هنگام پوش هنوز با چکسام SHA-1 خود مطابقت دارد و به آبجکت‌های معتبر اشاره می‌کند. با این حال، این کار به‌طور پیش‌فرض انجام نمی‌شود؛ زیرا عملی نسبتاً هزینه‌بر است و ممکن است عملیات را کند کند، به‌ویژه در مخازن بزرگ یا پوش‌های حجیم. @@ -487,7 +487,7 @@ $ git config --system receive.fsckObjects true حال گیت قبل از پذیرفتن هر پوش، یک بررسی یکپارچگی روی مخزن انجام می‌دهد تا مطمئن شود کلاینت‌های خراب (یا مخرب) دادهٔ معیوب وارد نمی‌کنند. -===== `receive.denyNonFastForwards` +===== رد دریافت‌های غیر پیش‌رونده (`receive.denyNonFastForwards`) اگر کامیت‌هایی را که قبلاً پوش کرده‌اید ری‌بیس کنید و سپس دوباره بخواهید پوش کنید، یا به‌طور کلی بخواهید کامیتی را به برنچی در راه دور پوش کنید که آن برنچ شامل آن کامیت نیست، درخواست شما رد خواهد شد. این به‌طور کلی سیاست خوبی است؛ اما در حالت ری‌بیس ممکن است شما بدانید چه می‌کنید و بتوانید با افزودن فلگ `-f` به دستور پوش، برنچ راه دور را به‌زور بروزرسانی (force-update) کنید. @@ -502,7 +502,7 @@ $ git config --system receive.denyNonFastForwards true راه دیگر برای این کار استفاده از هوک‌های سمت سرور برای دریافت (receive hooks) است که اندکی بعد به آن می‌پردازیم. این رویکرد به شما اجازه می‌دهد کارهای پیچیده‌تری انجام دهید، مثل جلوگیری از non-fast-forward برای زیرمجموعهٔ خاصی از کاربران. -===== `receive.denyDeletes` +===== رد حذف‌ها هنگام دریافت (`receive.denyDeletes`) یکی از راه‌حل‌ها برای سیاست `denyNonFastForwards` این است که کاربر شاخه را حذف کند و سپس آن را با ارجاع جدید دوباره پوش کند. برای جلوگیری از این کار، `receive.denyDeletes` را روی true تنظیم کنید: diff --git a/book/08-customizing-git/sections/hooks.asc b/book/08-customizing-git/sections/hooks.asc index 10428177..8808101b 100644 --- a/book/08-customizing-git/sections/hooks.asc +++ b/book/08-customizing-git/sections/hooks.asc @@ -1,5 +1,5 @@ [[_git_hooks]] -=== Git Hooks (هوک‌های Git) +=== هوک‌های Git (Git Hooks) (((hooks))) مثل بسیاری از سامانه‌های کنترل نسخه دیگر، Git راهی دارد تا هنگام رخ‌دادن بعضی عملیات مهم، اسکریپت‌های سفارشی را اجرا کند. @@ -7,7 +7,7 @@ هوک‌های سمتِ کلاینت با عملیاتی مانند commit و merge فعال می‌شوند، در حالی که هوک‌های سمتِ سرور هنگام عملیات شبکه‌ای مثل دریافت commitهای push شده اجرا می‌گردند. می‌توانید از این هوک‌ها برای اهداف گوناگون استفاده کنید. -==== Installing a Hook (نصب یک هوک) +==== نصب یک هوک (Installing a Hook) همهٔ هوک‌ها در زیرپوشهٔ `hooks` در دایرکتوری Git ذخیره می‌شوند. در اکثر پروژه‌ها این مسیر `.git/hooks` است. @@ -19,7 +19,7 @@ از آن زمان به بعد، این اسکریپت فراخوانی خواهد شد. در ادامه نام‌های فایلِ بیش‌ترین هوک‌های مهم را پوشش می‌دهیم. -==== Client-Side Hooks (هوک‌های سمتِ کلاینت) +==== هوک‌های سمتِ کلاینت (Client-Side Hooks) هوک‌های سمتِ کلاینت زیادی وجود دارند. این بخش آن‌ها را به هوک‌های جریان کار commit، اسکریپت‌های جریان کار ایمیل، و سایر موارد تقسیم می‌کند. @@ -30,7 +30,7 @@ اگر هدف‌تان از این اسکریپت‌ها اعمال یک سیاست است، احتمالاً می‌خواهید آن را در سمتِ سرور اعمال کنید؛ نمونه‌ای از این مورد را در <> ببینید. ==== -===== Committing-Workflow Hooks (هوک‌های مرتبط با جریان کار) +===== هوک‌های مرتبط با جریان کار (Committing-Workflow Hooks) چهار هوک اول مربوط به فرایند commit هستند. @@ -54,7 +54,7 @@ به‌طور کلی، این اسکریپت برای اعلان یا کارهای مشابه استفاده می‌شود. [[_email_hooks]] -===== Email Workflow Hooks (قلاب‌های جریان کاری ایمیل) +===== قلاب‌های جریان کاری ایمیل (Email Workflow Hooks) می‌توانید سه قلاب سمت کلاینت برای یک جریان کاری مبتنی بر ایمیل تنظیم کنید. همهٔ این‌ها توسط فرمان `git am` فراخوانی می‌شوند، بنابراین اگر از آن فرمان در جریان کاری‌تان استفاده نمی‌کنید، می‌توانید به‌راحتی به بخش بعدی بروید. @@ -75,7 +75,7 @@ با این اسکریپت نمی‌توانید فرایند اعمال پچ را متوقف کنید. [[_other_client_hooks]] -===== Other Client Hooks (هوک های دیگر کلاینت) +===== هوک های دیگر کلاینت (Other Client Hooks) قلاب `pre-rebase` قبل از انجام هر عمل ری‌بیس اجرا می‌شود و با خروج غیرصفر می‌تواند روند را متوقف کند. می‌توانید از این قلاب برای منع ری‌بیس کردن کامیت‌هایی که قبلاً پوش شده‌اند استفاده کنید. @@ -99,26 +99,26 @@ گیت گهگاه به‌عنوان بخشی از عملیات عادی خود جمع‌آوری زباله انجام می‌دهد، با فراخوانی `git gc --auto`. هوک `pre-auto-gc` درست پیش از انجام جمع‌آوری زباله فراخوانی می‌شود و می‌تواند برای اطلاع‌رسانی اینکه این کار در حال انجام است یا برای لغو جمع‌آوری در صورتی که الان زمان مناسبی نباشد، استفاده شود. -==== Server-Side Hooks (قلاب‌های سمت سرور) +==== قلاب‌های سمت سرور (Server-Side Hooks) علاوه بر قلاب‌های سمت کلاینت، می‌توانید به عنوان مدیر سیستم از چند قلاب مهم سمت سرور برای اجرای تقریباً هر نوع سیاستی برای پروژه خود استفاده کنید. این اسکریپت‌ها قبل و بعد از push به سرور اجرا می‌شوند. قلاب‌های قبل از اجرا می‌توانند در هر زمانی با خروج غیرصفر، فشار را رد کنند و همچنین پیام خطایی را به مشتری برگردانند؛ شما می‌توانید یک سیاست فشار را به هر اندازه که می‌خواهید پیچیده تنظیم کنید. -===== `pre-receive` +===== هوک قبل از دریافت (`pre-receive`) اولین اسکریپتی که هنگام رسیدگی به push از سمت یک کلاینت اجرا می‌شود، `pre-receive` است. لیستی از مراجع را که از ورودی استاندارد (stdin) وارد می‌شوند، می‌گیرد؛ اگر با کد غیرصفر خارج شود، هیچ‌کدام از آن‌ها پذیرفته نمی‌شوند. می‌توانید از این قلاب برای کارهایی مانند اطمینان از اینکه هیچ یک از مراجع به‌روزرسانی‌شده غیرقابل پیشروی سریع نیستند، یا برای کنترل دسترسی به تمام مراجع و فایل‌هایی که با فشار تغییر می‌دهند، استفاده کنید. -===== `update` +===== هوک به‌روزرسانی (`update`) اسکریپت `update` بسیار شبیه به اسکریپت `pre-receive` است، با این تفاوت که برای هر شاخه‌ای که push کننده سعی در به‌روزرسانی آن دارد، یک بار اجرا می‌شود. اگر فشاردهنده سعی دارد به شاخه‌های متعددی فشار وارد کند، `pre-receive` فقط یک بار اجرا می‌شود، در حالی که `update` به ازای هر شاخه‌ای که به آن فشار وارد می‌کند، یک بار اجرا می‌شود. به جای خواندن از ورودی استاندارد، این اسکریپت سه آرگومان می‌گیرد: نام مرجع (شاخه)، هش SHA-1 که مرجع قبل از push به آن اشاره می‌کرد، و هش SHA-1 که کاربر در حال تلاش برای push کردن آن است. اگر اسکریپت `update` با کد خروج غیرصفر به پایان برسد، فقط آن مرجع رد می‌شود؛ سایر مراجع همچنان می‌توانند به‌روزرسانی شوند. -===== `post-receive` +===== هوک بعد از دریافت (`post-receive`) قلاب `post-receive` پس از تکمیل کل فرآیند اجرا می‌شود و می‌تواند برای به‌روزرسانی سرویس‌های دیگر یا اطلاع‌رسانی به کاربران استفاده شود. داده‌های ورودی استاندارد (stdin) مشابه قلاب `pre-receive` را دریافت می‌کند. diff --git a/book/08-customizing-git/sections/policy.asc b/book/08-customizing-git/sections/policy.asc index 69dbdcd5..4aee2a87 100644 --- a/book/08-customizing-git/sections/policy.asc +++ b/book/08-customizing-git/sections/policy.asc @@ -1,5 +1,5 @@ [[_an_example_git_enforced_policy]] -=== An Example Git-Enforced Policy (یک نمونه سیاست اعمال شده توسط گیت) +=== یک نمونه سیاست اعمال شده توسط گیت (An Example Git-Enforced Policy) (((policy example))) در این بخش، از آنچه آموخته‌اید برای ایجاد یک گردش کار گیت استفاده خواهید کرد که قالب پیام‌های سفارشی را بررسی می‌کند و فقط به کاربران خاص اجازه می‌دهد زیرشاخه‌های خاصی را در یک پروژه تغییر دهند. @@ -8,7 +8,7 @@ اسکریپت‌هایی که نشان خواهیم داد به زبان روبی نوشته شده‌اند؛ تا حدی به دلیل اینرسی فکری ما، اما همچنین به این دلیل که روبی خواندنش آسان است، حتی اگر لزوماً نتوانید آن را بنویسید. با این حال، هر زبانی کار می‌کند – تمام اسکریپت‌های قلاب نمونه که با گیت توزیع می‌شوند یا در پرل یا در باش هستند، بنابراین با نگاهی به نمونه‌ها می‌توانید مثال‌های زیادی از قلاب‌ها را در این زبان‌ها نیز ببینید. -==== Server-Side Hook (قلاب سمت سرور ) +==== قلاب سمت سرور (Server-Side Hook) تمام کارهای سمت سرور در فایل `update` در دایرکتوری `hooks` شما قرار خواهد گرفت. قلاب `update` یک بار برای هر شاخه‌ای که push می‌شود اجرا می‌شود و سه آرگومان می‌گیرد: @@ -38,7 +38,7 @@ puts "(#{$refname}) (#{$oldrev[0,6]}) (#{$newrev[0,6]})" قضاوت نکن – این‌طوری نشان دادنش راحت‌تر است. [[_enforcing_commit_message_format]] -===== Enforcing a Specific Commit-Message Format (اعمال قالب خاصی برای پیام‌های commit) +===== اجبار به قالب خاص پیام کامیت (Enforcing a Specific Commit-Message Format) اولین چالش شما این است که اطمینان حاصل کنید هر پیام کامیت از قالب خاصی پیروی می‌کند. فقط برای داشتن یک هدف، فرض کنید هر پیام باید شامل رشته‌ای باشد که شبیه "`ref: 1234`" است، زیرا می‌خواهید هر کامیت به یک مورد کاری در سیستم تیکتینگ شما پیوند داشته باشد. @@ -108,7 +108,7 @@ check_message_format قرار دادن این در اسکریپت `update` شما، به‌روزرسانی‌هایی را که شامل کامیت‌هایی با پیام‌هایی هستند که از قانون شما پیروی نمی‌کنند، رد خواهد کرد. -===== Enforcing a User-Based ACL System (اجرای یک سیستم ACL مبتنی بر کاربر) +===== اجبار به سیستم کنترل دسترسی مبتنی بر کاربر (Enforcing a User-Based ACL System) فرض کنید می‌خواهید مکانیزمی اضافه کنید که از فهرست کنترل دسترسی (ACL) استفاده می‌کند و مشخص می‌کند که کدام کاربران مجاز به اعمال تغییرات در کدام بخش‌های پروژه‌های شما هستند. برخی افراد دسترسی کامل دارند و برخی دیگر فقط می‌توانند تغییرات را به زیرشاخه‌های خاص یا فایل‌های مشخص فشار دهند. @@ -214,7 +214,7 @@ check_directory_perms اکنون کاربران شما نمی‌توانند هیچ کامیتی را با پیام‌های بدشکل یا با فایل‌های اصلاح‌شده خارج از مسیرهای تعیین‌شده خود پوش کنند. -===== Testing It Out (آزمایش آن) +===== آزمایش کردن آن (Testing It Out) اگر دستور `chmod u+x .git/hooks/update` را اجرا کنید، که فایل حاوی تمام این کد است، و سپس سعی کنید یک کامیت با پیام غیرمطابق را پوش کنید، چیزی شبیه این دریافت می‌کنید: @@ -279,7 +279,7 @@ error: failed to push some refs to 'git@gitserver:project.git' از این به بعد، تا زمانی که اسکریپت `update` وجود داشته باشد و قابل اجرا باشد، مخزن شما هرگز پیام کامیتی بدون الگوی شما نخواهد داشت و کاربران شما در یک محیط ایزوله قرار خواهند گرفت. -==== Client-Side Hooks (قلاب‌های سمت کلاینت ) +==== قلاب‌های سمت کلاینت (Client-Side Hooks) نقطه ضعف این رویکرد غرغره‌هایی است که به ناچار در صورت رد pushهای commit کاربران شما ایجاد می‌شود. رد شدن کار با دقت ساخته شده آنها در آخرین لحظه می‌تواند بسیار خسته‌کننده و گیج‌کننده باشد؛ و علاوه بر این، آنها باید تاریخچه خود را برای اصلاح آن ویرایش کنند، که همیشه برای افراد ضعیف‌القلب آسان نیست. diff --git a/book/09-git-and-other-scms/sections/client-hg.asc b/book/09-git-and-other-scms/sections/client-hg.asc index f90cc159..56481dce 100644 --- a/book/09-git-and-other-scms/sections/client-hg.asc +++ b/book/09-git-and-other-scms/sections/client-hg.asc @@ -1,4 +1,4 @@ -==== Git and Mercurial (گیت و مرکوریال) +==== گیت و مرکوریال (Git and Mercurial) (((Interoperation with other VCSs, Mercurial))) (((Mercurial))) @@ -11,7 +11,7 @@ نام این پروژه git-remote-hg است و می‌توانید آن را در https://github.com/felipec/git-remote-hg[^] پیدا کنید. -===== git-remote-hg +===== ابزار گیت برای تعامل با Mercurial (git-remote-hg) ابتدا باید git-remote-hg را نصب کنید. این در عمل به معنی قرار دادن فایل آن در مسیری است که در PATH شما قرار دارد، به این صورت: @@ -46,7 +46,7 @@ $ pip install mercurial $ hg clone http://selenic.com/repo/hello /tmp/hello ---- -===== Getting Started (شروع کار) +===== شروع کار (Getting Started) حال که یک مخزن «`سمت سرور`» مناسب داریم، می‌توانیم یک گردش‌کار معمولی را طی کنیم. همان‌طور که خواهید دید، این دو سیستم آن‌قدر به هم شبیه‌اند که اصطکاک چندانی وجود ندارد. @@ -128,7 +128,7 @@ $ cp .hgignore .git/info/exclude فایل `.git/info/exclude` دقیقاً مانند یک `.gitignore` عمل می‌کند، اما در کامیت‌ها گنجانده نمی‌شود. -===== Workflow (گردش کار) +===== گردش کار (Workflow) فرض کنیم کمی کار کرده‌ایم و چند کامیت روی شاخه `master` ساخته‌ایم و حالا آماده‌ایم که آن را به مخزن راه دور پوش کنیم. در حال حاضر مخزن ما این‌طور به نظر می‌رسد: @@ -221,7 +221,7 @@ o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm چِنج‌ست شماره 2 توسط Mercurial ساخته شده بود، و چِنج‌ست‌های شماره‌های 3 و 4 توسط git-remote-hg ساخته شده‌اند، با پوش کردن کامیت‌هایی که با Git ساخته شده بودند. -===== Branches and Bookmarks (شاخه‌ها و بوک‌مارک‌ها) +===== شاخه‌ها و بوک‌مارک‌ها (Branches and Bookmarks) Git فقط یک نوع شاخه دارد: یک ارجاع که هنگام ساختن کامیت‌ها جابجا می‌شود. در Mercurial، این نوع ارجاع «بوک‌مارک» (bookmark) نامیده می‌شود و رفتار آن تا حد زیادی شبیه شاخه در Git است. @@ -381,7 +381,7 @@ o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm changesetهای ۸، ۹ و ۱۰ ایجاد شده و به شاخهٔ permanent تعلق دارند، اما changesetهای قدیمی همچنان وجود دارند. این می‌تواند برای هم‌تیمی‌های شما که از مرکوریال استفاده می‌کنند بسیار گیج‌کننده باشد، پس سعی کنید از این کار پرهیز کنید. -===== Mercurial Summary (خلاصهٔ مرکوریال) +===== خلاصهٔ مرکوریال (Mercurial Summary) گیت و مرکوریال آن‌قدر شبیه‌اند که کار کردن در مرز بین‌شان نسبتاً بدون دردسر است. اگر از تغییر دادن تاریخچه‌ای که از ماشین شما بیرون رفته اجتناب کنید (همان‌طور که معمولاً توصیه می‌شود)، ممکن است حتی متوجه نشوید که آن سمت مرکوریال است. \ No newline at end of file diff --git a/book/09-git-and-other-scms/sections/client-p4.asc b/book/09-git-and-other-scms/sections/client-p4.asc index a1bdefb1..b0a9c28f 100644 --- a/book/09-git-and-other-scms/sections/client-p4.asc +++ b/book/09-git-and-other-scms/sections/client-p4.asc @@ -1,4 +1,4 @@ -==== Git and Perforce (گیت و پرفورس) +==== گیت و پرفورس (Git and Perforce) (((Interoperation with other VCSs, Perforce))) (((Perforce))) @@ -11,12 +11,12 @@ perforce یک سیستم کنترل نسخه بسیار محبوب در محیط اولین موردی که بررسی می‌کنیم، پل "Git Fusion" از سازندگان Perforce است که به شما امکان می‌دهد زیردرخت‌های مخزن Perforce خود را به عنوان مخازن Git خواندنی-نوشتنی در معرض دید قرار دهید. [[_p4_git_fusion]] -===== Git Fusion (گیت فیوژن) +===== گیت فیوژن (Git Fusion) (((Perforce, Git Fusion))) محصولی به نام Git Fusion (موجود در https://www.perforce.com/manuals/git-fusion/[^]) ارائه می‌دهد که سرور Perforce را با مخازن Git در سمت سرور همگام‌سازی می‌کند. -====== Setting Up (راه‌اندازی) +====== راه‌اندازی (Setting Up) برای مثال‌های ما، ساده‌ترین روش نصب Git Fusion را که دانلود یک ماشین مجازی است که دیمون پرفورس و Git Fusion را اجرا می‌کند، استفاده خواهیم کرد. می‌توانید تصویر ماشین مجازی را از https://www.perforce.com/downloads[^] دریافت کنید و پس از اتمام دانلود، آن را در نرم‌افزار مجازی‌سازی مورد علاقه خود (ما از VirtualBox استفاده خواهیم کرد) وارد کنید. @@ -71,7 +71,7 @@ Checking connectivity... done. تصویر ماشین مجازی با یک پروژه نمونه که می‌توانید آن را کلون کنید، همراه است. اینجا ما از طریق HTTPS کلون می‌کنیم، با کاربر `جان` که در بالا ایجاد کردیم؛ گیت برای این اتصال اعتبارنامه می‌خواهد، اما کش اعتبارنامه به ما امکان می‌دهد این مرحله را برای هر درخواست بعدی رد کنیم. -====== Fusion Configuration (پیکربندی فیوژن) +====== پیکربندی ادغام (Fusion Configuration) پس از نصب Git Fusion، می‌خواهید پیکربندی را تنظیم کنید. این کار در واقع با استفاده از کلاینت مورد علاقه Perforce شما نسبتاً آسان است؛ فقط دایرکتوری `//.git-fusion` را در سرور Perforce به فضای کاری خود مپ کنید. @@ -131,10 +131,10 @@ parallel-push = False email-case-sensitivity = no ---- -We won't go into the meanings of these flags here, but note that this is just an INI-formatted text file, much like Git uses for configuration. -This file specifies the global options, which can then be overridden by repository-specific configuration files, like `repos/Talkhouse/p4gf_config`. -If you open this file, you'll see a `[@repo]` section with some settings that are different from the global defaults. -You'll also see sections that look like this: +ما در اینجا به معانی این فلگ‌ها نمی‌پردازیم، اما توجه داشته باشید که این فقط یک فایل متنی با فرمت **INI** است، مشابه آنچه Git برای پیکربندی استفاده می‌کند. +این فایل گزینه‌های **global** را مشخص می‌کند، که بعداً می‌توانند توسط فایل‌های پیکربندی خاص هر مخزن، مثل `repos/Talkhouse/p4gf_config`، بازنویسی شوند. +اگر این فایل را باز کنید، یک بخش `[@repo]` خواهید دید با برخی تنظیمات که با مقادیر پیش‌فرض **global** متفاوت هستند. +همچنین بخش‌هایی خواهید دید که شبیه به این هستند: [source,ini] ---- @@ -181,7 +181,7 @@ joe employeeY@example.com "Anon Y. Mouse" این خوب است اگر می‌خواهید یک پروژه داخلی را متن باز کنید، اما نمی‌خواهید فهرست کارمندان خود را در اختیار کل دنیا قرار دهید. توجه داشته باشید که آدرس‌های ایمیل و نام‌های کامل باید منحصربه‌فرد باشند، مگر اینکه بخواهید تمام کامیت‌های گیت به یک نویسنده خیالی واحد نسبت داده شوند. -====== Workflow (گردش کار) +====== گردش کار (Workflow) Perforce Git Fusion یک پل دوطرفه بین کنترل نسخه Perforce و Git است. بیایید نگاهی بیندازیم که کار کردن از سمت گیت چه حسی دارد. @@ -301,7 +301,7 @@ Perforce شاخه نامگذاری شده‌ای برای ذخیره کامیت بیشتر این اتفاقات پشت صحنه رخ می‌دهد، اما نتیجه نهایی این است که یک نفر در یک تیم می‌تواند از گیت استفاده کند، دیگری از پرفورس، و هیچ‌کدام از آن‌ها از انتخاب دیگری خبر نخواهند داشت. -====== Git-Fusion Summary (خلاصه Git-Fusion) +====== خلاصه Git-Fusion (Git-Fusion Summary) اگر به سرور پرفورس خود دسترسی دارید (یا می‌توانید به آن دسترسی پیدا کنید)، گیت فیوژن راهی عالی برای برقراری ارتباط بین گیت و پرفورس است. کمی پیکربندی لازم است، اما منحنی یادگیری خیلی تند نیست. @@ -325,7 +325,7 @@ Git-p4 به اندازه Git Fusion راه‌حل انعطاف‌پذیر یا تا زمان نگارش این متن، این ابزار به‌صورت رایگان در آدرس https://www.perforce.com/downloads/helix-command-line-client-p4[^] در دسترس است. ====== -====== Setting Up (تنظیمات اولیه) +====== تنظیمات اولیه (Setting Up) برای مثال، سرور Perforce را از OVA مربوط به Git Fusion اجرا خواهیم کرد همان‌طور که بالاتر نشان داده شد، اما از سرور Git Fusion عبور کرده و مستقیماً به کنترل نسخه Perforce متصل می‌شویم. @@ -337,7 +337,7 @@ $ export P4PORT=10.0.1.254:1666 $ export P4USER=john ---- -====== Getting Started (شروع کار) +====== شروع کار (Getting Started) مانند هر چیز دیگری در گیت، اولین فرمان clone است: @@ -372,7 +372,7 @@ $ git remote -v در این مخزن اصلاً remote‌ای وجود ندارد. Git-p4 تعدادی ref ایجاد کرده که وضعیت سرور را نشان می‌دهند و در خروجی `git log` شبیه refهای remote به نظر می‌رسند، اما این‌ها توسط خود گیت مدیریت نمی‌شوند و شما نمی‌توانید روی آن‌ها push کنید. -====== Workflow (جریان کاری) +====== جریان کاری (Workflow) خب، بیایید کار کنیم. فرض کنیم پیشرفتی در پیاده‌سازی یک قابلیت بسیار مهم داشته‌اید و اکنون آماده‌اید آن را به تیم خود نشان دهید. @@ -597,7 +597,7 @@ $ git log --oneline --all --graph --decorate اگر بتوانید آن را rebase کنید، می‌توانید آن را به یک سرور Perforce ارسال کنید. [[_git_p4_branches]] -====== Branching (شاخه‌بندی) +====== شاخه‌بندی (Branching) اگر پروژه‌ی Perforce شما چندین شاخه دارد، هنوز هم راهی وجود دارد؛ git-p4 می‌تواند آن را به‌گونه‌ای مدیریت کند که حس Git را بدهد. فرض کنید depotِ Perforce شما به این صورت سازمان‌دهی شده است: diff --git a/book/09-git-and-other-scms/sections/client-svn.asc b/book/09-git-and-other-scms/sections/client-svn.asc index 6cd4f253..9a943a44 100644 --- a/book/09-git-and-other-scms/sections/client-svn.asc +++ b/book/09-git-and-other-scms/sections/client-svn.asc @@ -1,5 +1,5 @@ [[_git_svn]] -==== Git and Subversion (گیت و سابورژن) +==== گیت و سابورژن (Git and Subversion) (((Subversion)))(((Interoperation with other VCSs, Subversion))) بخش بزرگی از پروژه‌های متن‌باز و تعداد قابل توجهی از پروژه‌های شرکتی از ساب‌ورژن برای مدیریت کدهای منبعشان استفاده می‌کنند. @@ -13,7 +13,7 @@ این روش خوبی است برای نفوذ آرام گیت به محیط شرکتی و کمک به توسعه‌دهندگان همکار برای افزایش کارایی، در حالی که شما برای تغییر زیرساخت جهت پشتیبانی کامل از گیت تلاش می‌کنید. پل ساب‌ورژن، مادهٔ مخدرِ دروازه‌ای به دنیای DVCS است. -===== `git svn` +===== ابزار گیت برای تعامل با Subversion (`git svn`) فرمان پایه در گیت برای همهٔ فرمان‌های مرتبط با پل ساب‌ورژن، `git svn` است. این فرمان مجموعه‌ای از زیرفرمان‌ها را دارد، بنابراین ما رایج‌ترین آن‌ها را هنگام مرور چند گردش‌کار ساده نشان خواهیم داد. @@ -25,7 +25,7 @@ ساب‌ورژن تنها می‌تواند یک تاریخچه خطی داشته باشد و گیج کردن آن بسیار ساده است. اگر با تیمی کار می‌کنید و برخی از اعضا از SVN و برخی دیگر از Git استفاده می‌کنند، مطمئن شوید همه برای همکاری از سرور SVN استفاده می‌کنند — این کار زندگی شما را آسان‌تر خواهد کرد. -===== Setting Up (راه‌اندازی) +===== راه‌اندازی (Setting Up) برای نمایش این قابلیت، به یک مخزن معمولی SVN که دسترسی نوشتن به آن دارید نیاز دارید. اگر می‌خواهید این مثال‌ها را کپی کنید، باید یک کپی قابل نوشت از یک مخزن آزمایشی SVN بسازید. @@ -74,7 +74,7 @@ Copied properties for revision 2. اگرچه این عملیات ممکن است تنها چند دقیقه طول بکشد، اما اگر سعی کنید مخزن اصلی را به جای یک مخزن محلی به یک مخزن راه دور دیگر کپی کنید، فرایند تقریباً یک ساعت طول خواهد کشید، حتی اگر کمتر از ۱۰۰ کامیت وجود داشته باشد. ساب‌ورژن باید یک بازنگری را یک‌به‌یک کلون کند و سپس آن را به مخزن دیگر پوش کند — این بسیار ناکارآمد است، اما تنها راه آسان برای انجام این کار است. -===== Getting Started (شروع به کار) +===== شروع به کار (Getting Started) حالا که یک مخزن Subversion دارید که به آن دسترسی نوشتن دارید، می‌توانید یک جریان کاری معمولی را طی کنید. شما با فرمان git svn clone شروع خواهید کرد که یک مخزن کامل Subversion را به یک مخزن محلی Git وارد می‌کند. @@ -160,7 +160,7 @@ c3dcbe8488c6240392e8a5d7553bbffcb0f94ef0 refs/remotes/origin/master گیت برچسب‌ها را مستقیماً در `refs/tags` دریافت می‌کند، نه این‌که آن‌ها را به‌عنوان شاخه‌های راه‌دور در نظر بگیرد. -===== Committing Back to Subversion (بازگرداندن کامیت‌ها به ساب‌ورژن) +===== بازگرداندن کامیت‌ها به ساب‌ورژن (Committing Back to Subversion) حالا که یک درخت کاری دارید، می‌توانید روی پروژه کار کنید و کامیت‌های خود را به‌صورت upstream به عقب بفرستید و عملاً از گیت به‌عنوان یک کلاینت SVN استفاده کنید. اگر یکی از فایل‌ها را ویرایش کرده و کامیت کنید، یک کامیت دارید که به‌صورت محلی در گیت وجود دارد اما در سرور ساب‌ورژن وجود ندارد: @@ -208,7 +208,7 @@ Date: Thu Jul 24 03:08:36 2014 +0000 توجه کنید که چک‌سوم SHA-1 که در ابتدا با `4af61fd` شروع می‌شد وقتی شما commit کردید اکنون با `95e0222` شروع می‌شود. اگر می‌خواهید به هر دو سرور Git و سرور Subversion push کنید، ابتدا باید به سرور Subversion `dcommit` کنید، چون آن عملیات داده‌های commit شما را تغییر می‌دهد. -===== Pulling in New Changes (دریافت تغییرات جدید) +===== دریافت تغییرات جدید (Pulling in New Changes) اگر با توسعه‌دهندگان دیگر کار می‌کنید، در مقطعی یکی از شما push خواهد کرد و سپس دیگری سعی می‌کند تغییری را push کند که تداخل دارد. آن تغییر تا زمانی که کارشان را merge نکنید رد خواهد شد. @@ -303,7 +303,7 @@ Fast-forwarded master to refs/remotes/origin/trunk. با این حال، هنگام اجرای این فرمان باید مطمئن باشید که شاخهٔ کاری (working directory) شما پاک است. اگر تغییرات محلی دارید، باید یا کارتان را stash کنید یا موقتاً commit کنید قبل از اجرای `git svn rebase` — در غیر این صورت، اگر rebase منجر به یک conflict شود فرمان متوقف خواهد شد. -===== Git Branching Issues (مشکلات شاخه های گیت) +===== مشکلات شاخه های گیت (Git Branching Issues) وقتی با یک جریان کاری Git راحت شوید، به احتمال زیاد شاخه‌های موضوعی (topic branches) ایجاد خواهید کرد، روی آن‌ها کار می‌کنید و سپس آن‌ها را merge می‌کنید. اگر از طریق `git svn` به یک سرور Subversion push می‌کنید، ممکن است بخواهید هر بار کارتان را به جای ادغام شاخه‌ها، روی یک شاخهٔ واحد rebase کنید. @@ -334,12 +334,12 @@ Resetting to the latest refs/remotes/origin/trunk وقتی شخص دیگری آن کار را کلون می‌کند، فقط کامیت مرج را می‌بیند که تمام کارها در آن فشرده شده‌اند، انگار که شما `git merge --squash` اجرا کرده‌اید؛ آنها اطلاعاتی دربارهٔ منبع یا زمان ایجاد آن کامیت را نمی‌بینند. -===== Subversion Branching (شاخه‌بندی در Subversion) +===== شاخه‌بندی در Subversion (Subversion Branching) شاخه‌بندی در Subversion مثل شاخه‌بندی در Git نیست؛ اگر بتوانید تا حد امکان از آن استفاده نکنید، احتمالاً بهتر است. با این حال، می‌توانید با استفاده از `git svn` شاخه‌هایی در Subversion ایجاد کرده و روی آن‌ها کامیت کنید. -===== Creating a New SVN Branch (ایجاد یک شاخهٔ جدید در SVN) +===== ایجاد یک شاخهٔ جدید در SVN (Creating a New SVN Branch) برای ایجاد یک شاخهٔ جدید در Subversion، از دستور `git svn branch [new-branch]` استفاده می‌کنید: @@ -357,7 +357,7 @@ r91 = f1b64a3855d3c8dd84ee0ef10fa89d27f1584302 (refs/remotes/origin/opera) این معادل دستور `svn copy trunk branches/opera` در Subversion است و روی سرور Subversion عمل می‌کند. مهم است بدانید که شما را به آن شاخه چک‌اوت نمی‌کند؛ اگر در این مرحله کامیت کنید، آن کامیت به `trunk` روی سرور خواهد رفت، نه به `opera`. -===== Switching Active Branches (تغییر شاخهٔ فعال) +===== تغییر شاخهٔ فعال (Switching Active Branches) Git با نگاه کردن به سرِ هر یک از شاخه‌های Subversion شما در تاریخچه‌تان تشخیص می‌دهد که dcommitهایتان به کجا می‌روند — باید فقط یکی از آن‌ها وجود داشته باشد، و آن باید آخرین شاخه‌ای باشد که `git-svn-id` در تاریخچهٔ شاخهٔ فعلی شما دارد. @@ -379,12 +379,12 @@ $ git branch opera remotes/origin/opera متأسفانه راه خوبی برای اجتناب از این وضعیت وجود ندارد — Subversion قادر به ذخیره‌ی این اطلاعات نیست، بنابراین تا زمانی که از آن به‌عنوان سرور استفاده می‌کنید، همیشه محدودیت‌های آن شما را مختل خواهد کرد. برای جلوگیری از مشکلات، پس از ادغام شاخه در trunk باید شاخه‌ی محلی (در این مثال، `opera`) را حذف کنید. -===== Subversion Commands (دستورات Subversion) +===== دستورات Subversion (Subversion Commands) مجموعه ابزار `git svn` تعدادی دستور فراهم می‌کند تا با ارائه‌ی قابلیت‌هایی مشابه آنچه در Subversion داشتید، انتقال به گیت را آسان‌تر کند. در اینجا چند دستور آمده که آنچه Subversion قبلاً ارائه می‌داد را در اختیار شما می‌گذارد. -====== SVN Style History (تاریخچه به سبک SVN) +====== تاریخچه به سبک SVN (SVN Style History) اگر به Subversion عادت دارید و می‌خواهید تاریخچه را به قالب خروجی SVN ببینید، می‌توانید با اجرای `git svn log` تاریخچه‌ی کامیت‌های خود را در قالب‌بندی SVN مشاهده کنید: @@ -413,7 +413,7 @@ updated the changelog کامیت‌های محلی گیت که هنوز ارسال (dcommited) نشده‌اند نمایش داده نمی‌شوند؛ همچنین کامیت‌هایی که دیگران در این بین به سرور Subversion زده‌اند هم نشان داده نمی‌شوند. این خروجی بیشتر شبیه آخرین وضعیت شناخته‌شدهٔ کامیت‌ها روی سرور Subversion است. -====== SVN Annotation(یادداشت‌گذاری در SVN) +====== یادداشت‌گذاری در SVN (SVN Annotation) همان‌طور که دستور `git svn log` به‌صورت آفلاین رفتار دستور `svn log` را شبیه‌سازی می‌کند، می‌توانید معادل `svn annotate` را با اجرای `git svn blame [FILE]` به‌دست آورید. خروجی شبیه این خواهد بود: @@ -437,7 +437,7 @@ $ git svn blame README.txt دوباره تاکید می‌شود که این خروجی کامیت‌های محلی شما در گیت یا کامیت‌هایی که در این فاصله به Subversion فرستاده شده‌اند را نشان نمی‌دهد. -====== SVN Server Information (اطلاعات سرور SVN) +====== اطلاعات سرور SVN (SVN Server Information) همچنین می‌توانید با اجرای `git svn info` همان نوع اطلاعاتی را که `svn info` می‌دهد به‌دست آورید: @@ -458,7 +458,7 @@ Last Changed Date: 2009-05-02 16:07:37 -0700 (Sat, 02 May 2009) این مثل `blame` و `log` است از این نظر که آفلاین اجرا می‌شود و تنها تا زمانی به‌روز است که آخرین بار با سرور Subversion ارتباط برقرار کرده‌اید. -====== Ignoring What Subversion Ignores (نادیده گرفتن آنچه Subversion نادیده می‌گیرد) +====== نادیده گرفتن آنچه Subversion نادیده می‌گیرد (Ignoring What Subversion Ignores) اگر مخزن Subversion را کلون کنید و در هر جایی خاصیت‌های `svn:ignore` تنظیم شده باشند، احتمالاً می‌خواهید فایل‌های `.gitignore` متناظر را بسازید تا ناخواسته فایل‌هایی را که نباید کامیت شوند، کامیت نکنید. `git svn` دو دستور برای کمک به این مسئله دارد. @@ -474,7 +474,7 @@ $ git svn show-ignore > .git/info/exclude به این ترتیب پروژه را با فایل‌های `.gitignore` پر نمی‌کنید. این گزینه خوب است اگر شما تنها کاربر گیت در یک تیم Subversion هستید و هم‌تیمی‌هایتان نمی‌خواهند فایل‌های `.gitignore` داخل پروژه باشند. -===== Git-Svn Summary (خلاصهٔ Git-Svn) +===== خلاصهٔ Git-Svn (Git-Svn Summary) ابزارهای `git svn` زمانی مفیدند که مجبور به کار با یک سرور Subversion هستید یا در محیط توسعه‌ای قرار دارید که نیاز به اجرای سرور Subversion دارد. با این حال باید آن را همانند یک گیت ناقص درنظر بگیرید، وگرنه در ترجمه بین دو سیستم با مسائلی روبه‌رو می‌شوید که می‌تواند شما و همکارانتان را سردرگم کند. diff --git a/book/09-git-and-other-scms/sections/import-custom.asc b/book/09-git-and-other-scms/sections/import-custom.asc index c2cebab2..73299b61 100644 --- a/book/09-git-and-other-scms/sections/import-custom.asc +++ b/book/09-git-and-other-scms/sections/import-custom.asc @@ -1,5 +1,5 @@ [[_custom_importer]] -==== A Custom Importer (یک واردکننده سفارشی) +==== یک واردکننده سفارشی (A Custom Importer) (((git commands, fast-import))) (((Importing, from others))) diff --git a/book/09-git-and-other-scms/sections/import-hg.asc b/book/09-git-and-other-scms/sections/import-hg.asc index 20ce602a..c7ac93b8 100644 --- a/book/09-git-and-other-scms/sections/import-hg.asc +++ b/book/09-git-and-other-scms/sections/import-hg.asc @@ -1,4 +1,4 @@ -==== Mercurial (سیستم کنترل نسخه‌ی توزیع‌شده Mercurial) +==== سیستم کنترل نسخه‌ی توزیع‌شده Mercurial (Mercurial) (((Mercurial)))(((Importing, from Mercurial))) از آنجا که Mercurial و Git مدل‌های نسبتاً مشابهی برای نمایش نسخه‌ها دارند و Git تا حدی انعطاف‌پذیرتر است، تبدیل یک مخزن از Mercurial به Git نسبتاً سرراست است و از ابزاری به نام "hg-fast-export" استفاده می‌کند که باید یک نسخه از آن را داشته باشید: diff --git a/book/09-git-and-other-scms/sections/import-p4.asc b/book/09-git-and-other-scms/sections/import-p4.asc index 1c532993..9c7a87b1 100644 --- a/book/09-git-and-other-scms/sections/import-p4.asc +++ b/book/09-git-and-other-scms/sections/import-p4.asc @@ -1,5 +1,5 @@ [[_perforce_import]] -==== Perforce (سیستم کنترل نسخه‌ی توزیع‌شده Perforce) +==== سیستم کنترل نسخه‌ی توزیع‌شده Perforce (Perforce) (((Perforce)))(((Importing, from Perforce))) @@ -8,7 +8,7 @@ git-p4 Perforce Git Fusion -===== Perforce Git Fusion (ادغام Perforce و Git) +===== ادغام Perforce و Git (Perforce Git Fusion) Perforce Git Fusion این فرآیند را به‌طور چشمگیری ساده می‌کند. کافی است تنظیمات پروژه، نقشه‌های کاربری و شاخه‌ها را تنها با استفاده از یک فایل پیکربندی (همان‌طور که در بخش <<_p4_git_fusion>> توضیح داده شده است) انجام دهید و سپس مخزن را کلون کنید. @@ -16,7 +16,7 @@ Perforce Git Fusion این فرآیند را به‌طور چشمگیری ساد Git Fusion یک مخزن گیت ایجاد می‌کند که درست مانند یک مخزن بومی Git عمل می‌کند. شما می‌توانید در صورت تمایل این مخزن را به یک میزبان Git بومی ارسال کنید. همچنین این امکان وجود دارد که حتی از Perforce به‌عنوان میزبان Git خود استفاده نمایید. [[_git_p4]] -===== Git-p4 +===== ابزار گیت برای تعامل با Perforce (Git-p4) برای استفاده از git-p4 به‌عنوان ابزار واردات، ابتدا باید محیط خود را به‌درستی تنظیم کنید. به‌عنوان مثال، اگر بخواهید پروژه Jam را از Perforce Public Depot وارد کنید، لازم است متغیر محیطی P4PORT را به‌درستی تنظیم کنید تا به مخزن Perforce اشاره کند. diff --git a/book/09-git-and-other-scms/sections/import-svn.asc b/book/09-git-and-other-scms/sections/import-svn.asc index 6e76161f..8303e034 100644 --- a/book/09-git-and-other-scms/sections/import-svn.asc +++ b/book/09-git-and-other-scms/sections/import-svn.asc @@ -1,4 +1,4 @@ -==== Subversion (سیستم کنترل نسخه‌ی توزیع‌شده Subversion) +==== سیستم کنترل نسخه ساب‌ورژن (Subversion) (((Subversion))) (((Importing, from Subversion))) diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index dca6d27b..6f673578 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -1,10 +1,10 @@ -=== Environment Variables (متغیرهای محیطی) +=== متغیرهای محیطی (Environment Variables) گیت همیشه داخل یک شل bash اجرا می‌شود و از تعدادی متغیر محیطی شل استفاده می‌کند تا رفتار خود را تعیین کند. گاهی اوقات دانستن این متغیرها و اینکه چگونه می‌توان از آن‌ها برای کنترل رفتار گیت استفاده کرد، بسیار مفید است. این فهرست شامل تمام متغیرهای محیطی‌ای که گیت به آن‌ها توجه می‌کند نیست، اما ما مفیدترین آن‌ها را بررسی خواهیم کرد. -==== Global Behavior (رفتار سراسری) +==== رفتار سراسری (Global Behavior) برخی از رفتارهای کلی گیت به عنوان یک برنامهٔ کامپیوتری، به متغیرهای محیطی وابسته است. @@ -26,7 +26,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می *`GIT_EDITOR`* ویرایشگری است که Git در مواقعی که کاربر نیاز به نوشتن یا ویرایش متن دارد (برای مثال یک پیام commit) اجرا می‌کند. اگر این مقدار تنظیم نشده باشد، از `EDITOR` استفاده خواهد شد. -==== Repository Locations (مکان‌های مخزن) +==== مکان‌های مخزن (Repository Locations) گیت از چندین متغیر محیطی استفاده می‌کند تا مشخص کند چگونه با مخزنٔ فعلی تعامل داشته باشد. @@ -46,7 +46,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می *`GIT_ALTERNATE_OBJECT_DIRECTORIES`* یک لیست جدا شده با colon است (مثل `/dir/one:/dir/two:…`) که به Git می‌گوید اگر آبجکت‌ها در `GIT_OBJECT_DIRECTORY` پیدا نشدند، کجا آن‌ها را بررسی کند. اگر پروژه‌های زیادی دارید که شامل فایل‌های بزرگ با محتوای یکسان هستند، این متغیر می‌تواند از ذخیره‌سازی چندین نسخه‌ی تکراری جلوگیری کند. -==== Pathspecs (مسیرهای مشخص) +==== مسیرهای مشخص (Pathspecs) "`pathspec`" به نحوهٔ مشخص کردن مسیرها در گیت اشاره دارد، از جمله استفاده از کاراکترهای جایگزین (wildcards). این مسیرها در فایل `.gitignore` استفاده می‌شوند، اما همچنین در خط فرمان نیز کاربرد دارند (مثلاً git add *.c). @@ -60,7 +60,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می *`GIT_ICASE_PATHSPECS`* باعث می‌شود همه‌ی pathspecها به‌صورت **case-insensitive** عمل کنند. -==== Committing (کامیت کردن) +==== کامیت کردن (Committing) ایجاد نهایی یک شیء کامیت در گیت معمولاً توسط `git-commit-tree` انجام می‌شود، که این متغیرهای محیطی را به‌عنوان منبع اصلی اطلاعات خود استفاده می‌کند و تنها در صورتی به مقادیر تنظیمات پیکربندی رجوع می‌کند که این متغیرها موجود نباشند. @@ -79,7 +79,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می *`EMAIL`* ایمیل جایگزین (fallback) است در صورتی که مقدار `user.email` در تنظیمات مشخص نشده باشد. اگر این هم تنظیم نشده باشد، Git از نام کاربر و نام میزبان (system user و host names) استفاده می‌کند. -==== Networking (شبکه) +==== شبکه (Networking) گیت برای انجام عملیات شبکه‌ای از طریق HTTP از کتابخانهٔ `curl` استفاده می‌کند، بنابراین *`GIT_CURL_VERBOSE`* به گیت می‌گوید تمام پیام‌هایی که توسط آن کتابخانه تولید می‌شوند را نمایش دهد. این مشابه اجرای `curl -`v در خط فرمان است. @@ -93,7 +93,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می *`GIT_HTTP_USER_AGENT`* رشته‌ی user-agent را تنظیم می‌کند که Git هنگام برقراری ارتباط از طریق HTTP استفاده می‌کند. مقدار پیش‌فرض چیزی شبیه به `git/2.0.0` است. -==== Diffing and Merging (مقایسه و ادغام) +==== مقایسه و ادغام (Diffing and Merging) *`GIT_DIFF_OPTS`* یک نام‌گذاری نه‌چندان دقیق (misnomer) است. تنها مقادیر معتبر `-u` یا `--unified=` هستند که تعداد خطوط context را در دستور `git diff` مشخص می‌کنند. @@ -116,7 +116,7 @@ Git این فایل را در مسیر `$PREFIX/etc/gitconfig` جستجو می مقدار پیش‌فرض برابر با `2` است. -==== Debugging (دیباگ کردن) +==== دیباگ کردن (Debugging) می‌خواهید واقعاً بدانید گیت چه کار می‌کند؟ گیت مجموعه‌ای نسبتاً کامل از ردیابی‌ها (traces) را در خود دارد و تنها کاری که باید انجام دهید، فعال کردن آن‌هاست. @@ -206,7 +206,7 @@ Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean ---- -==== Miscellaneous (متفرقه) +==== متفرقه (Miscellaneous) *`GIT_SSH`*، در صورتی که مشخص شود، برنامه‌ای است که به جای `ssh` فراخوانی می‌شود وقتی Git سعی می‌کند به یک هاست SSH متصل شود. این برنامه به شکل زیر فراخوانی می‌شود: diff --git a/book/10-git-internals/sections/maintenance.asc b/book/10-git-internals/sections/maintenance.asc index 749d1ea7..f36547da 100644 --- a/book/10-git-internals/sections/maintenance.asc +++ b/book/10-git-internals/sections/maintenance.asc @@ -1,9 +1,9 @@ -=== Maintenance and Data Recovery (نگهداری و بازیابی داده‌ها) +=== نگهداری و بازیابی داده‌ها (Maintenance and Data Recovery) گاهی اوقات لازم است کمی پاک‌سازی انجام دهید — مثلاً مخزنی را فشرده‌تر کنید، یک مخزن وارد شده را مرتب کنید یا کار از دست‌رفته‌ای را بازیابی کنید. این بخش به برخی از این سناریوها می‌پردازد. [[_git_gc]] -==== Maintenance (نگهداری) +==== نگهداری (Maintenance) گاهی Git به‌طور خودکار فرمانی به نام "auto gc" را اجرا می‌کند. در بیشتر مواقع این فرمان کاری انجام نمی‌دهد. با این حال، اگر شیءهای جدا (شیءهایی که در یک packfile نیستند) زیاد شوند یا تعداد packfileها بیش از حد شود، Git یک فرمان کامل `git gc` را اجرا می‌کند. "gc" مخفف garbage collect است و این فرمان چند کار انجام می‌دهد: همهٔ شیءهای جدا را جمع‌آوری کرده و در packfileها قرار می‌دهد، packfileها را در یک packfile بزرگ‌تر تجمیع می‌کند، و اشیائی را که از هیچ commitی قابل دسترسی نیستند و چند ماهه شده‌اند حذف می‌کند. @@ -46,7 +46,7 @@ cac0cab538b970a37ea1e769cbbde608743bc96d refs/tags/v1.0 به خط آخر فایل که با `^` شروع می‌شود دقت کنید. این یعنی تگ بالای آن یک annotated tag است و آن خط اشاره به commitای دارد که آن annotated tag به آن اشاره می‌کند. [[_data_recovery]] -==== Data Recovery (بازیابی داده‌ها) +==== بازیابی داده‌ها (Data Recovery) در مقطعی از مسیر یادگیری Git ممکن است به‌طور تصادفی یک commit را از دست بدهید. معمولاً این اتفاق وقتی رخ می‌دهد که یک شاخه را با force حذف می‌کنید در حالی که روی آن کار داشته‌اید و بعداً متوجه می‌شوید که به آن شاخه نیاز داشته‌اید؛ یا وقتی که یک شاخه را با hard reset به عقب برمی‌گردانید و به‌این‌ترتیب commitهایی را رها می‌کنید که از بعضیِ آن‌ها چیزی لازم داشتید. @@ -162,7 +162,7 @@ dangling blob 7108f7ecb345ee9d0084193f147cdad4d2998293 می‌توانی آن را همان‌طور بازیابی کنی: با اضافه کردن یک شاخه که به آن SHA-1 اشاره کند. [[_removing_objects]] -==== Removing Objects (حذف اشیاء) +==== حذف اشیاء (Removing Objects) دربارهٔ گیت چیزهای خوب زیادی هست، اما یک ویژگی که می‌تواند مشکل‌ساز شود این است که یک `git clone` تمام تاریخچهٔ پروژه را دانلود می‌کند، از جمله هر نسخه از هر فایل. این مسئله وقتی کد منبع خالص است مشکل چندانی ایجاد نمی‌کند، زیرا گیت در فشرده‌سازی این داده‌ها بسیار بهینه است. diff --git a/book/10-git-internals/sections/objects.asc b/book/10-git-internals/sections/objects.asc index 59609cb6..107b5e48 100644 --- a/book/10-git-internals/sections/objects.asc +++ b/book/10-git-internals/sections/objects.asc @@ -1,5 +1,5 @@ [[_objects]] -=== Git Objects (اشیا گیت) +=== اشیا گیت (Git Objects) Git یک **content-addressable filesystem** است. خیلی خوب. این یعنی چی؟ @@ -120,7 +120,7 @@ blob ---- [[_tree_objects]] -==== Tree Objects (درخت اشیاء) +==== درخت اشیاء (Tree Objects) نوع بعدی Git object که بررسی می‌کنیم **tree** است؛ این مشکل را حل می‌کند که نام فایل هم ذخیره شود و علاوه بر آن امکان ذخیره‌ی گروهی از فایل‌ها را هم فراهم می‌کند. Git داده‌ها را به شکلی شبیه به فایل‌سیستم UNIX ذخیره می‌کند، اما کمی ساده‌تر. @@ -244,7 +244,7 @@ $ git cat-file -p 3c4e9cd789d88d8d89c1073707c3585e41b0e614 image::images/data-model-2.png[The content structure of your current Git data] [[_git_commit_objects]] -==== Commit Objects (کامیت اشیاء) +==== کامیت اشیاء (Commit Objects) اگر همه‌ی مراحل بالا را انجام داده باشید، اکنون سه tree دارید که snapshotهای مختلف پروژه شما را نمایش می‌دهند؛ اما مشکل قبلی باقی‌ست: باید هر سه SHA-1 را به خاطر بسپارید تا بتوانید snapshotها را بازیابی کنید. همچنین هیچ اطلاعاتی درباره اینکه چه کسی snapshotها را ذخیره کرده، چه زمانی و چرا ذخیره شده‌اند، ندارید. @@ -351,7 +351,7 @@ $ find .git/objects -type f .All the reachable objects in your Git directory image::images/data-model-3.png[All the reachable objects in your Git directory] -==== Object Storage (ذخیره سازی اشیاء) +==== ذخیره سازی اشیاء (Object Storage) پیش‌تر اشاره کردیم که همراه هر object که در Git database ذخیره می‌کنید، یک header هم وجود دارد. بیایید ببینیم Git چطور objectها را ذخیره می‌کند. diff --git a/book/10-git-internals/sections/packfiles.asc b/book/10-git-internals/sections/packfiles.asc index 722ec604..d5175751 100644 --- a/book/10-git-internals/sections/packfiles.asc +++ b/book/10-git-internals/sections/packfiles.asc @@ -1,4 +1,4 @@ -=== Packfiles (فایل‌های بسته) +=== فایل‌های بسته (Packfiles) اگر دستورالعمل‌های مثال بخش قبلی را دنبال کرده باشید، اکنون باید یک مخزن Git آزمایشی با ۱۱ شیء داشته باشید — چهار blob، سه tree، سه commit و یک tag: diff --git a/book/10-git-internals/sections/plumbing-porcelain.asc b/book/10-git-internals/sections/plumbing-porcelain.asc index 92d98fa6..0f8df7bb 100644 --- a/book/10-git-internals/sections/plumbing-porcelain.asc +++ b/book/10-git-internals/sections/plumbing-porcelain.asc @@ -1,5 +1,5 @@ [[_plumbing_porcelain]] -=== Plumbing and Porcelain (ابزارها و دستورات سطح پایین) +=== ابزارها و دستورات سطح پایین (Plumbing and Porcelain) این کتاب عمدتاً به این موضوع می‌پردازد که چگونه می‌توان با حدود ۳۰ زیرفرمان اصلی گیت مانند `checkout`، `branch`، `remote` و … کار کرد. اما باید توجه داشت که گیت در ابتدا به‌عنوان یک جعبه‌ابزار (toolkit) برای مدیریت نسخه طراحی شد، نه یک سیستم کنترل نسخه (VCS) کامل و کاربرپسند. به همین دلیل، بخشی از زیرفرمان‌های آن عملیات سطح‌پایین انجام می‌دهند و برای استفاده در زنجیره‌های یونیکسی (Unix pipelines) یا فراخوانی از اسکریپت‌ها ساخته شده‌اند. diff --git a/book/10-git-internals/sections/refs.asc b/book/10-git-internals/sections/refs.asc index 75324db3..2ff4b079 100644 --- a/book/10-git-internals/sections/refs.asc +++ b/book/10-git-internals/sections/refs.asc @@ -1,5 +1,5 @@ [[_git_refs]] -=== Git References (مراجع گیت) +=== مراجع گیت (Git References) اگر می‌خواستید تاریخچه‌ی مخزن خود را از یک کمیت مشخص، مثلاً `1a410e`، ببینید، می‌توانستید چیزی مثل `git log 1a410e` را اجرا کنید تا آن تاریخچه را نمایش دهد، اما در این حالت باید به خاطر می‌سپردید که `1a410e` همان کمیتی است که می‌خواهید به‌عنوان نقطه‌ی شروع آن تاریخچه استفاده کنید. به‌جای آن، راحت‌تر است اگر فایلی داشته باشید که بتوانید آن مقدار SHA-1 را تحت یک نام ساده ذخیره کنید تا بتوانید از آن نام ساده به‌جای مقدار خام SHA-1 استفاده کنید. @@ -65,7 +65,7 @@ image::images/data-model-4.png[Git directory objects with branch head references وقتی دستوراتی مثل `git branch ` را اجرا می‌کنید، گیت اساساً همان دستور `update-ref` را اجرا می‌کند تا SHA-1 آخرین کمییت شاخه‌ای که روی آن هستید را در هر مرجع جدیدی که می‌خواهید ایجاد کنید قرار دهد. [[ref_the_ref]] -==== The HEAD (نشانگر) +==== نشانگر HEAD (The HEAD) سؤال این است که وقتی `git branch ` را اجرا می‌کنید، گیت چگونه SHA-1 آخرین کمییت را می‌داند؟ پاسخ فایل HEAD است. @@ -120,7 +120,7 @@ $ git symbolic-ref HEAD test fatal: Refusing to point HEAD outside of refs/ ---- -==== Tags (تگ‌ها) +==== تگ‌ها (Tags) همین‌الان دربارهٔ سه نوع اصلی اشیاء Git (_blob_ها، _tree_ها و _commit_ها) صحبت کردیم، اما یک نوع چهارم هم وجود دارد. شیء tag بسیار شبیه به شیء commit است — شامل اطلاعات تگ‌زننده (tagger)، تاریخ، پیغام و یک نشانگر است. @@ -179,7 +179,7 @@ $ git cat-file blob junio-gpg-pub مخزن **Linux kernel** نیز یک **tag object** دارد که به یک **commit** اشاره نمی‌کند — اولین **tag** ساخته‌شده به **initial tree** واردشده از **source code** اشاره دارد. -==== Remotes (ریموت ها) +==== ریموت ها (Remotes) سومین نوع **reference** که خواهید دید، یک **remote reference** است. اگر یک **remote** اضافه کنید و به آن **push** کنید، Git آخرین مقداری که به آن **remote** برای هر **branch** فرستاده‌اید را در مسیر `refs/remotes` ذخیره می‌کند. diff --git a/book/10-git-internals/sections/refspec.asc b/book/10-git-internals/sections/refspec.asc index 97ec8680..0cfd75d5 100644 --- a/book/10-git-internals/sections/refspec.asc +++ b/book/10-git-internals/sections/refspec.asc @@ -1,5 +1,5 @@ [[_refspec]] -=== The Refspec (نگاشت) +=== نگاشت (The Refspec) در سراسر این کتاب، ما از نگاشت‌های ساده بین **remote branches** و **local references** استفاده کرده‌ایم، اما این نگاشت‌ها می‌توانند پیچیده‌تر باشند. فرض کنید مراحل چند بخش قبلی را دنبال کرده‌اید و یک مخزن محلی کوچک Git ساخته‌اید و حالا می‌خواهید یک **remote** به آن اضافه کنید: @@ -97,7 +97,7 @@ fetch = +refs/heads/qa*:refs/remotes/origin/qa* اگر یک فرآیند کاری پیچیده داشته باشید که در آن تیم QA، تیم توسعه‌دهنده‌ها و تیم یکپارچه‌سازی هر کدام **branches** خودشان را **push** کنند و روی **remote branches** همکاری داشته باشند، با این روش می‌توانید خیلی راحت آن‌ها را با **namespace** مدیریت کنید. [[_pushing_refspecs]] -==== Pushing Refspecs (نگاشت‌های پوش) +==== نگاشت‌های پوش (Pushing Refspecs) این عالی است که می‌توانید **namespaced references** را این‌طور دریافت کنید، اما تیم QA چطور باید **branches** خودشان را درون یک فضای `qa/` روی سرور قرار دهند؟ این کار با استفاده از **refspecs** هنگام **push** انجام می‌شود. diff --git a/book/10-git-internals/sections/transfer-protocols.asc b/book/10-git-internals/sections/transfer-protocols.asc index 74bc6a6d..b227cb16 100644 --- a/book/10-git-internals/sections/transfer-protocols.asc +++ b/book/10-git-internals/sections/transfer-protocols.asc @@ -1,9 +1,9 @@ -=== Transfer Protocols (پروتکل‌های انتقال) +=== پروتکل‌های انتقال (Transfer Protocols) Git می‌تواند داده‌ها را بین دو **repository** به دو روش اصلی منتقل کند: پروتکل "`dumb`" و پروتکل "`smart`". این بخش به‌طور سریع توضیح می‌دهد که این دو پروتکل اصلی چطور عمل می‌کنند. -==== The Dumb Protocol (پروتکل ساده) +==== پروتکل ساده (The Dumb Protocol) اگر می‌خواهید یک **repository** را فقط به صورت **read-only** از طریق **HTTP** سرو کنید، به احتمال زیاد از پروتکل **dumb** استفاده می‌شود. به این پروتکل "`dumb`" گفته می‌شود چون در سمت سرور هیچ کد اختصاصی مربوط به Git در طول فرآیند انتقال نیاز ندارد؛ فرآیند **fetch** مجموعه‌ای از درخواست‌های **HTTP GET** است که در آن کلاینت می‌تواند ساختار **repository** روی سرور را فرض بگیرد. @@ -123,19 +123,19 @@ P pack-816a9b2334da9953e530f27bcac22082a9f5b835.pack همه آن‌ها نیز داخل همان **packfile** هستند، بنابراین نیازی به درخواست‌های بیشتر به سرور نیست. Git یک **working copy** از **branch** `master` که در ابتدای کار توسط **HEAD reference** مشخص شد، **checkout** می‌کند. -==== The Smart Protocol (پروتکل هوشمند) +==== پروتکل هوشمند (The Smart Protocol) پروتکل **dumb** ساده است اما کمی ناکارآمد بوده و نمی‌تواند داده‌ای از کلاینت به سرور بنویسد. پروتکل **smart** روشی رایج‌تر برای انتقال داده است، اما نیاز به پردازشی در سمت ریموت دارد که از Git آگاه باشد – بتواند داده‌های محلی را بخواند، بفهمد کلاینت چه دارد و چه نیاز دارد، و یک **packfile** سفارشی برای آن تولید کند. دو مجموعه فرآیند برای انتقال داده وجود دارد: یک جفت برای **uploading data** و یک جفت برای **downloading data**. -===== Uploading Data (بارگذاری داده) +===== بارگذاری داده (Uploading Data) (((git commands, send-pack)))(((git commands, receive-pack))) برای **upload data** به یک فرآیند ریموت، Git از فرآیندهای `send-pack` و `receive-pack` استفاده می‌کند. فرآیند `send-pack` روی کلاینت اجرا شده و به فرآیند `receive-pack` در سمت ریموت متصل می‌شود. -====== SSH (پروتکل امن شل) +====== پروتکل امن شل SSH (SSH) برای مثال، اگر شما در پروژه‌تان دستور `git push origin master` را اجرا کنید و `origin` یک آدرس با پروتکل SSH باشد، Git فرآیند `send-pack` را اجرا کرده و یک اتصال **SSH** به سرور برقرار می‌کند. سپس سعی می‌کند دستوری روی سرور ریموت اجرا کند که شبیه به این است: @@ -183,7 +183,7 @@ Git برای هر **reference** که به‌روزرسانی می‌کنید ی 000eunpack ok ---- -====== HTTP(S) (پروتکل انتقال ابرمتن امن) +====== پروتکل انتقال ابرمتن امن HTTPS (HTTP(S)) این فرآیند روی **HTTP** تقریباً مشابه است، فقط **handshaking** کمی متفاوت است. اتصال با این درخواست شروع می‌شود: @@ -211,13 +211,13 @@ Git برای هر **reference** که به‌روزرسانی می‌کنید ی به خاطر داشته باشید که پروتکل HTTP ممکن است این داده‌ها را در قالب **chunked transfer encoding** نیز بسته‌بندی کند. -===== Downloading Data (دانلود داده) +===== دانلود داده (Downloading Data) (((git commands, fetch-pack)))(((git commands, upload-pack))) وقتی داده دریافت می‌کنید، فرآیندهای `fetch-pack` و `upload-pack` درگیر هستند. کلاینت فرآیند `fetch-pack` را اجرا می‌کند که به فرآیند `upload-pack` روی سمت ریموت متصل می‌شود تا مذاکره کند چه داده‌ای باید منتقل شود. -====== SSH +====== پروتکل امن شل SSH (SSH) اگر **fetch** را از طریق SSH انجام دهید، `fetch-pack` چیزی شبیه این اجرا می‌کند: @@ -253,7 +253,7 @@ $ ssh -x git@server "git-upload-pack 'simplegit-progit.git'" 0000 ---- -====== HTTP(S) (پروتکل انتقال ابرمتن امن) +====== پروتکل انتقال ابرمتن امن (HTTP(S)) **handshake** در عملیات **fetch** شامل دو درخواست HTTP است. اولی یک `GET` به همان **endpoint**ی است که در پروتکل **dumb** استفاده می‌شود: @@ -283,7 +283,7 @@ $ ssh -x git@server "git-upload-pack 'simplegit-progit.git'" باز هم فرمت همان قبلی است. پاسخ این درخواست موفقیت یا شکست را مشخص می‌کند و شامل **packfile** است. -==== Protocols Summary (خلاصه پروتکل‌ها) +==== خلاصه پروتکل‌ها (Protocols Summary) این بخش یک مرور بسیار ابتدایی از پروتکل‌های انتقال داده بود. پروتکل ویژگی‌های بسیار بیشتری دارد، مثل قابلیت‌های `multi_ack` یا `side-band`، اما توضیح آن‌ها خارج از محدوده این کتاب است. diff --git a/book/A-git-in-other-environments/sections/bash.asc b/book/A-git-in-other-environments/sections/bash.asc index fb4777a8..9156c341 100644 --- a/book/A-git-in-other-environments/sections/bash.asc +++ b/book/A-git-in-other-environments/sections/bash.asc @@ -1,4 +1,4 @@ -=== Git in Bash (گیت در بش) +=== گیت در بش (Git in Bash) (((bash)))(((tab completion, bash)))(((shell prompts, bash))) اگر کاربر **Bash** هستید، می‌توانید از بعضی قابلیت‌های shell خود استفاده کنید تا تجربه کار با **Git** برایتان راحت‌تر و کاربرپسندتر شود. diff --git a/book/A-git-in-other-environments/sections/guis.asc b/book/A-git-in-other-environments/sections/guis.asc index a9982651..af59f162 100644 --- a/book/A-git-in-other-environments/sections/guis.asc +++ b/book/A-git-in-other-environments/sections/guis.asc @@ -1,4 +1,4 @@ -=== Graphical Interfaces (رابط های گرافیکی) +=== رابط های گرافیکی (Graphical Interfaces) (((GUIs)))(((Graphical tools))) محیط اصلی **Git** در **terminal** است. @@ -10,7 +10,7 @@ از این منظر، هیچ‌یک از این ابزارها «`بهتر`» از دیگری نیستند؛ بلکه صرفاً متناسب‌تر با هدف موردنظر ساخته شده‌اند. همچنین توجه داشته باشید که هیچ‌یک از این **graphical clients** کاری فراتر از **command-line client** نمی‌کنند؛ **command-line** همچنان جایی است که بیشترین قدرت و کنترل را روی **repositories** خواهید داشت. -==== `gitk` and `git-gui` (`gitk` و `git-gui`) +==== رابط‌های گرافیکی گیت (gitk و git-gui) (`gitk` and `git-gui`) (((git commands, gitk)))(((git commands, gui)))(((gitk))) زمانی که Git را نصب می‌کنید، ابزارهای گرافیکی آن یعنی `gitk` و `git-gui` هم نصب می‌شوند. @@ -66,7 +66,7 @@ image::images/git-gui.png[The `git-gui` commit tool] `gitk` و `git-gui` نمونه‌هایی از ابزارهای **task-oriented** هستند. هر یک برای یک هدف مشخص طراحی شده‌اند (**viewing history** و **creating commits** به‌ترتیب) و ویژگی‌های غیرضروری برای آن کار را حذف کرده‌اند. -==== GitHub for macOS and Windows (گیت هاب برای مک و ویندوز) +==== گیت هاب برای مک و ویندوز (GitHub for macOS and Windows) (((GitHub for macOS)))(((GitHub for Windows))) **GitHub** دو **workflow-oriented Git client** ساخته است: یکی برای **Windows** و دیگری برای **macOS**. @@ -94,7 +94,7 @@ image::images/github_win.png[GitHub for Windows] در حالی که این ابزارها برای نمایش سرویس GitHub و جریان کاری پیشنهادی آن طراحی شده‌اند، به‌راحتی با هر مخزنی کار می‌کنند و می‌توانند عملیات شبکه‌ای را با هر میزبان Git انجام دهند. ==== -===== Installation (نصب) +===== نصب (Installation) GitHub برای ویندوز و macOS را می‌توانید از https://desktop.github.com/ دانلود کنید. وقتی این برنامه‌ها برای اولین بار اجرا می‌شوند، شما را از طریق تنظیمات اولیه Git راهنمایی می‌کنند، مانند پیکربندی نام و آدرس ایمیل، و هر دو برای بسیاری از گزینه‌های رایج پیکربندی، مانند کش‌های اعتبارسنجی و رفتار CRLF، مقادیر پیش‌فرض منطقی ایجاد می‌کنند. @@ -107,7 +107,7 @@ GitHub برای ویندوز و macOS را می‌توانید از https://desk کلاینت فهرستی از مخزن‌هایی که در GitHub به آن‌ها دسترسی دارید نشان می‌دهد و می‌تواند آن‌ها را در یک مرحله کلون کند. اگر از قبل یک مخزن محلی دارید، کافی است پوشهٔ آن را از Finder یا Windows Explorer به پنجرهٔ کلاینت GitHub بکشید تا در فهرست مخازن در سمت چپ قرار بگیرد. -===== Recommended Workflow (جریان کاری پیشنهادی) +===== جریان کاری پیشنهادی (Recommended Workflow) پس از نصب و پیکربندی، می‌توانید از کلاینت GitHub برای بسیاری از کارهای رایج Git استفاده کنید. جریان کاری موردنظر برای این ابزار گاهی اوقات «GitHub Flow» نامیده می‌شود. @@ -138,13 +138,13 @@ image::images/branch_widget_win.png[Creating a branch on Windows] این متداول‌ترین توالی دستورات شبکه‌ای هنگام کار به این سبک است، بنابراین فشرده‌سازی آن‌ها در یک فرمان، زمان زیادی صرفه‌جویی می‌کند. -===== Summary (خلاصه) +===== خلاصه (Summary) این ابزارها برای جریان کاری که برای آن طراحی شده‌اند بسیار مناسب‌اند. برنامه‌نویسان و غیرِ برنامه‌نویسان می‌توانند ظرفِ چند دقیقه روی یک پروژه با هم همکاری کنند، و بسیاری از بهترین شیوه‌ها برای این نوع جریانِ کاری در خودِ ابزارها جاافتاده‌اند. با این حال، اگر جریانِ کاری شما متفاوت است یا می‌خواهید کنترل بیشتری روی چگونگی انجام و زمان‌بندی عملیات شبکه‌ای داشته باشید، پیشنهاد می‌کنیم از یک کلاینت دیگر یا خط فرمان استفاده کنید. -==== Other GUIs (سایر رابط‌های گرافیکی) +==== سایر رابط‌های گرافیکی (Other GUIs) تعداد زیادی کلاینت گرافیکی گیت وجود دارد که از ابزارهای تخصصی و تک‌منظوره تا برنامه‌هایی که سعی می‌کنند همهٔ قابلیت‌های گیت را ارائه دهند، را شامل می‌شوند. وب‌سایت رسمی گیت فهرستِ انتخاب‌شده‌ای از محبوب‌ترین کلاینت‌ها را در https://git-scm.com/downloads/guis[^] دارد. diff --git a/book/A-git-in-other-environments/sections/jetbrainsides.asc b/book/A-git-in-other-environments/sections/jetbrainsides.asc index 4f531aa0..c6db0514 100644 --- a/book/A-git-in-other-environments/sections/jetbrainsides.asc +++ b/book/A-git-in-other-environments/sections/jetbrainsides.asc @@ -1,4 +1,4 @@ -=== Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine) +=== Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine) محیط‌های توسعهٔ JetBrains (مانند IntelliJ IDEA، PyCharm، WebStorm، PhpStorm، RubyMine و دیگران) همراه با یک افزونهٔ یکپارچه‌سازی Git عرضه می‌شوند. این افزونه نمای مخصوصی در IDE فراهم می‌کند تا بتوان با Git و درخواست‌های Pull در GitHub کار کرد. diff --git a/book/A-git-in-other-environments/sections/powershell.asc b/book/A-git-in-other-environments/sections/powershell.asc index 79283e54..0bb523d5 100644 --- a/book/A-git-in-other-environments/sections/powershell.asc +++ b/book/A-git-in-other-environments/sections/powershell.asc @@ -1,5 +1,5 @@ [[_git_powershell]] -=== Git in PowerShell (Git در PowerShell) +=== Git در PowerShell (Git in PowerShell) (((PowerShell)))(((tab completion, PowerShell)))(((shell prompts, PowerShell))) (((posh-git))) @@ -10,9 +10,9 @@ .PowerShell with Posh-git image::images/posh-git.png[PowerShell with Posh-git] -==== Installation (نصب) +==== نصب (Installation) -===== Prerequisites (Windows only) (پیش‌نیازها (فقط Windows)) +===== پیش‌نیازها (فقط Windows) (Prerequisites (Windows only)) قبل از اجرای **PowerShell scripts** باید `ExecutionPolicy` محلی خود را روی `RemoteSigned` تنظیم کنید (یعنی هر چیزی به جز `Undefined` و `Restricted`). اگر `AllSigned` را انتخاب کنید، حتی **local scripts** (سایر اسکریپت‌های خودتان) هم باید دیجیتالی امضا شده باشند تا اجرا شوند. @@ -31,7 +31,7 @@ image::images/posh-git.png[PowerShell with Posh-git] > Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force ---- -===== PowerShell Gallery (مخزن PowerShell) +===== مخزن PowerShell (PowerShell Gallery) اگر حداقل PowerShell 5 یا PowerShell 4 همراه با PackageManagement را دارید، می‌توانید از مدیر بسته برای نصب posh-git استفاده کنید. @@ -54,7 +54,7 @@ image::images/posh-git.png[PowerShell with Posh-git] سپس می‌توانید برگردید و دوباره تلاش کنید. این اتفاق می‌افتد زیرا ماژول‌هایی که همراه با Windows PowerShell عرضه می‌شوند با گواهی انتشار متفاوتی امضا شده‌اند. -===== Update PowerShell Prompt (بروزرسانی پوسته PowerShell) +===== بروزرسانی پوسته PowerShell (Update PowerShell Prompt) برای گنجاندن اطلاعات Git در پرامپت، باید ماژول posh-git وارد (import) شود. برای این‌که posh-git هر بار که PowerShell اجرا می‌شود وارد شود، فرمان Add-PoshGitToProfile را اجرا کنید که عبارت import را در اسکریپت $profile شما اضافه می‌کند. @@ -67,7 +67,7 @@ image::images/posh-git.png[PowerShell with Posh-git] > Add-PoshGitToProfile -AllHosts ---- -===== From Source (از سورس) +===== از منبع (From Source) فایل انتشار posh-git را از https://github.com/dahlbyk/posh-git/releases[^] دانلود و از حالت فشرده خارج کنید. سپس ماژول را با استفاده از مسیر کامل فایل posh-git.psd1 وارد کنید: diff --git a/book/A-git-in-other-environments/sections/sublimetext.asc b/book/A-git-in-other-environments/sections/sublimetext.asc index f0e70a57..49a82e97 100644 --- a/book/A-git-in-other-environments/sections/sublimetext.asc +++ b/book/A-git-in-other-environments/sections/sublimetext.asc @@ -1,4 +1,4 @@ -=== Git in Sublime Text (Git در Sublime Text) +=== Git در Sublime Text (Git in Sublime Text) از نسخهٔ 3.2 به بعد، Sublime Text یکپارچگی با Git را درون ویرایشگر ارائه می‌دهد. diff --git a/book/A-git-in-other-environments/sections/visualstudio.asc b/book/A-git-in-other-environments/sections/visualstudio.asc index e240d14f..9f3ab4d8 100644 --- a/book/A-git-in-other-environments/sections/visualstudio.asc +++ b/book/A-git-in-other-environments/sections/visualstudio.asc @@ -1,4 +1,4 @@ -=== Git in Visual Studio (Git در ویژوال استودیو) +=== Git در ویژوال استودیو (Git in Visual Studio) (((Visual Studio))) ویژوال استودیو از نسخه 16.8 (Visual Studio 2019) دارای ابزارهای یکپارچه Git درون محیط توسعه است. diff --git a/book/A-git-in-other-environments/sections/visualstudiocode.asc b/book/A-git-in-other-environments/sections/visualstudiocode.asc index 52433c67..4f6ee44f 100644 --- a/book/A-git-in-other-environments/sections/visualstudiocode.asc +++ b/book/A-git-in-other-environments/sections/visualstudiocode.asc @@ -1,4 +1,4 @@ -=== Git in Visual Studio Code (Git در Visual Studio Code) +=== Git در Visual Studio Code (Git in Visual Studio Code) Visual Studio Code از Git پشتیبانی داخلی دارد. برای استفاده باید Git نسخهٔ 2.0.0 یا جدیدتر روی سیستم شما نصب شده باشد. diff --git a/book/A-git-in-other-environments/sections/zsh.asc b/book/A-git-in-other-environments/sections/zsh.asc index 911bfd68..d656ac8a 100644 --- a/book/A-git-in-other-environments/sections/zsh.asc +++ b/book/A-git-in-other-environments/sections/zsh.asc @@ -1,4 +1,4 @@ -=== Git in Zsh (Git در Zsh) +=== Git در Zsh (Git in Zsh) (((zsh)))(((tab completion, zsh)))(((shell prompts, zsh))) Zsh همچنین همراه با یک کتابخانه تکمیل تب برای Git عرضه می‌شود. diff --git a/book/B-embedding-git/sections/command-line.asc b/book/B-embedding-git/sections/command-line.asc index 55bcf808..86c57f63 100644 --- a/book/B-embedding-git/sections/command-line.asc +++ b/book/B-embedding-git/sections/command-line.asc @@ -1,4 +1,4 @@ -=== Command-line Git (خط فرمان گیت) +=== خط فرمان گیت (Command-line Git) یک گزینه این است که یک فرایند شل ایجاد کرده و از ابزار خط فرمان Git برای انجام کارها استفاده کنید. این روش مزیت canonical بودن را دارد و تمام ویژگی‌های Git پشتیبانی می‌شوند. diff --git a/book/B-embedding-git/sections/dulwich.asc b/book/B-embedding-git/sections/dulwich.asc index bd5bd885..a430feea 100644 --- a/book/B-embedding-git/sections/dulwich.asc +++ b/book/B-embedding-git/sections/dulwich.asc @@ -1,4 +1,4 @@ -=== Dulwich (کتابخانه گیت پایتون) +=== کتابخانه گیت پایتون (Dulwich) (((Dulwich)))(((Python))) یک پیاده‌سازی کامل Git به زبان پایتون نیز وجود دارد — Dulwich. @@ -37,6 +37,6 @@ porcelain.log('.', max_entries=1) #Date: Sat Apr 29 2017 23:57:34 +0000 ---- -==== Further Reading (مطالعه بیشتر) +==== مطالعه بیشتر (Further Reading) مستندات API، آموزش‌ها و بسیاری از مثال‌های انجام کارهای مشخص با Dulwich در وبسایت رسمی آن در دسترس است: https://www.dulwich.io[^]. \ No newline at end of file diff --git a/book/B-embedding-git/sections/go-git.asc b/book/B-embedding-git/sections/go-git.asc index 09df4ff8..3ec1b3d1 100644 --- a/book/B-embedding-git/sections/go-git.asc +++ b/book/B-embedding-git/sections/go-git.asc @@ -1,4 +1,4 @@ -=== go-git (کتابخانه گیت برای زبان Go) +=== کتابخانه گیت برای زبان Go (go-git) (((go-git)))(((Go))) اگر می‌خواهید Git را در یک سرویس نوشته‌شده با Golang ادغام کنید، یک پیاده‌سازی کامل به زبان Go نیز وجود دارد. @@ -38,7 +38,7 @@ for _, c := range history { } ---- -==== Advanced Functionality (قابلیت‌های پیشرفته) +==== قابلیت‌های پیشرفته (Advanced Functionality) go-git دارای چند ویژگی پیشرفته قابل توجه است، یکی از آنها **سیستم ذخیره‌سازی قابل افزونه (pluggable storage)** است، مشابه backendهای Libgit2. پیاده‌سازی پیش‌فرض، **ذخیره‌سازی در حافظه (in-memory)** است که بسیار سریع است. @@ -77,7 +77,7 @@ client.InstallProtocol("https", githttp.NewClient(customClient)) r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) ---- -==== Further Reading (مطالعه بیشتر) +==== مطالعه بیشتر (Further Reading) بررسی کامل قابلیت‌های go-git خارج از محدوده این کتاب است. برای اطلاعات بیشتر در مورد go-git، مستندات API در https://pkg.go.dev/github.com/go-git/go-git/v5[^] و مجموعه‌ای از مثال‌های کاربردی در https://github.com/go-git/go-git/tree/master/_examples[^] در دسترس هستند. diff --git a/book/B-embedding-git/sections/jgit.asc b/book/B-embedding-git/sections/jgit.asc index efc7a6bf..cf603b28 100644 --- a/book/B-embedding-git/sections/jgit.asc +++ b/book/B-embedding-git/sections/jgit.asc @@ -1,11 +1,11 @@ -=== JGit (کتابخانه گیت برای زبان Java) +=== کتابخانه گیت برای زبان Java (JGit) (((jgit)))(((Java))) اگر می‌خواهید Git را در یک برنامه Java استفاده کنید، یک کتابخانه کامل به نام **JGit** وجود دارد. JGit یک پیاده‌سازی نسبتاً کامل Git است که به‌صورت native در Java نوشته شده و در جامعه Java به‌طور گسترده استفاده می‌شود. پروژه JGit تحت مجموعه Eclipse قرار دارد و صفحه اصلی آن در https://www.eclipse.org/jgit/[^] قابل دسترسی است. -==== Getting Set Up (راه‌اندازی) +==== راه‌اندازی (Getting Set Up) راه‌های مختلفی برای اتصال پروژه شما به JGit و شروع برنامه‌نویسی وجود دارد. احتمالاً ساده‌ترین روش استفاده از **Maven** است – با اضافه کردن قطعه زیر به تگ `` در فایل `pom.xml` خود: @@ -31,7 +31,7 @@ javac -cp .:org.eclipse.jgit-3.5.0.201409260305-r.jar App.java java -cp .:org.eclipse.jgit-3.5.0.201409260305-r.jar App ---- -==== Plumbing (عملیات سطح پایین) +==== عملیات سطح پایین (Plumbing) JGit دو سطح پایه API دارد: **plumbing** و **porcelain**. این اصطلاحات از Git گرفته شده و JGit نیز تقریباً به همان بخش‌ها تقسیم می‌شود: @@ -114,7 +114,7 @@ ObjectId نمایانگر هش SHA-1 یک شیء است که ممکن است د همچنین در اینجا نحوهٔ رسیدگی JGit به خطاها نشان داده نشده است که از طریق استفاده از استثناها (exceptions) انجام می‌شود. API‌های JGit گاهی استثناهای استاندارد جاوا مانند IOException را پرتاب می‌کنند، ولی مجموعه‌ای از انواع استثناهای خاص JGit نیز وجود دارد (مثل NoRemoteRepositoryException، CorruptObjectException و NoMergeBaseException). -==== Porcelain (رابط سطح بالا) +==== رابط سطح بالا (Porcelain) APIهای سطح پایین نسبتاً کامل هستند، اما کنار هم قرار دادن آن‌ها برای رسیدن به اهداف متداول—مثل افزودن یک فایل به ایندکس یا ساختن یک commit جدید—می‌تواند دست‌وپاگیر باشد. JGit مجموعه‌ای از APIهای سطح بالاتر ارائه می‌دهد تا در این مسیر کمک کند و نقطهٔ ورود به این APIها کلاس Git است: @@ -149,7 +149,7 @@ for (Ref ref : remoteRefs) { بسیاری از فرمان‌های دیگر نیز از طریق کلاس Git در دسترس‌اند، از جمله اما نه محدود به add، blame، commit، clean، push، rebase، revert و reset. -==== Further Reading (مطالعه بیشتر) +==== مطالعه بیشتر (Further Reading) این تنها نمونهٔ کوچکی از توانمندی‌های کامل JGit است. اگر علاقه‌مندید و می‌خواهید بیشتر بیاموزید، منابع و راهنمایی‌های بعدی را ببینید: diff --git a/book/B-embedding-git/sections/libgit2.asc b/book/B-embedding-git/sections/libgit2.asc index 346230ec..351f5e82 100644 --- a/book/B-embedding-git/sections/libgit2.asc +++ b/book/B-embedding-git/sections/libgit2.asc @@ -1,4 +1,4 @@ -=== Libgit2 (کتابخانهٔ گیت به زبان C) +=== کتابخانهٔ گیت به زبان C (Libgit2) (((libgit2)))((("C"))) گزینهٔ دیگر در اختیار شما استفاده از Libgit2 است. @@ -108,7 +108,7 @@ commit = repo.lookup(commit_id) # <8> کد روبی تمیز و خوب است، و چون Libgit2 کار سنگین را انجام می‌دهد، این کد هم نسبتاً سریع اجرا خواهد شد. اگر برنامه‌نویس روبی نیستید، به سایر بایندینگ‌ها در <<_libgit2_bindings>> هم اشاره کرده‌ایم. -==== Advanced Functionality (قابلیت‌های پیشرفته) +==== قابلیت‌های پیشرفته (Advanced Functionality) Libgit2 چند قابلیت دارد که فراتر از محدودهٔ اصلی گیت هستند. یک مثال، افزونه‌پذیری است: Libgit2 به شما اجازه می‌دهد برای چند نوع عملیات، «backend»های سفارشی فراهم کنید، تا بتوانید داده‌ها را به شکلی متفاوت از گیت استاندارد ذخیره کنید. @@ -179,14 +179,14 @@ int git_odb_backend_mine(git_odb_backend **backend_out, /*…*/) برای مجموعهٔ کامل امضاهای فراخوانی‌ها، فایل `include/git2/sys/odb_backend.h` در سورس Libgit2 را ببینید؛ مورد استفادهٔ خاص شما تعیین خواهد کرد کدام یک از این‌ها را می‌خواهید پشتیبانی کنید. [[_libgit2_bindings]] -==== Other Bindings (بایندینگ‌های دیگر) +==== بایندینگ‌های دیگر (Other Bindings) Libgit2 برای زبان‌های زیادی رابط ارائه کرده است. در اینجا یک مثال کوتاه نشان می‌دهیم که از چند مورد از بسته‌های رابط کامل‌تر در زمان نگارش استفاده می‌کند؛ کتابخانه‌هایی برای زبان‌های دیگری مانند C++، Go، Node.js، Erlang و JVM نیز وجود دارند که هر یک در مراحل مختلفی از تکامل قرار دارند. مجموعهٔ رسمی رابط‌ها را می‌توانید با مرور مخازن در https://github.com/libgit2[^] بیابید. کدی که خواهیم نوشت پیام کمیت (commit message) را از کمیتی باز می‌گرداند که در نهایت HEAD به آن اشاره می‌کند (تا حدی مشابه `git log -1`). -===== LibGit2Sharp (بایندینگ گیت برای .NET) +===== بایندینگ گیت برای .NET (LibGit2Sharp) (((.NET)))(((C#)))(((Mono))) اگر در حال نوشتن یک برنامهٔ .NET یا Mono هستید، LibGit2Sharp (https://github.com/libgit2/libgit2sharp[^]) همان چیزی است که به دنبالش هستید. @@ -200,7 +200,7 @@ new Repository(@"C:\path\to\repo").Head.Tip.Message; برای برنامه‌های دسکتاپ ویندوز، حتی یک بستهٔ NuGet وجود دارد که به شما کمک می‌کند سریع شروع کنید. -===== objective-git (بایندینگ گیت برای Objective-C ✅) +===== بایندینگ گیت برای Objective-C (objective-git) (((Apple)))(((Objective-C)))(((Cocoa))) اگر برنامهٔ شما روی پلتفرم‌های اپل اجرا می‌شود، احتمالاً از Objective-C به‌عنوان زبان پیاده‌سازی استفاده می‌کنید. @@ -216,7 +216,7 @@ NSString *msg = [[[repo headReferenceWithError:NULL] resolvedTarget] message]; Objective-git کاملاً با Swift قابل‌تعامل است، بنابراین اگر Objective-C را کنار گذاشته‌اید نگران نباشید. -===== pygit2 (بایندینگ گیت برای پایتون) +===== بایندینگ گیت برای پایتون (pygit2) (((Python))) رابط‌های Libgit2 برای پایتون با نام Pygit2 شناخته می‌شوند و در https://www.pygit2.org[^] در دسترس‌اند. @@ -230,7 +230,7 @@ pygit2.Repository("/path/to/repo") # open repository .message # read the message ---- -==== Further Reading (مطالعهٔ بیشتر) +==== مطالعهٔ بیشتر (Further Reading) البته، بررسی کامل قابلیت‌های Libgit2 خارج از دامنهٔ این کتاب است. اگر می‌خواهید اطلاعات بیشتری دربارهٔ خود Libgit2 به‌دست آورید، مستندات API آن در https://libgit2.github.com/libgit2 و مجموعه‌ای از راهنماها در https://libgit2.github.com/docs در دسترس هستند. diff --git a/book/contributors.asc b/book/contributors.asc index 48eea0e3..d2527054 100644 --- a/book/contributors.asc +++ b/book/contributors.asc @@ -1,5 +1,5 @@ [preface] -== مشارکت‌کنندگان و همکاران +== مشارکت‌کنندگان و همکاران (Contributors and collaborators) از آنجایی که این یک کتاب متن-باز است، در طی این سال‌ها بی‌شماری از اصلاحات و تغییر محتوا به ما هدیه داده شده است. در اینجا لیست تمام کسانی که در نسخه فارسی پرو گیت به عنوان یک پروژه متن-باز شرکت کرده‌اند آمده است. diff --git a/book/preface_ben.asc b/book/preface_ben.asc index 34662113..f8dfe0e7 100644 --- a/book/preface_ben.asc +++ b/book/preface_ben.asc @@ -1,5 +1,5 @@ [preface] -== پیشگفتار از بن استراب +== پیشگفتار از بن استراب (Foreword by Ben Straub) اولین ویرایش از این کتاب مرا شیفتهٔ گیت کرد؛ برای من مقدمه‌ای به روشی از ساخت نرم‌افزار بود که از هر روش دیگری که پیش از آن امتحان کرده بودم طبیعی‌تر به نظر می‌رسید. تا آن زمان برای سال‌های طولانی توسعه‌دهنده بوده‌ام اما این مسیر درستی بود که مرا به دنیایی بسیار بسیار جذاب و جالب‌تر از دنیای قبلی که در آن بودم هدایت کرد. From 1164485cbdcf327e113ebbf80a534379c4549bb7 Mon Sep 17 00:00:00 2001 From: Yasin Date: Wed, 24 Sep 2025 16:34:40 +0330 Subject: [PATCH 536/549] fix(headings): fixed headings titles format & translate untranslated sections --- book/dedication.asc | 2 +- book/introduction.asc | 2 +- book/license.asc | 2 +- book/preface_schacon.asc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/book/dedication.asc b/book/dedication.asc index 7f441ea4..0c6cdc0e 100644 --- a/book/dedication.asc +++ b/book/dedication.asc @@ -1,5 +1,5 @@ [dedication] -== Dedications (تقدیم‌ها) +== تقدیم‌ها (Dedications) _به همسرم بکی؛ بی‌او این ماجراجویی هرگز آغاز نمی‌شد. — بن_ diff --git a/book/introduction.asc b/book/introduction.asc index b014d248..02936f4f 100644 --- a/book/introduction.asc +++ b/book/introduction.asc @@ -1,5 +1,5 @@ [preface] -== Introduction (مقدمه) +== مقدمه (Introduction) شما در آستانه صرف چندین ساعت از زندگی خود برای خواندن درباره **Git** هستید. بیایید یک دقیقه وقت بگذاریم و توضیح بدهیم که چه چیزی در پیش رو دارید. diff --git a/book/license.asc b/book/license.asc index 0207d26f..340cd9a8 100644 --- a/book/license.asc +++ b/book/license.asc @@ -1,4 +1,4 @@ [preface] -== License (لایسنس) +== لایسنس (License) include::../LICENSE.asc[] diff --git a/book/preface_schacon.asc b/book/preface_schacon.asc index 1a918cdc..50dfa9ed 100644 --- a/book/preface_schacon.asc +++ b/book/preface_schacon.asc @@ -1,5 +1,5 @@ [preface] -== Preface by Scott Chacon (پیشگفتار نوشته‌ی Scott Chacon) +== پیشگفتار نوشته‌ی Scott Chacon (Preface by Scott Chacon) به نسخه دوم **Pro Git** خوش آمدید. نسخه اول این کتاب بیش از چهار سال پیش منتشر شد. From 0cf0a3392d2d35758019d3f9d1402ccd50a7eb56 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:39:49 +0330 Subject: [PATCH 537/549] translate(sections-overview): translated C-git-commands to persian --- .idea/workspace.xml | 59 +++-- C-git-commands.asc | 570 ++++++++++++++++++++------------------------ 2 files changed, 303 insertions(+), 326 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e0dd2aee..2b529405 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,8 @@ - - - + + @@ -130,25 +129,25 @@ - { - "keyToString": { - "ModuleVcsDetector.initialDetectionPerformed": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", - "RunOnceActivity.git.unshallow": "true", - "git-widget-placeholder": "book/translation/sections-overview", - "junie.onboarding.icon.badge.shown": "true", - "last_opened_file_path": "/Users/mac/Projects/WebstormProjects/Github/progit2-fa", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "to.speed.mode.migration.done": "true", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + &quot;keyToString&quot;: { + &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;, + &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, + &quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;, + &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, + &quot;git-widget-placeholder&quot;: &quot;book/translation/sections-overview&quot;, + &quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;, + &quot;last_opened_file_path&quot;: &quot;/Users/mac/Projects/WebstormProjects/Github/progit2-fa&quot;, + &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, + &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, + &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, + &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, + &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, + &quot;settings.editor.selected.configurable&quot;: &quot;preferences.keymap&quot;, + &quot;to.speed.mode.migration.done&quot;: &quot;true&quot;, + &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; } -} +} @@ -191,7 +190,25 @@ + + + + + 1758699199538 + + + + 1758699199538 + + + + 1758699223924 + + + + 1758699223924 + diff --git a/C-git-commands.asc b/C-git-commands.asc index 3e3523ef..a8687dc2 100644 --- a/C-git-commands.asc +++ b/C-git-commands.asc @@ -1,50 +1,42 @@ [[C-git-commands]] [appendix] -== Git Commands +== دستورات گیت (Git Commands) -Throughout the book we have introduced dozens of Git commands and have tried hard to introduce them within something of a narrative, adding more commands to the story slowly. -However, this leaves us with examples of usage of the commands somewhat scattered throughout the whole book. +در سراسر کتاب، ده‌ها فرمان گیت معرفی کردیم و سعی کردیم آن‌ها را در قالب نوعی روایت ارائه کنیم، به‌تدریج فرمان‌های بیشتری را به داستان اضافه کردیم. با این حال، این باعث شده که مثال‌های استفاده از فرمان‌ها تا حدودی در سراسر کتاب پراکنده باشند. -In this appendix, we'll go through all the Git commands we addressed throughout the book, grouped roughly by what they're used for. -We'll talk about what each command very generally does and then point out where in the book you can find us having used it. +در این پیوست، تمام فرمان‌های گیتی را که در طول کتاب به آن‌ها پرداختیم مرور خواهیم کرد، و آن‌ها را به‌طور تقریبی بر اساس کاربردشان گروه‌بندی می‌کنیم. دربارهٔ عملکرد کلی هر فرمان صحبت خواهیم کرد و سپس اشاره خواهیم کرد که در کدام بخش‌های کتاب از آن‌ها استفاده کرده‌ایم. [TIP] ==== -You can abbreviate long options. -For example, you can type in `git commit --a`, which acts as if you typed `git commit --amend`. -This only works when the letters after `--` are unique for one option. -Do use the full option when writing scripts. +می‌توانید گزینه‌های طولانی را کوتاه‌نویسی کنید. برای مثال، می‌توانید بنویسید `git commit --`a که همان تأثیر `git commit --amend` را دارد. این تنها زمانی کار می‌کند که حروف بعد از -- برای یک گزینه منحصر‌به‌فرد باشند. هنگام نوشتن اسکریپت‌ها از نوشتن کامل گزینه استفاده کنید. ==== -=== Setup and Config +=== تنظیم و پیکربندی (Setup and Config) -There are two commands that are used quite a lot, from the first invocations of Git to common every day tweaking and referencing, the `config` and `help` commands. +دو فرمان هستند که از نخستین اجراهای گیت تا تنظیمات و ارجاعات روزمره کاربرد زیادی دارند: فرمان‌های config و help. -==== git config +==== پیکربندی گیت (git config) -Git has a default way of doing hundreds of things. -For a lot of these things, you can tell Git to default to doing them a different way, or set your preferences. -This involves everything from telling Git what your name is to specific terminal color preferences or what editor you use. -There are several files this command will read from and write to so you can set values globally or down to specific repositories. +گیت نحوهٔ پیش‌فرض انجام صدها کار را دارد. برای بسیاری از این کارها می‌توانید به گیت بگویید که به‌طور پیش‌فرض آن‌ها را به شیوه‌ای متفاوت انجام دهد یا ترجیحات خود را تنظیم کنید. این شامل همه چیز از تعیین نام شما تا تنظیمات رنگ ترمینال یا ویرایشگری است که استفاده می‌کنید. چندین فایل وجود دارد که این فرمان از آن‌ها می‌خواند و در آن‌ها می‌نویسد تا بتوانید مقادیر را به‌صورت سراسری یا مخصوص مخزن‌های خاص تنظیم کنید. -The `git config` command has been used in nearly every chapter of the book. +فرمان `git config` در تقریباً هر فصل کتاب استفاده شده است. -In <> we used it to specify our name, email address and editor preference before we even got started using Git. +در <> از آن برای مشخص کردن نام، آدرس ایمیل و تنظیم ویرایشگر استفاده کردیم، پیش از آنکه حتی کار با گیت را آغاز کنیم. -In <> we showed how you could use it to create shorthand commands that expand to long option sequences so you don't have to type them every time. +در <> نشان دادیم چگونه می‌توانید از آن برای ایجاد دستورهای کوتاه (alias) استفاده کنید که به توالی گزینه‌های طولانی گسترش می‌یابند تا هر بار مجبور نباشید آن‌ها را تایپ کنید. -In <> we used it to make `--rebase` the default when you run `git pull`. +در <> از آن استفاده کردیم تا `--rebase` را به‌عنوان پیش‌فرض هنگام اجرای `git pull` قرار دهیم. -In <> we used it to set up a default store for your HTTP passwords. +در <> از آن برای تنظیم یک مخزن پیش‌فرض برای گذرواژه‌های HTTP استفاده کردیم. -In <> we showed how to set up smudge and clean filters on content coming in and out of Git. +در <> نشان دادیم چگونه فیلترهای smudge و clean را روی محتوایی که وارد و خارج Git می‌شود تنظیم کنیم. -Finally, basically the entirety of <> is dedicated to the command. +در نهایت، تقریباً کلیت <> به این دستور اختصاص دارد. [[ch_core_editor]] -==== git config core.editor commands +==== دستورات ویرایشگر اصلی گیت (git config core.editor commands) -Accompanying the configuration instructions in <>, many editors can be set as follows: +همراه با دستورات پیکربندی در <>، بسیاری از ویرایشگرها را می‌توان به صورت زیر تنظیم کرد: .Exhaustive list of `core.editor` configuration commands [cols="1,2",options="header"] @@ -76,506 +68,474 @@ Accompanying the configuration instructions in <>, [NOTE] ==== -If you have a 32-bit editor on a Windows 64-bit system, the program will be installed in `C:\Program Files (x86)\` rather than `C:\Program Files\` as in the table above. +اگر یک ویرایشگر ۳۲ بیتی روی سیستم ویندوز ۶۴ بیتی دارید، برنامه در پوشهٔ `C:\Program Files (x86)\` نصب خواهد شد نه در `C:\Program Files\` همان‌طور که در جدول بالا آمده است. ==== -==== git help +==== راهنمای گیت (git help) -The `git help` command is used to show you all the documentation shipped with Git about any command. -While we're giving a rough overview of most of the more popular ones in this appendix, for a full listing of all of the possible options and flags for every command, you can always run `git help `. +دستور `git help` برای نمایش تمام مستنداتی که همراه Git عرضه می‌شوند دربارهٔ هر دستور استفاده می‌شود. +در حالی که در این پیوست نمایی کلی از محبوب‌ترین دستورات را ارائه می‌دهیم، برای فهرست کامل همهٔ گزینه‌ها و فلَگ‌های ممکن برای هر دستور همیشه می‌توانید `git help ` را اجرا کنید. -We introduced the `git help` command in <> and showed you how to use it to find more information about the `git shell` in <>. +ما دستور `git help` را در <> معرفی کردیم و نشان دادیم چگونه برای پیدا کردن اطلاعات بیشتر دربارهٔ `git shell` در <> از آن استفاده کنید. -=== Getting and Creating Projects +=== گرفتن و ایجاد پروژه‌ها (Getting and Creating Projects) -There are two ways to get a Git repository. -One is to copy it from an existing repository on the network or elsewhere and the other is to create a new one in an existing directory. +دو راه برای به‌دست آوردن یک مخزن Git وجود دارد. +یکی کپی‌کردن آن از یک مخزن موجود روی شبکه یا مکان دیگری است و دیگری ایجاد یک مخزن جدید در یک شاخهٔ موجود است. -==== git init +==== ایجاد مخزن گیت (git init) -To take a directory and turn it into a new Git repository so you can start version controlling it, you can simply run `git init`. +برای تبدیل یک دایرکتوری به یک مخزن Git جدید تا بتوانید نسخه‌دهی را آغاز کنید، کافی است `git init` را اجرا کنید. -We first introduce this in <>, where we show creating a brand new repository to start working with. +ما ابتدا این را در <> معرفی می‌کنیم، جایی که ایجاد یک مخزن کاملاً جدید برای شروع کار را نشان می‌دهیم. -We talk briefly about how you can change the default branch name from "`master`" in <>. +به‌طور خلاصه دربارهٔ چگونگی تغییر نام شاخهٔ پیش‌فرض از «master» در <> صحبت کرده‌ایم. -We use this command to create an empty bare repository for a server in <>. +ما از این دستور برای ایجاد یک مخزن خالی و bare برای یک سرور در <> استفاده می‌کنیم. -Finally, we go through some of the details of what it actually does behind the scenes in <>. +در نهایت، برخی از جزئیات کارهایی که در پشت صحنه انجام می‌دهد را در <> بررسی می‌کنیم. -==== git clone +==== کلون گرفتن از گیت (git clone) -The `git clone` command is actually something of a wrapper around several other commands. -It creates a new directory, goes into it and runs `git init` to make it an empty Git repository, adds a remote (`git remote add`) to the URL that you pass it (by default named `origin`), runs a `git fetch` from that remote repository and then checks out the latest commit into your working directory with `git checkout`. +دستور `git clone` در واقع نوعی پوسته (wrapper) بر چندین دستور دیگر است. +این دستور یک دایرکتوری جدید می‌سازد، وارد آن می‌شود و با اجرای `git init` آن را به یک مخزن خالی گیت تبدیل می‌کند، یک remote (با `git remote add`) به آدرسی که به آن می‌دهید اضافه می‌کند (به‌طور پیش‌فرض با نام `origin`)، از آن مخزن remote یک `git fetch` اجرا می‌کند و سپس آخرین commit را با `git checkout` در شاخه کاری شما (working directory) چک‌اوت می‌کند. -The `git clone` command is used in dozens of places throughout the book, but we'll just list a few interesting places. +دستور `git clone` در سرتاسر کتاب در ده‌ها جا استفاده شده است، اما ما فقط چند مورد جالب را ذکر می‌کنیم. -It's basically introduced and explained in <>, where we go through a few examples. +در اصل در <> معرفی و توضیح داده شده است، جایی که چند مثال را مرور می‌کنیم. -In <> we look at using the `--bare` option to create a copy of a Git repository with no working directory. +در <> گزینه `--bare` را برای ساختن یک نسخه از مخزن گیت بدون شاخه کاری بررسی می‌کنیم. -In <> we use it to unbundle a bundled Git repository. +در <> از آن برای خارج‌سازی (unbundle) یک مخزن گیت بسته‌بندی‌شده (bundled) استفاده می‌کنیم. -Finally, in <> we learn the `--recurse-submodules` option to make cloning a repository with submodules a little simpler. +در نهایت، در <> با گزینه `--recurse-submodules` آشنا می‌شویم تا کلون‌کردن یک مخزن حاوی submoduleها ساده‌تر شود. -Though it's used in many other places through the book, these are the ones that are somewhat unique or where it is used in ways that are a little different. +گرچه در بسیاری از بخش‌های دیگر کتاب نیز استفاده شده است، این موارد تا حدی منحصر به فرد هستند یا در آنها به شیوه‌هایی کمی متفاوت به کار رفته است. -=== Basic Snapshotting +=== نمونه‌برداری پایه‌ای (Basic Snapshotting) -For the basic workflow of staging content and committing it to your history, there are only a few basic commands. +برای جریان کاری پایه‌ایِ صحنه‌بندی (staging) محتوا و commit کردن آن به تاریخچه، تنها چند دستور پایه وجود دارد. -==== git add +==== افزودن به گیت (git add) -The `git add` command adds content from the working directory into the staging area (or "`index`") for the next commit. -When the `git commit` command is run, by default it only looks at this staging area, so `git add` is used to craft what exactly you would like your next commit snapshot to look like. +دستور `git add` محتوا را از شاخه کاری (working directory) به ناحیهٔ صحنه‌بندی (یا «index») برای commit بعدی اضافه می‌کند. +وقتی دستور `git commit` اجرا می‌شود، به‌طور پیش‌فرض تنها به این ناحیهٔ صحنه‌بندی نگاه می‌کند، بنابراین از `git add` برای تعیین دقیق آنچه می‌خواهید اسنپ‌شات (snapshot) commit بعدی شما شبیه آن باشد استفاده می‌شود. -This command is an incredibly important command in Git and is mentioned or used dozens of times in this book. -We'll quickly cover some of the unique uses that can be found. +این دستور در گیت اهمیت بسیار زیادی دارد و در کتاب بارها نام برده یا استفاده شده است. +ما سریعاً برخی از کاربردهای منحصربه‌فرد آن را که می‌توان یافت، مرور خواهیم کرد. -We first introduce and explain `git add` in detail in <>. +ابتدا دستور `git add` را به‌طور مفصل معرفی و توضیح می‌دهیم (<>). -We mention how to use it to resolve merge conflicts in <>. +نحوهٔ استفاده از آن برای حل تعارض‌های merge را در <> بیان می‌کنیم. -We go over using it to interactively stage only specific parts of a modified file in <>. +نحوهٔ به‌کارگیری آن برای مرحله‌بندی تعاملی و انتخاب تنها بخش‌های مشخصی از یک فایل تغییر یافته را در <> مرور می‌کنیم. -Finally, we emulate it at a low level in <>, so you can get an idea of what it's doing behind the scenes. +در پایان، پیاده‌سازی سطح پایینِ آن را شبیه‌سازی می‌کنیم تا ایده‌ای از کارهای داخلی که پشت صحنه انجام می‌دهد به‌دست آورید (<>). -==== git status +==== وضعیت گیت (git status) -The `git status` command will show you the different states of files in your working directory and staging area. -Which files are modified and unstaged and which are staged but not yet committed. -In its normal form, it also will show you some basic hints on how to move files between these stages. +دستور `git status` وضعیت‌های مختلف فایل‌ها در دایرکتوری کاری و ناحیهٔ مرحله‌بندی را نشان می‌دهد: +کدام فایل‌ها تغییر کرده و هنوز مرحله‌بندی نشده‌اند و کدام‌ها مرحله‌بندی شده ولی هنوز ثبت (commit) نشده‌اند. +در حالت معمول، همچنین چند راهنمایی پایه‌ای دربارهٔ چگونگی جابجایی فایل‌ها بین این وضعیت‌ها نمایش می‌دهد. -We first cover `status` in <>, both in its basic and simplified forms. -While we use it throughout the book, pretty much everything you can do with the `git status` command is covered there. +ابتدا `status` را در <> پوشش می‌دهیم، هم فرم‌های پایه‌ای و هم فرم‌های ساده‌شدهٔ آن. +هرچند در سراسر کتاب از آن استفاده می‌کنیم، عملاً هر کاری که با دستور `git status` می‌توانید انجام دهید در آنجا توضیح داده شده است. -==== git diff +==== (git diff) -The `git diff` command is used when you want to see differences between any two trees. -This could be the difference between your working environment and your staging area (`git diff` by itself), between your staging area and your last commit (`git diff --staged`), or between two commits (`git diff master branchB`). +دستور `git diff` وقتی به‌کار می‌رود که بخواهید تفاوت بین هر دو درخت (tree) را ببینید. +این می‌تواند تفاوت بین محیط کاری شما و ناحیهٔ مرحله‌بندی (`git diff` بدون آرگومان)، بین ناحیهٔ مرحله‌بندی و آخرین commit شما (`git diff --staged`) یا بین دو commit (`git diff master branchB`) باشد. -We first look at the basic uses of `git diff` in <>, where we show how to see what changes are staged and which are not yet staged. +ابتدا کاربردهای پایهٔ `git diff` را در <> بررسی می‌کنیم، جایی که نشان می‌دهیم چه تغییراتی مرحله‌بندی شده‌اند و کدام‌ها هنوز مرحله‌بندی نشده‌اند. -We use it to look for possible whitespace issues before committing with the `--check` option in <>. +از آن برای جستجوی احتمال مشکلات فاصله‌گذاری (whitespace) پیش از commit با گزینهٔ `--check` در <> استفاده می‌کنیم. -We see how to check the differences between branches more effectively with the `git diff A...B` syntax in <>. +همچنین می‌بینیم چگونه می‌توان تفاوت بین شاخه‌ها را مؤثرتر با نحو `git diff A...B` بررسی کرد (<>). -We use it to filter out whitespace differences with `-b` and how to compare different stages of conflicted files with `--theirs`, `--ours` and `--base` in <>. + ما از آن برای فیلتر کردن اختلاف‌های فضای سفید با گزینه -b و برای مقایسهٔ مراحل مختلف فایل‌های درگیر (conflicted) با گزینه‌های --theirs، --ours و --base در <> استفاده می‌کنیم. -Finally, we use it to effectively compare submodule changes with `--submodule` in <>. +در نهایت، از آن برای مقایسهٔ مؤثر تغییرات زیرمدول‌ها با --submodule در <> استفاده می‌کنیم. -==== git difftool +==== ابزار مقایسه تغییرات گیت (git difftool) -The `git difftool` command simply launches an external tool to show you the difference between two trees in case you want to use something other than the built in `git diff` command. +دستور git difftool به‌سادگی یک ابزار خارجی را اجرا می‌کند تا تفاوت بین دو درخت را به شما نشان دهد، در صورتی که بخواهید از چیزی غیر از دستور داخلی git diff استفاده کنید. -We only briefly mention this in <>. +ما فقط به‌طور مختصر در <> به این موضوع اشاره کرده‌ایم. -==== git commit +==== ثبت تغییرات در گیت (git commit) -The `git commit` command takes all the file contents that have been staged with `git add` and records a new permanent snapshot in the database and then moves the branch pointer on the current branch up to it. +دستور git commit همهٔ محتوای فایل‌هایی را که با git add وارد staging شده‌اند می‌گیرد، یک تصویر (snapshot) دائمی جدید در پایگاه داده ثبت می‌کند و سپس اشاره‌گر شاخهٔ جاری را به آن منتقل می‌کند. -We first cover the basics of committing in <>. -There we also demonstrate how to use the `-a` flag to skip the `git add` step in daily workflows and how to use the `-m` flag to pass a commit message in on the command line instead of firing up an editor. +ما ابتدا اصول پایهٔ commit کردن را در <> بررسی می‌کنیم. +در آنجا نشان می‌دهیم چگونه با استفاده از گزینه -a می‌توان در گردش‌های کاری روزمره از مرحله git add صرف‌نظر کرد و چگونه با گزینه -m پیام commit را از خط فرمان ارسال کرد به‌جای اینکه ویرایشگر باز شود. -In <> we cover using the `--amend` option to redo the most recent commit. +در <> از گزینه --amend برای بازنویسی آخرین commit صحبت می‌کنیم. -In <>, we go into much more detail about what `git commit` does and why it does it like that. +در <> با جزئیات بیشتری توضیح می‌دهیم که git commit چه کاری انجام می‌دهد و چرا این کار را به آن شکل انجام می‌دهد. -We looked at how to sign commits cryptographically with the `-S` flag in <>. +ما نحوهٔ امضای رمزنگاری‌شدهٔ commitها با گزینه -S را در <> بررسی کردیم. -Finally, we take a look at what the `git commit` command does in the background and how it's actually implemented in <>. +در نهایت، نگاهی می‌اندازیم به اینکه دستور git commit در پس‌زمینه چه کاری انجام می‌دهد و در عمل چگونه پیاده‌سازی شده است، در <>. -==== git reset +==== بازنشانی در گیت (git reset) -The `git reset` command is primarily used to undo things, as you can possibly tell by the verb. -It moves around the `HEAD` pointer and optionally changes the `index` or staging area and can also optionally change the working directory if you use `--hard`. -This final option makes it possible for this command to lose your work if used incorrectly, so make sure you understand it before using it. + دستور `git reset` عمدتاً برای بازگرداندن تغییرات استفاده می‌شود، همان‌طور که از فعل آن هم می‌توان حدس زد. این دستور اشاره‌گر HEAD را جابه‌جا می‌کند و در صورت نیاز می‌تواند index یا ناحیه استیج را تغییر دهد و همچنین در صورت استفاده از `--hard` می‌تواند دایرکتوری کاری را هم تغییر دهد. این گزینهٔ آخر باعث می‌شود در صورت استفادهٔ نادرست، امکان از دست رفتن کار شما وجود داشته باشد، پس قبل از استفاده آن را خوب بفهمید. -We first effectively cover the simplest use of `git reset` in <>, where we use it to unstage a file we had run `git add` on. +ما ابتدا ساده‌ترین کاربرد git reset را در <> مطرح می‌کنیم، جایی که از آن برای برداشتن فایل‌هایی که با git add به استیج اضافه کرده‌ایم استفاده می‌کنیم. -We then cover it in quite some detail in <>, which is entirely devoted to explaining this command. +سپس این دستور را با جزئیات زیادی در <> بررسی می‌کنیم که کاملاً به توضیح این دستور اختصاص دارد. -We use `git reset --hard` to abort a merge in <>, where we also use `git merge --abort`, which is a bit of a wrapper for the `git reset` command. +ما از `git reset --hard` برای لغو یک merge در <> استفاده می‌کنیم، جایی که همچنین از `git merge --abort` استفاده شده است که در واقع تا حدی پوششی برای دستور `git reset` است. -==== git rm +==== حذف فایل در گیت (git rm) -The `git rm` command is used to remove files from the staging area and working directory for Git. -It is similar to `git add` in that it stages a removal of a file for the next commit. +دستور `git rm` برای حذف فایل‌ها از ناحیه استیج و دایرکتوری کاری در گیت به کار می‌رود. این دستور شباهت به `git add` دارد، با این تفاوت که حذف یک فایل را برای commit بعدی استیج می‌کند. -We cover the `git rm` command in some detail in <>, including recursively removing files and only removing files from the staging area but leaving them in the working directory with `--cached`. +ما دستور `git rm` را با جزئیات در <> پوشش داده‌ایم، از جمله حذف بازگشتی فایل‌ها و نیز فقط حذف فایل‌ها از ناحیه استیج ولی باقی گذاشتن آن‌ها در دایرکتوری کاری با گزینهٔ `--cached`. -The only other differing use of `git rm` in the book is in <> where we briefly use and explain the `--ignore-unmatch` when running `git filter-branch`, which simply makes it not error out when the file we are trying to remove doesn't exist. -This can be useful for scripting purposes. +تنها کاربرد متفاوت دیگری از `git rm` در کتاب در <> آمده است که در آن به‌طور مختصر از و توضیح داده‌ایم که هنگام اجرای `git filter-branch` از گزینهٔ `--ignore-unmatch` استفاده می‌کنیم؛ این گزینه باعث می‌شود وقتی فایلی که می‌خواهیم حذف کنیم وجود ندارد، خطا تولید نشود. این مورد می‌تواند برای اهداف اسکریپت‌نویسی مفید باشد. -==== git mv +==== جابجایی یا تغییر نام فایل در گیت (git mv) -The `git mv` command is a thin convenience command to move a file and then run `git add` on the new file and `git rm` on the old file. +دستور `git mv` یک دستور کم‌حجم و راحت برای جابه‌جایی فایل است که پس از جا‌به‌جایی، به‌طور خودکار روی فایل جدید git add و روی فایل قدیمی git rm انجام می‌دهد. -We only briefly mention this command in <>. +ما تنها به‌طور مختصر این دستور را در <> ذکر کرده‌ایم. -==== git clean +==== پاک‌سازی در گیت (git clean) -The `git clean` command is used to remove unwanted files from your working directory. -This could include removing temporary build artifacts or merge conflict files. +دستور `git clean` برای حذف فایل‌های نامطلوب از شاخه کاری (working directory) شما استفاده می‌شود. این ممکن است شامل حذف آثار موقت ساخت (build artifacts) یا فایل‌های مربوط به تداخل‌های مرج (merge conflict) باشد. +ما بسیاری از گزینه‌ها و سناریوهایی را که ممکن است از دستور clean استفاده کنید در <> پوشش داده‌ایم. -We cover many of the options and scenarios in which you might used the clean command in <>. +=== انشعاب‌گیری و ادغام (Branching and Merging) -=== Branching and Merging +تنها تعداد اندکی از دستورات وجود دارند که بخش اعظم عملکرد شاخه‌بندی و ادغام در گیت را پیاده‌سازی می‌کنند. -There are just a handful of commands that implement most of the branching and merging functionality in Git. +==== مدیریت شاخه‌ها در گیت (git branch) -==== git branch +دستور `git branch` در واقع نوعی ابزار مدیریت شاخه است. این دستور می‌تواند شاخه‌های موجود را فهرست کند، شاخهٔ جدید ایجاد کند، شاخه‌ها را حذف کند و نام شاخه‌ها را تغییر دهد. -The `git branch` command is actually something of a branch management tool. -It can list the branches you have, create a new branch, delete branches and rename branches. +بخش عمده‌ای از فصل <> به دستور branch اختصاص دارد و در سرتاسر فصل از آن استفاده شده است. ابتدا آن را در <> معرفی می‌کنیم و اکثر ویژگی‌های دیگر آن (فهرست‌کردن و حذف) را در <> بررسی می‌کنیم. -Most of <> is dedicated to the `branch` command and it's used throughout the entire chapter. -We first introduce it in <> and we go through most of its other features (listing and deleting) in <>. +در <> از گزینه `git branch -u` برای تنظیم شاخهٔ دنبال‌شونده (tracking branch) استفاده می‌کنیم. -In <> we use the `git branch -u` option to set up a tracking branch. +در نهایت، بخش‌هایی از کاری که در پس‌زمینه انجام می‌دهد را در <> مرور می‌کنیم. -Finally, we go through some of what it does in the background in <>. +==== تغییر شاخه یا بازیابی فایل در گیت (`git checkout`) -==== git checkout +دستور `git checkout` برای سویچ‌کردن بین شاخه‌ها و چک‌اوت (برگرداندن محتوا) به شاخه کاری شما استفاده می‌شود. -The `git checkout` command is used to switch branches and check content out into your working directory. +برای اولین بار این دستور را همراه با دستور `git branch` در <> می‌بینیم. -We first encounter the command in <> along with the `git branch` command. +می‌آموزیم چگونه با استفاده از گزینه `--track` برای شروع دنبال‌کردن شاخه‌ها اقدام کنیم در <>. -We see how to use it to start tracking branches with the `--track` flag in <>. +با استفاده از `--conflict=diff3` از آن برای بازگرداندن (reintroduce) تداخلات فایل‌ها استفاده می‌کنیم در <>. -We use it to reintroduce file conflicts with `--conflict=diff3` in <>. +روابط آن با `git reset` را با جزییات بیشتر در <> بررسی می‌کنیم. -We go into closer detail on its relationship with `git reset` in <>. +در نهایت، برخی جزئیات پیاده‌سازی را در <> شرح می‌دهیم. -Finally, we go into some implementation detail in <>. +==== ادغام شاخه‌ها در گیت (git merge) -==== git merge +ابزار `git merge` برای ادغام یک یا چند شاخه در شاخهٔ فعلی که چک‌اوت کرده‌اید به کار می‌رود. سپس شاخهٔ جاری را به نتیجهٔ ادغام جلو می‌برد. -The `git merge` tool is used to merge one or more branches into the branch you have checked out. -It will then advance the current branch to the result of the merge. +دستور `git merge` اولین‌بار در <> معرفی شد. اگرچه در فصل‌های مختلف کتاب از آن استفاده شده، اما تنوع‌های دستور merge بسیار محدود است — معمولاً فقط `git merge ` با نام تک شاخه‌ای که می‌خواهید با آن ادغام کنید. -The `git merge` command was first introduced in <>. -Though it is used in various places in the book, there are very few variations of the `merge` command -- generally just `git merge ` with the name of the single branch you want to merge in. +نحوه انجام ادغام به‌صورت squash (جایی که گیت کارها را ادغام می‌کند اما طوری رفتار می‌کند که گویی فقط یک کامیت جدید است و تاریخچهٔ شاخهٔ ادغام‌شونده را ثبت نمی‌کند) را در انتهای <> بررسی کردیم. -We covered how to do a squashed merge (where Git merges the work but pretends like it's just a new commit without recording the history of the branch you're merging in) at the very end of <>. +در مورد فرایند و دستور merge مطالب زیادی گفتیم، از جمله گزینهٔ -Xignore-space-change و فلگ `--abort` برای متوقف کردن یک ادغام مشکل‌دار در <>. -We went over a lot about the merge process and command, including the `-Xignore-space-change` command and the `--abort` flag to abort a problem merge in <>. +همچنین یاد گرفتیم که چگونه قبل از ادغام امضاها را در صورتی که پروژه‌تان از امضای GPG استفاده می‌کند، تأیید کنیم، که در <> آمده است. -We learned how to verify signatures before merging if your project is using GPG signing in <>. +در نهایت در مورد Subtree merging در <> بحث کردیم. -Finally, we learned about Subtree merging in <>. +==== ابزار ادغام در گیت (git mergetool) -==== git mergetool +دستور git mergetool صرفاً در صورتی که هنگام ادغام با مشکل مواجه شوید یک ابزار خارجی کمکِ ادغام را راه‌اندازی می‌کند. -The `git mergetool` command simply launches an external merge helper in case you have issues with a merge in Git. +ما به‌طور مختصر آن را در <> ذکر کرده‌ایم و در <> به تفصیل توضیح داده‌ایم که چگونه می‌توانید ابزار ادغام خارجی خود را پیاده‌سازی کنید. -We mention it quickly in <> and go into detail on how to implement your own external merge tool in <>. +==== نمایش تاریخچه گیت (git log) -==== git log +دستور git log برای نمایش تاریخچهٔ قابل دسترس ثبت‌شدهٔ یک پروژه از آخرین اسنپ‌شات کامیت به عقب استفاده می‌شود. به‌طور پیش‌فرض تنها تاریخچهٔ شاخه‌ای را که در آن قرار دارید نشان می‌دهد، اما می‌توان به آن سرها یا شاخه‌های مختلف یا حتی متعدد داد تا از آن‌ها عبور کند. همچنین اغلب برای نمایش تفاوت‌ها بین دو یا چند شاخه در سطح کامیت به‌کار می‌رود. -The `git log` command is used to show the reachable recorded history of a project from the most recent commit snapshot backwards. -By default it will only show the history of the branch you're currently on, but can be given different or even multiple heads or branches from which to traverse. -It is also often used to show differences between two or more branches at the commit level. +این دستور تقریباً در هر فصل کتاب برای نمایش تاریخچهٔ یک پروژه استفاده شده است. +فرمان را معرفی می‌کنیم و آن را در <> به‌صورت نسبتاً عمیق پوشش می‌دهیم. +در آن‌جا به گزینه‌های `-p` و `--stat` می‌پردازیم تا ایده‌ای از تغییراتی که هر کامیت وارد کرده بدست آوریم و از گزینه‌های `--pretty` و `--oneline` برای مشاهده فشرده‌تر تاریخچه استفاده می‌کنیم، همراه با چند گزینه ساده برای فیلتر کردن بر اساس تاریخ و مؤلف. -This command is used in nearly every chapter of the book to demonstrate the history of a project. +در <> آن را با گزینه `--decorate` به کار می‌بریم تا به‌راحتی محل اشاره‌گرهای شاخه‌ها را ببینیم و همچنین از گزینه `--graph` استفاده می‌کنیم تا ببینیم تاریخچه‌های منشعب چگونه به نظر می‌رسند. -We introduce the command and cover it in some depth in <>. -There we look at the `-p` and `--stat` option to get an idea of what was introduced in each commit and the `--pretty` and `--oneline` options to view the history more concisely, along with some simple date and author filtering options. +در <> و <> نحو `branchA..branchB` را پوشش می‌دهیم تا با استفاده از دستور `git log` ببینیم کدام کامیت‌ها نسبت به شاخه‌ی دیگر منحصر به همان شاخه‌اند. +در <> این موضوع را نسبتاً مفصل بررسی می‌کنیم. -In <> we use it with the `--decorate` option to easily visualize where our branch pointers are located and we also use the `--graph` option to see what divergent histories look like. +در <> و <> از فرمت `branchA...branchB` و نحو `--left-right` برای دیدن اینکه چه چیزهایی در یکی از شاخه‌ها هست ولی در هر دو نیست، استفاده می‌کنیم. +در <> همچنین می‌بینیم چگونه از گزینه `--merge` برای کمک به اشکال‌زدایی تداخل‌های مرج و از گزینه `--cc` برای بررسی تداخل‌های کامیت‌های مرج در تاریخچه‌تان بهره ببریم. -In <> and <> we cover the `branchA..branchB` syntax to use the `git log` command to see what commits are unique to a branch relative to another branch. -In <> we go through this fairly extensively. +در <> از گزینه `-g` برای مشاهده reflog گیت از طریق این ابزار به جای گشتن در شاخه‌ها استفاده می‌کنیم. -In <> and <> we cover using the `branchA...branchB` format and the `--left-right` syntax to see what is in one branch or the other but not in both. -In <> we also look at how to use the `--merge` option to help with merge conflict debugging as well as using the `--cc` option to look at merge commit conflicts in your history. +در <> به استفاده از گزینه‌های `-S` و `-L` برای انجام جستجوهای نسبتاً پیشرفته درباره چیزی که به‌صورت تاریخی در کد اتفاق افتاده، مانند مشاهدهٔ تاریخچهٔ یک تابع، می‌پردازیم. -In <> we use the `-g` option to view the Git reflog through this tool instead of doing branch traversal. +در <> می‌بینیم چگونه از `--show-signature` برای افزودن یک رشتهٔ اعتبارسنجی به هر کامیت در خروجی `git log` استفاده کنیم تا مشخص شود آیا آن کامیت به‌درستی امضا شده است یا خیر. -In <> we look at using the `-S` and `-L` options to do fairly sophisticated searches for something that happened historically in the code such as seeing the history of a function. +==== ذخیره موقت تغییرات در گیت (git stash) -In <> we see how to use `--show-signature` to add a validation string to each commit in the `git log` output based on if it was validly signed or not. +دستور `git stash` برای ذخیره موقت کارهای انجام‌نشده (uncommitted) استفاده می‌شود تا بدون نیاز به کامیت کردن کار نیمه‌تمام روی یک شاخه، پوشهٔ کاری خود را پاک‌سازی کنید. -==== git stash +این موضوع عملاً کاملاً در <> پوشش داده شده است. -The `git stash` command is used to temporarily store uncommitted work in order to clean out your working directory without having to commit unfinished work on a branch. +==== ایجاد یا مدیریت برچسب‌ها در گیت (git tag) -This is basically entirely covered in <>. +دستور git tag برای گذاشتن یک نشانهٔ دائمی روی یک نقطهٔ مشخص در تاریخچه کد استفاده می‌شود. عموماً از این برای مواردی مثل انتشارها (ریلیزها) استفاده می‌شود. -==== git tag +این دستور در <> معرفی و با جزئیات توضیح داده شده و در عمل در <> هم از آن استفاده می‌کنیم. -The `git tag` command is used to give a permanent bookmark to a specific point in the code history. -Generally this is used for things like releases. +همچنین نحوهٔ ساخت یک تگ امضا‌شده با GPG با گزینهٔ -s و تأیید آن با گزینهٔ -v در <> پوشش داده شده است. -This command is introduced and covered in detail in <> and we use it in practice in <>. +=== به‌اشتراک‌گذاری و به‌روزرسانی پروژه‌ها (Sharing and Updating Projects) -We also cover how to create a GPG signed tag with the `-s` flag and verify one with the `-v` flag in <>. +دستورات بسیار کمی در Git وجود دارند که از شبکه استفاده می‌کنند؛ تقریباً همهٔ دستورات روی پایگاه دادهٔ محلی عمل می‌کنند. وقتی آمادهٔ اشتراک‌گذاری کارتان یا کشیدن (pull) تغییرات از منابع دیگر هستید، چند دستور وجود دارند که با مخازن راه دور سر و کار دارند. -=== Sharing and Updating Projects +==== دریافت به‌روزرسانی‌ها از مخزن راه‌دور (git fetch) -There are not very many commands in Git that access the network, nearly all of the commands operate on the local database. -When you are ready to share your work or pull changes from elsewhere, there are a handful of commands that deal with remote repositories. +دستور git fetch با یک مخزن راه دور ارتباط برقرار کرده و تمام اطلاعاتی را که در آن مخزن هست ولی در مخزن جاری شما نیست، دانلود کرده و در پایگاه دادهٔ محلی شما ذخیره می‌کند. -==== git fetch +ما ابتدا این دستور را در <> بررسی می‌کنیم و مثال‌های بیشتری از کاربرد آن را در <> می‌بینیم. -The `git fetch` command communicates with a remote repository and fetches down all the information that is in that repository that is not in your current one and stores it in your local database. +همچنین از آن در چند مثال در <> استفاده می‌کنیم. -We first look at this command in <> and we continue to see examples of its use in <>. +ما از آن برای بازیابی یک ارجاع (reference) خاص که خارج از فضای پیش‌فرض است در <> استفاده می‌کنیم و می‌بینیم چگونه از یک bundle فراخوانی (fetch) کنیم در <>. -We also use it in several of the examples in <>. +==== دریافت و ادغام به‌روزرسانی‌ها از مخزن راه‌دور (git pull) -We use it to fetch a single specific reference that is outside of the default space in <> and we see how to fetch from a bundle in <>. +ما refspec‌های بسیار سفارشی را تنظیم می‌کنیم تا git fetch کاری کمی متفاوت از حالت پیش‌فرض انجام دهد در <>. -We set up highly custom refspecs in order to make `git fetch` do something a little different than the default in <>. +دستور git pull اساساً ترکیبی از دو دستور git fetch و git merge است، که در آن گیت از راه دوری را که مشخص می‌کنید می‌گیرد و سپس فوراً سعی می‌کند آن را با شاخه‌ای که رویش هستید ادغام کند. -==== git pull +ما آن را به‌طور مختصر در <> معرفی می‌کنیم و نشان می‌دهیم اگر آن را اجرا کنید چه چیزی را ادغام خواهد کرد در <>. -The `git pull` command is basically a combination of the `git fetch` and `git merge` commands, where Git will fetch from the remote you specify and then immediately try to merge it into the branch you're on. + ما نشان می‌دهیم چگونه می‌توان از آن با یک URL برای یک‌بار کشیدن تغییرات استفاده کرد (نگاه کنید به <>). -We introduce it quickly in <> and show how to see what it will merge if you run it in <>. +در نهایت به‌طور کوتاه اشاره می‌کنیم که می‌توانید از گزینهٔ --verify-signatures برای آن استفاده کنید تا تأیید کنید کمیت‌هایی که می‌کشید با GPG امضا شده‌اند (نگاه کنید به <>). -We also see how to use it to help with rebasing difficulties in <>. +==== ارسال تغییرات به مخزن راه‌دور (git push) -We show how to use it with a URL to pull in changes in a one-off fashion in <>. +دستور git push برای ارتباط با مخزن دیگر، محاسبهٔ تفاوت بین پایگاه‌دادهٔ محلی شما و مخزن راه دور و سپس فشار دادن (منتقل‌کردن) آن تفاوت به مخزن دیگر استفاده می‌شود. +این دستور نیاز به دسترسی نوشتن روی مخزن دیگر دارد و بنابراین معمولاً به‌نوعی احراز هویت می‌شود. -Finally, we very quickly mention that you can use the `--verify-signatures` option to it in order to verify that commits you are pulling have been GPG signed in <>. +ابتدا به دستور git push در <> می‌پردازیم. +در اینجا اصول پایهٔ فرستادن یک شاخه به مخزن راه دور را پوشش می‌دهیم. +در <> به جزئیات بیشتری دربارهٔ فرستادن شاخه‌های مشخص می‌پردازیم و در <> می‌بینیم چگونه شاخه‌های دنبال‌کننده را طوری تنظیم کنیم که به‌طور خودکار برایشان push انجام شود. +در <> از فلگ --delete برای حذف یک شاخه در سرور با استفاده از git push استفاده می‌کنیم. -==== git push +در سراسر <> چندین مثال از استفادهٔ git push برای اشتراک‌گذاری کار روی شاخه‌ها از طریق چند مخزن راه دور می‌بینیم. -The `git push` command is used to communicate with another repository, calculate what your local database has that the remote one does not, and then pushes the difference into the other repository. -It requires write access to the other repository and so normally is authenticated somehow. +می‌بینیم چگونه با گزینهٔ --tags تگ‌هایی را که ساخته‌اید به اشتراک بگذارید (نگاه کنید به <>). -We first look at the `git push` command in <>. -Here we cover the basics of pushing a branch to a remote repository. -In <> we go a little deeper into pushing specific branches and in <> we see how to set up tracking branches to automatically push to. -In <> we use the `--delete` flag to delete a branch on the server with `git push`. +در <> از گزینهٔ --recurse-submodules استفاده می‌کنیم تا بررسی کنیم همهٔ کارهای زیرماژول‌ها منتشر شده‌اند قبل از اینکه سوپرپروژه را push کنیم، که هنگام استفاده از زیرماژول‌ها بسیار مفید است. -Throughout <> we see several examples of using `git push` to share work on branches through multiple remotes. +در <> مختصراً دربارهٔ hook به‌نام pre-push صحبت می‌کنیم، اسکریپتی که می‌توانیم تنظیم کنیم تا قبل از تکمیل push اجرا شود و بررسی کند آیا اجازهٔ push داده شود یا نه. -We see how to use it to share tags that you have made with the `--tags` option in <>. + در نهایت، در <> به فرستادن (push) با یک refspec کامل می‌پردازیم، نه میان‌بُرهای کلی که معمولاً استفاده می‌شوند. این کار به شما کمک می‌کند دقیقاً مشخص کنید چه کاری را می‌خواهید به اشتراک بگذارید. -In <> we use the `--recurse-submodules` option to check that all of our submodules work has been published before pushing the superproject, which can be really helpful when using submodules. +==== مدیریت مخازن راه‌دور (git remote) -In <> we talk briefly about the `pre-push` hook, which is a script we can setup to run before a push completes to verify that it should be allowed to push. +دستور git remote ابزاری برای مدیریت فهرست مخازن راه‌دور (remote) شماست. این دستور به شما اجازه می‌دهد آدرس‌های طولانی را به نام‌های کوتاه مانند «origin» ذخیره کنید تا مجبور نباشید همیشه آن‌ها را تایپ کنید. شما می‌توانید چندین نام از این دست داشته باشید و دستور git remote برای افزودن، تغییر و حذف آن‌ها استفاده می‌شود. -Finally, in <> we look at pushing with a full refspec instead of the general shortcuts that are normally used. -This can help you be very specific about what work you wish to share. +این دستور به‌صورت مفصل در <> پوشش داده شده است، از جمله فهرست‌گیری، افزودن، حذف و تغییر نام مخازن راه‌دور. -==== git remote +این دستور در تقریباً همه فصل‌های بعدی کتاب نیز استفاده می‌شود، اما همیشه در قالب استاندارد git remote add به کار رفته است. -The `git remote` command is a management tool for your record of remote repositories. -It allows you to save long URLs as short handles, such as "`origin`" so you don't have to type them out all the time. -You can have several of these and the `git remote` command is used to add, change and delete them. +==== ایجاد آرشیو از مخزن (git archive) -This command is covered in detail in <>, including listing, adding, removing and renaming them. +دستور git archive برای ایجاد یک فایل آرشیو از یک تصویر (snapshot) خاص از پروژه به کار می‌رود. -It is used in nearly every subsequent chapter in the book too, but always in the standard `git remote add ` format. +ما از git archive برای ساخت یک tarball از پروژه جهت به اشتراک‌گذاری در <> استفاده می‌کنیم. -==== git archive +==== مدیریت زیرماژول‌ها (git submodule) -The `git archive` command is used to create an archive file of a specific snapshot of the project. +دستور git submodule برای مدیریت مخازن خارجی درون یک مخزن عادی به کار می‌رود. این می‌تواند برای کتابخانه‌ها یا انواع دیگر منابع مشترک مفید باشد. دستور submodule دارای چند زیر‌دستور (مثل add، update، sync و غیره) برای مدیریت این منابع است. -We use `git archive` to create a tarball of a project for sharing in <>. +این دستور تنها ذکر شده و به‌طور کامل در <> پوشش داده شده است. -==== git submodule +=== بازرسی و مقایسه (Inspection and Comparison) -The `git submodule` command is used to manage external repositories within a normal repositories. -This could be for libraries or other types of shared resources. -The `submodule` command has several sub-commands (`add`, `update`, `sync`, etc) for managing these resources. +==== نمایش اطلاعات اشیاء گیت (git show) -This command is only mentioned and entirely covered in <>. +دستور git show می‌تواند یک شیء Git را به‌صورت ساده و قابل خواندن برای انسان نمایش دهد. معمولاً از این دستور برای نشان‌دادن اطلاعات یک تگ یا یک commit استفاده می‌کنید. -=== Inspection and Comparison +ما ابتدا از آن برای نمایش اطلاعات تگ‌های Annotated در <> استفاده می‌کنیم. -==== git show +بعداً در <> به‌طور زیاد از آن استفاده می‌کنیم تا commitهایی را که انتخاب‌های مختلف بازبینی (revision selections) به آن‌ها اشاره می‌کنند نشان دهیم. -The `git show` command can show a Git object in a simple and human readable way. -Normally you would use this to show the information about a tag or a commit. +یکی از کارهای جالبی که با git show انجام می‌دهیم در <> است: استخراج محتویات فایل‌های مشخص از مراحل مختلف در طول یک برخورد ادغام (merge conflict). -We first use it to show annotated tag information in <>. +==== خلاصه تاریخچه گیت (git shortlog) -Later we use it quite a bit in <> to show the commits that our various revision selections resolve to. + دستور git shortlog برای خلاصه‌سازی خروجی git log استفاده می‌شود. این دستور بسیاری از همان گزینه‌هایی را می‌پذیرد که git log می‌پذیرد، اما به‌جای فهرست‌کردن تک‌تک کامیت‌ها، خلاصه‌ای از کامیت‌ها را به‌صورت گروه‌بندی‌شده بر اساس نویسنده ارائه می‌دهد. -One of the more interesting things we do with `git show` is in <> to extract specific file contents of various stages during a merge conflict. +نحوه‌ی استفاده از آن برای ساخت یک changelog مرتب را در <> نشان دادیم. -==== git shortlog +==== توضیح نسخه یا نقطه مرجع (git describe) -The `git shortlog` command is used to summarize the output of `git log`. -It will take many of the same options that the `git log` command will but instead of listing out all of the commits it will present a summary of the commits grouped by author. +دستور git describe برای دریافت هر چیزی که به یک کامیت اشاره می‌کند و تولید رشته‌ای نسبتاً خوانا برای انسان و پایدار (تغییر‌نکردنی) استفاده می‌شود. این روش راهی است برای توصیف یک کامیت که به‌اندازه‌ی SHA-1 کامیت بی‌ابهام باشد اما قابل‌فهم‌تر باشد. -We showed how to use it to create a nice changelog in <>. +ما از git describe در <> و <> استفاده می‌کنیم تا رشته‌ای برای نام‌گذاری فایل انتشارمان به‌دست آوریم. -==== git describe +=== عیب‌یابی (Debugging) -The `git describe` command is used to take anything that resolves to a commit and produces a string that is somewhat human-readable and will not change. -It's a way to get a description of a commit that is as unambiguous as a commit SHA-1 but more understandable. +گیت چند دستور دارد که برای کمک به اشکال‌زدایی در کدتان مفیدند. این موارد می‌تواند از پیدا کردن محل معرفی یک تغییر تا یافتن شخصی که آن را معرفی کرده را شامل شود. -We use `git describe` in <> and <> to get a string to name our release file after. +==== یافتن کامیت مشکل‌دار با جستجوی دودویی (git bisect) -=== Debugging +ابزار git bisect یک ابزار اشکال‌زدایی بسیار مفید است که با انجام جستجوی دودویی خودکار، مشخص می‌کند کدام کامیت اولین موردی بوده که باگ یا مشکل را معرفی کرده است. -Git has a couple of commands that are used to help debug an issue in your code. -This ranges from figuring out where something was introduced to figuring out who introduced it. +این ابزار به‌طور کامل در <> پوشش داده شده و فقط در آن بخش ذکر شده است. -==== git bisect +==== نمایش آخرین تغییر‌دهنده هر خط (git blame) -The `git bisect` tool is an incredibly helpful debugging tool used to find which specific commit was the first one to introduce a bug or problem by doing an automatic binary search. +دستور git blame خطوط هر فایل را با نشان‌دادن این‌که آخرین تغییری که هر خط را وارد کرده مربوط به کدام کامیت بوده و چه‌کسی آن کامیت را نوشته است، حاشیه‌نویسی می‌کند. این برای یافتن شخصی که می‌توان از او درباره‌ی بخش خاصی از کدتان سؤال پرسید مفید است. -It is fully covered in <> and is only mentioned in that section. +این موضوع در <> پوشش داده شده و فقط در آن بخش ذکر شده است. -==== git blame +==== جستجوی متنی در مخزن گیت (git grep) -The `git blame` command annotates the lines of any file with which commit was the last one to introduce a change to each line of the file and what person authored that commit. -This is helpful in order to find the person to ask for more information about a specific section of your code. +دستور git grep می‌تواند به شما کمک کند هر رشته یا عبارت منظمی را در هر یک از فایل‌های کد منبعتان، حتی در نسخه‌های قدیمی‌تر پروژه، پیدا کنید. -It is covered in <> and is only mentioned in that section. +این دستور در <> پوشش داده شده و فقط در آن بخش ذکر شده است. -==== git grep +=== اعمال تغییرات به صورت پچ (Patching) -The `git grep` command can help you find any string or regular expression in any of the files in your source code, even older versions of your project. + چند فرمان در گیت بر این مفهوم متمرکز هستند که کمیت‌ها را از منظر تغییراتی که وارد می‌کنند تصور کنیم، گویی که رشتهٔ کمیت‌ها مجموعه‌ای از پَچ‌هاست. این دستورها به شما کمک می‌کنند شاخه‌های خود را به این شیوه مدیریت کنید. -It is covered in <> and is only mentioned in that section. +==== انتخاب و اعمال یک کامیت مشخص (git cherry-pick) -=== Patching +فرمان git cherry-pick برای گرفتن تغییری که در یک کمیت گیت معرفی شده و تلاش برای بازتولید آن به‌عنوان یک کمیت جدید روی شاخه‌ای که هم‌اکنون روی آن هستید کاربرد دارد. این کار زمانی مفید است که بخواهید یک یا دو کمیت را به‌طور جداگانه از یک شاخه بردارید، به‌جای اینکه کل شاخه را که همهٔ تغییرات را می‌آورد، merge کنید. -A few commands in Git are centered around the concept of thinking of commits in terms of the changes they introduce, as though the commit series is a series of patches. -These commands help you manage your branches in this manner. +عمل cherry-pick در بخش <> توضیح داده و نشان داده شده است. -==== git cherry-pick +==== بازپایه‌گذاری (git rebase) -The `git cherry-pick` command is used to take the change introduced in a single Git commit and try to re-introduce it as a new commit on the branch you're currently on. -This can be useful to only take one or two commits from a branch individually rather than merging in the branch which takes all the changes. +فرمان git rebase اساساً یک cherry-pick خودکار است. این فرمان مجموعه‌ای از کمیت‌ها را تعیین کرده و سپس آن‌ها را به‌نوبت و به همان ترتیب در جای دیگری cherry-pick می‌کند. -Cherry picking is described and demonstrated in <>. +بحث rebase به‌طور مفصل در <> آمده است، از جمله مسائل همکاری که در صورت rebase کردن شاخه‌هایی که قبلاً عمومی شده‌اند پیش می‌آید. -==== git rebase +ما در عمل از آن در مثالی برای جدا کردن تاریخچهٔ خود به دو مخزن مجزا در <> استفاده می‌کنیم، و نیز از گزینهٔ --onto بهره می‌بریم. -The `git rebase` command is basically an automated `cherry-pick`. -It determines a series of commits and then cherry-picks them one by one in the same order somewhere else. +در <> با برخورد به یک تعارض merge هنگام rebase روبه‌رو می‌شویم. -Rebasing is covered in detail in <>, including covering the collaborative issues involved with rebasing branches that are already public. +همچنین از rebase در حالت تعاملی/اسکریپتی با گزینهٔ -i در <> استفاده می‌کنیم. -We use it in practice during an example of splitting your history into two separate repositories in <>, using the `--onto` flag as well. +==== برگرداندن تغییرات یک کامیت (git revert) -We go through running into a merge conflict during rebasing in <>. +فرمان git revert عملاً معکوس git cherry-pick است. این فرمان یک کمیت جدید ایجاد می‌کند که دقیقاً مخالف تغییری است که کمیت هدف وارد کرده است، به‌عبارت دیگر آن تغییر را لغو یا برمی‌گرداند. -We also use it in an interactive scripting mode with the `-i` option in <>. +ما از این در <> برای بازگرداندن یک کمیت merge استفاده می‌کنیم. -==== git revert +=== ایمیل (Email) -The `git revert` command is essentially a reverse `git cherry-pick`. -It creates a new commit that applies the exact opposite of the change introduced in the commit you're targeting, essentially undoing or reverting it. +بسیاری از پروژه‌های گیت، از جمله خودِ گیت، به‌طور کامل از طریق فهرست‌های پستی (mailing list) نگهداری می‌شوند. گیت چندین ابزار درونی دارد که این فرآیند را آسان‌تر می‌کند؛ از تولید پَچ‌هایی که بتوانید به‌راحتی ایمیل کنید تا اعمال آن پَچ‌ها از صندوق پستی. -We use this in <> to undo a merge commit. +==== اعمال پچ (git apply) -=== Email +دستور git apply یک پچ ایجاد‌شده با دستور git diff یا حتی با دستور GNU diff را اعمال می‌کند. +این شبیه کاری است که دستور patch انجام می‌دهد با چند تفاوت کوچک. -Many Git projects, including Git itself, are entirely maintained over mailing lists. -Git has a number of tools built into it that help make this process easier, from generating patches you can easily email to applying those patches from an email box. +ما نحوه استفاده از آن و موقعیت‌هایی که ممکن است از آن استفاده کنید را در <> نشان داده‌ایم. -==== git apply +==== اعمال پچ از ایمیل (git am) -The `git apply` command applies a patch created with the `git diff` or even GNU diff command. -It is similar to what the `patch` command might do with a few small differences. +دستور git am برای اعمال پچ‌ها از صندوق ایمیل استفاده می‌شود، به‌طور مشخص صندوق‌هایی با فرمت mbox. +این برای دریافت پچ‌ها از طریق ایمیل و اعمال آسان آن‌ها در پروژه‌تان مفید است. -We demonstrate using it and the circumstances in which you might do so in <>. +ما استفاده و جریان کاری پیرامون git am را در <> پوشش داده‌ایم، از جمله استفاده از گزینه‌های --resolved، -i و -3. -==== git am +همچنین تعدادی هوک وجود دارد که می‌توانید برای کمک به جریان کاری پیرامون git am از آن‌ها استفاده کنید و همهٔ آن‌ها در <> بررسی شده‌اند. -The `git am` command is used to apply patches from an email inbox, specifically one that is mbox formatted. -This is useful for receiving patches over email and applying them to your project easily. +ما همچنین از آن برای اعمال تغییرات فرمت‌شدهٔ پچِ درخواست‌های Pull در گیت‌هاب در <> استفاده می‌کنیم. -We covered usage and workflow around `git am` in <> including using the `--resolved`, `-i` and `-3` options. +==== ایجاد پچ‌ها برای ارسال (git format-patch) -There are also a number of hooks you can use to help with the workflow around `git am` and they are all covered in <>. +دستور `git format-patch` برای تولید مجموعه‌ای از پچ‌ها در فرمت mbox به‌کار می‌رود که می‌توانید آن‌ها را به‌صورت درست فرمت‌شده برای یک فهرست پستی ارسال کنید. -We also use it to apply patch formatted GitHub Pull Request changes in <>. +ما یک مثال از مشارکت در یک پروژه با استفاده از ابزار `git format-patch` را در <> بررسی می‌کنیم.cached -==== git format-patch +==== ارسال پچ از طریق IMAP (git imap-send) -The `git format-patch` command is used to generate a series of patches in mbox format that you can use to send to a mailing list properly formatted. +دستور git imap-send یک صندوق پستی تولیدشده با git format-patch را در یک پوشهٔ پیش‌نویس IMAP آپلود می‌کند. -We go through an example of contributing to a project using the `git format-patch` tool in <>. +ما یک مثال از مشارکت در یک پروژه با ارسال پچ‌ها با ابزار git imap-send را در <> مرور می‌کنیم. -==== git imap-send +==== ارسال پچ از طریق ایمیل (git send-email) -The `git imap-send` command uploads a mailbox generated with `git format-patch` into an IMAP drafts folder. +دستور git send-email برای ارسال پچ‌هایی که با git format-patch تولید شده‌اند از طریق ایمیل استفاده می‌شود. -We go through an example of contributing to a project by sending patches with the `git imap-send` tool in <>. +ما یک مثال از مشارکت در یک پروژه با ارسال پچ‌ها با ابزار git send-email را در <> بررسی می‌کنیم. -==== git send-email +==== درخواست کشش برای مخزن دیگر (git request-pull) -The `git send-email` command is used to send patches that are generated with `git format-patch` over email. + دستور git request-pull فقط برای تولید یک متن نمونه برای ایمیل فرستادن به کسی استفاده می‌شود. +اگر شاخه‌ای روی یک سرور عمومی دارید و می‌خواهید به کسی بگویید چگونه آن تغییرات را ادغام کند بدون اینکه پچ‌ها را از طریق ایمیل بفرستید، می‌توانید این دستور را اجرا کرده و خروجی را برای شخصی که می‌خواهید تغییرات را pull کند ارسال کنید. -We go through an example of contributing to a project by sending patches with the `git send-email` tool in <>. +نحوه استفاده از git request-pull برای تولید پیام pull را در <> نشان داده‌ایم. -==== git request-pull +=== سیستم‌های خارجی (External Systems) -The `git request-pull` command is simply used to generate an example message body to email to someone. -If you have a branch on a public server and want to let someone know how to integrate those changes without sending the patches over email, you can run this command and send the output to the person you want to pull the changes in. +گیت چندین دستور برای یکپارچه‌سازی با سایر سیستم‌های کنترل نسخه در اختیار دارد. -We demonstrate how to use `git request-pull` to generate a pull message in <>. +==== ابزار گیت برای تعامل با Subversion (git svn) -=== External Systems +دستور `git svn` برای ارتباط با سیستم کنترل نسخه Subversion به‌عنوان یک کلاینت استفاده می‌شود. +این به این معناست که می‌توانید از گیت برای checkout گرفتن از یک سرور Subversion و commit کردن به آن استفاده کنید. -Git comes with a few commands to integrate with other version control systems. +این دستور به‌طور جامع در <> پوشش داده شده است. -==== git svn +==== ورود سریع داده‌ها به گیت (git fast-import) -The `git svn` command is used to communicate with the Subversion version control system as a client. -This means you can use Git to checkout from and commit to a Subversion server. +برای سایر سیستم‌های کنترل نسخه یا وارد کردن از تقریباً هر فرمتی، می‌توانید از git fast-import استفاده کنید تا آن فرمت را سریعاً به چیزی که گیت بتواند به‌راحتی ضبط کند نقشه‌برداری کنید. -This command is covered in depth in <>. +این دستور به‌تفصیل در <> بررسی شده است. -==== git fast-import +=== مدیریت (Administration) -For other version control systems or importing from nearly any format, you can use `git fast-import` to quickly map the other format to something Git can easily record. +اگر شما مدیریت یک مخزن گیت را بر عهده دارید یا نیاز دارید چیزی را به‌صورت گسترده‌ای اصلاح کنید، گیت تعدادی دستور مدیریتی ارائه می‌دهد تا به شما کمک کند. -This command is covered in depth in <>. +==== پاکسازی و بهینه‌سازی مخزن (git gc) -=== Administration +دستور `git gc` عملیات "جمع‌آوری زباله" را روی مخزن شما اجرا می‌کند، فایل‌های غیرضروری در پایگاه داده را حذف کرده و فایل‌های باقی‌مانده را در قالبی کارآمدتر بسته‌بندی می‌کند. -If you're administering a Git repository or need to fix something in a big way, Git provides a number of administrative commands to help you out. +این دستور معمولاً به‌صورت پس‌زمینه برای شما اجرا می‌شود، گرچه در صورت تمایل می‌توانید آن را به‌صورت دستی اجرا کنید. +برخی مثال‌ها از این را در <> مرور می‌کنیم. -==== git gc +==== بررسی صحت مخزن (git fsck) -The `git gc` command runs "`garbage collection`" on your repository, removing unnecessary files in your database and packing up the remaining files into a more efficient format. +دستور git fsck برای بررسی پایگاه داده داخلی به‌منظور یافتن مشکلات یا ناسازگاری‌ها استفاده می‌شود. -This command normally runs in the background for you, though you can manually run it if you wish. -We go over some examples of this in <>. +ما فقط یک‌بار به‌سرعت از آن در <> برای جست‌وجوی اشیاء آویزان استفاده می‌کنیم. -==== git fsck +==== نمایش تاریخچه رفرنس‌ها (git reflog) -The `git fsck` command is used to check the internal database for problems or inconsistencies. +دستور git reflog از طریق یک لاگ از مکان‌هایی که همهٔ سرشاخه‌های شاخه‌هایتان در طول کار بوده‌اند عبور می‌کند تا کامیت‌هایی را که ممکن است در اثر بازنویسی تاریخچه از دست داده باشید پیدا کند. -We only quickly use this once in <> to search for dangling objects. +ما این دستور را عمدتاً در <> پوشش می‌دهیم، جایی که استفاده معمولی از آن را نشان می‌دهیم و چگونه می‌توان با استفاده از `git log -g` همان اطلاعات را به صورت خروجی `git log` مشاهده کرد. -==== git reflog +همچنین یک مثال عملی برای بازیابی چنین شاخهٔ گمشده‌ای را در <> بررسی می‌کنیم. -The `git reflog` command goes through a log of where all the heads of your branches have been as you work to find commits you may have lost through rewriting histories. +==== بازنویسی تاریخچه مخزن (git filter-branch) -We cover this command mainly in <>, where we show normal usage to and how to use `git log -g` to view the same information with `git log` output. +دستور `git filter-branch` برای بازنویسی تعداد زیادی کمیت‌ها بر اساس الگوهای معین استفاده می‌شود، مانند حذف یک فایل از همهٔ تاریخچه یا فیلتر کردن کل مخزن به زیرشاخه‌ای واحد برای استخراج یک پروژه. -We also go through a practical example of recovering such a lost branch in <>. +در <> دستور را توضیح می‌دهیم و چندین گزینهٔ مختلف مانند `--commit-filter`، `--subdirectory-filter` و `--tree-filter` را بررسی می‌کنیم. -==== git filter-branch +در <> از آن برای اصلاح مخازن خارجی واردشده استفاده می‌کنیم. -The `git filter-branch` command is used to rewrite loads of commits according to certain patterns, like removing a file everywhere or filtering the entire repository down to a single subdirectory for extracting a project. +=== دستورات سطح پایین گیت (Plumbing Commands) -In <> we explain the command and explore several different options such as `--commit-filter`, `--subdirectory-filter` and `--tree-filter`. +همچنین تعداد قابل توجهی از دستورهای سطح پایین‌تر (plumbing) را که در کتاب با آن‌ها برخورد کردیم، معرفی کرده‌ایم. -In <> we use it to fix up imported external repositories. +اولین موردی که با آن مواجه می‌شویم `ls-remote` در <> است که برای مشاهدهٔ مراجع خام روی سرور از آن استفاده می‌کنیم. -=== Plumbing Commands +از `ls-files` در <>، <> و <> استفاده می‌کنیم تا نگاهی خام‌تر به وضعیت منطقهٔ staging خود بیندازیم. -There were also quite a number of lower level plumbing commands that we encountered in the book. +ما همچنین `rev-parse` را در <> ذکر می‌کنیم تا تقریباً هر رشته‌ای را به یک SHA-1 شیء تبدیل کند. -The first one we encounter is `ls-remote` in <> which we use to look at the raw references on the server. - -We use `ls-files` in <>, <> and <> to take a more raw look at what your staging area looks like. - -We also mention `rev-parse` in <> to take just about any string and turn it into an object SHA-1. - -However, most of the low level plumbing commands we cover are in <>, which is more or less what the chapter is focused on. -We tried to avoid use of them throughout most of the rest of the book. +با این حال، بیشتر دستورهای سطح پایین plumbing که پوشش داده‌ایم در <> قرار دارند، که بیشترِ تمرکز فصل بر آن است. +سعی کردیم در طول بقیهٔ کتاب از به‌کارگیری آن‌ها پرهیز کنیم. \ No newline at end of file From f13c0ec63b60ec1262e7b1636501a275b037db56 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:40:51 +0330 Subject: [PATCH 538/549] translate(sections-overview): translated ch01-getting-started to persian --- ch01-getting-started.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch01-getting-started.asc b/ch01-getting-started.asc index f28c7a21..a0276597 100644 --- a/ch01-getting-started.asc +++ b/ch01-getting-started.asc @@ -1,5 +1,5 @@ [[ch01-getting-started]] -== شروع به کار +== شروع به کار (getting started) این فصل راجع به آغاز به کار با گیت خواهد بود. در آغاز پیرامون تاریخچهٔ ابزارهای کنترل نسخه توضیحاتی خواهیم داد، سپس به چگونگی راه‌اندازی گیت بر روی سیستم‌تان خواهیم پرداخت و در پایان به تنظیم گیت و کار با آن. @@ -19,7 +19,7 @@ include::book/01-introduction/sections/first-time-setup.asc[] include::book/01-introduction/sections/help.asc[] -=== خلاصه +=== خلاصه (summary) حال باید درک پایه‌ای از اینکه گیت چیست و چه تفاوتی با سایر سیستم‌های کنترل نسخه متمرکز قدیمی دارد داشته باشید. همچنین حالا باید یک نسخه کاری از گیت که با هویت شخصی شما تنظیم شده را روی سیستم خود داشته باشید. From b827a757410c99d8b540085edd4689e0dce11fc8 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:41:59 +0330 Subject: [PATCH 539/549] translate(sections-overview): translated ch02-git-basics-chapter to persian --- ch02-git-basics-chapter.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch02-git-basics-chapter.asc b/ch02-git-basics-chapter.asc index 6b4bddbf..8dc0c764 100644 --- a/ch02-git-basics-chapter.asc +++ b/ch02-git-basics-chapter.asc @@ -1,5 +1,5 @@ [[ch02-git-basics-chapter]] -== مقدمات گیت +== مقدمات گیت (git basics chapter) اگر فقط می‌توانید یک فصل از این کتاب را بخوانید تا با گیت آشنا شوید و راه بیوفتید، دقیقاً همینجا است. این فصل شامل تمامی دستورات پایه گیت است که شما در اکثر اوقات از آن‌ها استفاده می‌کنید. @@ -22,7 +22,7 @@ include::book/02-git-basics/sections/tagging.asc[] include::book/02-git-basics/sections/aliases.asc[] -=== خلاصه +=== خلاصه (summary) تا به اینجا، تمام عملیات‌‌های پایه و محلی گیت را می‌توانید انجام دهید -- ساختن یا کلون کردن یک مخزن، اعمال تغییرات، استیج و کامیت کردن آن تغییرات و مشاهده تاریخچه تمام تغییرات اعمال شده روی مخزن. پس از این به خفن‌ترین ویژگی گیت می‌پردازیم: مدل شاخه‌سازی آن‌. From 383e793ad4374027e7e81a32236cbe423f5133c6 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:43:36 +0330 Subject: [PATCH 540/549] translate(sections-overview): translated ch03-git-branching to persian --- ch03-git-branching.asc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ch03-git-branching.asc b/ch03-git-branching.asc index 60d1a193..86452b1e 100644 --- a/ch03-git-branching.asc +++ b/ch03-git-branching.asc @@ -1,16 +1,16 @@ [[ch03-git-branching]] -== Git Branching +== انشعاب‌گیری در گیت (Git Branching) (((branches))) -Nearly every VCS has some form of branching support. -Branching means you diverge from the main line of development and continue to do work without messing with that main line. -In many VCS tools, this is a somewhat expensive process, often requiring you to create a new copy of your source code directory, which can take a long time for large projects. + تقریباً همهٔ سیستم‌های کنترل نسخه نوعی پشتیبانی از شاخه‌بندی دارند. +شاخه‌بندی یعنی از خط اصلی توسعه جدا می‌شوید و به کار ادامه می‌دهید بدون اینکه آن خط اصلی را دست‌کاری کنید. +در بسیاری از ابزارهای کنترل نسخه، این فرایند نسبتاً پرهزینه است و اغلب نیاز دارد یک کپی جدید از پوشهٔ کد منبع خود بسازید که برای پروژه‌های بزرگ ممکن است زمان زیادی ببرد. -Some people refer to Git's branching model as its "`killer feature,`" and it certainly sets Git apart in the VCS community. -Why is it so special? -The way Git branches is incredibly lightweight, making branching operations nearly instantaneous, and switching back and forth between branches generally just as fast. -Unlike many other VCSs, Git encourages workflows that branch and merge often, even multiple times in a day. -Understanding and mastering this feature gives you a powerful and unique tool and can entirely change the way that you develop. +برخی‌ها مدل شاخه‌بندی گیت را «ویژگی قاتل» آن می‌نامند و بی‌شک این ویژگی گیت را در جامعهٔ سیستم‌های کنترل نسخه متمایز می‌کند. +چه چیزی آن را ویژه می‌کند؟ +شیوهٔ کار شاخه‌ها در گیت فوق‌العاده سبک است، بنابراین عملیات شاخه‌بندی تقریباً لحظه‌ای انجام می‌شود و جابه‌جایی بین شاخه‌ها هم عموماً به همان سرعت انجام می‌گیرد. +برخلاف بسیاری از سیستم‌های دیگر، گیت جریان‌های کاری‌ای را تشویق می‌کند که اغلب شاخه می‌زنند و ادغام می‌کنند، حتی چند بار در طول روز. +درک و تسلط بر این قابلیت ابزار قدرتمند و منحصربه‌فردی در اختیار شما می‌گذارد و می‌تواند کل شیوهٔ توسعهٔ شما را تغییر دهد. include::book/03-git-branching/sections/nutshell.asc[] @@ -24,9 +24,9 @@ include::book/03-git-branching/sections/remote-branches.asc[] include::book/03-git-branching/sections/rebasing.asc[] -=== Summary +=== خلاصه (Summary) -We've covered basic branching and merging in Git. -You should feel comfortable creating and switching to new branches, switching between branches and merging local branches together. -You should also be able to share your branches by pushing them to a shared server, working with others on shared branches and rebasing your branches before they are shared. -Next, we'll cover what you'll need to run your own Git repository-hosting server. +ما مباحث پایه‌ای شاخه‌بندی و ادغام در گیت را پوشش داده‌ایم. +باید بتوانید با خیال راحت شاخه‌های جدید بسازید و بین آن‌ها جابه‌جا شوید، بین شاخه‌ها سوییچ کنید و شاخه‌های محلی را با هم ادغام کنید. +همچنین باید قادر باشید شاخه‌های خود را با پوش کردن به سرور مشترک به اشتراک بگذارید، روی شاخه‌های مشترک با دیگران کار کنید و قبل از اشتراک‌گذاری شاخه‌ها آن‌ها را rebase کنید. +در بخش بعدی، آنچه برای راه‌اندازی سرور میزبانی مخزن گیت خود نیاز دارید را بررسی خواهیم کرد. \ No newline at end of file From 8456be277a17c0981ea4e0bffef5088e85aed718 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:44:21 +0330 Subject: [PATCH 541/549] translate(sections-overview): translated ch04-git-on-the-server to persian --- ch04-git-on-the-server.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch04-git-on-the-server.asc b/ch04-git-on-the-server.asc index 8066f61b..6b94c485 100644 --- a/ch04-git-on-the-server.asc +++ b/ch04-git-on-the-server.asc @@ -1,5 +1,5 @@ [[ch04-git-on-the-server]] -== گیت روی سرور +== گیت روی سرور (Git on the server) (((serving repositories))) در این لحظه شما باید قادر باشید که بیشتر وظایف روزمره که برای آنها از گیت استفاده خواهید کرد را انجام دهید. @@ -39,7 +39,7 @@ include::book/04-git-server/sections/gitlab.asc[] include::book/04-git-server/sections/hosted.asc[] -=== خلاصه +=== خلاصه (Summary) شما چندین گزینه برای راه‌اندازی و به کار انداختن یک مخزن ریموت گیت دارید تا با دیگران همکاری کنید یا کارتان را به اشتراک بگذارید. From b97d80e3198f3ce186cbbf256724381d129ec255 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:45:21 +0330 Subject: [PATCH 542/549] translate(sections-overview): translated ch05-distributed-git to persian --- ch05-distributed-git.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch05-distributed-git.asc b/ch05-distributed-git.asc index 1612a2c2..f8c43fc2 100644 --- a/ch05-distributed-git.asc +++ b/ch05-distributed-git.asc @@ -1,5 +1,5 @@ [[ch05-distributed-git]] -== گیت توزیع‌شده +== گیت توزیع‌شده (Distributed git) (((distributed git))) حال که یک مخزن ریموت گیت راه‌اندازی شده به عنوان کانونی برای تمام توسعه‌دهندگان دارید تا کدهایشان را روی آن به اشتراک بگذارند و شما با دستورات پایهٔ گیت در یک روند کاری محلی آشنایی دارید، @@ -15,7 +15,7 @@ include::book/05-distributed-git/sections/contributing.asc[] include::book/05-distributed-git/sections/maintaining.asc[] -=== خلاصه +=== خلاصه (Summary) حال باید در مشارکت کردن در پروژه‌ای که تحت گیت است، همچنین در نگهداری پروژهٔ خودتان یا یکپارچه‌سازی مشارکت‌های دیگر کاربران احساس راحتی کنید. تبریک که اکنون یک توسعه‌دهندهٔ گیت مؤثر هستید. From d9c651fcb4419b2e43b49fe6fed0c4356dec2556 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:47:21 +0330 Subject: [PATCH 543/549] translate(sections-overview): translated ch06-github to persian --- ch06-github.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch06-github.asc b/ch06-github.asc index a666abd1..ef74f663 100644 --- a/ch06-github.asc +++ b/ch06-github.asc @@ -27,7 +27,7 @@ include::book/06-github/sections/4-managing-organization.asc[] include::book/06-github/sections/5-scripting.asc[] -=== خلاصه +=== خلاصه (Summary) حالا شما یک کاربر گیت‌هاب هستید. می‌دانید چطور حساب کاربری بسازید، یک سازمان را مدیریت کنید، مخزن ایجاد کرده و به آن ارسال (push) انجام دهید، در پروژه‌های دیگران مشارکت کنید و مشارکت‌های دیگران را در پروژه‌های خود بپذیرید. در فصل بعد، با ابزارها و نکات پیشرفته‌تری برای مدیریت موقعیت‌های پیچیده آشنا خواهید شد که واقعاً شما را به یک استاد Git تبدیل می‌کنند. \ No newline at end of file From 2c2d1803b5f978d76552c8be1487258a1dab6b27 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:48:54 +0330 Subject: [PATCH 544/549] translate(sections-overview): translated ch07-git-tools to persian --- ch07-git-tools.asc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ch07-git-tools.asc b/ch07-git-tools.asc index 0e7fad55..a7b11133 100644 --- a/ch07-git-tools.asc +++ b/ch07-git-tools.asc @@ -1,10 +1,10 @@ [[ch07-git-tools]] -== Git Tools +== ابزارهای گیت (Git Tools) -By now, you've learned most of the day-to-day commands and workflows that you need to manage or maintain a Git repository for your source code control. -You've accomplished the basic tasks of tracking and committing files, and you've harnessed the power of the staging area and lightweight topic branching and merging. + تا حالا بیشتر فرمان‌ها و جریان‌های کاری روزمره‌ای که برای مدیریت یا نگهداری یک مخزن گیت برای کنترل کد منبع نیاز دارید را یاد گرفته‌اید. +وظایف پایه‌ای ردیابی و ثبت (commit) فایل‌ها را انجام داده‌اید و قدرت منطقهٔ staging و شاخه‌سازی سبک موضوعی و ادغام را به کار گرفته‌اید. -Now you'll explore a number of very powerful things that Git can do that you may not necessarily use on a day-to-day basis but that you may need at some point. +حالا به چند قابلیت بسیار قدرتمند گیت می‌پردازیم که ممکن است لزوماً هر روز از آنها استفاده نکنید، اما ممکن است در مقطعی به آنها نیاز پیدا کنید. include::book/07-git-tools/sections/revision-selection.asc[] @@ -34,9 +34,9 @@ include::book/07-git-tools/sections/replace.asc[] include::book/07-git-tools/sections/credentials.asc[] -=== Summary +=== خلاصه (Summary) -You've seen a number of advanced tools that allow you to manipulate your commits and staging area more precisely. -When you notice issues, you should be able to easily figure out what commit introduced them, when, and by whom. -If you want to use subprojects in your project, you've learned how to accommodate those needs. -At this point, you should be able to do most of the things in Git that you'll need on the command line day to day and feel comfortable doing so. +شما با چند ابزار پیشرفته آشنا شده‌اید که به شما اجازه می‌دهند تا کامیت‌ها و منطقهٔ staging را با دقت بیشتری دستکاری کنید. +وقتی مشکلاتی مشاهده می‌کنید، باید بتوانید به‌راحتی معلوم کنید کدام کامیت آنها را ایجاد کرده، چه زمانی و توسط چه کسی. +اگر بخواهید از زیرپروژه‌ها در پروژه‌تان استفاده کنید، یاد گرفته‌اید چگونه این نیازها را برآورده کنید. +در این مرحله، باید بتوانید بیشتر کارهایی را که روزمره با خط فرمان گیت نیاز دارید انجام دهید و در انجام آنها احساس راحتی کنید. \ No newline at end of file From 448fc622b931c291c5e45dfa25ef209dc2f9e5f5 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:49:36 +0330 Subject: [PATCH 545/549] translate(sections-overview): translated ch08-customizing-git to persian --- ch08-customizing-git.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch08-customizing-git.asc b/ch08-customizing-git.asc index a422cd76..f6214f27 100644 --- a/ch08-customizing-git.asc +++ b/ch08-customizing-git.asc @@ -1,5 +1,5 @@ [[ch08-customizing-git]] -== Customizing Git (سفارشی‌سازی Git) +== سفارشی‌سازی Git (Customizing Git) تا اینجا، اصول اولیه نحوه کار Git و نحوه استفاده از آن را پوشش داده‌ایم و تعدادی ابزار که Git برای استفاده آسان و کارآمد ارائه می‌دهد را معرفی کرده‌ایم. در این فصل، خواهیم دید که چگونه می‌توانید Git را به صورت سفارشی‌تر تنظیم کنید، با معرفی چند تنظیمات پیکربندی مهم و سیستم hook‌ها. با این ابزارها، آسان است که Git را طوری تنظیم کنید که دقیقاً مطابق با نیاز شما، شرکت یا گروه شما عمل کند. @@ -11,6 +11,6 @@ include::book/08-customizing-git/sections/hooks.asc[] include::book/08-customizing-git/sections/policy.asc[] -=== Summary (خلاصه) +=== خلاصه (Summary) ما بیشتر روش‌های اصلی که می‌توانید کلاینت و سرور Git خود را برای بهترین تطابق با جریان کار و پروژه‌هایتان سفارشی کنید پوشش داده‌ایم. شما در مورد انواع مختلف تنظیمات پیکربندی، ویژگی‌های مبتنی بر فایل و hook‌های رویداد یاد گرفته‌اید و یک سرور نمونه برای اجرای سیاست‌ها ساخته‌اید. اکنون باید قادر باشید Git را برای هر جریان کاری که تصور کنید، مناسب کنید. \ No newline at end of file From 93c66c64b5d93cd82bc8fed6bd2e18f78f7cb75a Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:54:19 +0330 Subject: [PATCH 546/549] translate(sections-overview): translated ch09-git-and-other-systems to persian --- ch09-git-and-other-systems.asc | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index af4f2200..5aab00df 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -1,20 +1,20 @@ [[ch09-git-and-other-systems]] -== Git and Other Systems +== گیت و سیستم‌های دیگر (Git and Other Systems) -The world isn't perfect. -Usually, you can't immediately switch every project you come in contact with to Git. -Sometimes you're stuck on a project using another VCS, and wish it was Git. -We'll spend the first part of this chapter learning about ways to use Git as a client when the project you're working on is hosted in a different system. +دنیا کامل نیست. +معمولاً نمی‌توانید بلافاصله هر پروژه‌ای را که با آن مواجه می‌شوید به گیت منتقل کنید. +گاهی روی پروژه‌ای کار می‌کنید که از یک کنترل نسخهٔ دیگر استفاده می‌کند و آرزو می‌کنید ای کاش گیت بود. +در بخش اول این فصل یاد می‌گیریم چگونه وقتی پروژه‌ای که روی آن کار می‌کنید در یک سیستم دیگر میزبانی می‌شود، از گیت به‌عنوان مشتری (client) استفاده کنید. -At some point, you may want to convert your existing project to Git. -The second part of this chapter covers how to migrate your project into Git from several specific systems, as well as a method that will work if no pre-built import tool exists. +در مقطعی ممکن است بخواهید پروژهٔ موجود خود را به گیت تبدیل کنید. +بخش دوم این فصل به نحوهٔ مهاجرت پروژه به گیت از چند سیستم مشخص می‌پردازد، و همچنین روشی را معرفی می‌کند که در صورت نبود ابزار واردکنندهٔ آماده قابل استفاده است. -=== Git as a Client +=== گیت به‌عنوان کلاینت (Git as a Client) (((Git as a client))) -Git provides such a nice experience for developers that many people have figured out how to use it on their workstation, even if the rest of their team is using an entirely different VCS. -There are a number of these adapters, called "`bridges,`" available. -Here we'll cover the ones you're most likely to run into in the wild. +تجربهٔ استفاده از گیت برای توسعه‌دهندگان چنان دلپذیر است که بسیاری توانسته‌اند روی ماشین کاری خود از آن استفاده کنند، حتی اگر بقیهٔ تیم‌شان از یک سیستم کنترل نسخهٔ کاملاً متفاوت استفاده کنند. +چندین این نوع پل‌ها (bridges) وجود دارد. +در اینجا آن‌هایی را پوشش می‌دهیم که بیشترین احتمال مواجهه با آن‌ها را دارید. include::book/09-git-and-other-scms/sections/client-svn.asc[] @@ -23,12 +23,12 @@ include::book/09-git-and-other-scms/sections/client-hg.asc[] include::book/09-git-and-other-scms/sections/client-p4.asc[] [[_migrating]] -=== Migrating to Git +=== مهاجرت به گیت (Migrating to Git) (((Migrating to Git))) -If you have an existing codebase in another VCS but you've decided to start using Git, you must migrate your project one way or another. -This section goes over some importers for common systems, and then demonstrates how to develop your own custom importer. -You'll learn how to import data from several of the bigger professionally used SCM systems, because they make up the majority of users who are switching, and because high-quality tools for them are easy to come by. +اگر کدبیس موجودی در یک سیستم کنترل نسخهٔ دیگر دارید ولی تصمیم گرفته‌اید از گیت استفاده کنید، باید پروژهٔ خود را به‌نوعی مهاجرت دهید. +این بخش برخی واردکننده‌ها (importer) برای سیستم‌های رایج را بررسی می‌کند و سپس نشان می‌دهد چگونه یک واردکنندهٔ سفارشی بسازید. +شما یاد می‌گیرید چگونه داده‌ها را از چند سیستم مدیریت پیکربندی (SCM) بزرگتر که به‌طور حرفه‌ای استفاده می‌شوند وارد کنید، زیرا این‌ها اکثریت کسانی را تشکیل می‌دهند که در حال مهاجرت‌اند و همچنین ابزارهای باکیفیت برای آن‌ها به‌راحتی در دسترس است. include::book/09-git-and-other-scms/sections/import-svn.asc[] @@ -38,7 +38,7 @@ include::book/09-git-and-other-scms/sections/import-p4.asc[] include::book/09-git-and-other-scms/sections/import-custom.asc[] -=== Summary +=== خلاصه (Summary) -You should feel comfortable using Git as a client for other version-control systems, or importing nearly any existing repository into Git without losing data. -In the next chapter, we'll cover the raw internals of Git so you can craft every single byte, if need be. +باید بتوانید با خیال راحت از گیت به‌عنوان مشتری برای سایر سیستم‌های کنترل نسخه استفاده کنید، یا تقریباً هر مخزن موجود را بدون از دست رفتن داده‌ها به گیت وارد کنید. +در فصل بعدی به درونیات خام گیت می‌پردازیم تا در صورت لزوم هر بایت را خودتان بتوانید تنظیم کنید. \ No newline at end of file From d3e505e3ff6ccad5284c9492cd2e0ee1246388f2 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 11:58:33 +0330 Subject: [PATCH 547/549] translate(sections-overview): translated ch10-git-internals to persian --- ch10-git-internals.asc | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/ch10-git-internals.asc b/ch10-git-internals.asc index a82f2fbc..20bab210 100644 --- a/ch10-git-internals.asc +++ b/ch10-git-internals.asc @@ -1,19 +1,19 @@ [[ch10-git-internals]] -== Git Internals +== (Git Internals) -You may have skipped to this chapter from a much earlier chapter, or you may have gotten here after sequentially reading the entire book up to this point -- in either case, this is where we'll go over the inner workings and implementation of Git. -We found that understanding this information was fundamentally important to appreciating how useful and powerful Git is, but others have argued to us that it can be confusing and unnecessarily complex for beginners. -Thus, we've made this discussion the last chapter in the book so you could read it early or later in your learning process. -We leave it up to you to decide. +ممکن است این فصل را مستقیماً از فصلی بسیار قبلی باز کرده باشید، یا اینکه پس از خواندن ترتیبی کل کتاب تا اینجا به آن رسیده‌اید — در هر صورت، اینجا قرار است به سازوکارهای درونی و پیاده‌سازی گیت بپردازیم. +ما دیدیم که فهم این اطلاعات برای درک اهمیت و توانمندی گیت بنیادی است، اما برخی دیگر به ما گفته‌اند که برای مبتدیان می‌تواند گیج‌کننده و بی‌جهت پیچیده باشد. +بنابراین، این بحث را به عنوان آخرین فصل کتاب قرار داده‌ایم تا بتوانید آن را زود یا دیر در روند یادگیری‌تان بخوانید. +تصمیم با شماست. -Now that you're here, let's get started. -First, if it isn't yet clear, Git is fundamentally a content-addressable filesystem with a VCS user interface written on top of it. -You'll learn more about what this means in a bit. +حالا که اینجا هستید، بیایید شروع کنیم. +ابتدا، اگر هنوز برایتان روشن نیست، گیت بنیاداً یک سیستم فایل آدرس‌دهی بر اساس محتوا است که یک رابط کاربری کنترل نسخه (VCS) روی آن قرار گرفته است. +کمی بعد بیشتر در مورد معنای این جمله خواهید آموخت. -In the early days of Git (mostly pre 1.5), the user interface was much more complex because it emphasized this filesystem rather than a polished VCS. -In the last few years, the UI has been refined until it's as clean and easy to use as any system out there; however, the stereotype lingers about the early Git UI that was complex and difficult to learn. +در روزهای نخستین گیت (عمدتاً پیش از نسخهٔ 1.5)، رابط کاربری بسیار پیچیده‌تر بود چون بیشتر آن سیستم فایل را برجسته می‌ساخت تا یک VCS پالایش‌شده. +در چند سال اخیر، رابط کاربری تا حدی تصحیح شده که اکنون به اندازهٔ هر سیستم دیگری تمیز و آسان برای استفاده است؛ با این حال، کلیشهٔ رابط کاربری اولیهٔ گیت که پیچیده و دشوار برای یادگیری بود، همچنان پابرجاست. -The content-addressable filesystem layer is amazingly cool, so we'll cover that first in this chapter; then, you'll learn about the transport mechanisms and the repository maintenance tasks that you may eventually have to deal with. +لایهٔ سیستم فایل آدرس‌دهی‌شده بر اساس محتوا فوق‌العاده جالب است، بنابراین ابتدا آن را در این فصل پوشش می‌دهیم؛ سپس دربارهٔ سازوکارهای انتقال و کارهای نگهداری مخزن که ممکن است نهایتاً با آن‌ها سروکار داشته باشید، خواهید آموخت. include::book/10-git-internals/sections/plumbing-porcelain.asc[] @@ -31,11 +31,11 @@ include::book/10-git-internals/sections/maintenance.asc[] include::book/10-git-internals/sections/environment.asc[] -=== Summary +=== (Summary) -At this point, you should have a pretty good understanding of what Git does in the background and, to some degree, how it's implemented. -This chapter has covered a number of plumbing commands -- commands that are lower level and simpler than the porcelain commands you've learned about in the rest of the book. -Understanding how Git works at a lower level should make it easier to understand why it's doing what it's doing and also to write your own tools and helper scripts to make your specific workflow work for you. +در این مرحله، شما باید درک نسبتاً خوبی از عملکرد داخلی گیت و تا حدودی از نحوه‌ی پیاده‌سازی آن پیدا کرده باشید. +این فصل به تعدادی از دستورات پلومبینگ (plumbing) پرداخته است — دستورات سطح پایین و ساده‌تری نسبت به دستورات پورسلین (porcelain) که در سایر بخش‌های کتاب با آن‌ها آشنا شده‌اید. +درک نحوه‌ی عملکرد گیت در سطح پایین، باعث می‌شود راحت‌تر بفهمید چرا گیت کاری را انجام می‌دهد که انجام می‌دهد و همچنین به شما امکان می‌دهد ابزارها و اسکریپت‌های کمکی مخصوص به جریان کاری خودتان را بنویسید. -Git as a content-addressable filesystem is a very powerful tool that you can easily use as more than just a VCS. -We hope you can use your newfound knowledge of Git internals to implement your own cool application of this technology and feel more comfortable using Git in more advanced ways. +گیت به عنوان یک فایل‌سیستم محتوای-آدرس‌پذیر ابزار بسیار قدرتمندی است که می‌توانید از آن فراتر از یک سیستم کنترل نسخه استفاده کنید. +امیدواریم بتوانید از دانش تازه به‌دست‌آمده در مورد ساختار داخلی گیت برای پیاده‌سازی برنامه‌های خلاقانه‌ی خود بهره ببرید و با استفاده از گیت به روش‌های پیشرفته‌تر احساس راحتی کنید. \ No newline at end of file From 31ac08c01a85543c59944b25a9420e472a1dd143 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 13:05:39 +0330 Subject: [PATCH 548/549] refactor(readme): change readme.md to new format --- README.md | 255 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 195 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index ed5aefc3..be84b9b8 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,197 @@ -

    پروگیت، ویرایش دوم

    -

    به ویرایش دوم کتاب پروگیت (گیت حرفه ای) خوش آمدید

    -
    -

    -همانند ویرایش اول، ویرایش دوم پروگیت هم متن-باز تحت لایسنس «کریتیو کامنز» است. (Creative Commons) -

    -

    -از زمان متن-باز شدن نسخه اول تغییراتی اعمال شده. -ابتدا اینکه برای متن کتاب، ما از مارک‌دان به قالب شگفت‌انگیز اسکی‌داک مهاجرت کرده‌ایم. رفرنس سریع اسکی‌داک را می‌توانید در اینجا پیدا کنید. -

    -

    -ما، همچنین، انتقالی انجام دادیم تا ترجمه‌ها را در مخزن‌های جدایی به جای پوشه‌هایی در مخزن انگلیسی نگه‌داری کنیم. -برای اطلاعات بیشتر به سند ترجمه مراجعه کنید. -

    -

    چگونگی ساختن کتاب

    -

    -شما می‌توانید فایل‌های این کتاب الکترونیک را به طور دستی با اسکی‌داکتر بسازید. -اگر دستورات پیش‌رو را اجرا کنید احتمالاً می‌توانید خروجی‌های اچ‌تی‌ام‌ال، ای-پاب، موبی و پی‌دی‌اف بگیرید: -

    -
    +
    + +# پروگیت، ویرایش دوم +## ترجمه فارسی کتاب Pro Git + +[![GitHub Issues](https://img.shields.io/github/issues/progit/progit2-fa)](https://github.com/progit/progit2-fa/issues) +[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/progit/progit2-fa)](https://github.com/progit/progit2-fa/pulls) + +
    + +
    + +## درباره این پروژه + +به ویرایش دوم کتاب پروگیت (گیت حرفه‌ای) خوش آمدید. این مخزن حاوی ترجمه فارسی کامل کتاب Pro Git است که یکی از جامع‌ترین منابع آموزشی سیستم کنترل نسخه Git محسوب می‌شود. + +**📖 [نسخه آنلاین کتاب را اینجا مطالعه کنید](http://git-scm.com/book/fa/v2)** + +## ویژگی‌ها + +- ✅ ترجمه کامل ویرایش دوم کتاب Pro Git +- 📝 فرمت AsciiDoc برای قابلیت نگهداری بهتر +- 🔄 به‌روزرسانی مداوم محتوا +- 📱 پشتیبانی از خروجی‌های مختلف (HTML، PDF، EPUB، MOBI) +- 🎯 تطبیق کامل با نسخه انگلیسی + +## فهرست مطالب + +- [نحوه ساخت کتاب](#چگونگی-ساختن-کتاب) +- [گزارش مشکلات](#ارجاع-یک-مشکل) +- [مشکلات شناخته شده](#مشکلات-شناخته-شده) +- [نحوه مشارکت](#مشارکت) + +## اطلاعات لایسنس + +همانند ویرایش اول، ویرایش دوم پروگیت نیز متن‌باز تحت لایسنس [Creative Commons](LICENSE) منتشر شده است. + +## تغییرات نسبت به ویرایش اول + +- **فرمت جدید**: مهاجرت از Markdown به فرمت AsciiDoc +- **مخزن جداگانه**: ترجمه‌ها در مخزن‌های مستقل نگهداری می‌شوند +- **بهبود ساختار**: سازماندهی بهتر محتوا و فایل‌ها + +[📋 راهنمای کامل ترجمه](https://github.com/progit/progit2-fa/blob/master/TRANSLATING.md) + +
    +
    + +## چگونگی ساختن کتاب + +### پیش‌نیازها + +برای ساخت کتاب نیاز به ابزارهای زیر دارید: + +- Ruby 2.7 یا بالاتر +- Bundler gem +- Git + +### راهنمای سریع ساخت + +```bash +# نصب وابستگی‌ها $ bundle install + +# ساخت تمام فرمت‌های کتاب $ bundle exec rake book:build -Converting to HTML... - -- HTML output at progit.html -Converting to EPub... - -- Epub output at progit.epub -Converting to Mobi (kf8)... - -- Mobi output at progit.mobi -Converting to PDF... - -- PDF output at progit.pdf -
    -

    ارجاع یک مشکل

    -

    -قبل از ارجاع یک مشکل، لطفاً بررسی کنید که پیشتر مشکل مشابهی در سیستم رهگیری باگ وجود نداشته باشد. -

    -همچنین اگر این مشکل سابقاً روی سایت رسمی گیت مشاهده شده، لطفاً بازنگری کنید که آیا هنوز در این مخزن موجود است یا خیر. -ممکن است پیش از این مشکل اصلاح شده باشد، اما تغییرات هنوز اعمال نشده باشند. -

    -

    مشکل فونت فارسی

    -

    -در بعضی سیستم‌ها ممکن است خروجی پی‌دی‌اف خوانا نباشد و یا مشکلات قالبی (راست‌چین بودن) و... داشته باشد. -پیشنهاد می‌شود که اسکی‌داکتر را بازتنظیم کنید و از فونت‌سازگار استفاده کنید. -

    -با توجه به دشواری بازتنظیمی اسکی‌داکتر ممکن است بخواهید از خروجی اچ‌تی‌ام‌ال استفاده کرده یا در صورت نیاز به پی‌دی‌اف، خروجی اچ‌تی‌ام‌ال را توسط ابزاری مانند مرورگر به پی‌دی‌اف تبدیل کنید. -

    -

    ترجمهٔ ناقص

    -

    -ممکن است ترجمه‌ها پیش‌نویس یا ناقص و یا کلمات یکپارچگی نداشته باشند. این امر ممکن است به دلایل مختلف (محدودیت‌های فنی) اتفاق افتاده باشد. اگر چنین موردی مشاهده کردید و در تودو ذکر نشده بود یا برای -آن ایشوی نظیری وجود نداشت یا آنرا حل کرده و پول ریکوئست درست کنید و یا در ایشوهای به ما یادآوری کنید تا در اسرع وقت آنرا پیگیری کنیم. -

    -به طور کل فایل‌های بالای ۸۰ درصد در فایل استاتوس.جی‌سان کامل تلقی می‌شوند. -فایل‌های ۹۵ درصد ترجمهٔ نهایی شده‌اند و نیازمند بازبینی هستند و فایل‌های ۹۰ درصد پیش‌نویس نهایی هستند. -

    -

    لینک‌های انگلیسی یا ناقص

    -

    -ترجمهٔ لینک‌ها و اتصال آنها کار دشواری است. به همین دلیل این کار در مراحل آخر اصلاح خواهد شد. لطفاً شکیبا باشید. -

    -

    مشارکت

    -

    -اگر مایلید کمک کنید تا تغییری ایجاد شود، لطفاً به راهنمای مشارکت در پروژه مراجعه کنید. -

    +``` + +### خروجی‌های تولید شده + +پس از اجرای دستورات بالا، فایل‌های زیر تولید خواهند شد: + +| فرمت | نام فایل | توضیحات | +|------|----------|---------| +| HTML | `progit.html` | نسخه وب کتاب | +| EPUB | `progit.epub` | مناسب برای e-reader ها | +| MOBI | `progit.mobi` | سازگار با Kindle | +| PDF | `progit.pdf` | نسخه قابل چاپ | + +### ساخت فرمت خاص + +```bash +# فقط HTML +$ bundle exec rake book:build_html + +# فقط PDF +$ bundle exec rake book:build_pdf + +# فقط EPUB +$ bundle exec rake book:build_epub +``` + + +
    + +## گزارش مشکلات + +### قبل از گزارش مشکل + +قبل از ثبت مشکل جدید، لطفاً موارد زیر را بررسی کنید: + +1. **جستجو در مسائل موجود**: ممکن است مشکل شما قبلاً گزارش شده باشد +2. **بررسی سایت اصلی Git**: اگر مشکل روی [git-scm.com](https://git-scm.com/book/en/v2) حل شده، ممکن است در حال به‌روزرسانی باشد +3. **وضعیت ترجمه**: وضعیت فعلی ترجمه را در فایل `status.json` بررسی کنید + +### نحوه گزارش مشکل + +برای گزارش مشکل: + +1. به [صفحه Issues](https://github.com/progit/progit2-fa/issues) بروید +2. روی "New Issue" کلیک کنید +3. عنوان توصیفی و جزئیات کامل ارائه دهید +4. اگر امکان دارد، راه‌حل پیشنهادی ارائه دهید + +## مشکلات شناخته شده + +### مشکل فونت فارسی در PDF + +**علت**: برخی سیستم‌ها فونت‌های فارسی را به درستی پردازش نمی‌کنند + +**راه‌حل‌های پیشنهادی**: +- استفاده از خروجی HTML به جای PDF +- تبدیل HTML به PDF از طریق مرورگر +- بازتنظیم AsciiDoctor با فونت‌های سازگار + +### ترجمه ناقص + +**وضعیت فایل‌ها بر اساس درصد تکمیل**: + +| درصد تکمیل | وضعیت | توضیحات | +|------------|--------|---------| +| 95%+ | نهایی | نیازمند بازبینی نهایی | +| 90-94% | پیش‌نویس نهایی | آماده برای بازبینی | +| 80-89% | کامل | محتوای اصلی تکمیل شده | +| <80% | در حال کار | نیازمند تکمیل | + +### لینک‌های انگلیسی + +ترجمه و بومی‌سازی لینک‌ها در مراحل پایانی پروژه انجام خواهد شد. + +
    +
    + +## مشارکت + +ما از تمام کمک‌ها استقبال می‌کنیم! برای مشارکت در این پروژه روش‌های مختلفی وجود دارد: + +### انواع مشارکت + +#### 🔤 ترجمه +- ترجمه فصل‌های جدید +- بهبود ترجمه‌های موجود +- اصلاح اشتباهات املایی و نگارشی + +#### 📝 بازبینی +- بررسی متن‌های ترجمه شده +- پیشنهاد بهبود در کیفیت ترجمه +- هماهنگی اصطلاحات فنی + +#### 🐛 رفع مشکلات +- گزارش اشکالات +- رفع مشکلات فنی +- بهبود فرآیند ساخت + +### شروع مشارکت + +1. **Fork** کردن مخزن +2. ایجاد شاخه جدید برای تغییرات: + ```bash + git checkout -b feature/my-contribution + ``` +3. اعمال تغییرات و commit +4. Push به مخزن fork شده +5. ایجاد Pull Request + +### راهنماهای مفصل + +- 📖 [راهنمای کامل مشارکت](https://github.com/progit/progit2-fa/blob/master/CONTRIBUTING.md) +- 🌐 [راهنمای ترجمه](https://github.com/progit/progit2-fa/blob/master/TRANSLATING.md) + +### ارتباط با تیم + +برای سوالات و پیشنهادات: +- [GitHub Issues](https://github.com/progit/progit2-fa/issues) +- [GitHub Discussions](https://github.com/progit/progit2-fa/discussions) + +--- + +
    + +**با تشکر از همه مشارکت‌کنندگان** 🙏 + +[مشاهده تمام مشارکت‌کنندگان](https://github.com/progit/progit2-fa/graphs/contributors) + +
    + +
    From b57d39cdfa961bf5a131d9b6bf2cb54f42f91a13 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 27 Sep 2025 13:09:34 +0330 Subject: [PATCH 549/549] refactor(readme): change readme.md to new format --- README.md | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index be84b9b8..dbeb4dfb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@
    # پروگیت، ویرایش دوم + ## ترجمه فارسی کتاب Pro Git [![GitHub Issues](https://img.shields.io/github/issues/progit/progit2-fa)](https://github.com/progit/progit2-fa/issues) @@ -12,7 +13,8 @@ ## درباره این پروژه -به ویرایش دوم کتاب پروگیت (گیت حرفه‌ای) خوش آمدید. این مخزن حاوی ترجمه فارسی کامل کتاب Pro Git است که یکی از جامع‌ترین منابع آموزشی سیستم کنترل نسخه Git محسوب می‌شود. +به ویرایش دوم کتاب پروگیت (گیت حرفه‌ای) خوش آمدید. این مخزن حاوی ترجمه فارسی کامل کتاب Pro Git است که یکی از جامع‌ترین +منابع آموزشی سیستم کنترل نسخه Git محسوب می‌شود. **📖 [نسخه آنلاین کتاب را اینجا مطالعه کنید](http://git-scm.com/book/fa/v2)** @@ -70,12 +72,12 @@ $ bundle exec rake book:build پس از اجرای دستورات بالا، فایل‌های زیر تولید خواهند شد: -| فرمت | نام فایل | توضیحات | -|------|----------|---------| -| HTML | `progit.html` | نسخه وب کتاب | +| فرمت | نام فایل | توضیحات | +|------|---------------|------------------------| +| HTML | `progit.html` | نسخه وب کتاب | | EPUB | `progit.epub` | مناسب برای e-reader ها | -| MOBI | `progit.mobi` | سازگار با Kindle | -| PDF | `progit.pdf` | نسخه قابل چاپ | +| MOBI | `progit.mobi` | سازگار با Kindle | +| PDF | `progit.pdf` | نسخه قابل چاپ | ### ساخت فرمت خاص @@ -100,7 +102,8 @@ $ bundle exec rake book:build_epub قبل از ثبت مشکل جدید، لطفاً موارد زیر را بررسی کنید: 1. **جستجو در مسائل موجود**: ممکن است مشکل شما قبلاً گزارش شده باشد -2. **بررسی سایت اصلی Git**: اگر مشکل روی [git-scm.com](https://git-scm.com/book/en/v2) حل شده، ممکن است در حال به‌روزرسانی باشد +2. **بررسی سایت اصلی Git**: اگر مشکل روی [git-scm.com](https://git-scm.com/book/en/v2) حل شده، ممکن است در حال + به‌روزرسانی باشد 3. **وضعیت ترجمه**: وضعیت فعلی ترجمه را در فایل `status.json` بررسی کنید ### نحوه گزارش مشکل @@ -119,6 +122,7 @@ $ bundle exec rake book:build_epub **علت**: برخی سیستم‌ها فونت‌های فارسی را به درستی پردازش نمی‌کنند **راه‌حل‌های پیشنهادی**: + - استفاده از خروجی HTML به جای PDF - تبدیل HTML به PDF از طریق مرورگر - بازتنظیم AsciiDoctor با فونت‌های سازگار @@ -127,12 +131,12 @@ $ bundle exec rake book:build_epub **وضعیت فایل‌ها بر اساس درصد تکمیل**: -| درصد تکمیل | وضعیت | توضیحات | -|------------|--------|---------| -| 95%+ | نهایی | نیازمند بازبینی نهایی | -| 90-94% | پیش‌نویس نهایی | آماده برای بازبینی | -| 80-89% | کامل | محتوای اصلی تکمیل شده | -| <80% | در حال کار | نیازمند تکمیل | +| درصد تکمیل | وضعیت | توضیحات | +|------------|----------------|-----------------------| +| 95%+ | نهایی | نیازمند بازبینی نهایی | +| 90-94% | پیش‌نویس نهایی | آماده برای بازبینی | +| 80-89% | کامل | محتوای اصلی تکمیل شده | +| <80% | در حال کار | نیازمند تکمیل | ### لینک‌های انگلیسی @@ -148,16 +152,19 @@ $ bundle exec rake book:build_epub ### انواع مشارکت #### 🔤 ترجمه + - ترجمه فصل‌های جدید - بهبود ترجمه‌های موجود - اصلاح اشتباهات املایی و نگارشی #### 📝 بازبینی + - بررسی متن‌های ترجمه شده - پیشنهاد بهبود در کیفیت ترجمه - هماهنگی اصطلاحات فنی #### 🐛 رفع مشکلات + - گزارش اشکالات - رفع مشکلات فنی - بهبود فرآیند ساخت @@ -181,6 +188,7 @@ $ bundle exec rake book:build_epub ### ارتباط با تیم برای سوالات و پیشنهادات: + - [GitHub Issues](https://github.com/progit/progit2-fa/issues) - [GitHub Discussions](https://github.com/progit/progit2-fa/discussions)

    نسخه آنلاین این کتاب را اینجا ببینید. -

  • &j|QG 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

    y8DG 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 I2Za#-AAeOdCjbBd literal 935317 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�mw&rC&SW~Jv8}uq?e980o?0jN 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