Git - سیستم های انتقال مواد درگیری



انجام تغییرات در wchar_support Branch

Jerry مشغول کار در wchar_support است. او نام توابع را تغییر میدهد و بعد از تست کردن کدها، آنها را commit میکند:

[jerry@CentOS src]$ git branch
 master
* wchar_support
[jerry@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

diff --git a/src/string_operations.c b/src/string_operations.c
index 8fb4b00..01ff4e0 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,7 +1,7 @@
#include <stdio.h>
#include <wchar.h>
-size_t w_strlen(const wchar_t *s)
+size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

او بعد از بازبینی کد، تغییرات را commit میکند:

[jerry@CentOS src]$ git status -s
M string_operations.c

[jerry@CentOS src]$ git add string_operations.c

[jerry@CentOS src]$ git commit -m 'Changed function name'
[wchar_support 3789fe8] Changed function name
1 files changed, 1 insertions(+), 1 deletions(-)

[jerry@CentOS src]$ git push origin wchar_support

دستورات بالا نتایج زیر را در برخواهند داشت:

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 409 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
64192f9..3789fe8 wchar_support -> wchar_support

انجام تغییرات در master branch

Tom در همین هنگام در master branch تغییراتی را در نام توابع ایجاد کرده و تغییراتش را در push, master branch میکند:

[tom@CentOS src]$ git branch
* master
[tom@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

diff --git a/src/string_operations.c b/src/string_operations.c
index 8fb4b00..52bec84 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,7 +1,8 @@
#include <stdio.h>
#include <wchar.h>
-size_t w_strlen(const wchar_t *s)
+/* wide character strlen fucntion */
+size_t my_wc_strlen(const wchar_t *s)
{
   const wchar_t *p = s;

بعد از بازبینی با diff او تغییراتش را commit میکند:

[tom@CentOS src]$ git status -s
M string_operations.c

[tom@CentOS src]$ git add string_operations.c

[tom@CentOS src]$ git commit -m 'Changed function name from w_strlen to my_wc_strlen'
[master ad4b530] Changed function name from w_strlen to my_wc_strlen
1 files changed, 2 insertions(+), 1 deletions(-)

[tom@CentOS src]$ git push origin master

دستورات بالا نتایج زیر را در برخواهند داشت:

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 470 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
64192f9..ad4b530 master -> master

در Jerry, wchar_support branch تابع strchr را افزوده است. بعد از تست، او تغییرات را در commit, wchar_support branch و push میکند

[jerry@CentOS src]$ git branch
master
* wchar_support
[jerry@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

diff --git a/src/string_operations.c b/src/string_operations.c
index 01ff4e0..163a779 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,6 +1,16 @@
#include <stdio.h>
#include <wchar.h>
+wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   while (*ws) 
   {
      +
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

بعد از بازبینی تغییرات، او آنها را commit میکند:

[jerry@CentOS src]$ git status -s
M string_operations.c

[jerry@CentOS src]$ git add string_operations.c

[jerry@CentOS src]$ git commit -m 'Addded strchr function for wide character string'
[wchar_support 9d201a9] Addded strchr function for wide character string
1 files changed, 10 insertions(+), 0 deletions(-)

[jerry@CentOS src]$ git push origin wchar_support

دستورات بالا نتایج زیر را در برخواهند داشت:

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 516 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
3789fe8..9d201a9 wchar_support -> wchar_support

مواجه شدن با بهم ریختگیها

Tom میخواهد ببیندJerry چه کار میکند، بنابراین سعی میکند که آخرین تغییرات را از pull, wchar_support کند اما git این عمل را لغو میکند و خطایی را نمایش میدهد:

[tom@CentOS src]$ git pull origin wchar_support

دستورات بالا نتایج زیر را در برخواهند داشت:

remote: Counting objects: 11, done.
63Git Tutorials
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From git.server.com:project
* branch
wchar_support -> FETCH_HEAD
Auto-merging src/string_operations.c
CONFLICT (content): Merge conflict in src/string_operations.c
Automatic merge failed; fix conflicts and then commit the result.

حل کردن بهم ریختگیها

از پیغام خطای بالا متوجه میشویم که مشکلی در src/string.c به وجود آمده است. او git diff را برای مشاهده جزئیات بیشتر اجرا میکند:

[tom@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

diff --cc src/string_operations.c
index 52bec84,163a779..0000000
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@@ -1,8 -1,17 +1,22 @@@
#include <stdio.h>
#include <wchar.h>
++<<<<<<< HEAD
+/* wide character strlen fucntion */
+size_t my_wc_strlen(const wchar_t *s)
++=======
+ wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   +
   while (*ws) 
   {
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
+ size_t my_wstrlen(const wchar_t *s)
++>>>>>>>9d201a9c61bc4713f4095175f8954b642dae8f86
{
   const wchar_t *p = s;

از آنجایی که هم Tom و هم Jerry نام توابع را تغییر دادهاند git نمیداند چه کار کند بنابراین از کاربر میخواهد که به شکل دستی بهم ریختگی را اصلاح کند

Tom تصمیم میگیرد از نامهای توابع Jerry استفاده کند، اما او commit را همانطور که هست )خودش ایجاد کرد( نگه میدارد، بعد از حل کردن بهم ریختگی باgit diff نتایج زیر را بدست میآید

[tom@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

diff --cc src/string_operations.c
diff --cc src/string_operations.c
index 52bec84,163a779..0000000
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@@ -1,8 -1,17 +1,18 @@@
#include <stdio.h>
#include <wchar.h>
+ wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   while (*ws) 
   {
      +
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
+/* wide character strlen fucntion */
- size_t my_wc_strlen(const wchar_t *s)
+ size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

بعد از دستکاری فایلها Tom تغییرات را commit و بعد از آن pull میکند:

[tom@CentOS src]$ git commit -a -m 'Resolved conflict'
[master 6b1ac36] Resolved conflict

[tom@CentOS src]$ git pull origin wchar_support.

Tom بهم ریختگی را حل کرد، حالا میتواند تغییرات را pull کند

Advertisements