Моя цель состоит в том, чтобы иметь возможность как создавать последние версии, так и вносить вклад в проект с длинной и объемной историей - и делать это, не используя местное хранилище, чтобы дублировать множество исторических веток и историю, относящуюся к десятилетию и многое другое (что я всегда могу найти в веб-интерфейсе центрального репозитория проекта, если мне когда-либо понадобится, чего я, вероятно, не буду).
Мне, казалось, повезло с первой попытки:
git clone --depth 40 -b master http://github.com/who/what.git/ what
Это дало мне аккуратный локальный клон "что", в котором была только ветка "master
", и достаточно для того, чтобы охватить последние два тегированных релиза.
Тогда я мог бы сделать "git checkout latest-release-tag
" и создать последнюю версию. Yippee!
Как я и ожидал, мне нужно было сделать патч. Все прошло плавно: "git checkout -b my-patch-branch
", внесите мои изменения, зафиксируйте, и я смог вытащить свою ветку патча обратно к клону на github, чтобы проект мог его вытащить. Легко!
Мне кажется, мне повезло, потому что из того, что я читал, например здесь, я бы не смог это сделать до git 1.9.
Но установленная версия оказалась равной 1.9, поэтому мне это удалось.
Теперь следующая очевидная вещь, которую я хотел бы сделать, это извлечь из удаленного и забрать самую последнюю активность на главном сервере (включая восходящее слияние моего патча, так что мне больше не понадобится эта ветка). Я пробовал "git fetch --dry-run upstream" и смотрел в ужасе, когда он гадал бесконечные мегабайты загрузки, а затем дал мне список новых тегов, восходящих к возрасту мастодонтов. Я рад, что сказал --dry-run
!
Я действительно надеялся, что он просто заберет дюжину или около того новых коммитов на "master
" с HEAD моего клона, а затем, возможно, у меня будет клон глубиной 52 вместо 40, но такой вид что я хочу... начать с полезного количества недавней истории, прежде чем я включился, а затем просто отслеживать и расти с этого момента и иметь возможность создавать, разветвлять и нажимать патчи. Кажется, так близко.
Есть ли простой способ сделать git делать то, что я пытаюсь сделать? Я пытаюсь сделать необоснованным?
Изменить: немного больше информации.
(1) upsteam на самом деле опережает меня, ближе к сто коммиттов, моя оценка дюжины была выведена из эфира.
(2) выясняется, что первоначальные 40 коммитов, которые я получил с моим клоном, были полностью неполными. Куча более поздних, которые я пытаюсь извлечь, - это коммиты слияния со вторым родителем в некоторой ветки, к которой мой клон не включал. Могут ли они заставить git втянуть всю свою древнюю историю, потому что самая ранняя фиксация в моем клоне не является общим предком?
Есть ли способ сказать, что я не хочу этого?
Дополнительная информация:
(1) мне пришло в голову, что раньше я использовал протокол http, который фактически не взаимодействует с процессом git на сервере, поэтому у него нет возможности настроить размер загрузки.
Однако, когда я повторил использование git -over-ssh, я все равно получил огромный выбор.
Тогда
(2) вручную, подобно животному, я щелкнул через фиксации слияния, показанные на дисплее github 'newtork', нашел те, которые связаны с ветвями, которые начались до моего мелкого разреза, и добавили их родительские-2 SHA в мой файл .git/shallow
и затем снова попробовал 'git fetch' поверх ssh. Это отлично поработало и загрузило крошечный пакетный файл, который мог бы просто перетащить мою локальную ветвь master
. Я думаю, что это именно то, что я хотел бы git сделать автоматически, но я не нашел способ сделать это. В руке это довольно утомительно.:)