From 36959ea89df398ae6a4d64ff61ab5c499f8b03bb Mon Sep 17 00:00:00 2001 From: Mykola Solianko Date: Wed, 13 Mar 2019 00:09:28 +0200 Subject: [PATCH 1/4] Add git introduction --- README.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 33a547b..b269be6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,26 @@ -# git_basic -Introduction to git +# Git +Git это распределенная система контроля версий, хранящая снимки(слепки) файловой системы ввиде списка комитов. Т.е. каждый коммит это снимок вашей файловой системы над которой вы работали. Но главное отличие в том что хранится не вся файловая система а имеено те изменеия которые были проведенны над файломм. Иными словами Git это как база данных которая хранит информацию о изменениях. +Под распределенным тут понимаеться то что сам репозиторий размещаеться локально между всеми учасниками репозитория(разработчиками), т.е. они могут работать над своими изменениями локально, и когда надо поделиться своими изменениями(комитами с колегами) то выполняеться так называемая отправка комита или групы коммитов на централизованный сервер, после чего другие учасники проекта могут синхронизироваться с вами "подтянув" ваши изменения с центрального сервера. +В отличие от работы с централизованными системами, в которых необходима постоянная синхронизация с сервером, в git вы можете работать офлайн, и выполнять синхронизацию когда это необходимо. +Распределенность Git немного напоминает работу над одним файлом Google Docs +Git содержит три части: +- Git директория +- Рабочий каталог +- Область подготовленных данных (staging area) +Git директория это каталог который содержит метаданные и базу данных комитов вашего проэкта. Эта самая важная часть git, и при копировании проэкта он содержит директорию .git, котрая содержит все изменения проэкта. Без этого каталога это впринципе обычная ваша файловая система +Рабочий каталог это файловая система вашего проэкта соответсвующая последнему вашему коммиту(т.е. извлеченная из базы данных) +Область подготовленных данных хранит содержимое следующего коммита. Разделяют 4 состояния +- Неотслеживаемый(untracked) файл/ы находяться локально, но отстутсвую в списке комитов(HEAD) +- Изменен, т.е. локально есть изменеия которые отличаються от последнего снимка репозитория +- Подготовлен, т.е. мы подготавливаем списки файлов для следующего коммита +- Без изменения наш локальный репозитория(рабочая директория) такая же как последний снимок файловой системы. +В git выделяют две важных сущности: +- Коммиты +- Ветки +## Коммит +Коммит это основной объект в git. Коммит это как связаный список изменений в репозитории. Коммит представлет собой все изменения ввиде хеша(по которому можно увидеть изменения того или иного коммита). Если произвести изменения в том или ином коммите то git пересчитает хеши все выше коммитов. Также коммит хранит и другие свойства как кто автор коммита, коментарий к коммиту +## Ветка +Если вы работаете над большим проэктом, и есть разный тип задач, то и возникает такое понятие как ветка, т.е. разработчик создает ветку которая соответсвует его задачи и он вносит измения именно в эту ветку не мешая работе другим разработчиком работающим над этим проэктом. Т.е. ветка это как некая изоляция проекта. После окончания работы над веткой она сливаеться с так называемой родительской веткой, и потом родительская ветка синхронизируеться с другими учасниками проэкта, а эта ветка может быть удалена. +Ветка характеризуеться неким указателем HEAD, который указывает на последний коммит в ветке. Ветка может брать начало от другой ветки. +### Основные команды git + From c30efbef4c6bac9865bcb2091dc5feba1185a562 Mon Sep 17 00:00:00 2001 From: Mykola Solianko Date: Wed, 13 Mar 2019 13:59:16 +0200 Subject: [PATCH 2/4] Add description basic git command --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b269be6..71d6bdf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Git -Git это распределенная система контроля версий, хранящая снимки(слепки) файловой системы ввиде списка комитов. Т.е. каждый коммит это снимок вашей файловой системы над которой вы работали. Но главное отличие в том что хранится не вся файловая система а имеено те изменеия которые были проведенны над файломм. Иными словами Git это как база данных которая хранит информацию о изменениях. +Система контроля версий(СКВ) - это система регистрирущая изменения в одном или нскольких файлах, с тем чтобы в дальнейшем была возможность вернуться к определённым старым версиям этих файлов. Бывают следующие типы СКВ: +- Локальные, т.е. выполнение и мониторинг изменений присущий только одному компьютеру. +- Централизованная СКВ. Т.е. все раюотают над копией репозитория находящейся на центральном сервере, это позволяло решить проблему сотрудничества между разработчиками. Но самый большим недостатком есть то что сервер есть уязвимым местом, т.е. если сервер полетел, то востановить репозиторий будет кайне сложно. +- Распределенные СКВ. Т.е. клиенты получают не просто последние версии файлов, а полностью копируют весь репозиторий. +Одним из видов СКВ, который явлеться очень популярным на сегодняшний день это git. Git это распределенная система контроля версий, хранящая снимки(слепки) файловой системы ввиде списка комитов. Т.е. каждый коммит это снимок вашей файловой системы над которой вы работали. Но главное отличие в том что хранится не вся файловая система а имеено те изменеия которые были проведенны над файломм. Иными словами Git это как база данных которая хранит информацию о изменениях. Под распределенным тут понимаеться то что сам репозиторий размещаеться локально между всеми учасниками репозитория(разработчиками), т.е. они могут работать над своими изменениями локально, и когда надо поделиться своими изменениями(комитами с колегами) то выполняеться так называемая отправка комита или групы коммитов на централизованный сервер, после чего другие учасники проекта могут синхронизироваться с вами "подтянув" ваши изменения с центрального сервера. В отличие от работы с централизованными системами, в которых необходима постоянная синхронизация с сервером, в git вы можете работать офлайн, и выполнять синхронизацию когда это необходимо. Распределенность Git немного напоминает работу над одним файлом Google Docs @@ -8,12 +12,13 @@ Git содержит три части: - Рабочий каталог - Область подготовленных данных (staging area) Git директория это каталог который содержит метаданные и базу данных комитов вашего проэкта. Эта самая важная часть git, и при копировании проэкта он содержит директорию .git, котрая содержит все изменения проэкта. Без этого каталога это впринципе обычная ваша файловая система -Рабочий каталог это файловая система вашего проэкта соответсвующая последнему вашему коммиту(т.е. извлеченная из базы данных) +Рабочий каталог это файловая система вашего проэкта соответсвующая последнему вашему коммиту(т.е. извлеченная из базы данных). Область подготовленных данных хранит содержимое следующего коммита. Разделяют 4 состояния - Неотслеживаемый(untracked) файл/ы находяться локально, но отстутсвую в списке комитов(HEAD) - Изменен, т.е. локально есть изменеия которые отличаються от последнего снимка репозитория - Подготовлен, т.е. мы подготавливаем списки файлов для следующего коммита - Без изменения наш локальный репозитория(рабочая директория) такая же как последний снимок файловой системы. +Основной инструмент для работы c Git это CLI, но иногда и используют графические инструменты для работы с Git, или используют расширения для популярных IDE В git выделяют две важных сущности: - Коммиты - Ветки @@ -22,5 +27,33 @@ Git директория это каталог который содержит ## Ветка Если вы работаете над большим проэктом, и есть разный тип задач, то и возникает такое понятие как ветка, т.е. разработчик создает ветку которая соответсвует его задачи и он вносит измения именно в эту ветку не мешая работе другим разработчиком работающим над этим проэктом. Т.е. ветка это как некая изоляция проекта. После окончания работы над веткой она сливаеться с так называемой родительской веткой, и потом родительская ветка синхронизируеться с другими учасниками проэкта, а эта ветка может быть удалена. Ветка характеризуеться неким указателем HEAD, который указывает на последний коммит в ветке. Ветка может брать начало от другой ветки. +### Создание репозитория +Есть два подхода к созданию репозитория. Первый это если вам не нужен сервер ил место для хранения вашего репозитория вы его можете создать локально используя CLI. Второй подход это если вам необходимо хранилище вы создаете репозиторий удаленно (GitHub или Gitlab). +https://help.github.com/en/articles/adding-an-existing-project-to-github-using-the-command-line ### Основные команды git - +Синтаксис для работы с git выглядит примерно следующим образом +``` +git команда аргументы +``` +В принцепе для работы над существующим репозиторием хватит 6 git команды: +- Клонирование проекта, т.е. мы загружаем последние изменения с удаленного репозитория +``` +git clone +или +git clone имя_директории - в это случае git создаст название директории указанной вами вместо названия репозитория +``` +- Просмотр изменений в репозитории(staging area) +``` +git status +``` +Эта команда покажет список измененых файлов на данный момент в вашем проекте +- Просмотр изменений в файлах между последним локальным коммитом и вашими изменениями на текущий момент(то что находиться staging area) +``` +git diff +``` +- Добавление изменений в наш репозиторий(staging area) +``` +git add . +или +git add -A +``` From 453bdf0f73162a066361719be2532ad1c26c11f5 Mon Sep 17 00:00:00 2001 From: Mykola Solianko Date: Wed, 13 Mar 2019 16:18:37 +0200 Subject: [PATCH 3/4] Add init workflow --- README.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/README.md b/README.md index 71d6bdf..3a2f622 100644 --- a/README.md +++ b/README.md @@ -57,3 +57,81 @@ git add . или git add -A ``` +- Запись наших изменений в локальную базуданных, т.е. запись изменений в локальный репозиторий. +``` +git commit -m message +git commit - открытие редактора по умолчанию для написания названиякоммита +git commit -a -m message - это еще один способ сразу добавить все изменения из staging area и сделать коммит +git commit --amend - заменить предыдущий коммит с новыми изменениями(staging changes). +``` +- Отправка локальных изменений на удаленный сервер +``` +git push origin имя_ветки +``` +В этом случае мы отправляем все наши локальные новые коммиты на удаленный репозиторий. +- Переключение на другую ветку +``` +git checkout имя_переключаемой_ветки +``` +- Добавление новой ветки в локальный репозиторий +``` +git checkout -b имя_переключаемой_ветки +git branch имя_ветки +``` +Новая ветка, т.е. HEAD будет совпадать с тем HEAD ветки от которого мы создали ветку +- Просмотр истории ветки +``` +git log - просмотр разниреной историй репозитоия +git log --oneline - просмотр сокращеных хешей с текстом коммита +git log --oneline --graph - просмотр истории изменения ввиде дерева +``` +### Создание репозиторияс нуля локально +``` +# Инициализаци локального репозитория +git init - после этого в нашем рабочей директории появиться скрытая директория .git, создаеться дефолтная ветка master + +# создаем файл локально, роли неиграет каким способом +touch README.md +cat << EOF > README.md +Test repo + +# проверяем состояние репозитория +git status +# видим что файл сейчас в состоянии Untracked(ну это и понятно так как у нас репозитий то был пустой) + +#прошуобратить внимание что мы не может выполнить команду git diff, т.к. эта команда делает разницу между двумя коммитами уже существующего файла в репозитории +# подготовливаем созданный нами файл к коммиту, переведя его в подготовленное состояние +git add . + +#если повторно выполнить проверку состояния, то мыувидим что у нас список файлов изменил цвет, и написано что изменения готовы к коммиту +git status + +# ну и делаем коммит +git commit -m "My first commit" + +#давайте например что то поменяем в нашем файле добавим новую строчку New line +#делаем проверку изменений +git status +# мы видим уже другое сообщение что изменения были произведены над файлом и они еще не подготовленны +# выполним команду разницы коммитов +git diff +# и можно увидеть что мы добавили +# дальше подготовливаем наш файл +git add . + +# И можем выполнить два действия +# первое если мы хотим внести изменения в ранее созданный нами коммит, то надо выполнить git commit --amend +# но мы создадим новый коммит +git commit -m "Add new line" +``` +### Создание удаленного репозитория +Все что мы делали перед этим это все изменения локально, но что надо делать чтобы довать наш репозитория удаленно, например на GitHub +Для начала нам необходимо в нашем профиле создать новый репозиторий на GitHub +Дальше необходимо выполнить следующие команды +``` +git remote add origin +#url скопирован с GitHub +#Дальше отправляем наши изменения на сервер +git push origin master +``` +И все наш репозиторий теперь на Github \ No newline at end of file From 4444354339c1c2b9f29a498d073b7bbb9c0fa68a Mon Sep 17 00:00:00 2001 From: AlexFurman89 <49728152+AlexFurman89@users.noreply.github.com> Date: Fri, 13 Sep 2019 13:57:18 +0300 Subject: [PATCH 4/4] Update README.md --- README.md | 136 ------------------------------------------------------ 1 file changed, 136 deletions(-) diff --git a/README.md b/README.md index 3a2f622..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,137 +1 @@ -# Git -Система контроля версий(СКВ) - это система регистрирущая изменения в одном или нскольких файлах, с тем чтобы в дальнейшем была возможность вернуться к определённым старым версиям этих файлов. Бывают следующие типы СКВ: -- Локальные, т.е. выполнение и мониторинг изменений присущий только одному компьютеру. -- Централизованная СКВ. Т.е. все раюотают над копией репозитория находящейся на центральном сервере, это позволяло решить проблему сотрудничества между разработчиками. Но самый большим недостатком есть то что сервер есть уязвимым местом, т.е. если сервер полетел, то востановить репозиторий будет кайне сложно. -- Распределенные СКВ. Т.е. клиенты получают не просто последние версии файлов, а полностью копируют весь репозиторий. -Одним из видов СКВ, который явлеться очень популярным на сегодняшний день это git. Git это распределенная система контроля версий, хранящая снимки(слепки) файловой системы ввиде списка комитов. Т.е. каждый коммит это снимок вашей файловой системы над которой вы работали. Но главное отличие в том что хранится не вся файловая система а имеено те изменеия которые были проведенны над файломм. Иными словами Git это как база данных которая хранит информацию о изменениях. -Под распределенным тут понимаеться то что сам репозиторий размещаеться локально между всеми учасниками репозитория(разработчиками), т.е. они могут работать над своими изменениями локально, и когда надо поделиться своими изменениями(комитами с колегами) то выполняеться так называемая отправка комита или групы коммитов на централизованный сервер, после чего другие учасники проекта могут синхронизироваться с вами "подтянув" ваши изменения с центрального сервера. -В отличие от работы с централизованными системами, в которых необходима постоянная синхронизация с сервером, в git вы можете работать офлайн, и выполнять синхронизацию когда это необходимо. -Распределенность Git немного напоминает работу над одним файлом Google Docs -Git содержит три части: -- Git директория -- Рабочий каталог -- Область подготовленных данных (staging area) -Git директория это каталог который содержит метаданные и базу данных комитов вашего проэкта. Эта самая важная часть git, и при копировании проэкта он содержит директорию .git, котрая содержит все изменения проэкта. Без этого каталога это впринципе обычная ваша файловая система -Рабочий каталог это файловая система вашего проэкта соответсвующая последнему вашему коммиту(т.е. извлеченная из базы данных). -Область подготовленных данных хранит содержимое следующего коммита. Разделяют 4 состояния -- Неотслеживаемый(untracked) файл/ы находяться локально, но отстутсвую в списке комитов(HEAD) -- Изменен, т.е. локально есть изменеия которые отличаються от последнего снимка репозитория -- Подготовлен, т.е. мы подготавливаем списки файлов для следующего коммита -- Без изменения наш локальный репозитория(рабочая директория) такая же как последний снимок файловой системы. -Основной инструмент для работы c Git это CLI, но иногда и используют графические инструменты для работы с Git, или используют расширения для популярных IDE -В git выделяют две важных сущности: -- Коммиты -- Ветки -## Коммит -Коммит это основной объект в git. Коммит это как связаный список изменений в репозитории. Коммит представлет собой все изменения ввиде хеша(по которому можно увидеть изменения того или иного коммита). Если произвести изменения в том или ином коммите то git пересчитает хеши все выше коммитов. Также коммит хранит и другие свойства как кто автор коммита, коментарий к коммиту -## Ветка -Если вы работаете над большим проэктом, и есть разный тип задач, то и возникает такое понятие как ветка, т.е. разработчик создает ветку которая соответсвует его задачи и он вносит измения именно в эту ветку не мешая работе другим разработчиком работающим над этим проэктом. Т.е. ветка это как некая изоляция проекта. После окончания работы над веткой она сливаеться с так называемой родительской веткой, и потом родительская ветка синхронизируеться с другими учасниками проэкта, а эта ветка может быть удалена. -Ветка характеризуеться неким указателем HEAD, который указывает на последний коммит в ветке. Ветка может брать начало от другой ветки. -### Создание репозитория -Есть два подхода к созданию репозитория. Первый это если вам не нужен сервер ил место для хранения вашего репозитория вы его можете создать локально используя CLI. Второй подход это если вам необходимо хранилище вы создаете репозиторий удаленно (GitHub или Gitlab). -https://help.github.com/en/articles/adding-an-existing-project-to-github-using-the-command-line -### Основные команды git -Синтаксис для работы с git выглядит примерно следующим образом -``` -git команда аргументы -``` -В принцепе для работы над существующим репозиторием хватит 6 git команды: -- Клонирование проекта, т.е. мы загружаем последние изменения с удаленного репозитория -``` -git clone -или -git clone имя_директории - в это случае git создаст название директории указанной вами вместо названия репозитория -``` -- Просмотр изменений в репозитории(staging area) -``` -git status -``` -Эта команда покажет список измененых файлов на данный момент в вашем проекте -- Просмотр изменений в файлах между последним локальным коммитом и вашими изменениями на текущий момент(то что находиться staging area) -``` -git diff -``` -- Добавление изменений в наш репозиторий(staging area) -``` -git add . -или -git add -A -``` -- Запись наших изменений в локальную базуданных, т.е. запись изменений в локальный репозиторий. -``` -git commit -m message -git commit - открытие редактора по умолчанию для написания названиякоммита -git commit -a -m message - это еще один способ сразу добавить все изменения из staging area и сделать коммит -git commit --amend - заменить предыдущий коммит с новыми изменениями(staging changes). -``` -- Отправка локальных изменений на удаленный сервер -``` -git push origin имя_ветки -``` -В этом случае мы отправляем все наши локальные новые коммиты на удаленный репозиторий. -- Переключение на другую ветку -``` -git checkout имя_переключаемой_ветки -``` -- Добавление новой ветки в локальный репозиторий -``` -git checkout -b имя_переключаемой_ветки -git branch имя_ветки -``` -Новая ветка, т.е. HEAD будет совпадать с тем HEAD ветки от которого мы создали ветку -- Просмотр истории ветки -``` -git log - просмотр разниреной историй репозитоия -git log --oneline - просмотр сокращеных хешей с текстом коммита -git log --oneline --graph - просмотр истории изменения ввиде дерева -``` -### Создание репозиторияс нуля локально -``` -# Инициализаци локального репозитория -git init - после этого в нашем рабочей директории появиться скрытая директория .git, создаеться дефолтная ветка master -# создаем файл локально, роли неиграет каким способом -touch README.md -cat << EOF > README.md -Test repo - -# проверяем состояние репозитория -git status -# видим что файл сейчас в состоянии Untracked(ну это и понятно так как у нас репозитий то был пустой) - -#прошуобратить внимание что мы не может выполнить команду git diff, т.к. эта команда делает разницу между двумя коммитами уже существующего файла в репозитории -# подготовливаем созданный нами файл к коммиту, переведя его в подготовленное состояние -git add . - -#если повторно выполнить проверку состояния, то мыувидим что у нас список файлов изменил цвет, и написано что изменения готовы к коммиту -git status - -# ну и делаем коммит -git commit -m "My first commit" - -#давайте например что то поменяем в нашем файле добавим новую строчку New line -#делаем проверку изменений -git status -# мы видим уже другое сообщение что изменения были произведены над файлом и они еще не подготовленны -# выполним команду разницы коммитов -git diff -# и можно увидеть что мы добавили -# дальше подготовливаем наш файл -git add . - -# И можем выполнить два действия -# первое если мы хотим внести изменения в ранее созданный нами коммит, то надо выполнить git commit --amend -# но мы создадим новый коммит -git commit -m "Add new line" -``` -### Создание удаленного репозитория -Все что мы делали перед этим это все изменения локально, но что надо делать чтобы довать наш репозитория удаленно, например на GitHub -Для начала нам необходимо в нашем профиле создать новый репозиторий на GitHub -Дальше необходимо выполнить следующие команды -``` -git remote add origin -#url скопирован с GitHub -#Дальше отправляем наши изменения на сервер -git push origin master -``` -И все наш репозиторий теперь на Github \ No newline at end of file