ฉันจะหลีกเลี่ยงการพิมพ์“ git” ที่จุดเริ่มต้นของทุกคำสั่ง Git ได้อย่างไร


190

ฉันสงสัยว่ามีวิธีหลีกเลี่ยงการพิมพ์คำgitที่จุดเริ่มต้นของทุกคำสั่ง Git หรือไม่

มันจะดีถ้ามีวิธีที่จะใช้เป็นgitคำสั่งเพียงครั้งเดียวในการเริ่มต้นหลังจากที่เปิดพร้อมรับคำสั่งจะได้รับในโหมด "Git"

ตัวอย่างเช่น:

git>

หลังจากนั้นทุกคำสั่งที่เราพิมพ์จะถูกตีความเป็นค่าเริ่มต้นเป็นคำสั่ง Git

ในทำนองเดียวกันกับวิธีที่เราใช้เปลือก MySQL เพื่อเขียนคำสั่งฐานข้อมูล:

mysql>

การทำเช่นนี้จะช่วยให้ฉันไม่ต้องพิมพ์gitหลายร้อยครั้งต่อวัน

หมายเหตุ:ฉันกำลังใช้git-bashบน Windows


87
สำหรับผู้ที่โหวตให้ปิดตามเนื้อหาที่ไม่ใช่หัวข้อโปรดอ่านข้อความที่คุณคลิก: "คำถามเกี่ยวกับฮาร์ดแวร์คอมพิวเตอร์ทั่วไปและซอฟต์แวร์ไม่เป็นหัวข้อสำหรับ Stack Overflow เว้นแต่ว่าเกี่ยวข้องกับเครื่องมือที่ใช้สำหรับการเขียนโปรแกรมโดยตรงเป็นหลัก . " Git เป็นเครื่องมือที่ใช้โดยโปรแกรมเมอร์ ตามหลักฐานโดยความจริงที่ว่ามันมีแท็กของตัวเองในเว็บไซต์นี้
JBentley

5
ทำไมคุณพิมพ์ "git" มาก? IDE ของคุณควรมีการรวม vcs อันทรงพลังไว้ในปุ่มกด คุณค่อนข้างจะพิมพ์ "git pull" วันละ 50 ครั้งหรือ ctrl-t ... หยุดการเป็นนักรบบรรทัดคำสั่งเมื่อคุณไม่จำเป็นต้อง;)
24425

8
@vikingsteve ในทางปฏิบัติความช่วยเหลือและภูมิปัญญาคอมไพล์ทั้งหมดจะได้รับในแง่ของบรรทัดคำสั่ง
Ed Randall

6
@vikingsteve ฉันพิมพ์มากเพราะเร็วขึ้น ฉันพิมพ์ ~ 100wpm มากขึ้นถ้าฉันคุ้นเคยกับการกดปุ่มเหมือนฉันกับ Git; เปรียบเทียบกับการคลิกบน GUI มันง่ายกว่ามาก IDE ที่คุณชื่นชอบอาจมีแป้นพิมพ์ลัด นั่นเป็นสิ่งที่ดีสำหรับคุณ ทำไมฉันต้องเสียเวลาเรียนรู้เมื่อ <M-Tab> git blah <CR> มีอยู่ในความทรงจำของกล้ามเนื้ออยู่แล้ว?
คดีฟ้องร้องกองทุนโมนิก้า

3
ควรมี "คำถามนี้ควรปิดเพราะผู้ใช้ถามคำถามที่ไม่สมเหตุสมผล" - เหมือนกับที่ฉันได้รับสิ่งที่คุณถาม แต่เชลล์จะรู้ได้อย่างไรว่าคุณต้องการป้อน "ไม่เริ่มต้นด้วย คำสั่ง git "ถ้ามีวิธีการทำเช่นนี้
user3728501

คำตอบ:


190

คุณอาจต้องการที่จะลองgitsh จาก readme ของพวกเขา

gitshโปรแกรมเป็นเปลือกโต้ตอบสำหรับคอมไพล์ จากภายในgitshคุณสามารถออกคำสั่ง git ใด ๆ แม้จะใช้นามแฝงในท้องถิ่นและการกำหนดค่า

  • คำสั่ง Git มักจะมาเป็นกลุ่ม หลีกเลี่ยงการพิมพ์gitซ้ำแล้วซ้ำอีกโดยเรียกใช้ในเชลล์ git เฉพาะ:
sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$

หรือดูที่โครงการอื่น ๆ ที่ลิงก์:

  • git-sh - เปลือกทุบตีที่กำหนดเองด้วยพรอมต์นามแฝงและความสมบูรณ์
  • gitsh - เชลล์ Git ง่าย ๆ ที่เขียนด้วย Perl
  • repl - ห่อโปรแกรมใด ๆ ด้วยคำสั่งย่อยใน REPL

หมายเหตุ: ยังไม่ได้ใช้สิ่งนี้ด้วยตนเอง


22
คำราม ... repl(1)ไม่ใช่ REPL มันไม่ได้วิเคราะห์หรือพิมพ์อะไรเลย มันรันโปรแกรม
Kevin

11
@Kevin มันจะอ่านคำขอของผู้ใช้ประเมินคำขอของผู้ใช้ (โดยเรียกใช้โปรแกรม) และพิมพ์ผลลัพธ์ของโปรแกรม นี่คือสิ่งที่เปลือกหอยทำ
Yakk - Adam Nevraumont

2
@ Yakk-AdamNevraumont: ไม่แน่นอนที่สุดไม่ได้ "พิมพ์ผลลัพธ์ของโปรแกรม" มัน hooks stdout โปรแกรมขึ้นไปยังสถานีและจากนั้นโปรแกรมจะพิมพ์เอาท์พุทของตัวเอง - ยกเว้น stdout โปรแกรมติดยาเสพติดแล้วขึ้นไปยังสถานี (สืบทอดมาโดยอัตโนมัติมากกว่าfork()/ exec()) ดังนั้นrepl(1)จะไม่ได้ทำที่
Kevin

6
@ เควินฉันเข้าใจความรู้สึกของคุณอย่างไรก็ตามคำจำกัดความที่เข้มงวดของ REPL จะแยกล่าม“ REPL” ส่วนใหญ่เป็นภาษาต่างๆ เฉพาะในภาษาที่ใช้งานได้จริงเท่านั้นที่คุณสามารถมั่นใจได้ว่าการประเมินผลไม่มีผลข้างเคียง แต่แม้ใน Haskell GHCi“ REPL” โดยค่าเริ่มต้นจะยอมรับ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

2
นี่จะสมบูรณ์ถ้าทำงานกับ readline แต่น่าเสียดายที่มันไม่ได้ (ไม่น่าแปลกใจเนื่องจากนี่เป็นการแฮกรอบ ๆ-neธงของ Perl อย่างเคร่งครัด)
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 ทุกคำ
ทิม Biegeleisen

22
เฉพาะที่ใช้บ่อยที่สุด ฉันหมายความว่าอย่างไรคุณมักจะใช้git hash-objectหรือgit interpret-trailers? ฉันแค่เสนอสิ่งนี้เป็นทางเลือกเพราะเท่าที่ฉันรู้คำถามที่ถามไม่ได้มีอยู่จริง
โทมัส

15
นอกจากนี้ciสำหรับcommitฉันยังใช้นามแฝงของเชลล์gสำหรับgitสิ่งนี้ลดการพิมพ์ส่วนใหญ่และให้ฉันอยู่ในเชลล์ที่ต้องการ
rkta

32

ฉันเป็นแฟนตัวยงของการใช้ชื่อแทนใน ~ / .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'

3
กระทำที่ไหน: P
qwr

14
ฉันไม่ได้รวมcommitหรือpushตั้งแต่ฉันต้องการไม่กี่วินาทีพิเศษ (ในขณะที่พิมพ์) เพื่อให้แน่ใจว่าฉันจะไม่ทำลายบางสิ่งบางอย่าง
JacobIRR

3
มุ่งมั่นและผลักดันไม่ควรทำลายสิ่งใดนอกจากว่าคุณใช้กำลังกด แต่ฉันพยายามใช้สถานะ git ก่อน
qwr

1
นี่คือสิ่งที่ฉันได้ทำไปเช่นกัน +1 แม้ว่าฉันอยากจะลอง gitsh ตามคำตอบอื่น ๆ ที่กล่าวถึง
CoffeeTableEspresso

1
@CoffeeTableEspresso ฉันเคารพในความจริงที่ว่าคุณรับทราบว่าการกดแป้นบางครั้งเป็นความแตกต่างระหว่างการบันทึกการอัปเดตและการทำลายโปรเจ็กต์
LogicalBranch

31

ใช้โปรแกรมแก้ไขของคุณ

พิมพ์คำสั่งเช่นcommitจากโปรแกรมแก้ไขที่คุณโปรดปรานเช่นvs codeและมีประสิทธิภาพมากขึ้นด้วย git:

ป้อนคำอธิบายรูปภาพที่นี่

หรือพิมพ์gitเพื่อรับคำสั่งทั้งหมด:

ป้อนคำอธิบายรูปภาพที่นี่


13
ฉันประหลาดใจกับการลงคะแนนเสียงทั้งหมดนี้ นี่ไม่ใช่คำตอบที่น่ากลัวสำหรับผู้ที่ใช้ IDEs ที่สนับสนุนคุณสมบัติเหล่านี้
เกลนเพียร์ซ

4
ฉันคิดว่าผู้คนลงคะแนนเพราะทุกคนไม่ได้ใช้ / ชอบ VS-Code ฉันคิดว่ามันเป็นคำตอบที่ดีดังนั้น +1 จากฉัน
LogicalBranch

4
@LogicalBranch ผู้คนมักใช้ git จาก command line และฉันก็ทราบดีว่า แต่มีการสนับสนุน git ในตัวแก้ไขบางตัวและมันก็คุ้มค่าที่จะลอง
prosti

1
ฉันไม่ชอบคำตอบนี้เพราะทุกคนไม่ใช้รหัส VS (โดยส่วนตัวฉันไม่ชอบ) แต่จะไม่ลดระดับลงเพราะนี่เป็นวิธีแก้ปัญหาที่ดีสำหรับ ppl ที่ใช้งาน
CoffeeTableEspresso

1
@CoffeeTableEspresso หากคุณใช้ประเสริฐมีปลั๊กอินชื่อgitsavvyและอื่น ๆ ... เกือบทุกบรรณาธิการในปัจจุบันมีการสนับสนุน git นี่คือจุดของคำตอบที่คุณสามารถอ่าน "ใช้การแก้ไขของคุณ"
prosti

26

เพื่อนของฉันสร้างสคริปต์ทุบตีเล็ก ๆ ที่ทำสิ่งนี้ให้สำเร็จ มันเรียกว่า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
ตกลงฉันได้กล่าวแล้วว่าในคำตอบของ Umur แต่การใช้evalในต้นฉบับสคริปต์ไม่ได้เป็นความคิดที่ดีที่สุด บอกเพื่อนของคุณให้ใช้while IFS= read -r -p "git> " gitcmd; do [ "x$gitcmd" != "x" ] && git "$gitcmd";doneแทน
Sergiy Kolodyazhnyy

23

นี่คือวิธีอื่น มันไม่ได้เป็นสิ่งที่ถูกถามมากนัก แต่ฉันเคยใช้มาซักพักแล้วมันก็ค่อนข้างดี เพิ่มบรรทัดต่อไปนี้ใน~/.bashrc:

complete -E -W git

ตอนนี้กด Tab ที่พรอมต์ Bash ที่ว่างเปล่าจะพิมพ์ "git"


5
โปรดทราบว่าหากคุณใช้เชลล์อื่นคุณจะต้องใส่มันลงในไฟล์ที่เหมาะสม ตัวอย่างเช่นสำหรับ zsh คุณจะใส่ไว้ใน~/zshrcสำหรับ tcsh คุณจะใส่ไว้ใน~/tcshrcฯลฯ
TheOnlyMrCat

20

ฉันรู้ว่านี้เป็นคำตอบที่ดึกมาก แต่คำถามนี้จริงๆหลงโน้ตกับผมเพราะผมได้รับการจัดการกับความทุกข์ทรมานจากชนิดของการทำซ้ำนี้ค่อนข้างขณะนี้

ฉันไม่แน่ใจเกี่ยวกับคุณ แต่ฉันไม่ต้องการ (ฉันทำซ้ำไม่ได้ ) ต้องการสร้างนามแฝงสำหรับทุกgitคำสั่งดังนั้นแทนที่จะเขียนสคริปต์ไพธ อนชื่อ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
  • สคริปต์บันทึกคำสั่งที่ถูกเรียกใช้งานไปยังไฟล์ที่เรียกว่า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 หลังจากกดสตริงค้นหาเพื่อค้นหาซ้ำอีกครั้งด้วยสตริงเดียวกัน

คุณต้องพิมพ์คำสั่งเพียงครั้งเดียวจากนั้นคุณสามารถเรียกคืนคำสั่งนั้นได้จากสตริงย่อยใด ๆ ของคำสั่ง ในกรณีส่วนใหญ่คุณสามารถเรียกคืนคำสั่งที่ยาวมากและตัวแปรที่หลากหลายได้ด้วยตัวอักษรการค้นหาที่อยู่ในตำแหน่งที่เหมาะสม ไม่จำเป็นต้องมีการกำหนดค่าล่วงหน้าอื่นใดนอกจากการใช้เชลล์ของคุณและมันปรับตัวเองให้เข้ากับวิธีที่คุณใช้เชลล์เพียงพิมพ์คำสั่งเต็มครั้งเดียวและคำสั่งจะถูกเพิ่มลงในประวัติคำสั่งของคุณโดยอัตโนมัติ

  • 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 library (และมีจำนวนมาก) เช่น Python shell, IPython, mysql shell, psql shell, irb (ruby) เป็นต้น


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;
}

โปรดทราบว่าฉันเพิ่งเขียนจากหน่วยความจำและฉันไม่ได้ตรวจสอบด้วยคอมไพเลอร์ อาจมีข้อผิดพลาดทางไวยากรณ์เล็กน้อย


แค่ความคิดของฉัน ทุกคนใน Stack Overflow ควรสามารถเขียนโค้ดโปรแกรมด้วยตนเองได้ ภาษาการเขียนโปรแกรมไม่สำคัญ
โทมัสเวลเลอร์

@ThomasWeller ฉันเห็นด้วยอย่างแน่นอน ฉันโพสต์โปรแกรมเพื่อแสดงสิ่งที่ฉันกำลังพูดอย่างแม่นยำไม่ใช่เพราะมันเป็นโปรแกรมที่ยากต่อการเขียน
john01dav

9
คุณจะลงทุนเวลามากกับวิธีนี้หากคุณต้องการให้โปรแกรมปราศจากข้อผิดพลาดและมีคุณสมบัติที่เหมาะสม ตัวอย่างเช่นหลังจากแก้ไขความล้มเหลวในการสร้างครั้งแรก (std :: system () ต้องการ const char *) คุณจะสังเกตเห็นว่ามีวงวนไม่สิ้นสุดบน EOF คุณอาจต้องการการสนับสนุนประวัติ / readline, การเติมแท็บ, บิวด์อินบางตัวเพื่อเปลี่ยนไดเร็กตอรี่ / set env vars / shell out / ... , ฯลฯ . หากมีซอฟต์แวร์ที่มีอยู่ (เช่น gitsh ในกรณีนี้), ทำไมไม่ใช้?
เร่ร่อนประเภท

1
@nomadictype นั่นเป็นคำวิจารณ์ที่ถูกต้อง แต่การเรียนรู้ซอฟต์แวร์อื่นก็เป็นเรื่องที่ต้องใช้เวลาด้วยเช่นกัน ข้อดีด้วยวิธีการนี้ว่ามีเพียงไม่กี่นาทีมีความจำเป็นที่จะได้รับมันทำงานและ THST มันจะทำว่าสิ่งที่คุณคาดหวังหรือต้องการ (มีการเปลี่ยนแปลง)
john01dav

2
การสูญเสีย readline การแก้ไขบรรทัดการสนับสนุนประวัติความสามารถในการเรียกใช้คำสั่งง่าย ๆ เช่น ls ฯลฯ จะทำให้คุณเสียค่าใช้จ่ายมากกว่าการกดแป้นสี่ครั้งหรือมากกว่าดังนั้นคุณจึงประหยัดด้วยสิ่งนี้
โกหกที่

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แน่นอนว่านี่ไม่ใช่การพิสูจน์หัวข้อย่อย แต่ 1 - มันง่ายกว่าและ 2 - หลีกเลี่ยงการดำเนินการคำสั่งที่ไม่คอมไพล์ ไม่เหมาะเลยดีกว่านิดหน่อย
Sergiy Kolodyazhnyy

@Abigail Funny :) ทำไมใช่ตัวมันเองไม่ใช่แอปพลิเคชันที่ปลอดภัยที่สุด แม้แต่การกำหนดไฟล์ก็อาจเป็นปัญหาได้ แต่จุดที่ผมทำมา แต่เดิมคือการที่เราไม่เห็นล่าม MySQL รันคำสั่งเชลล์ไม่ได้โดยไม่มีsystemหรือ\!ที่จุดเริ่มต้นอย่างน้อย โดยที่สมมติฐานอาจเป็นได้ว่าgitคำสั่ง"repl" นี้เรียกใช้งานคำสั่งเท่านั้นจริง ๆ แล้วมันอนุญาตให้มากกว่านั้น
Sergiy Kolodyazhnyy

@Abigail ฉันไม่กลัวเพราะฉันรู้ว่าสิ่งนี้ทำ คนอื่น ๆ ที่ไม่ทำ - อาจจะทำสิ่งที่ไม่ควรทำ และอีกครั้ง - eval ไม่ใช่ความคิดที่ดีที่สุดสำหรับการเรียกใช้คำสั่งโดยเฉพาะอย่างยิ่งเมื่อมีการควบคุมอินพุตของผู้ใช้
Sergiy Kolodyazhnyy

doคงพิมพ์ผิดหลังจากที่ ขอบคุณ! เรื่องความปลอดภัย: สิ่งนี้ไม่ได้หมายถึงการแจกจ่ายเป็นแอปพลิเคชันแยกต่างหาก เพียงใส่ของคุณ.bash_profileถ้าคุณไม่ชอบพิมพ์คอมไพล์ ฉันไม่ได้กังวลเกินไปกับการเป็น "ไม่ปลอดภัย" หากคุณวางสิ่งต่าง ๆ ลงใน bash ที่คุณไม่เข้าใจ (รวมถึงสคริปต์ oneliner นี้) คุณจะมีเวลาที่ไม่ดี ฉันชอบสิ่งนี้เพราะมันง่ายเขียนและอ่านง่ายและง่ายต่อการปรับปรุง
Umur Kontacı

2

เมื่อฉันใช้ Windows 7 กับ Conemu ฉันได้เพิ่มสิ่งต่อไปนี้ลงในสคริปต์เริ่มต้นสภาพแวดล้อม dev:

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

สำหรับข้อมูลเพิ่มเติมคุณสามารถอ่าน: วิธีการติดตั้งวงเล็บแก้ไขรหัสใน Ubuntu และลินุกซ์มิ้นท์ในUbuntupit

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.