-
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 Водоводне команде
2.3 Основе програма Гит - Преглед историје комитова
Преглед историје комитова
Када сте направили неколико комитова, или сте клонирали репозиторијум са постојећом историјом комитова, вероватно ћете хтети да погледате уназад да видите шта се дешавало.
Најосновнији и најмоћнији алат за ово је команда git log
.
Примери који следе користе веома једноставан пројекат који се зове „simplegit”. Да бисте преузели пројекат, извршите:
$ git clone https://github.com/schacon/simplegit-progit
Када покренете git log
команду у овом пројекту, треба да добијете излаз који личи овом:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
Са подразумеваним подешавањима, без аргумената, git log
ће излистати комитове који су направљени у том репозиторијуму у обрнутом хронолошком редоследу — односно, најскорији комит ће се појавити први.
Као што видите, ова команда исписује листу свих комитова са њиховом SHA-1 контролном сумом, ауторовим именом и мејлом, датумом када је написан и комит поруком.
Постоји велики број опција за команду git log
које ће вам помоћи да се прикаже тачно оно што тражите.
Овде ћемо представити неке најпопуларније.
Једна од опција које су од највеће помоћи је -p
или --patch
, која приказује разлику (patch излаз) уведену у сваком комиту.
Можете и да ограничите број приказаних лог уноса, па тако -2
приказује само два последња комита.
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
Ова опција приказује исту информацију с тим што разлика директно следи након сваке ставке.
Ово је веома корисно када се врши преглед кода или да се брзо сазна шта се догодило са кодом након низа комитова које је урадила особа која даје допринос пројекту.
Са git log
можете да употребите и низ опција за скраћење.
На пример, ако желите да видите неке скраћене статистике за сваки комит, можете искористити опцију --stat
:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Као што видите, опција --stat
испод сваког комита исписује листу измењених фајлова, колико је фајлова промењено и колико је линија у тим фајловима додато и обрисано.
На крају исписује и резиме информација.
Још једна веома корисна опција је --pretty
.
Ова опција мења излаз лога у неки формат који није подразумевани.
Припремљено је неколико опција које можете да користите.
Вредност oneline
за ову опцију исписује сваки комит у једну линију, што је веома корисно ако гледате пуно комитова.
Ту су и вредности short
, full
и fuller
које исписују у сличном формату али са мање или више информација, респективно:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
Најзанимљивија вредност опције је format
, која допушта да наведете сопствени формат за излаз лога.
Ово је посебно корисно када генеришете излаз који треба да парсира машина — пошто експлицитно наводите формат, знате да се неће променити када се програм Гит ажурира.
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
Корисне опције за git log --pretty=format
представља листу неких од кориснијих спецификатора које узима format
.
Спецификатор | Опис излаза |
---|---|
|
Хеш комита |
|
Скраћени хеш комита |
|
Хеш стабла |
|
Скраћени хеш стабла |
|
Хешеви родитеља |
|
Скраћени хешеви родитеља |
|
Име аутора |
|
Мејл аутора |
|
Датум аутора (формат поштује |
|
Датум аутора, релативан |
|
Име комитера |
|
Мејл комитера |
|
Датум комитера |
|
Датум комитера, релативан |
|
Наслов |
Можда се питате која је разлика између аутора и комитера. Аутор је особа која је првобитно направила фајл, а комитер је особа која је последња допринела промене. Значи ако пошаљете закрпу пројекту и један од главних чланова је примени, обојица добијате признање — ви као аутор, а главни члан пројекта као комитер. Ову разлику ћемо детаљније размотрити у Дистрибуирани Гит.
Вредности опције online
и format
су посебно корисне са још једном log
опцијом која се зове --graph
.
Ова опција додаје мали ASCII график који приказује вашу грану и историју спајања.
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Add method for getting the current branch
* | 30e367c Timeout code and tests
* | 5a09431 Add timeout protection to grit
* | e1193f8 Support for heads with slashes in them
|/
* d6016bc Require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Ова врста излаза ће постати занимљивија када у следећем поглављу прођемо кроз гранање и спајање.
To су само неке једноставне опције за форматирање излаза команде git log
- има их још пуно.
У Честе опције команде git log
су наведене опције које смо досад прошли, као и неке друге које би могле да буду корисне, уз кратко објашњење о начину на који мењају излаз.
Опција | Опис |
---|---|
|
Показује закрпу која је уведена сваким комитом. |
|
Приказује статистику фајлове измењених у сваком комиту. |
|
Приказује само линију промене/додавања/брисања из --stat команде. |
|
Приказује листу измењених фајлова након информације о комиту. |
|
Приказује листу промењених фајлова из информацију о линијама које су промењене/додате/обрисане. |
|
Приказује само првих неколико слова из SHA-1 контролне суме уместо свих 40. |
|
Приказује датум у релативном формату (на пример, „2 weeks ago”) уместо комплетног формата датума. |
|
Приказује ASCII графикон гране и историје спајања поред лога. |
|
Приказује комитове у алтернативном формату. Међу вредностима опције су oneline, short, full, fuller, и format (где би требало да наведете сопствени формат). |
Ограничавање исписа лога
Поред опција за форматирање излаза, git log
прима и велики број корисних опција за ограничавање — другим речима, опција којима можете задати приказ само једног подскупа комитова.
Већ сте видели једну од њих — опцију -2
, која приказује само последња два комита.
Заправо, можете да укуцате -<n>
, где је n
било који природан број и на тај начин прикажете последњих n
комитова.
У стварности је нећете често користити јер програм Гит подразумевано пајпује сав излаз кроз пејџер тако да ћете излаз лога увек гледати страну по страну.
Међутим, опције које ограничавају време, као што су --since
и --until
, су веома корисне.
На пример, следећа команда враћа листу комитова који су урађени у последње две недеље:
$ git log --since=2.weeks
Ова команда ради са пуно формата — можете да наведете тачан датум као „2008-01-15” или релативни датум као „2 years 1 day 3 minutes ago”.
Листу комитова можете филтрирати и тако да задовољи неки критеријум претраге.
Опција --author
вам омогућава да прикажете комитове само од наведеног аутора, а са --grep
можете тражити кључне речи у комит порукама.
Белешка
|
Можете да задате и више од једне инстанце |
Још један веома користан филтер је -S
опција (која се у жаргону назива Гитова „pickaxe” тј. пијук опција) која узима стринг и показује само комитове који су променили број појављивања тог стринга у коду.
На пример, ако желите да нађете последњи комит који је додао или обрисао референцу на неку одређену функцију, можете да позовете
$ git log -S име_функције
Последња веома корисна опција коју као филтер можете проследити команди git log
је путања.
Ако наведете директоријум или име фајла, излаз лога можете да ограничите само на комитове који су увели измене над тим фајловима.
Ово је увек последња опција и генерално се испред ње стављају две цртице (--
) да би се путање одвојиле од осталих опција:
$ git log -- путања/до/фајла
Опције за ограничавање команде git log
као подсетник приказује неколико ових и неколико других честих опција.
Опција | Опис |
---|---|
|
Приказује само последњих n комитова. |
|
Приказује комитове који су направљени после наведеног датума. |
|
Приказује комитове који су направљени пре наведеног датума. |
|
Приказује само комитове код којих се наведени стринг подудара са именом аутора. |
|
Приказује само комитове код којих наведени стринг подудара са именом комитера. |
|
Приказује само комитове код којих комит порука садржи наведени стринг. |
|
Приказује само комитове који додају или бришу код који се подудара са стрингом. |
На пример, ако желите да видите комитове који су изменили тест фајлове у Гит историји изворног кода, а урадио их је корисник Junio Hamano у октобру 2008 и нису комити спајања, можете да извршите овакву команду:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Од скоро 40.000 комитова у Гит историји изворног кода, ова команда је приказује оних 6 који задовољавају наведене услове.
Савет
|
Спречавање приказа комита спајања
Зависно од процеса рада који се користи у вашем репозиторијуму, може бити да поприличан проценат комита у лог историји представљају комити спајања, који обично не пружају корисне информације.
Ако желите да спречите затрпавање лог историје комитима спајања, једноставно додајте лог опцију |