Джерри работает над веткой wchar_support . Он меняет название функций и после тестирования фиксирует свои изменения.
[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;
После проверки кода он фиксирует свои изменения.
[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 [email protected]:project.git 64192f9..3789fe8 wchar_support -> wchar_support
Внесите изменения в мастер ветку
Тем временем в основной ветке Том также меняет имя той же функции и передает свои изменения в главную ветку.
[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;
После проверки различий он фиксирует свои изменения.
[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 [email protected]:project.git 64192f9..ad4b530 master -> master
В ветви wchar_support Джерри реализует функцию strchr для строки широких символов. После тестирования он фиксирует и передает свои изменения в ветку wchar_support .
[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;
После проверки он фиксирует свои изменения.
[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 [email protected]:project.git 3789fe8..9d201a9 wchar_support -> wchar_support
Решать конфликты
Том хочет посмотреть, что Джерри делает в своей частной ветке, поэтому он пытается извлечь последние изменения из ветки 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_operations.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;
Поскольку и Том, и Джерри изменили имя одной и той же функции, Git находится в замешательстве и просит пользователя разрешить конфликт вручную.
Том решает сохранить имя функции, предложенное Джерри, но он сохраняет добавленный им комментарий, как есть. После удаления маркеров конфликта 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@CentOS src]$ git commit -a -m 'Resolved conflict' [master 6b1ac36] Resolved conflict [tom@CentOS src]$ git pull origin wchar_support.
Том разрешил конфликт, теперь операция по извлечению удастся.