คุณยอมรับรหัสเป็นผู้ใช้อื่นได้อย่างไร?


112

ฉันต้องการที่จะทำสิ่งนี้สำหรับสคริปต์ โดยพื้นฐานแล้วฉันกำลังสร้างประวัติเวอร์ชันทั้งหมดของโค้ดบางส่วนใน Git ซึ่งปัจจุบันใช้ระบบควบคุมเวอร์ชันอื่น ฉันต้องการสคริปต์เพื่อให้สามารถเพิ่มคอมมิตลงใน Git ได้ในขณะที่ยังคงรักษาผู้เขียนต้นฉบับของคอมมิต (และวันที่) ไว้

สมมติว่าฉันรู้จักผู้เขียนคอมมิตและวันที่ / เวลาที่ทำการเปลี่ยนแปลงมีคำสั่ง Git ที่อนุญาตให้ฉันทำสิ่งนี้หรือไม่ ฉันสมมติว่ามีเพราะ git-p4 ทำสิ่งที่คล้ายกัน ฉันแค่ขอวิธีที่ดีที่สุดที่จะทำ


1
คุณลองใช้การนำเข้าอย่างรวดเร็วหรือไม่?
ทางเลือกใน

ฉันยอมรับว่าการนำเข้าอย่างรวดเร็วน่าจะเป็นวิธีที่ดีที่สุด คุณสามารถใช้คอมมิตคอมมิต (หรือมากกว่านั้นอย่างถูกต้องในระบบประปาพื้นฐาน: แฮชอ็อบเจ็กต์ , ดัชนีการอัปเดต , การเขียนทรี , คอมมิต - ทรี , อัพเดตอ้างอิงฯลฯ ) แต่การนำเข้าอย่างรวดเร็วจะเร็วกว่า
Chris Johnsen

ฉันคิดถึงการนำเข้าอย่างรวดเร็ว แต่เนื่องจากฉันค่อนข้างเป็นมือใหม่ของ git ฉันจึงตัดสินใจใช้คำสั่งพื้นฐาน บอกตามตรงว่าฉันไม่เข้าใจวิธีการนำเข้าที่รวดเร็วดังนั้นฉันจึงลังเลเล็กน้อยที่จะใช้มันจนกว่าฉันจะเข้าใจดีขึ้น ใช่มันจะช้าลงมากเมื่อใช้คอมมิต แต่อย่างน้อยฉันก็จะรู้ว่าจะเกิดอะไรขึ้น - โดยเฉพาะอย่างยิ่งในขณะที่ดีบั๊ก
Carl

1
คอมมิต --author = "ชื่อ <name@example.com>" -a -m "คอมมิตข้อความ"
Masih

คำตอบ:


148

ตรวจสอบ--authorตัวเลือกสำหรับgit commit:

จากหน้าคน :

--author=<author>

แทนที่ผู้เขียนคอมมิต ระบุผู้เขียนที่ชัดเจนโดยใช้A U Thor <author@example.com>รูปแบบมาตรฐาน มิฉะนั้น <author>จะถือว่าเป็นรูปแบบและใช้เพื่อค้นหาการกระทำที่มีอยู่โดยผู้เขียนนั้น (เช่นrev-list --all -i --author=<author>); จากนั้นผู้เขียนคอมมิตจะถูกคัดลอกจากคอมมิตแรกที่พบ


18
นอกจากนี้--dateตัวเลือกในการลบล้างวันที่
Chris Johnsen

คุณช่วยยกตัวอย่างที่เฉพาะเจาะจงได้ไหมทุกอย่างที่ฉันพยายาม
studgeek

@ Tim Henigan: ดูเหมือนว่าตอนนี้เอกสารจะโฮสต์อยู่บนGithubดังนั้นลิงค์ของman page ที่คุณโพสต์ไว้จึงตายไปแล้ว คุณสามารถยืนยันได้หรือไม่ว่าหน้าใหม่เป็นสิ่งเดียวกัน (ในกรณีที่มีคำตอบอื่นที่ต้องอัปเดตลิงก์)
R0MANARMY

@ R0MANARMY: ฉันอัปเดต URL หน้า GitHub ถูกต้อง ฉันอัปเดตลิงก์ของฉันเนื่องจากหน้าคนไม่ได้โฮสต์บน kernel.org อีกต่อไป ขอขอบคุณที่แจ้งให้เราทราบเกี่ยวกับการเปลี่ยนแปลง
Tim Henigan

1
นี่คือสิ่งที่ฉันใช้:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl

113

เพียงเพื่อเพิ่มนี้: ใน--authorตัวเลือกที่กล่าวถึงในคำตอบที่ได้รับการยอมรับเพียง แต่จะแทนที่ผู้เขียนไม่committerข้อมูลของการกระทำ

นั่นเป็นพฤติกรรมที่ถูกต้องในกรณีส่วนใหญ่ แต่ถ้าด้วยเหตุผลบางประการคุณจำเป็นต้องแทนที่ข้อมูลคอมมิตเตอร์ด้วยตนเองด้วยให้ใช้ตัวแปรGIT_COMMITTER_NAMEและGIT_COMMITTER_EMAILสภาพแวดล้อม (มีGIT_COMMITTER_DATEเช่นกัน) ดูGit-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"

สิ่งนี้จะทำให้การคอมมิตดูเหมือนว่าถูกสร้างและกระทำโดยผู้ใช้ที่ระบุ


16
... และเพื่อดูความแตกต่าง:git log --pretty=fuller
bluenote10

2
สมบูรณ์ นี่คือสิ่งที่ฉันต้องการและฉันไม่เคยพบหน้า man git internalals
ksp

3

แก้ไขไฟล์ ~ / .gitconfig ของคุณและต่อท้ายนามแฝงใหม่ซึ่งคุณสามารถปรับแต่งผู้ใช้และอีเมลที่ไม่ใช่ค่าเริ่มต้นได้

[user]
  name = My Name
  email = default@email.com

[alias]
  commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
  commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
  commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit

ทดสอบ

git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.