ฉันใช้ Git จากบรรทัดคำสั่งและกำลังพยายามเพิ่มตัวแบ่งบรรทัดในข้อความยืนยัน (ใช้git commit -m ""
) โดยไม่ต้องเข้าไปในกลุ่ม
เป็นไปได้ไหม
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
vim
ฉันใช้ Git จากบรรทัดคำสั่งและกำลังพยายามเพิ่มตัวแบ่งบรรทัดในข้อความยืนยัน (ใช้git commit -m ""
) โดยไม่ต้องเข้าไปในกลุ่ม
เป็นไปได้ไหม
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
vim
คำตอบ:
แน่นอนว่ามันทำอย่างไรขึ้นอยู่กับเปลือกของคุณ ใน Bash คุณสามารถใช้เครื่องหมายคำพูดเดี่ยวรอบข้อความและปล่อยให้เครื่องหมายคำพูดเปิดไว้ซึ่งจะทำให้ Bash พรอมต์สำหรับบรรทัดอื่นจนกว่าคุณจะปิดคำพูด แบบนี้:
git commit -m 'Message
goes
here'
หรือคุณสามารถใช้ "เอกสารที่นี่" (หรือที่เรียกว่า heredoc):
git commit -F- <<EOF
Message
goes
here
EOF
git
คำสั่งสามารถอ่านข้อความจาก stdin และ-F
ตัวเลือกที่ช่วยให้ชื่อไฟล์เพื่ออ่านข้อความจาก
หากคุณต้องการพูดบรรทัดแรกและบรรทัดเนื้อหาคุณสามารถใช้:
git commit -m "My head line" -m "My content line."
โปรดทราบว่าสิ่งนี้สร้างย่อหน้าแยกกัน - ไม่ใช่บรรทัด ดังนั้นจะมีบรรทัดว่างระหว่างแต่ละสอง-m
บรรทัดเช่น:
My head line
My content line.
-m
สำหรับแต่ละบรรทัด ดี!
man git commit
: -m <msg>, --message = <msg> ใช้ <msg> ที่ให้ไว้เป็นข้อความคอมมิท หากมีการกำหนดตัวเลือกหลายเมตรค่าของพวกเขาจะถูกตัดแบ่งเป็นย่อหน้าแยกกัน
-m
บรรทัด
การใช้ Git จากบรรทัดคำสั่งด้วย Bash คุณสามารถทำสิ่งต่อไปนี้:
git commit -m "this is
> a line
> with new lines
> maybe"
เพียงพิมพ์และกดEnterเมื่อคุณต้องการขึ้นบรรทัดใหม่สัญลักษณ์ ">" หมายความว่าคุณได้กดEnterแล้วและมีบรรทัดใหม่ คำตอบอื่น ๆ ก็ใช้ได้เช่นกัน
คุณควรจะสามารถใช้
git commit -m $'first line\nsecond line'
จากคู่มือ Bash :
คำของฟอร์ม ' string ' ได้รับการปฏิบัติเป็นพิเศษ คำนี้ขยายออกเป็น สตริงด้วยอักขระเครื่องหมายทับขวาทับกลับแทนที่ตามที่ระบุโดยมาตรฐาน ANSI C
ซึ่งรวมถึงการสนับสนุนการขึ้นบรรทัดใหม่ตามที่แสดงด้านบนรวมทั้งรหัส hex และ Unicode และอื่น ๆ ไปที่ส่วนที่เชื่อมโยงเพื่อดูรายการของอักขระเครื่องหมายแบคสแลช
echo $'one\ntwo'
?
git commit -m "first line"$'\n'"second line"
จะทำงาน: $'string'
ทราบเพียงคุณจำเป็นต้องปิดสตริงก่อนหน้านี้ก่อนที่จะเริ่มของคุณ
การเพิ่มตัวแบ่งบรรทัดใน Git ของคุณ
ลองทำสิ่งต่อไปนี้เพื่อสร้างข้อความการมอบหมายหลายบรรทัด:
git commit -m "Demonstrate multi-line commit message in Powershell" -m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
จากนั้นตรวจสอบสิ่งที่คุณทำ:
git log -1
คุณควรท้ายด้วยสิ่งนี้:
ภาพหน้าจอมาจากตัวอย่างที่ฉันตั้งค่าโดยใช้ PowerShell กับ Poshgit
ทำสิ่งที่ชอบ
git commit -m"test\ntest"
ใช้งานไม่ได้ แต่สิ่งที่ชอบ
git commit -m"$(echo -e "test\ntest")"
ใช้งานได้ แต่มันก็ไม่ได้สวยมาก คุณตั้งค่าgit-commitlb
คำสั่งในสิ่งที่คุณPATH
ทำสิ่งนี้:
#!/bin/bash
message=$1
git commit -m"$(echo -e "$message")"
และใช้มันเช่นนี้
git commitlb "line1\nline2\nline3"
คำเตือนฉันมีความรู้สึกว่าการประชุมทั่วไปคือการมีบรรทัดสรุปเป็นบรรทัดแรกแล้วแบ่งสองบรรทัดแล้วข้อความขยายในข้อความการกระทำดังนั้นการทำสิ่งนี้จะทำลายการประชุมนั้น แน่นอนคุณสามารถทำได้:
git commitlb "line1\n\nline2\nline3"
จากเอกสาร Git :
-m <msg>
--message = <msg>
ใช้ <msg> ที่กำหนดเป็นข้อความการส่ง หาก-m
มีการกำหนดหลายตัวเลือกค่าเหล่านั้นจะถูกต่อกันเป็นย่อหน้าแยกกัน
ดังนั้นหากคุณกำลังมองหาการรวมกลุ่มหลายข้อความที่ยอมรับได้สิ่งนี้ควรทำงาน:
git commit -m "commit message1" -m "commit message2"
ฉันหวังว่านี่จะไม่นำไปไกลจากคำถามที่โพสต์ แต่ตั้งค่าตัวแก้ไขเริ่มต้นแล้วใช้
git commit -e
อาจจะสะดวกสบายมากขึ้น
-e
และมันจะยังคงเปิดตัวแก้ไข
ไม่จำเป็นต้องมีอะไรซับซ้อน หลังจากที่บรรทัดถัดไปเป็นอากาศโดยการกด-m "text...
Enterเมื่อEnterกด>
จะปรากฏขึ้น เมื่อเสร็จแล้วให้"
กดและกดEnter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42 (HEAD -> test2)
Author: ************** <*********@gmail.com>
Date: Mon Oct 9 13:30:26 2017 +0200
Another way of demonstrating multicommit messages:
This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
ฉันใช้ zsh บน Mac และฉันสามารถโพสต์ข้อความส่งหลายบรรทัดภายในเครื่องหมายคำพูดคู่ (") ได้โดยทั่วไปฉันพิมพ์และกดส่งกลับสำหรับบรรทัดใหม่ แต่ข้อความไม่ได้ถูกส่งไปยัง Git จนกว่าฉันจะปิดคำพูดและกลับ .
ใน Bash / Zsh คุณสามารถใช้ตัวแบ่งบรรทัดตามตัวอักษรในเครื่องหมายคำพูด:
git commit -m 'Multi-line
commit
message'
การอ้างอิง ANSI-Cยังทำงานใน Bash / Zsh ด้วย:
git commit -m $'Multi-line\ncommit\nmessage'
นอกจากนี้คุณยังสามารถสั่งให้ Git ใช้เครื่องมือแก้ไขที่คุณเลือกเพื่อแก้ไขข้อความยืนยัน จากเอกสารที่ใช้คอมไพล์ :
ตัวแก้ไขที่ใช้เพื่อแก้ไขข้อความบันทึกการกระทำจะถูกเลือกจาก
GIT_EDITOR
ตัวแปรสภาพแวดล้อมตัวแปรการcore.editor
กำหนดค่าตัวแปรVISUAL
สภาพแวดล้อมหรือEDITOR
ตัวแปรสภาพแวดล้อม (ตามลำดับ) ดูgit-varสำหรับรายละเอียด
ส่วนตัวผมพบว่ามันง่ายที่สุดในการปรับเปลี่ยนการกระทำข้อความหลังจากที่ความจริงในvi
(หรือสิ่งที่แก้ไขคอมไพล์ที่คุณเลือกเป็น) มากกว่าในบรรทัดคำสั่งโดยการทำทันทีหลังจากgit commit --amend
git commit
git commit -e
คุณสามารถบรรลุผลเดียวกันนี้ได้โดยไม่ต้องแก้ไขโดยเพียงแค่ใช้
git commit
และมันจะเปิดตัวแก้ไขด้วยแม่แบบข้อความกระทำ
หากคุณใช้ Bash ให้กดC-x C-e
( Ctrl+ x Ctrl+e ) แล้วคำสั่งนั้นจะเปิดคำสั่งปัจจุบันในเครื่องมือแก้ไขที่คุณต้องการ
คุณสามารถเปลี่ยนแก้ไขที่แนะนำโดยการปรับเปลี่ยนและVISUAL
EDITOR
นั่นคือสิ่งที่ฉันมีใน.bashrc
:
export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'
นี่คือรายการวิธีแก้ปัญหาที่ล้มเหลวใน Windows พร้อมเชลล์ cmd.exe มาตรฐาน (เพื่อช่วยคุณประหยัดเวลาในการทดลองและข้อผิดพลาด!):
git commit -m 'Hello
Enter ไม่ทำงาน: มันจะไม่ขอขึ้นบรรทัดใหม่
git commit -m "Hello
Enter idem
git commit -m "Hello^
Enter idem
git commit -m 'Hello^
Enter World'
ดูเหมือนว่าจะทำงานเพราะถามว่า"เพิ่มเติมหรือไม่"และอนุญาตให้เขียนบรรทัดใหม่ แต่ในที่สุดเมื่อทำgit log
คุณจะเห็นว่ามันยังคงเป็นข้อความบรรทัดเดียว ...
TL; DR: แม้ว่าใน Windows การแยกวิเคราะห์บรรทัดคำสั่งจะใช้ได้ผล แตกต่างกันและ^
อนุญาตให้ป้อนหลายก็ไม่ได้ช่วยอะไร
ในที่สุดgit commit -e
อาจเป็นตัวเลือกที่ดีที่สุด
น่าเศร้าที่คอมไพล์ดูเหมือนจะไม่อนุญาตให้มีอักขระขึ้นบรรทัดใหม่ในข้อความ มีวิธีแก้ปัญหาที่สมเหตุสมผลอยู่ด้านบน แต่เมื่อเขียนสคริปต์สิ่งเหล่านี้น่ารำคาญ ที่นี่เอกสารยังใช้งานได้ แต่อาจเป็นเรื่องที่น่ารำคาญนิดหน่อยที่จะจัดการ
นี่คือสิ่งที่ฉันทำ:
git commit \
--message "Subject" \
--message "First line$(echo)Second line$(echo)Third Line"
แม้ว่าสิ่งนี้จะยังคงน่าเกลียด แต่ก็อนุญาตให้ 'หนึ่ง liners' ซึ่งอาจมีประโยชน์ยัง โดยปกติสตริงจะเป็นตัวแปรหรือรวมกับตัวแปรค่าความอัปลักษณ์อาจถูกเก็บไว้ให้น้อยที่สุด
ฉันไม่เห็นใครพูดถึงว่าถ้าคุณไม่ได้ให้ข้อความมันจะเปิดนาโนให้คุณ (อย่างน้อยใน Linux) ที่คุณสามารถเขียนหลายบรรทัด ...
จำเป็นเท่านั้น:
git commit