-
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
7.4 Git Alətləri - İşinizin İmzalanması
İşinizin İmzalanması
Git kriptoqrafik cəhətdən etibarlıdır, lakin axmaq deyil. İnternette başqalarından iş götürürsənsə və commit-lərin həqiqətən etibarlı bir mənbədən olduğunu yoxlamaq istəyirsənsə, Gitin GPG istifadə edərək işi imzalamaq və yoxlamaq üçün bir neçə yolu var.
GPG Girişi
Hər şeydən əvvəl, hər hansı bir şeyi imzalamaq istəyirsinizsə, GPG-nin konfiqurasiya edilməsi və şəxsi açarınızın quraşdırmağınız lazımdır.
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 2048R/0A46826A 2014-06-04
uid Scott Chacon (Git signing key) <schacon@gmail.com>
sub 2048R/874529A9 2014-06-04
If you don’t have a key installed, you can generate one with gpg --gen-key
.
$ gpg --gen-key
İmzalanacaq xüsusi bir açarınız olduqdan sonra user.signingkey
konfiqurasiya parametrini təyin edərək Git’i birşeyləri imzalamağa istifadə etmək üçün konfiqurasiya edə bilərsiniz.
$ git config --global user.signingkey 0A46826A
İndi Git etiketi imzalamaq üçün default olaraq açarınızı istifadə edəcək və istəsəniz commit götürəcəksiniz.
Etiketlər İmzalamaq
GPG xüsusi açar quraşdırmanız varsa, indi yeni etiketlər imzalamaq üçün istifadə edə bilərsiniz.
Tək etməli olduğunuz -a
əvəzinə -s
istifadə etməkdi:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
Bu etiketdə git show
işlətsəniz, ona əlavə edilmiş GPG imzanızı görə bilərsiniz:
$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:29:41 2014 -0700
my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
=EFTF
-----END PGP SIGNATURE-----
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
Etiketləri Doğrulamaq
İmzalanmış etiketi doğrulamaq üçün git tag -v <tag-name>
istifadə edin.
Bu əmr imzanı təsdiqləmək üçün GPG istifadə edir.
Bunun düzgün işləməsi üçün açar zəncirinizdə imzanın public açarına ehtiyacınız var:
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
İmzalananın public açarı yoxdursa, bunun əvəzinə belə bir şey əldə edəcəksiniz:
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
Commit-ləri İmzalamaq
Git-in daha yeni versiyalarında (v1.7.9 və yuxarı), indi ayrıca fərdi commit-lər də imzalaya bilərsiniz.
Yalnız etiketlər əvəzinə birbaşa imzalamaqla maraqlanırsınızsa, git commit
əmrinizə bir -S
əlavə edin.
$ git commit -a -S -m 'Signed commit'
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
[master 5c3386c] Signed commit
4 files changed, 4 insertions(+), 24 deletions(-)
rewrite Rakefile (100%)
create mode 100644 lib/git.rb
Bu imzaları görmək və yoxlamaq üçün git log
üçün bir --show-signature
seçimi var.
$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun 4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Jun 4 19:49:17 2014 -0700
Signed commit
Əlavə olaraq tapdığı hər hansı bir imzanı yoxlamaq və onları %G?
formatı ilə çıxışı siyahısına salmaq üçün git log
-ı konfiqurasiya edə bilərsiniz.
$ git log --pretty="format:%h %G? %aN %s"
5c3386c G Scott Chacon Signed commit
ca82a6d N Scott Chacon Change the version number
085bb3b N Scott Chacon Remove unnecessary test code
a11bef0 N Scott Chacon Initial commit
Burada yalnız son commit-in imzalanmış və etibarlı olduğunu və əvvəlki commit-lərin olmadığını görərik.
Git 1.8.3 və sonrakı versiyalarında, etibarlı bir GPG imzasını daşımayan bir commit-i --verify-signatures
əmri ilə birləşdirərkən yoxlamaq və rədd etmək üçün git merge
və git pull
-a işlətmək olar.
Bir branch-ı birləşdirərkən bu seçimdən istifadə edirsinizsə və imzalanmamış və etibarlı olmayan commit-lərdən ibarətdirsə, birləşmə nəticə verməyəcəkdir.
$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
Birləşmə yalnız etibarlı imzalanmış commit-lərdən ibarətdirsə, birləşdirmə əmri sizə yoxladığı bütün imzaları göstərəcək və sonra birləşmə ilə irəliləyəcəkdir.
$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
Updating 5c3386c..13ad65e
Fast-forward
README | 2 ++
1 file changed, 2 insertions(+)
Nəticədə birləşmə commit-ini imzalamaq üçün git merge
əmri ilə -S
seçimindən də istifadə edə bilərsiniz.
Aşağıdakı nümunə həm birləşdiriləcək branch-dakı hər bir commit-in imzalandığını təsdiqləyir, həm də nəticədə birləşmə commit-ini imzalayır.
$ git merge --verify-signatures -S signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
Merge made by the 'recursive' strategy.
README | 2 ++
1 file changed, 2 insertions(+)
Hamı İmzalaya Bilər
Etiketlər və commit-lər imzalamaq çox yaxşıdır, ancaq bunu normal iş axınınızda istifadə etməyə qərar verərsinizsə, komandanızdakı hər kəsin bunu necə edəcəyini başa düşməyiniz lazımdır. Bunu etməsəniz, işlərini imzalanmış versiyalarla necə yenidən yazacaqlarına kömək etmək üçün çox vaxt sərf edəcəksiniz. Bunu standart iş axınınızın bir hissəsi kimi qəbul etməzdən əvvəl GPG-ni və şeyləri imzalamağın üstünlüklərini başa düşdüyünüzdən əmin olun.