Псевдоним для печати имени ветки в текущей позиции курсора [дубликат]

Легкий способ определить, является ли что-то «пройденным по ссылке», можно ли написать функцию «своп». Например, в C вы можете сделать:

void swap(int *i, int *j)
{
    int t;
    t = *i;
    *i = *j;
    *j = t;
}

Если вы не можете сделать эквивалент этого в Javascript, это не «передать по ссылке».

17
задан Robert Munteanu 3 November 2010 в 13:11
поделиться

3 ответа

Возможно, я просто воспользуюсь крюком prepare-commit-msg , чтобы добавить это в файл. Из (связанной) manpage:

Этот крюк вызывается git commit сразу после подготовки сообщения журнала по умолчанию и перед запуском редактора.

Требуется один три параметра. Первый - это имя файла, содержащего сообщение журнала фиксации. Второй - источник сообщения фиксации ... [сообщение, шаблон, слияние, сквош или фиксация] ...

Если статус выхода не равен нулю, git commit будет отменен.

Цель этого крючка - отредактировать файл сообщения на месте ...

Вы можете получить текущую ветвь с git symbolic-ref HEAD.

Вы можете просто обойти шаблоны в целом, и у вас есть hook preend / insert / append имя ветки. Простейший случай, добавление, сценарий - это просто строка shebang, затем git symbolic-ref HEAD >> "$1". Используйте свой любимый метод, если вы хотите его встроить, - наиболее читаемый, чтобы переместить оригинал в сторону, написать и добавить, но метод, связанный в комментариях, тоже работает.

Если вы предпочитаете использовать шаблон с заполнителями, вы можете просто сделать что-то вроде sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1". Я уверен, что вы можете представить себе множество других вариантов.

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

17
ответ дан Cascabel 22 August 2018 в 17:05
поделиться
  • 1
    Спасибо за ответ, это место. Для справки мне удалось добавить строку с инструкциями из stackoverflow.com/questions/54365/… – Robert Munteanu 5 November 2010 в 16:34
  • 2
    @ Robert Munteanu, если вы хотите поставить все свое решение здесь в ответ, для ленивых? Я бы наверняка его поддержал :) Спасибо ... – Dan Rosenstark 29 November 2010 в 20:20
  • 3
    @Yar: Лично я предпочел бы иметь что-то читаемое с временным файлом, чем маска дескриптора файла, которую я должен попытаться расшифровать позже. mv "$1" "$1.tmp"; git symbolic-ref 2> /dev/null > "$1"; cat "$1.tmp" >> "$1"; rm "$1.tmp" – Cascabel 29 November 2010 в 22:54
  • 4
    @Yar: попробуйте branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$1" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$1" >&3 – Robert Munteanu 30 November 2010 в 08:59
  • 5
    использование git rev-parse --abbrev-ref HEAD позволит избежать необходимости в sed выше. – andygavin 4 January 2013 в 16:10

Просто комментируя комментарии от ответа Джефроми, я получаю что-то вроде этого. Конечно, это может быть более жестким (если бы я знал, что я делаю):

tempFile='/tmp/git-commit-template'
git config commit.template "$tempFile"
rm $tempFile
branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$tempFile" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$tempFile" >&3
git add .
git commit -a
0
ответ дан Dan Rosenstark 22 August 2018 в 17:05
поделиться

Решение с использованием git-псевдонима, но без шаблона:

$ git config --global alias.com '!sh -c "bug=`git symbolic-ref HEAD|sed s#refs/heads/##`; git commit -em \"BUG: \${bug}\""'
$ git com
2
ответ дан sschmeck 22 August 2018 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: