Вам представляется задание на проверку знаний системы контроля версий git.
git успешно применяется для совместной работы над большими проектам, в работе над которыми задействованы тысячи программистов, как например ядро Linux, поэтому в этом задании и вам нужно работать сообща. Обратите внимание, что, в отличии от домашних заданий, на этот раз репозиторий один на всех. Это означает, что каждый может и загружать свои изменения на GitHub, и получать все изменения с GitHub.
В начале работы в ветке master
репозитория есть файл students.txt
, ваша задача состоит в том, чтобы к концу зачета в репозитории оказался граф коммитов, составленный по определенным правилам, указанным ниже. Каждый из вас должен создать отдельную ветку (branch), название которой совпадает с вашим логином на GitHub, и производить все манипуляции только в этой ветке.
Для успешного выполнения задания в последнем коммите вашей ветке в файле students.txt
должно находиться не менее 70 процентов имен студентов, принявших участие в зачете, включая ваше собственное имя.
Каждая строка должна содержать только одно имя.
В вашей ветке вам разрешается изменять только файл students.txt
и только следующим образом:
- Можно добавлять (и с помощью команды
git commit
зафиксировать изменения) в файл строку со своим и только со своим именем.
Ваше имя должно быть укзаанно в таком же формате, в котором оно указано в поле
Author
в метаинформации к вашим коммитам:Имя <e-mail>
, напримерIvan Ivanov <ivan@example.ru>
. Эту строку вы можете посмотреть с помощьюgit log
в других ваших репозиториях или напечать с помощью командыecho $(git config user.name)" <"$(git config user.email)">"Для удобства, в исходном файле
students.txt
размещен пример формата записи, удалять его не нужно.
-
Чтобы получить коммиты содержащие имена товарищей действует второе правило. Разрешается получать (
git pull
) и сливать (git merge
) изменения из веток других студентов, чтобы получить недостающие коммиты содержащие строки с чужими для вас именами (каждое такое имя для кого-то будет являться своим, а значит будет добавлено и загружено на GitHub по правилу 1). -
При разрешении конфликтов слияния допускается переставлять существующие строки в произвольном порядке и убирать дубликаты.
-
Запрещается использовать
git rebase
,git cherry-pick
и другие средства редактирования истории ;-)
- Рекомендуется чаще отправлять изменения на GitHub.
- Не забудьте добавить своё собственное имя в файл.
- Обратите внимание, что слияние с веткой студента X позволяет получить коммиты со всеми записями которые там хранились на момент слияния, включая те, которые сам студент X успел подобрать у своих товарищей.
- Отсюда следует, что при идеальной кооперации каждому потребуется выполнить порядка
log(N)
слияний (N = всего людей на зачете
). Тогда можно предполагать что всеми студентами суммарно будет выполнено не болееO(NlogN)
операций слияний. - Обратите внимание, что существует стратегия, предполагающая, что суммарное число слияний выполненных всеми студентами линейно по количеству людей на зачете.
- Отсюда следует, что при идеальной кооперации каждому потребуется выполнить порядка