बेहतर Git workflow की ओर
(black7375.tistory.com)Git को और अधिक कुशलता से इस्तेमाल करने के तरीकों को संकलित किया गया है.
- रिपॉज़िटरी संरचना
- Git एक distributed version control system है, इसलिए इसे centralized, GitHub/GitLab शैली, hierarchical आदि कई तरीकों से व्यवस्थित किया जा सकता है
- branch संरचना
- GitHub Flow:
Mainको आधार बनाकर feature या bug branch बनाई जाती है, feedback लेने के बाद उसे merge किया जाता है - Git Flow: बार-बार deployment की बजाय पारंपरिक development के लिए अधिक उपयुक्त
- Feature branch बनाकर
Developbranch में merge किया जाता है - पर्याप्त रूप से परिपक्व
Developbranch सेRelease(Stage)branch बनाई जाती है, जिसमें केवल bug fix किए जाते हैं, और बाद में इसेDevelopऔरMasterमें मिलाया जाता है - Release की तैयारी पूरी होने पर इसे
Masterbranch में merge किया जाता है, और उसके बाद केवल hotfix किए जाते हैं
- Feature branch बनाकर
- GitLab Flow: जटिल Git Flow और बहुत सरल GitHub Flow के बीच का रूप
- Git Flow में अस्थायी
Releasebranch की जगह लगातार बनाए रखी जाने वालीStagebranch का उपयोग - hotfix को
ProductionऔरStageमें, और bug fix कोStageऔरDevelopमें लागू किया जाता है
- Git Flow में अस्थायी
- Perforce Stream: कई releases को manage करना हो तो उपयोगी
Releaseमें bug fix होने पर वहMain-Developतक propagate किया जाता हैDevelopमें feature बनने पर conflict हटाकर उसेMainमें reflect किया जाता है
- Trunk आधारित:
Main(Master)का अधिक कुशल उपयोग करने का प्रयास, जिसे मुख्यतः big tech कंपनियां इस्तेमाल करती हैंMainको लंबे समय तक बनाए रखा जाता है, और release branch में अलग से bug fix नहीं किए जाते- features को flag के साथ Off स्थिति में merge किया जाता है ताकि code हमेशा up-to-date रहे
- GitHub Flow:
- commit
- convention: आम तौर पर Angular convention का काफी उपयोग होता है, लेकिन आपसी सहमति से emoji आदि भी इस्तेमाल किए जा सकते हैं
- इकाई: commit को यथासंभव छोटे unit में करना चाहिए, लेकिन यह भी टीम के भीतर तय होना चाहिए कि न्यूनतम unit क्या होगा
- Hunk के जरिए changes को बारीकी से बांटकर staging की जा सकती है
- अगर Delta unit पर changes की तुलना की जा सके तो यह सुविधाजनक होता है
- speculative commit और linear history: बार-बार commit करके context बनाए रखते हुए भी commit history को linear रखने का तरीका
- जब भी stash या prototype trial जैसी work save करने की जरूरत हो, उसे save करें
- जहां-जहां checkout की जरूरत हो वहां checkout करके लगातार commit करें, फिर
rebaseके जरिए history को linear रखें - git-branchless नाम का tool उपयोगी है
git sl: anonymous branches को track करके commit history को अच्छी तरह visualize करता हैgit prevऔरgit next: पिछले/अगले unit पर checkout करना आसान बनाते हैंgit sync:Mainपर rebase करता हैgit move: commit को इच्छित स्थान पर ले जा सकता हैgit restack:rebaseयाcommit --amendआदि से commit history का क्रम बिगड़ जाए तो उसे restore करता हैgit undo: undo किया जा सकता है
- merge
- Patch Stack:
feature[1/3],feature[2/3],feature[3/3]की तरह तोड़कर review करने का तरीका - first-class conflict: Git के साथ compatible Jujutsu conflict को commit में record करता है, इसलिए एक बार सुलझाया गया conflict बाद में फिर से होने की संभावना कम होती है
- 3 Way Diff: Jujutsu में conflict होने पर
Base-Oursको diff के रूप में औरTheirsको snapshot के रूप में दिखाया जाता है, जिससे यह सहज लगता है. हालांकि IDE/editor syntax highlighting याBase-Theirdiff देखने की जरूरत भी हो सकती है - binary conflict: Git में binary file conflict होने पर वह उसे उपयोगकर्ता पर छोड़ देता है, लेकिन लेखक ने व्यक्तिगत रूप से एक सरल tool बनाया जो
BaseऔरTheirfiles बना देता है - patch और mail: अधिक पारंपरिक(?) merge तरीके का परिचय
git request-pullpull request बनाने का command हैgit send-mailसे patch को mail द्वारा भेजा जा सकता है, औरgit amसे patch apply किया जा सकता है
- Patch Stack:
- अन्य management तरीके
- Worktree: Git history साझा रहते हुए, SVN branch की तरह केवल working files को कई जगह checkout करके कई काम एक साथ किए जा सकते हैं
- Git LFS: large files को manage करने का तरीका
- partial clone और partial checkout: आंशिक रूप से clone करके download time घटाया जा सकता है, और आंशिक checkout से केवल इच्छित directory पर काम किया जा सकता है
- Scalar: Microsoft के प्रयास से बना tool, जो बहुत बड़े repositories को आसानी से manage करने में मदद करता है
अभी कोई टिप्पणी नहीं है.