모든 Git 명령을 시작할 때“git”을 입력하지 않으려면 어떻게해야합니까?


190

단어를 입력하지 않아도되는 방법이 있는지 궁금합니다. git모든 Git 명령의 시작 부분에 .

"Git mode"git 로 들어가기 위해 명령 프롬프트를 연 후 처음에 한 번만 명령 을 사용하는 방법이 있다면 좋을 것 입니다.

예를 들면 다음과 같습니다.

git>

그 후에 우리가 입력하는 모든 명령은 기본적으로 Git 명령으로 해석됩니다.

MySQL 쉘을 사용하여 데이터베이스 명령을 작성하는 방법과 유사한 방식으로 :

mysql>

이렇게하면 git하루에 수백 번 입력하지 않아도됩니다 .

참고 :git-bash Windows 에서을 사용 하고 있습니다.


87
주제를 벗어난 주제로 마감하기로 투표 한 사람들은 클릭하는 텍스트를 읽으십시오. "일반적인 컴퓨팅 하드웨어 및 소프트웨어에 대한 질문은 프로그래밍에 주로 사용되는 도구를 직접 포함하지 않는 한 스택 오버플로에 대한 주제가 아닙니다 . ". Git은 프로그래머가 사용하는 도구입니다. 이 사이트에 자체 태그가 있다는 사실이 증명합니다.
JBentley 2016 년

5
왜 "git"을 많이 입력하고 있습니까? IDE에는 키를 누를 때 사용할 수있는 강력한 vc 통합이 있어야합니다. 당신은 오히려 "자식 풀 '50 회, 또는 Ctrl-t ... 정지 입력 마십시오 명령 줄 전사 인 당신이해야 그나마 언제)
vikingsteve

8
@vikingsteve 실제로 모든 git 도움말과 지혜는 명령 행 측면에서 제공됩니다.
Ed Randall

6
@vikingsteve 더 빠르기 때문에 너무 많이 입력하고 있습니다. 나는 ~ 100wpm을 입력한다. Git에 익숙한 것과 같은 키 누름에 친숙하다면 더 많은 정보를 얻는다. GUI를 클릭하는 것보다 훨씬 쉽습니다. 자주 사용하는 IDE에는 키보드 단축키가있을 수 있습니다. 잘 됐네요 왜 것이라고 나는 그들을 학습 시간을 낭비 할 때 <M-탭> 자식 ㅋ <CR> 내 근육 메모리에 이미?
Fund Monica의 소송

3
"사용자가 말이되지 않는 질문을하기 때문에이 질문을 닫아야합니다."가 있어야합니다. git command "라는 메시지가 표시됩니다.
user3728501

답변:


190

gitsh 시도해 볼 수 있습니다 . 그들의 readme에서 :

gitsh프로그램은 git 용 대화식 쉘입니다. 내부에서 gitsh로컬 별명과 구성을 사용하더라도 git 명령을 실행할 수 있습니다.

  • 힘내 명령은 그룹으로 오는 경향이 있습니다. git전용 자식 쉘에서 실행 하여 반복해서 입력하지 마십시오 .
sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$

또는 연결된 다른 프로젝트를 살펴보십시오.

  • 자식 Git 프롬프트, 별명 및 완료가있는 사용자 정의 된 bash 쉘.
  • 자식 -Perl로 작성된 간단한 Git 쉘.
  • repl -REPL에서 부속 명령이있는 프로그램을 랩핑합니다.

참고 : 이것을 직접 사용하지 않았습니다.


22
불평은 ... repl(1)REPL이 아닙니다. 아무것도 평가하거나 인쇄하지 않습니다. 프로그램을 실행합니다.
Kevin

11
@Kevin 사용자 요청을 읽고, 프로그램을 실행하여 사용자 요청을 평가하고, 프로그램의 출력을 인쇄합니다. 이것은 또한 껍질이하는 일입니다.
Yakk-Adam Nevraumont

2
@ Yakk-AdamNevraumont : 아니요. "프로그램의 출력을 인쇄하지 않습니다." 이 단말기에 프로그램의 표준 출력을 후크, 다음 프로그램은 자신의 출력을 인쇄 - 프로그램의 표준 출력이 이미 (오버 자동으로 상속 터미널에 매여 제외 fork()/ exec()), 그래서 repl(1)심지어는 일을하지 않는 것을 .
Kevin

6
@Kevin 나는 당신의 감정을 이해하지만, REPL의 엄격한 정의는 다양한 언어로 된 대부분의 통역“REPL”을 배제 할 것 입니다. 순전히 기능적인 언어로만 평가에 부작용이 없는지 확인할 수 있었지만 Haskell에서도“REPL”GHCi는 기본적으로 IO조치 를 수락 하고 터미널 연결 화면에 인쇄하는 등의 부작용을 포함하여 조치를 수행합니다.
leftaroundabout

2
@Kevin repl은 독립형 REPL이 아닙니다. repl대화식 구성 요소 만 있는 REPL 시스템을 작성하는 수단입니다 . 공평한가요?
Kyle Strand

116

이것을 할 Perl one-liner :

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

그러면 접두사가 앞에 입력 한대로 실행됩니다 git. 그리고 당신이 때릴 때까지 계속 그렇게 할 것 ^D입니다.


6
이것은 실제로 OP가 요구하는 것과 매우 유사하며 매우 가벼운 패키지입니다!
ruohola 2016 년

2
readline으로 작업하면 완벽하지만 불행히도 그렇지 않습니다 (놀랍게도 이것이 Perl의 -ne플래그 주위의 해킹이기 때문에 ).
Konrad Rudolph

11
@KonradRudolphperl -MTerm::ReadLine -E '$n = Term::ReadLine -> new ("git"); while ($_ = $n -> readline ("git > ")) {system "git $_"}'

57

이것은 정확히 당신이 요구하는 것이 아니지만 ~/.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등등합니다.


7
이 방법의 단점은 모든 Git 명령에 대해 별도의 별칭을 만들어야한다는 것입니다.
Tim Biegeleisen 2009 년

22
가장 많이 사용되는 경우에만 해당됩니다. 당신은 얼마나 자주 사용 하는가, 의미 git hash-objectgit interpret-trailers? 내가 아는 한, 질문이 요구하는 것이 실제로 존재하지 않기 때문에 나는 이것을 대안으로 제공하고 있습니다.
Thomas

15
ci대한 commit쉘 별칭 g을 사용하는 것 외에도 git대부분의 입력을 줄이고 선호하는 쉘에 머물 수 있습니다.
rkta

32

내 GitBash에 ~ / .bash_profile에서 별칭을 사용하는 것을 좋아합니다. 이 접근 방식을 사용하면 다음과 같은 즐겨 찾기가 있습니다.

# 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'

3
어디에 커밋 : P
qwr

14
나는 포함되지 않습니다 commit또는 push내가 (동안 입력)를 약간 여분 초를 원하기 때문에 반드시 뭔가 파괴 아니에요 수
JacobIRR

3
강제 푸시를 사용하지 않으면 커밋 및 푸시가 아무것도 파괴 할 수 없습니다. 그러나 미리 git status를 사용하려고합니다.
qwr

1
이것이 내가 한 일입니다, +1. 다른 답변에서 언급했듯이 gitsh를 시도하고 싶지만
CoffeeTableEspresso

1
@CoffeeTableEspresso 나는 몇 가지 키 입력이 업데이트 저장과 프로젝트 파괴의 차이라는 것을 인정한다는 사실을 존중합니다.
LogicalBranch

31

편집기를 사용하십시오.

vs 코드commit같이 좋아하는 편집기에서와 같은 명령을 입력하고 git을보다 효율적으로 사용하십시오.

여기에 이미지 설명을 입력하십시오

또는 입력 git하여 모든 명령을 가져옵니다.

여기에 이미지 설명을 입력하십시오


13
나는이 모든 다운 투표에 놀랐습니다. 이러한 기능을 지원하는 IDE를 사용하는 사람들에게는 끔찍한 대답이 아닙니다.
Glen Pierce

4
모든 사람들이 VS 코드를 사용하거나 좋아하지 않기 때문에 사람들이 투표를하지 않은 것 같습니다. 어느 쪽이든, 나는 그것이 괜찮은 해결책이라고 생각합니다.
LogicalBranch 2014 년

4
@LogicalBranch, 사람들은 일반적으로 git from 명령 줄을 사용하고 있으며 알고 있습니다. 그러나 일부 편집기 내부의 git 지원이 존재하며 시도해 볼 가치가 있습니다.
prosti 2016 년

1
모든 사람이 VS 코드를 사용하지 않기 때문에이 답변이 마음에 들지 않습니다 (개인적으로 좋아하지는 않지만).이를 사용하는 ppl을위한 훌륭한 솔루션이기 때문에 공감하지 않습니다.
CoffeeTableEspresso 2016 년

1
@CoffeeTableEspresso, 만약 당신이 숭고한 것을 사용한다면 gitsavvy라는 플러그인이 있습니다 . 그리고 거의 모든 편집기는 오늘날 거의 모든 종류의 git을 지원합니다. "편집기 사용"을 읽을 수 있으므로 이것이 바로 대답의 요점입니다.
prosti 2016 년

26

내 친구가 이것을 달성하는 작은 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

6
OK, Umur의 답변에 대해서는 이미 언급했지만 eval원래 스크립트 소스에서 사용 하는 것이 가장 좋은 아이디어는 아닙니다. 친구에게 while IFS= read -r -p "git> " gitcmd; do [ "x$gitcmd" != "x" ] && git "$gitcmd";done대신 사용하기
Sergiy Kolodyazhnyy 2016 년

23

다른 방법이 있습니다. 그것은 또한 요청 된 내용이 아니지만 얼마 동안 사용 해 왔으며 꽤 좋습니다. 에 다음 줄을 추가하십시오 ~/.bashrc.

complete -E -W git

이제 빈 Bash 프롬프트에서 Tab을 누르면 "git"이 입력됩니다.


5
다른 쉘을 사용하는 경우 적절한 파일에 넣어야합니다. 예를 들어, zsh의 ~/zshrc경우, tcsh의 경우 ~/tcshrc, 등을 넣습니다 .
TheOnlyMrCat

20

나는 이것이 매우 늦은 대답이라는 것을 알고 있지만,이 질문은 지금 꽤 오랫동안 이런 종류의 반복 으로 고통 받고 있기 때문에 나에게 메모를 쳤다 .

나는 당신에 대해 확실 하지 않지만 솔직히 모든 명령에 대해 별칭을 만들고 싶지 는 않지만 ( DO N'T 반복 하지 않음 ) git대신 이 문제를 해결하기 위해 NoGit 이라는 Python 스크립트를 작성했습니다 .

#!/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)

노깃 은 "git"키워드의 불필요한 반복을 막기위한 간단한 파이썬 스크립트입니다.

선적 서류 비치:

  • %undo명령은 스택에서 마지막 명령을 제거합니다
  • %run명령은 스택의 명령을 실행하고 스택을 지 웁니다
  • %exit명령은 아무것도하지 않고 CLI를 닫습니다
  • 누르는 ctr+c것은 달리기와 같다%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'

행운을 빕니다.


17

모든 명령에서 작동하는 또 다른 방법은 Ctrl + R (reverse-i-search)을 사용하는 것입니다.

reverse-i-search를 사용하면 명령 기록을 검색 할 수 있습니다. 검색 문자열을 누른 후 Ctrl + R을 반복하여 같은 문자열로 다시 검색을 반복하십시오.

명령을 한 번만 입력하면 명령의 하위 문자열에서 해당 명령을 호출 할 수 있습니다. 대부분의 경우, 2 ~ 3 개의 잘 배치 된 검색 문자를 사용하여 매우 긴 전체 명령과 다양한 변형을 불러올 수 있습니다. 쉘을 정상적으로 사용하는 것 외에는 사전 구성이 필요하지 않으며 쉘을 사용한 방법에 자동으로 적응하므로 전체 명령을 한 번만 입력하면 명령이 명령 내역에 자동으로 추가됩니다.

  • 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에서만 작동하지 않지만 Python 셸, IPython, mysql 셸, psql 셸, irb (ruby) 등과 같이 readline 라이브러리를 사용하는 많은 프로그램이 있습니다 (많은 프로그램이 있습니다).


15

이 예에서는 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;
}

방금 메모리에서 썼고 컴파일러로 확인하지 않았습니다. 사소한 구문 오류가있을 수 있습니다.


그냥 내 생각이야 스택 오버플로의 모든 사람은 그러한 프로그램을 직접 코딩 할 수 있어야합니다. 프로그래밍 언어는 실제로 중요하지 않습니다.
토마스 웰러

@ThomasWeller 동의합니다. 작성하기 어려운 프로그램이 아니라 내가 말하는 것을 정확하게 보여주기 위해 프로그램을 게시했습니다.
john01dav

9
프로그램에 버그가없고 적절한 기능이 필요한 경우이 방법으로 많은 시간을 투자 할 것입니다. 예를 들어, 초기 빌드 실패 (std :: system ()은 const char *를 원함)를 수정 한 후 EOF에 무한 루프가 있음을 알 수 있습니다. 당신은 역사 / 읽기 지원, 탭 완성, 디렉토리를 변경하기 위해 일부 내장 / env vars / shell out / ... 등을 원할 수 있습니다. 기존 소프트웨어 (이 경우 gitsh와 같은)가 있다면 왜 사용하지 않습니까?
유목민 유형

1
@nomadictype 그것은 유효한 비판이지만 다른 소프트웨어를 배우는 것도 시간의 헌신입니다. 이 접근 방식의 장점은 작동하는 데 몇 분 밖에 걸리지 않으며 원하는대로 변경하거나 변경 하지 않고 정확하게 수행 할 있다는 것 입니다.
john01dav

2
readline, 줄 편집, 히스토리 지원, ls와 같은 간단한 명령을 실행할 수 없기 때문에 네 번의 키 입력보다 훨씬 많은 비용이 들기 때문에 비용을 절약 할 수 있습니다.
Lie Ryan

13

기본 사항의 경우 다음을 수행 할 수 있습니다.

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로 종료


2
괜찮은 생각이지만 두 가지 문제가 있습니다. 하나, 그 ;후의 일은 bash: syntax error near unexpected token ; '`둘째, eval부분은 취약한 경향이 있습니다. 예를 들어, status;cat /etc/passwd이 작은 껍질에 입력하면 어떻게되는지 생각해보십시오 . 무해한 예, 그러나 당신은 무슨 일이 일어날 수 있는지에 대한 아이디어를 얻습니다. 당신은 while IFS= read -r -p "git> " gitcmd; do [ "x$gitcmd" != "x" ] && git "$gitcmd";done이것을 간단하게 할 수 있습니다 . 이상적이지 않고 조금만 더
Sergiy Kolodyazhnyy 2016 년

@Abigail Funny :) 왜 그렇습니까? 쉘 자체가 가장 안전한 응용 프로그램이 아닙니다. 파일을 캐터링 하더라도 문제가 될 수 있습니다. 그러나 원래 내가 만든 요점 은 적어도 mysql 인터프리터가 쉘 명령을 실행하지 않고 최소한 시작 하지 system않거나 \!시작 하지 않는 것 입니다. 이 "repl"이 git명령 만 실행한다고 가정 할 경우 실제로는 그 이상을 허용합니다.
Sergiy Kolodyazhnyy 2016 년

@Abigail 나는 이것이 무엇을하는지 알고 있기 때문에 두려워하지 않습니다. 그렇지 않은 사람들은-하지 말아야 할 것을 깨뜨릴 수 있습니다. 다시 말하지만- eval 특히 사용자 제어 입력이 관련된 경우 명령 실행에 가장 적합하지 않습니다.
Sergiy Kolodyazhnyy 2018 년

이후 오타가 수정되었습니다 do. 감사! 다시 : 보안 : 이것은 분명히 별도의 응용 프로그램으로 배포하기위한 것이 아닙니다. .bash_profilegit 입력이 마음에 들지 않으면 그냥 넣으십시오 . 나는 그것이 "안전하지 않은"것에 대해 너무 걱정하지 않습니다. 이해가 안되는 물건을 bash에 붙여 넣으면 (이 oneliner 스크립트 포함) 나쁜 시간을 보낼 것입니다. 나는 간단하고 쓰기 쉽고 읽기 쉽고 개선하기 쉽기 때문에 이것을 좋아합니다.
Umur Kontacı 2016 년

2

Conemu와 함께 Windows 7을 사용할 때 개발 환경 시작 스크립트에 다음을 추가했습니다.

doskey g=git $*

이를 g통해을 입력하는 대신 명령을 사용할 수 있습니다 git. 마지막으로 Windows 10 및 Conemu로 시도했지만 작동하지 않았습니다. 버그가 있다고 생각하지만 시도해 볼 가치가 있습니다.


2

대괄호 편집기를 사용하면 코드 및 git 명령을 쉽게 사용할 수 있으며 많은 기능이 있습니다.

여기에 이미지 설명을 입력하십시오

오른쪽 상단에서 두 번째 쌍안 아이콘이 확장을 설치하는 데 사용됩니다.

여기에 이미지 설명을 입력하십시오

brackets git위 이미지와 같은 확장 프로그램을 검색 하여 설치하십시오.

여기에 이미지 설명을 입력하십시오

다시 오른쪽 상단에 네 번째 아이콘이 표시되므로 위 이미지와 같은 변경 사항을 클릭하여 확인하십시오.

대괄호를 설치하려면 다음 명령을 사용하십시오.

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

자세한 내용 은 Ubuntupit의 Ubuntu 및 Linux Mint브래킷 코드 편집기를 설치하는 방법을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.