В прошлом году попросили меня в отделе кадров поставить программу для рассчёта стажа сотрудников.
Гугление и установка различных программ, а так же предложения всяких онлайн калькуляторов было отвергнуто. Одна программа не подходила по одной причине, другая по другой. Если честно, причины я уже не помню. В итоге, подумав, что утилита не особо сложная вызвался просто её написать. Сейчас как раз немного её подкорректировал. И пришло мне в голову, что я давно хотел попробовать github.
Выложить эту утилитку — идеальная проба возможностей git и заодно постараюсь правильно оформить GPL. Для этого я зарегистрировался на гитхабе, залез на сайт gnu.org, посмотрел как правильно оформлять GPL.
Тут утверждается, что надо использовать GPLv3. Ну кто я такой чтобы спорить с сайтом gnu 🙂
В общем, теперь я счастливый владелец репозитория. И моя утилитка в исходниках на Лазарусе доступна по этому адресу: https://github.com/temaps/staj
Имеет смысл осветить пару моментов использования команды git. Если честно, не всё сразу получилось. Но команда выдаёт понятные подсказки, и, если им следовать, то никаких проблем.
Сначала я создал папку git. Зашёл в эту папку и там выполнил:
1 2 3 4 5 6 7 |
$ git clone https://github.com/temaps/staj.git Cloning into 'staj'... remote: Counting objects: 4, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (4/4), done. Checking connectivity... done. |
Появилась папка staj. Зашёл в эту папку и скопировал в неё исходники.
Далее нужно сделать git add файлы исходников.
Например, для файлов staj.lpi и staj.lpr можно использовать звёздочку:
1 |
$ git add staj* |
Ну и
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: dat/111111.dat new file: dat/22222.dat new file: dat/Ntcn.dat new file: dat/aaaa.dat new file: dat/wdewfde.dat new file: dat/wdsd.dat new file: "dat/\320\230\320\262\320\260\320\275\320\276\320\262.dat" new file: "dat/\320\237\320\265\321\202\321\200\320\276\320\262.dat" new file: "dat/\320\241\320\270\320\264\320\276\321\200\320\276\320\262.dat" new file: mainstaj.lfm new file: mainstaj.pas new file: staj.lpi new file: staj.lpr |
Далее ошибка:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ git commit *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident name (for <tema@temanout.localdomain>) not allowed |
Ну тут всё понятно в подсказке. Выполнил предложенные команды и коммит прошёл. Появляется окно vi, где можно написать комментарий в самой верхней строчке (расстроило, что в консольном vi русские буквы отображаются мегакоряво).
UPD
Подоспел фикс мегакорявых русских букв 🙂
Нужно всего лишь в файле ~/.bash_profile дописать строчки:
1 2 |
export EDITOR=vim export GIT_EDITOR=vim |
Пишем, сохраняем, выходим.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ git commit [master 53c881f] Первый коммит 13 files changed, 999 insertions(+) create mode 100644 dat/111111.dat create mode 100644 dat/22222.dat create mode 100644 dat/Ntcn.dat create mode 100644 dat/aaaa.dat create mode 100644 dat/wdewfde.dat create mode 100644 dat/wdsd.dat create mode 100644 "dat/\320\230\320\262\320\260\320\275\320\276\320\262.dat" create mode 100644 "dat/\320\237\320\265\321\202\321\200\320\276\320\262.dat" create mode 100644 "dat/\320\241\320\270\320\264\320\276\321\200\320\276\320\262.dat" create mode 100644 mainstaj.lfm create mode 100644 mainstaj.pas create mode 100644 staj.lpi create mode 100644 staj.lpr |
Это ещё не всё. Теперь это надо push на сайт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$ git push warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the traditional behavior, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name. Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch. See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Username for 'https://github.com': temaps Password for 'https://temaps@github.com': Counting objects: 16, done. Delta compression using up to 8 threads. Compressing objects: 100% (16/16), done. Writing objects: 100% (16/16), 9.12 KiB | 0 bytes/s, done. Total 16 (delta 1), reused 0 (delta 0) To https://github.com/temaps/staj.git 76872e5..53c881f master -> master |
Команда выдала кучу нерусских надписей, которые я, каюсь, читать не стал. Главное, что меня спросили логин и пароль, я их ввёл и всё запушилось на сайт.
Для обновления локальных файлов с гитхаба используется команда:
1 |
git pull |
Ещё небольшое дополнение по откатам коммитов. На пару коммитов назад:
1 |
git reset --hard HEAD~2 |
Или на конкретный коммит по хэшу:
1 |
git reset --hard HEAD hash |
Потом залить на github:
1 |
git push -f |
После этого на гитхабе тоже будет откачено до нужного коммита.
Ну и чтобы два раза не вставать пару слов про diff.
Сравнить предыдущий с текущим:
1 |
git diff HEAD^ HEAD |
ну и по аналогии с вышеописанным, можно использовать HEAD~2 и хэш