Когда я делаю svn commit и позволю редактору svn забрать его, я бы ЛЮБЛЮ для редактора svn, чтобы показать diff файлов, которые были изменены, а не только список файлов. Действительно помогает пробегать память при написании подробных сообщений фиксации. Любые идеи о том, как это сделать?Сделать SVN Commit также распечатать diff
ответ
Похож, сценарий здесь работает в конце концов.
С - http://push.cx/2007/seeing-subversion-diffs-for-commit-messages
необходимо, чтобы сделать несколько изменений.Я вставить весь скрипт здесь
создать файл, назовите его СВН в данном случае это положить в ~/бен
#!/bin/sh
REALSVN=/usr/bin/svn
ARGS="[email protected]"
if [ "$1" = "commit" -o "$1" = "ci" ]; then
shift # pop off $1 for diff
TEMPLATE=`mktemp -t tmp`
$REALSVN diff "[email protected]" > "$TEMPLATE"
$REALSVN $ARGS --editor-cmd="~/bin/svn-diff-editor '$TEMPLATE'"
else
$REALSVN $ARGS
fi
, а также создать файл с именем ~/bin/СВН-Diff-редактор
echo >> "$2"
cat "$1" >> "$2"
rm "$1"
$SVN_EDITOR "$2"
для OSX я должен был добавить «-t TMP» в mktmp и сценарий ориг имел $ VISUAL, которые у меня не было, и пришлось $ SVN_EDITOR установить вместо этого, когда я изменил последнюю строку СВН-дифф что он сработал.
Я должен отметить, что оба файла должны быть chmod + x'd, а ~/bin должен быть первым в вашем пути ... или просто поместите это где-нибудь, что впереди real svn на вашем пути – dstarh
написать скрипт
Потребовалось бы какую-то работу, но вы могли бы написать сценарий к переднему концу, как ваш SVN_EDITOR. Когда svn
вызывает ваш SVN_EDITOR, он передает имя файла временных комментариев, созданного svn, содержащего сводный список затронутых файлов, которые должны быть зафиксированы.
http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.advanced.externaleditors
The value of any of these options or variables is the beginning of a command line to be executed by the shell. Subversion appends to that command line a space and the pathname of a temporary file to be edited. So, to be used with Subversion, the configured or specified editor needs to support an invocation in which its last command-line parameter is a file to be edited, and it should be able to save the file in place and return a zero exit code to indicate success.
В принципе, вы можете написать скрипт, который принимает параметр имя файла, который:
- открывает файл, указанный в последнем арг (СВН временный комментарий файл)
- анализирует его для файлов, которые необходимо совершить
- запускает
svn diff
на каждый измененный (небинный) файл и добавляет di и далее выход назад в конец временного комментария файла Svn - вызывает ваш реальный редактор на модифицированный СВН временного комментария файл
Убедитесь, что ваш скрипт возвращает код возврата, возвращаемый вашего реальный редактор или 0, чтобы указать успех , Затем установите SVN_EDITOR env var, чтобы указать на ваш скрипт.
Возможно, кто-то уже написал такой скрипт, но я не смог его найти (особенно, поскольку вы не указали ОС). Также есть хороший шанс, что этот скрипт может генерировать чрезвычайно большой файл.
Альтернатива - написать макрос
Я думаю, что лучшей альтернативой было бы использовать программируемый редактор и запрограммировать макрос, который прочитал имя файла (ов) из некоторой выбранной линии (ов), а затем запустить SVN диф на файл (ы) - помещая результаты в буфер или добавляя его в текущий буфер. Затем вы можете выборочно выделять файлы из файла временных комментариев svn и запускать SVN diff только на нужные файлы ключей. Звучит как работа для elisp!
Извините, у меня нет готового кода для вас. Если вы сделаете это, было бы интересно посмотреть, как вернуться и опубликовать свой сценарий/макрос здесь в качестве ответа.
Я написал простой скрипт и установить SVN_EDITOR
на своем пути:
#!/bin/bash
tmpFile="${!#}"
# Append changes in committed files to tmpFile
echo >> ${tmpFile}
grep '^[MR]' ${tmpFile} | awk '{print $2}' | \
xargs -n 1 --no-run-if-empty svn diff >> ${tmpFile}
# Run editor
exec ${EDITOR} ${tmpFile}
Заметьте, что это выглядит только для модифицированных (M) и замененные файлы (R) и принимает EDITOR
установлен. Вероятно, не следует пытаться использовать двоичные файлы.
интересное решение. Мне действительно нравится вывод diff, который по умолчанию имеет SVN, и это то, что я хотел - обычный вывод commit выводит только файлы и статус, но svn diff предоставит вам правильную макет diff без необходимости называть svn diff для каждого файла отдельно. – dstarh
Я не мог найти ответ, который мне понравился. Ответ dstarh почти есть. Но это слишком навязчиво для меня. Что делать, если есть аргументы до commit
? Кроме того, безопаснее удалять временный файл с помощью ловушки. И в угоду параноидального народ, я избежать редактора ЦМД:
svn-commit.sh
:
#!/usr/bin/env bash
set -eu
tmp=`mktemp` _trap="rm -r "$tmp"; ${_trap:-}" && trap "$_trap" EXIT
svn diff "[email protected]" > "$tmp"
# svn diff "[email protected]" | iconv -f utf-8 -t utf-8 -c > "$tmp" # skip malformed UTF-8 characters
svn commit "[email protected]" "--editor-cmd=svn-editor.sh $(printf %q "$tmp")"
svn-editor.sh
:
#!/usr/bin/env bash
set -eu
diff_f=$1
commit_msg_f=$2
# dos2unix "$diff_f" # if svn repo has files with different line-ending styles
# dos2unix -f "$diff_f" # to make it always treat diff output as text
echo >> "$commit_msg_f"
cat "$diff_f" >> "$commit_msg_f"
"$EDITOR" "$commit_msg_f"
UPD Я столкнулся с этой ошибкой:
svn: E135000: Commit failed (details follow):
svn: E135000: Error normalizing edited contents to internal format
svn: E135000: Inconsistent line ending style
svn: E135000: Your commit message was left in a temporary file:
svn: E135000: '.../svn-commit.tmp'
Можно добавить addi ng dos2unix
команду или что-то подобное в комментарии.
UPD Кроме того, вы можете skip malformed UTF-8 characters, иначе SVN не удастся:
svn: E000022: Commit failed (details follow):
svn: E000022: Error normalizing edited contents to internal format
svn: E000022: Valid UTF-8 data
(hex: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 2b 0a 2b)
followed by invalid UTF-8 sequence
(hex: a4 20 3d 20)
svn: E000022: Your commit message was left in a temporary file:
svn: E000022: '.../svn-commit.tmp'
UPD И иногда dos2unix
может относиться diff
выход как двоичный:
dos2unix: Binary symbol 0x00 found at line 742308
dos2unix: Skipping binary file /tmp/tmp.UCNcubZZlX
svn: E135000: Commit failed (details follow):
svn: E135000: Error normalizing edited contents to internal format
svn: E135000: Inconsistent line ending style
svn: E135000: Your commit message was left in a temporary file:
svn: E135000: '.../svn-commit.tmp'
Вы можете хотите принудительно преобразовать.
- 1. как сделать svn diff выглядеть как diff?
- 2. как сделать diff выглядеть как svn diff?
- 3. SVN Pre Commit Hooks
- 4. Сделать каждый из svn commit как один git commit
- 5. SVN commit vs Git commit
- 6. Как сделать svn diff игнорировать двоичные файлы
- 7. svn commit failed svn: '/ svn /! Svn/bc/
- 8. subgit commit git -> svn также фиксирует наконечник (магистраль /)
- 9. svn commit error
- 10. SVN Commit Log Issue
- 11. Почему 'svn diff --diff-cmd = diff' выводит внутренний формат diff?
- 12. svn diff through perltidy
- 13. Использование команды svn diff
- 14. svn: E000002: Commit failed
- 15. SVN Commit Issue
- 16. SVN Commit Segmentation Fault
- 17. Autobuild on SVN commit
- 18. Github commit over SVN
- 19. SVN commit with Gradle
- 20. SVN Commit конкретных файлов
- 21. Svn commit в PHP
- 22. SVN Commit query
- 23. SVN commit не работает
- 24. svn commit --username folder_name
- 25. double commit - svn hook
- 26. SVN Control Commit Access
- 27. SVN Diff Export
- 28. svn diff summary
- 29. Image diff viewer SVN
- 30. Commit failed: svn: аутентификация отменена
С помощью TortoiseSVN (и многих других) вы можете дважды щелкнуть по любому файлу в этом списке, чтобы увидеть diff. Вы также можете выбрать несколько и щелкнуть правой кнопкой мыши. – JoshD
Я говорю о командной строке на терминале, где я установил свойство SVN_EDITOR, и я либо указываю, что на vim или textmate, которые выполняют автоматическую подсветку синтаксиса для фиксации или разницы, в зависимости от того, к какому я ее подключаю. – dstarh
@ Josh я могу легко svn diff | mate и увидеть разницу в чем-либо, что изменилось, но когда я набираю svn commit и mate или vim загружает, он в настоящее время просто показывает список файлов через svn status, мне бы очень понравилось ниже, чтобы увидеть вывод svn diff – dstarh