1 पॉइंट द्वारा GN⁺ 3 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 3 시간 전
Lobste.rs की रायें
  • मैं metadata डालकर उसका उपयोग करने वाले इस तरीके को काफ़ी अच्छे से इस्तेमाल कर रहा हूँ
    पहले commit description से trailer value आसानी से निकालने के लिए trailer_v(key) alias बनाया, और nushell push 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 की तरह अच्छे हैं, लेकिन अभी revset language में उन्हें निकालकर इस्तेमाल करना थोड़ा झंझटभरा है

  • commit message या बदलावों की सामग्री के आधार पर branch name को slugify करना ऐसा काम लगता है जिसे local LLM आसानी से संभाल सकता है

    • समझ नहीं आता कि LLM इस्तेमाल करने की ज़रूरत ही क्या है। पोस्ट में दिया गया साधारण script ज़्यादा हल्का है, शायद ज़्यादा तेज़ भी, और लगभग उतना ही अच्छा काम करेगा
  • टीम के एक सदस्य ने jj द्वारा auto-generated branch name के बारे में कई बार पूछा था
    एक बार के commit branch के लिए मैं इस तरीके का कोई रूपांतर आज़माने का सोच रहा हूँ

  • मेरे हिसाब से change-id based branch name ही परफ़ेक्ट है। मैं इसे बदलना नहीं चाहूँगा
    यह बस उस भयानक code review tool द्वारा माँगा गया branch name है, कोई title नहीं

    • default auto-generated branch name से भी मैं कुल मिलाकर संतुष्ट हूँ, लेकिन जब बदलावों के समूह को push करके PR बनाया जाता है, तब यह उलझन हो सकती है कि हर PR किस branch को target करे
      PR creation को automate करने वाले tool से इसका हल निकाला जा सकता है, लेकिन यह तरीका अच्छा है क्योंकि यह simple है
    • $JOB में descriptive branch names इस्तेमाल करना परंपरा है