Push etmək — lokal commit-ləri uzaq Git repozitoriyasına göndərmək, onları komandanın digər üzvləri üçün əlçatan etmək deməkdir. Push-dan sonra dəyişikliklər GitHub, GitLab və ya Bitbucket-də görünür. GitHub Octoverse 2024 məlumatlarına görə, platformaya hər gün 10 milyondan çox commit push edilir. Git push paylanmış komandada işin sinxronizasiyası üçün əsas hərəkətdir.
Əsas məqamlar
Git push — lokal repozitoriyadan uzaq repozitoriyaya commit-ləri ötürən əmrdir. Commit-dən fərqli olaraq, dəyişiklikləri yalnız proqramçının lokal maşınında saxlayır, push bu dəyişiklikləri bütün komanda üçün dərc edir. Push Pull Request yaratmazdan və deploy etməzdən əvvəl məcburi addımdır.
Git arxitekturası hər bir proqramçının öz lokal repozitoriyasında işlədiyini nəzərdə tutur. Commit-lər lokal olaraq yaradılır və proqramçı onları push etmək qərarına gələnə qədər yığılır. Bu azadlıq verir: çoxlu lokal commit-lər etmək, təcrübə aparmaq və tarixçəni komandaya təsir etmədən yenidən yazmaq olar.
# Origin remote-ə push, main budağı
git push origin main
# Cari budağı remote-a upstream ilə push et
git push -u origin feature/new-dashboard
# Uyğun adlarla bütün budaqları push et
git push --all origin
# Lease ilə force push (təhlükəsiz force push)
git push --force-with-lease
Push-dan sonra uzaq repozitoriya refs-ləri (budaq istinadlarını) yeniləyir ki, onlar yeni commit-lərə işarə etsin. Digər proqramçılar bu dəyişiklikləri git pull və ya git fetch vasitəsilə əldə edə bilərlər. Məhz bu commit mübadiləsi birgə işləmənin əsasını təşkil edir.
Git push əmri lokal və uzaq budaqları müqayisə edir və yalnız çatışmayan commit-ləri ötürür. Git bütün faylları yenidən göndərmir — yalnız fərqi (delta) ötürür, bu da push-u böyük repozitoriyalarda belə sürətli edir. Git Protocol ötürülən məlumatın həcmini minimuma endirən smart transfer-dən istifadə edir.
Əgər uzaq budaqda lokalda olmayan commit-lər varsa, push rədd ediləcək. Bu, dəyişikliklərin itməsinin qarşısını alan qoruyucu mexanizmdir. Belə vəziyyətdə proqramçı əvvəlcə git pull yerinə yetirməli, dəyişiklikləri birləşdirməli və yalnız sonra yenidən push etməlidir. Alternativ force push-dur, o uzaq budağı yenidən yazır, lakin ehtiyatla istifadə edilməlidir.
| Əmr | Fəaliyyət | Nə vaxt istifadə etməli |
|---|---|---|
| git push | tracked budağa standart push | adi dəyişiklik göndərmə |
| git push -u | upstream təyin etməklə push | yeni budağın ilk push-u |
| git push --force-with-lease | təhlükəsiz force push | öz budağını rebase etdikdən sonra |
| git push --force | məcburi push | yalnız koliziya olmadığına əminsənsə |
| git push --delete | uzaq budağı silmək | budaq merge-dən sonra təmizləmə |
Uzaq repozitoriyaları başa düşmək düzgün push-un açarıdır. Adətən origin — standart uzaq repozitoriyanın adı istifadə olunur. Git remote -v əmri uzaq repozitoriyaların siyahısını və onların URL-lərini göstərir. Bir neçə remote əlavə etmək olar (məsələn, əsas repozitoriya üçün origin və fork üçün upstream).
Əsas qayda: hər məntiqi tamamlanmış iş mərhələsindən sonra push etmək lazımdır. Əgər proqramçı tapşırığı və ya onun bir hissəsini bitiribsə — push vaxtıdır. Lakin build-i sındıran yarımçıq işi push etmək tövsiyə edilmir. İşlək build istənilən budağa push üçün minimal tələbdir.
Komanda işində aşağıdakı ritm qəbul edilir: səhər — həmkarların dəyişikliklərini almaq üçün git pull, gün ərzində — bir neçə commit və bir-iki push, axşam — bütün tamamlanmış tapşırıqların yekun push-u. Proqramçı nə qədər tez-tez push edərsə, budaqları birləşdirərkən konflikt riski bir o qədər az olar və işin gedişatı bir o qədər şəffaf olar.
Təhlükəsiz push — komandada məlumat itkisinin və konfliktlərin qarşısını alan qaydalar toplusudur. Birinci və ən vacib qayda: layihədə birbaşa deploy qurulmayıbsa, heç vaxt birbaşa main və ya master budağına push etməyin. Müasir komandalarda main budağının qorunması GitHub branch protection səviyyəsində konfiqurasiya edilir.
İkinci qayda: push-dan əvvəl uzaq budaqla sinxronlaşmaq. Birləşmə zamanı merge commit-dən qaçmaq üçün git pull --rebase yerinə yetirin. Bu, tarixçəni sadələşdirir və onu xətti edir. Push rədd edilərsə — çılpaq force push istifadə etməyin, əvvəlcə uzaq budaqda hansı commit-lərin göründüyünü öyrənin.
Üçüncü qayda: göndərmədən əvvəl avtomatik testləri və linter-i işə salan pre-push hook-ları qurmaq. Testlər uğursuz olarsa — push bloklanır. Belə hook-lar Husky və ya Git hooks (pre-push faylı .git/hooks-da) vasitəsilə qurulur.
Dördüncü qayda: böyük ikili faylları push etməyin. Git ikili artefaktları saxlamaq üçün nəzərdə tutulmayıb — onlar repozitoriyanı şişirdir və əməliyyatları yavaşladır. Böyük fayllar üçün Git LFS (Large File Storage) istifadə olunur. Əgər ikili fayl artıq push edilibsə və tarixçəyə düşübsə, onu git filter-branch vasitəsilə silmək lazımdır.
Uğursuz push-un ən çox yayılmış səbəbi — uzaq budaqda lokalda olmayan commit-lərin olmasıdır. Bu, başqa bir proqramçı öz dəyişikliklərini eyni budağa push etdikdə baş verir. Həlli: git pull yerinə yetirmək, mümkün konfliktləri həll etmək və push-u təkrarlamaq.
# Push rədd edildi — əvvəlcə fetch və rebase et
git fetch origin
git rebase origin/main
# Konfliktləri həll et, sonra:
git push --force-with-lease
# Və ya sadəcə uzaq dəyişiklikləri birləşdir
git pull origin main
git push
İkinci səbəb — budağa yazmaq hüququnun olmaması. Əgər main budağı branch protection qaydası ilə qorunursa, birbaşa push-lar qadağandır. Həlli: feature budağına push etmək və Pull Request yaratmaq. Qoruma parametrləri adətən GitHub settings və ya GitLab protected branches vasitəsilə idarə olunur.
Üçüncü səbəb — autentifikasiya problemləri. Köhnəlmiş credentials, SSH-ə keçid və ya personal access token-in dəyişməsi. Həlli: remote URL-i yoxlamaq (git remote -v) və credentials-i yeniləmək. 2021-ci ildən GitHub HTTPS üçün parol ilə autentifikasiyanı ləğv edib — şəxsi token və ya SSH açarı istifadə olunur.
Tez-tez verilən suallar
Push etmək — proqramçının repozitoriyasından uzaq serverə (GitHub, GitLab) lokal commit-ləri göndərmək deməkdir. Push-dan sonra dəyişikliklər komanda üçün əlçatan olur, Pull Request-də görünür və deploy edilə bilər. Push komanda əməkdaşlığından əvvəl lokal kod işinin son mərhələsidir.
Commit dəyişiklikləri lokal olaraq, proqramçının repozitoriyasında saxlayır. Push bu lokal commit-ləri uzaq serverə göndərir. Push olmadan çoxlu commit etmək olar, lakin həmkarların dəyişiklikləri görməsi üçün push etmək lazımdır. Commit — saxlama, push — dərc etmədir.
Push, uzaq budaqda lokalda olmayan commit-lər olduqda rədd edilir. Həlli: git pull (və ya git fetch + git rebase) yerinə yetirin, dəyişiklikləri birləşdirin və push-u təkrarlayın. Öz feature budağınızda işləyirsinizsə və dəyişikliklərə əminsinizsə, git push --force-with-lease istifadə edin.
Bəli, amma ehtiyatla. Dəyişiklikləri geri qaytaran commit yaratmaq üçün git revert <commit-hash> istifadə edin. Sonra yeni commit-i push edin. Əgər commit-ləri tarixçədən silmək lazımdırsa, git reset + git push --force-with-lease istifadə edin, ancaq yalnız öz feature budağınızda. git revert ortaq budaqlar üçün təhlükəsiz seçimdir.
Müntəzəm push lokal maşının sıradan çıxması halında məlumat itkisinin qarşısını alır, birləşmə zamanı konfliktləri azaldır və komandaya işin gedişatı haqqında məlumat verir. Əgər proqramçı bir həftə push etməzsə, onun dəyişiklikləri main budağından çox uzaqlaşa bilər ki, bu da merge zamanı mürəkkəb konfliktlərə səbəb olur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun