Опустить «git» из серии команд git


0

Когда я работаю с 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

Ответы:


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 diff1 . Таким образом, следующее, небольшое увеличение сложности состоит в том, чтобы настроить его так, чтобы псевдонимы могли активироваться и деактивироваться динамически. Вы можете сделать это с

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командами - кроме, конечно, вы не можете запустить diff1 .

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


2

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

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

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

Это выглядит как хорошее решение. Но я замечаю из документации, что для запуска обычной команды Unix / Linux (например, dateили ls -al), когда вы находитесь gitsh, вы должны набрать !сначала. В зависимости от рабочего процесса пользователя это может быть громоздким.
Скотт

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к gadd, git fetchк и gfetchт.д.).


Мне нравится эта идея, но интересно, могли бы мы сделать ее немного более привлекательной? Не могли бы мы просто использовать: пока читаем строку; do \ git $ line \ echo -n ">" \ done
PaulrBear

@PaulrBead Как бы вы справились git add foo.cс этим?
Nohillside

Это работает! :) Но использование этого подхода жертвует использованием автозаполнения с помощью клавиши Tab, что может быть слишком неудобно для использования часто.
PaulrBear

Это сильно связывает одну руку за спиной пользователя. Используя скрипт, пользователь не может делать такие вещи , как date; status,  time add .,  commit &,  commit && push, или  diff > differences.txt. Также, как написано, ваш скрипт завершится, если пользователь введет Ctrl + C.
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.