180 likes | 229 Views
Локальные и централизованные СУВ. Схема локальной СУВ. Схема централизованной СУВ. Распределенная СУВ. Различия Git и остальных СУВ. Другие системы хранят данные как изменения к базовой версии для каждого файла (патчи). Git хранит данные как слепки состояний проекта во времени.
E N D
Локальные и централизованные СУВ Схема локальной СУВ. Схема централизованной СУВ.
Различия Git и остальных СУВ Другие системы хранят данные как изменения к базовой версии для каждого файла (патчи) Git хранит данные как слепки состояний проекта во времени
Рабочий каталог, область подготовленных файлов, каталог Git
Начало работы $ git config --global user.name "Your Name" $ git config --global user.email "your_email@whatever.com" Создание нового репозитория $ git init Индексация и фиксация изменений $ git add *.c $ git add README $ git commit -m 'initial project version' Клонирование существующего репозитория: $ git clone git://github.com/schacon/grit.git
Определение состояния файлов $ git status # On branch master nothing to commit (working directory clean) Добавляем простой файл README $ vim README $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track)
Отслеживание новых файлов $ git add README $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # Изменим файл benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb #
Отслеживание новых файлов $ git add benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb #
Изменение проиндексированного файла $ vim benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb #
Игнорирование файлов $ cat .gitignore # комментарий – эта строка игнорируется *.a # не обрабатывать файлы, имя которых заканчивается на .a !lib.a # НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила /TODO # игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO build/ # игнорировать все файлы в каталоге build/ doc/*.txt # игнорировать doc/notes.txt, но не doc/server/arch.txt
Просмотр индексированных и неиндексированных изменений $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb # $ git diff diff --git a/benchmarks.rb b/benchmarks.rb index 3cb747f..da65585 100644 --- a/benchmarks.rb +++ b/benchmarks.rb @@ -36,6 +36,10 @@ def main @commit.parents[0].parents[0].parents[0] end + run_code(x, 'commits 1') do + git.commits.size + end + run_code(x, 'commits 2') do log = git.commits('master', 15) log.size
Сравнение индексированных изменений с последним коммитом $ git diff --cached diff --git a/README b/README new file mode 100644 index 0000000..03902a1 --- /dev/null +++ b/README2 @@ -0,0 +1,5 @@ +grit + by Tom Preston-Werner, Chris Wanstrath + http://github.com/mojombo/grit + +Grit is a Ruby library for extracting information from a Git rep
Фиксация изменений $ git commit # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb ~ ~ ~ ".git/COMMIT_EDITMSG" 10L, 283C Или (можно добавить -m): $ git commit -m "Story 182: Fix benchmarks for speed" [master]: created 463dc4f: "Fix benchmarks for speed" 2 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 README
Игнорирование индексации $ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks 1 files changed, 5 insertions(+), 0 deletions(-)
Просмотр истории коммита $ git log commit 2f95134938d71665bdd40f9626fcb142c904d048 Author: Alexander Dmitriev <golostos@yandex.ru> Date: Wed Oct 5 01:32:13 2011 +0400 Updated index.html commit e2e24f36cffcba3705692d2602af3f3784934ecf Author: Alexander Dmitriev <golostos@yandex.ru> Date: Wed Oct 5 01:30:49 2011 +0400 Hello uses style.css $ git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short * 2f95134 2011-10-05 | Updated index.html (HEAD, style, master) [Alexander Dmitriev] * e2e24f3 2011-10-05 | Hello uses style.css [Alexander Dmitriev]
Удаление файлов Если просто удалить, то файл становится измененным, но непроиндексированным $ rmgrit.gemspec $ git status # On branch master # # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed) # # deleted: grit.gemspec # $ gitrmgrit.gemspec rm 'grit.gemspec' $ git status # On branch master # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: grit.gemspec # После следующего коммита файл исчезнет и больше не будет отслеживаться.
Перемещение файлов $ gitmvfile_fromfile_to $ gitmv README.txt README $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: README.txt -> README # Однако, это эквивалентно выполнению следующих команд: $ mv README.txt README $ gitrm README.txt $ git add README