Это - никоим образом не исчерпывающее руководство по использованию git. За фундаментальным учебником милости просим на git-scm, он даже почти полностью переведён на русский. А здесь описан типовой алгоритм добавления чего-нибудь.

Внимание! Для bitbucket схема немного другая. То, что написано здесь, ориентировано на студентов, проходящих практику на матфаке ВГУ.

То, что всегда нужно сделать ровно один раз.

  1. Зарегистрироваться на гитхабе
  2. Перейти в гитхабовский репозиторий "ЧАС-ЕГЭ" и нажать кнопочку "Fork" справа вверху.

То, что нужно сделать один раз на каждой системе, с которой ведётся работа

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

  1. Открываем терминал (на LiveCD - чёрный квадратик на левой панели, там подсказка будет).
  2. Переходим в папку с "Час ЕГЭ" (для LiveCD):
    cd git/chas-ege
    Подсказка: после ввода команды нажимайте Enter. Будьте внимательны, не путайте буквы.
  3. Представляемся гиту:
    git config --global user.name "Василий Пупкин"
    git config --global user.email super1vasya@pochtarossii.ru
    Если Вы ошиблись на этом этапе - не спешите стучать по резету, команды можно переделывать по нескольку раз.
  4. Красимся Краснеем Зеленеем Озеленяем Раскрашиваем вывод гита в красивенькие красный и зелёный цвета (там, где надо):
    git config --global color.ui true
    Здесь сложно ошибиться, но тоже можно делать несколько раз.
  5. Добавляем свой форк на гитхабе в список удалённых репозиториев:
    git remote add myfork https://github.com/vasya/chas-ege.git
    где vasya - Ваш ник на гитхабе. Удалённый - это от слова "далеко", а не от слова "удалить".

Добавление в git сделанной задачи

  1. Переключаемся на основную ветку (devel):
    git checkout devel
  2. Обновляем текущую ветку:
    git pull origin devel
  3. Бранчуемся (создаём новую ветку):
    git checkout -b newtask-777
    где 777 - это номер таска на гитхабе.
  4. Теперь вносим изменения. В случае задачи - это:
    • Создание файла где-то в директории zdn (обычно указывается, где).
      • Если задача имеет номер по Обзаду, то с помощью nautilus (это как виндовый проводник, шкафчик такой с ящичками на левой панели) переходим из домашней папки в git, потом в chas-ege, далее zdn, далее matege2016p, (сокращённо - идём в ~/git/chas-ege/zdn/matege2016p) а там уже выбрать номер задания по Обзаду. Номер задачи указывается как следующий, например, файл 12.js
      • Если задача обзадовского номер не имеет, то в ~/git/chas-ege/zdn/egeok или в ~/git/chas-ege/zdn/mlegko находим папку, указанную в породившем issue того issue, по которому сделана задача. Если там ничего не указано - то нужно этот вопрос поднять, укажем. Номер задачи указывается, как правило, соответствующий номеру задачи на странице.
    • Теперь нужно создать или исправить файл main.js в той же папке. Как правило, понятно, как это сделать. Если Вы только что создали новую папку с необзадовскими заданиями, то следует написать его вот так:
      window.nomer=[
      	12,
      ].iz();
      
      где 12 - номер сделанного Вами задания. Это странно, но так потом легче дописывать.
    • Наконец, если в issue была указана страница сайта ege-ok.ru или matematikalegko.ru, надо добавить нашу задачу в список автоинтеграции ~/git/chas-ege/lib/autointegr.js
      Берём адрес такой страницы, вырезаем кусок, начинающийся с двойной дроби // и отбрасываем дробь / на конце, если, конечно, она там есть. Ищем этот фрагмент в файле (Поиск - Найти).
      • Если он там есть, то аккуратно дописываем адрес нашего шаблона (там понятно, как).
      • Если его там нет, до в произвольное место списка (так мёржиться легче) дописываем по образцу: адрес в кавычках, двоеточие, массив из адресов заданий. Тут важно не ошибиться ;-) И внимательно следить за знаками препинания и пробелами!
  5. В конце любого файла - обязательно пустая строка!
  6. Возвращаемся к нашему заскучавшему гиту. Смотрим, как там у нас дела обстоят в рабочей директории:
    git status
    Эта команда ничего не изменяет, только показывает, где мы и что там происходит. Если всё сделано правильно, то названия изменённых и добавленных файлов будут выделены красным. Зря мы, что ли, вывод красили? Смотрим, что перечислены только нужные файлы.
  7. Смотрим, что мы изменили в существующих файлах (новые не отобразятся):
    git diff
    Проматывать стрелочками вверх и вниз на клаве, выход, если что - клавиша Q в английской раскладке. Это надо в основном для того, чтоб не наделать чего-нибудь лишнего. Добавленное - зелёным и с плюсом, удалённое - красным и с минусом. Красные квадратики - это пробелы на концах строк, их надо убрать, открыв файлы, и повторить команду.
  8. Теперь снова:
    git status
  9. По одному добавляем командой
    git add имя/файла
    все нужные файлы. А можно и одним махом:
    git add .
  10. Снова
    git status
    Нужные файлы должны быть зелёными.
  11. Теперь коммит, например:
    git commit -m "Сделана задача №77, обзад №12345, matege2016p/B11/77.js"
    Если ошиблись в сообщении коммита и заметили это сразу, то можно легко исправить:
    git commit -m "Сделана задача №78, обзад №12345, matege2016p/B11/78.js" --amend
  12. Спокойно, осталось немного. Запушимся:
    git push myfork newtask-777:newtask-777
    где newtask-777 - имя Вашей ветки.
  13. Попросит ввести имя пользователя (не e-mail, а имя пользователя на гитхабе). Потом пароль. Это неспроста! Вводим имя пользователя, нажимаем Enter. Кажется, что пароль не вводится. Линукс вообще суров, даже звёздочек не показывает. После ввода пароля тоже нажимаем Enter. Если ошиблись при вводе логина и/или пароля, можно нажать стрелочку вверх на клавиатуре - появится предыдущая команда. Enter - и вуаля!
  14. Идём в свою репу на гитхабе (адрес наподобие http://github.com/vasya/chas-ege/, где vasya - Ваш ник на гитхабе), там должна быть зелёная кнопка "Compare & pull request". Жмём её, дальше параметры по умолчанию.
  15. Жмём зелёную кнопку внизу, подтверждая создание пуллреквеста.

Понятно, что если не добавляется задача, а только изменяется оная или добавляется вообще другой кусок кода, то размещать её в zdn и в lib/autointegr.js нет смысла. А бранчевание, добавление файлов в гит т. д. - примерно такое же.

Внимание! Каждая новая задача - это по сути однокоммитная ветка. Поэтому, пока пуллреквест ожидает одобрения, после переключения на ветку devel этой задачи у Вас в репозитории не будет. Не пугайтесь!

Ребейз ветки

Ребейз (rebase) - это такая замечательная операция, которая позволяет применить коммиты к другому исходному состоянию. Подробнее про неё можно прочесть в этом разделе git-scm. Смысла переписывать учебник не вижу. Нам она нужна на случай, если ветка devel на гитхабе убежала вперёд, чтобы не засорять историю паутиной. А ещё она очень полезна, когда несколько изменений свалены в одну ветку, а их хочется разнести по разным. Или объединить коммиты.

  1. Проверяем и запоминаем, на какой ветке мы находимся:
    git status
    Допустим, вывод был таким:
    # On branch newtask-123
    nothing to commit (working directory clean)
    
    Вот название newtask-123 надо запомнить.
  2. Переключаемся на ветку (состояние) devel:
    git checkout devel
    Обратите внимание: флага -b здесь нет.
  3. Теперь обновляем devel из основного репозитория уже знакомой командой:
    git pull origin devel
  4. Переключаемся обратно на нашу ветку:
    git checkout newtask-123
    Общее правило такое: если мы создаём новую ветку, то -b есть, а если прыгаем на существующую - то нет.
  5. Теперь создаём новую ветку, которую будем ребейзить. Новую - чтобы потом в случае чего вернуться на старую.
    git checkout -b newtask-123a
    Название можно выбрать относительно произвольное, лишь бы было понятно.
  6. Собственно ребейз:
    git rebase -i devel
    Это означает: "перенести текущую ветку так, как будто мы начали работу с новым вариантом devel". Откроется окошко текстового редактора. Там можно подправить, что переносить, а что нет (что не переносить - просто удалить). Можно переименовать коммит, написав вместо pick слово reword. Сохранить - Ctrl+O, выйти - Ctrl+X. Обычно достаточно просто выйти.
    Прелесть гита в том, что даже если мы удалим, изменим или отредактируем коммиты в ветке newtask-123a, то состояние ветки newtask-123 не изменится, и на него всегда можно будет вернуться. Просмотреть список всех доступных веток можно командой
    git branch
  7. Всё, можно пушить ветку по инструкции выше.