Как использовать git svn?

Пожалуйста, дайте советы по эффективному использованию git с svn. Каковы ваши «лучшие практики»?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
14
0
1 865
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вот кое-что, что я недавно узнал:

  1. всегда делайте git svn rebase, прежде чем делать git svn dcommit
  2. когда вы делаете dcommit, делайте это из временной промежуточной ветки - если вы (или git) испортите, гораздо проще восстановить, просто удалив ветку и начав заново

Когда svn dcommit умирает на полпути через большой коммит и кажется, что вы потеряли всю свою историю, сделай это:

How To Recover:

First, open .git/logs/HEAD

Find the hash of the commit that's the head of your git repo. Hopefully you remember the commit message and can figure it out, but it should be pretty obvious

Back in your now f-ed up working-dir:

git reset --hard <hash from log>

This gets your working dir back to where it was before you did a git- svn dcommit. Then:

git-svn rebase git-svn dcommit

Согласитесь с №1, но я никогда не обнаруживал, что мне нужно было сделать №2. dcommit не так часто ломается, и когда это произойдет, восстановить его несложно.

andy 01.10.2008 04:04

сегодня он решил, что Perl сбросит ядро ​​на полпути - это оставило меня с моей рабочей копией, в которой отсутствовало множество изменений

1800 INFORMATION 01.10.2008 04:15
Ответ принят как подходящий

При создании клона используйте --prefix=svn/. Это создает более приятные названия веток.

Кроме того, не пренебрегайте аргументами --trunk, --tags и --branches при выполнении clone или init.

Получение данных - один из наиболее трудоемких шагов, поэтому настройте задание cron для выполнения git svn fetch в фоновом режиме. Это безопасно, потому что выборка не влияет ни на одну из ваших рабочих веток.

(Справочная информация о git svn fetch: эта команда выполняется первой всякий раз, когда вы выполняете git svn rebase, поэтому, выполняя этот шаг заранее, ваш вызов git svn rebase обычно будет быстрее. Команда fetch загружает коммиты SVN и вставляет их в специальные ветки, управляемые git-svn Эти ветки можно просмотреть, выполнив git branch -r, и если вы выполнили вышеуказанный шаг, они начинаются с "svn /".)

Убедитесь, что вы знаете, как использовать git reflog. У меня было несколько случаев, когда git svn dcommit умирал (обычно из-за того, что я пытался проверить что-то огромное), и моя фиксация, казалось, была потеряна. В любом случае фиксацию легко найти в журнале ссылок.

Не могли бы вы подробнее рассказать о трюке с извлечением? Что это значит? Вы просто запускаете это снова и снова в фоновом режиме? После этого как внести изменения в свою ветку?

1800 INFORMATION 01.10.2008 10:34

Хорошо, добавлена ​​дополнительная информация о выборке

andy 02.10.2008 04:00

Если в вашем репозитории SVN есть ловушка после фиксации, которая может отклонять фиксации, git svn dcommit прекратит обработку фиксации при первом отклонении фиксации, и вам придется восстановить оставшиеся фиксации из git reflog.

На самом деле, я думаю, что вышеупомянутая проблема была вызвана тем, что моя корова-оркер неправильно запустила git rebase -i при попытке исправить отклоненные коммиты. Но, благодаря рефлогу, мы смогли восстановить все!

Я немного вел блог о том, как работать с Subversion и Git параллельно, а также опубликовал пару элементарных скринкастов. Собрал все тут: http://www.tfnico.com/presentations/git-and-subversion

Попробую резюме:

  • Просто пойти на это! Не помешает попробовать :)
  • Начните с небольшого проекта Git, чтобы сначала научиться.
  • Придерживайтесь командной строки, пока не освоите ее. GUI-инструменты могут вас просто запутать.
  • Если возможно, выполняйте разовые миграции, оставляя SVN позади, по одному проекту за раз, начиная с небольших.
  • Если вам все же приходится жить с Git и SVN вместе, имейте в виду, что вам придется отказаться от многих преимуществ, которые дает Git, например от веток, но вы получаете «локальные» преимущества (тайник, индекс, скорость).
  • Если вы один из пользователей Git, просто выполните git-svn rebase и dcommitting самостоятельно.
  • Если вы являетесь несколькими соавторами Git, настройте центральный Git / SVN, который будет извлекать только из SVN, в то время как каждый пользователь Git передает данные напрямую обратно в SVN. Больше информации здесь.

Другие вопросы по теме