Можно ли сделать результат git svn dcommit одним коммитом svn?

Согласно руководство, git dcommit «будет создавать ревизию в SVN для каждой фиксации в git». Но есть ли способ избежать нескольких ревизий Subversion? То есть, чтобы git объединял все изменения до выполнения svn commit?

У меня такая же проблема. Представьте, что вы клонируете репозиторий svn в git в качестве своего мастера, вы делаете 3 коммита с разными сообщениями, а затем используете git svn dcommit. Можно ли «объединить» эти 3 коммита в один? Как это сделать? Вы можете привести пример? Спасибо!

sergiofbsilva 07.06.2012 00:43
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
42
2
15 659
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вы работаете над веткой в ​​git, вы можете git-merge --squash, который делает это внутри git. Затем вы можете отправить эту сжатую фиксацию в SVN.

Конечно, много мелких коммитов - это хорошо, так зачем вам их раздавить?

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

plindberg 01.10.2008 20:50

Я использую множество небольших коммитов, чтобы упростить отслеживание изменений; когда я делаю коммит на svn-сервере, мы генерируем электронное письмо для каждого коммита SVN. Я бы предпочел выполнить дополнительную работу по слиянию с мастером с помощью squash для коммитов «логической единицы» и сохранить всем несколько писем.

cbowns 16.10.2008 07:50

В вашей частной ветке можно делать много мелких коммитов. Но практически нет смысла продвигать весь этот шум вверх по течению («добавить бла», «забыл добавить ядда, от которого зависит бла», «на самом деле добавление ядра», «черт, исправление опечатки», «хорошо, СЕЙЧАС это должно работа "," хм, правда? ").

sudarkoff 22.09.2012 09:53

Множество мелких коммитов - это хорошо, но сопровождающий апстрима считает их плохими и настаивает, чтобы я так не делал. Я бы хотел, чтобы он делал много мелких коммитов, чтобы мне было легче следить за тем, что он делает.

skiphoppy 11.04.2016 18:24

Что делать с git-svn-id? Должен ли я удалить их из полученного сообщения коммита, чтобы не запутать git-svn?

bskp 17.08.2017 17:53

Команда git rebase -i может сделать это и многое другое. Эта команда очень мощная, так что с ней хорошо подружиться.

Синтаксис: git rebase -i <commit ID>. Откроется ваш текстовый редактор с параметрами (и инструкциями) для изменения всех коммитов до (не включая) данного идентификатора.

Например, чтобы изменить предыдущие 5 коммитов, вы можете сделать это:

git rebase -i HEAD~5

Или, если ваша ветка SVN называется "svn / trunk", то этот синтаксис тоже хорош:

git rebase -i svn/trunk

Затем появится окно текстового редактора. Чтобы раздавить все, измените первое слово каждой строки после первой с «выбрать» на «сквош» (если это звучит сбивающе с толку, это будет иметь больше смысла, когда вы это увидите). Затем сохраните и закройте редактор. Затем у вас будет возможность отредактировать сообщение фиксации для сжатой фиксации.

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

Я использую эту команду постоянно; это убийственная особенность Git.

Райан Томайко немного написал о git rebase -i, который сказал:

…[it's] a bit like git commit --amend hopped up on acid and holding a chainsaw – completely insane and quite dangerous but capable of exposing entirely new states of mind. Here you can edit, squash, reorder, tease apart, and annotate existing commits in a way that’s easier and more intuitive than it ought to be.

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

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