-
Создайте репозиторий на GitHub / GitLab по имени GitTraining
-
Создайте локальную версию репозитория в некоторой папке через git init
git init
- Создайте файл readme.md, с содержимым: “My first Repo”, добавьте его в git
vim readme.md
git add --all
git commit -m 'first'
- Присоедините remote с именем origin к адресу репозитория
git remote add origin https://github.com/KusokMIPT/GitTraining
- Выполните команду “git push -u origin master” (-u необходимо, чтобы задать оригинальный - upstream repo)
git push -u origin master
- Создайте папку GitTraining.git вне папки с проектом
cd ..
mkdir GitTrainnig.git
cd GitTrainnig.git
- Создайте удаленную (remote) версию репозитория через “git init --bare”
git init --bare
- Сделайте “git remote add local
git remote add local ../GitTraining.git
- Сделайте git push local master
git push local master
- Теперь мы умеем поднимать свой инстанс git
- Создайте новую ветку my-new-branch
git checkout -b my-new-branch
- Сделайте изменения в новой ветке - напишите hello world.
vim readme.md
hello world
- Закоммитьте изменения и залейте на удаленный сервер (GitHub, GitLab).
git add readme.md
-
После этого создайте новую ветку из ветки master на удаленном сервере (GitHub, GitLab) - my-remote-branch, создайте в нем файл readmes/readme.md.
-
После этого выкачайте ветку my-remote-branch.
git branch -a
git checkout my-remote-branch
- Слейте ветку my-remote-branch в ветку my-new-branch.
git checkout my-new-branch
git merge me-remote-branch
- Какой граф изменений получился?
- Начните изменять свой код в репозитории (создайте в master A.cpp, закоммитьте его, переключитесь в ветку my-new-branch, создайте A.cpp, не коммитьте)
vim A.cpp
git checkout my-new-branch
vim A.cpp
git checkout master
- Попытайтесь переключиться на другую ветку. Какое сообщение вы получите?
error: The following untracked working tree files would be overwritten by checkout:
A.cpp
Please move or remove them before you switch branches.
Aborting
- Как можно решать эту проблему? Найдите хотя бы два решения этой проблемы
- Первый: stash
git stash
- Второй: *rename
rename ...
- Откройте папку в среде разработки (Pycharm, IDEA). Какие файлы появились при этом?
new file: .idea/.gitignore
new file: .idea/inspectionProfiles/profiles_settings.xml
new file: .idea/misc.xml
new file: .idea/modules.xml
new file: .idea/vcs.iml
new file: .idea/vcs.xml
- Добавьте эти файлы в git при помощи git add.
- Как можно удалить эти файлы из git, но не из файловой системы?
git rm --cached -r .idea/
- Как сделать так, чтобы эти файлы не добавлялись в git автоматически при команде git add --all?
используем gitignore
.gitignore:
> .idea/
- Сделайте в ветке my-new-branch следующие пять файлов: a.py, b.py, c.py, d.py, e.py - лучше через веб интерфейс
- Скачайте изменения локально
git pull origin my-new-branc
-
Выполните команду git rebase -i HEAD~5
-
Изменим названия коммитов “Create b.py и d.py”
Меняем у соотвествующих коммитов pick
на reword
, после вместо Create b.py напишем ADD b.py
5. Выполняем git rebase --continue.
6. Повторяем действие со вторым коммитом.
7. Выполнится ли git push origin my-new-branch?
Нет, будет следующая ошибка:
To https://github.com/KusokMIPT/GitTraining.git
! [rejected] my-new-branch -> my-new-branch (non-fast-forward)
error: failed to push some refs to 'https://github.com/KusokMIPT/GitTraining.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
- Разберитесь с опцией squash - как слить все коммиты в один?
Сделаем git rebase -i HEAD~5
. Заменим Pick
на s
у всех коммитов кроме первого.
- Создайте коммит с созданным python-файлом, закоммитьте в ветку master. Как запушить только этот коммит в local remote? Продемонстрируйте это.
Создадим файлики 7_task_1.py
и 7_task_2.py
. Для каждого из них сделаем отдельный коммит и с помощью git rebase -i HEAD~2
найдем их идентификаторы. в local запушим лишь один из них с помощью команды:
git push local ec8931a:master
- Расскажите, как из отдельной папки можно выделить отдельный репозиторий, как затем подключить эту зависимость к исходному проекту? Продемонстрируйте на примере: https://github.com/tensorflow/tensorflow/tree/r1.14 - выпиливаем contrib в отдельный репозиторий, причем делаем его как git-submodule