-
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.2 Git’in Əsasları - Depoda Dəyişikliklərin Qeyd Edilməsi
Depoda Dəyişikliklərin Qeyd Edilməsi
Bu nöqtədə, artıq lokal maşınızda düzgün şəkildə işləyən Git deposu olmalıdır hansı ki qarşınızdakı bütün sənədlərin yoxlanılması və kopyalanması ona daxildir. Tipik olaraq, layihə yazmaq istədiyiniz vəziyyətə çatdığı zaman dəyişiklik etməyi və həmçinin həmin dəyişikliklərin görüntülərini yerləşdirə bilmək imkanına malik olacaqsınız.
Unutmayın ki, işlək qovluqdakı hər bir fayl iki haldan birində ola bilər: izlənilmiş və ya izlənilməmiş. İzlənmiş fayllar son görüntülərdə olan fayllardır; və həmin bu fayllar dəyişdirilə, dəyişdirilməyə və ya səhnələşdirilə bilər. Bir sözlə, izlənən fayllar Git’in tanıdığı fayllardır.
Bəs işlənməmiş və ya yüklənməmiş fayllar nədir?- Bu fayllar işçi qovluğunuzdakı son görüntüdə və quruluş sahənizdə olmayan hər hansısa bir fayllardır. İlk depo klonlaşdırıldığı zaman, bütün sənədləriniz izlənəcək və düzəldilməyəcək, çünki Git onları artıq yoxlayıb və siz heç bir şey düzəltməmisiniz.
Faylları redaktə edərkən Git onları dəyişdirilmiş kimi görür, bunun səbəbi sonuncu əmrinizi icra etdikdən bəri onları dəyişmisiniz. Siz iş gördüyünüz zaman dəyişdirilmiş fayllar seçilərək mərhələlənir və daha sonra mərhələlənmiş dəyişikliklər commit olunur və bu proses dövr şəkildə təkrar olunur.
Fayllarınızın Vəziyyətinin Yoxlanılması
Faylların hansı vəziyyətdə və harda olduğunu müəyyənləşdirmək üçün istifadə olunan əsas alət git status
əmridir.
Bu əmri birbaşa klondan sonra işləsəniz, bunun kimi bir şey görməlisiniz:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Bu isə təmiz bir iş qovluğunun olması deməkdir; başqa sözlə izlənilən faylların heç biri dəyişdirilmir. Git həmçinin əlavə edilməmiş faylları görmür və həmin fayllar burada siyahıya alınacaqdır. Sonda əmr sizə hansı branch’da olduğunuzu söyləyir və serverdəki eyni branch’dan ayrılmadığınızı bildirir. Hazırda da bu branch həmişə master funksiyasındadır. Git’də Branch branch’lar və arayışları ətraflı şəkildə araşdıracaq. İş funksiyası bundan ibarətdir.
Gəlin, layihənizə yeni bir fayl, sadə README
faylı əlavə edək. Bu zaman əgər fayl əvvəllər yox idisə və git status
-unu işlədirsinizsə, yüklənməmiş faylınızı belə görəcəksiniz:
$ echo 'My Project' > README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
Sizin hazırki vəziyyətinizdə “İzlənilməyən fayllar” başlığının altında yeni README
faylınızın izlənilmədiyini görə bilərsiniz.
İzlənilməmiş fayllar dedikdə əsasən Git’in əvvəlki snapshot`da (commit) olmayan fayllar nəzərdə tutulur. Sən onu açıq şəkildə bildirməyənədək Git onu sənin commit snapshotuna daxil etməyə başlamayacaq.Təsadüfən yaradılan ikili faylları və başqa faylları hansı ki heç onları daxil etməyi düşünmürsünüz və beləliklə də daxil etməyə başlamırsınız.
README
daxil olmaqla başlamaq istəsəniz,bu zaman faylı izləməyə başlayırsınız.
Yeni Faylların Izlənməsi
Yeni bir faylı izləməyə başlamaq üçün git add
əmrindən istifadə edirsiniz.
README
faylını izləməyə başlamaq üçün bunu işlədə bilərsiniz:
$ git add README
Status əmrinizi yenidən işləsəniz, README
faylınızın izlənildiyini və mərtəbəli olaraq commit`ləndiyini görə bilərsiniz:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
Bunu da qeyd edə bilərsiniz ki,o mərtəbəlidir çünki Dəyişikliklər commit olunub
başlığı altında verilir.
Bu anda commit etsəniz git add
əmrini işlətdiyiniz anda faylın versiyası növbəti tarixi snapshotda olacaq. Xatırlaya bilərsiniz ki, əvvəllər git init
işlətməyə başladığınız zaman git add <files>
əmrindəki faylları
yəni qovluğunuzdakı faylları izləməyə başladınız.
git add
əmri ya bir fayl ya da bir qovluğu adlandırır; əgər bu bir qovluqdursa, əmr həmin qovluqdakı bütün faylları rekursiv şəkildə əlavə edir.
Dəyişdirilmiş Faylların Quruluşu
Gəlin izlənilən bir faylı dəyişdirək. Əvvəllər izlənilən CONTRIBUTING.md
adlı bir faylı dəyişdirsəniz və yenidən git status
əmrinizi işə salsanız, bu kimi bir şey əldə edirsiniz:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
CONTRIBUTING.md
faylı “Dəyişikliklər commit üçün mərhələnməyib” adlı bir bölmə altında görünür – bu isə izlənilən bir faylın iş qovluğunda dəyişdirildiyini, lakin hələ də mərhələləndirilməməsi deməkdir.
Onu mərhələli etmək üçün çox funksiyalı əmr olan git add
əmrindən istifadə olunur və bu əmrdən - yeni sənədləri izləməyə, faylları mərhələləndirməyə və həll edildiyi kimi birləşmə ziddiyyətli faylları qeyd etmək kimi digər işləri istifadə etmək üçün də istifadə edirsiniz.
“Bu faylı layihəyə əlavə et” əvəzinə “bu məzmunu növbəti comittə əlavə et” kimi düşünmək daha faydalı ola bilər.
Gəlin indi CONTRIBUTING.md
faylını mərhələndirmək üçün git add
əmrini və daha sonra git status
-unu yenidən işə salaq:
$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
Hər iki fayl mərhələləşdirilib və növbəti commit`inizə daxil olacaq. Bu anda bunu etməmişdən əvvəl CONTRIBUTING.md
-də etmək istədiyiniz bir kiçik dəyişikliyi xatırlayırsınız.
Onu yenidən açırsınız və bu dəyişikliyi edirsiniz və commit üçün hazırsınız. Bununla belə, gəlin git status
-unu bir daha işə salaq:
$ vim CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Bu necə olur?
İndi CONTRIBUTING.md
həm mərhələli, həm də mərhələsiz olaraq siyahıya alınmışdır.Bəs bu necə mümkündür?
Məlum olur ki, git add
əmrini əlavə edərkən faylı mərhələlərə ayırır.İndi commit etsəniz, görərsiniz ki, CONTRIBUTING.md
versiyası, git add
əmrini son dəfə işlətdiyiniz kimidir, git commit
işlətdiyiniz zaman işlək qovluqda göründüyüz faylın versiyası deyil. git add
işlədikdən sonra bir fayl dəyişdirirsinizsə, faylın son versiyasını mərhələlərə ayırmaq üçün git add
-ı yenidən işə salmalısınız:
$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
Qısa Status
Gitin nəticə çıxarışı çox ətraflı həm də çox uzundur. Etdiyiniz dəyişikləri daha yığcam şəkildə görə bilməyiniz üçün gitin qısa işarəsi də mövcuddur.
git status -s
və ya git status --short
əmrlərini işlətsəniz əmrdən daha sadə çıxarış əldə edəcəksiniz:
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
İzlənməyən yeni sənədlər var ??
əlavə edilmiş yeni fayllarda A
, dəyişdirilmiş fayllarda isə M
və s var.
Çıxışda iki sütun var ki bunlardan - sol tərəfdə olan sütun quruluş sahəsinin vəziyyətini, sağ tərəfdə olan isə sütun işçi ağacının vəziyyətini göstərir.
Məsələn, bu çıxışda, README
faylı işçi qovluğunda dəyişdirilir, lakin hələ mərhələli deyil, lib/simplegit.rb
faylı isə dəyişdirilir və mərhələlərə ayrılır.
Rakefile
dəyişdirildi, mərhələlərə ayrıldı və sonra yenidən dəyişdirildi, buna görə həm mərhələli, həm də sabit olmayan dəyişikliklər vardır.
Nəzərə Alınmayan Fayllar
Siz tez-tez Git’in avtomatik olaraq əlavə etməsini və izlənilməyənləri göstərməyə çalışan bir faylın olacağını görəcəksiniz.
Ümumilikdə, avtomatik olaraq sistem tərəfindən yaradılan fayllar vardır ki, bunlara giriş faylları aid edilir.
Belə hallarda, .gitignore
kimi adlandırılan bir fayl siyahısı nümunələri yarada bilərsiniz.
Budur .gitignore
faylına bir nümunə:
$ cat .gitignore
*.[oa]
*~
İlk sətir, Git`ə sonluğu .o
və yaxud .a
ilə bitən istənilən sənədləri yəni kodunuzu düzəltməyin məhsulu ola biləcək obyekt və arxiv faylları nəzərə almamasını bildirir.İkinci sətir, Git`in müvəqqəti faylları qeyd etmək üçün Emacs kimi bir çox mətn redaktoru tərəfindən istifadə olunan bir tilde(~
) ilə bitən bütün faylları nəzərə almadığını bildirir.
Siz həmçinin log,tmp və ya pid qovluğunu; avtomatik olaraq yaradılan sənədləri və başqalarını da daxil edə bilərsiniz.Yeni depo üçün .gitignore
faylını qurmaq ümumilikdə yaxşı fikirdir, buna görə də siz git deponuzdakı faylların birdən commit olunmasını istəmirsiniz.
.gitignore
faylında nümunələr üçün qoya biləcəyiniz qaydalar bundan ibarətdir:
-
Boş xəttlər və ya
#
başlayan sətirlər nəzərə alınmır. -
Standart qlob naxışları və bütün bunlar işçi ağacında tətbiq olunacaq.
-
Rekursivliyə yol verməmək üçün naxışları irəli zolaqla (
/
) başlaya bilərsiniz. -
Bir qovluğu təyin etmək üçün nümunələri irəli bir xəttlə (
/
) bitirə bilərsiniz. *Nida (!) ilə başlayaraq bir nümunəni rədd edə bilərsiniz.
Qlob naxışlar gündəlik olaraq sadələşdirilən ifadələr kimidir. Bir ulduz (*
) sıfır və ya daha çox simvola uyğun gəlir; [abc]
mörtərizədəki istənilən simvola uyğundur (bu vəziyyətdə a,b və ya c); bir sual işarəsi (?
) bir simvola uyğun gəlir; defislə ayrılmış simvolları əhatə edən mörtərizələr ([0-9]
) aralarında olan hər hansı bir simvola uyğundur ( bu vəziyyətdə 0 ilə 9 arasında) iç-içə qovluqları uyğunlaşdırmaq üçün 2 **
ulduzdan da istifadə edə bilərsiniz; a/**/z
a/z
, a/b/z
, a/b/c/z
və s.
Budur başqa bir nümunə ``.gitignore` qovluğu:
# ignore all .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in any directory named build
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory and any of its subdirectories
doc/**/*.pdf
Tip
|
GitHub, layihəniz üçün bir başlanğıc nöqtəsi istəyirsinizsə https://github.com/github/gitignore-da sizin üçün onlarla layihə və dildə ``.gitignore` fayl nümunələrinin kifayət qədər əhatəli siyahısının saxlanıldığını görəcəksiniz.. |
Note
|
Ən sadə halda yəni normal olaraq bütün depolarda olan Detallara baxmaq üçün |
Mərhələli və Mərhələsiz Dəyişikliklərə Baxış
git status
əmri sizin üçün çox qeyri-müəyyəndirsə - yalnız hansı sənədlərin dəyişdirildiyini deyil, nəyi dəyişdirdiyinizi bilmək istəyirsiniz - git diff
əmrini istifadə edə bilərsiniz.
Daha sonra git diff
-u daha ətraflı açacağıq, ancaq bu iki suala cavab vermək üçün çox güman ki, istifadə edəcəksiniz: Nəsə dəyişmisiniz, amma hələ mərhələlərə ayrılmayıb?
Və nə mərhələlərə ayrılmışdır ki,siz onları commit edəcəksiniz?
git status
bu suallara ümumiyyətlə fayl adlarını sadalayaraq cavab versə də, git diff
sizə əlavə edilmiş və çıxarılan sətirləri göstərir - patch kimi.
Deyək ki, yenidən README
faylını redaktə etdiniz və mərhələlərə ayırdınız və sonra CONTRIBUTING.md
faylını mərhələlərə ayırmadan redaktə edin. git status
əmrinizi işlədirsinizsə, yenidən belə bir şey görürsünüz:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
Dəyişdirdiyiniz, lakin hələ mərhələlərə ayrılmamış olduğunu görmək üçün sadəcə git diff
yazın, başqa heç bir arqument ehtiyac yoxdur:
$ git diff
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
Please include a nice description of your changes when you submit your PR;
if we have to read the whole diff to figure out why you're contributing
in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.
If you are starting to work on a particular area, feel free to submit a PR
that highlights your work in progress (and note in the PR title that it's
Bu əmr işçi qovluğunuzdakılar ilə quruluş sahənizdəkiləri müqayisə edir. Nəticə hələ də mərhələlərə ayrılmamış dəyişiklikləri sizə bildirir.
Nəyi mərhələlərə ayırdığınızı görmək üçün git diff --staged
əmrindən istifadə edə biləcəksiniz.
Bu əmr mərhələli dəyişikliklərinizi son əmrinizlə müqayisə edir:
$ git diff --staged
diff --git a/README b/README
new file mode 100644
index 0000000..03902a1
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+My Project
Qeyd etmək vacibdir ki, git diff
özündə son commitdən bəri baş vermiş dəyişiklikləri göstərmir – yalnız hələ də mərhələlərə ayrılmayan dəyişikliklərdən başqa. Bütün dəyişikliklərinizi mərhələlərə ayırmısınızsa, git diff
heç bir nəticə verməyəcək.
Başqa bir misal üçün, CONTRIBUTING.md
faylını mərhələlərə ayırıb və sonra onu redaktə etsəniz,mərhələli fayldakı dəyişiklikləri və sabit olmayan dəyişiklikləri görmək üçün git diff
istifadə edə bilərsiniz. Əgər bunu görürsünüzsə:
$ git add CONTRIBUTING.md
$ echo '# test line' >> CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: CONTRIBUTING.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
İndi nəyin hələ də mərhələlərə ayrılmadığını görə bilmək üçün git diff
-dən istifadə edə bilərsiniz:
$ git diff
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 643e24f..87f08c8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -119,3 +119,4 @@ at the
## Starter Projects
See our [projects list](https://github.com/libgit2/libgit2/blob/development/PROJECTS.md).
+# test line
Və git diff --cached
indiyənə qədər mərhələlərə ayırdıqlarınızı görə bilmək üçündür.
(--staged
və --cached
sinonimdir.):
$ git diff --cached
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
Please include a nice description of your changes when you submit your PR;
if we have to read the whole diff to figure out why you're contributing
in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.
If you are starting to work on a particular area, feel free to submit a PR
that highlights your work in progress (and note in the PR title that it's
Note
|
Git Diff Xarici Alətdə
Kitabın qalan hissəsi ərzində |
Dəyişikliklərinizin Commit’lənməsi
Artıq mərhələlərə ayrılmış sahəniz istədiyiniz şəkildə qurulduğundan dəyişikliklərinizi edə bilərsiniz. Unutmayın ki, hələ də mərhələlərə ayılmamış bir şey –yəni yaratdığınız və dəyişdirdiyiniz hər hansı bir fayl onları redaktə etdiyinizdən bəri işləməmişdir - buna görə də bu commit`ə daxil olmayacaq. Diskinizdə dəyişdirilmiş fayllar kimi qalacaqlar. Bu vəziyyətdə, bildirək ki, git status
-u son dəfə işlətdikdə hər şeyin səhnəyə mərhələlərə ayrıldığını gördünüz, buna görə dəyişikliklərinizi commitləməyə hazırsınız.
Commit etməyin ən sadə yolu git commit
yazmaqdır:
$ git commit
Doing so launches your editor of choice.
Note
|
Bu, shell`nizin |
Redaktor aşağıdakı mətni göstərir (bu nümunə Vim ekranıdır):
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
# new file: README
# modified: CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
Default commit mesajında şərh edilmiş git status
əmrinin son çıxarışını və üstündə bir boş sətir olduğunu görürsünüz. Bu şərhləri silə və commit olunmuş mesajınızı yaza bilərsiniz və ya nə commit’lədiyinizi yadda saxlamağınız üçün onları tərk edə bilərsiniz.
Note
|
Dəyişdirdiyiniz şeyi daha aydın xatırlatmaq üçün, |
Redaktordan çıxdıqda, Git commit mesajlı commit’inizi yaradır (şərhlərlə və fərq ləğv olunur).
Alternativ olaraq, commit mesajınızı commit
əmrinə uyğun olaraq bir -m
flag’dan sonra göstərərək yaza bilərsiniz:
$ git commit -m "Story 182: fix benchmarks for speed"
[master 463dc4f] Story 182: fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README
Indi ilk commitinizi yaratdınız!
Gördüyünüz kimi commit özü haqqında sizə çıxarışlar vermişdir;hansı branch’la siz commit etdiniz (master
),nə qədər fayl dəyişdirilldiyini statiskalar commitdəki əlavə edilmiş və silinmiş xəttlər haqqındadır.
Siz hələ mərhələlərə ayrılmamış nə isə orada dəyişdirilmişdir; tarixinizə əlavə etmək üçün başqa bir commit edə bilərsiniz. Hər dəfə bir commit yerinə yetirdiyiniz zaman, geri qaytara biləcəyiniz və ya sonrakı ilə müqayisə edə biləcəyiniz layihənizin snapshotunuzu qeyd edirsiniz..
Mərhələləri Ayrılmış Sahəni Atlamaq
Sənətkarlıq commitləri istədiklərinizi dəqiq yerinə yetirmək üçün inanılmaz dərəcədə faydalı ola bilsə də, mərhələlərə ayırmaq sahəsi bəzən iş prosesinizdə lazım olduğundan biraz daha mürəkkəbdir.
Mərhələlərə ayırma sahəsini atlamaq istəyirsinizsə, Git sadə bir qısa yol təqdim edir. git command
əmrinə -a
variantını əlavə edərək, commit etmədən əvvəl izlənilən hər bir faylı avtomatik olaraq mərhələ halına gətirir, git add
hissəsini atlamağa imkan verir:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'Add new benchmarks'
[master 83e38c7] Add new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)
Commit etməyinizdən əvvəl bu vəziyyətdə CONTRIBUTING.md
faylına necə əlavə etməyiniz lazım olduğuna diqqət yetirin. Ona görə ki, -a
flag’ı bütün dəyişdirilmiş faylları daxil edir. Bu əlverişlidir, amma diqqətli olun; bəzən bu flag istənməyən dəyişiklikləri daxil etməyinizə səbəb olacaqdır.
Faylların Silinməsi
Git’dən bir fayl çıxarmaq üçün onu izlənilmiş fayllarınızdan çıxartmalısınız (daha doğrusu, mərhələləyə ayrılmış sahənizdən çıxarın) və sonra commit etməlisiniz. git rm
əmri bunu edir və həmçinin növbəti dəfə ətrafınıza izlənməmiş fayl kimi görmədiyiniz üçün faylı iş qovluğunuzdan çıxarır.
Faylı sadəcə işçi qovluqdan çıxarırsınız, bu, çıxma git status
çıxışınızdakı “Commit üçün mərhələlərə ayrılmamış dəyişikliklər” (yəni mərhələlərə ayrılmamış) altında göstərilir:
$ rm PROJECTS.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: PROJECTS.md
no changes added to commit (use "git add" and/or "git commit -a")
Sonra git rm
ilə işləsəniz, bu, faylın silinməsini mərhələləndirir:
$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md
Növbəti dəfə commit etdiyiniz zaman, fayl yox olacaq və artıq izlənilməyəcək. Fayl dəyişdirmisinizsə və ya əvvəlcədən mərhələlərə ayrılmış sahəyə əlavə etmisinizsə, -f
seçimi ilə çıxarılmanı məcbur etməlisiniz. Bu, əvvəlcədən görünməmiş və Git’dən bərpa olunmayan məlumatların təsadüfən çıxarılmasının qarşısını almaq üçün təhlükəsizlik xüsusiyyətidir.
Edə biləcəyiniz başqa faydalı bir şey, faylı iş ağacınızda saxlamaq, ancaq hazırlama sahənizdən çıxarmaqdır. Başqa sözlə, faylı sabit diskdə saxlamaq istəyə bilər, lakin artıq Git izləməməlidir.
.gitignore
faylınıza bir şey əlavə etməyi unutmusunuzsa və təsadüfən böyük bir giriş faylı və ya bir dəstə .a
tərtib edilmiş fayllar kimi mərhələlərə ayırsanız bu xüsusilə faydalıdır.
Bunu etmək üçün --cached
seçimdən istifadə edin:
$ git rm --cached README
git rm
əmrinə faylları, qovluqları və fayl-glob naxışlarını ötürə bilərsiniz. Bu kimi şeylər edə biləcəyinizi nəzərdə tutur:
$ git rm log/\*.log
*
önündəki (\
) qeyd edin.
Bu, Git’in qabığındakı (shell) fayl adının genişlənməsinə əlavə olaraq, öz ad genişləndirməsini həyata keçirdiyinə görə lazımdır.
Bu əmr log/
qovluğunda .log
genişlənməsinə sahib olan bütün faylları silir. Və ya bu kimi bir şey edə bilərsiniz:
$ git rm \*~
Bu əmr adları ~
ilə bitən bütün faylları silir.
Daşınan Fayllar
Bir çox digər VNS sistemlərindən fərqli olaraq, Git fayl hərəkətini dəqiq izləmir. Git-də bir faylın adını dəyişsəniz, Git’də faylın adını dəyişdiyinizi bildirən heç bir metadata qeyd olunmur. Bununla belə Git, faktdan sonra bunu bilmək üçün olduqca ağıllıdır - bir az sonra isə fayl hərəkətini aşkarlamaqla məşğul olacağıq.
Beləliklə, Git’in mv
komandası olması bir az çaşdırıcıdır. Git’də bir faylın adını dəyişdirmək istəyirsinizsə, belə bir şey işlədə bilərsiniz:
$ git mv file_from file_to
və yaxşı işləyir. Əslində, bu kimi bir şey işlədib statusa baxsan, Git’in adını dəyişmiş bir fayl hesab etdiyini görərsiniz:
$ git mv README.md README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Lakin, bu kimi bir şey işlətməyə bərabərdir:
$ mv README.md README
$ git rm README.md
$ git add README
Git bunun tamamilə adının dəyişdirildiyini göstərir, buna görə bir faylın bu şəkildə və ya mv əmri ilə dəyişdirilməsinin əhəmiyyəti yoxdur. Yeganə real fərq, git mv
-nin üç əmrin əvəzinə bir əmrin olması - rahatlıq funksiyasıdır. Daha əhəmiyyətlisi, bir faylın adını dəyişmək üçün istədiyiniz hər hansı bir vasitədən istifadə edə bilərsiniz və commit etməməzdən əvvəl add/rm ünvanına müraciət edə bilərsiniz.