Git เป็นระบบควบคุมเวอร์ชันแจกจ่ายดังนั้นคุณต้องกำหนดความหมายของ "วันที่พุช" อย่างรอบคอบ ตัวอย่างเช่นสมมติว่าผู้ใช้ A ผลักคอมมิตบางส่วนไปยังที่เก็บของผู้ใช้ B บางจุดต่อมาผู้ใช้ B ดันคอมมิตเดียวกันนี้ไปยังที่เก็บที่สาม สนใจวันไหน
ฉันคาดเดาว่าคุณมีที่เก็บที่ใช้ร่วมกันและต้องการให้ผู้ใช้ของที่เก็บที่แบ่งใช้นั้นสามารถกำหนดได้ว่าจะมีการเผยแพร่บางสิ่งไปยังที่เก็บเมื่อใด หากเป็นเช่นนั้นคุณจะต้องรวบรวมข้อมูลนั้นในที่เก็บที่ใช้ร่วมกัน
ข่าวร้าย
น่าเสียดายที่ไม่มีวิธีต่อท้ายวันที่ในข้อความคอมมิต นั่นจะเปลี่ยนรหัสการคอมมิต (ซึ่งเป็นแฮช SHA1 ของเนื้อหา) ทำให้เกิดปัญหาทุกประเภท
ข่าวดี
โชคดีที่มี Git (ที่ค่อนข้างใหม่) คุณสมบัติที่เรียกว่าบันทึก คุณสมบัตินี้ช่วยให้คุณสามารถแนบข้อความที่กำหนดเองเพื่อกระทำซึ่งgit log
สามารถแสดงได้ สามารถแก้ไขและแชร์โน้ตกับผู้อื่นได้
คุณสามารถใช้คุณลักษณะบันทึกเพื่อแนบข้อความ "การคอมมิตนี้ได้รับเมื่อ [วันที่]" กับแต่ละคอมมิตตามที่ได้รับจากที่เก็บที่แบ่งใช้
ดูgit help notes
รายละเอียด
วิธีบันทึกวันที่
นี่คือแนวทางที่ฉันแนะนำ:
- แก้ไข
post-receive
hook บนที่เก็บที่แบ่งใช้ของคุณเพื่อเดินแต่ละคอมมิตที่เข้าถึงได้ใหม่สำหรับการอ้างอิงที่อัพเดต
สำหรับการคอมมิตแต่ละครั้งให้ต่อท้ายบางสิ่งเช่น "[ผู้ใช้] ของ [repository_url] เพิ่มการคอมมิตนี้ใน [ref] เมื่อ [วันที่]" ลงในบันทึกของคอมมิต
คุณอาจต้องการที่จะใช้บันทึก Ref อุทิศตนเพื่อจุดประสงค์นี้ (ชอบrefs/notes/received-on
) refs/notes/commits
แทนการเริ่มต้น วิธีนี้จะป้องกันความขัดแย้งกับบันทึกย่อที่สร้างขึ้นเพื่อวัตถุประสงค์อื่น
- แก้ไข
receive
ตะขอของคุณเพื่อปฏิเสธการอัปเดตการอ้างอิงบันทึกย่อของคุณ (เพื่อป้องกันไม่ให้ผู้ใช้ยุ่งกับโน้ตโดยไม่ตั้งใจหรือตั้งใจ)
บอกให้ผู้ใช้ทุกคนรันคำสั่งต่อไปนี้จากภายในโครงสร้างการทำงาน:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
ขั้นตอนนี้จำเป็นเนื่องจาก Git ละเว้นการอ้างอิงที่ไม่ใช่สาขาและไม่ใช่แท็กในที่เก็บอัปสตรีมตามค่าเริ่มต้น
ข้างต้นถือว่าการอ้างอิงเป็นขั้นสูงเท่านั้นไม่เคยลบหรือบังคับให้อัปเดต คุณอาจต้องการให้post-receive
hook ต่อท้ายโน้ต "ลบออกเมื่อ [วันที่]" เพื่อจัดการกรณีเหล่านี้
git reflog --date=local origin/master
(หมายเหตุorigin/
) เพื่อดูรายการพุช มิฉะนั้นจะกระทำเท่านั้นการชำระเงินและการดึงอยู่ในรายการ (ซึ่งมีประโยชน์เช่นกัน) อันที่จริงผมก็ชี้ให้โดย@ คำตอบของ