Git - Güncelleme İşlemi

Mevcut İşlevi Değiştirin

Tom, klonlama işlemini gerçekleştirir ve yeni bir dosya dizesi bulur. C. Bu dosyayı arşive kimin ve ne amaçla eklediğini bilmek istiyor, bu nedenlegit log komut.

[tom@CentOS ~]$ git clone [email protected]:project.git

Yukarıdaki komut aşağıdaki sonucu verecektir -

Initialized empty Git repository in /home/tom/project/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 726 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

Klonlama işlemi, geçerli çalışma dizini içinde yeni bir dizin oluşturacaktır. Dizini yeni oluşturulan dizine değiştirir vegit log komut.

[tom@CentOS ~]$ cd project/

[tom@CentOS project]$ git log

Yukarıdaki komut aşağıdaki sonucu verecektir -

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Günlüğü inceledikten sonra, temel dizgi işlemlerini gerçekleştirmek için string.c dosyasının Jerry tarafından eklendiğini fark eder. Jerry'nin kodunu merak ediyor. Böylece metin düzenleyicide string.c'yi açar ve hemen bir hata bulur. My_strlen işlevinde, Jerry sabit bir işaretçi kullanmıyor. Böylece Jerry'nin kodunu değiştirmeye karar verir. Değişiklikten sonra, kod aşağıdaki gibi görünür -

[tom@CentOS project]$ git diff

Yukarıdaki komut aşağıdaki sonucu verecektir -

diff --git a/string.c b/string.c
index 7da2992..32489eb 100644
--- a/string.c
+++ b/string.c
@@ -1,8 +1,8 @@
#include <stdio.h>
-size_t my_strlen(char *s)
+size_t my_strlen(const char *s)
{
   - char *p = s;
   + const char *p = s;
   while (*p)
   ++p;
}

Test ettikten sonra değişikliğini yapıyor.

[tom@CentOS project]$ git status -s
M string.c
?? string

[tom@CentOS project]$ git add string.c

[tom@CentOS project]$ git commit -m 'Changed char pointer to const char pointer'
[master cea2c00] Changed char pointer to const char pointer
1 files changed, 2 insertions(+), 2 deletions(-)

[tom@CentOS project]$ git log

Yukarıdaki komut aşağıdaki sonucu verecektir -

commit cea2c000f53ba99508c5959e3e12fff493b
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

Tom, değişikliklerini uygulamak için git push komutunu kullanır.

[tom@CentOS project]$ git push origin master

Yukarıdaki komut aşağıdaki sonucu verecektir -

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 336 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
d1e19d3..cea2c00 master −> master

Yeni İşlev Ekle

Bu arada, Jerry uygulamaya karar verir string compareişlevsellik. Yani string.c'yi değiştirir. Değişiklikten sonra dosya aşağıdaki gibi görünür -

[jerry@CentOS project]$ git diff

Yukarıdaki komut aşağıdaki sonucu verecektir -

index 7da2992..bc864ed 100644
--- a/string.c
+++ b/string.c
30Git Tutorials
@@ -9,9 +9,20 @@ size_t my_strlen(char *s)
return (p -s );
}
+char *my_strcpy(char *t, char *s)
+
{
   +
   char *p = t;
   +
   + while (*t++ = *s++)
   + ;
   +
   +
   return p;
   +
}
+
int main(void)
{
   int i; 
   +
   char p1[32];
   char *s[] = 
   {
      "Git tutorials",
      "Tutorials Point"
      @@ -20,5 +31,7 @@ int main(void)
      for (i = 0; i < 2; ++i)
      printf("string lenght of %s = %lu\n", s[i], my_strlen(s[i]));
      +
      printf("%s\n", my_strcpy(p1, "Hello, World !!!"));
      +
      return 0;
   }
}

Test ettikten sonra, değişikliğini zorlamaya hazır.

[jerry@CentOS project]$ git status -s
M string.c
?? string

[jerry@CentOS project]$ git add string.c

[jerry@CentOS project]$ git commit -m "Added my_strcpy function"
[master e944e5a] Added my_strcpy function
1 files changed, 13 insertions(+), 0 deletions(-)

İtme işleminden önce, günlük mesajlarını görüntüleyerek tamamlamayı doğrular.

[jerry@CentOS project]$ git log

Yukarıdaki komut aşağıdaki sonucu verecektir -

commit e944e5aab74b26e7447d3281b225309e4e59efcd
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Jerry değişikliklerden memnun ve değişikliklerini zorlamak istiyor.

[jerry@CentOS project]$ git push origin master

Yukarıdaki komut aşağıdaki sonucu verecektir -

To [email protected]:project.git
! [rejected]
master −> master (non-fast-forward)
error: failed to push some refs to '[email protected]:project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.

Ancak Git, Jerry'nin değişikliklerini zorlamasına izin vermiyor. Çünkü Git, uzak deponun ve Jerry'nin yerel deposunun senkronize olmadığını belirledi. Bu nedenle proje geçmişini kaybedebilir. Bu karmaşadan kaçınmak için Git bu işlemde başarısız oldu. Şimdi, Jerry önce yerel depoyu güncellemeli ve ancak bundan sonra kendi değişikliklerini zorlayabilir.

Son Değişiklikleri Getir

Jerry, yerel deposunu uzaktaki depoyla senkronize etmek için git pull komutunu çalıştırır.

[jerry@CentOS project]$ git pull

Yukarıdaki komut aşağıdaki sonucu verecektir -

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git.server.com:project
d1e19d3..cea2c00 master −> origin/master
First, rewinding head to replay your work on top of it...
Applying: Added my_strcpy function

Çekme işleminden sonra Jerry, günlük mesajlarını kontrol eder ve kayıt kimliğiyle Tom'un commit ayrıntılarını bulur. cea2c000f53ba99508c5959e3e12fff493ba6f69

[jerry@CentOS project]$ git log

Yukarıdaki komut aşağıdaki sonucu verecektir -

commit e86f0621c2a3f68190bba633a9fe6c57c94f8e4f
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function


commit cea2c000f53ba99508c5959e3e12fff493ba6f69
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

Şimdi, Jerry'nin yerel deposu, uzak depo ile tamamen senkronize edildi. Böylece değişikliklerini güvenle zorlayabilir.

[jerry@CentOS project]$ git push origin master

Yukarıdaki komut aşağıdaki sonucu verecektir -

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 455 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
cea2c00..e86f062 master −> master