- jj एक Git-संगत version control system है जो anonymous branches को प्रोत्साहित करता है, लेकिन Git repository में push करने के लिए bookmark, यानी Git branch name, की ज़रूरत होती है
- डिफ़ॉल्ट
jj git push --change xyz push-xyz branch बनाता है, और क्योंकि यह change ID पर केंद्रित है, CLI में स्वाभाविक लगता है, लेकिन GitHub सूची में इससे काम की सामग्री याद करना मुश्किल होता है
git_push_bookmark template को बदलकर description की पहली पंक्ति को slugify() से छोटा slug बनाया जा सकता है, और उसके बाद छोटा change ID जोड़कर इसे बेहतर किया जा सकता है
jj git push --change ozkspkuyzpwu add-note-about-jj-bookmark-templates/ozkspkuyzpwu बनाता है, जिससे पढ़ने में आसानी और revision connectivity दोनों बनी रहती हैं
- shared repository में
ddbeck/ जैसा namespace आगे जोड़ा जा सकता है, लेकिन Git branch name के नियम जटिल हैं, इसलिए अगर नाम वैध न हो तो manual bookmark बनाना पड़ता है
jj के Git push के लिए branch names में सुधार
jj(Jujutsu) एक Git-संगत version control system है, और कई कारणों से यह anonymous branches के उपयोग को अपेक्षित और प्रोत्साहित करता है
- Git repository में push करते समय anonymous branch को भी नाम चाहिए होता है;
jj में इसे bookmark कहा जाता है, और Git में branch
jj git push --change xyz ID xyz वाले revision को Git branch push-xyz के रूप में push करता है
- डिफ़ॉल्ट व्यवहार इस मायने में स्वाभाविक है कि
jj CLI अक्सर दिखने और इस्तेमाल होने वाले change ID को प्रमुखता देता है, लेकिन GitHub वेबसाइट की branch list में सिर्फ push-xyz देखकर यह याद रखना मुश्किल होता है कि यह किस काम के लिए है
configuration बदलने का तरीका
- template alias
slugify() नया बनाइए और git_push_bookmark template को इसे इस्तेमाल करने के लिए बदलिए
[template-aliases]
"slugify(str)" = '''
truncate_end(
65,
str.first_line()
.replace(regex:'[^[[:alnum:]].]', '-')
.replace(regex:'-{2,}', '-')
.replace(regex:'\.{2,}', '.')
.replace(regex:'(^-+|-+$)', '')
.lower()
)
'''
[templates]
git_push_bookmark = 'slugify(description) ++ "/" ++ change_id.short()'
slugify() बदलाव के description की पहली पंक्ति का उपयोग करके छोटा slug जैसा नाम बनाता है, और अंत में छोटा change ID जोड़ता है
- उदाहरण के लिए,
jj git push --change ozkspkuyzpwu चलाने पर add-note-about-jj-bookmark-templates/ozkspkuyzpwu बनता है
- यह नाम पढ़ने में आसान है और साथ ही
jj CLI में दिखने वाले revision ID से जुड़ाव भी बनाए रखता है
- अगर आप किसी और के साथ shared repository में push कर रहे हैं, तो template बदलकर अपनी branches को अलग namespace के नीचे रख सकते हैं
[templates]
git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()'
- यह सुनिश्चित नहीं है कि Git branch name हमेशा सुरक्षित होगा
- Git में वैध branch name के नियम जटिल हैं, और अगर template कोई अवैध नाम बना दे तो error आएगा और bookmark मैन्युअली बनाना होगा
1 टिप्पणियां
Lobste.rs की रायें
मैं metadata डालकर उसका उपयोग करने वाले इस तरीके को काफ़ी अच्छे से इस्तेमाल कर रहा हूँ
पहले commit description से trailer value आसानी से निकालने के लिए
trailer_v(key)alias बनाया, औरnushellpush script मेंjj logसेticket/topicफ़ॉर्म की branch label बनाता हूँउदाहरण के लिए, अगर commit message में
ticket:TKT-123,topic:stop-crashingडाल दिया जाए, तो GitHub पर push करके"Create PR"पेज खोलने वाली script वही values उठाकर इस्तेमाल करती हैGit trailers description के अंदर लगातार इस्तेमाल किए जा सकने वाले key-value store की तरह अच्छे हैं, लेकिन अभी
revsetlanguage में उन्हें निकालकर इस्तेमाल करना थोड़ा झंझटभरा हैcommit message या बदलावों की सामग्री के आधार पर branch name को slugify करना ऐसा काम लगता है जिसे local LLM आसानी से संभाल सकता है
टीम के एक सदस्य ने
jjद्वारा auto-generated branch name के बारे में कई बार पूछा थाएक बार के commit branch के लिए मैं इस तरीके का कोई रूपांतर आज़माने का सोच रहा हूँ
मेरे हिसाब से change-id based branch name ही परफ़ेक्ट है। मैं इसे बदलना नहीं चाहूँगा
यह बस उस भयानक code review tool द्वारा माँगा गया branch name है, कोई title नहीं
PR creation को automate करने वाले tool से इसका हल निकाला जा सकता है, लेकिन यह तरीका अच्छा है क्योंकि यह simple है