LINUX.ORG.RU
ФорумTalks

Пакостный гит

 , ветки,


1

4

И так у меня была репа фрибсд, скаченная 3 года назад в виде одной ветки main (да, там тоже не master, а ещё про этот --single-branch я забыл), и захотел я подгрузить к ней актуальные изменения, а так же релизные ветки 13.5 и 14.3. С первым всё получилось (git pull), скачал он объектов примерно на полгига и всё обновил.

Потом я сделал git checkout releng/13.5 - пишет нет ветки. Сделал git pull origin releng/13.5 - он долго-долго качал ещё гигабайт объектов (почему? почти всё уже скачано было раньше должно бы быть), потом начал какой-то дурацкий мерж, выдал кучу ошибок и упал. Ветка releng/13.5 нигде не появилась, ни в refs/heads и в refs/remotes/origin. Вобщем, репа оказалась в каком-то забагованном состоянии, но git reset --hard починил её, а потом ещё пришлось вручную rm всякий мусор от упавшего мержа. Хорошо, выяснил что pull не для этого, сделал git fetch origin releng/13.5 - он ничего не делает как будто всё и так норм. Сделал git fetch origin releng/14.3 - он скачал ветку (на этот раз быстро и малым объёмом), но ни в каких списках она опять не появилась.

Вобщем, оказалось что надо лезть в .git/config и в конфиге [remote "origin"] заменить main на звёздочки, иначе он делает вид что остальных веток не существует, даже если я напрямую его инструктирую их скачивать. Хорошо хоть качать заново не пришлось. Если что, после правки конфига надо было ввести такие команды:

git fetch origin releng/13.5   # прописать ветку в remotes
git checkout -b releng/13.5 origin/releng/13.5   # склонировать её в локальные
git fetch origin releng/14.3
git checkout -b releng/14.3 origin/releng/14.3

Ладно, отказ создавать ветки можно понять (в конфиге запрещены), но почему он делает это молча и изображая что всё успешно получилось? Мог бы ошибку написать что конфиг не разрешает эти ветки трогать, например, я бы сразу понял в чём дело и исправил. а так же плохо с его стороны было качать кучу объектов, которые, в соответствии с конфигом, ему нужны быть не могут - опять же надо было сразу выдать ошибку и ничего не делать. И до сих пор непонятно - если я хочу ограничить работу, но не одной веткой а тремя - это возможно?

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

ветки можно понять (в конфиге запрещены), но почему он делает это молча и изображая что всё успешно получилось?

UNIX way же.

Или тебе как в винде, кучу окошек с непонятными ошибками показать? (%

mord0d ★★★★★
()
# Добавляем нужные ветки в список отслеживаемых
git remote set-branches --add origin releng/13.5 releng/14.3
# Заливаем ветки
git fetch origin releng/13.5 releng/14.3
u-235
()
Ответ на: комментарий от u-235

О, спасибо, там всё-таки есть команда чтобы вручную конфиг не редактировать.

firkax ★★★★★
() автор топика

Ты сам сделал git pull, а потом жалуешься, что оно тебе в текущую ветку пыталось мерджить.

git pull Incorporates changes from a remote repository into the current branch

А пакостный при это почему-то git.

Может, имеет смысл перед использованием читать документацию?

skiminok1986 ★★★★★
()
Ответ на: комментарий от mord0d

Или тебе как в винде, кучу окошек с непонятными ошибками показать?

Вообще не в кассу ляпнул.

wandrien ★★★
()
git pull

Incorporates changes from a remote repository into the current branch. 

RTFM, в общем.

wandrien ★★★
()
Ответ на: комментарий от skiminok1986

Дочитай до конца. Я этот факт уже самостоятельно выяснил и там же парой строк ниже об этом написал. Но проблемы этим не ограничились.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Дочитай до конца. Я там в конце писал, что имеет смысл читать документацию. В документации по гиту есть решение.

skiminok1986 ★★★★★
()
Ответ на: комментарий от skiminok1986

А, ну вот неинтуитивные команды это и есть один из его косяков. Должно быть всё понятно без чтения простыней.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Увы, интуитивность любого интерфейса это вопрос обучения и привычки, а не независимое свойство. Интуитивно понятна только грудь матери, а остальному мы обучаемся.

Документацию приходится читать для всего ПЕРЕД началом работы. Иначе нифига не получается нормально. Если этого не делать, то буквально всё не соответствует ожиданию.

skiminok1986 ★★★★★
()

Надо было сделать git checkout remotes/origin/releng/14.3, никаких правок конфигурации не нужно.

git fetch скачивает удалённый бранч, но не объявляет локальный. Посмотреть все бранчи можно через git branch -a.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

А смотреть состояние того, в какой точке вы сейчас, можно через git status. Если вы посреди развалившегося мерджа, как у вас было с git pull, git status вам даст hint, что, возможно, нужно сделать git merge --abort.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Посмотреть все бранчи можно через git branch -a.

Все отслеживаемые ветки.

u-235
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.