Skip to content

Commit c1a6a09

Browse files
dschodscho
authored andcommitted
book: update ru
Updated via the `update-book.yml` GitHub workflow.
1 parent 4bd4ba9 commit c1a6a09

File tree

915 files changed

+29457
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

915 files changed

+29457
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
### DO NOT EDIT! Generated by script/update-book2.rb
3+
redirect_to: book/ru/v2
4+
---

external/book/content/book/ru/v2/Git-и-другие-системы-контроля-версий-Git-как-клиент.html

Lines changed: 1989 additions & 0 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
### DO NOT EDIT! Generated by script/update-book2.rb
3+
category: book
4+
section: documentation
5+
subsection: book
6+
sidebar: book
7+
book:
8+
language_code: ru
9+
chapter:
10+
title: Git и другие системы контроля версий
11+
number: 9
12+
section:
13+
title: Заключение
14+
number: 3
15+
cs_number: '9.3'
16+
previous: book/ru/v2/Git-и-другие-системы-контроля-версий-Переход-на-Git
17+
next: book/ru/v2/Git-изнутри-Сантехника-и-Фарфор
18+
title: Git - Заключение
19+
url: "/book/ru/v2/Git-и-другие-системы-контроля-версий-Заключение.html"
20+
---
21+
<h2 id="_заключение_14">Заключение</h2>
22+
<div class="paragraph">
23+
<p>После всего вышесказанного вы должны чувствовать себя уверенно, используя Git как клиент для других систем контроля версий или импортируя практически любой существующий репозиторий в Git без потери данных.
24+
Следующая глава раскроет перед вами внутреннюю механику Git, так что вы будете способны контролировать каждый байт данных, если это потребуется.</p>
25+
</div>
26+
<div id="nav"><a href="{{< previous-section >}}">prev</a> | <a href="{{< next-section >}}">next</a></div>

external/book/content/book/ru/v2/Git-и-другие-системы-контроля-версий-Переход-на-Git.html

Lines changed: 1071 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
---
2+
### DO NOT EDIT! Generated by script/update-book2.rb
3+
category: book
4+
section: documentation
5+
subsection: book
6+
sidebar: book
7+
book:
8+
language_code: ru
9+
chapter:
10+
title: Git изнутри
11+
number: 10
12+
section:
13+
title: Pack-файлы
14+
number: 4
15+
cs_number: '10.4'
16+
previous: book/ru/v2/Git-изнутри-Ссылки-в-Git
17+
next: book/ru/v2/Git-изнутри-Спецификации-ссылок
18+
title: Git - Pack-файлы
19+
url: "/book/ru/v2/Git-изнутри-Pack-файлы.html"
20+
---
21+
<h2 id="_pack_файлы">Pack-файлы</h2>
22+
<div class="paragraph">
23+
<p>Если вы следовали всем инструкциям из примеров предыдущего раздела, то теперь ваш тестовый репозиторий должен содержать 11 объектов: 4 блоба, 3 дерева, 3 коммита и один тег:</p>
24+
</div>
25+
<div class="listingblock">
26+
<div class="content">
27+
<pre class="highlight"><code class="language-console" data-lang="console">$ find .git/objects -type f
28+
.git/objects/01/55eb4229851634a0f03eb265b69f5a2d56f341 # tree 2
29+
.git/objects/1a/410efbd13591db07496601ebc7a059dd55cfe9 # commit 3
30+
.git/objects/1f/7a7a472abf3dd9643fd615f6da379c4acb3e3a # test.txt v2
31+
.git/objects/3c/4e9cd789d88d8d89c1073707c3585e41b0e614 # tree 3
32+
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt v1
33+
.git/objects/95/85191f37f7b0fb9444f35a9bf50de191beadc2 # tag
34+
.git/objects/ca/c0cab538b970a37ea1e769cbbde608743bc96d # commit 2
35+
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4 # 'test content'
36+
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # tree 1
37+
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt
38+
.git/objects/fd/f4fc3344e67ab068f836878b6c4951e3b15f3d # commit 1</code></pre>
39+
</div>
40+
</div>
41+
<div class="paragraph">
42+
<p>Git использует zlib для сжатия содержимого этих файлов; к тому же у нас не так много данных, поэтому все эти файлы вместе занимают всего 925 байт.
43+
Для того, чтобы продемонстрировать одну интересную особенность Git, добавим файл побольше.
44+
Добавим файл <code>repo.rb</code> из библиотеки Grit — он занимает примерно 22 Кб:</p>
45+
</div>
46+
<div class="listingblock">
47+
<div class="content">
48+
<pre class="highlight"><code class="language-console" data-lang="console">$ curl https://raw.githubusercontent.com/mojombo/grit/master/lib/grit/repo.rb &gt; repo.rb
49+
$ git checkout master
50+
$ git add repo.rb
51+
$ git commit -m 'Create repo.rb'
52+
[master 484a592] Create repo.rb
53+
3 files changed, 709 insertions(+), 2 deletions(-)
54+
delete mode 100644 bak/test.txt
55+
create mode 100644 repo.rb
56+
rewrite test.txt (100%)</code></pre>
57+
</div>
58+
</div>
59+
<div class="paragraph">
60+
<p>Если посмотреть на полученное дерево, мы увидим значение SHA-1 блоба для файла <code>repo.rb</code>:</p>
61+
</div>
62+
<div class="listingblock">
63+
<div class="content">
64+
<pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file -p master^{tree}
65+
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
66+
100644 blob 033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 repo.rb
67+
100644 blob e3f094f522629ae358806b17daf78246c27c007b test.txt</code></pre>
68+
</div>
69+
</div>
70+
<div class="paragraph">
71+
<p>Посмотрим, сколько этот объект занимает места на диске, используя <code>git cat-file</code>:</p>
72+
</div>
73+
<div class="listingblock">
74+
<div class="content">
75+
<pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file -s 033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5
76+
22044</code></pre>
77+
</div>
78+
</div>
79+
<div class="paragraph">
80+
<p>Теперь немного изменим этот файл и посмотрим на результат:</p>
81+
</div>
82+
<div class="listingblock">
83+
<div class="content">
84+
<pre class="highlight"><code class="language-console" data-lang="console">$ echo '# testing' &gt;&gt; repo.rb
85+
$ git commit -am 'Modify repo.rb a bit'
86+
[master 2431da6] Modify repo.rb a bit
87+
1 file changed, 1 insertion(+)</code></pre>
88+
</div>
89+
</div>
90+
<div class="paragraph">
91+
<p>Взглянув на дерево, полученное в результате коммита, мы увидим любопытную вещь:</p>
92+
</div>
93+
<div class="listingblock">
94+
<div class="content">
95+
<pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file -p master^{tree}
96+
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
97+
100644 blob b042a60ef7dff760008df33cee372b945b6e884e repo.rb
98+
100644 blob e3f094f522629ae358806b17daf78246c27c007b test.txt</code></pre>
99+
</div>
100+
</div>
101+
<div class="paragraph">
102+
<p>Теперь файлу <code>repo.rb</code> соответствует совершенно другой блоб; это означает, что после добавления всего одной единственной строки в конец 400-строчного файла, Git сохранит новый контент в отдельный объект:</p>
103+
</div>
104+
<div class="listingblock">
105+
<div class="content">
106+
<pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file -s b042a60ef7dff760008df33cee372b945b6e884e
107+
22054</code></pre>
108+
</div>
109+
</div>
110+
<div class="paragraph">
111+
<p>Итак, мы имеем два практически одинаковых объекта, занимающих по 22 Кб на диске (в сжатом виде — приблизительно 7 Кб каждый).
112+
Было бы здорово, если бы Git сохранял только один объект целиком, а другой как разницу между ним и первым объектом.</p>
113+
</div>
114+
<div class="paragraph">
115+
<p>Оказывается, Git так и делает.
116+
Первоначальный формат для сохранения объектов в Git называется «рыхлым» форматом (loose format).
117+
Однако, время от времени Git упаковывает несколько таких объектов в один pack-файл для сохранения места на диске и повышения эффективности.
118+
Это происходит, когда «рыхлых» объектов становится слишком много, а также при ручном вызове <code>git gc</code> или отправке изменений на удалённый сервер.
119+
Чтобы посмотреть, как происходит упаковка, можно выполнить команду <code>git gc</code>:</p>
120+
</div>
121+
<div class="listingblock">
122+
<div class="content">
123+
<pre class="highlight"><code class="language-console" data-lang="console">$ git gc
124+
Counting objects: 18, done.
125+
Delta compression using up to 8 threads.
126+
Compressing objects: 100% (14/14), done.
127+
Writing objects: 100% (18/18), done.
128+
Total 18 (delta 3), reused 0 (delta 0)</code></pre>
129+
</div>
130+
</div>
131+
<div class="paragraph">
132+
<p>Если заглянуть в каталог с объектами, то можно обнаружить, что большинство объектов исчезло, зато появились два новых файла:</p>
133+
</div>
134+
<div class="listingblock">
135+
<div class="content">
136+
<pre class="highlight"><code class="language-console" data-lang="console">$ find .git/objects -type f
137+
.git/objects/bd/9dbf5aae1a3862dd1526723246b20206e5fc37
138+
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
139+
.git/objects/info/packs
140+
.git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.idx
141+
.git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.pack</code></pre>
142+
</div>
143+
</div>
144+
<div class="paragraph">
145+
<p>Оставшиеся объекты — это блобы, на которые не указывает ни один коммит; в нашем случае это созданные ранее объекты, содержащие строки «what is up, doc?» и «test content».
146+
В силу того, что ни в одном коммите данные файлы не присутствуют, они считаются «висячими» и в pack-файл не включаются.</p>
147+
</div>
148+
<div class="paragraph">
149+
<p>Остальные файлы — это pack-файл и его индекс.
150+
Pack-файл — это файл, в котором теперь находится содержимое всех удалённых объектов.
151+
Индекс — это файл, в котором записаны смещения для быстрого доступа к содержимому прежних объектов.
152+
Упаковка данных положительно повлияла на общий размер файлов: если до вызова команды <code>gc</code> в сжатом виде они занимали примерно 15 Кб, то pack-файл занимает всего 7 Кб.
153+
За счёт упаковки объектов мы только что освободили как минимум половину занимаемого дискового пространства!</p>
154+
</div>
155+
<div class="paragraph">
156+
<p>Как Git это делает?
157+
При упаковке Git ищет похожие по имени и размеру файлы и сохраняет только разницу между соседними версиями.
158+
Можно заглянуть в pack-файл чтобы понять, какие действия выполняются при сжатии.
159+
Для просмотра содержимого упакованного файла существует служебная команда <code>git verify-pack</code>:</p>
160+
</div>
161+
<div class="listingblock">
162+
<div class="content">
163+
<pre class="highlight"><code class="language-console" data-lang="console">$ git verify-pack -v .git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.idx
164+
2431da676938450a4d72e260db3bf7b0f587bbc1 commit 223 155 12
165+
69bcdaff5328278ab1c0812ce0e07fa7d26a96d7 commit 214 152 167
166+
80d02664cb23ed55b226516648c7ad5d0a3deb90 commit 214 145 319
167+
43168a18b7613d1281e5560855a83eb8fde3d687 commit 213 146 464
168+
092917823486a802e94d727c820a9024e14a1fc2 commit 214 146 610
169+
702470739ce72005e2edff522fde85d52a65df9b commit 165 118 756
170+
d368d0ac0678cbe6cce505be58126d3526706e54 tag 130 122 874
171+
fe879577cb8cffcdf25441725141e310dd7d239b tree 136 136 996
172+
d8329fc1cc938780ffdd9f94e0d364e0ea74f579 tree 36 46 1132
173+
deef2e1b793907545e50a2ea2ddb5ba6c58c4506 tree 136 136 1178
174+
d982c7cb2c2a972ee391a85da481fc1f9127a01d tree 6 17 1314 1 \
175+
deef2e1b793907545e50a2ea2ddb5ba6c58c4506
176+
3c4e9cd789d88d8d89c1073707c3585e41b0e614 tree 8 19 1331 1 \
177+
deef2e1b793907545e50a2ea2ddb5ba6c58c4506
178+
0155eb4229851634a0f03eb265b69f5a2d56f341 tree 71 76 1350
179+
83baae61804e65cc73a7201a7252750c76066a30 blob 10 19 1426
180+
fa49b077972391ad58037050f2a75f74e3671e92 blob 9 18 1445
181+
b042a60ef7dff760008df33cee372b945b6e884e blob 22054 5799 1463
182+
033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 blob 9 20 7262 1 \
183+
b042a60ef7dff760008df33cee372b945b6e884e
184+
1f7a7a472abf3dd9643fd615f6da379c4acb3e3a blob 10 19 7282
185+
non delta: 15 objects
186+
chain length = 1: 3 objects
187+
.git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.pack: ok</code></pre>
188+
</div>
189+
</div>
190+
<div class="paragraph">
191+
<p>Здесь блоб <code>033b4</code>, который, как мы помним, был первой версией файла <code>repo.rb</code>, ссылается на блоб <code>b042a</code>, который хранит вторую его версию.
192+
Третья колонка в выводе — это размер содержимого объекта в pack-файле; как видите, <code>b042a</code> занимает 22 Кб, а <code>033b4</code> — всего 9 байт.
193+
Что интересно, вторая версия файла сохраняется «как есть», а первая — в виде дельты: ведь скорее всего вам понадобится быстрый доступ к самым последним версиям файла.</p>
194+
</div>
195+
<div class="paragraph">
196+
<p>Также здорово, что переупаковку можно выполнять в любое время.
197+
Время от времени Git будет выполнять её автоматически, чтобы сэкономить место на диске, но всегда можно инициировать упаковку вручную используя <code>git gc</code>.</p>
198+
</div>
199+
<div id="nav"><a href="{{< previous-section >}}">prev</a> | <a href="{{< next-section >}}">next</a></div>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
### DO NOT EDIT! Generated by script/update-book2.rb
3+
category: book
4+
section: documentation
5+
subsection: book
6+
sidebar: book
7+
book:
8+
language_code: ru
9+
chapter:
10+
title: Git изнутри
11+
number: 10
12+
section:
13+
title: Заключение
14+
number: 9
15+
cs_number: '10.9'
16+
previous: book/ru/v2/Git-изнутри-Переменные-окружения
17+
next: book/ru/v2/Приложение-A:-Git-в-других-окружениях-Графические-интерфейсы
18+
title: Git - Заключение
19+
url: "/book/ru/v2/Git-изнутри-Заключение.html"
20+
---
21+
<h2 id="_заключение_16">Заключение</h2>
22+
<div class="paragraph">
23+
<p>Теперь вы довольно хорошо понимаете, что Git делает за кулисами и, в некоторой степени, как он устроен.
24+
В данной главе мы рассмотрели несколько служебных команд — более низкоуровневых и простых, чем обычные пользовательские команды, описанные в остальной части книги.
25+
Понимание принципов работы Git на более низком уровне поможет вам лучше понять его работу в целом и даст возможность написать собственные утилиты и сценарии для организации специфического процесса работы с Git.</p>
26+
</div>
27+
<div class="paragraph">
28+
<p>Git как контентно-адресуемая файловая система — очень мощный инструмент, который можно использовать как нечто большее, чем просто систему контроля версий.
29+
Надеемся, полученное знание внутренней реализации Git поможет вам написать своё крутое приложение, использующее эти технологии, и позволит вам чувствовать себя свободнее с Git даже в продвинутых вещах.</p>
30+
</div>
31+
<div id="nav"><a href="{{< previous-section >}}">prev</a> | <a href="{{< next-section >}}">next</a></div>

0 commit comments

Comments
 (0)