Мне нужно расширить данный инструмент скриптом Bash, который должен работать с Linux и MacOS. Скрипт получает 2 параметра:
- Местоположение хранилища (файловая система, ssh, http (s), ...)
- A коммит , например ветвь, тэг, коммит хеш
Я не могу влиять на параметры
Результат выполнения скрипта должен быть таким:
- хранилище клонируется в фиксированный пункт назначения (всегда одинаково для одного хранилища)
- рабочее дерево репозитория должно соответствовать последнему состоянию кометы (например, если это была ветвь, вершина этой ветви)
Если хранилище (пока) не существует локально, процедура так же проста, как
git clone $REPO_SOURCE $REPO_DIR
cd $REPO_DIR
git checkout $REPO_REF
Мой вопрос: рассмотрим, что хранилище уже клонировано в /repos/foo
. После обновления git fetch
, как мне обновить этот репозиторий до $REPO_REF
?
- Если
$REPO_REF
была ветвью, git checkout $REPO_REF && git pull
должно работать
- Если это был хеш коммита, обновление не требовалось (просто
git checkout $REPO_REF
?)
- Если это был тег, то тег мог быть перемещен в начало координат, как с этим справиться?
- Как обращаться с другими крайними случаями?
Существует ли простой способ reset-repository-to-this-commitsh
, поэтому хранилище ведет себя так же, как если бы оно было недавно клонировано?
Боковые узлы:
- Один и тот же репозиторий может использоваться с разными commitish , но только последовательно: гарантируется, что скрипт не вызывается более одного раза одновременно
- Все внешние изменения в хранилище всегда могут быть отменены без уведомления
- Хотя удаление и клонирование хранилища будет работать, оно нецелесообразно из-за их размеров и является некрасивым решением
- Нет (git) изменений не требуется, так что проверить отсоединенную головку можно.