Интерактивный ребаз с --autosquash
- это то, что я часто использую, когда мне нужно исправить предыдущие коммиты глубже в истории. Это существенно ускоряет процесс, который иллюстрирует ответ ZelluX, и особенно удобно, когда вам нужно отредактировать более одного коммита.
Из документации:
--autosquash
Когда сообщение журнала фиксации начинается с «squash!…» (Или «fixup!…»), И там это коммит, название которого начинается с того же самого…, автоматически изменяйте список задач rebase -i, чтобы коммит, помеченный для сквошинга, пришел сразу после коммита, подлежащего изменению
Предположим, у вас есть история это выглядит следующим образом:
$ git log --graph --oneline
* b42d293 Commit3
* e8adec4 Commit2
* faaf19f Commit1
и у вас есть изменения, которые вы хотите изменить в Commit2, затем зафиксируйте свои изменения, используя
$ git commit -m "fixup! Commit2"
, в качестве альтернативы вы можете использовать commit-sha вместо сообщение коммита, так что "fixup! e8adec4
или даже просто префикс сообщения коммита.
Затем инициируйте интерактивную перебазировку при коммите до
$ git rebase e8adec4^ -i --autosquash
, ваш редактор откроется с коммитами, уже правильно упорядоченными
pick e8adec4 Commit2
fixup 54e1a99 fixup! Commit2
pick b42d293 Commit3
, все что вам нужно сделать, это сохранить и выйти
Я действительно не понимаю, о чем ваш вопрос. Нетрудно написать спецификацию дизайна для судьи с нуля.
Вы запускаете объект с заданными входными данными и передаете выходные данные в тестовую программу, написанную автором вопроса (потому что не всегда есть уникальный ответ). Люди делают песочницу, запуская ее удаленно на чистой машине.
Добавьте : и, пожалуйста, без анализа кода. У вас есть два варианта: либо сделать этот анализ кода доступным участникам во время конкурса, либо нет.
Если да: они тратят последние 5 минут своего времени, чтобы убедиться, что нет отрицательных баллов. Код становится намного хуже в процессе.
Если вы этого не сделаете: вы нарушите «верховенство закона»: люди знают механизм начисления баллов (также, что « s почему вы всегда даете им первый тест в тексте задачи).
Обновление: Извините, я сначала не заметил, что вы задаете какие-то конкретные вопросы. Песочница может быть менее важной, чем вы думаете - при хорошей конкуренции код становится общедоступным, так что «хакеры» будут действительно смущены. Тем не менее, я думаю, что видел практику, в которой вы не можете выполнять ввод-вывод, файловую систему или любое другое взаимодействие с системой напрямую (они пишут main ()
для вас, и это всегда одно и то же; вы только написать часть алгоритма с заданными потоками ввода / вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника.
main ()
для вас, и это всегда одно и то же; вы только написать часть алгоритма с заданными потоками ввода / вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника. Песочница может быть менее важной, чем вы думаете - при хорошей конкуренции код становится общедоступным, так что «хакеры» будут действительно смущены. Тем не менее, я думаю, что видел практику, в которой вы не можете выполнять ввод-вывод, файловую систему или любое другое взаимодействие с системой напрямую (они пишут main ()
для вас, и это всегда одно и то же; вы только написать часть алгоритма с заданными потоками ввода / вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника. вы пишете только часть алгоритма с заданными потоками ввода / вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника. вы пишете только часть алгоритма с заданными потоками ввода / вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника. Я бы сказал, что это чрезвычайно опасно на многих уровнях. По сути, вы открываете себя для любого эксплойта, который может быть обнаружен в вашей системе (тогда как обычно вы ограничены теми, которые люди могут использовать удаленно). Я бы сказал, не делайте этого, если вы можете этого избежать.
Если вы действительно хотите это сделать, вы можете использовать какую-то виртуальную машину для запуска кода пользователя. Используя что-то вроде KVM , можно настроить несколько виртуальных машин, используя один и тот же базовый образ (вы даже можете сохранить снимок в уже загруженном состоянии, хотя я не уверен, как он будет обрабатывать клонировано). Затем вы можете создать виртуальные машины по запросу, запустить код пользователя, вернуть результаты, а затем отключить виртуальную машину. Если вы держите виртуальные машины изолированными друг от друга и от сети, пользователи могут нанести любой ущерб, который они хотят, и это не повредит вашему физическому серверу. Единственная опасность, которой вы подвергаете себя в этих условиях, - это какой-то эксплойт, позволяющий им уйти из виртуальной машины ... они крайне редки и будут более редкими по мере улучшения аппаратной виртуализации.
client = firefox-aЯ не уверен, что такое онлайн-судья, но предполагаю, что это часть программного обеспечения для оценки правильности программ.
Я бы использовал для этого некоторые библиотеки сборки, тестирования и анализа . Примеры: Ant , JUnit и Checkstyle .
Вы должны взять код, предоставленный участником, и поместить его в файл. Используйте инструмент сборки для его компиляции.
Затем запустите несколько тестов, которые проверяют правильность решения.
Наконец, запустите какую-нибудь утилиту анализа кода, чтобы оценить качество кода.
Конечно, вы можете захотеть изменить укажите значение, соответствующее вашим потребностям.