สรุปบรรทัดคำสั่ง
ในฐานะที่เป็นส่วนหนึ่งของการทำงานกับพื้นที่ทำงาน Cargo จะดำเนินการรวมคุณลักษณะ: https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
สิ่งนี้หมายความว่าอย่างไร?
สมมติว่าคุณมีพื้นที่ทำงาน
[ workspace ]
members = [ " mega " , " potato " ]
มีสมาชิกสองคน: mega
[ package ]
name = " mega "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " mega " ] }
และ potato
[ package ]
name = " potato "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " potato " ] }
ซึ่งทั้งสองอย่างนี้ขึ้นอยู่กับ potatoer
ลังของบุคคลที่สามทั่วไป แต่มีคุณสมบัติที่แตกต่างกัน: mega
สนใจในคุณสมบัติ "mega"
potato
สนใจใน "potato"
เมื่อรันคำสั่งต่าง ๆ คุณจะต้องใช้ลัง potatoer
หลายเวอร์ชัน
คำสั่งพื้นที่ทำงานทั้งหมดจะใช้เวอร์ชันที่มีคุณสมบัติแบบครบวงจร:
cargo check # this will use potatoer with both "mega" and "potato"
คำสั่งที่ทำงานบนลังเดียวจะใช้เวอร์ชันที่ไม่มีการรวมกัน:
cargo check -p mega # this will use potatoer with "mega" feature
cargo check -p potatoer # this will use potatoer with "potato" feature
cargo check -p mega -p potato # this will require both "mega" and "potato"
ถ้าไม่มีการขึ้นต่อกันกับชุดค่าผสมที่จำเป็น - สินค้าจะรวบรวมมัน
วิธีหนึ่งในการหลีกเลี่ยงปัญหานี้คือต้องแน่ใจว่าหากสมาชิกของพื้นที่ทำงานขึ้นอยู่กับลัง - พวกเขาขึ้นอยู่กับลังด้วยชุดคุณลักษณะเดียวกัน การดูแลรักษาด้วยมืออาจเกิดข้อผิดพลาดได้ง่าย และนั่นคือเวลาที่ hackerman hack
และ hackerman restore
เข้ามา
เมื่อใช้กับตัวเลือก --lock
hackerman
จะทำการตรวจสอบการขึ้นต่อกันทั้งหมดและจะบันทึกไว้ในไฟล์ Cargo.toml
ภายใต้ ["package.metadata.hackerman.lock"]
และการเรียกตรวจสอบครั้งต่อไปจะยืนยันว่าการตรวจสอบนี้ยังคงใช้ได้ .
สิ่งนี้จำเป็นเพื่อให้แน่ใจว่าการอ้างอิงดั้งเดิม (ไม่ถูกแฮ็ก) ได้รับการบันทึกและสามารถกู้คืนได้ในภายหลัง
เป็นไปได้ที่จะฮาร์ดโค้ด --lock
ตัวเลือกในไฟล์ Cargo.toml
ที่กำหนดพื้นที่ทำงาน:
[ workspace . metadata . hackerman ]
lock = true
ในขณะนี้ การรวมจะดำเนินการสำหรับเป้าหมายปัจจุบันเท่านั้น และไม่มีการสนับสนุนการคอมไพล์ข้าม การอัพเดตอัตโนมัติสำหรับไฟล์ toml ของเวิร์กสเปซอาจไม่ทำงาน หากคุณระบุการขึ้นต่อกันโดยใช้ไวยากรณ์ที่แตกต่างจากเวอร์ชันหรือ {}
:
potato = " 3.14 " # this is okay
banana = { version = " 3.14 " } # this is also okay
แก้ไขข้อขัดแย้งในการผสานและรีบูตสำหรับไฟล์ Cargo.toml
ที่เปลี่ยนแปลงโดยแฮกเกอร์แมน
หากต้องการใช้มันคุณต้องการสิ่งนี้
global .gitconfig
หรือ local .git/config
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
gitattributes
อาจเป็นไฟล์โลคัลต่อโปรเจ็กต์หรือโกลบอล
Cargo.toml merge=hackerman
ในการสร้างไฟล์ gitattributes
ส่วนกลาง คุณต้องระบุเส้นทางไปยังไฟล์นั้นภายในการกำหนดค่า git ส่วนกลาง:
[core]
attributesfile = ~/.gitattributes
ที่นี่ ฉันกำลังเปรียบเทียบผลกระทบของแนวทางต่างๆ ในการรวมเป็นหนึ่งในพื้นที่ทำงาน โดยไม่มีการเปลี่ยนแปลงใดๆ การตรวจสอบใหม่ทั้งหมดในพื้นที่ทำงานทั้งหมดที่เกี่ยวข้องกับการรวบรวมการอ้างอิงภายนอกทั้งหมดจะใช้เวลา 672 วินาที
พื้นที่ทำงานมีลังจำนวนมาก ซึ่งฉันเลือกลัง a
, b
, c
ฯลฯ เช่น crate b
นำเข้าลัง a
ลัง c
นำเข้าลัง b
ฯลฯ ลัง a
ไม่มีการพึ่งพาภายนอก ลังอื่น ๆ ถึง
cargo hackerman hack
และการพึ่งพาใหม่จะถูกเพิ่มในทุกลังก่อนที่จะรันคำสั่ง ฉันจะล้างผลลัพธ์การคอมไพล์ จากนั้นจึงสั่งคำสั่งสำหรับแต่ละคอลัมน์ตามลำดับ
สั่งการ | ไม่มีการแฮ็ก | แฮกเกอร์ | แฮ็คด้วยตนเอง |
---|---|---|---|
check -pa | 0.86 วินาที | 0.80 วินาที | 215.39น |
check -pb | 211.30น | 240.15 วินาที | 113.56ส |
check -pc | 362.69 วินาที | 233.38น | 176.73 วินาที |
check -pd | 36.16น | 0.24 วินาที | 0.25 วินาที |
check -pe | 385.35ส | 66.34น | 375.22 วินาที |
check | 267.06ส | 93.29น | 81.50น |
ทั้งหมด | 1263.42 | 634.20 | 962.65 |
cargo hackerman
↴cargo hackerman hack
↴cargo hackerman restore
↴cargo hackerman check
↴cargo hackerman merge
↴cargo hackerman explain
↴cargo hackerman dupes
↴cargo hackerman tree
↴cargo hackerman show
↴ ชุดเครื่องมือที่ช่วยให้พื้นที่ทำงานของคุณคอมไพล์ได้อย่างรวดเร็ว
การใช้งาน : คำสั่ง cargo hackerman
COMMAND ...
ตัวเลือกที่มี:
-h
, --help
— พิมพ์ข้อมูลวิธีใช้-V
, --version
— พิมพ์ข้อมูลเวอร์ชันคำสั่งที่ใช้ได้:
hack
- รวมการพึ่งพาลังในแต่ละลังในพื้นที่ทำงานrestore
— ลบการรวมการพึ่งพาลังที่เพิ่มโดยคำสั่ง hack
check
— ตรวจสอบว่าจำเป็นต้องมีการรวมและตรวจสอบว่าผลรวมถูกต้องหรือไม่merge
— กู้คืนไฟล์และผสานด้วยไดรเวอร์ผสานเริ่มต้นexplain
— อธิบายว่าทำไมถึงมีการพึ่งพาอยู่บ้าง ทั้งฟีเจอร์และเวอร์ชันเป็นทางเลือกdupes
— แสดงรายการที่ซ้ำกันทั้งหมดในพื้นที่ทำงานtree
- สร้างต้นไม้จากการพึ่งพาshow
— แสดงรายการ crate, readme, พื้นที่เก็บข้อมูลหรือเอกสารประกอบ คุณสามารถส่ง --help
สองครั้งเพื่อรับความช่วยเหลือโดยละเอียดเพิ่มเติม
รวมการพึ่งพาลังต่างๆ ในแต่ละลังในพื้นที่ทำงาน
การใช้งาน : hack
cargo hackerman
CARGO_OPTS
[ --dry
] [ --lock
] [ -D
]
คุณสามารถยกเลิกการเปลี่ยนแปลงเหล่านั้นได้โดยใช้ cargo hackerman restore
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
--dry
— อย่าดำเนินการใดๆ เพียงแสดงเท่านั้น
--lock
- รวมการตรวจสอบการพึ่งพาเข้าไว้ในที่ซ่อน
สิ่งนี้ช่วยให้แน่ใจว่าคุณสามารถกลับไปสู่การอ้างอิงดั้งเดิม (ไม่ถูกแฮ็ก) ได้: เพื่อให้สามารถกู้คืนการอ้างอิงดั้งเดิมที่แฮกเกอร์จำเป็นต้องเก็บไว้ในไฟล์ Cargo.toml
หาก CI ตรวจพบว่า Checksum ไม่ตรงกัน แสดงว่าการขึ้นต่อกันได้รับการอัปเดตในแหล่งที่มาที่ถูกแฮ็ก คุณควรกู้คืน อัปเดตและแฮ็กอีกครั้งแทน
คุณสามารถทำการล็อคพฤติกรรมเริ่มต้นได้โดยเพิ่มสิ่งนี้ลงใน Cargo.toml
ในพื้นที่ทำงาน
[workspace.metadata.hackerman]
lock = true
-D
, --no-dev
- อย่ารวมการพึ่งพา dev
-h
, --help
— พิมพ์ข้อมูลวิธีใช้
cargo-hackerman hack
คำนวณและเพิ่มชุดการขึ้นต่อกันเพิ่มเติมขั้นต่ำให้กับสมาชิกพื้นที่ทำงานทั้งหมด เพื่อให้คุณลักษณะของการขึ้นต่อกันทั้งหมดของลังนี้ยังคงเหมือนเดิมเมื่อใช้เป็นส่วนหนึ่งของพื้นที่ทำงานทั้งหมดหรือโดยตัวมันเอง
เมื่อการพึ่งพาถูกแฮ็ก คุณควรกู้คืนข้อมูลเหล่านั้นก่อนที่จะทำการเปลี่ยนแปลงใดๆ
ลบการรวมการพึ่งพาลังที่เพิ่มโดยคำสั่ง hack
การใช้งาน : cargo hackerman
restore
CARGO_OPTS
[ TOML
]...
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งรายการตำแหน่งที่มีอยู่:
TOML
— กู้คืนไฟล์แต่ละไฟล์แทนพื้นที่ทำงานทั้งหมดตัวเลือกที่มี:
-h
, --help
— พิมพ์ข้อมูลวิธีใช้ ตรวจสอบว่าจำเป็นต้องรวมเข้าด้วยกันหรือไม่และเช็คซัมถูกต้องหรือไม่
คล้ายกับ cargo-hackerman hack --dry
แต่ยังตั้งค่าสถานะทางออกเป็น 1 เพื่อให้คุณสามารถใช้เป็นส่วนหนึ่งของกระบวนการ CI ได้
การใช้งาน : cargo hackerman
check
CARGO_OPTS
[ -D
]
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
-D
, --no-dev
- อย่ารวมการพึ่งพา dev-h
, --help
— พิมพ์ข้อมูลวิธีใช้ กู้คืนไฟล์และรวมเข้ากับไดรเวอร์การผสานเริ่มต้น
การใช้งาน : cargo hackerman
merge
RESULT
BASE
REMOTE
LOCAL
ตัวเลือกที่มี:
-h
, --help
— พิมพ์ข้อมูลวิธีใช้ หากต้องการใช้งาน คุณจะต้องเพิ่มสิ่งนี้ลงใน ~/.gitconfig
หรือ .git/config
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
และอะไรทำนองนี้สำหรับ .git/gitattributes
Cargo.toml merge=hackerman
อธิบายว่าเหตุใดจึงมีการพึ่งพาอยู่บ้าง ทั้งฟีเจอร์และเวอร์ชันเป็นทางเลือก
การใช้งาน : cargo hackerman
explain
CARGO_OPTS
[ -T
] [ -P
] [ -s
] CRATE
[ FEATURE
] [ VERSION
]
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
-T
, --no-transitive-opt
— อย่าตัดลิงก์ที่ซ้ำซ้อน-P
, --package-nodes
— ใช้โหนดแพ็คเกจแทนโหนดฟีเจอร์-s
, --stdout
— พิมพ์ไฟล์ dot ไปที่ stdout แทนที่จะวางไข่ xdot
-h
, --help
— พิมพ์ข้อมูลวิธีใช้ด้วยการพึ่งพาจำนวนมาก อาจเป็นเรื่องยากที่จะบอกได้ว่าเหตุใดการพึ่งพาย่อยย่อยบางส่วนจึงรวมอยู่ด้วย แฮกเกอร์แมนอธิบายวิธีแก้ปัญหานี้โดยการติดตามห่วงโซ่การพึ่งพาจากเป้าหมายและไปยังพื้นที่ทำงาน
explain
เริ่มต้นที่ลัง/ฟีเจอร์ที่กำหนด และติดตามลิงก์การพึ่งพาแบบย้อนกลับจนกว่าจะถึงจุดที่ข้ามกับพื้นที่ทำงานแต่ไม่ได้เข้าสู่พื้นที่ทำงานนั้นเอง
โหนดสีขาวแสดงถึงสมาชิกในพื้นที่ทำงาน โหนดทรงกลมแสดงถึงคุณลักษณะต่างๆ โหนดแปดเหลี่ยมแสดงถึงลังฐาน เส้นประแสดงถึงการพึ่งพาเฉพาะนักพัฒนาเท่านั้น เส้นประ - ทั้ง dev และปกติ แต่มีคุณลักษณะที่แตกต่างกันพาดผ่าน โดยปกติแล้วจะมีการเน้นเป้าหมาย ตามค่าเริ่มต้นแฮ็กเกอร์แมนจะขยายโหนดฟีเจอร์ข้อมูลแพ็คเกจซึ่งสามารถเปลี่ยนกลับได้ด้วย -P
และพยายามลดการพึ่งพาสกรรมกริยาเพื่อให้ต้นไม้อ่านได้ง่ายขึ้น - ซึ่งสามารถเปลี่ยนกลับได้ด้วย -T
หากมีลังหลายรุ่น คุณสามารถระบุรุ่นที่คุณสนใจได้ แต่เป็นทางเลือก
คุณยังสามารถระบุคุณสมบัติที่ต้องการค้นหาได้ ไม่เช่นนั้นแฮกเกอร์จะมองหาคุณสมบัติทั้งหมด
แสดงรายการที่ซ้ำกันทั้งหมดในพื้นที่ทำงาน
การใช้งาน : cargo hackerman
dupes
CARGO_OPTS
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
-h
, --help
— พิมพ์ข้อมูลวิธีใช้ สร้างต้นไม้จากการพึ่งพาอาศัยกัน
การใช้งาน : cargo hackerman
tree
CARGO_OPTS
[ -T
] [ -D
] [ -P
] [ -w
] [ -s
] [ CRATE
] [ FEATURE
] [ VERSION
]
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
-T
, --no-transitive-opt
— อย่าตัดลิงก์ที่ซ้ำซ้อน-D
, --no-dev
- ไม่รวมการพึ่งพา dev-P
, --package-nodes
— ใช้โหนดแพ็คเกจแทนโหนดฟีเจอร์-w
, --workspace
- เก็บไว้ในพื้นที่ทำงาน-s
, --stdout
— พิมพ์ไฟล์ dot ไปที่ stdout แทนที่จะวางไข่ xdot
-h
, --help
— พิมพ์ข้อมูลวิธีใช้ตัวอย่าง:
cargo hackerman tree rand 0.8.4
cargo hackerman tree serde_json preserve_order
แสดงรายการ crate, readme, พื้นที่เก็บข้อมูล หรือเอกสารประกอบ
การใช้งาน : cargo hackerman
show
CARGO_OPTS
[ -m
| -r
| -d
| -R
] CRATE
[ VERSION
]
ตัวเลือกสินค้า:
--manifest-path
= PATH
— เส้นทางไปยังไฟล์ Cargo.toml--frozen
— ต้องมี Cargo.lock และแคชเป็นปัจจุบัน--locked
— ต้องมี Cargo.lock เป็นปัจจุบัน--offline
— ทำงานโดยไม่ต้องเข้าถึงเครือข่าย-v
, --verbose
— เพิ่มการใช้คำฟุ่มเฟือย สามารถใช้ได้หลายครั้งตัวเลือกที่มี:
-m
, --manifest
— แสดงรายการลัง-r
, --readme
- แสดงกล่อง readme-d
, --doc
— เปิด URL เอกสาร-R
, --repository
— พื้นที่เก็บข้อมูล-h
, --help
— พิมพ์ข้อมูลวิธีใช้ตัวอย่าง:
cargo hackerman show --repository syn