Начинаем работать с системой контроля версий GIT (для чайников)
(Часть 4.4.3. Основы работы с удаленным репозиторием)
1. Устанавливаем Git.
2. Создаем репозиторий Git.
3. Устанавливаем SmartGit для работы с репзиторием.
4. Основы Работа с репозиторием Git.
4.1. Создаем проект для работы с репозиторием.
4.2. Добавляем первый файл в локальный репозиторий.
4.3. Вносим изменение в локальный репозиторий.
4.3.1. Добавляем строки в файл.
4.3.2. Изменяем строки в файле.
4.3.3. Удаляем строки из файла.
4.3.4. Отменяем изменения до загрузки в локальный репозиторий.
4.3.5. Добавляем новые файлы в репозиторий.
4.3.6. Удаляем файл из репозитория.
4.3.7. Просматриваем историю изменений репозитория.
4.3.8. Изменяем комментарий коммита.
4.3.9. Отменяем последний коммит.
4.3.10. Создаем новую ветку.
4.3.10.1. Новая ветка относительно последнего коммита.
4.3.10.2. Новая ветка относительно выбранного коммита.
4.3.11. Удаляем ветку.
4.3.12. Объединяем ветки.
4.3.13. Конфликты и их разрешение.
4.3.14. Добавляем выбранный коммит из одной ветки в другую.
4.3.15. Rebase или как упростить историю коммитов.
4.4. Работа с удаленным репозиторием.
4.4.1. Настраиваем связь между сервером и клиентом по SSH.
4.4.2. Клонируем репозиторий с ЭВМ-сервера на ЭВМ-клиент.
4.4.3. Основы работы с удаленным репозиторием.
5. Заключение.
4.4.3. Основы работы с удаленным репозиторием.
После нажатия на кнопку finish и копирования репозитория откроется основное окно программы SmartGit (рисунок 73) с клонированным репозиторием.
В первую очередь зайдите в меню View (рисунок 74) и отметьте галочкой пункт «Show Unchanged Files», чтобы все файлы вашего проекта отображались во вкладке Files. Если вы следовали всем советам этой статьи, то у вас будет отображено там два файла main.c и prog.c (рисунок 73) являющиеся точными копиями файлов из проекта на ЭВМ-сервере.
Теперь обратите свое внимание на вкладку Branches, основные отличия отображаются именно здесь (рисунок 74). По сравнению с аналогичной вкладкой отображаемой при работе с репозиторием на ЭВМ-сервере здесь появились две ветки origin. Ветки origin (master и next) соответствуют точному состоянию одноименных веток в репозитории на ЭВМ сервере.
Так же появились ветки Local Branches, точнее одна ветка master. Дело в том, что при клонировании автоматически создается локальная копия ветки, которая была активна на клонируемом репозитории. В нашем случае была активна ветка master, по этому автоматически была создана локальная ветка master, являющаяся точной копией одноименной ветки репозитрия на ЭВМ сервере.
При первом переключении на ветку original Next автоматически будет создана и ее локальная копия. Я переключаться на ветку next не буду, а покажу как работать с удаленным репозиторием на примере ветки master. Работа с веткой next будет полностью аналогична.
По традиции работу с удаленным репозиторием будет рассматривать на примерах. И в первую очередь, что надо сделать при начале работы - это скопировать последние изменения с удаленного репозитория. Лучше всего это делать как можно чаще, чтобы избежать конфликтов из-за большого числа изменения на удаленном репозитории и вашем локальным. Чем чаще вы синхронизируетесь, тем менее вероятны конфликты возникающие из-за изменения одного и того же файла между двумя синхронизациями репозиториев.
Чтобы рассмотреть, как происходит копирование последних изменения из удаленного репозитория, внесем следующие изменения в файл main.c на ЭВМ сервере:
#include < stdio.h >
#include < unistd.h >
double t=0.1;
int y=7;
double g=6.9;
int main (void)
{
int k=0;
printf (“Hello word!!!\n”);
y=y+3;
g=g+t;
sleep (5);
t=g;
return k;
}
Синим цветом выделена добавленная строка. Cохраним изменение в репозиторий с комментарием: «Change on the Server PC». И так, теперь в репозитории ЭВМ-сервера есть изменения, которых нет в репозитории ЭВМ-клиента. Давайте скопируем их, для чего нажмите в основном окне программы SmartGit ЭВМ-клиента кнопку «Pull»:
Так как это наше первое копирование, то откроется окно (рисунок 75) в котором нас попросят ввести настройки копирования: Выбрать между Rebase и Merge.
Чем они отличаются, я описывал в главе 4.3.15., по этому повторяться не буду. Я выберу Merge, такк ак репозиторий у нас маленький и будет нагляднее видна история изменения. Для больших репозиториев целесообразнее выбирать Rebase. Сделав свой выбор, жмем кнопку Configure. Настройка делается один раз и при последующем копировании окно появляться не будет. В последствии можно настроить копирование из меню программы SmarGit.
После нажатия кнопки Configure, откроется окно (рисунок 76), которое будет впоследствии появляться при каждом копировании новых изменений из репозитория ЭВМ-сервера.
В открывшемся окне указан адрес удаленного репозитория, откуда будут скопированы изменения отсутствующие в локальном репозитории и предложены возможные действия после копирования изменения (для просмотра списка действия нужно нажать на строку «and merge with local changes»). Установки по умолчанию вполне нас устраивают на этапе обучения работы с репозиторием и для копирования изменения достаточно просто нажать кнопку Pull.
После нажатия кнопки Pull, все изменения, относящиеся к текущей ветки локального репозитория, будут скопированы с удаленного репозитория в локальный. Чтобы убедиться в этом посмотрите файл main.c локального репозитория. Он будет идентичен файлу main.c на удаленном репозитории. А в истории коммитов появится коммит с именем «Change on the Server PC», который мы сохраняли на ЭВМ-сервере. На рисунке 77 приведена история коммитов репозитория ЭВМ-клиента.
Теперь давайте разберемся как изменения, сделанные в репозитории ЭВМ-клиента, добавить в репозиторий ЭВМ-сервера. Для начала внесем следующие изменения в файл main.с локального репозитория:
#include < stdio.h >
#include < unistd.h >
double t=0.1;
int y=7;
double g=6.9;
int main (void)
{
int k=0;
printf (“Hello word!!!\n”);
y=y+3;
g=g+t;
sleep (5);
t=g;
printf (“%f\n”,t)
return k;
}
Синим цветом выделена добавленная строка. Cохраним изменения в репозиторий с комментарием: «Change on the Client PC». Обращаю ваше внимание, что изменения сохранены только локально и если вы посмотрите историю коммитов (рис унок 78), то увидите, что ветка master локального репозитория разошлась с ветокой master удаленного репозитория (origin master), которая отстает на один коммит.
Чтобы добавить наши изменения в удаленный репозиторий на ЭВМ сервер нажмите в основном окне программы SmartGit кнопку Push:
В открывшемся окне (рисунок 79) выбираем объем изменения передаваемых на сервер (только изменения текущей ветки «Current branch ‘master’» или изменения всех веток имеющихся и на удаленном и на локальном репозиториях «all ‘matching’ branches (already existing remotely)»). Так как мы изменяли только текущую ветку, то я выберу «Current branch ‘master’». Далее жмем Push. Всё, все изменения ветки master добавлены в удаленный репозиторий на ЭВМ-сервер.
Чтобы убедиться в этом, откроем окно лога коммитов локального репозитория (рисунок 80), где увидим, что состояние ветки удаленного репозитория на ЭВМ-сервере (origin master) соответствует состоянию ветки master в локальном репозитории на ЭВМ-клиенте.
Внимание! Перед загрузкой изменений из локального репозитория в удаленный (push) обязательно скопируйте все изменений из удаленного репозиторий (pull), иначе будет выдано сообщение об ошибке загрузки изменений в удаленный репозиторий типа «’master’ rejected (non-fast-forward)».
Внимание! Если в момент загрузки Ваших изменений в удаленный репозиторий на ЭВМ сервере открыт SmartGit и выбрана активной ветка, в которую вы хотите загрузить ваши локальные изменения, то будет выдано сообщение об ошибке типа: «’master’ rejected (non-fast-forward)», даже если все изменения данной ветки удаленного репозитория скачены в локальный репозиторий. Поэтому рекомендуется в качестве ЭВМ-сервера выбирать отдельную ЭВМ на которой не ведется разработка ПО и пользователи не работают с репозиторием непосредственно на этой машине, а только удаленно на ЭВМ-клиентах.
Добавление третьего и последующих удаленных пользователей производится абсолютно так же, как и мы добавляли второго пользователя.
<<< Предыдущий раздел Следующий раздел >>>
|