2016-05-08 3 views
1

Я пытаюсь связать системные команды в bash с моими командами git.Цепочка системных команд на команды git

Например, git commit -m cat commit_message.txt.

Я заметил, я использую те же самые 4 команды несколько раз, и я хотел бы создать псевдоним, который делает:

git add -A && git commit -m cat ~/my_project/commit_message.txt && git push origin dev && git push heroku-staging master.

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

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

+0

'git commit -m" $ ( andlrc

+0

Дублирование всей предыдущей истории в каждом коммите кажется немного странным. Просто используйте 'git log --format ="% b "', если вы хотите увидеть все изменения до и включая текущую фиксацию. – chepner

ответ

4

git commit имеет -F (--file), что делает именно то, что вы хотите, без использования какой-либо магии оболочки: просто использовать git commit -F commit_message.txt.

+0

Спасибо, не знал, что :-) – andlrc

+0

Это прекрасно! Спасибо! – Doug

0

создать системный псевдоним вы можете сделать:

alias myName=myCommand 

или если вы хотите только сессионный псевдоним (доступен только в терминале живой), вы можете сделать:

myName=myCommand 

Чтобы запустить его вы можете сделать $myName

затем запустить несколько команды вы можете попытаться использовать трубу:

command 1 | command 2 ... 
+0

Все еще неправильно, это должно быть 'alias myName = MyCommand' – Jahid

+0

yes и no Это будет зависеть, если мы хотим переписать все запуск системы или выполнить только пользовательский псевдоним команды , если вы выполните test = 'apt-get moo' в терминале bash он будет воспроизводить правильную команду , если вы попробуете $ test –

+0

Это не псевдоним, и я сказал, что это неправильно, потому что нет такой вещи, как 'myName = myCommand', вам по крайней мере нужно удалить пробелы. – Jahid

2

Вам необходима подстановка команд для использования вывода из одной команды в качестве аргумента для другого:

git commit -m "$(< commit_message.txt)" 

Вы также можете использовать git commit -a, чтобы добавить все файлы поэтому нет необходимости вызывать git add:

git commit -am "$(< commit_message.txt)" 

Я бы создал для этой функции функцию:

do_git_stuff() { 
    # Du stuff... 
    : # The colon is here because a function cannot be empty. This can be removed when you 
    # add some "real" code 
} 

Чтобы связать это вместе:

do_git_stuff() { 
    git commit -am "$(< commit_message.txt)" \ 
    && git push origin dev \ 
    && git push heroku-staging master 
} 

Что такое "$(< file.txt)"?

Оператор означает, что вы должны принять stdin от file.txt. Подстановка команды ($(...)) вернет то, что написано в stdout. Кавычки используются, чтобы избежать разделения слов.

+0

Фантастический! Я ничего не знал об этом, и я очень благодарен за подробное объяснение :) – Doug

+0

@Doug Пожалуйста, посмотрите, как Matthieu Moy предлагает использовать 'git commit -F ' – andlrc

1

Вы можете просто написать сценарий.

Создать $HOME/bin каталог для исполняемых файлов:

mkdir -p ~/bin 

Добавить каталог в $PATH в вашем ~/.bashrc.

export PATH=$PATH:$HOME/bin 

Обновление среды в текущем сеансе терминала:

source ~/.bashrc 

Создайте скрипт:

git_commit_file="$HOME/bin/git-commit" 
cat > "$git_commit_file" <<'EOS' 
#!/bin/bash - 
message_file="$1" 
# Add your commands here ... 
EOS 
chmod +x $git_commit_file 

Теперь вы можете запустить git-commit message.txt.

Кстати, создавая псевдонимы так же просто, как добавление alias name=command в ~/.bashrc, например .:

alias ls='ls --color=auto' 

Но я бы рекомендовал писать сценарий.

Смежные вопросы