Git патч игнорируя пробелы в C ++ - PullRequest
4 голосов
/ 13 мая 2010

Единственное, что меня волнует, это файл C ++. (Не беспокойтесь о бинарных файлах, тексте и т. Д. Вы можете предположить, что все это код C ++ _).

У меня есть эти ветки:

* dev
  master

Теперь я могу создать новую ветвь "магия", в которой магия ветвления эквивалентна "dev" (с точки зрения сгенерированного кода на C ++), но минимизирует бесполезные различия в белом списке (например, вставку дополнительных новых строк) от master.

Возможно ли это?

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 июля 2010

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

Самый простой способ сделать это с git rebase --interactive. Это позволяет вам редактировать серию коммитов вручную. Вы можете получить хэш первого («корневого») коммита с помощью git rev-list HEAD | tail -n 1. Если вы также хотите отредактировать первый коммит, это сложнее, но на это есть SO-ответ.

git checkout dev
git checkout -b magic
git rebase --interactive $(git rev-list HEAD | tail -n 1)

Это вызывает редактора в списке коммитов в прямом хронологическом порядке. Вы изменяете pick на edit на коммитах, которые вы хотите изменить. Затем git остановится перед обработкой каждого из этих коммитов, что позволит вам изменить его с помощью git commit --amend, а затем продолжить перебазирование с помощью git rebase --continue. Конечно, вы можете запустить скрипт для очистки файлов, а не редактировать их вручную. Если вы хотите сделать это, основываясь на отличиях от предыдущего коммита, вам нужно будет использовать что-то вроде git cat-file blob HEAD^:filename, чтобы извлечь предыдущую ревизию, или использовать git diff HEAD^ filename.

Если вы хотите автоматизировать весь процесс, вы можете использовать git filter-branch --tree-filter script. Посмотрите man-страницу для git-filter-branch для подробностей.

Если вы хотите, чтобы в будущих коммитах не было ошибок, вы можете настроить pre-commit hook , чтобы запретить их.

Когда вы довольны новой веткой magic , вы можете использовать ее для замены dev :

git branch -m dev dev-old
git branch -m magic dev

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

0 голосов
/ 13 мая 2010

Вы можете попробовать установить post-merge hook , который будет:

  • делать что-либо, только если текущая ветвь является магической
  • удалить все белые* .cpp файлы
  • делают новый коммит (поскольку хук post-merge не может напрямую влиять на результат git merge)
0 голосов
/ 13 мая 2010

git diff --ignore-space-change ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...