Могу ли я git svn rebase на некоторую версию svn? (Подобно svn up -r...) - программирование
Подтвердить что ты не робот

Могу ли я git svn rebase на некоторую версию svn? (Подобно svn up -r...)

Короткий вопрос: что такое git -svn эквивалент svn up -r r1130 для обновления только для пронумерованного фиксации (с номером svn)?

Я использую git -svn, поэтому я могу использовать git и управлять (многими) локальными ветвями моего репозитория svn команды. У меня есть версия программного обеспечения, которое я взламываю для работы с определенной аппаратной настройкой. С тех пор как я работал с ним, svn repo продвигался вперед за стабильный, хороший момент для этой работы. Я хочу обновить локальную ветвь до нумерованной ревизии, которая представляет собой стабильную фиксацию. Я мог бы сделать это в svn с помощью svn up -r r1130, но я предпочитаю git.

Я продолжаю забывать, как я это делал в прошлом, и обнаружил, что я ищу SO и страницы помощи, пытаясь найти лучший способ. Возможно, есть и другое слово Q & A, которое мне не хватает?

Достаточно просто проверить устаревшую версию на чистом дереве, но когда я переношу на вершину дерева, "перематывая голову, чтобы воспроизвести вашу работу поверх нее...", часть, которую я обычно любовь означает, что я буду идти к точке в дереве, прежде чем мои изменения будут добавлены!

В настоящее время я перехожу к git svn rebase, а затем в интерактивном режиме откатываю коммиты, которых я не хочу, но у меня возникают проблемы с верой в то, что это лучший или даже хороший способ сделать это.

4b9b3361

Ответ 1

Я предпочитаю rebase, потому что git -svn придется перезагружать ваши изменения в любом случае до dcommit. Вместо этого попробуйте:

git checkout `git svn find-rev r1241`  # Go to the svn version of interest
git checkout -b master_r1241           # Create a new brach matching it
git checkout hwTesting                 # Merge previously created changes
git rebase master_r1241                # rebase on top of not quite up-to-date master branch

Вы также можете сделать это за один шаг: (всегда можно было бы вернуться с помощью reflog или rebase --abort, если все идет ужасно неправильно).

git checkout hwTesting                 # Checkout feature branch
git rebase `git svn find-rev r1241`    # rebase on top of not quite up-to-date master branch

Ответ 2

Кажется, что нет способа сделать это за один шаг. Однако вы можете легко найти соответствующий идентификатор фиксации git для данного номера версии svn. Попробуйте следующее:

git svn find-rev rN

где N - номер ревизии, который вы хотите. После этого используйте git checkout для проверки этой конкретной точки в истории.

Ответ 3

Я оставлю это для справки, так как принятый ответ упоминает об этом. Используйте вариант переадресации с одним слоем, хотя...


Вот что я делаю сейчас. На этот раз я обновляюсь от r1130 (упомянутый в вопросе) до r1241:

git checkout `git svn find-rev r1241`  # Go to the svn version of interest
git checkout -b hwTesting_r1241        # Create a new brach matching it
git merge hwTesting_r1130              # Merge previously created changes

В основном это дает мне то, что я хочу, но каждый раз, когда я обновляюсь, он порождает другую ветку. Похоже, должен быть какой-то способ сообщить git объединить только коммиты на master до и включительно, возвращенные git svn find-rev r1241.