Сплющивание или редактирование некоторых фиксаций прежде, чем сделать мерзавца-svn dcommit?

Кто-то здесь только что предложил мишень sudoing:

sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null

Это могло также использоваться для перенаправления любой команды к каталогу, к которому у Вас нет доступа. Это работает, потому что программа мишени является эффективно "эхом в файл" программа, и перенаправление к/dev/null должно остановить его также выведение на экран для хранения его тем же как исходный изобретенный пример выше.

7
задан toholio 23 July 2009 в 07:35
поделиться

4 ответа

You can interactively rebase your local branch against the Subversion tracking branch which provides you with an opportunity to squash and amend the commit.

Next time you dcommit, dcommit will replay your history one commit at a time and this is what will be commited to Subversion.

Assumptions:

  1. Local branch is master
  2. Master is checked out
  3. Remote tracking branch is named git-svn
  4. git-svn is up to date

What to do:

$ git rebase -i git-svn

Your default editor will open with a list of commits in master to rebase against git-svn. You can pick, edit or squash the commit (Mix and match if desired).

After making your selection, another temporary file will open displaying commit messages for each of the commits you're rewriting. This is where you amend the commit message.

Caveats:

You're rewriting the history of your repository, exercise caution. It might be worthwhile experimenting with this behaviour until feel confident.

4
ответ дан 6 December 2019 в 14:07
поделиться

Да, вы можете переписать сообщения фиксации. Да, вы можете просто объединить их всех в одну фиксацию. Это, вероятно, зависит от процесса проверки и от того, сколько вы делаете за один раз.

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

В целом, ответ - «это зависит от обстоятельств» и «Git достаточно гибок, чтобы делать все, что вам нужно».

2
ответ дан 6 December 2019 в 14:07
поделиться

Я работаю в ветке на git, затем мастер проверки, git svn rebase и, наконец, слить ветку с мастером.

На этом этапе git svn dcommit поместит все промежуточные коммиты в svn по одному с их исходными сообщениями - не то, что нужно! Но если я использую git commit --amend , чтобы изменить сообщение фиксации слияния со стандартного сообщения слияния на что-то, что соответствует нашей политике для svn-коммитов, dcommit объединит их все вместе в одно новое сообщение. Win.

Я обнаружил, что это не сработает, если master не изменился за время существования ветки - коммиты просто перенаправляются быстро, без «объединенной ветки» сообщение - поэтому лучше всего добавить флаг - no-ff к git merge .

Резюме:

git checkout branch
<do work>
git checkout master
git svn rebase
git merge --no-ff branch
git commit --amend
<policy-compliant commit message>
git svn dcommit
8
ответ дан 6 December 2019 в 14:07
поделиться

Возможно, стоит попробовать, я относительно новичок, но сейчас я делаю следующее:

Создайте клон удаленного репозитория svn:

# clone svn repository
git svn clone ....

Create обычный репозиторий git (клон клона):

# clone the clone :)
git clone /path/to/original/clone
git checkout -b working

Теперь вы можете работать со вторым клоном, как если бы это был обычный репозиторий git (по сути, так и есть):

# commit changes, whatever you like
git ci
...

Чтобы вернуть ваши изменения в центральный репозиторий SVN, перейдите назад к первому клону и:

# pull and flatten changes
git pull --squash /path/to/working/clone

Параметр - squash означает, что все подтянутые коммиты объединены в одну фиксацию. Эта фиксация не фиксируется немедленно, поэтому вы можете:

git ci
git svn dcommit  

Затем последний шаг подталкивает все как одну фиксацию.

Изменить - Я бы не стал ' Обычно рекомендуется использовать - squash в других случаях, но учтите, что рабочий репозиторий сохраняет полную полную историю (он невосприимчив к сквошу), но то, что вы отправляете вверх по потоку, сжимается в одну чистую фиксацию, которая и есть необходимо в этом случае. Я считаю, что это разумный компромисс.

1
ответ дан 6 December 2019 в 14:07
поделиться