2012-03-21 2 views
8

я только что обнаружил, что даже если участок в git help svnrebase говоритКак git svn fetch + rebase за одну операцию?

Этот извлекает ревизии из SVN-родителя текущей ГОЛОВЫ и rebases тока (незавершенного к SVN) работать против него.

(курсив мой) это не означает, что rebaseвключает в git svn fetch. Игнорирование в стороне, есть ли способ запустить команду git svn, чтобы сделать как?

Поэтому я хочу, чтобы сделать это, что я только записи на один филиал, поэтому я хочу rebase, что один и я часто читать другие ветви, поэтому я хочу fetch тех.

+0

У меня нет опыта работы с 'git svn', но обычный' git pull' может быть настроен на использование 'rebase' вместо' merge', и таким образом вы оба хотите. Я бы опубликовал ответ, если бы знал, как это сделать с помощью 'git svn' - просто найдите эквивалент' git config branch.autosetuprebase always'. –

+0

Это значит. Просто попробуй. Сначала он выбирает, а затем он сворачивает. –

+2

Нет, нет. 'git svn rebase' does * not * извлекает новые ветви с удаленного, в то время как' git svn fetch' делает. Я просто попробовал. – l0b0

ответ

8

Я тоже немного удивлен, узнав, что это на самом деле так, как он ведет себя. Но, чтобы ответить на ваш вопрос, вам просто нужно определить псевдоним:

git config --global alias.refetch '!git svn fetch && git svn rebase'

Тогда git refetch должны делать то, что вы хотите.

+0

Достаточно честный; похоже, что нет стандартного способа сделать это. – l0b0

+0

Почему на Земле вы хотите получить все svn-репозиции, чтобы переустановить один? –

+0

@ l0b0: Нет стандартного способа сделать это, потому что это не стандартный способ использования 'git svn'. 'git svn rebase' предназначен для того, чтобы получить вашу текущую ветвь до подсказки Subversion, поэтому она игнорирует любые другие ветви Subversion во имя быстрого получения полезной рабочей копии. 'git svn fetch' обновляет все, что находится в репозитории Subversion, и поэтому часто работает намного медленнее. Я действительно смущен тем, что вы на самом деле пытаетесь достичь, это значит, что вам нужно это сделать. –

-3
git pull --rebase 

Вы также можете настроить его, чтобы он по умолчанию переустанавливался. Тогда вы можете:

git pull 

UPDATE:

упс. Вам нужно больше кофе ...

Все, что я могу думать о том, чтобы сценарий, что вам нужно ..

+0

вытащить из svn repo? –

+0

@AdamDymitruk: Это * не * про ваниль 'git' - речь идет о' git svn'. – l0b0

19

Я думаю, вы вводите в заблуждение git rebase и git svn rebase. Первые шаги фиксируют ваш текущий HEAD на какой-либо ревизии, которую вы указываете, тогда как последняя перемещает ваш текущий HEAD на кончик ветки Subversion, в которой вы находитесь.

git svn rebaseделает включает git svn fetch --parent, то есть он будет получать любые новые Subversion совершающие на ветке вы находитесь в данный момент, но не какой-либо Subversion совершает от любой другой ветви (противоположности простого git svn fetch, который извлекает из всех ветвей).

Я подозреваю, что вы не хотите делать полный git svn fetch, когда вы делаете git svn rebase, так как это будет означать, что будет намного дольше, прежде чем вы получите полезную рабочую копию. Если вы хотите регулярно git svn fetch es, я бы посоветовал настроить работу cron, которая сделает выборку в фоновом режиме для вас.

+0

Вы так правы –

+0

Довольно старое сообщение, но я считаю, что это все еще актуально. Я АБСОЛЮТНО хочу получить все обновления филиалов, прежде чем я сделаю git svn rebase. Зачем? Потому что у меня было много проблем при слиянии, если я этого не делаю. Слишком легко забыть получать каждую ветвь, которую вы хотите объединить, перед слиянием и сделать это: 'git svn rebase && git checkout master && git merge feature', прежде чем слишком поздно осознать, что вы не обновили правильные ветки из SVN. Если вы используете git svn для поддержки лучшего разветвления, имеет смысл ВСЕГДА «git svn fetch» ​​все перед перезагрузкой. Если вы не будете «git svn dcommit» топать на все. –

+0

Если в SVN-репо слишком много ветвей, и это берет навсегда, то удалите '*' из строки конфигурации «ветви:» и только обрабатывайте ветви, в которых вы работаете, как правило. Если вы используете комманду «master -> dev -> feature», легко иметь дело только с ветвями, использующими подстановочные знаки и файл конфигурации git. Таким образом, когда вы git svn fetch', вы не получаете ненужные ветки. 'git svn rebase' полностью сломал мой git и svn repo в прошлом, потому что он не собирает ветви перед рукой. Это не очень хорошо для меня. Я мог бы быть здесь в меньшинстве. –

Смежные вопросы