Как мне избежать ввода "git" в начале каждой команды Git? - программирование
Подтвердить что ты не робот

Как мне избежать ввода "git" в начале каждой команды Git?

Мне интересно, есть ли способ избежать необходимости вводить слово git в начале каждой команды Git.

Было бы хорошо, если бы был способ использовать команду git только один раз в начале после открытия командной строки, чтобы войти в "режим Git".

Например:

git>

После чего каждая команда, которую мы вводим, по умолчанию интерпретируется как команда Git.

Таким же образом, как мы используем оболочку MySQL для написания команд базы данных:

mysql>

Это избавит меня от необходимости печатать git сотни раз в день.

ПРИМЕЧАНИЕ: я использую git-bash в Windows.

4b9b3361

Ответ 1

Вы можете попробовать Gitsh. Из их readme:

Программа gitsh - это интерактивная оболочка для git. gitsh вы можете выполнить любую команду git, даже используя ваши локальные псевдонимы и конфигурацию.

  • Git команды, как правило, приходят группами. Старайтесь не вводить git снова и снова, запуская их в специальной оболочке git:
sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$

Или посмотрите на другие проекты, связанные там:

  • git-sh - настраиваемая оболочка bash с приглашением Git, псевдонимами и завершением.
  • gitsh - простая оболочка Git, написанная на Perl.
  • repl - Обертывает любую программу с подкомандами в REPL.

Примечание: сам этим не пользовался.

Ответ 2

Однострочник Perl, который сделает это:

perl -nE 'BEGIN {print "git > "} system "git $_"; print "git > "'

Это будет выполнять все, что вы печатаете, с префиксом git. И это будет продолжаться до тех пор, пока вы не нажмете ^D

Ответ 3

Это не совсем то, что вы просите, но вы можете настроить псевдонимы оболочки в вашем ~/.bashrc для команд Git, которые вы используете чаще всего:

alias commit='git commit'
alias checkout='git checkout'
...

Также обратите внимание, что вы можете создавать псевдонимы внутри самого Git:

git config --global alias.ci commit
git config --global alias.co checkout
...

Это позволяет вам вводить git ci вместо git commit и так далее.

Ответ 4

Я большой поклонник использования псевдонимов в ~/.bash_profile для моего GitBash. Если вы используете этот подход, вот некоторые из моих любимых:

# git
alias gw='git whatchanged'
alias gg='git grep -n -C8'
alias ggi='git grep -i -n -C8'
alias gb='git branch'
alias gbd='git branch -D'
alias gba='git branch -a'
alias gc='git checkout'
alias gcp='git cherry-pick'
alias gfo='git fetch origin'
alias s='git status'
alias gmom='git merge origin/master'
alias grom='git rebase origin/master'
alias gpom='git pull origin master'
alias pplog='git log --oneline --graph --decorate'

Ответ 5

Используйте свой редактор.

Введите команду like commit из вашего любимого редактора, например vs code, и будьте эффективнее с git:

enter image description here

Или введите git чтобы получить все команды:

enter image description here

Ответ 6

Мой друг написал небольшой скрипт bash, который выполняет это. Это называется Replify.

$ replify git
Initialized REPL for [git]
git> init
Initialized empty Git repository in /your/directory/here/.git/

git> remote add origin https://your-url/repo.git

git> checkout -b new-branch
Switched to a new branch 'new-branch'

git> push

Ответ 7

Вот другой способ. Это также не совсем то, о чем спрашивали, но я использовал это в течение некоторого времени, и это довольно приятно. Добавьте следующую строку в ваш ~/.bashrc:

complete -E -W git

Теперь, нажав клавишу Tab в пустой строке Bash, выведите "git".

Ответ 8

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

Я не уверен в вас, но я, честно говоря , не хочу (повторяю, НЕ) создавать псевдонимы для каждой команды git, поэтому вместо этого я написал скрипт на языке Python под названием NoGit, чтобы решить эту проблему:

#!/usr/bin/env python
import sys, os, signal, atexit, readline, subprocess

commands, stop, history_file = [], False, os.path.join(os.getcwd(), "git.history")

def run_commands():
  stop = True
  for cmd in commands:
    command = ["git" if not cmd.startswith("git ") else ""]
    command = [cmd] if command[0] == "" else [command[0], cmd]
    subprocess.Popen(command).communicate()
    commands = []

def signal_handler(sig, frame):
  run_commands()
  sys.exit(0)

try:
  readline.read_history_file(history_file)
  signal.signal(signal.SIGINT, signal_handler)

  while True:
    if stop == True:
      break
    command = input("git> ")
    if command == "%undo":
      commands.pop()
    elif command == "%run":
      run_commands()
    elif command == "%exit":
      sys.exit(0)
    else:
      commands += [cmd.strip() for cmd in command.split(";")]

  signal.pause()
  readline.set_history_length(-1)
except IOError:
  pass

atexit.register(readline.write_history_file, history_file)

NoGit - это простой скрипт на python, который предотвращает ненужное повторение ключевого слова "git".

Документация:

  • команда %undo удаляет последнюю команду из стека
  • команда %run запускает команды в стеке и очищает стек
  • команда %exit закрывает CLI, ничего не делая
  • нажатие ctr+c аналогично запуску %run; %exit %run; %exit
  • скрипт сохраняет команды, которые были выполнены, в файл с именем git.history в той же папке, что и скрипт
  • Вы можете добавить несколько команд в одну строку, используя точку с запятой
  • Вы можете использовать ключевое слово git в начале команды и сценарий не будет дублировать его (EG: git init не станет git git init)

Примеры команд:

  1. init
  2. add.
  3. stage.
  4. commit -m "inital commit"
  5. %run; %exit

Дополнительная информация (для пользователей Linux):

Если вы хотите, вы можете удалить расширение .py и преобразовать его в исполняемый файл, используя:

mv ./git.py ./git
chmod +x ./git

Тогда вместо вызова скрипта вот так:

python3 git.py

Вы бы запустили это вместо:

./git

Дополнительная информация (для ленивых):

Если вы ленивы и не хотите вводить ./ тогда вы можете переместить этот скрипт в папку /bin/ и создать для него псевдоним.

Если вы действительно, очень ленивый, используйте следующие команды:

sudo cp ./git /bin/nogit
sudo chmod +x /bin/nogit
alias nogit='/bin/nogit'

Если вы действительно, действительно, очень ленивы, скопируйте и вставьте следующую строку:

sudo cp ./git /bin/nogit && sudo chmod +x /bin/nogit && alias nogit='/bin/nogit'

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

sudo cp ./git /bin/nogit;sudo chmod +x /bin/nogit;alias nogit='/bin/nogit'

Удачи.

Ответ 9

Другой подход, который будет работать с любыми командами: используйте Ctrl + R (reverse -i -search).

Обратный поиск -i позволяет вам искать историю команд. Повторите Ctrl + R после нажатия строки поиска, чтобы повторить поиск далее с той же строкой.

Вам нужно всего лишь ввести команду один раз, затем вы можете вызвать ее из любой подстроки команды. В большинстве случаев вы можете вспомнить целые очень длинные команды и их различные варианты с помощью всего двух-трех удачно расположенных поисковых букв. Никаких предварительных настроек не требуется, кроме использования вашей оболочки в обычном режиме, и оно самоадаптируется к тому, как вы использовали оболочку, просто введите полную команду один раз, и команды будут автоматически добавлены в историю команд.

  • git commit --amend: <Ctrl+R>am
  • git pull: <Ctrl+R>pu
  • git rebase --rebase-merges -i --onto origin/develop origin/develop feature/blue-header: <Ctrl+R>blu
  • git rebase --abort: <Ctrl-R>ab
  • git rebase --continue: <Ctrl-R>con
  • docker-compose stop && git pull && make && docker-compose up -d: <Ctrl-R>up
  • так далее

Более того, Ctrl-R работает не только на bash, но и на многих программах, использующих библиотеку readline (а их много), таких как оболочка Python, IPython, оболочка mysql, оболочка psql, irb (ruby) и т.д.

Ответ 10

В вашем примере вы сравниваете его с приглашением MySql. Это работает так, что запускается процесс MySql, и вы даете свои команды этому процессу. Как так, почему бы не написать что-то похожее на выбранном вами языке? Вот простой пример в C++:

#include <iostream>
#include <cstdlib>

int main(int argc, char *argv[]){
    while(true){
        std::cout << "git> ";
        std::cout.flush();
        std::string command;
        std::getline(std::cin, command);
        if(command == "exit") break;
        std::system("git " + command);
    }

    return 0;
}

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

Ответ 11

Для базовых вещей вы можете сделать:

function ggit(){ while true; do printf 'git> '; read; eval git $REPLY; done }
git> status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    yarn.lock

no changes added to commit (use "git add" and/or "git commit -a")
git> add .
git> status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    yarn.lock

git>

Выход с помощью Ctrl + C

Ответ 12

Когда я использовал Windows 7 с Conemu, я добавил следующее в мой скрипт запуска среды разработки:

doskey g=git $*

При этом я мог просто использовать команду g вместо ввода git. Последний раз я пробовал с Windows 10 и Conemu, он не работал, есть ошибка, я думаю, но это стоит попробовать.

Ответ 13

Используйте редактор скобок, в нем легко использовать ваш код и команды git, он также имеет много функций.

enter image description here

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

enter image description here

Найдите в brackets git расширение, как на картинке выше, и установите его.

enter image description here

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

Если вы хотите установить скобки, используйте следующие команды:

sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get install brackets

Для получения дополнительной информации вы можете прочитать: Как установить редактор скобок в Ubuntu и Linux Mint в Ubuntupit.

Ответ 14

Это не точный ответ, но он объясняет, почему вы на самом деле не хотите этого делать. При использовании Git bash команды Git сосуществуют с другими командами Linux. Например, доступна команда Linux mv, которую можно использовать для перемещения каталогов и файлов. Оказывается, там также есть команда Git git mv. Если мы автоматически добавим к командам все команды с помощью git, доступ к команде Linux mv из bash станет невозможным. Итак, вы можете подумать о другом подходе.

Ответ 15

Найдите псевдонимы для вашей операционной системы или стороннего программного обеспечения, такого как gitsh

Ответ 16

Используйте Рыбу, свою команду памяти в bash. Очень быстрое написание.

Ответ 17

Добавьте следующую строку в ~/.bashrc:

complete -E -W git

Теперь, нажав клавишу Tab в пустой строке Bash, выведите "git".