Командная работа в Git
Прежде чем читать эту статью, вам нужно прочитать статью Работа с Git, что это такое - Git?
Командная работа в git
Git удобное средство для работы с кодом в команде. При этом он не ограничивает членов команды географически: члены команды могут находиться в любом месте планеты, в любое время работать с кодом. Главное периодически синхронизировать код с общим удаленным репозиторием: получать новые изменения и загружать свои изменения.
В этой статье я расскажу как это делается.
1. Получение чужого репозитория
Чтобы начать работать с общим кодом. Кто-то должен создать репозиторий для этого. Потом дать доступ записи другим членам команды. В Bitbucket это делает в настройках репозитория (Settings). Там есть раздел "User and group access", там добавляете другого пользователя с правами Write. Теперь этот человек имеет доступ к вашему репозиторию и может делать пуши в него.
Чтобы загрузить на свой комп репозиторий используется команда git clone с указанием git-ссылки на репозиторий.
Открываем командную строку, переходим в папку с нашими проектами и выполняем, заменим ссылку на нужный:
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. У вас появится окно с конфликтными файлами.
Выбираем файлы по очереди и нажимаем кнопку Merge. После этого появится трехстороннее окно. Слева ваши локальные изменения, справа то, что пришло с удаленного сервера, посередине конечный результат.
Все изменения отмечены цветами. Зеленые изменения безобидные. Их можно сразу применять. Красные изменения это конфликтные. Нужно внимательно смотреть с двух сторон и решить применять с двух сторон или только с одной стороны.
Рядом с каждым изменением есть две кнопки выбора: 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). А потом только выгружать свои.