GIT - terminal - GitHub // мои заметки. GIT - terminal - GitHub
pwd Узнать, где вы сейчас
В macOS есть папка /Users
cd перейти к домашней директории cd ~ домашней директории garivprogari@Garivprogaris-MacBook-Pro ~ % ls Вывести содержимое директории
Обратите внимание: если в названии папки есть пробелы, при вводе нужно использовать кавычки. cd "Фотографии с дня рождения"
cd .. # переходим на уровень выше
команда с точкой. Чтобы обратиться к текущей директории, можно использовать .. Но это нужно довольно редко — например, для запуска скриптов и программ, которые принимают папку в качестве параметра.
cd github/open-source-project # переходим через несколько директорий
/projects/github/open-source-project # переместились сразу в папку open-source-project внутри github
можно вызвать ls с флагом -a и вывести расширенный список. В нём отобразятся все скрытые файлы, которые начинаются с символа . (например, файлы конфигурации). В том числе два особых файла . и .., которые обозначают текущую и родительскую директории.
ls -a # вывели список, в котором отображаются скрытые файлы ., .. и .git . .. .git
ls может работать с символом домашней директории (~) и предыдущей директории (..). Например, ls ~ выведет содержимое домашней директории вне зависимости от того, что показывает pwd. А ls .. покажет содержимое родительской директории.
touch Чтобы создать файл
$ touch my-new-file.txt # создали файл my-new-file.txt
Хорошей практикой при создании файла считается указывать его расширение (в примере — .txt). Это позволит операционной системе выбрать подходящую программу, чтобы открыть файл. А ещё поможет другому человеку понять, какое содержимое находится внутри.
mkdir создания директорий $ mkdir new-dir # создали директорию new-dir
Можно создать целую структуру директорий одной командой с помощью флага -p $ mkdir -p dir1/dir-inside/dir-deeper-inside
можно использовать обе команды вместе с символом домашней директории (~) или родительской директории (..). Например, команда mkdir ~/my-git-projects создаст папку my-git-projects внутри домашней директории
А команда touch ../../file.txt создаст файл file.txt на две папки выше по иерархии. Допустим, если вы находитесь в директории projects/git/hello, команда touch ../../file.txt создаст файл по такому пути: projects/file.txt
Копирование файлов — cp
$ cp что_копируем куда_копируем
$ cp index.html src/
$ cp что_копируем что_копируем что_копируем куда_копируем
$ cp index.html style.css script.js src/
Перемещение файлов и папок — mv команды mv аналогичен синтаксису cp. После имени команды указывают список файлов и папок, которые нужно переместить, а затем — папку, в которую нужно выполнить перемещение.
$ mv table.csv ./very-important-files
$ cd very-important-files $ ls table.csv
Команда touch создаёт файл, а команда mkdir — директорию. С помощью флага -p можно создать целую структуру директорий одной командой: mkdir -p. Для копирования файлов используют команду cp, для перемещения — mv.
Чтение файлов — cat
$ cat myfile.txt # распечатали содержимое файла myfile.txt file-content-1 file-content-2 Команда cat работает только с текстовыми файлами. Вывести этой командой файл другого типа (например, изображение) не получится.
Удаление файлов и папок — rm, rmdir, rm -r
$ rm example.txt # удалили файл example.txt из текущей папки
$ rmdir images # команда удалит папку images из текущей директории, # если папка images пуста
Если в папке, которую вы пытаетесь стереть, есть какие-то файлы, то командная строка не удалит её и выведет сообщение о том, что папка не пуста (англ. Directory not empty).
$ rmdir images
rmdir: images: Directory not empty
$
$ rm -r images # удалили папку images со всем её содержимым из текущей директории
В этом случае команда rm -r (-r — от англ. recursive, «рекурсивный») рекурсивно удаляет файлы и папки. Это значит, что удаление будет последовательно применяться к каждому из элементов в этой папке — пока не сотрёт их все. Затем команда удалит пустую директорию.
💡 Будьте осторожны: удаление объектов командами rm и rmdir необратимо — в этом случае файлы и папки не попадают в корзину и исчезают навсегда.
Эффективная работа с командной строкой
Выполняйте сразу несколько команд
Команды в терминале необязательно вбивать и выполнять по очереди. Их можно указывать не по одной, а сразу списком. Для этого их нужно разделить двумя амперсандами (&&).
$ mkdir second-project && cd second-project && touch index.html style.css
Tab автоматически дописывает не только команды, но и пути. Начните печатать имя папки или файла (они должны быть в той же директории) и нажмите Tab. Терминал заполнит имя автоматически.
$ cd /Users/ # перешли в папку Users
$ cd U[Tab] # ввели первую букву имени пользователя и нажали Tab
$ pwd # теперь проверим, где мы сейчас находимся /Users/Username # мы в папке Username!
при навигации в другую директорию. Если ввести cd с названием папки, а затем нажать Tab, в консоль в качестве подсказки выведутся все возможные пути.
$ cd ~/[Tab] # вывели список директорий, чтобы понять, куда переходить Applications/ Downloads/ Library/ Parallels/ Public/ diagrams/ memes/ python/ Desktop/ Dropbox/ Movies/ Pictures/ bin/ docs/ papers/ tmp/ Documents/ Exercism/ Music/ Postman/ books/ go/ projects/
Если вывод будет слишком большой, консоль спросит, нужно ли показать все возможные варианты.
$ cd ~/[Tab] zsh: do you wish to see all 426 possibilities (429 lines)? # точно хотите увидеть все 426 варианта (429 линий)?
Чтобы подтвердить вывод, нужно нажать y, а чтобы отменить автодополнение — n.
Применяйте команды для быстрой навигации
Напомним основные: pwd — проверить, где мы находимся; ls — посмотреть список файлов/папок в директории; cd — перейти в выбранную папку. С помощью этих команд можно быстро перемещаться между каталогами и изучать их содержимое.
напечатайте в командной строке слеш (/) и дважды нажмите Tab.
/
Applications/ Network/ Library/
System/ Volumes/ Users/
В эту директорию тоже можно быстро перемещаться — с помощью команды cd / + Enter (если у вас macOS или Linux).
В домашнюю директорию можно попасть так же быстро. Вы уже знаете, как это сделать. Символ «тильда» (~) по умолчанию хранит ссылку на домашнюю директорию. Поэтому, чтобы переместиться в неё, достаточно напечатать ~ и нажать Enter.
$ cd ~ $ pwd /Users/Username
$ cd ~/Documents # папка Documents хранится в домашней директории $ pwd /Users/Username/Documents
С помощью && можно выполнить несколько команд сразу — одну за другой. Команды, которые вы выполняете в консоли, попадают в историю. Вы можете перемещаться по этой истории при помощи стрелок ↑↓. При нажатии на Tab консоль предложит несколько вариантов продолжения команды. Символами / и ~ можно быстро перемещаться к корневой и домашней директориям.
Работа с файлом настройки .gitconfig
Навигация pwd (от англ. print working directory, «показать рабочую папку») — покажи, в какой я папке; ls (от англ. list directory contents, «отобразить содержимое директории») — покажи файлы и папки в текущей папке; ls -a — покажи также скрытые файлы и папки, названия которых начинаются с символа .; cd first-project (от англ. change directory, «сменить директорию») — перейди в папку first-project; cd first-project/html — перейди в папку html, которая находится в папке first-project; cd .. — перейди на уровень выше, в родительскую папку; cd ~ — перейди в домашнюю директорию (/Users/Username); cd / — перейди в корневую директорию.
Работа с файлами и папками Создание touch index.html (англ. touch, «коснуться») — создай файл index.html в текущей папке; touch index.html style.css script.js — если нужно создать сразу несколько файлов, можно напечатать их имена в одну строку через пробел; mkdir second-project (от англ. make directory, «создать директорию») — создай папку с именем second-project в текущей папке. Копирование и перемещение cp file.txt ~/my-dir (от англ. copy, «копировать») — скопируй файл в другое место; mv file.txt ~/my-dir (от англ. move, «переместить») — перемести файл или папку в другое место. Чтение cat file.txt (от англ. concatenate and print, «объединить и распечатать») — распечатай содержимое текстового файла file.txt. Удаление rm about.html (от англ. remove, «удалить») — удали файл about.html; rmdir images (от англ. remove directory, «удалить директорию») — удали папку images; rm -r second-project (от англ. remove, «удалить» + recursive, «рекурсивный») — удали папку second-project и всё, что она содержит.
Полезные возможности Команды необязательно печатать и выполнять по очереди. Можно указать их списком — разделить двумя амперсандами (&&). У консоли есть собственная память — буфер с несколькими последними командами. По ним можно перемещаться с помощью клавиш со стрелками вверх (↑) и вниз (↓). Чтобы не вводить название файла или папки полностью, можно набрать первые символы имени и дважды нажать Tab. Если файл или папка есть в текущей директории, командная строка допишет путь сама. Например, вы находитесь в папке dev. Начните вводить cd first и дважды нажмите Tab. Если папка first-project есть внутри dev, командная строка автоматически подставит её имя. Останется только нажать Enter.
Сделать папку репозиторием — git init
$ cd ~/dev/first-project # перешли в нужную папку
$ git init # создали репозиторий
«Разгитить» папку, если что-то пошло не так, — rm -rf .git Если вы случайно сделали Git-репозиторием не ту папку, её можно «разгитить». Для этого нужно удалить скрытую подпапку .git.
Разберём подробнее, что такое -rf: ключ -r (от англ. recursive — «рекурсивно») позволяет удалять папки вместе с их содержимым; ключ -f (от англ. force — «заставить») избавит вас от вопросов вроде «Вы точно хотите удалить этот файл? А этот? И этот тоже?».
Проверить состояние репозитория — git status
Отлично! Подведём итоги: Инициализировать репозиторий можно с помощью команды git init. Проверить статус, или состояние, репозитория поможет команда git status. Если вы ошиблись и случайно инициализировали не ту папку, можно «разгитить» её — удалить скрытую подпапку .git.
Подготовить файлы к сохранению — git add
git add --all (от англ. add — «добавить» + от англ. all — «всё»). Ключ, или флаг, --all позволяет подготовить к сохранению все файлы в репозитории.
$ git add --all # подготовили к сохранению все файлы в репозитории $ git status # проверили статус
Добавлять файлы можно и по одному, без ключа --all. $ git add todo.txt $ git add readme.txt $ git status Также можно добавить текущую папку целиком — в этом случае все файлы в ней тоже будут добавлены. Обратиться к текущей папке в Bash позволяет точка (.). $ git add . # добавить всю текущую папку $ git status Вы можете использовать любой из этих вариантов — результат будет одинаковый
Ура! Очередной урок позади. Подытожим: Команда git add позволяет подготовить файл к сохранению. Команда git add --all подготовит к сохранению сразу все файлы. С помощью git add . можно добавить в репозиторий текущую папку со всеми файлами.
Выполнить коммит — git commit
Сделать коммит можно командой git commit c ключом -m (от англ. message — «сообщение»), который присваивает коммиту сообщение.
Обычно в таком сообщении поясняется, в чём именно состояли изменения. Это как заметки на полях: благодаря им проще читать и понимать текст. Сообщение коммита выполняет те же функции — улучшает понимание и упрощает навигацию. Оно пишется после ключа -m в кавычках.
$ git commit -m "Мой первый коммит!"
Сделать скрытые файлы видемыми
defaults write com.apple.finder AppleShowAllFiles true
killall Finder Обратить скрыть defaults write com.apple.finder AppleShowAllFiles false killall Finder
Просмотреть историю коммитов — git log
GitHub — платформа, которая работает с Git и упрощает командное взаимодействие.
Кроме GitHub, существуют и другие подобные платформы, например GitLab, Bitbucket и так далее. Git — это консольный инструмент для работы с локальными и удалёнными репозиториями. Он не связан напрямую ни с одной из платформ и развивается отдельно от них.
Замечательно! Подведём итоги: SSH — протокол, который обеспечивает безопасный обмен данными в сети и использует для этого ключи. SSH-ключ — ваш виртуальный идентификатор в GitHub. Как ключ от квартиры, он позволяет получить доступ к GitHub-репозиторию. Также SSH используется для доступа к другим удалённым серверам. SSH-ключ состоит из двух частей — публичной и приватной. Приватный ключ шифрует данные, а публичный — расшифровывает. Приватным ключом ни в коем случае нельзя делиться!
$ pbcopy < ~/.ssh/id_rsa.pub
$ pbcopy < ~/.ssh/id_ed25519.pub
Привязать удалённый репозиторий к локальному — git remote add
Убедиться, что репозитории связаны, — git remote -v
git push origin master
git push origin main
В дальнейшем при работе с удалённым репозиторием флаг -u можно опустить и писать просто git push.
Копилка ваших знаний о Git постепенно пополняется! Вот о чём мы рассказали: Коммиты хранятся в ветках. Начальная ветка создаётся автоматически и называется main или master. За отправку изменений на удалённый репозиторий отвечает команда git push. Интерфейс GitHub позволяет удобно просмотреть все коммиты в репозитории, а также изменения в этих коммитах.
Название проекта и его краткое описание: кем создан, для чего, какие решает задачи и какие закрывает проблемы. Технологии, которые применяются в проекте. В чём его отличие от аналогичных. Документация проекта — подробная инструкция о том, что представляет собой проект. Планы проекта, если они есть.
Преимущество README.md в том, что средства командной работы (такие, как GitHub) могут отображать его содержимое в браузере в виде удобной разметки. Для этого нужно не просто залить текст, но и настроить шрифт, заголовки и отступы с помощью markdown. Маркда́ун — это специальный язык разметки. Он позволяет красиво отформатировать текстовый документ. Разберём базовый синтаксис этого языка. Все правила запоминать не нужно: при оформлении репозитория вы всегда можете вернуться к этому уроку. Заголовки, абзацы и перенос Заголовки разных уровней создают решётками.
Можно добавить черту под заголовком или абзацем.
Текст над чертой
Текст под чертой
Чтобы сделать разрыв строки, нужно поставить два пробела (в примере ниже они обозначены точками ⋅⋅) или сочетание символов
.
Текст до переноса⋅⋅
Текст после переноса
Текст после второго переноса
Чтобы начать новый параграф, в конце предыдущей строки должно стоять два символа переноса. Для этого нужно нажать Enter два раза.
line
another line
Если сделать один перенос строки, как в примере ниже, и не поставить два пробела, текст сольётся в одну строку.
line
another line
Вот пример текста в файле README.md.