Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Введение в GIT


 

Введение в GIT


Здесь не будет воды, только примеры применения


GIT - система контроля версий


Установка:
$ apt-get install git
$ yum install git


Установим пользователя и почту для отслеживания изменений git:
$ git config --global user.name "peasant"
$ git config --global user.email "peasant@localhost"


Появится файл конфигурации:
$ ls -la | grep git
.gitconfig


$ cat .gitconfig
[user]
name = peasant
email = peasant@localhost


$ git config --list
user.name=peasant
user.email=peasant@localhost


Внесем изменения в конфигурацию:
$ git config --system system.name "git_system_repo_one"
$ git config --global system.name "git_global_repo_one"


Глобальная конфигурация приоритетней системной:
$ git config --list
system.name=git_system_repo_one
user.name=peasant
user.email=peasant@localhost
system.name=git_global_repo_one

$ cat /etc/gitconfig
[system]
name = git_system_repo_one


Назначим редактор по умолчанию:
$ git config --global core.editor "vim"


Создадим пустой репозиторий:
$ mkdir testrepo && cd testrepo && git init && ls -a .git
branches  config  description  HEAD  hooks  info  objects  refs


Проверим статус:
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Видим, что находимся в ветке мастер и нам нечего коммитить


Создадим новый файл:
$ echo "test" > test.txt

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test.txt

nothing added to commit but untracked files present (use "git add" to track)


Добавим его в отслеживание репозиторием:
$ git add test.txt && git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   test.txt


Необходимо зафиксировать изменения в репозитории:
$ git commit -m "Peasant add new testfile" && git status
[master (root-commit) 0c39ff0] Peasant add new testfile
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
On branch master
nothing to commit, working tree clean

В комманде присутствует указание комментария


Удалим файл и подтвердим изменения:
$ rm -rf test.txt


$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    test.txt

no changes added to commit (use "git add" and/or "git commit -a")


$ git rm test.txt
rm 'test.txt'


$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    test.txt


$ git commit -m "delete testfile"
[master 0fc3a3f] delete testfile
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt


$ git status
On branch master
nothing to commit, working tree clean


Создадим новый файл и заставим git игнорировать его:
$ touch test.txt


Добавим маску игнорируемых файлов:
$ echo "test*" > .gitignore


Внесем файл игнора в отслеживание:
$ git add .gitignore && git commit -m "add gitignore"
[master 45f58cf] add gitignore
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore


Теперь при добавлении файлов нам будет выводиться список игнорируемых:
$ git add *
The following paths are ignored by one of your .gitignore files:
test.txt
Use -f if you really want to add them.


Склонируем репозиторий, между ними будет связь:
$ cd .. && git clone testrepo/ testrepoclone
Cloning into 'testrepoclone'...
done.


Внесем изменения в клоне репозитория:
$ cd testrepoclone && echo "new" > newfile.txt


$ git add newfile.txt && git commit -m "new"
[master fd6840f] new
 1 file changed, 1 insertion(+)
 create mode 100644 newfile.txt


$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean


Перейдем в папку начального репозитория и скачаем изменения с клона:
$ cd ../testrepo && git pull ../testrepoclone/ && cat newfile.txt
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../testrepoclone
 * branch            HEAD       -> FETCH_HEAD
Updating 45f58cf..fd6840f
Fast-forward
 newfile.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 newfile.txt
new


Перейдем в клонированный репозиторий:
$ cd ../testrepoclone/ && git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Видно, что оригинальный имеет одно различие с клоном


Применем изменения:
$ git push && git status
Everything up-to-date
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Больше различий между репозиториями нет


Чтоб работать с репозиториями по сети ip адресу:
$ ifconfig | grep inet
inet 192.168.0.129


Создайте ключи у пользователя:
$ ssh-keygen


И произведите обмен ключами:
$ ssh-copy-id peasant@192.168.0.129


Склонируем по сети репозиторий:
$ mkdir ../iprepo && cd ../

$ git clone peasant@192.168.0.129:/home/peasant/testrepo/ iprepo


Перейдем в клонированный репозиторий:
$ cd iprepo && git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean


Попробуем задать тэги (метки) для доп. информации

Создадим тэг для текущего коммита:
$ git tag one && git tag
one


Внесем изменения в репозиторий:
$ echo "file" > file.txt && git add file.txt && git commit -m "file"
[master 88741ec] file
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt


Теперь посмотрим, какие изменения произошли по отношению коммиту с тэгом:
$ git show one
commit fd6840f010ac8d0260a4c98c57a203437a4211b6 (tag: one, origin/master, origin/HEAD)
Author: peasant <peasant@localhost>
Date:   Mon Aug 10 09:03:54 2020 +0000

    new

diff --git a/newfile.txt b/newfile.txt
new file mode 100644
index 0000000..3e75765
--- /dev/null
+++ b/newfile.txt
@@ -0,0 +1 @@
+new


Информация о тэгах (имя-количество коммитов с его создания-ссылка):
$ git describe --tags
one-1-g88741ec


Создадим аннотированный тэг для текущего коммита:
$ git tag -a v1 -m "tag two" && git tag
one
v1


Внесем изменения в репозиторий:
$ echo "file2" > file2.txt && git add file2.txt && git commit -m "file2"
[master 8f55b71] file2
 1 file changed, 1 insertion(+)
 create mode 100644 file2.txt


$ git show v1
tag v1
Tagger: peasant <peasant@localhost>
Date:   Mon Aug 10 09:35:39 2020 +0000

tag two

commit 88741ec14858a6cb942f6b7e18f349c7e8ba8fe7 (tag: v1)
Author: peasant <peasant@localhost>
Date:   Mon Aug 10 09:31:42 2020 +0000

    file

diff --git a/file.txt b/file.txt
new file mode 100644
index 0000000..f73f309
--- /dev/null
+++ b/file.txt
@@ -0,0 +1 @@
+file


$ git describe --tags
v1-1-g8f55b71


Мы находимся на ветке мастер:
$ git status | grep "On branch"
On branch master


Создадим новую ветку и перейдем в нее:
$ git checkout -b dev
Switched to a new branch 'dev'

По сути мы скопировали ветку мастер и теперь дев - независимая копия


Выведем список ветвей(* - указывает в какой ветви находимся):
$ git branch -a
* dev
  master


Перейдем обратно в ветку мастер:
$ git checkout master
Switched to branch 'master'


Создадим изменения в обоих ветках:
$ echo "master" > master.txt && git add master.txt && git commit -m "master"


$ git checkout dev


$ echo "dev" > dev.txt && git add dev.txt && git commit -m "dev"


Вольем изменения ветки дев в мастер:
$ git checkout master && git merge dev --no-ff

--no-ff - отключение фастфорвард для информативности


Проверяем:
$ cat dev.txt
dev


Теперь проверим журнал событий:
$ git log

Вверху будет самое последнее


Вывод в формате одной строки:
$ git log --pretty=oneline


Вывод в формате одной строки + визуальное дерево событий:
$ git log --pretty=oneline --graph


И вывести информацию по событию из журнала логов:
$ git show a82a682af624a914a216ac92ff051cdfec5df4c3

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект