diff --git a/.gitconfig-for-nix b/.gitconfig-for-nix new file mode 100644 index 00000000..ada35de9 --- /dev/null +++ b/.gitconfig-for-nix @@ -0,0 +1,37 @@ +[merge] + tool = vscode +[mergetool] + keepbackup = false +[diff] + tool = vscode + guitool = vscode +[core] + autocrlf = input +[pull] + ff = only + rebase = false +[fetch] + prune = false +[rebase] + autoStash = false +[difftool "vscode"] + path = code + cmd = code --wait --diff $LOCAL $REMOTE +[mergetool "vscode"] + path = code + cmd = code --wait $MERGED +[credential] + helper = manager +[alias] + it = !git init && git commit -m 'Initial commit' --allow-empty + st = status -sb + call = !git add . && git commit -m + commend = commit --amend --no-edit + graph = log --oneline --decorate --graph --all + to = checkout + pushup = push -u origin HEAD + please = push --force-with-lease + puff = pull --ff-only + pure = pull --rebase --autostash + undo = reset --soft HEAD^ + diff --git a/.gitconfig-for-win b/.gitconfig-for-win new file mode 100644 index 00000000..d483dd1e --- /dev/null +++ b/.gitconfig-for-win @@ -0,0 +1,36 @@ +[merge] + tool = vscode +[mergetool] + keepbackup = false +[diff] + tool = vscode + guitool = vscode +[core] + autocrlf = true +[pull] + ff = only + rebase = false +[fetch] + prune = false +[rebase] + autoStash = false +[difftool "vscode"] + path = code + cmd = code --wait --diff $LOCAL $REMOTE +[mergetool "vscode"] + path = code + cmd = code --wait $MERGED +[credential] + helper = manager +[alias] + it = !git init && git commit -m 'Initial commit' --allow-empty + st = status -sb + call = !git add . && git commit -m + commend = commit --amend --no-edit + graph = log --oneline --decorate --graph --all + to = checkout + pushup = push -u origin HEAD + please = push --force-with-lease + puff = pull --ff-only + pure = pull --rebase --autostash + undo = reset --soft HEAD^ diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f35ed070 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Коллекция полезных .gitignore от GitHub: https://github.com/github/gitignore + + +# Исключение из игнорирования конкретного файла: +!init.md diff --git a/apply-gitconfig-for-nix.sh b/apply-gitconfig-for-nix.sh new file mode 100755 index 00000000..32896b5e --- /dev/null +++ b/apply-gitconfig-for-nix.sh @@ -0,0 +1,18 @@ +#!/bin/bash +git config --local include.path "../.gitconfig-for-nix" + +# setting editor for commits +git config --local core.editor nano + +# setting anonymous name and email if not configured by user +GitUserEmail=$(git config --get user.email) +if [[ "$GitUserEmail" == "" ]]; then + git config --local user.email "johndoe@example.com" +fi +GitUserName=$(git config --get user.name) +if [[ "$GitUserName" == "" ]]; then + git config --local user.name "John Doe" +fi + +echo "Configuration is done" +sleep 3 diff --git a/apply-gitconfig-for-win.cmd b/apply-gitconfig-for-win.cmd new file mode 100644 index 00000000..ddd91a57 --- /dev/null +++ b/apply-gitconfig-for-win.cmd @@ -0,0 +1,62 @@ +@echo off + +set GIT=git + +%GIT% --help > nul + +if %errorlevel% neq 0 ( + set GIT="%ProgramFiles%\Git\bin\gi.exe" +) + +%GIT% --help > nul + +if %errorlevel% neq 0 ( + color 0c + echo. + echo. + echo "Git is not configured properly... Ask for help!" + pause + exit +) + +REM setting editor for commits +%GIT% config --local core.editor notepad + +REM including predefined config +%GIT% config --local include.path "../.gitconfig-for-win" + +REM setting up absolute path to visual studio code +if exist "%ProgramFiles(x86)%\Microsoft VS Code\Code.exe" ( + %GIT% config --local difftool.vscode.path "%ProgramFiles(x86)%\Microsoft VS Code\Code.exe" + %GIT% config --local difftool.vscode.cmd "%ProgramFiles(x86)%\Microsoft VS Code\Code.exe --wait --diff $LOCAL $REMOTE" + %GIT% config --local mergetool.vscode.path "%ProgramFiles(x86)%\Microsoft VS Code\Code.exe" + %GIT% config --local mergetool.vscode.cmd "%ProgramFiles(x86)%\Programs\Microsoft VS Code\Code.exe --wait $MERGED" +) +if exist "%ProgramFiles%\Microsoft VS Code\Code.exe" ( + %GIT% config --local difftool.vscode.path "%ProgramFiles%\Microsoft VS Code\Code.exe" + %GIT% config --local difftool.vscode.cmd "%ProgramFiles%\Microsoft VS Code\Code.exe --wait --diff $LOCAL $REMOTE" + %GIT% config --local mergetool.vscode.path "%ProgramFiles%\Microsoft VS Code\Code.exe" + %GIT% config --local mergetool.vscode.cmd "%ProgramFiles%\Programs\Microsoft VS Code\Code.exe --wait $MERGED" +) +if exist "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe" ( + %GIT% config --local difftool.vscode.path "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe" + %GIT% config --local difftool.vscode.cmd "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe --wait --diff $LOCAL $REMOTE" + %GIT% config --local mergetool.vscode.path "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe" + %GIT% config --local mergetool.vscode.cmd "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe --wait $MERGED" +) + +REM setting anonymous name and email if not configured by user +for /f %%i in ('git config --get user.email') do set GitUserEmail=%%i + +if [%GitUserEmail%] == [] ( + %GIT% config --local user.email "johndoe@example.com" +) + +for /f %%i in ('git config --get user.name') do set GitUserName=%%i + +if [%GitUserName%] == [] ( + %GIT% config --local user.name "John Doe" +) + +echo Configuration is done +pause diff --git a/branch.md b/branch.md new file mode 100644 index 00000000..745b785e --- /dev/null +++ b/branch.md @@ -0,0 +1,17 @@ +## S3. Манипуляции через ссылки, нет ссылки — в мусор +#### HEAD — текущая ссылка, tag — фиксированная ссылка, branch — движущаяся за HEAD ссылка +#### checkout — перемещение на ветку или коммит, reset — перемещение с веткой на коммит +#### Видно то, на что есть ссылки, остальное — мусор +- `git tag` — вывести список тегов +- `git tag ` — создать тег +- `git branch` — вывести список локальных веток +- `git branch -av` — вывести список локальных и удаленных веток +- `git branch ` — создать ветку +- `git branch -d ` — удалить ветку +- `git checkout ` или `git switch --detach ` — переместить HEAD на коммит, причем получится detached HEAD +- `git checkout `или `git switch ` — переместить HEAD на ветку +- `git checkout -b ` или `git switch -c ` — создать ветку и перейти на нее +- `git reset --hard ` — переместить HEAD и текущую ветку на `` +- `git reflog show ` — показать лог действий со ссылкой +- `git reflog` = `git reflog show HEAD` — показать лог действий с HEAD +- `git gc` — удалить ненужные файлы и оптимизировать локальный репозиторий diff --git a/commit.md b/commit.md new file mode 100644 index 00000000..4c7d4b3a --- /dev/null +++ b/commit.md @@ -0,0 +1,14 @@ +## S2. Хранятся состояния директории, постепенная сборка коммита +#### Хранятся файлы, разница вычисляется на лету +#### Commit index для сборки коммита +- `git add .` — добавить все измененные файлы в индекс +- `git commit -m ` — записать изменения из индекса в репозиторий +- `git status -sb` — вывести состояние директории и индекса кратко с указанием текущей ветки +- `git restore .` или `git checkout .` — отменить изменения в директории по индексу +- `git restore -S .` или `git reset .` — отменить изменения индекса по коммиту (отмена `git add .`) +- `git rm ` — удалить файл из индекса, чтобы перестать хранить его историю в репозитории +- `git show ` — показать содержимое коммита +- `git log --oneline --decorate --graph` — вывести историю коммитов от HEAD в виде дерева +- `git log --oneline --decorate --graph --all` — вывести историю всех коммитов в виде дерева +- `gitk` — открыть графическое представление репозитория +- `git clean` — удалить неотслеживаемые файлы из директории \ No newline at end of file diff --git a/fetch.md b/fetch.md new file mode 100644 index 00000000..5f6df9b8 --- /dev/null +++ b/fetch.md @@ -0,0 +1,5 @@ +## R1. Доступен fetch коммитов любого репозитория в любой момент +- `git remote -v` — вывести список удаленных репозиториев с их адресами +- `git remote add ` — добавить удаленный репозиторий с URL и дать ему указанное имя +- `git fetch` = `git fetch origin` — получить содержимое основного удаленного репозитория +- `git fetch --all` — получить содержимое всех удаленных репозиториев из списка \ No newline at end of file diff --git a/help.md b/help.md new file mode 100644 index 00000000..c7121118 --- /dev/null +++ b/help.md @@ -0,0 +1,28 @@ +## H1. Гибкое конфигурирование и качественная документация +### Гибкая настройка под любой процесс +- `git config -e --system` — редактировать настройки системы +- `git config -e --global` — редактировать настройки пользователя +- `git config -e` — редактировать настройки репозитория +- `git config --global user.name ""` — задать имя пользователя +- `git config --global user.email ""` — задать почту пользователя + +### Документация ко всем командам +- `git help` — список команд +- `git -h` — помощь по команде в терминале +- `git --help` — документация по команде в браузере + +### Алиасы для краткости команд +- `git config --global alias.it "!git init && git commit -m 'Initial commit' --allow-empty"` +- `git config --global alias.st "status -sb"` +- `git config --global alias.call "!git add . && git commit -m"` +- `git config --global alias.commend "commit --amend --no-edit"` +- `git config --global alias.graph "log --oneline --decorate --graph --all"` +- `git config --global alias.to "checkout"` +- `git config --global alias.pushup "push -u origin HEAD"` +- `git config --global alias.please "push --force-with-lease"` +- `git config --global alias.puff "pull --ff-only"` +- `git config --global alias.pure "pull --rebase --autostash"` +- `git config --global alias.undo "reset --soft HEAD^"` + +### Надо игнорировать все, кроме исходников +https://github.com/github/gitignore — .gitignore для разных языков diff --git a/index.html b/index.html new file mode 100644 index 00000000..82314269 --- /dev/null +++ b/index.html @@ -0,0 +1,91 @@ + + + + + + + + +
+ +
+

Принципы Git

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/init.md b/init.md new file mode 100644 index 00000000..38ff55bd --- /dev/null +++ b/init.md @@ -0,0 +1,4 @@ +## S1. Все локально +#### Все данные хранятся в локальных репозиториях, изменения между ними можно синхронизировать +- `git init` — создать пустой репозиторий +- `git clone ` — склонировать репозиторий в новую директорию diff --git a/merge.md b/merge.md new file mode 100644 index 00000000..663f9520 --- /dev/null +++ b/merge.md @@ -0,0 +1,6 @@ +## A1. Трехсторонний merge в три шага +#### Два состояния можно объединить через merge, mergetool и commit +#### Участвуют три стороны: current, incoming и base +- `git merge ` — объединить текущую ветку с другой +- `git mergetool` — разрешить имеющиеся конфликты +- `git merge --abort` — отменить слияние diff --git a/push.md b/push.md new file mode 100644 index 00000000..13108efd --- /dev/null +++ b/push.md @@ -0,0 +1,9 @@ +## R2. Удаленное изменение — это push +- `git push :` — добавить изменения из локальной ветки `` и переместить ветку `` удаленного репозитория +- `git push` = `git push origin HEAD` — добавить изменения из текущей локальной ветки и переместить соответствующую ветку удаленного репозитория +- `git push -f` — выполнить `push`, даже если удаленная ветка уже не является предком +- `git push --force-with-lease` — выполнить `push`, если является предком или удаленная ветка не сдвигалась (использовать вместо предыдущей команды) +- `git push -d ` — удалить ветку или тег в удаленном репозитории +- `git push tag ` — отправить тег в удаленный репозиторий +- `git push --tags` — отправить все локальные теги в удаленный репозиторий +- `git push --mirror` — выполнить агрессивный `push` для всех тегов, веток и HEAD, подходит для создания удаленной копии локального репозитория diff --git a/rebase.md b/rebase.md new file mode 100644 index 00000000..ccadb650 --- /dev/null +++ b/rebase.md @@ -0,0 +1,8 @@ +## A2. rebase, cherry-pick и amend, чтобы пересоздать историю +#### Нельзя переписать историю — можно создать новую +- `git commit --amend --no-edit` — заменить последний коммит ветки на отредактированный с дополнительными изменениями без изменения сообщения +- `git rebase ` — применить все коммиты от общего родителя до текущего к `` +- `git rebase -i ` — применить заново все коммиты, указав действие с каждым коммитом +- `git rebase --continue` — продолжить rebase после разрешения конфликтов +- `git rebase --abort` — отменить rabase +- `git cherry-pick ` — применить указанный коммит к HEAD diff --git a/reset.md b/reset.md new file mode 100644 index 00000000..403e25b4 --- /dev/null +++ b/reset.md @@ -0,0 +1,15 @@ +## A3. stash, reset, revert для управления изменениями +#### Изменения можно временно припрятать +#### Можно получить разницу между любыми коммитами +#### Коммит можно отменить другим коммитом +- `git stash` — сохранить все модифицированные файлы в виде набора изменений +- `git stash pop` — восстановить последний сохраненный набор изменений и удалить его из списка +- `git stash list` — показать список сохраненных наборов изменений +- `git reset --hard ` — переместить текущую ветку на ``, задать индекс и директорию согласно коммиту, устранив всю разницу +- `git reset --mixed ` — переместить текущую ветку на ``, задать индекс согласно коммиту, оставить разницу между исходным и новым состоянием в директории +- `git reset --soft ` — переместить текущую ветку на ``, не задавать индекс и директорию согласно коммиту, а оставить разницу между исходным и новым состоянием в индексе и директории +- `git reset --hard HEAD~1` — отменить последний коммит +- `git revert ` — создать коммит, отменяющий изменения из коммита +- `git diff []` — вывести разницу между двумя коммитами +- `git diff --name-status []` — список измененных файлов +- `git difftool []` - вывести разницу с помощью difftool из настроек diff --git a/run.cmd b/run.cmd new file mode 100644 index 00000000..384b1fa4 --- /dev/null +++ b/run.cmd @@ -0,0 +1,3 @@ +start npx http-server +timeout 10 +start http://127.0.0.1:8080/index.html diff --git a/styles/marked.css b/styles/marked.css new file mode 100644 index 00000000..a3cbcc1e --- /dev/null +++ b/styles/marked.css @@ -0,0 +1,695 @@ + @font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); + } + + .markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + color: #24292e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 10px; + line-height: 1.5; + word-wrap: break-word; + } + + .markdown-body .pl-c { + color: #6a737d; + } + + .markdown-body .pl-c1, + .markdown-body .pl-s .pl-v { + color: #005cc5; + } + + .markdown-body .pl-e, + .markdown-body .pl-en { + color: #6f42c1; + } + + .markdown-body .pl-smi, + .markdown-body .pl-s .pl-s1 { + color: #24292e; + } + + .markdown-body .pl-ent { + color: #22863a; + } + + .markdown-body .pl-k { + color: #d73a49; + } + + .markdown-body .pl-s, + .markdown-body .pl-pds, + .markdown-body .pl-s .pl-pse .pl-s1, + .markdown-body .pl-sr, + .markdown-body .pl-sr .pl-cce, + .markdown-body .pl-sr .pl-sre, + .markdown-body .pl-sr .pl-sra { + color: #032f62; + } + + .markdown-body .pl-v, + .markdown-body .pl-smw { + color: #e36209; + } + + .markdown-body .pl-bu { + color: #b31d28; + } + + .markdown-body .pl-ii { + color: #fafbfc; + background-color: #b31d28; + } + + .markdown-body .pl-c2 { + color: #fafbfc; + background-color: #d73a49; + } + + .markdown-body .pl-c2::before { + content: "^M"; + } + + .markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #22863a; + } + + .markdown-body .pl-ml { + color: #735c0f; + } + + .markdown-body .pl-mh, + .markdown-body .pl-mh .pl-en, + .markdown-body .pl-ms { + font-weight: bold; + color: #005cc5; + } + + .markdown-body .pl-mi { + font-style: italic; + color: #24292e; + } + + .markdown-body .pl-mb { + font-weight: bold; + color: #24292e; + } + + .markdown-body .pl-md { + color: #b31d28; + background-color: #ffeef0; + } + + .markdown-body .pl-mi1 { + color: #22863a; + background-color: #f0fff4; + } + + .markdown-body .pl-mc { + color: #e36209; + background-color: #ffebda; + } + + .markdown-body .pl-mi2 { + color: #f6f8fa; + background-color: #005cc5; + } + + .markdown-body .pl-mdr { + font-weight: bold; + color: #6f42c1; + } + + .markdown-body .pl-ba { + color: #586069; + } + + .markdown-body .pl-sg { + color: #959da5; + } + + .markdown-body .pl-corl { + text-decoration: underline; + color: #032f62; + } + + .markdown-body .octicon { + display: inline-block; + vertical-align: text-top; + fill: currentColor; + } + + .markdown-body a { + background-color: transparent; + } + + .markdown-body a:active, + .markdown-body a:hover { + outline-width: 0; + } + + .markdown-body strong { + font-weight: inherit; + } + + .markdown-body strong { + font-weight: bolder; + } + + .markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; + } + + .markdown-body img { + border-style: none; + } + + .markdown-body code, + .markdown-body kbd, + .markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; + } + + .markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; + } + + .markdown-body input { + font: inherit; + margin: 0; + } + + .markdown-body input { + overflow: visible; + } + + .markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; + } + + .markdown-body * { + box-sizing: border-box; + } + + .markdown-body input { + font-family: inherit; + font-size: inherit; + line-height: inherit; + } + + .markdown-body a { + color: #0366d6; + text-decoration: none; + } + + .markdown-body a:hover { + text-decoration: underline; + } + + .markdown-body strong { + font-weight: 600; + } + + .markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #dfe2e5; + } + + .markdown-body hr::before { + display: table; + content: ""; + } + + .markdown-body hr::after { + display: table; + clear: both; + content: ""; + } + + .markdown-body table { + border-spacing: 0; + border-collapse: collapse; + } + + .markdown-body td, + .markdown-body th { + padding: 0; + } + + .markdown-body h1, + .markdown-body h2, + .markdown-body h3, + .markdown-body h4, + .markdown-body h5, + .markdown-body h6 { + margin-top: 0; + margin-bottom: 0; + } + + .markdown-body h1 { + font-size: 32px; + font-weight: 600; + } + + .markdown-body h2 { + font-size: 24px; + font-weight: 600; + } + + .markdown-body h3 { + font-size: 20px; + font-weight: 600; + } + + .markdown-body h4 { + font-size: 16px; + font-weight: 600; + } + + .markdown-body h5 { + font-size: 14px; + font-weight: 600; + } + + .markdown-body h6 { + font-size: 12px; + font-weight: 600; + } + + .markdown-body p { + margin-top: 0; + margin-bottom: 10px; + } + + .markdown-body blockquote { + margin: 0; + } + + .markdown-body ul, + .markdown-body ol { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + + .markdown-body ol ol, + .markdown-body ul ol { + list-style-type: lower-roman; + } + + .markdown-body ul ul ol, + .markdown-body ul ol ol, + .markdown-body ol ul ol, + .markdown-body ol ol ol { + list-style-type: lower-alpha; + } + + .markdown-body dd { + margin-left: 0; + } + + .markdown-body code { + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; + } + + .markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; + } + + .markdown-body .octicon { + vertical-align: text-bottom; + } + + .markdown-body .pl-0 { + padding-left: 0 !important; + } + + .markdown-body .pl-1 { + padding-left: 4px !important; + } + + .markdown-body .pl-2 { + padding-left: 8px !important; + } + + .markdown-body .pl-3 { + padding-left: 16px !important; + } + + .markdown-body .pl-4 { + padding-left: 24px !important; + } + + .markdown-body .pl-5 { + padding-left: 32px !important; + } + + .markdown-body .pl-6 { + padding-left: 40px !important; + } + + .markdown-body::before { + display: table; + content: ""; + } + + .markdown-body::after { + display: table; + clear: both; + content: ""; + } + + .markdown-body>*:first-child { + margin-top: 0 !important; + } + + .markdown-body>*:last-child { + margin-bottom: 0 !important; + } + + .markdown-body a:not([href]) { + color: inherit; + text-decoration: none; + } + + .markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; + } + + .markdown-body .anchor:focus { + outline: none; + } + + .markdown-body p, + .markdown-body blockquote, + .markdown-body ul, + .markdown-body ol, + .markdown-body dl, + .markdown-body table, + .markdown-body pre { + margin-top: 0; + margin-bottom: 16px; + } + + .markdown-body hr { + height: 0.25em; + padding: 0; + margin: 24px 0; + background-color: #e1e4e8; + border: 0; + } + + .markdown-body blockquote { + padding: 0 1em; + color: #6a737d; + border-left: 0.25em solid #dfe2e5; + } + + .markdown-body blockquote>:first-child { + margin-top: 0; + } + + .markdown-body blockquote>:last-child { + margin-bottom: 0; + } + + .markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; + } + + .markdown-body h1, + .markdown-body h2, + .markdown-body h3, + .markdown-body h4, + .markdown-body h5, + .markdown-body h6 { + margin-top: 6px; + margin-bottom: 6px; + font-weight: 600; + line-height: 1.25; + } + + .markdown-body h1 .octicon-link, + .markdown-body h2 .octicon-link, + .markdown-body h3 .octicon-link, + .markdown-body h4 .octicon-link, + .markdown-body h5 .octicon-link, + .markdown-body h6 .octicon-link { + color: #1b1f23; + vertical-align: middle; + visibility: hidden; + } + + .markdown-body h1:hover .anchor, + .markdown-body h2:hover .anchor, + .markdown-body h3:hover .anchor, + .markdown-body h4:hover .anchor, + .markdown-body h5:hover .anchor, + .markdown-body h6:hover .anchor { + text-decoration: none; + } + + .markdown-body h1:hover .anchor .octicon-link, + .markdown-body h2:hover .anchor .octicon-link, + .markdown-body h3:hover .anchor .octicon-link, + .markdown-body h4:hover .anchor .octicon-link, + .markdown-body h5:hover .anchor .octicon-link, + .markdown-body h6:hover .anchor .octicon-link { + visibility: visible; + } + + .markdown-body h1 { + padding-bottom: 0.3em; + font-size: 2em; + border-bottom: 1px solid #eaecef; + } + + .markdown-body h2 { + padding-bottom: 0.3em; + font-size: 1.5em; + border-bottom: 1px solid #eaecef; + } + + .markdown-body h3 { + font-size: 1.25em; + } + + .markdown-body h4 { + font-size: 1em; + } + + .markdown-body h5 { + font-size: 0.875em; + } + + .markdown-body h6 { + font-size: 0.85em; + color: #6a737d; + } + + .markdown-body ul, + .markdown-body ol { + padding-left: 2em; + } + + .markdown-body ul ul, + .markdown-body ul ol, + .markdown-body ol ol, + .markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; + } + + .markdown-body li { + word-wrap: break-all; + } + + .markdown-body li>p { + margin-top: 16px; + } + + .markdown-body li+li { + margin-top: 0.25em; + } + + .markdown-body dl { + padding: 0; + } + + .markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; + } + + .markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; + } + + .markdown-body table { + display: block; + width: 100%; + overflow: auto; + } + + .markdown-body table th { + font-weight: 600; + } + + .markdown-body table th, + .markdown-body table td { + padding: 6px 13px; + border: 1px solid #dfe2e5; + } + + .markdown-body table tr { + background-color: #fff; + border-top: 1px solid #c6cbd1; + } + + .markdown-body table tr:nth-child(2n) { + background-color: #f6f8fa; + } + + .markdown-body img { + max-width: 100%; + box-sizing: content-box; + background-color: #fff; + } + + .markdown-body img[align=right] { + padding-left: 20px; + } + + .markdown-body img[align=left] { + padding-right: 20px; + } + + .markdown-body code { + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + background-color: rgba(27,31,35,0.05); + border-radius: 3px; + } + + .markdown-body pre { + word-wrap: normal; + } + + .markdown-body pre>code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; + } + + .markdown-body .highlight { + margin-bottom: 16px; + } + + .markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; + } + + .markdown-body .highlight pre, + .markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f6f8fa; + border-radius: 3px; + } + + .markdown-body pre code { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; + } + + .markdown-body .full-commit .btn-outline:not(:disabled):hover { + color: #005cc5; + border-color: #005cc5; + } + + .markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #d1d5da; + border-bottom-color: #c6cbd1; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #c6cbd1; + } + + .markdown-body :checked+.radio-label { + position: relative; + z-index: 1; + border-color: #0366d6; + } + + .markdown-body .task-list-item { + list-style-type: none; + } + + .markdown-body .task-list-item+.task-list-item { + margin-top: 3px; + } + + .markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; + } + + .markdown-body hr { + border-bottom-color: #eee; + } \ No newline at end of file diff --git a/styles/prism.css b/styles/prism.css new file mode 100644 index 00000000..c217eccf --- /dev/null +++ b/styles/prism.css @@ -0,0 +1,139 @@ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + + code[class*="language-"], + pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, + code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; + } + + pre[class*="language-"]::selection, pre[class*="language-"] ::selection, + code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; + } + + @media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #f5f2f0; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: slategray; + } + + .token.punctuation { + color: #999; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.constant, + .token.symbol, + .token.deleted { + color: #905; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #690; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); + } + + .token.atrule, + .token.attr-value, + .token.keyword { + color: #07a; + } + + .token.function, + .token.class-name { + color: #DD4A68; + } + + .token.regex, + .token.important, + .token.variable { + color: #e90; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } \ No newline at end of file diff --git a/upstream.md b/upstream.md new file mode 100644 index 00000000..e0276220 --- /dev/null +++ b/upstream.md @@ -0,0 +1,10 @@ +## R3. Явное сопоставление локальных веток с upstream +- `git branch -vv` — вывести список локальных веток с указанием привязанных к ним upstream-веток +- `git branch -u []` — задать upstream-ветку для указанной или текущей ветки +- `git push -u origin HEAD` — создать удаленную ветку, соответствующую локальной и установить между ними upstream-связь, затем добавить изменения из локальной ветки в удаленный репозиторий +- `git checkout ` — создать локальную ветку, соответствующую удаленной и установить между ними upstream-связь, затем переместить HEAD на нее +- `git pull` = `git pull origin` — получить содержимое основного удаленного репозитория и влить изменения из удаленной ветки в соответствующую локальную ветку +- `git pull --ff-only` — получить содержимое, а затем влить, если возможен fast-forward merge +- `git pull --rebase` — получить содержимое и выполнить rebase локальной ветки на удаленную ветку +- `git pull --rebase --autostash` — сохранить локальные изменения, получить содержимое, выполнить rebase локальной ветки на удаленную ветку, применить сохраненные изменения +- `git config --global push.default simple` — задать simple-режим действий с upstream-связями при push. Это режим по умолчанию в Git 2.0 и выше