ฉันใช้ 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 --amendgit commit
git commit -eคุณสามารถบรรลุผลเดียวกันนี้ได้โดยไม่ต้องแก้ไขโดยเพียงแค่ใช้
git commitและมันจะเปิดตัวแก้ไขด้วยแม่แบบข้อความกระทำ
หากคุณใช้ Bash ให้กดC-x C-e( Ctrl+ x Ctrl+e ) แล้วคำสั่งนั้นจะเปิดคำสั่งปัจจุบันในเครื่องมือแก้ไขที่คุณต้องการ
คุณสามารถเปลี่ยนแก้ไขที่แนะนำโดยการปรับเปลี่ยนและVISUALEDITOR
นั่นคือสิ่งที่ฉันมีใน.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