LINUX.ORG.RU

обновить только несколько коммитов с удаленного репозитория гит

 , ,


0

1

Добрый день.Проблема: вчера скачивал последнюю верс репозитория командой

git clone --depth 1 URL

Все хорошо - 54 тыс объектов.Почитал. Сегодня нужно обновиться до последнего коммита,там около 58 тыс обьектов. Как не качать всю миллионную историю , а только вот эту разницу от вчера до сегодня?

git pull качает всю историю.

Подскажите,с гитом только начинаю вникать.

Ответ на: комментарий от anonymous

Ответ

Не работает.

git pull --depth 1

скачивает 232 объекта и невозможно слить.Ступор.

grigoriy
() автор топика

Эм, не знаю, как у тебя, но мой git (2.1.4) при pull/fetch тянет только добавления. Коммиты, не стянутые при первоначальном git clone, он не тащит.

git pull передаёт --depth команде git fetch. А у неё эта опция изменяет глубину стянутой истории, а не говорит, сколько ещё стянуть. Так что в общем-то это относительно мало полезная для pull опция.

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

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

Pull depth

Потому что когда идёт подсчет объектов ,то переваливает за миллион, и начинает все это загружать.

git pull качает все ,чего нет у пользователя

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

Вот тебе наглядно.

История в удалённом репозитории:

... ---A---B---C  master

Твоя история после git clone --depth=1:

C  master, origin/master

Прошёл день, история удалённого репозитория:

... ---A---B---C---D---E---F  master

Ты делаешь у себя git pull origin master:

C---D---E---F  master, origin/master

Если же делаешь git pull --depth=1, то сначала получается вот такая хрень:

C  master
F  origin/master

git fetch честно стянул тебе 1 коммит из текущей ветки master. Затем git pull пытается сделать merge:

C----M  master
    /
   F  origin/master

И у него естественно не получается решить конфликты, потому что куча промежуточной истории не была стянута.

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

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

ilammy ★★★
()
Ответ на: Pull depth от grigoriy

Так может туда и накоммитили на миллион?

ilammy ★★★
()
Ответ на: Pull depth от grigoriy

Кстати да. Я вспомнил, когда git может обфакапиться в этом случае. Если в твою ветку, которую ты стянул, кто-то за вчера вмерджил свою ветку с фичей, то тупой git стянет всю историю.

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

И я не знаю, как это обойти. Разве что угадывать --depth так, чтобы он был равен или больше числа коммитов, сделанных с последнего git pull. Тогда у него, по идее, будет всё хорошо со слиянием.

В общем, это всё хрупко и не рекомендуемо для постоянной работы с репозиторием. Git так не работает, к сожалению. Так что если тебе работать с репозиторием, то лучше стянуть его полностью. Если только собрать свежак, то можно ещё раз git clone --depth=1.

ilammy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.