Hi, Victor!
On Sun, 04 Oct 2020 22:05:38 +0700 Victor Sudakov writes:
VS> Dear Zhenja,
VS> 04 Oct 20 17:13, you wrote to me:
VS>>> Почитал про git bundle (по аналогии с hg bundle), но там какой-то
VS>>> слишком сложный процесс описан, надо на 2-м объявить bundle как
VS>>> remote, на 1-м его как-то хитро создать, синхронизировать...
ZK>> Вроде как без проблем совсем:
ZK>> /tmp/git1 % git log --oneline
ZK>> 016bbf6ffdf5 (HEAD -> master) 2
ZK>> aff2fdcca797 1
ZK>> /tmp/git1 % git bundle create /tmp/bundle HEAD
ZK>> Enumerating objects: 6, done.
ZK>> Counting objects: 100% (6/6), done.
ZK>> Compressing objects: 100% (3/3), done.
ZK>> Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
VS> А как в bundle запихать не всю историю, а только с коммита XXX по
VS> коммит YYY?
На сколько я понимаю, как и для git fetch при работе с удалённым
репозитарием, ему нужен ref, поэтому нужно оттежить или отбранчить YYY.
% git tag name-for-remote YYY
Затем
кратко: вместо HEAD в примере выше, XXX..name-for-remote (XXX не включается).
Длинно: это параметры к git rev-list (в мане есть несколько
примеров). Совсем подробно как ссылаться на разные коммиты в мане git
rev-parse.
VS> Или лучше bundle делать всегда полный, а он потом при
VS> unbundle/merge сообразит, с какого места надо импортировать
VS> изменения?
вопрос скорости и места. Можно и полный .git копировать и потом просто
fetch/pull из него (fetch/pull также можно сделать из бандла).
ID уникальны, должен брать только те объекты, которых нет локально,
поэтому можно сказать "сообразит".
Если же сильно короткая история, получается так:
/tmp/git2 % git bundle unbundle /tmp/bundle
error: Repository lacks these prerequisite commits:
error: 8330c1b650cce40e528ad024a2f3874804ee0bb3
ZK>> /tmp/git1 % cd ../git2
ZK>> /tmp/git2 % git log
ZK>> fatal: your current branch 'master' does not have any commits yet
ZK>> /tmp/git2 % git bundle unbundle /tmp/bundle
ZK>> 016bbf6ffdf56f9c04734b3500131ec4146ef790 HEAD
ZK>> /tmp/git2 % git merge 016bbf6ffdf56f9c04734b3500131ec4146ef790
VS> О, вот это круто, благодарю.
в принципе там в мане пример, где достаточно просто git pull
/tmp/bundle, когда ref из бандла мержится в текущий бранч.