Rust डेवलपर्स के लिए Git वर्कफ़्लो: पहले कमिट से कोड रिव्यू तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Git वर्कफ़्लो क्यों है Rust प्रोजेक्ट (और आपके मानसिक स्वास्थ्य) के लिए वरदान

\n\n

क्या आपने कभी Rust प्रोजेक्ट में किसी 'खराब' कमिट को वापस रोलबैक करने की कोशिश की है, जो गलती से src/main.rs, Cargo.toml और तीन और मॉड्यूल को प्रभावित करता है? परिचित लग रहा है? अगर हाँ, तो आप बिल्कुल अकेले नहीं हैं। Rust अपनी सख्ती के लिए जाना जाता है, लेकिन एक अच्छे Git वर्कफ़्लो के बिना, सबसे सही कोड भी गड़बड़ हो जाता है।

\n\n

इस लेख में, मैं दिखाऊंगा कि Git के साथ एक ऐसा वर्कफ़्लो कैसे बनाया जाए जो आपके डिबगिंग के घंटे और तनाव बचाए। हम Rust पर वास्तविक उदाहरण देखेंगे, CI/CD, कोड रिव्यू और सहकर्मियों के सामने बेइज्जती से बचने के टिप्स पर बात करेंगे। चलिए शुरू करते हैं!

\n\n

Rust के लिए Git वर्कफ़्लो की मूल बातें: कहाँ से शुरू करें

\n\n

विस्तार में जाने से पहले, बुनियादी बातें समझ लेते हैं। Rust प्रोजेक्ट्स के लिए, मैं टीम के आकार के आधार पर GitHub Flow या Git Flow का उपयोग करने की सलाह देता हूँ। लेकिन एक खास बात है: Rust में सख्त टाइपिंग और टेस्टिंग की आवश्यकता होती है, इसलिए आपका वर्कफ़्लो cargo test और cargo clippy के अनुरूप होना चाहिए।

\n\n

Rust के लिए ब्रांच संरचना

\n\n

यहाँ न्यूनतम ब्रांच सेट है जो मैं अपने प्रोजेक्ट्स में उपयोग करता हूँ:

\n\n
    \n
  • main — स्थिर संस्करण, हमेशा रिलीज़ के लिए तैयार
  • \n
  • develop — फीचर्स के लिए इंटीग्रेशन ब्रांच
  • \n
  • feature/फीचर-का-नाम — हर नया फीचर अलग-थलग
  • \n
  • hotfix/नाम — तत्काल सुधारों के लिए
  • \n
\n\n

यह Rust के लिए क्यों महत्वपूर्ण है? क्योंकि cargo check और cargo build डिपेंडेंसी कॉन्फ्लिक्ट दिखा सकते हैं, जिन्हें साझा ब्रांच की बजाय अलग ब्रांच में हल करना आसान होता है।

\n\n

उदाहरण: नए फंक्शन के लिए फीचर ब्रांच बनाना

\n\n

मान लीजिए, आप Rust में JSON पार्सर लिख रहे हैं। आप main ब्रांच से शुरू करते हैं:

\n\n
git checkout main\ngit pull origin main\ngit checkout -b feature/json-parser
\n\n

अब आप कोड लिखते हैं। यहाँ एक सरल फंक्शन का उदाहरण है जिसे आप src/parser.rs में जोड़ते हैं:

\n\n
use serde_json::Value;\n\npub fn parse_json(input: &str) -> Result<Value, String> {\n    serde_json::from_str(input).map_err(|e| e.to_string())\n}
\n\n

कमिट करने से पहले टेस्ट ज़रूर चलाएँ:

\n\n
cargo test\ncargo clippy -- -D warnings
\n\n

अगर सब ठीक है — कमिट करें:

\n\n
git add src/parser.rs Cargo.toml\ngit commit -m "feat: एरर हैंडलिंग के साथ बेसिक JSON पार्सर जोड़ें"
\n\n

कमिट फॉर्मेट पर ध्यान दें: feat: — यह Conventional Commits का हिस्सा है, जो Rust प्रोजेक्ट्स के साथ बढ़िया काम करता है, खासकर अगर आप ऑटोमेटिक चेंजलॉग का उपयोग करते हैं।

\n\n

Rust के लिए CI/CD: स्वचालित कोड जाँच

\n\n

CI के बिना, आपका Git वर्कफ़्लो सिर्फ ब्रांच का एक सेट है। Rust के लिए, मैं प्रोजेक्ट की रूट में .github/workflows/ci.yml फ़ाइल जोड़ने की दृढ़ता से सलाह देता हूँ (अगर GitHub उपयोग कर रहे हैं):

\n\n
name: Rust CI\n\non:\n  push:\n    branches: [ "main", "develop" ]\n  pull_request:\n    branches: [ "main" ]\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v3\n    - name: Build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose\n    - name: Lint\n      run: cargo clippy -- -D warnings\n    - name: Format check\n      run: cargo fmt -- --check
\n\n

अब main या develop में हर push बिल्ड, टेस्ट और लिंटिंग चलाएगा। अगर CI फेल होता है — कमिट मर्ज नहीं होगा। यह 'मेरी मशीन पर तो चल रहा है' समस्या से बचाने का पक्का तरीका है।

\n\n

यह आपके प्रोजेक्ट को कैसे बचाएगा

\n\n

कल्पना करें: आप डिपेंडेंसी जोड़ने के बाद Cargo.lock अपडेट करना भूल गए। CI तुरंत इसे पकड़ लेगा — cargo build एरर देगा। या आपने प्रोडक्शन कोड में गलती से unwrap() का उपयोग कर लिया — clippy -D warnings फ्लैग के साथ इसे रोक देगा।

ब्लॉग

पुस्तक अनुशंसाएँ