-
1. Иш бошланиши
- 1.1 Талқинларни бошқариш ҳақида
- 1.2 Git нинг қисқача тарихи
- 1.3 Git асоси
- 1.4 Командалар сатри
- 1.5 Git ни ўрнатиш
- 1.6 Git да биринчи созлашлар
- 1.7 Қандай ёрдам олиш мумкин?
- 1.8 Хулосалар
-
2. Git асослари
-
3. Git да тармоқланиш
-
4. Git серверда
- 4.1 The Protocols
- 4.2 Getting Git on a Server
- 4.3 Sizning SSH ochiq (public) kalitingizni generatsiyalash
- 4.4 Setting Up the Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Third Party Hosted Options
- 4.10 Хулосалар
-
5. Distributed Git
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Summary
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Qism modullar (Submodule)
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 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 Summary
-
A1. Appendix A: Git in Other Environments
- 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 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- 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
ни бажаринг. 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
бўлиб, у ҳар бир киритилган фиксирлашларга бириктирилган дельтани (фарқ/diff) кўрсатади.
Сиз шунингдек -2
ни охирги 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
\ No newline at end of file
Ушбу параметр ўша – ўша маълумотларни кўрсатади ва қўшимча сифатида ҳар бир фиксирлашдан сўнг бевосита кўрсатиладиган киритилган ўзгаришларни кўрсатади.
Бу кодни текшириш ёки ҳамкасбингиз томонидан киритилган қатор фиксирлашлари оқибатида нима бўлганини тез кўриб чиқишда жуда қулайдир.
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
параметри ҳар бир фиксирлашлар остида ўзгартирилган файллар рўйҳатини, сонини шунингдек ушбу файллардаги қўшилган ва олиб ташланган сатрларни ҳам кўрсатаябди.
У шунингдек охирида жами маълумотларни ҳам чиқараябди.
Бошқа яна ҳақиқатдан ҳам фойдалироқ бўлган параметр бу --pretty
.
У қайдларни чиқариш форматини ўзгартиришга имкон беради.
Сиз учун тегишли бўлган аввалдан ўрнатилган бир қанча вариантлар мавжуд.
oneline
параметри ҳар бир фиксирлашларни бир қаторда кўрсатиш учун хизмат қилади ва бу имконият сизга жуда кўп фиксирлашларни кўраётганингизда қўл келади.
Бунга қўшимча тарзида short
, full
ва fuller
параметрлари амалда чиқариш форматини ўзгартирмасдан параметрларга мос ҳолда камроқ ёки кўпроқ қисмларни чиқаришга имкон беради:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Янада қизиқарли параметр бу format
. У сизга қайдларни ўз форматингизда чиқариш учун хизмат қилади.
Бу асосан сиз қайдларни автоматик тарзда ажратиб (parsing) ҳисобот тайёрлашни хоҳлаган вақтда фойда беради, чунки аниқ форматни берганлигингиз сабабли 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
git log --pretty=format
кўп ишлатиладиган параметрлар жадвалда форматнинг кўпроқ фойдали бўлган параметрлар рўйҳати келтирилган.
Параметр | Чиқарилувчи маълумот изоҳи |
---|---|
|
Фиксирлаш хеши |
|
Фиксирлашнинг қисқартирилган хеши |
|
Дарахт хеши |
|
Дарахт қисқартирилган хеши |
|
Аждодлар фиксирлашлари хеши |
|
Аждодлар фиксирлашлари қисқартирилган хеши |
|
Муаллиф номи |
|
Муаллиф электрон почта қутиси |
|
Муаллиф санаси (формат --date= параметрига мос келади) |
|
Муаллиф санаси, нисбатан (мас. "2 ой олдин") |
|
Фиксирловчи номи |
|
Фиксирловчи почта қутиси |
|
Фиксирловчи санаси |
|
Фиксирловчи санаси, нисбатан |
|
Шарҳлар |
Сизни муаллиф ва фиксирловчи орасидаги фарқ қизиқтириши мумкин. Муаллиф бу – бошидан ишни бошлаган одам бўлса, фиксировчи бу – шундан сўнг ишни қабул қилган одам. Шунинг учун агар проектга сиз патч юборсангиз ва яратувчилардан бири ушбу патчни қўлласа иккиларингиз ҳам сиз – муаллиф сифатида, яратучи – фиксирловчи тарзида унутилмайсизлар. Биз ушбу фарқни сал кейинроқ Distributed Git бўлимда кўриб ўтамиз.
oneline ва format параметрлари log
командасининг бошқа --graph
параметри билан ҳам ишлатилади.
Бу параметр тармоқланиш ва бирлашиш тарихини кўрсатувчи ASCII графни қўшади. Шулардан бирини бизнинг Grit лойиҳамиз омбори нусхаси учун кўришимиз мумкин:
$ 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
ни чиқаришдаги форматлашнинг энг содда параметрларини кўрдик, улар бунданда кўпроқ. .
git log
учун барча параметрлар жадвал log командасининг биз томондан кўриб ўтилган ва бошқа фойдали параметрларини таъсир кўрсатиш изоҳи билан ўзида мужассамлаштирган.
Параметр | Чиқарилувчи маълумот изоҳи |
---|---|
|
Ҳар бир фиксирлаш билан киритилган патч (фарқ/diff)ни чиқаради. |
|
Ҳар бир фиксирлашдаги ўзгартирилган файллар бўйича статистикани намойиш этади. |
|
--stat командасидаги фақат changed/insertions/deletions ларни намойиш этади. |
|
Ҳар бир фиксирлашдан кейинги ўзгартирилган файлларни рўйҳатини намойиш этади. |
|
қўшишлар/ўзгартиришлар/ўчиришлар каби маълумотлар билан биргаликда файллар рўйҳатини чиқаради. |
|
Назорат йиғиндиси SHA-1 нинг 40 та белгисини ўрнига биринчи бир нечта белгисини чиқаради. |
|
Санани тўлиқ формати ўрнига нисбат форматида чиқаради (масалан, “2 ҳафта олдин”) |
|
Қайдни чиқариш вақтида у билан ёнма-ён тармоқланиш ва бирлашиш тарихини ASCII графини чиқаради. |
|
Фиксирлашларни “алтернатив” форматда чиқаради. Параметрлар oneline, short, full, fuller ва format ларни ўз ичига олади(сиз ўзингизни шахсий форматингизни кўрсатишингиз мумкин). |
log командасини маълумотларини чиқаришини чегаралаш
Чиқариш форматининг опцияларидан ташқари git log
чегараловчи бир қанча фойдали параметрларга ҳам эга. Яъни ушбу параметрлар фиксирлашларни маълум бир қисмини намойиш этиш учун хизмат қилади.
Сиз бундай параметрлардан бирини кўрдингиз у -2
параметри бўлиб, энг охирги иккита фиксирлашни кўриш учун хизмат қилди.
Аслида сиз n
та фиксирлашларни кўриш учун `-<n>`ни беришингиз мумкин.
Амалиётда сизга буни тез-тез қўллашга имкон бўлмаслиги мумкин чунки, одатда Git канал (pipe) орқали барча чиқаришларни саҳифаловчига (pager) жўнатади ва бунинг оқибатида сиз фақат битта саҳифани кўра оласиз.
Чиқаришда вақт бўйича чегараловчи --since
ва --until
каби параметрлардан фойдаланиш ҳам мумкин.
Масалан, навбатдаги команда охирги икки ҳафта ичида бажарилган фиксирлашларни кўрсатади:
$ git log --since=2.weeks
Бундай команда кўп форматлар билан ишлай олади, жумладан сиз аниқ бир вақтни "2008-01-15"
ёки нисбат вақтни "2 years 1 day 3 minutes ago"
каби кўрсатишингиз ҳам мумкин.
Сиз шунингдек қидириш мезонларини киритиб, фиксирлашлар рўйҳатини саралашингиз мумкин.
--author
опцияси муаллиф бўйича саралашга хизмат қилади, --grep
опцияси ҳабарларни калит сўз бўйича қидиришни таъминлайди.
(Билиш жоизки, агар сиз author ва grep опцияларини ҳам кўрсатсангиз у ҳолда биринчи ёки иккинчи мезонга мос келадиган барча фиксирлашлар рўйҳатини кўришингиз мумкин бўлади. Биринчи ва иккинчи мезонга мос келадиган фиксирлашлар рўйҳатини олишни истасангиз --all-match
опциясини қўшишингизга тўғри келади.)
Бошқа ёрдами тегиши мумкин бўлган ёрдамчи фильтр бу -S
параметри бўлиб, у фақат матнларни олади ва киритилган ўзгаришлар, кодга қўшилган ёки коддан ўчирилган матнларнинг фиксирлашларини намойиш этади. Масалан, агар сиз махсус функцияга мурожаатни кодга қўшилган ёки коддан олиб ташланганини ўзида ташкил этган охирги фиксирлашни кўрмоқчи бўлсангиз сиз қуйидагини чақиришингиз керак:
$ git log -Sfunction_name
Охиргиси ҳақиқатдан ҳам фойдали фильтр-опция у git log
учун йўлдир.
Каталог номи ёки файл номини кўрсатиб сиз log ни ичидаги фиксирлашлардан кўрсатилган файлларга ўзгаришлар киритганларини ажратиб оласиз.
Ушбу опция ҳар доим охирида келтирилади ва бошқа опциялардан йўлни ажратиш мақсадида иккита минус (--
) орқали ажратилади.
git log
командасида маълумотларни чиқаришни чегаралаш параметрлари жадвалда маълумот учун кўп қўлланиладиган опциялар рўйҳати келтирилган.
Параметр | Изоҳ |
---|---|
|
Охирги n фиксирлашларни кўрсатиш |
|
Кўрсатилган санадан кейин кўрсатилган муаллиф томонидан бажарилган фиксирлашларни олиш. |
|
Кўрсатилган санагача бўлган фиксирлашларни олиш. |
|
Муаллифи кўрсатилган сатрга мос фиксирлашларни олиш. |
|
Фиксирловчиси кўрсатилган санага мос бўлган фиксирлашларнни олиш. |
|
Кўрсатилган матнни ўзида мужассамлаштирган фақат фиксирлашларни кўрсатади. |
|
Кўрсатилган сатр кодга қўшилган ёки коддан олиб ташланган фиксирлашларнигина кўрсатади. |
Масалан, агар сиз 2008 йил октябрда Junio Hamano томонидан бажарилган ва бирлаштирилмаган синов файлларига киритилган ўзгаришлар фиксирлашларини Git тарихидан кўрмоқчи бўлсангиз сиз қуйидаги каби йўл тутишингиз мумкин:
$ 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
Git тарихидаги тахминан 40 000 га яқин фиксирлашлардан команда берилган мезонларга мосининг атиги 6 тасини ажратиб берди.