Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒Общая⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐FreeBSD and Nix
⇐1С
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

Основы Git


 

Основы Git


Очень простой практический мануал по действиям для самых основ в Git

Тут будет минимум теории, проще рассматривать статью, как шпаргалку


Дано:
server - 10.0.2.10
client - 10.0.2.11


Git - система контроля версий, установку приведу на примере Centos 7

# yum install git && git --version

# useradd git
# passwd git
# su git

Базовые настройки информации:
# git config --global user.name "Your_Name"
# git config --global user.email "Your_Name@Your_Domain"

# git config --list
user.name=Your_Name
user.email=Your_Name@Your_Domain

# cat ~/.gitconfig
[user]
name = Your_Name
email = Your_Name@Your_Domain


Справка по командам:
# git --help


Инициализация репозитория и клонирование

Инициализируем локальный репозиторий, даем доступ по ssh клиенту


На сервере:
# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers git
# systemctl restart sshd

# su git
# mkdir ~/.ssh && touch ~/.ssh/authorized_keys
# mkdir ~/gitrepo && cd ~/gitrepo
# git init --bare test_project.git
Initialized empty Git repository in /home/git/gitrepo/test_project.git/

Чтоб в будущем при коннекте не возникла ошибка:
Authentication refused: bad ownership or modes for directory
Делаем:
# su git
# chmod go-w ~/
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys


На клиенте:
# yum install git && git --version
# useradd git
# passwd git


# su git
# git config --global user.name "Your_Name"
# git config --global user.email "Your_Name@Your_Domain"

# ssh-keygen
# cat ~/.ssh/id_rsa.pub | ssh git@10.0.2.10 "cat >> /home/git/.ssh/authorized_keys"

Проверяем:
# ssh git@10.0.2.10
Last login: Tue Jun 25 08:30:46 2019
Ctrl + D


Клонирование репозитория в пустой каталог:

# mkdir ~/gitrepo && cd ~/gitrepo

# git clone ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git test_project.git
Cloning into 'test_project.git'...
warning: You appear to have cloned an empty repository.


Добавление файла в индекс и коммит в ветку мастер:
# cd test_project.git/
# echo 'test' > test.txt
# git add .
# git commit -m 'test commit'
# git push origin master


Инициализация локального репозитория и подключение удаленного:

# mkdir ~/gitrepo/repoinit && cd ~/gitrepo/repoinit
# git init
Initialized empty Git repository in /home/git/gitrepo/repoinit/.git/

# git add .
# git commit -m 'test init commit'
# git remote add origin ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git
# git pull ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git
# git push origin master
Everything up-to-date

# echo 'testinit' > testinit.txt
# git add .
# git commit -m 'test init 2 commit'
# git push
# git pull origin master
From ssh://10.0.2.10:22/home/git/gitrepo/test_project
*  branch  master  ->  FETCH_HEAD
Already up-to-date.


Имя репозитория по умолчанию origin:
# git remote
origin

# git remote -v
origin  ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git (fetch)
origin  ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git (push)


Команда "git pull origin master" выкачивает из репозитория origin ветку master
Соответственно команда "git push origin master" закачивает в репозиторий origin ветку master


Более подробная информация о удаленном репозиторие:
# git remote show origin
* remote origin
Fetch URL: ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git
Push  URL: ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (up to date)


Из вывода мы видим 2 ветки на удаленном репозиторие master и tracked
Переименовать название репозитория можно было бы так: git remote rename origin newreponame


Конфигурационный файл .git/config

# cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = ssh://git@10.0.2.10:22/home/git/gitrepo/test_project.git
fetch = +refs/heads/*:refs/remotes/origin/*


Статус файлов


Создадим новый файл, его статус будет неотслеживаемым:

# echo "untracked" > test2.tx

# git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test2.tx
nothing added to commit but untracked files present (use "git add" to track)

# git status -s
?? test2.tx


Добавить файл в индекс и сделать коммит:
# git add test2.tx

Файл стал отслеживаемым:

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

# git status -s
A  test2.tx


Внесем изменения:
# echo "untracked 2" >> test2.tx

Файл дополнительно к новому стал еще и модифицированным:

# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   test2.tx
#
# 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:   test2.tx
#

# git status -s
AM test2.tx


Т.к. мы не делали коммит на стадии нового файла, изменения при коммите сейчас не сохранятся


Внесем изменения:
# git add test2.tx

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

# git status -s
A  test2.tx


Подтвердим изменения и отправим их в репозиторий:
# git commit -m 'adding new file'
# git push origin master


Игнорирование файлов с помощью .gitignore

Понимает указание как одиночных файлов, так и директорий и масок

Примеры:
# touch ignorefile.txt
# touch ignorefile1.text
# touch ignorefile2.text

# echo 'ignorefile.txt' > .gitignore
# echo '*.text' >> .gitignore


# git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
nothing added to commit but untracked files present (use "git add" to track)


Изменения по отношению к коммиченному состоянию можно посмотреть с помощью diff:

# echo 'New string' >> test.txt

# git diff
diff --git a/test.txt b/test.txt
index 9daeafb..144d65f 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
 test
+New string


Удалить из индекса файл (вызовет ошибку т.к. мы вносили изменения):
# git rm test.txt

Воспользуемся опцией f:
# git rm -f test.txt


Внесем изменения в репозиторий:
# git commit -m 'delete test.txt'
# git push


Переименовать файл:
# git mv test2.tx test2.txt
# git commit -m 'mv test.txt'
# git push


Вывести логи по коммитам:
# git log

Логи с разницей:
# git log -p

Лооги с id и комментарием:
# git log --pretty=oneline

Поиск по вхождению:
# git log -S "test"

Последние два лога:
# git log -2


Откат внесенных изменений к предыдущему коммиту:

# echo 'new' >> test2.txt

# gitstatus
bash: gitstatus: command not found

# git status
# On branch 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:   test2.txt

# git checkout -- test2.txt

# cat test2.txt
untracked
untracked 2

 

 
 

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

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

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


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru