Git
Chapters ▾ 2nd Edition

7.2 Git Alətləri - Interaktiv Səhnələşdirmə

Interaktiv Səhnələşdirmə

Bu bölmədə, yalnız müəyyən kombinasiyalar və faylların hissələrini daxil etməyi commit etməyə kömək edə biləcək bir neçə interaktiv Git əmrlərinə baxacaqsınız. Bu alətlər bir sıra faylları geniş şəkildə dəyişdirsəniz, o dəyişikliklərin bir böyük qarışıqlıq yerinə daha çox diqqət mərkəzinə düşməsini istəməyinizə qərar verməyiniz daha yararlıdır. Bu sayədə verdiyiniz tapşırıqların məntiqi olaraq ayrı bir dəyişiklik olduğunu və sizinlə işləyən tərtibatçılar tərəfindən asanlıqla nəzərdən keçiriləcəyinə əmin ola bilərsiniz.

-i və ya --interactive seçimi ilə git add tətbiq etsəniz, Git bu kimi bir şey göstərərək interaktiv shell moda girir:

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now>

Görə bilərsiniz ki, bu əmr sizə yayımlandığınız ərazidən daha çox fərqli bir mənzərəni göstərir - əsasən, git status ilə əldə etdiyiniz eyni, lakin bir az daha qısa və məlumatlıdır. Solda hazırladığınız dəyişiklikləri və sağdakı sabit olmayan dəyişiklikləri sadalayır.

Bundan sonra sənədlərin qurulması və ləğv edilməsi, faylların hissələrinin qurulması, yığılmamış sənədlərin əlavə edilməsi və hazırlanmışların fərqlərini göstərmək kimi bir sıra işləri görməyə imkan verən bir “Commands” bölməsi gəlir.

Staging və Unstaging Fayllar

What now> yerində u və ya 2 (yeniləmə üçün) yazsanız, hansı sənədləri səhnələşdirmək istədiyinizi soruşursunuz:

What now> u
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

TODOindex.html fayllarını səhnələşdirmək üçün nömrələri yaza bilərsiniz:

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Hər bir sənədin yanında olan * sənədin səhnəyə qoyulması üçün seçildiyini bildirir. Update>> sorğusuna heç bir şey yazmadan sonra Enter düyməsini bassanız, Git seçilmiş bir şeyi götürür və sizin üçün mərhələləndirir:

Update>>
updated 2 paths

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

İndi TODOindex.html fayllarının səhnəyə qoyulduğunu və simplegit.rb faylının hələ də işləmədiyini görə bilərsiniz. Bu anda TODO faylını çıxartmaq istəyirsinizsə, r və ya 3 (geri dönüş üçün) seçimini istifadə edirsiniz:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> 1
           staged     unstaged path
* 1:        +0/-1      nothing TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path

Git statusunuza yenidən baxaraq TODO faylını açmadığınızı görə bilərsiniz:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> s
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

Hazırladığınız şeyin fərqini görmək üçün d və ya 6 (fərq üçün) əmrindən istifadə edə bilərsiniz. Bu əhnələşdirilmiş sənədlərinizin siyahısını göstərir və mərhələli fərqi görmək istədiklərini seçə bilərsiniz. Bu, əmr sətrində git diff --cached göstərməyə çox bənzəyir:

*** Commands ***
  1: [s]tatus     2: [u]pdate      3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff        7: [q]uit       8: [h]elp
What now> d
           staged     unstaged path
  1:        +1/-1      nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder

 <p id="out">...</p>

-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>

 <script type="text/javascript">

Bu əsas əmrlərlə quruluş sahənizi bir az daha asan həll etmək üçün interaktiv əlavə rejimi istifadə edə bilərsiniz.

Staging Patch-lar

Git’in müəyyən hissə sənədlərini səhnələşdirməsi də mümkündür qalanlarının deyil. Məsələn, simplegit.rb faylınıza iki dəyişiklik etsəniz və onlardan birini digərinə deyil, digərinə düzəltmək istəyirsinizsə, Git-də bunu etmək çox asandır. Əvvəlki hissədə izah edilən eyni interaktiv istəkdən, p və ya 5 (patch üçün) yazın. Git sizə hansı sənədləri qismən səhnələşdirmək istədiyinizi soruşacaq; sonra, seçilmiş faylların hər bölməsi üçün fərqlənən faylı göstərəcək və bunları bir-bir düzəltmək istəyəcəyinizi soruşacaq:

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
   end

   def log(treeish = 'master')
-    command("git log -n 25 #{treeish}")
+    command("git log -n 30 #{treeish}")
   end

   def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?

Bu nöqtədə bir çox seçiminiz var. Yazaraq ? edə biləcəyiniz işlərin siyahısını görə bilərsiniz:

Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

Ümumiyyətlə,Hər bir parçanı səhnələşdirmək istəsəniz,y və ya n yazacaqsınız, ancaq hamısını müəyyən fayllarda yerləşdirmək və ya bir qədər sonra bir qərarı atmaq da faydalı ola bilər. Faylın bir hissəsini düzəldib başqa bir hissəsini maneəsiz qoyarsanız, status çıxışınız belə olacaq:

What now> 1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:        +1/-1      nothing index.html
  3:        +1/-1        +4/-0 lib/simplegit.rb

Simplegit.rb faylının vəziyyəti maraqlıdır. Bu, bir neçə sətin səhnələndiyini və bir neçə sətrin səhnələnmədiyini göstərir. Bu faylı qismən səhnələşdirdiniz. Bu anda, interaktiv əlavə skriptdən çıxa və qismən mərhələli faylları düzəltmək üçün git commit işlədə bilərsiniz.

Qismən fayl quruluşunu etmək üçün interaktiv əlavə rejimində olmağınıza ehtiyac yoxdur - əmr sətrində git add -p və ya git add --patch istifadə edərək eyni skriptə başlaya bilərsiniz.

Bundan əlavə, git checkout --patch əmri ilə faylların hissələrini yoxlamaq üçün və`git stash save --patch` ilə faylların hissələrini zədələmək üçün git reset --patch əmri ilə faylları qismən sıfırlamaq üçün istifadə edə bilərsiniz. Bu əmrlərin daha qabaqcıl istifadəsinə keçdikcə bunların hər biri haqqında daha ətraflı məlumat əldə edəcəyik.