-
1. Başlanğıc
- 1.1 Versiyaya Nəzarət Haqqında
- 1.2 Git’in Qısa Hekayəsi
- 1.3 Git Nədir?
- 1.4 Əmr Sətiri
- 1.5 Git’i Quraşdırmaq
- 1.6 İlk Dəfə Git Quraşdırması
- 1.7 Kömək Almaq
- 1.8 Qısa Məzmun
-
2. Git’in Əsasları
-
3. Git’də Branch
- 3.1 Nutshell’də Branch’lar
- 3.2 Sadə Branching və Birləşdirmə
- 3.3 Branch İdarəedilməsi
- 3.4 Branching İş Axınları
- 3.5 Uzaq Branch’lar
- 3.6 Rebasing
- 3.7 Qısa Məzmun
-
4. Server’də Git
- 4.1 Protokollar
- 4.2 Serverdə Git Əldə Etmək
- 4.3 Sizin öz SSH Public Key’nizi yaratmaq
- 4.4 Server qurmaq
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Tərəf Seçimləri
- 4.10 Qısa Məzmun
-
5. Paylanmış Git
-
6. GitHub
-
7. Git Alətləri
- 7.1 Reviziya Seçimi
- 7.2 Interaktiv Səhnələşdirmə
- 7.3 Stashing və Təmizləmə
- 7.4 İşinizin İmzalanması
- 7.5 Axtarış
- 7.6 Tarixi Yenidən Yazmaq
- 7.7 Reset Demystified
- 7.8 İnkişaf etmiş Birləşmə
- 7.9 Rerere
- 7.10 Git ilə Debugging
- 7.11 Alt Modullar
- 7.12 Bundling
- 7.13 Dəyişdirmək
- 7.14 Etibarlı Yaddaş
- 7.15 Qısa Məzmun
-
8. Git’i Fərdiləşdirmək
- 8.1 Git Konfiqurasiyası
- 8.2 Git Atributları
- 8.3 Git Hook’ları
- 8.4 Git-Enforced Siyasət Nümunəsi
- 8.5 Qısa Məzmun
-
9. Git və Digər Sistemlər
- 9.1 Git Müştəri kimi
- 9.2 Git’ə Miqrasiya
- 9.3 Qısa Məzmun
-
10. Git’in Daxili İşləri
- 10.1 Plumbing və Porcelain
- 10.2 Git Obyektləri
- 10.3 Git Referansları
- 10.4 Packfile’lar
- 10.5 Refspec
- 10.6 Transfer Protokolları
- 10.7 Maintenance və Məlumatların Bərpası
- 10.8 Mühit Dəyişənləri
- 10.9 Qısa Məzmun
-
A1. Appendix A: Digər Mühitlərdə Git
- A1.1 Qrafik interfeyslər
- A1.2 Visual Studio’da Git
- A1.3 Visual Studio Code’da Git
- A1.4 Eclipse’də Git
- A1.5 Sublime Text’də Git
- A1.6 Bash’da Git
- A1.7 Zsh’də Git
- A1.8 PowerShell’də Git
- A1.9 Qısa Məzmun
-
A2. Appendix B: Proqramlara Git Daxil Etmək
- A2.1 Əmr-sətri Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Git Əmrləri
- A3.1 Quraşdırma və Konfiqurasiya
- A3.2 Layihələrin Alınması və Yaradılması
- A3.3 Sadə Snapshotting
- A3.4 Branching və Birləşmə
- A3.5 Layihələrin Paylaşılması və Yenilənməsi
- A3.6 Yoxlama və Müqayisə
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-poçt
- A3.10 Xarici Sistemlər
- A3.11 İdarəetmə
- A3.12 Plumbing Əmrləri
2.3 Git’in Əsasları - Commit Tarixçəsinə Baxış
Commit Tarixçəsinə Baxış
Bir neçə əmr yaratdıqdan və ya mövcud bir commit tarixçəsi olan bir deponu klonlaşdırdıqdan sonra, yəqin ki, baş verənləri görmək üçün geri baxmaq istərdiniz. Bunu etmək üçün ən əsas və güclü vasitə git log
əmridir.
Bu nümunələrdə simplegit
adlı çox sadə bir layihədən istifadə olunur.
Layihəni əldə etmək üçün:
$ git clone https://github.com/schacon/simplegit-progit
Bu layihədə git log
əmrini işlətdiyiniz zaman görünən belə bir nəticə əldə etməlisiniz:
$ 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
Default olaraq, heç bir arqument olmadan, git log
həmin depoda commitlənən əmrləri tərs xronoloji qaydada sadalayır; yəni ən son tapşırıqlar ilk olaraq göstərilir.
Gördüyünüz kimi, bu əmr hər bir commiti özünün SHA-1 çeki, müəllifin adı və e-poçtu, yazılmış tarixi və commit mesajı ilə sadalayır.
git log
əmrində çox sayda və müxtəlif seçimlər istədiyinizi tam olaraq göstərmək üçün mövcuddur.
Daha faydalı seçimlərdən biri hər əməldə təqdim olunan fərqi (patch çıxışı) göstərən -p
və ya --patch
-dır.
Yalnız son iki giriş göstərmək üçün -2
istifadə kimi göstərilən girişlərinin sayını məhdudlaşdıra bilərsiniz.
$ 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
Bu seçim hər girişin ardınca bir fərq ilə eyni məlumatı göstərir. Kodun yoxlanılması və ya bir əməkdaşın əlavə etdiyi bir sıra müddətdə baş verənlərə tez baxmaq üçün çox faydalıdır.
git log
ilə bir sıra ümumiləşdirmə variantlarından da istifadə edə bilərsiniz.
Məsələn, hər bir əməl üçün bəzi qısaldılmış statistikanı görmək istəyirsinizsə, --stat
seçimindən istifadə edə bilərsiniz:
$ 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
seçimi hər bir commit girişində dəyişdirilmiş faylların siyahısını, neçə faylın dəyişdirildiyini və həmin sənədlərdə neçə sətir əlavə olunduğunu və silindiyini görə bilərsiniz. Və bununla yanaşı məlumatın xülasəsini də sonunda qoyur.
Başqa bir həqiqətən faydalı seçim - --pretty
-dır.
Bu seçim log çıxışını standartdan başqa formatlara dəyişdirir.
İstifadəniz üçün bir neçə əvvəlcədən qurulmuş seçim mövcuddur. Onlayn seçim hər bir commiti bir sətirdə yazdırır, bu çox sayda commitə baxdığınızda daha faydalı olacaqdır. Bundan əlavə, qısa
, dolğun
və daha dolğun
variantlar çıxarışı təxminən eyni formatda göstərir, lakin müvafiq olaraq daha az və ya daha çox məlumatla:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
Ən maraqlı seçim, öz giriş-çıxış formatını təyin etməyə imkan verən format
-dır. Bu, maşın analizi üçün çıxış hazırlayarkən xüsusilə faydalıdır - formatı dəqiq müəyyənləşdirdiyiniz üçün bilirsiniz ki, Git yeniləmələri ilə dəyişmir:
$ 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 üçün faydalı seçimlər - Useful specifiers for git log --pretty=format
, formatın qəbul etdiyi daha faydalı variantların bəzilərini sadalayır.
Specifier | 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 və committer arasındakı fərqin nə olduğunu bilmək istəyirsiniz. Deməli müəllif əsəri əvvəlcə yazan şəxsdir, komissiyaçı isə əsəri son dəfə tətbiq etmiş şəxsdir. Beləliklə, bir layihəyə bir patch göndərsəniz və əsas üzvlərdən biri patch-ı tətbiq edərsə, bu halda ikiniz də kredit alırsınız - müəllif, komitənin üzvü də.
Bu fərqliliyi paylanmış Git-də bir az daha geniş şəkildə əhatə edəcəyik.
oneline
və format
seçimləri --graph
adlı başqa bir log
seçimi ilə xüsusilə faydalıdır. Bu seçim filialınızı və birləşmə tarixinizi göstərən gözəl bir kiçik ASCII qrafikini əlavə edir:
$ 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
Növbəti fəsildə budaqlamaq və birləşmə yolu ilə olduqda bu cür çıxış daha maraqlı olacaq.
Bunlar günlük çıxarmaq üçün yalnız sadə çıxış formatı git log
-dur və orada daha çox şeylər var.
Common options to git log
bu günə qədər əhatə etdiyimiz seçimlər, həmçinin faydalı ola biləcək bəzi digər ümumi formatlaşdırma seçimlərini və log əmrinin nəticələrini necə dəyişdirdiyini sadalayır.
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. Option values include oneline, short, full, fuller, and format (where you specify your own format). |
|
Shorthand for |
Giriş Çıxışın Məhdudlaşdırılması
Çıxış formatlama seçimlərinə əlavə olaraq, git log
bir sıra faydalı məhdudlaşdırma seçimlərini də tələb edir; yəni, yalnız alt hissəni göstərməyinizə imkan verən seçimlər. Artıq belə bir seçim görmüsünüz - yalnız son iki nəticəni əks etdirən -2
seçimi. Əslində edə bilərsiniz -<n>`
, burada n
son commit n
işləndiyini göstərmək üçün istənilən tamdır. Əslində, sizin tez-tez istifadə etməyinizin ehtimalı azdır, çünki standart borularla Git bütün pager vasitəsi ilə çıxır, bir anda giriş çıxışının yalnız bir səhifəsini görürsünüz.
Bununla birlikdə, --since
və --until
kimi seçimlər çox faydalıdır. Məsələn, bu əmr son iki həftədə edilən əmrlərin siyahısını alır:
$ git log --since=2.weeks
Bu əmr çox sayda formatla işləyir - "2008-01-15" və ya "2 il 1 gün 3 dəqiqə əvvəl" kimi nisbi bir tarix təyin edə bilərsiniz.
Həmçinin bəzi axtarış meyarlarına uyğun gələnləri siyahıya silə bilərsiniz. --author
seçimi, müəyyən bir müəllif üzərində filter etməyə imkan verir və --grep
seçimi mesaj commitində açar sözlər axtarmağa imkan verir.
Note
|
|
Digər həqiqətən faydalı bir filtr, bir simli və yalnız bu sətirdə baş verənlərin sayını dəyişdirən əmrləri göstərən -S
seçimidir (ümumiyyətlə Git-in “pickaxe” seçimi adlanır). Məsələn, müəyyən bir funksiyaya istinad əlavə edən və ya çıxarmış son commiti tapmaq istəyirsinizsə, çağıra edə bilərsiniz:
$ git log -S function_name
git log
bir filtr kimi keçmək üçün faydalı bir seçim yoludur.
Dəqiqləşdirilmiş şəkildə bir qovluq və ya fayl adını göstərsəniz, log çıxarışının commitlənməsi ilə həmin fayllara bir dəyişiklik təqdim etməyi məhdudlaşdıra bilərsiniz.
Bu həmişə son seçimdir və ümumiyyətlə yolları seçimlərdən ayırmaq üçün ikiqat tire (--
) əvvəl olur.
Options to limit the output of git log
çıxışını (çıxarışını) məhdudlaşdırmaq üçün Seçimlərdə bu və arayışınız( rəy) üçün bir neçə digər ümumi variantları sadalayacağıq.
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 |
Məsələn, Git mənbə kodu tarixində dəyişən test sənədlərinin Junio Hamano tərəfindən oktyabr 2008-ci ildə commitləndiyini və birləşdirilmədiyini görmək istəyirsinizsə, bu kimi bir şey işlədə bilərsiniz:
$ 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
Git mənbə kodu tarixində təxminən 40.000 commitdən bu əmr bu meyarlara uyğun 6-nı göstərir.
Tip
|
Birləşmə Commit Görüntüsünün Qarşısını Alır
Deponuzda istifadə olunan iş axınından asılı olaraq, giriş tarixinizdəki commitlərin əhəmiyyətli bir faizinin yəni adətən çox məlumat verməyən commitlərin sadəcə birləşməsi mümkündür.
Birləşmə ekranının giriş tarixinizi ləkələməsini qarşısını almaq üçün, günlük log seçimini əlavə edin |