-
1. Почеток
- 1.1 За верзиска контрола
- 1.2 Кратка историја на Git
- 1.3 Основи на Гит
- 1.4 Командната линија
- 1.5 Инсталирање на Git
- 1.6 First-Time Git Setup
- 1.7 Getting Help
- 1.8 Заклучок
-
2. Основите на Git
-
3. Гранење во Git
- 3.1 Гранење објаснето
- 3.2 Основно разгранување и спојување
- 3.3 Branch Management
- 3.4 Работни процеси
- 3.5 Далечински гранки
- 3.6 Ребаза
- 3.7 Заклучок
-
4. Git на Сервер
- 4.1 Протоколите
- 4.2 Добивање на Git на сервер
- 4.3 Генерирање на вашиот SSH јавен клуч
- 4.4 Поставување на серверот
- 4.5 Гит демон
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опции за домаќини на трети лица
- 4.10 Заклучок
-
5. Дистрибуиран Git
- 5.1 Дистрибуирани работни процеси
- 5.2 Придонес кон проект
- 5.3 Приватен мал тим
- 5.4 Одржување на проект
- 5.5 Заклучок
-
6. GitHub
-
7. Git Алатки
- 7.1 Revision Selection
- 7.2 Интерактивно стажирање
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Напредно спојување
- 7.9 Rerere
- 7.10 Дебагирање со Git
- 7.11 Submodules
- 7.12 Збивање
- 7.13 Заменување
- 7.14 Складирање на ингеренции
- 7.15 Заклучок
-
8. Персонализација на Git
- 8.1 Git Configuration
- 8.2 Git Атрибути
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Заклучок
-
9. Git и други системи
- 9.1 Git како Клиент
- 9.2 Мигрирање кон Git
- 9.3 Заклучок
-
10. Внатрешноста на Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Заклучок
-
A1. Appendix A: Git во други околини
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Заклучок
-
A2. Appendix B: Вметнување на Git во вашите апликации
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Appendix C: Git команди
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.3 Основите на Git - Прикажување на историјата на извршување
Прикажување на историјата на извршување
Откако ќе создадете неколку обврски, или ако сте го клонирале складиштето со постоечка историја на извршена, најверојатно ќе сакате да се вратите назад за да видите што се случило.
Најосновна и моќна алатка за ова е командата 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
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
Стандардно, без аргументи, git log
ги наведува извршените обврски направени во тој репозиториум во обратен хронолошки редослед - односно, најновите залози се појавуваат прво.
Како што можете да видите, оваа команда ги прикажува сите извршени со SHA-1 контролната сума, името на авторот и е-поштата, датумот напишан и пораката за извршување.
Голем број и различни опции за командата git log
се достапни за да ви го покажат токму она што го барате.
Еве, ќе ви покажеме некои од најпопуларните.
Една од покорисни опции е -p
или` --patch`, што ја покажува разликата (patch output) воведена во секоја заложба.
Исто така, можете да го ограничите бројот на прикажаните записи на дневникот, како што се употребува -2
за да се прикажат само последните две записи.
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the 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
removed 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
changed the 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
removed 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
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Како што можете да видите, опцијата --stat
отпечатоци под секој извршен запис го наведува списокот на изменети датотеки, колку датотеки се променети и колку линии во тие датотеки се додадени и отстранети.
Исто така, на крајот го става резимето на информациите.
Друга навистина корисна опција е -трично
.
Оваа опција го менува излезот на дневникот во формати различни од стандардните.
Неколку пред-изградени опции се достапни за вас.
Опцијата online
опција го печати секое извршување на една линија, што е корисно ако барате многу обврски.
Покрај тоа, опциите кратки
,` full` и fuller
го прикажуваат излезот во приближно ист формат, но со помалку или повеќе информации, соодветно:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Најинтересната опција е format
, која ви овозможува да го наведете вашиот сопствен излез формат.
Ова е особено корисно кога генерирате излез за парсирање на машината - затоа што експлицитно го специфицирате формат, знаете дека нема да се промени со надградби на Git:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
Useful options for git log --pretty=format
набројува некои од покорисни опции кои "format" ги зема.
Option | Description of Output |
---|---|
|
Commit hash |
|
Abbreviated commit hash |
|
Tree hash |
|
Abbreviated tree hash |
|
Parent hashes |
|
Abbreviated parent hashes |
|
Author name |
|
Author email |
|
Author date (format respects the --date=option) |
|
Author date, relative |
|
Committer name |
|
Committer email |
|
Committer date |
|
Committer date, relative |
|
Subject |
Може да се прашувате што е разликата помеѓу author и committer. Авторот е лицето кое првично го напишало делото, а комисионерот е лицето кое последно ја применило работата. Значи, ако испратите во печ за проект и еден од клучните членови го примени крперот, и двајцата добиете кредит - вие како автор, и суштински член како обврска. Оваа разлика ќе ја покриеме малку повеќе во << ch05-distributed-git >>.
Опциите 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 Added a 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
Овој тип на излез ќе стане поинтересен како што ќе поминеме низ разгранување и спојување во следното поглавје.
Тоа се само некои едноставни опции за форматирање на излез кон git log
- има многу повеќе.
Common options to git log
ги набројува опциите што ги опфативме досега, како и некои други заеднички опции за форматирање кои можат да бидат корисни, заедно со тоа како тие го менуваат излезот на командата за најавување.
Option | Description |
---|---|
|
Show the patch introduced with each commit. |
|
Show statistics for files modified in each commit. |
|
Display only the changed/insertions/deletions line from the --stat command. |
|
Show the list of files modified after the commit information. |
|
Show the list of files affected with added/modified/deleted information as well. |
|
Show only the first few characters of the SHA-1 checksum instead of all 40. |
|
Display the date in a relative format (for example, “2 weeks ago”) instead of using the full date format. |
|
Display an ASCII graph of the branch and merge history beside the log output. |
|
Show commits in an alternate format. Options include oneline, short, full, fuller, and format (where you specify your own format). |
|
Shorthand for |
Ограничување на излезот од дневникот
Во прилог на опциите за форматирање на излез, git log
зема голем број корисни ограничувачки опции - т.е. опции кои ви овозможуваат да прикажете само подмножество на извршувања.
Сте виделе една таква опција веќе - опцијата -2
, која ги прикажува само последните две обврски.
Всушност, можете да направите - <n>
, каде што n
е цел број за прикажување на последниот` n` извршува.
Во реалноста, мала е веројатноста дека ќе го користите толку често, бидејќи Git стандардно ги цевнува сите излезници преку пејџер, така што ќе видите само една страница од излезот од дневникот во исто време.
Сепак, опциите за ограничување на времето, како што се --since
и` --until` се многу корисни.
На пример, оваа команда ја добива листата на обврски направени во последните две недели:
$ git log --since=2.weeks
Оваа команда работи со многу формати - можете да наведете одреден датум како "2008-01-15" `, или релативен датум, како што се "2 years 1 day 3 minutes ago".
Можете исто така да ја филтрирате листата за да извршите кои што одговараат на некои критериуми за пребарување.
Опцијата -author' ви овозможува да филтрирате одреден автор, а опцијата
--grep` ви овозможува да пребарувате клучни зборови во пораките за извршување.
Можете да наведете повеќе од една инстанца на --author
и` --grep` критериумите за пребарување, кои
ќе го ограничи излезот на commit за да изврши кои се совпаѓаат со any од моделите --author
и any
од --grep
обрасците; сепак, додавањето на опцијата --all-match
дополнително го ограничува излезот на
само оние кои се обврзуваат што одговараат на all --grep
обрасците.
Друг навистина корисен филтер е опцијата -S
(колоквијално се нарекува опција за` pickaxe` на Git), која зема низа и покажува само оние кои се обврзаа дека го смени бројот на појавувања на тој стринг.
На пример, ако сакавте да ја пронајдете последната обврска која додаде или отстрани референца за одредена функција, можете да повикате:
$ git log -S function_name
Последна навистина корисна опција да помине на "git log" како филтер е патека.
Ако наведете име на директориум или име на датотека, можете да го ограничите излезот на дневникот за да се изврши, што воведе промена во тие датотеки.
Ова е секогаш последната опција и обично му претходат двојни цртички (-
) за да се одделат патеките од опциите.
Во Options to limit the output of git log
ние ќе ги наведеме овие и неколку други општи опции за вашата референца.
Option | Description |
---|---|
|
Show only the last n commits |
|
Limit the commits to those made after the specified date. |
|
Limit the commits to those made before the specified date. |
|
Only show commits in which the author entry matches the specified string. |
|
Only show commits in which the committer entry matches the specified string. |
|
Only show commits with a commit message containing the string |
|
Only show commits adding or removing code matching the string |
На пример, ако сакате да видите кој извршува модифицирање на тест-датотеки во историјата на изворен код на Git, извршени од Junio Hamano во месец октомври 2008 година и не се спојуваат, може да извршите нешто слично:
$ git log --pretty="%h - %s" --author=gitster --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 извршува во историјата на изворниот код на Git, оваа команда ги прикажува 6-те кои се совпаѓаат со тие критериуми.
Во зависност од работниот тек кој се користи во вашето складиште, можно е дека голем процент од обврските во вашата историја на дневници се само спојувања, кои обично не се многу информативни. За да се спречи прикажувањето на спојувањето, се извршува пренатрупување на историјата на дневникот, едноставно додадете опција за запис "-no-merges".