-
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
10.8 Git’in Daxili İşləri - Mühit Dəyişənləri
Mühit Dəyişənləri
Git həmişə bir bash
shell-inin içərisində işləyir və necə davranacağını təyin etmək üçün bir sıra shell mühiti dəyişənlərindən istifadə edir.
Bəzən bunların nə olduğunu və Git’in istədiyiniz kimi davranması üçün necə istifadə edilə biləcəyini bilmək çox faydalıdır.
Bu, Git’in diqqət yetirdiyi bütün mühit dəyişənlərinin tam siyahısı deyil, ancaq biz ən faydalılarını əhatə edəcəyik.
Qlobal Davranış
Kompüter proqramı kimi Git’in bəzi ümumi davranışları ətraf mühit dəyişənlərindən asılıdır.
GIT_EXEC_PATH
, Git’in alt proqramlarını harada axtardığını təyin edir (git-commit
, git-diff
və digərləri kimi).
Hazırkı ayarı git --exec-path
-i işə salaraq yoxlaya bilərsiniz.
HOME
ümumiyyətlə fərdiləşdirilə bilməz (Çünki, çox şey ondan asılıdır), ancaq Git-in qlobal konfiqurasiya faylını axtardığı yerdir.
Qlobal konfiqurasiya ilə tamamlanmış, həqiqətən portativ bir Git quraşdırma istəyirsinizsə, portativ Git-in shell profilindəki HOME
seçimini ləğv edə bilərsiniz.
PREFIX
bənzərdir, lakin sistem miqyasında konfiqurasiya üçündür.
Git bu faylı $ PREFIX/etc/gitconfig
-də axtarır.
GIT_CONFIG_NOSYSTEM
, ayarlandığı təqdirdə, sistem səviyyəsində konfiqurasiya faylının istifadəsini dayandırır.
Sistem konfiqurasiyanız əmrlərinizə müdaxilə edirsə, dəyişdirmək və ya silmək üçün girişiniz yoxdursa, onda bu faydalı olacaqdır.
GIT_PAGER
əmr sətrində çox səhifəlik çıxışı göstərmək üçün istifadə olunan proqramı idarə edir.
Bu ayarlanmayıbsa, PAGER
geri dönüş kimi istifadə ediləcək.
GIT_EDITOR
, istifadəçinin bəzi mətnləri düzəltməsi lazım olduqda (məsələn, commit mesajı) Git-in işə salacağı redaktordur.
Ayarlanmadıqda isə, EDİTOR
istifadə ediləcək.
Depo Yerləri
Git, cari depo ilə necə əlaqəli olduğunu müəyyən etmək üçün bir neçə mühit dəyişənlərindən istifadə edir.
GIT_DIR
, .git
qovluğunun yeridir.
Bu göstərilməyibsə, Git hər bir addımda .git
qovluğu axtararaq, ~
və ya /
-a çatana qədər qovluq ağacını gəzir.
GIT_CEILING_DIRECTORIES
, .git
qovluğu axtarma davranışına nəzarət edir.
Yüklənməsi ləng olan qovluqlara (məsələn, bir lent sürücüsündə və ya yavaş bir şəbəkə bağlantısı daxilində) daxil olsanız, xüsusilə shell istəyinizi qurarkən Git çağırıldığı təqdirdə, Git-dən başqa bir müddətdən əvvəl sınamağı dayandırmaq istəyə bilərsiniz.
GIT_WORK_TREE
boş olmayan bir depo üçün iş qovluğunun kökünün yerləşməsidir.
Əgər --git-dir
və ya GIT_DIR
göstərilsə də, --work-tree
, GIT_WORK_TREE
və ya core.worktree
qeyd edilmirsə, cari iş qovluğu iş ağacınızın ən üst səviyyəsi sayılır.
GIT_INDEX_FILE
indeks faylına gedən path-dır (yalnız boş olayan depolarda).
GIT_OBJECT_DIRECTORY
ümumiyyətlə .git/objects
-də yerləşən qovluğun yerini təyin etmək üçün istifadə edilə bilər.
GIT_ALTERNATE_OBJECT_DIRECTORIES
Git-ə GIT_OBJECT_DIRECTORY
-də olmadıqda obyektlərin harada yoxlanılacağını bildirən iki nöqtə ilə ayrılmış bir siyahıdır (`/dir/one:/dir/two:… ` kimi formatlaşdırılmışdır).
Tamamilə eyni məzmuna sahib olan böyük faylları olan bir çox layihəniz olursa, bunların çox nüsxəsini saxlamamaq üçün istifadə edilə bilər.
Pathspec-lər
Bir pathspec
, wildcards istifadəsi də daxil olmaqla Git-dəkilərə path-ları necə təyin etdiyinizə aiddir.
Bunlar həm .gitignore
faylında, həm də əmr sətrində (` git add * .c`) istifadə olunur.
GIT_GLOB_PATHSPECS
və GIT_NOGLOB_PATHSPECS
wildcards-ın pathspecs-dəki standart davranışını idarə edir.
Əgər GIT_GLOB_PATHSPECS 1 olaraq ayarlanırsa, wildcard simvolları wildcards rolunu oynayır (standart olaraq); GIT_NOGLOB_PATHSPECS
1-ə ayarlanmışsa, joker simvollar yalnız özləri ilə uyğunlaşır, yəni *.c
adları .c
ilə bitən hər hansı bir faylla deyil, yalnız named ``* .c” faylına uyğun gəlir.
Bunu ayrı hallarda :(glob)*.c
-də olduğu kimi :(glob)
və ya :(hərfi)
ilə başlayan path işarəsini ləğv edə bilərsiniz.
GIT_LITERAL_PATHSPECS
yuxarıdakı davranışların hər ikisini deaktiv edir; heç bir wildcard simvolu işləməyəcək və yalnış prefikslər də söndürülür.
GIT_ICASE_PATHSPECS
bütün path xüsusiyyətlərini işlərə həssas olmayan bir şəkildə işləməyə quraşdırır.
Committing
Git commit obyektinin son yaradılması, ümumiyyətlə bu mühit dəyişənlərini əsas məlumat mənbəyi kimi istifadə edən və yalnız mövcud olmadıqda konfiqurasiya dəyərlərinə qayıdan git-commit-tree
tərəfindən edilir.
GIT_AUTHOR_NAME
‘`author '’ sahəsindəki insan tərəfindən oxuna bilən addır.
GIT_AUTHOR_EMAIL
“author” sahəsi üçün e-poçtdur.
GIT_AUTHOR_DATE
“author” sahəsi üçün istifadə olunan zaman damğasıdır.
GIT_COMMITTER_NAME
“committer” sahəsi üçün insan adı təyin edir.
GIT_COMMITTER_EMAIL
“committer” sahəsi üçün e-poçtdur.
GIT_COMMITTER_DATE
“committer” sahəsi üçün zaman damğasıdır.
EMAIL
user.email
konfiqurasiya dəyərinin təyin edilməməsi halında geri göndərilən e-poçt adresidir.
this ayarlanmadıqda, Git sistem istifadəçisi və host adlarına qayıdır.
Networking
Git, HTTP üzərindən şəbəkə əməliyyatları aparmaq üçün curl
kitabxanasından istifadə edir, buna görə də GIT_CURL_VERBOSE
Git-ə həmin kitabxana tərəfindən yaradılan bütün mesajları buraxmasını söyləyir.
Bu, əmr sətrində curl –v
etməyə oxşayır.
GIT_SSL_NO_VERIFY
Git-ə SSL sertifikatlarının təstiqlənməsini söyləyir.
HTTPS üzərindən Git depolarına xidmət göstərmək üçün öz imzanızla təsdiqlənmiş bir sertifikat istifadə edirsinizsə və ya bir Git server quraşdırmasının ortasındasnızsa, lakin hələ tam bir sertifikat yükləməmisinizsə, bu bəzən lazım ola bilər.
Bir HTTP əməliyyatının məlumat dərəcəsi saniyədə GIT_HTTP_LOW_SPEED_TIME
saniyədən uzun müddət ərzində GIT_HTTP_LOW_SPEED_LIMIT
baytdan aşağı olarsa, Git bu əməliyyatı ləğv edəcəkdir.
Bu dəyərlər http.lowSpeedLimit
və` http.lowSpeedTime` konfiqurasiya dəyərlərini ləğv edir.
GIT_HTTP_USER_AGENT
12, HTTP üzərindən əlaqə qurarkən Git tərəfindən istifadə edilən istifadəçi agent sətirini təyin edir.
Standartlıq git / 2.0.0
kimi bir dəyərdir.
Diffing and Birləşdirmə
GIT_DIFF_OPTS
bir az səhvdir.
Yalnız etibarlı dəyərlər, git diff
əmrində göstərilən kontekst sətirlərinin sayını idarə edən -u <n>
və ya ‘--unified = <n>’-dir.
GIT_EXTERNAL_DIFF
diff.external
konfiqurasiya dəyəri üçün yalnış olaraq istifadə olunur.
Ayarlandığı təqdirdə, Git, git diff
çağırıldıqda bu proqramı çağıracaqdır.
GIT_DIFF_PATH_COUNTER
və GIT_DIFF_PATH_TOTAL
GIT_EXTERNAL_DIFF
və ya diff.external
tərəfindən təyin olunan proqramın içərisindən faydalıdır.
Birincisi, bir seriyadakı hansı faylın fərqləndiyini göstərir (1-dən başlayaraq), ikincisi isə topludakı faylların ümumi sayını təşkil edir.
GIT_MERGE_VERBOSITY
rekursiv birləşmə strategiyası üçün output-a nəzarət edir.
İcazəli dəyərlər aşağıdakılardır:
-
0, ehtimal ki, tək bir səhv mesajı xaricində heç bir şey çıxarmaz.
-
1 yalnız konfliktləri göstərir.
-
2 də fayl dəyişikliklərini göstərir.
-
3 fayl dəyişmədiyi üçün skip olunduğunu göstərir.
-
4 işləndikcə bütün path-ları göstərir.
-
5 və yuxarısı ətraflı debugging məlumatlarını göstərir.
Standart dəyər 2-dir. ==== Debugging
really Git-in nə etdiyini bilmək istəyirsiniz? Git-in içərisində kifayət qədər əksiksiz bir iz var və yalnız bunları işə salmaq lazımdır. Bu dəyişənlərin mümkün qiymətləri aşağıdakılardır:
*``true", 1” və ya `2” - iz kateqoriyası stderr-ə yazılır.
* "/
İlə başlayan mütləq path - trace output-u həmin fayla yazılacaqdır.
GIT_TRACE
xüsusi bir kateqoriyaya yerləşməyən ümumi izləri idarə edir.
Buraya taxma adların genişləndirilməsi və digər alt proqramlara nümayəndəlik daxildir.
$ GIT_TRACE=true git lga
20:12:49.877982 git.c:554 trace: exec: 'git-lga'
20:12:49.878369 run-command.c:341 trace: run_command: 'git-lga'
20:12:49.879529 git.c:282 trace: alias expansion: lga => 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.879885 git.c:349 trace: built-in: git 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.899217 run-command.c:341 trace: run_command: 'less'
20:12:49.899675 run-command.c:192 trace: exec: 'less'
GIT_TRACE_PACK_ACCESS
packfila-a girişin izlənilməsinə nəzarət edir.
Birinci sahə əldə edilən packfile-dir, ikincisi həmin fayl içindəki offsetdir:
$ GIT_TRACE_PACK_ACCESS=true git status
20:10:12.081397 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 12
20:10:12.081886 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 34662
20:10:12.082115 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 35175
# […]
20:10:12.087398 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 56914983
20:10:12.087419 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 14303666
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
GIT_TRACE_PACKET
şəbəkə əməliyyatları üçün paket səviyyəsində izləmə imkanı verir.
$ GIT_TRACE_PACKET=true git ls-remote origin
20:15:14.867043 pkt-line.c:46 packet: git< # service=git-upload-pack
20:15:14.867071 pkt-line.c:46 packet: git< 0000
20:15:14.867079 pkt-line.c:46 packet: git< 97b8860c071898d9e162678ea1035a8ced2f8b1f HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/2.0.4
20:15:14.867088 pkt-line.c:46 packet: git< 0f20ae29889d61f2e93ae00fd34f1cdb53285702 refs/heads/ab/add-interactive-show-diff-func-name
20:15:14.867094 pkt-line.c:46 packet: git< 36dc827bc9d17f80ed4f326de21247a5d1341fbc refs/heads/ah/doc-gitk-config
# […]
GIT_TRACE_PERFORMANCE
performans məlumatlarının qeyd edilməsinə nəzarət edir.
Output, hər bir xüsusi git
çağırışının nə qədər çəkdiyini göstərir.
$ GIT_TRACE_PERFORMANCE=true git gc
20:18:19.499676 trace.c:414 performance: 0.374835000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:18:19.845585 trace.c:414 performance: 0.343020000 s: git command: 'git' 'reflog' 'expire' '--all'
Counting objects: 170994, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (43413/43413), done.
Writing objects: 100% (170994/170994), done.
Total 170994 (delta 126176), reused 170524 (delta 125706)
20:18:23.567927 trace.c:414 performance: 3.715349000 s: git command: 'git' 'pack-objects' '--keep-true-parents' '--honor-pack-keep' '--non-empty' '--all' '--reflog' '--unpack-unreachable=2.weeks.ago' '--local' '--delta-base-offset' '.git/objects/pack/.tmp-49190-pack'
20:18:23.584728 trace.c:414 performance: 0.000910000 s: git command: 'git' 'prune-packed'
20:18:23.605218 trace.c:414 performance: 0.017972000 s: git command: 'git' 'update-server-info'
20:18:23.606342 trace.c:414 performance: 3.756312000 s: git command: 'git' 'repack' '-d' '-l' '-A' '--unpack-unreachable=2.weeks.ago'
Checking connectivity: 170994, done.
20:18:25.225424 trace.c:414 performance: 1.616423000 s: git command: 'git' 'prune' '--expire' '2.weeks.ago'
20:18:25.232403 trace.c:414 performance: 0.001051000 s: git command: 'git' 'rerere' 'gc'
20:18:25.233159 trace.c:414 performance: 6.112217000 s: git command: 'git' 'gc'
GIT_TRACE_SETUP
Git-in ünsiyyət qurduğu mühit və mühit haqqında nəyi kəşf etdiyi barədə məlumat göstərir.
$ GIT_TRACE_SETUP=true git status
20:19:47.086765 trace.c:315 setup: git_dir: .git
20:19:47.087184 trace.c:316 setup: worktree: /Users/ben/src/git
20:19:47.087191 trace.c:317 setup: cwd: /Users/ben/src/git
20:19:47.087194 trace.c:318 setup: prefix: (null)
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Miscellaneous
GIT_SSH
, göstərildiyi təqdirdə, Git bir SSH host-na qoşulmağa çalışarkən ssh
yerinə çağırılan bir proqramdır.
$ GIT_SSH [istifadəçi adı @] host [-p <port>] <command>
kimi çağırılır.
Qeyd edək ki, bu, ssh
-in necə çağırılacağını fərdiləşdirməyin ən asan yolu deyil; əlavə komanda sətri parametrlərini dəstəkləməyəcək, buna görə bir wrapper ssenarisi yazmalı və işarə etmək üçün GIT_SSH
ayarlamalısınız.
Bunun üçün sadəcə ~/.ssh/config
faylını istifadə etmək daha asandır.
GIT_ASKPASS
core.askpass
konfiqurasiya dəyəri üçün keçiddir.
Bu, Git-in istifadəçidən bir əmr sətri arqumenti kimi bir mətn istəməsini gözləyə bilən creditentals tələb etməsi lazım olan və stdout
-da cavabı qaytarmalı olduğu zaman çağırılan proqramdır (bu alt sistem haqqında daha çox məlumat üçün buraya baxın: Etibarlı Yaddaş).
GIT_NAMESPACE
ad boşluğuna daxil olan ref-lərə girişə nəzarət edir və --namespace
bayrağına bərabərdir.
Bu əsasən server tərəfində faydalıdır, burada tək bir depoda birdən çox hook saxlaya bilərsiniz, yalnız ref-ləri ayrı saxlamalısınız.
GIT_FLUSH
Git-i stdout-a tədricən yazarkən tamponlanmamış I/O istifadə etməyə məcbur etmək üçün istifadə edilə bilər.
1 dəyəri Git-in daha tez-tez yuyulmasına, 0 dəyəri bütün çıxışın tamponlanmasına səbəb olur.
Standart dəyər (bu dəyişən təyin edilməyibsə), fəaliyyətə və çıxış rejiminə görə uyğun bir tamponlama sxemi seçməkdir.
GIT_REFLOG_ACTION
reflog-a yazılmış təsviri mətni təyin etməyə imkan verir.
Misal olaraq:
$ GIT_REFLOG_ACTION="my action" git commit --allow-empty -m 'My message'
[master 9e3d55a] My message
$ git reflog -1
9e3d55a HEAD@{0}: my action: My message