1. Введение
2. Запуск консоли для работы с Git
3. Git, простые примеры
3.1. Настройка Git-репозитория
3.1.1. Пример 1: создание репозитория и установка локальных настроек
3.1.2. Пример 2: то же что и пример1, но короче запись
3.1.3. Пример 3: установка пользовательских настроек
3.2. Простые операции с одним репозиторием
3.2.1. Пример 1: создать репозиторий, зафиксировать изменения
3.2.2. Пример 2: создать репозиторий, сделать 3 фиксации
3.2.3. Пример 3: работа с git checkout (возврат)
3.2.4. Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)
3.2.5. Пример 5: работа с git branch (слияние двух веток)
3.3. Операции с двумя репозиториями
3.3.1. Пример 1: создать реп, отклонироваться, внести изменения в первый, обновиться во втором
3.3.2. Пример 2: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.3. Пример 3: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.4. Пример 4: втолкнуть данные в удалённый пустой репозиторий
3.3.5. Пример 5: втолкнуть данные в удалённый не пустой репозиторий
3.4. Заключение
Введение
В этой части мы рассмотрим работу с репозиторием git на примерах
Команды, которые будут использоваться здесь, кратко описаны в предыдущей части Git, краткий справочник команд.
Запуск консоли для работы с Git
В одной из предыдущих статей я расказал, как установить Git на ваш компьютер. Сейчас я исхожу из того, что у вас всё установлено.
Напомню ещё раз, что должно быть на данный момент:
- у вас установлен Git примерно в такую папку c:\Program Files (x86)\Git\
- у вас создан текстовый файл c:\bin\gitbash.bat с содержимым @%WINDIR%\system32\cmd.exe /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"
- путь c:\bin\ добавлен в переменную окружения PATH
Если что-то не сделано, прочитайте ещё раз статью по установке Git.
Имея эти настройки, мы можем вызывать MINGW32 консоль для работы с git, находясь в любой папке, просто набрав команду
gitbashДалее я исхожу из того, что мы работаем в MINGW32 консоли.
Создадим папку c:\git для запуска примеров в ней:
cd c: mkdir git cd gitПосле этого мы располагаемся в директории c:\git. Отсюда я предполагаю, что все последующие примеры будут запускаться из этой же директории (Хотя это совершенно не обязательно).
В некоторых примерах я пишу комментарии на английском, чтобы была возможность выполнить код скрипта в MINGW32 под Windows командой
sh -- yourScriptFileгде yourScriptFile - имя файла со скриптами примера. К сожалению, русские комментарии не дают выполнять скрипты.
Git, простые примеры
Настройка Git-репозитория
Пример 1: создание репозитория и установка локальных настроек
Цель: создать репозиторий, установить свое имя и емаил для репозитория
mkdir a1 cd a1 git init #1. создать репозиторий в текущей папке git config user.name YourName #2. установим имя и эл. ящик для этого репозитория git config user.name YourEmail@email.x
После того, как мы установили имя и эл. ящик, мы можем начать работать с git-репозиторием, выполнять фиксации и другие операции.
Пример 2: то же что и пример1, но короче запись
Цель: создать репозиторий, установить свое имя и емаил для репозитория
Заметка: то же, что и в предыдущем примере, но более короткая запись.
git init a1 #1. создать репозиторий в папке a1 (папка будет создана) cd a1 # перейти в новый репозиторий git config user.name YourName #2. установим имя и эл. ящик для этого репозитория git config user.name YourEmail@email.x
Пример 3: установка пользовательских настроек
Цель: установить глобальные настройки имени и эл. ящика для всех будущих репозиториев
git config --global -l # прочитать список глобальных настроек git config --global user.name YourName # установить имя и эл. ящик git config --global user.name YourEmail@email.x
Теперь в каждом новом вашем репозитории не придётся заного устанавливать имя и эл. ящик, т.к. эти данные будут браться из глобальным настроек вашего пользователя. (Файл ~/.gitconfig)
Простые операции с одним репозиторием
Пример 1: создать репозиторий, зафиксировать изменения
Цель: сделать первую фиксацию, просмотреть лог фиксаций
git init a2 #1. создать репозиторий a2 cd a2 #2. перейти в новый репозиторий echo 'line-1' > file1 #3. записать строку 'line-1' в текстовый файл file1 (файл создастся) git add . #4. добавить все файлы в index (staging area) git commit -m 'My 1 commit' #5. зафиксировать изменения, установив комментарий 'My first commit' git log #6. просмотреть лог фиксаций
Последняя команда #6 выведет текст, похожий на следующий:
commit 533542948c6e7d4a25925d695d4cf81312d1a30f Author: YourNameОбратите внимание, что строка 533542948c6e7d4a25925d695d4cf81312d1a30f является уникальным именем коммита, данное имя может использоваться во многих операциях с git.Date: Wed Jan 4 18:54:49 2012 +0600 My 1 commit
Также в этом выводе вы можете наблюдать ваше имя, эл. ящик и комментарий, установленный к фиксации.
Пример 2: создать репозиторий, сделать 3 фиксации
Цель: сделать 3 фиксации, просмотреть лог фиксаций
git init a3 #1. создать репозиторий a3 cd a3 #2. перейти в новый репозиторий echo 'line-1' > file1 #3. записать строку 'line-1' в текстовый файл file1 (файл создастся) git add . #4. добавить все файлы в index (staging area) git commit -m 'My 1 commit' #5. зафиксировать изменения, установив комментарий 'My first commit' echo 'line-2' >> file1 #6. добавить запись в file1 git commit -a -m 'My 2 commit' #7. фиксируем изменения. Обратите внимание на ключ -a, который # позволяет нам не выполнять git add . для файлов, которые ранее уже # участвовали в фиксациях (см. #4) echo 'line-3' >> file1 #8. добавить запись в file1 git commit -a -m 'My 3 commit' #9. зафиксировать изменения git log #10. просмотреть лог фиксаций
Лог фиксаций будет примерно таким:
commit 812f2a05e9104e3e6f921f62839f75333a8f3150 Author: YourNameDate: Wed Jan 4 19:22:43 2012 +0600 My 3 commit commit 1edf5fedb8d86deed2764d2b6701c1d10c35e7b2 Author: YourName Date: Wed Jan 4 19:12:19 2012 +0600 My 2 commit commit 533542948c6e7d4a25925d695d4cf81312d1a30f Author: YourName Date: Wed Jan 4 18:54:49 2012 +0600 My 1 commit
Пример 3: работа с git checkout (возврат)
Цель: сделать 2 фиксации и вернуться на 1 фиксацию назад
git init a4 #1. создать репозиторий a4 cd a4 #2. перейти в новый репозиторий echo 'line-1' > file1 #3. записать строку 'line-1' в текстовый файл file1 (файл создастся) git add . #4. добавить все файлы в index (staging area) git commit -m 'My 1 commit' #5. зафиксировать изменения, установив комментарий 'My first commit' echo 'line-2' >> file1 #6. добавить запись в file1 git commit -a -m 'My 2 commit' #7. фиксируем изменения cat file1 #8. вывести содержимое файла file1 в консоль (увидим две срочки текста) git checkout HEAD~1 #9. возвращаемся на 1 фиксацию назад относительно положения HEAD git log #10. смотрим лог изменений относительно нашего текущего положения git checkout master #11. возвращаемся на верхушку ветки master
Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)
Цель: сделать 2 фиксации и вернуться на 1 фиксацию назад
git init a5 #1. создать репозиторий a5 cd a5 #2. перейти в новый репозиторий echo 'line-1' > file1 #3. записать строку 'line-1' в текстовый файл file1 (файл создастся) git add . #4. добавить все файлы в index (staging area) git commit -m 'My 1 commit' #5. зафиксировать изменения, установив комментарий 'My first commit' echo 'line-2' >> file1 #6. добавить запись в file1 git commit -a -m 'My 2 commit' #7. фиксируем изменения echo 'line-3' >> file1 #8. добавить запись в file1 git commit -a -m 'My 3 commit' #9. фиксируем изменения cat file1 #10. вывести содержимое файла file1 в консоль (увидим две срочки текста) git commit -b br1 HEAD~1 #11. возвратиться на 1 фиксацию назад относительно HEAD и создать ветку br1 git branch #12. убедимся, что сейчас сущесвует две ветки: br1 и master. # Звёздочка указывает, что мы находимся в ветке br1 echo 'line-3 from br1' >> file1 #13. добавить запись в file1 в ветке br1 git commit -a -m 'My 4 commit br1' #14. фиксируем изменения git log #15. смотрим лог изменений cat file1 #16. смотрим содержимое файла file1 #теперь возвращаемся в ветку master, и видим что данные там остались неизменны git checkout master git log cat file1
Пример 5: работа с git branch (слияние двух веток)
Цель: сделать разные изменения в двух ветках, а потом слить ветки
git init repo #1. создать репозиторий repo cd repo #2. перейти в новый репозиторий echo -e 'A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\n' > file1 #3. записать 10 строк в файл git add . #4. добавить все файлы в index (staging area) git commit -m 'My 1 commit' #5. зафиксировать изменения, установив комментарий 'My first commit' # добавим строку "111" после строки "С" echo -e 'A\nB\nC\n111\nD\nE\nF\nG\nH\nI\nJ\n' > file1 git commit -a -m 'My 2 commit' # откатимся до предыдущей фиксации с созданием новой ветки git checkout -b br1 HEAD~1 cat file1 #6. убедимся, что строки "111" нет # добавим строку "222" после строки "I" echo -e 'A\nB\nC\nD\nE\nF\nG\nH\nI\n222\nJ\n' > file1 git commit -a -m 'My 3 commit' # возвратимся в ветку master git checkout master cat file1 #7. увидим, что есть строка "111", но нет строки "222". # произведём слияние текущей ветки master с веткой br1 git merge br1 cat file1 #8. увидим, что теперь в файле присутствую обе строки "111" и "222" git commit -a -m 'My 4 commit' #9. зафиксируем слияние # просмотреть историю изменений через графическую оболочку gitk gitk
Операции с двумя репозиториями
Пример 1: создать реп, отклонироваться, внести изменения в первый, обновиться во втором
Цель: создать репозиторий, отклонироваться, внести изменения в первый репозиторий, обновиться во втором
# Create repo1 git init repo1 cd repo1 echo 'line-1' > file1 git add . git commit -m "My 1 commit" # Go up cd .. # Clone repo1 to repo2 git clone repo1 repo2 cd repo2 # See content cat file # Go to repo1 and make changes cd ../repo1 echo 'line-2' >> file1 git commit -a -m "My 2 commit" # Go to repo2 and see log cd ../repo2 git log # See, there is commit1, but there isn't commit2 # Now refresh current repo2 git pull # Now we check that there ara both commits git log
Пример 2: создать два репозитория, внести изменения в оба, второй слить с первым
Цель: создать два репозитория, в первом создать файл file1, во втором - файл file2. Далее слить репозиторий 2 с 1-ым.
# Create repo1 git init repo1 cd repo1 echo 'line-1 in file1' > file1 git add . git commit -m "My 1 commit in repo1" # Create repo2 cd .. git init repo2 cd repo2 echo 'line-1 in file2' > file2 git add . git commit -m "My 1 commit in repo2" # Fetch data from repo1 to FETCH_HEAD link git fetch ../repo1 # See the log for repo1 git log FETCH_HEAD # Now merge FETCH_HEAD with HEAD link git merge FETCH_HEAD # See difference between work tree and staging area git diff # See difference between staging area and last commit git diff --cached
Пример 3: создать два репозитория, внести изменения в оба, второй слить с первым
Цель: создать два репозитория, внести изменения в оба. Во втором создать удалённое наблюдене за первым, а потом слиться
# Create repo1 git init repo1 cd repo1 echo 'line-1 in file1' > file1 git add . git commit -m "My 1 commit in repo1" # Create repo2 cd .. git init repo2 cd repo2 echo 'line-1 in file2' > file2 git add . git commit -m "My 1 commit in repo2" # Create remote to repo1 git remote add myRepo1 ../repo1 # See the exists remote git remote # Fetch data from the remote git fetch myRepo1 # Merge the remote myRepo1/master branch to current master branch git merge myRepo1/master # See status and log git status git log
Пример 4: втолкнуть данные в удалённый пустой репозиторий
Цель: создать пустой голый репозиторий, отклонироваться от него, внести изменения в клонированый репозиторий, втолкнуть данные в исходный голый репозиторий.
# Create bare repo1 git init --bare repo1 # See that nothing log git log # Create clone repository repo2 from repo1 git clone repo1 repo2 cd repo2 # Edit echo 'line-1' > file1 git add . git commit -m 'My 1 commit' # See that exists the remote link git remote cat .git/config # Now push current commit to the remote bare repo1 git push origin master # Go to repo1 and see log cd ../repo1 git log # Bingo!
Пример 5: втолкнуть данные в удалённый не пустой репозиторий
Цель: создадим голый репозиторий, отклонируемся от него, внесём изменения в клон. Втолкнём изменения в оригинальный репозиторий. Потом сделаем ещё изменения и снова втолкнём их в оригинальный репозиторий
# Create bare repo1 git init --bare repo1 # Create clone repository repo2 from repo1 git clone repo1 repo2 cd repo2 # Edit echo 'line-1' > file1 git add . git commit -m 'My 1 commit' # Now push current commit to the remote bare repo1 git push origin master # Edit again echo 'line-2' >> file1 git commit -a -m 'My 2 commit' # Now short push record git push # Go to repo1 and see log cd ../repo1 git status git log
Заключение
Эти примеры не охватывают все возможности git, но дают хороший старт для их самостоятельного изучения. Большую часть информации по работе с git я подчерпнул из его справки (git help git).
На этом я завершаю данную статью.
Смотрите также:
Этот комментарий был удален автором.
ОтветитьУдалитьв простых операциях в примере 4 ошибка. "git commit -b br1 HEAD~1 #11. возвратиться на " вместо commit должно быть checkout
ОтветитьУдалить