-
1. Почетак
- 1.1 О контроли верзије
- 1.2 Кратка историја програма Гит
- 1.3 Шта је Гит?
- 1.4 Командна линија
- 1.5 Инсталирање програма Гит
- 1.6 Подешавања за први пут
- 1.7 Тражење помоћи
- 1.8 Резиме
-
2. Основе програма Гит
- 2.1 Прављење Гит репозиторијума
- 2.2 Снимање промена над репозиторијумом
- 2.3 Преглед историје комитова
- 2.4 Опозив
- 2.5 Рад са удаљеним репозиторијумима
- 2.6 Означавање
- 2.7 Гит алијаси
- 2.8 Резиме
-
3. Гранање у програму Гит
- 3.1 Укратко о гранању
- 3.2 Основе гранања и спајања
- 3.3 Управљање гранама
- 3.4 Процеси рада са гранањем
- 3.5 Удаљене гране
- 3.6 Ребазирање
- 3.7 Резиме
-
4. Гит на серверу
- 4.1 Протоколи
- 4.2 Постављање програма Гит на сервер
- 4.3 Генерисање јавног SSH кључа
- 4.4 Подешавање сервера
- 4.5 Гит демон
- 4.6 Паметан HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опције за хостовање које нуде трећа лица
- 4.10 Резиме
-
5. Дистрибуирани Гит
-
6. GitHub
-
7. Гит алати
- 7.1 Избор ревизија
- 7.2 Интерактивно стејџовање
- 7.3 Скривање и чишћење
- 7.4 Потписивање вашег рада
- 7.5 Претрага
- 7.6 Поновно исписивање историје
- 7.7 Демистификовани ресет
- 7.8 Напредно спајање
- 7.9 Rerere
- 7.10 Отклањање грешака са програмом Git
- 7.11 Подмодули
- 7.12 Паковање
- 7.13 Замена
- 7.14 Складиште акредитива
- 7.15 Резиме
-
8. Прилагођавање програма Гит
- 8.1 Конфигурисање програма Гит
- 8.2 Гит атрибути
- 8.3 Гит куке
- 8.4 Пример полисе коју спроводи програм Гит
- 8.5 Резиме
-
9. Гит и остали системи
- 9.1 Гит као клијент
- 9.2 Мигрирање на Гит
- 9.3 Резиме
-
10. Гит изнутра
- 10.1 Водовод и порцелан
- 10.2 Гит објекти
- 10.3 Гит референце
- 10.4 Pack фајлови
- 10.5 Рефспек
- 10.6 Протоколи за пренос
- 10.7 Одржавање и опоравак податак
- 10.8 Променљиве окружења
- 10.9 Резиме
-
A1. Додатак А: Програм Гит у другим окружењима
- A1.1 Графички интерфејси
- A1.2 Гит у Visual Studio
- A1.3 Гит у Visual Studio Code
- A1.4 Гит у IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Гит у Sublime Text
- A1.6 Гит унутар Bash
- A1.7 Гит у Zsh
- A1.8 Гит у Powershell
- A1.9 Резиме
-
A2. Додатак Б: Уграђивање програма Гит у ваше апликације
- A2.1 Гит из командне линије
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Додатак В: Гит команде
- A3.1 Подешавање и конфигурација
- A3.2 Набављање и креирање пројеката
- A3.3 Основно снимање
- A3.4 Гранање и спајање
- A3.5 Дељење и ажурирање пројеката
- A3.6 Инспекција и поређење
- A3.7 Отклањање грешака
- A3.8 Крпљење
- A3.9 Имејл
- A3.10 Спољни системи
- A3.11 Администрација
- A3.12 Водоводне команде
7.2 Гит алати - Интерактивно стејџовање
Интерактивно стејџовање
Програм Git долази са неколико скрипти које олакшавају неке задатке из команде линије.
Овде ћете упознати неколико интерактивних комади које вам могу помоћи да лако састављате своје комитове тако да се у њих укључе само одређене комбинације и делови фајлова.
Ови алати су од изванредне помоћи ако измените гомилу фајлова, па онда одлучите да је боље да се те измене организују у неколико фокусираних комитова, уместо у једном великом запетљаном комиту.
На тај начин можете обезбедити да су ваши комитови логички груписани скупови измена које програмери који раде са вама једноставно могу да провере.
Ако команду git add
извршите са -i
или --interactive
опцијом, програм Гит прелази у режим интерактивне љуске и приказује нешто слично овоме:
$ 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>
Можете видети да вам ова команда приказује доста другачији поглед на ваш стејџ – у основи су то исте информације које добијате са git status
, али мало сажетије и информативније.
Она на левој страни приказује измене које сте поставили на стејџ, а на десној измене које нису на стејџу.
Након тога следи „Commands” одељак са командама који вам омогућава да урадите већи број ствари, као што је стављање и уклањање фајлова са стејџа, постављање делова фајлова на стејџ, додавање фајлова који се не прате и приказ разлике онога што је постављено на стејџ.
Постављање и уклањање фајлова са стејџа
Ако на What now>
одзиву откуцате u
или 2
(за update – ажурирање), скрипта тражи да наведете фајлове које желите да ставите на стејџ:
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>>
Ако желите да фајлове TODO и index.html поставите на стејџ, можете да откуцате бројеве:
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>>
*
поред сваког фајла значи да је фајл изабран са стављање на стејџ.
Ако на Update>>
одзиву не откуцате ништа већ само притиснете ентер, програм Гит уместо вас узима све изабране фајлове и поставља их на стејџ:
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
Сада можете видети да се фајлови TODO и index.html налазе на стејџу и да се фајл simplegit.rb још увек не налази на стејџу.
Ако у овом тренутку желите да фајл TODO уклоните са стејџа, можете употребити опцију r
или 3
(за revert – враћање):
*** 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
Ако поново погледате на ваш Гит статус, видећете да сте фајл TODO уклонили са стејџа:
*** 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
Ако желите да видите разлику онога што сте поставили на стејџ, употребите команду d
или 6
(за diff).
Она вам приказује списак фајлова који се налазе на стејџу, па можете да изаберете оне за које бисте желели да погледате разлику са стејџа.
Ово веома личи на задавање git diff --cached
на командној линији:
*** 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">
Овим основним командама можете користити режим интерактивног додавања који вам омогућава једноставнији рад са стејџом.
Постављање закрпа на стејџ
Постоји могућност да програм Гит на стејџ постави само одређене делове фајлова.
На пример, ако направите две измене у фајлу simplegit.rb, а желите да само једну од њих поставите на стејџ, то ћете веома лако постићи програмом Гит.
На интерактивном одзиву откуцајте p
или 5
(за patch – закрпа).
Програм Git ће вас питати да наведете фајлове ко желите делимично да ставите на стејџ; затим ће за сваки одељак изабраних фајлова да прикаже блокове разлике фајла и питаће вас да ли желите да их поставите на стејџ, један по један:
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,?]?
У овом тренутку имате доста опција.
Ако откуцате ?
приказаће вам се листа ствари које можете да урадите:
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
У општем случају ћете откуцати y
или n
ако желите или нећете да поставите текући блок на стејџ, али помаже и да их за неке фајлове поставите све одједном или да одлуку за дати блок одложите за касније.
Ако део неког фајла поставите на стејџ а остатак остане ван стејџа, имаћете следећи статус:
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 фајла је врло интересантан.
Приказује вам да је неколико линија на стејџу, а неколико није.
Овај фајл сте делимично поставили на стејџ.
У овом тренутку можете да напустите скрипту за интерактивно додавање и извршите команду git commit
којом ћете комитовати фајлове делимично налазе на стејџу.
Да бисте урадили делимично постављање фајла на стејџ, нема потребе да се налазите у режиму интерактивног додавања – исту скрипту можете да покренете употребом git add -p
или git add --patch
на командној линији.
Уз то, режим закрпе можете да користите и за делимично ресетовање фајлова reset --patch
командом, за одјављивање делова фајлова checkout --patch
командом и за сакривање делова фајлова stash save --patch
командом.
Како будемо прелазили на напреднију употребу ових команди, приказаћемо више детаља о свакој од њих.