Команды Git, такие как pull, на самом деле не работают с rebases.
Допустим, на вашем ноутбуке есть некоторые коммиты, которых еще нет в svn, а флеш-накопитель синхронизирован. Примерно так:
laptop:
svn1 -- svn2 -- A -- B -- C -- D
thumb drive:
svn1 -- svn2 -- A -- B -- C -- D
Затем вы делаете git svn rebase, чтобы получить новый материал от svn. Это работает в два этапа:
laptop (after fetching from svn)
svn1 -- svn2 -- svn3 -- svn4
\
+ A -- B -- C -- D
Теперь мы должны поместить вашу работу с git поверх новых коммитов svn, поэтому у нас все еще есть неразветвленная история. Это часть перебазировки:
laptop (after git svn rebase)
svn1 -- svn2 -- svn3 -- svn4 -- A' -- B' -- C' -- D'
Теперь, если нет конфликтов, коммит А 'содержит те же изменения, что и старый коммит А, единственное, что отличается от его предка: svn4 вместо svn2. Поскольку история является частью каждого коммита в git, для git A и A 'это разные коммиты.
Итак, после того, как вы выполните git pull
от репозитория ноутбука до репозитория с большим диском, git делает то, что естественно для него, то есть объединяет новые изменения:
thumb drive (after git pull)
svn1 -- svn2 -- svn3 -- svn4 -- A' -- B' -- C' -- D'
\ \
+ A -- B -- C -- D -------------------- merged result
Это имеет полный смысл в git, поскольку позволяет отслеживать все изменения в нелинейной среде и отмечать, кто и как выполнял слияния. Тем не менее, вы не сможете передать эту историю svn.
Если вы принудительно внесете изменения в репо с большим пальцем, вы получите что-то вроде этого:
thumb drive (after forced push)
svn1 -- svn2 -- svn3 -- svn4 -- A' -- B' -- C' -- D'
, что вполне нормально, если вы не сделали никаких изменений в репозитории с большим диском. Если бы вы сделали, это перезаписало бы их. Чтобы сохранить изменения с флеш-накопителя, вам нужно сделать еще один git rebase
.
Я бы сказал, что для того, чтобы использовать полный комфорт git, вам придется отказаться от возможности передавать свою работу svn. Нет простого способа одновременно распределенного контроля версий и линейных историй.