You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p>Сега би трябвало да се чувствате комфортно използвайки Git като клиент с други version-control системи или импортирайки почти всяко налично хранилище в Git без да губите данни.
24
+
В следващата глава ще разгледаме механизмите на Git на по-ниско ниво, така че ако е необходимо да можете да пипнете и последната подробност, която искате да настроите.</p>
<p>Функционалността на <code>git rerere</code> е един вид скрита опция.
24
+
Името идва от фразата “reuse recorded resolution” и както името подсказва, позволява ви се да укажете на Git да запомня как сте разрешили даден конфликт така че следващия път, когато той възникне отново — да бъде автоматично разрешен.</p>
25
+
</div>
26
+
<divclass="paragraph">
27
+
<p>Има няколко сценария, когато това може да ви е от помощ.
28
+
Един от примерите е упоменат в документацията и описва ситуация, в която искате да сте сигурни, че продължително съществуващ topic клон ще се слива чисто винаги, но не желаете да имате множество междинни сливащи къмити задръстващи историята ви.
29
+
С разрешен <code>rerere</code>, можете да опитате случайно сливане, да разрешите конфликтите и след това да откажете сливането.
30
+
Ако правите това продължително, тогава финалното сливане би трябвало да е лесно, защото <code>rerere</code> ще свърши корекциите вместо вас.</p>
31
+
</div>
32
+
<divclass="paragraph">
33
+
<p>Същата тактика може да се използва, ако искате да пазите даден клон пребазиран и не желаете да се занимавате с едни и същи конфликти при пребазиране всеки път.
34
+
Или, ако искате да вземете клон, който сте слели и в който сте разрешили много конфликти и след това пожелаете да го пребазирате — най-вероятно не искате да виждате всичките конфликти отново.</p>
35
+
</div>
36
+
<divclass="paragraph">
37
+
<p>Друго приложение на <code>rerere</code> е когато случайно сливате множество развиващи се клонове в едно за тестване както Git проекта прави например.
38
+
Ако тестовете не минават успешно, можете да превъртите назад сливанията и да ги повторите без участието на topic клона, който ги проваля без да трябва да решавате конфликтите отново.</p>
39
+
</div>
40
+
<divclass="paragraph">
41
+
<p>За да активирате <code>rerere</code> функционалността, просто изпълнете:</p>
<p>Можете да я разрешите и за конкретно хранилище създавайки директорията <code>.git/rr-cache</code>, но конфигурационната опция е по-чист начин и позволява глобална настройка.</p>
50
+
</div>
51
+
<divclass="paragraph">
52
+
<p>Нека видим просто пример подобен на предишните.
53
+
Имаме файл <code>hello.rb</code> със съдържание:</p>
<p>Също така (и това няма връзка с <code>rerere</code>), можете да използвате <code>git ls-files -u</code> за да видите конфликтните файлове и техните версии — оригинална, лява и дясна:</p>
<p>Сега можете да разрешите конфликта, така че редът да е <code>puts 'hola mundo'</code> и да пуснете <code>git rerere diff</code> отново, за да видите какво ще бъде запомнено от rerere:</p>
<p>Казано с други думи това означава, че когато Git намери конфликт във файла <code>hello.rb</code>, при който има “hello mundo” от едната страна и “hola world” на другата, той ще го коригира автоматично използвайки “hola mundo”.</p>
169
+
</div>
170
+
<divclass="paragraph">
171
+
<p>Сега можем да маркираме конфликта като разрешен и да къмитнем:</p>
<p>Сега, нека да отменим това сливане и да го пребазираме на върха на <code>master</code> клона.
191
+
Можем да преместим клона назад с <code>git reset</code> както видяхме в <ahref="{{< relurl "book/bg/v2/ch00/_git_reset" >}}">Мистерията на командата Reset</a>.</p>
First, rewinding head to replay your work on top of it...
210
+
Applying: i18n one word
211
+
Using index info to reconstruct a base tree...
212
+
Falling back to patching base and 3-way merge...
213
+
Auto-merging hello.rb
214
+
CONFLICT (content): Merge conflict in hello.rb
215
+
Resolved 'hello.rb' using previous resolution.
216
+
Failed to merge in the changes.
217
+
Patch failed at 0001 i18n one word</code></pre>
218
+
</div>
219
+
</div>
220
+
<divclass="paragraph">
221
+
<p>Сега получихме същия конфликт, който очакваме, но обърнете внимание на реда <code>Resolved FILE using previous resolution</code> в отпечатания изход.
222
+
Ако погледнем файла ще видим, че той вече е коригиран и не съдържа маркери за конфликт.</p>
<p>И така, ако правите много повтарящи се сливания или пък искате да държите topic клон в синхрон с промените на <code>master</code> клона без много излишни сливания, или пък ако често пребазирате — можете да включите <code>rerere</code>, за да си улесните работата.</p>
0 commit comments