Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

เคล็ดลับบรรทัดคำสั่งสำหรับจัดการที่เก็บโอเพ่นซอร์สที่ยุ่งเหยิงของคุณ

การทำงานร่วมกันอย่างมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งในการพัฒนาซอฟต์แวร์โอเพ่นซอร์ส เริ่มต้นด้วยองค์กรที่มีประสิทธิภาพ เพื่อให้แน่ใจว่าจะไม่พลาดสิ่งใด กฎทั่วไป "หนึ่งประเด็น หนึ่งคำขอดึง" เป็นกฎง่ายๆ

แทนที่จะเปิดประเด็นที่มีขอบเขตกว้างๆ เช่น "แก้ไขลิงก์ที่เสียทั้งหมดในเอกสารประกอบ" โครงการโอเพ่นซอร์สจะมีโชคมากขึ้นในการดึงดูดผู้ร่วมให้ข้อมูลด้วยปัญหาเล็กๆ น้อยๆ ที่สามารถจัดการได้หลายประเด็น

ในตัวอย่างก่อนหน้านี้ คุณอาจกำหนดขอบเขตลิงก์เสียตามส่วนหรือตามหน้า วิธีนี้ช่วยให้ผู้ร่วมให้ข้อมูลมีส่วนร่วมมากขึ้นและอุทิศช่วงเวลาเล็กๆ ของพวกเขา แทนที่จะรอให้คนๆ หนึ่งทำผลงานที่ใหญ่และน่าเบื่อมากขึ้น

ปัญหาในขอบเขตที่น้อยกว่ายังช่วยให้ผู้ดูแลโครงการเห็นว่างานเสร็จไปที่ไหนและยังไม่เสร็จ ซึ่งจะช่วยลดโอกาสที่ปัญหาบางส่วนจะพลาดไป ถือว่าเสร็จสิ้น และนำไปสู่จุดบกพร่องหรือช่องโหว่ด้านความปลอดภัยในภายหลัง

นั่นคือทั้งหมดที่ดีและดี แต่ถ้าคุณได้เปิดประเด็นที่มีขอบเขตกว้างๆ หลายประเด็นแล้ว มีการส่งหรือรวม PR บางรายการแล้ว และขณะนี้คุณไม่รู้ว่างานเริ่มต้นหรือหยุดที่ใด

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

การค้นหาแบบโต้ตอบและแทนที่ด้วย vim

คุณสามารถเปิดไฟล์ใน Vim จากนั้นค้นหาและแทนที่ด้วย:

:%s/\<word\>/newword/gc

% ระบุว่าจะดูในทุกบรรทัดของไฟล์ปัจจุบัน s ใช้แทน \<word\> ตรงกับทั้งคำและ g สำหรับ “ทั่วโลก” มีไว้สำหรับทุกเหตุการณ์ c ในตอนท้ายจะให้คุณดูและยืนยันการเปลี่ยนแปลงแต่ละรายการก่อนที่จะทำ คุณสามารถเรียกใช้โดยอัตโนมัติและเร็วขึ้นโดยไม่ต้อง c แต่คุณเสี่ยงที่จะทำสิ่งต่าง ๆ ให้ซับซ้อน หากคุณได้ทำข้อผิดพลาดในการจับคู่รูปแบบ

โมดูลโหนด markdown-link-check มีคู่หู CLI ที่ยอดเยี่ยม

ฉันใช้สิ่งนี้บ่อยจนฉันเปลี่ยนเป็นฟังก์ชัน Bash alias หากต้องการทำเช่นเดียวกัน ให้เพิ่มสิ่งนี้ใน .bashrc . ของคุณ :

# Markdown link check in a folder, recursive
function mlc () {
    find $1 -name \*.md -exec markdown-link-check -p {} \;
}

จากนั้นรันด้วย mlc <filename> .

แสดงรายการไดเรกทอรีย่อยที่มีหรือไม่มีที่เก็บ git ด้วย find

พิมพ์ไดเร็กทอรีย่อยทั้งหมดที่เป็นที่เก็บ git หรืออีกนัยหนึ่งคือมี .git ในนั้น:

find . -maxdepth 1 -type d -exec test -e '{}/.git' ';' -printf "is git repo: %p\n"

หากต้องการพิมพ์ไดเร็กทอรีย่อยทั้งหมดที่ไม่ใช่ที่เก็บ git ให้ปฏิเสธการทดสอบด้วย ! :

find . -maxdepth 1 -type d -exec test '!' -e '{}/.git' ';' -printf "not git repo: %p\n"

ดึงที่เก็บ git หลายรายการจากรายการด้วย xargs

ตอนแรกฉันใช้สิ่งนี้เป็นส่วนหนึ่งของการสร้างแล็ปท็อปของฉันใหม่โดยอัตโนมัติด้วยสคริปต์ทุบตี แต่มันค่อนข้างสะดวกเมื่อคุณทำงานกับอินสแตนซ์บนคลาวด์หรือ Dockerfiles

รับไฟล์ repos.txt ด้วยลิงก์ SSH ของที่เก็บในแต่ละบรรทัด (และตั้งค่าคีย์ SSH ของคุณ) ให้เรียกใช้:

xargs -n1 git clone < repos.txt

หากคุณต้องการดึงและผลักดันที่เก็บจำนวนมาก ก่อนหน้านี้ฉันได้เขียนเกี่ยวกับวิธีใช้ Bash one-liner เพื่อจัดการที่เก็บของคุณ

แสดงรายการปัญหาตามหมายเลขด้วย jot

ฉันเป็นผู้เขียนร่วมและผู้ดูแลพื้นที่เก็บข้อมูล OWASP Web Security Testing Guide ซึ่งฉันเพิ่งพบปัญหาใหญ่เรื่องหนึ่ง (ใช่ มันคือ "แก้ไขลิงก์ที่เสียทั้งหมดในเอกสารประกอบ" - คุณเดาได้อย่างไร) และทำให้มันพัง ออกเป็นประเด็นเล็กๆ น้อยๆ ที่จัดการได้มากขึ้น ปัญหาที่เล็กกว่าและจัดการได้มากกว่า 37 ข้อทั้งหมด

ฉันต้องการแจกแจงปัญหาทั้งหมดที่เป็นปัญหาดั้งเดิม แต่แนวคิดในการพิมพ์หมายเลขปัญหา 37 (#275 ถึง #312) นั้นดูน่าเบื่อและใช้เวลานานมาก ดังนั้น ตามรูปแบบโปรแกรมเมอร์ที่เป็นธรรมชาติ ฉันใช้เวลาเท่ากันกับการพิมพ์ตัวเลขเหล่านั้นทั้งหมดและสร้างวิธีการทำให้เป็นอัตโนมัติแทน

jot ยูทิลิตี้ (apt install athena-jot ) เป็นเครื่องมือเล็กๆ ที่ช่วยได้มากเมื่อคุณต้องการพิมพ์ตัวเลขออกมา แค่บอกจำนวนที่ต้องการ และสถานที่ที่จะเริ่มต้นและหยุด

# jot [ reps [ begin [ end ] ] ]
jot 37 275 312

ซึ่งจะพิมพ์แต่ละหมายเลขรวมตั้งแต่ 275 ถึง 312 ในบรรทัดใหม่ ในการทำให้สิ่งเหล่านี้เป็นหมายเลขปัญหาที่ GitHub และแพลตฟอร์มอื่นๆ รู้จักและเปลี่ยนเป็นลิงก์โดยอัตโนมัติ คุณสามารถไพพ์เอาต์พุตไปที่ awk .

jot 37 275 312 | awk '{printf "#"$0", "}'

#275, #276, #277, #278, #279, #280, #281, #282, #283, #284, #285, #286, #287, #288, #289, #290, #291, #292, #293, #295, #296, #297, #298, #299, #300, #301, #302, #303, #304, #305, #306, #307, #308, #309, #310, #311, #312

คุณยังสามารถใช้ jot เพื่อสร้างข้อมูลแบบสุ่มหรือซ้ำซ้อน ส่วนใหญ่เพื่อการพัฒนาหรือการทดสอบ

องค์กรโอเพ่นซอร์สที่ขับเคลื่อนโดย CLI

ที่เก็บโอเพ่นซอร์สที่มีการจัดการอย่างดีคือโปรเจ็กต์โอเพ่นซอร์สที่ได้รับการดูแลเป็นอย่างดี บันทึกโพสต์นี้เพื่อการอ้างอิงที่สะดวก และใช้พลังพิเศษ CLI ที่เพิ่งค้นพบของคุณให้ดี! ?