Table of Contents
PyNEng: Вводная тема
Темы:
- Git
- GitHub
Основы Python
Полезные ссылки:
- https://docs.python.org/3/library/ - описание библиотек
- https://pymotw.com/3/ - описание модулей с примерами
- https://peps.python.org/pep-0008/ - описание стиля
Git
Git - это система контроля версий файлов (VCS - Version Control System) которая позволяет:
- отслеживать изменения в файле и записывать кто их сделал
- вести историю изменений каждого файла
- делать снапшоты всех файлов за которыми следит git и, в случае необходимости, откатывать изменения в конкретных файлах
- построить распределенную систему контроля версий
Терминалогия:
- репозиторий - это директория с файлами за которыми будет следить git.
- snapshot - это снимок состояния репозитория в какой-то конкретный момент, делается командой git commit -m “Some Comment”.
Файл, относительно Git, может находиться в одном из 4 состояниях:
- untracked - файл находится в директории репозитория, но не добавлен в репозиторий, git за файлом не следит.
- modified - файл был изменен, но еще не помечен как кандидат для комита.
- staged - файл пометили как кандидат для ближайшего комита.
- unmodified - файл не менялся с последнего комита.
- Каталог git (.git) - служебная информация, в частности снапшоты.
- Рабочая директория - тут хранится текущая версия файлов
- Staged area - список файлов которые будет добавлены при следющем комите.
В каждом снапшоте записываются изменения 3
Установка git
root@aee3:~# apt-get install git
Базовая настройка git
Что бы можно было комитить изменения нужно глобально настроить имя и почту, анонимные комиты не принимаются.
$ git config --global user.name "somename" $ git config --global user.email "somename@someserver.ru"
Посмотреть базовые настройки.
$ git config --list user.name=somename user.email=somename@someserver.ru core.editor=nano core.whitespace=off core.excludesfile=~/.gitignore advice.statusuoption=false color.ui=true push.default=current
Создание нового репозитория git
Сначала создаем директорию для репозитория и переходим в нее.
[~/workspace] ubuntu@5260087: $ pwd /home/ubuntu/workspace [~/workspace] ubuntu@5260087: $ mkdir pyneng [~/workspace] ubuntu@5260087: $ cd pyneng
Для инициализации репозитория даем команду git init.
[~/workspace/pyneng] ubuntu@5260087: $ git init Initialized empty Git repository in /home/ubuntu/workspace/pyneng/.git/ [~/workspace/pyneng] ubuntu@5260087: $ [master L|✔] 11:09 $
Вся служебная информация git будет находиться в каталоге /home/ubuntu/workspace/pyneng/.git/.
Основные команды Git
git status - посмотреть текущее состояние git.
[~/workspace/pyneng] ubuntu@5260087: $ [master L|✔] 11:17 $ git status On branch master Initial commit nothing to commit (create/copy files and use "git add" to track)
Это состояние сразу после инициализации, комитить еще нечего.
Создадим файл и посмотрим состояние.
[~/workspace/pyneng] ubuntu@kostyana-kostyana-5260087: $ [master L|✔] 11:17 $ touch TEST-FILE [~/workspace/pyneng] ubuntu@kostyana-kostyana-5260087: $ [master L|…1] 11:22 $ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) TEST-FILE nothing added to commit but untracked files present (use "git add" to track)
Новый файл находится в состоянии untracked.
git add - этой командой сообщаем git, что надо следить за файлом
[~/workspace/pyneng] ubuntu@5260087: $ [master L|…1] 11:22 $ git add TEST-FILE [~/workspace/pyneng] ubuntu@5260087: $ [master L|●1] 11:25 $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: TEST-FILE
Так же командой git add в stage area добавляются подредактированные файлы готовые к комиту.
git commit - комитим файлы, обязательно с коментарием.
[~/workspace/pyneng] ubuntu@kostyana-kostyana-5260087: $ [master L|●1] 11:27 $ git commit -m "Creatre TEST-FILE" [master (root-commit) 69df590] Creatre TEST-FILE 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 TEST-FILE [~/workspace/pyneng] ubuntu@kostyana-kostyana-5260087: $ [master L|✔] 11:31 $ git status On branch master nothing to commit, working tree clean
Таким образом, в общем случае, последовательность работы git будет такая:
- Создаем или редактируем файл
- git status - смотрим статус
- git add - добавляем файл в stage area
- git commit -m ““ - разом комитим все фаhttps://mykb.ru/lib/images/wrap.gifйлы находящиеся в stage area
GitHub
GitHub это крупнейший публичный git репозиторий, aka социальная сеть для разработчиков.
Задания курса будут располагаться в приватном репозитории, туда же их надо будет сдавать на проверку.
Аунтификация на GitHub
Работать с github будем через ssh c аутентификацией по ключам.
Генерируем ssh ключ сдедующей командой:
kostya@blackpc:~/.ssh$ ssh-keygen -t rsa -b 4096 -C "git-email@someserver.ru"
Вывод команды:
kostya@blackpc:~/.ssh$ ssh-keygen -t rsa -b 4096 -C "git-email@someserver.ru" Generating public/private rsa key pair. Enter file in which to save the key (/home/kostya/.ssh/id_rsa): /home/kostya/.ssh/github_rsa /home/kostya/.ssh/github_rsa already exists. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/kostya/.ssh/github_rsa. Your public key has been saved in /home/kostya/.ssh/github_rsa.pub. The key fingerprint is: SHA256:Q1S...QB8Ui...OZOi/xWo git-email@someserver.ru The key's randomart image is: +---[RSA 4096]----+ | .. ..... | | ...... . | | ..... . . | |.. . ... . | |. . . ..... | |. . .... | | . . .. | | . .... | | ......... | +----[SHA256]-----+
В результате сгенерируется два ключа, открытую часть (github_rsa.pub) надо скопировать на GitHub:
Логинемся –> Кликаем на картинку профиля –> Settings –> SSH and GPG keys –> New SSH key
Еще раз, командой git config –list, проверяем, что в глобальных настройках git задано имя и почта используемые на github.
Если все хорошо, то тестируем соединение с github, должно быть так:
kostya@blackpc:~$ ssh -T git@github.com Hi SomeOne! You've successfully authenticated, but GitHub does not provide shell access.
Работа с GitHub
Копирование репозитория с GitHub
Клонируем публичный репозиторий через https.
kostya@blackpc:~$ git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1 Cloning into '.bash-git-prompt'... remote: Counting objects: 47, done. remote: Compressing objects: 100% (39/39), done. remote: Total 47 (delta 16), reused 16 (delta 7), pack-reused 0 Unpacking objects: 100% (47/47), done. Checking connectivity... done.
Клонируем приватный репозиторий через ssh, аутентификацию по ключам сделали выше.
kostya@blackpc:~/pyneng$ git clone ssh://git@github.com/pyneng/online-3-konstantin Cloning into 'online-3-konstantin'... remote: Counting objects: 231, done. remote: Compressing objects: 100% (178/178), done. remote: Total 231 (delta 45), reused 227 (delta 44), pack-reused 0 Receiving objects: 100% (231/231), 92.75 KiB | 0 bytes/s, done. Resolving deltas: 100% (45/45), done. Checking connectivity... done. kostya@blackpc:~/pyneng$ ll total 12 drwxrwxr-x 3 kostya kostya 4096 сен 6 22:59 ./ drwxr-xr-x 35 kostya kostya 4096 сен 6 22:55 ../ drwxrwxr-x 4 kostya kostya 4096 сен 6 22:59 online-3-konstantin/ kostya@blackpc:~/pyneng$ cd online-3-konstantin/ ✔ ~/pyneng/online-3-konstantin [master|✔] 23:02 $ ll total 24 drwxrwxr-x 4 kostya kostya 4096 сен 6 22:59 ./ drwxrwxr-x 3 kostya kostya 4096 сен 6 22:59 ../ drwxrwxr-x 17 kostya kostya 4096 сен 6 22:59 exercises/ drwxrwxr-x 8 kostya kostya 4096 сен 6 23:02 .git/ -rw-rw-r-- 1 kostya kostya 550 сен 6 22:59 .gitignore -rw-rw-r-- 1 kostya kostya 30 сен 6 22:59 README.md
Последовательность работы с GitHub
Типовая последовательность работы будет такой:
- Переходим в локальный каталог репозитория
- git pull - синхронизируем локальный репозиторий с github
- Редактируем файлы
- git add - добавляем отредактированные файлы в stage area
- git status - смотрим че-как
- git commit -m ”“ - комитим изменения
- git push - отправляем изменения на github
git pull
Перед началом работы стягиваем изменения с github.
Если изменений не было, то вывод будет такой:
✔ ~/pyneng/online-3-konstantin [master|✔] 23:13 $ git pull Already up-to-date.
Если иззменения были, то такой:
✔ ~/pyneng/online-3-konstantin [master|✔] 23:13 $ git pull remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. Unpacking objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 From ssh://github.com/pyneng/online-3-konstantin 958572d..bf58638 master -> origin/master Updating 958572d..bf58638 Fast-forward README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
git push
Команда git push origin master отправляет изменения на github.
Изменили файл README.md и смотрим статус.
File README.md saved ✔ ~/pyneng/online-3-konstantin [master|✚ 1…1] 23:18 $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: README.md Untracked files: (use "git add <file>..." to include in what will be committed) README.md~ no changes added to commit (use "git add" and/or "git commit -a")
Добавляем файл README.md в stage area.
✔ ~/pyneng/online-3-konstantin [master|✚ 1…1] 23:18 $ git add README.md
Локально комитим изменения.
✔ ~/pyneng/online-3-konstantin [master|●1…1] 23:19 $ git commit -m "One more commit" [master 2f368ca] One more commit 1 file changed, 1 insertion(+)
Отправляем изменения на github.
✔ ~/pyneng/online-3-konstantin [master ↑·1|…1] 23:19 $ git push origin master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 373 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://git@github.com/pyneng/online-3-konstantin bf58638..2f368ca master -> master ✔ ~/pyneng/online-3-konstantin [master|…1]