Когда я работаю с git, я часто печатаю ряд команд, начинающихся с «git», за которыми следуют различные аргументы.

Есть ли способ войти в «git-mode», который позволит мне использовать все команды git без префикса git?

Например, вместо ввода следующих команд:

git fetch
git status 
git diff
git add file.txt
git commit 
git push

Я хотел бы вместо этого использовать:

enter-git-mode
fetch
status 
diff
add file.txt
commit 
push
exit-git-mode

3 ответа3

2

Есть несколько инструментов, которые делают это. Один из них - gitsh, и на их странице README.md перечислены еще несколько. Это обеспечивает немного больше, чем просто добавление git к вашим командам, но все же может соответствовать вашим потребностям.

Пример использования из README.md:

sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$
1

Если вы хотите все время находиться в «git-mode», простой ответ - ввести следующие команды:

alias fetch='git fetch'
alias status='git status'
alias diff='git diff'
alias add='git add'
alias commit='git commit'
alias push='git push'

в ваш ~/.bashrc .  Но это может быть нежелательно, хотя бы потому, что есть обычная команда с именем diff , и вы не сможете получить к ней доступ, если у diff есть псевдоним git diff 1 .  Таким образом, следующее, небольшое увеличение сложности заключается в том, чтобы настроить его так, чтобы псевдонимы могли активироваться и деактивироваться динамически.  Вы можете сделать это с

alias enter-git-mode="alias fetch='git fetch'; alias status='git status'; alias diff='git diff'; alias add='git add'; alias commit='git commit'; alias push='git push'"
alias exit-git-mode="unalias fetch status diff add commit push"

Итак, теперь enter-git-mode - это команда (псевдоним), которая определяет первые шесть псевдонимов, а exit-git-mode - это команда, которая их не определяет.

Вы можете разбить эту длинную команду на несколько строк, если хотите:

alias enter-git-mode="alias fetch='git fetch';   alias status='git status';
                      alias diff='git diff';     alias add='git add';
                      alias commit='git commit'; alias push='git push'"
alias exit-git-mode="unalias fetch status diff add commit push"

Это позволяет вам использовать эти команды, как и любую другую команду; например,

date; status; date              # A simple way of seeing how long a command takes.
time add .
commit &
commit && push
diff > differences.txt

и автозаполнение, и вы можете смешивать обычные команды Unix/Linux с командами git - за исключением того, что, конечно, вы не можете запустить diff 1.

Очевидно, это не волшебным образом обрабатывает все команды git .  Если вы хотите обрабатывать больше подкоманд (например, archive или branch), вам нужно добавить их в псевдонимы.
________
1, за исключением ввода /bin/diff или /usr/bin/diff

1

Сценарий оболочки с именем git-mode должен сделать свое дело:

#!/bin/bash

echo -n "> "
while read line; do
    case $line in
        fetch*) git fetch
                ;;
        status*) git status
                 ;;
        # and so on
     esac

     echo -n "> "
done

На практике я бы, вероятно, просто использовал псевдоним git для g чтобы оставаться гибким (или git add to gadd , git fetch для gfetch и т.д.).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .