Denis Volk, PhD, Senior Data Scientist
2021-01-25
Можно ли просто скачать репозиторий с Github?
Если использовать команду Download ZIP, то скачается не git-репозиторий, а его текущее состояние. В нём будут все файлы, соответствующие последнему коммиту той ветки, которую вы выбрали, но в нём не будет папки .git
, и не будет возможности продолжать историю изменений.
Штатный способ взять репозиторий с Github – с помощью CLI-команды git clone <url>
, где <url>
– адрес репозитория, вида https://github.com/<username>/<repo-name>.git
Что делает команда Fetch?
В локальном репозитории – том, что находится на вашей рабочей машине, т.н. downstream – есть обычные рабочие ветки, например master
, denis/develop-new-feature
, и т.д. Кроме этого, также там хранятся read-only-копии веток, лежащих на Github-версии этого же репозитория (т.н. upstream или remote). Они обычно называются origin/master
, origin/denis/develop-new-feature
.
Команда git fetch
скачивает с Github свежие версии веток и обновляет их read-only-копии, которые хранятся у вас.
Локальные рабочие ветки при этом не обновляются. Для обновления локальных рабочих веток используется команда git pull
, которая эквивалентна двум командам
git fetch <branch_name>
git merge origin/<branch_name>
Обязательно надо делать add каждый раз, когда вносится изменение в файл?
Команда git add <file_path>
сохраняет текущее состояние файла в Staging area репозитория. Когда вы будете делать следующий коммит, в него попадут файлы в том состоянии, как они были сохранены в Staging area. Изменения, произошедшие с теми же файлами между командой git add
и git commit
, в этот коммит не попадут.
Обычно команды git add
используются непосредственно перед командой git commit
, после того, как все изменения текущего коммита закончены.
Я видел, что ребята добавляют не в стейдж, а в отдельную ветку, а потом уже объединяют новые файлы в мастер. Это нормальная практика?
В любом случае, перед коммитом файлы добавляются в стейдж в той ветке, в которой происходит разработка. Работать не в master
, а в отдельных ветках – прекрасная практика, см., например, Git Feature Branch Workflow
Как не поломать все в datalearn? Например, у себя все удалить и закоммитить?
У обычного студента нет прав на git push
в основной репозиторий, поэтому ничего удалить он не сможет. У Дмитрия Аношина права есть, и если он удалит всё на своей машине, закоммитит эти изменения, и сделает git push
, то этот коммит отразится в основном репозитории на github. Но ничто не мешает вернуться к предыдущему коммиту: git checkout HEAD~1
, или git checkout <desired_commit_hash>
, где все файлы по-прежнему есть.
Дальше можно откатить последний нежелательный коммит с помощью git reset HEAD~1
или git revert
на своей машине, а потом с помощью git push -f
скопировать эти изменения в github.
Хранить excel в git это норм или это порно?
Git оптимален для хранения любых текстовых файлов: .txt
, .py
, .md
, .cpp
, .sh
, .json
и т.д. Для них git умеет эффективно вычислять разницу между последовательными состояниями, и хранит не полные версии файлов, а эти разницы, что экономит место и оптимизирует работу команд типа git diff
. Любое изменение нетекстовых файлов типа Word, Excel, графических файлов, меняет сразу весь файл целиком, поэтому по сути git начинает хранить полные версии вместо разниц. Это неэкономно и приводит к распуханию размера репозитория.
Кроме этого, у Github есть жёсткое ограничение максимального размера одного файла: 100 MB.
Итог: хранить Excel в git можно, но нецелесообразно, если предполагается часто его модифицировать.
Терпимый пример: положить в репозиторий эксельку на 5 MB, которая будет обновляться раз в месяц, или прикрепить картинку, которая не будет меняться никогда.
Плохой пример: хранить там эксельку, которая обновляется несколько раз за день.
Денис, хороший вопрос про размер файлов. У BI много всяких отчетов от приложений, где нет структуры кода, но хорошо бы хранить версию.
См. предыдущий вопрос. Да, с хранением таких отчётов в git могут быть проблемы. Поэтому люди переходят от выгрузок данных в закрытых бинарных форматах к выгрузкам в виде, например, JSON, – универсальному текстовому формату.
Как удалить репозиторий на своей машине?
Достаточно просто удалить папку со всем проектом. Гит не оставляет никаких дополнительных следов на вашем компьютере.
Как удалить репозиторий на Github?
Settings -> Options -> В самом низу страницы красный прямоугольник, Delete this repository -> Следуйте дальнейшим инструкциям.
Как работает поле вкладов (поле с зелеными квадратиками)? Когда я комитю новые файлы раз в несколько дней в поле вкладов не отображаются изменения, то есть не закрашивается зеленым цветом квадратик)
Чтобы квадратики закрашивались правильно, нужно, чтобы ваш емейл, указанный в настройках локального гита, совпадал в емейлом профиля на github: Why are my contributions not showing up on my profile?
WIP