Git - Hoạt động cập nhật

Sửa đổi chức năng hiện có

Tom thực hiện thao tác sao chép và tìm một tệp mới string.c. Anh ta muốn biết ai đã thêm tệp này vào kho lưu trữ và cho mục đích gì, vì vậy, anh ta thực hiệngit log chỉ huy.

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

Lệnh trên sẽ cho kết quả sau:

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)

Thao tác Clone sẽ tạo một thư mục mới bên trong thư mục làm việc hiện tại. Anh ta thay đổi thư mục thành thư mục mới được tạo và thực hiệngit log chỉ huy.

[tom@CentOS ~]$ cd project/

[tom@CentOS project]$ git log

Lệnh trên sẽ cho kết quả sau:

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

Sau khi quan sát nhật ký, anh nhận ra rằng tệp string.c đã được Jerry thêm vào để thực hiện các hoạt động chuỗi cơ bản. Anh ấy tò mò về mật mã của Jerry. Vì vậy, anh ta mở string.c trong trình soạn thảo văn bản và ngay lập tức tìm thấy một lỗi. Trong hàm my_strlen, Jerry không sử dụng con trỏ hằng. Vì vậy, anh ta quyết định sửa đổi mã của Jerry. Sau khi sửa đổi, mã trông như sau:

[tom@CentOS project]$ git diff

Lệnh trên sẽ cho kết quả sau:

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

Sau khi thử nghiệm, anh ấy cam kết sự thay đổi của mình.

[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

Lệnh trên sẽ cho kết quả sau:

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 sử dụng lệnh git push để đẩy các thay đổi của mình.

[tom@CentOS project]$ git push origin master

Lệnh trên sẽ cho kết quả sau:

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

Thêm chức năng mới

Trong khi đó, Jerry quyết định thực hiện string comparechức năng. Vì vậy, anh ta sửa đổi string.c. Sau khi sửa đổi, tệp trông như sau:

[jerry@CentOS project]$ git diff

Lệnh trên sẽ cho kết quả sau:

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

Sau khi thử nghiệm, anh ấy đã sẵn sàng để thúc đẩy sự thay đổi của mình.

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

Trước khi hoạt động đẩy, anh ta xác minh cam kết bằng cách xem thông báo nhật ký.

[jerry@CentOS project]$ git log

Lệnh trên sẽ cho kết quả sau:

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 hài lòng với những thay đổi và anh ấy muốn thúc đẩy những thay đổi của mình.

[jerry@CentOS project]$ git push origin master

Lệnh trên sẽ cho kết quả sau:

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.

Nhưng Git không cho phép Jerry thúc đẩy những thay đổi của mình. Bởi vì Git đã xác định rằng kho lưu trữ từ xa và kho lưu trữ cục bộ của Jerry không đồng bộ. Vì điều này, anh ta có thể làm mất lịch sử của dự án. Để tránh tình trạng lộn xộn này, Git đã không thực hiện được thao tác này. Bây giờ, Jerry phải cập nhật kho lưu trữ cục bộ đầu tiên và chỉ sau đó, anh ta có thể đẩy các thay đổi của riêng mình.

Tìm nạp các thay đổi mới nhất

Jerry thực hiện lệnh git pull để đồng bộ hóa kho lưu trữ cục bộ của mình với kho lưu trữ từ xa.

[jerry@CentOS project]$ git pull

Lệnh trên sẽ cho kết quả sau:

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

Sau thao tác kéo, Jerry kiểm tra thông báo nhật ký và tìm chi tiết về cam kết của Tom với ID cam kết cea2c000f53ba99508c5959e3e12fff493ba6f69

[jerry@CentOS project]$ git log

Lệnh trên sẽ cho kết quả sau:

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

Bây giờ, kho lưu trữ cục bộ của Jerry được đồng bộ hoàn toàn với kho lưu trữ từ xa. Vì vậy, anh ấy có thể đẩy các thay đổi của mình một cách an toàn.

[jerry@CentOS project]$ git push origin master

Lệnh trên sẽ cho kết quả sau:

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