Git - Operasi Pembaruan

Ubah Fungsi yang Ada

Tom melakukan operasi klon dan menemukan file string baru. C. Dia ingin tahu siapa yang menambahkan file ini ke repositori dan untuk tujuan apa, jadi, dia mengeksekusi filegit log perintah.

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

Perintah di atas akan menghasilkan hasil sebagai berikut -

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)

Operasi Clone akan membuat direktori baru di dalam direktori kerja saat ini. Dia mengubah direktori ke direktori yang baru dibuat dan menjalankan filegit log perintah.

[tom@CentOS ~]$ cd project/

[tom@CentOS project]$ git log

Perintah di atas akan menghasilkan hasil sebagai berikut -

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

Setelah mengamati log, dia menyadari bahwa file string.c telah ditambahkan oleh Jerry untuk mengimplementasikan operasi string dasar. Dia penasaran dengan kode Jerry. Jadi dia membuka string.c di editor teks dan segera menemukan bug. Dalam fungsi my_strlen, Jerry tidak menggunakan penunjuk konstan. Jadi, dia memutuskan untuk mengubah kode Jerry. Setelah modifikasi, kodenya terlihat sebagai berikut -

[tom@CentOS project]$ git diff

Perintah di atas akan menghasilkan hasil sebagai berikut -

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;
}

Setelah pengujian, dia melakukan perubahannya.

[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

Perintah di atas akan menghasilkan hasil sebagai berikut -

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 menggunakan perintah git push untuk mendorong perubahannya.

[tom@CentOS project]$ git push origin master

Perintah di atas akan menghasilkan hasil sebagai berikut -

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

Tambahkan Fungsi Baru

Sementara itu, Jerry memutuskan untuk menerapkannya string compareKegunaan. Jadi dia memodifikasi string.c. Setelah modifikasi, file tersebut terlihat seperti berikut -

[jerry@CentOS project]$ git diff

Perintah di atas akan menghasilkan hasil sebagai berikut -

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;
   }
}

Setelah pengujian, dia siap untuk mendorong kembaliannya.

[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(-)

Sebelum operasi push, dia memverifikasi komit dengan melihat pesan log.

[jerry@CentOS project]$ git log

Perintah di atas akan menghasilkan hasil sebagai berikut -

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 senang dengan perubahan tersebut dan dia ingin mendorong perubahannya.

[jerry@CentOS project]$ git push origin master

Perintah di atas akan menghasilkan hasil sebagai berikut -

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.

Tapi Git tidak mengizinkan Jerry untuk memaksakan perubahannya. Karena Git mengidentifikasi bahwa repositori jarak jauh dan repositori lokal Jerry tidak sinkron. Karena itu, dia bisa kehilangan sejarah proyek tersebut. Untuk menghindari kekacauan ini, Git gagal dalam operasi ini. Sekarang, Jerry harus memperbarui repositori lokal terlebih dahulu dan baru setelah itu, dia dapat menerapkan perubahannya sendiri.

Ambil Perubahan Terbaru

Jerry menjalankan perintah git pull untuk menyinkronkan repositori lokalnya dengan yang jauh.

[jerry@CentOS project]$ git pull

Perintah di atas akan menghasilkan hasil sebagai berikut -

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

Setelah operasi penarikan, Jerry memeriksa pesan log dan menemukan rincian komit Tom dengan ID komit cea2c000f53ba99508c5959e3e12fff493ba6f69

[jerry@CentOS project]$ git log

Perintah di atas akan menghasilkan hasil sebagai berikut -

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

Sekarang, repositori lokal Jerry sepenuhnya tersinkronisasi dengan repositori jarak jauh. Jadi dia bisa dengan aman mendorong perubahannya.

[jerry@CentOS project]$ git push origin master

Perintah di atas akan menghasilkan hasil sebagai berikut -

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