ฉันเพิ่งได้รับหนังสือBuilding Git เล่มนี้ เขียนโดย James Coglan มันเป็นหนังสือที่ค่อนข้างหนา อย่างที่ชื่อเรื่องว่าไว้ การสร้างระบบควบคุมเวอร์ชัน Git โดยใช้ภาษาการเขียนโปรแกรม Ruby ฉันคิดว่ามันจะเป็นแบบฝึกหัดที่สนุกที่จะใช้ Git โดยใช้ Elixir ขณะที่ฉันอ่านหนังสือ บทความนี้เป็นบทความแนะนำชุดแรกในชุดบทความที่เน้นการเดินทางของฉันในการใช้ Git ในภาษาโปรแกรม Elixir
นี่ไม่ใช่บทเรียนการเขียนโปรแกรม Elixir เบื้องต้น ดังนั้น ฉันจะไม่เน้นที่แนวคิดหรือไลบรารีของ Elixir โปรดดูที่ [1] และ [2] นอกจากนี้ สำหรับการรวบรวมความรู้โดยละเอียดเกี่ยวกับ Git internals ฉันแนะนำให้คุณอ่านหนังสือด้านบนและ/หรืออ่านเอกสาร [3]
เนื่องจากนี่เป็นเพียงส่วนที่ 1 ของบทความชุดนี้ ฉันจะอธิบายทฤษฎีเล็กน้อยเกี่ยวกับสิ่งที่เราพยายามสร้างในบทความนี้ และจะแนะนำการใช้งาน Elixir อย่างละเอียด
Git เก็บข้อมูลที่เก็บในไดเร็กทอรี .git ในโครงการวานิลลา ขณะที่เราพิมพ์ git init ไดเร็กทอรี . git จะมีลักษณะดังนี้ —
เพื่อให้ภาพรวมโดยย่อ —
โครงสร้างที่เก็บมีลักษณะดังนี้ด้านล่างด้วยไดเร็กทอรีและไฟล์ใหม่บางส่วน —
ที่นี่ -
เราสามารถใช้git cat-file -pเพื่อแสดงข้อมูลเกี่ยวกับวัตถุนี้จากฐานข้อมูล git —
เอาต์พุตด้านบนอ้างถึงทรีที่มีรหัสการคอมมิต aaa96ced2d9a1c8e72c56b253a0e2fe78393feb7
เราสามารถตรวจสอบวัตถุนี้โดยใช้คำสั่งที่คล้ายกัน —
จากผลลัพธ์ เราจะเห็นต้นไม้นี้อ้างถึงรหัสการคอมมิทอื่นce013625030ba8dba906f756967f9e9ca394464aซึ่งแสดงถึงไฟล์hello.txt
การตรวจสอบการกระทำนี้ด้วยคำสั่งเดียวกันแสดงให้เห็นว่า —
ตอนนี้เพื่อตรวจสอบว่า git เก็บวัตถุในระบบไฟล์ได้อย่างไร -
เอาต์พุตแสดงเนื้อหาบีบอัดของอ็อบเจ็กต์ blob บนระบบไฟล์
หนังสือเล่มนี้มีคำสั่งที่สะดวกสำหรับการขยายเนื้อหาที่บีบอัด —
alias inflate='ruby -r zlib -e "STDOUT.write Zlib::Inflate.inflate(STDIN.read)"'
อย่างที่เราเห็น git เก็บ blobs โดยการเติมคำว่า blob, ช่องว่าง, ความยาวของ blob, null byte ตามด้วยเนื้อหาที่บีบอัดโดยใช้ zlib
ในบทความนี้ เป้าหมายของฉันคือการเริ่มต้นโดยไม่มีอะไรเกิดขึ้น และสร้างสองคำสั่ง —
ต่อจากนี้ไป ฉันจะอ้างถึงเวอร์ชันน้ำอมฤตนี้โดยใช้ชื่อที่เรียกใช้งานได้ — egit
ซอร์สโค้ดสำหรับบทความนี้มีให้จาก —https://github.com/imeraj/elixir_git
มันมีไฟล์ READMEเกี่ยวกับวิธีสร้างไฟล์ปฏิบัติการและใช้คำสั่งgit initและcommit
cli.exทำการแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง —
ที่นี่,
{:commit, dir} → สำหรับ egit commit
คำสั่ง egit initสามารถใช้ไดเร็กทอรีทางเลือกเป็นอาร์กิวเมนต์ได้ หากไม่มีการส่งผ่านใด ๆ มันจะสร้างไดเร็กทอรี .git ในไดเร็กทอรีการทำงานปัจจุบัน
helpers.exมีฟังก์ชันตัวช่วยบางอย่าง —
ที่นี่ -
init.exใช้คำสั่ง init —
ที่นี่ -
commit.exใช้คำสั่ง commit —
ที่นี่,
โครงสร้างนี้มีสองฟิลด์ — dataและoid (ฉันจะพูดถึงoidในไม่ช้า)
database.exจัดเตรียมโมดูลฐานข้อมูลและทำการยกส่วนใหญ่ของไดเร็กทอรีอ็อบเจ็กต์ -
ที่นี่ -
ตอนนี้ egit init และ commit ถูกนำไปใช้แล้ว เรามาลอง egit หมุน และตรวจสอบฐานข้อมูลเปรียบเทียบกับฐานข้อมูลของ Git จริงกัน
ตัวอย่างเซสชันที่เริ่มต้น repo และส่งไฟล์hello.txtที่มีเนื้อหาhelloแสดงอยู่ด้านล่าง -
ที่นี่ -
ในส่วนที่ 1 ของชุดบทความเหล่านี้ ฉันได้ใช้ คำสั่ง egit initและegit commit (พื้นฐานมาก) ตั้งแต่เริ่มต้น และแสดงผลลัพธ์เมื่อเปรียบเทียบกับระบบควบคุมเวอร์ชัน Git จริง บทความต่อไปในชุดนี้จะเพิ่มและปรับปรุงคำสั่งใน Elixir ต่อไปในขณะที่ฉันดำเนินการผ่านหนังสือ - Building Git
สำหรับโพสต์ทางเทคนิคที่ละเอียดและลึกซึ้งยิ่งขึ้นในอนาคต โปรดติดตามฉันที่นี่ หรือบนทวิต เตอร์
สัปดาห์นี้ ฉันได้รับอีเมลจากสมาชิกรายการอีเมลรายวัน พวกเขาต้องการทราบ: คุณเข้าชมแหล่งข้อมูลใดรายวัน รายสัปดาห์ และรายเดือน คำถามที่ดี! ฉันยินดีที่จะพยายามแบ่งปันข้อมูลเชิงลึกเกี่ยวกับเวิร์กโฟลว์และทรัพยากรยอดนิยมที่ฉันใช้
เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งกำหนดมาตรฐานในปี 2566 นักพัฒนาทั้งหมดใช้เทอร์มินัล สำหรับบางคน เวิร์กโฟลว์ทั้งหมดของพวกเขาคือเทอร์มินัล โพสต์นี้จะแนะนำกล่องเครื่องมือเทอร์มินัล Hypermodern — เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งที่กำหนดมาตรฐานในปี 2023 คิตตี้เป็นเทอร์มินัลอีมูเลเตอร์ คิตตี้เป็นเทอร์มินัลอีมูเลเตอร์ — เป็นทางเลือกแทนเทอร์มินัล GNOME , Alacritty หรือ Windows Terminal
[ทริกเกอร์การแจ้งเตือน: บทความนี้รวมถึงภาพหน้าจอของผู้คนที่ยกย่องฆาตกรจอร์แดน นีลี] ในที่สุดเจ้าหน้าที่บังคับใช้กฎหมายก็ได้ตั้งข้อหาแดเนียล เพนนี ชายผู้บีบคอจอร์แดน นีลีจนเสียชีวิตในข้อหาฆาตกรรมครั้งนั้น และอาจไม่เต็มใจนัก
“หวัดดี Siri เล่น Me Dive โดย Olivia Dean” ในเดือนพฤษภาคม 2021 ฉันเริ่มฝึกงานที่ Future Academy Africa ในเมือง Akure ประเทศไนจีเรีย
เมื่อวานนี้ เราปิดการแข่งขัน Eurovision Song Contest ปีนี้ด้วยตอนจบที่สดใสและวุ่นวาย โดย Loreen นักร้องชาวสวีเดนคว้าถ้วยรางวัลกลับบ้าน กลายเป็นผู้หญิงคนแรกที่ชนะสองครั้งและนำมงกุฎกลับมายังสวีเดน 50 ปีหลังจาก ABBA ชนะการแข่งขัน กับ “วอเตอร์ลู” พวกเขากลายเป็นหนึ่งในการแสดงที่ยิ่งใหญ่ที่สุดในวงการเพลงป๊อป
โดย Alyson Lee ที่ปรึกษาด้านการจัดการภาครัฐ กระบวนการจัดสรรประจำปีของรัฐบาลกลางเป็นหัวใจสำคัญของความพยายามของเราในการให้ทุนสนับสนุนการกำจัดก๊าซคาร์บอนไดออกไซด์ (CDR) ในแต่ละปี Carbon180 จะส่งคำขอไปยังสำนักงานรัฐสภาหลายแห่งเพื่อช่วยชี้แนะว่าเงินดอลลาร์ในปีหน้าจะไหลไปที่ใด