Командная работа в Git

Прежде чем читать эту статью, вам нужно прочитать статью Работа с Git, что это такое - Git?

Командная работа в git

Git удобное средство для работы с кодом в команде. При этом он не ограничивает членов команды географически: члены команды могут находиться в любом месте планеты, в любое время работать с кодом. Главное периодически синхронизировать код с общим удаленным репозиторием: получать новые изменения и загружать свои изменения.

В этой статье я расскажу как это делается.

1. Получение чужого репозитория 

Чтобы начать работать с общим кодом. Кто-то должен создать репозиторий для этого. Потом дать доступ записи другим членам команды. В Bitbucket это делает в настройках репозитория (Settings). Там есть раздел "User and group access", там добавляете другого пользователя с правами Write. Теперь этот человек имеет доступ к вашему репозиторию и может делать пуши в него.

Чтобы загрузить на свой комп репозиторий используется команда git clone с указанием git-ссылки на репозиторий. 

Screen Shot 2017-01-09 at 8.57.11 AM.png

Открываем командную строку, переходим в папку с нашими проектами и выполняем, заменим ссылку на нужный:

git clone https://myself@bitbucket.org/someone/remote-repository.git

При необходимости введите имя пользователя и пароль.

После этого репозиторий склонируется(скопируется) в папку с названием репозитория, или вы можете указать в какую папку его клонировать так:

git clone https://myself@bitbucket.org/someone/remote-repository.git тут_название_папки

Все. Теперь весь код есть и у вас. Можете делать что хотите с ним.

2. Получение новых изменений

При работе в команде, кто-то кроме вас тоже будет менять код. Поэтому каждому нужно периодически загружать к себе новые изменения с удаленного репозитория, чтобы ваш код был всегда свежим. 

Перед тем как загружать новые изменения у вас локально не должны быть незакоммиченные изменения. Поэтому, если у вас незакоммиченные изменения(git status показывает файлы), то у вас есть два варианта:

---1. Закоммитить свои изменения

git add .
git commit -m "Сделал то, сделал это"

---2. Временно "положить свои изменения в карман" git

git stash

После того, как вы положите изменения в карман, они у вас пропадут. Потом вы должны их обратно вытащить. Как это делается описано внизу.

Теперь у вас нет незакоммиченных изменений, можно приступать к получению новых изменений с удаленного репозитория.

для этого выполните команду:

git pull --rebase 

При загрузке новых изменений, если у вас были свои локальные коммиты, то могут возникнуть конфликтные ситуации. Это происходит когда вы и другой член команды изменяли один и тот же файл. Если есть конфликты, то будет написано в ошибке после команды git pull --rebase:

CONFLICT (content): Merge conflict in ..

Если нет конфликтов, то новые изменения загрузятся на ваш комп. Иначе, вам придется решать конфликты. 

3. Решение конфликтов слияния

Если вы откроете файл с конфликтами, вы увидите примерно следующее

<<<<<<< 57f30a6b8ca7d88e091d6f5c6758a640dff9a429
def page1(request):
    return HttpResponse("It is page 1")
=======
class PollListView(TemplateView):
    template_name = "polls_list.html"
>>>>>>> Test 2

Чтобы исправить конфликты, нужно заново открыть проект в PyCharm. Если сверху появится уведомления "Git root detected", выбрать "Add root". 

Потом в меню PyCharm выбрать VCS->Git->Resolve Conflicts. У вас появится окно с конфликтными файлами. 

Screen Shot 2017-01-09 at 9.54.01 AM.png

Выбираем файлы по очереди и нажимаем кнопку Merge. После этого появится трехстороннее окно. Слева ваши локальные изменения, справа то, что пришло с удаленного сервера, посередине конечный результат. Screen Shot 2017-01-09 at 10.00.19 AM.png

Все изменения отмечены цветами. Зеленые изменения безобидные. Их можно сразу применять. Красные изменения это конфликтные. Нужно внимательно смотреть с двух сторон и решить применять с двух сторон или только с одной стороны. 

Рядом с каждым изменением есть две кнопки выбора: x и >> или  << и x. Кнопка x - отменяет изменения, т.е. это изменение не попадет в конечный результат. А стрелки >> и << применяют изменение(добавляют в результат слияния). Вам нужно пройтись по всем изменениям и выбрать: либо применять, либо отменять. 

После того, как вы пройдетесь по всем, нужно нажать кнопку Apply и слияния завершится. И там со всеми конфликтными файлами. Если после слияния в файле остались ошибки, исправьте их вручную. 

После того как все конфликтные файлы будут исправлены, нужно перейти в командную строку и завершить слияние командой:

git rebase --continue

Теперь у вас есть все последние изменения с удаленного репозитория.

4. Вытаскивание изменений из кармана

Если вы перед командой git pull сохраняли свои изменения в карман(stash), то после успешного получения изменений вам нужно вытащить изменения обратно. Для этого вводим команду:

git stash pop

Теперь командой git status можно посмотреть какие изменения были у вас. 

Проверить есть ли что-то в кармане можно проверить командой

git stash list

Если команда что-то показала, значит у вас есть изменения в кармане и их нужно вытащить, либо удалить. Для удаления введите команду:

git stash clear

5. Выгрузка изменений в удаленный репозиторий(сервер)

Вы уже знаете как делать. Если у вас есть локальные коммиты, то их нужно выгрузить на сервер, чтобы другие тоже могли получить ваши изменения. Для этого закоммитьте все ваши изменения и выполните команду

git push origin master

Если сервер скажет, что нельзя, то значит на сервере есть какие -то чужие изменения. Надо вам сначала к себе загрузить(пункт 1). А потом только выгружать свои.

1051 15
Alisher Alikulov