Git में शाखा विवरण


282

क्या Git में शाखाओं के लिए 'विवरण' रखने का कोई तरीका है?

हालांकि मैं वर्णनात्मक नामों का उपयोग करने की कोशिश करता हूं, एक ही शाखा पर कुछ समय के लिए काम करना कभी-कभी मेरी स्मृति को कम कर देता है कि मैंने कुछ अन्य विषय शाखाओं को क्यों बनाया। मैं शाखाओं के लिए वर्णनात्मक नामों का उपयोग करने की कोशिश करता हूं, लेकिन मुझे लगता है कि एक 'विवरण' (शाखा के उद्देश्य के बारे में संक्षिप्त टिप्पणी) अच्छा होगा।


1
मुझे भी ऐसी ही समस्या थी । मैं उस फ़ाइल का उपयोग दस्तावेज़ शाखाओं में करता हूं और वे क्यों मौजूद हैं (अन्य चीजों के बीच)।
थीमिस

2
यह वास्तव में उपयोगी सुविधा होगी। git Branch -a शाखा नामों के आगे विवरण दिखा सकता है। हो सकता है कि git notes भविष्य में शाखाओं के साथ-साथ नोटों का भी समर्थन करेगा?
झब्बूकोट

1
शाखा विवरण को धक्का नहीं दिया जा सकता है, इसलिए वे बहुत बेकार हैं जब तक आप खुद को संदेश नहीं भेजना चाहते हैं।
नुरेटिन

@nurettin सच है, लेकिन मेरा अनुरोध वैसे भी निजी सामान के लिए था। मैं सिर्फ यह याद रखना चाहता था कि मैंने शाखा क्यों काटी।
नौफाल इब्राहिम

जवाबों:


200

Git 1.7.9 इसका समर्थन करता है। से 1.7.9 रिलीज नोट्स :

 * "वर्ण शाखा --edit-description" का उपयोग वर्णनात्मक पाठ को जोड़ने के लिए किया जा सकता है
   विषय शाखा क्या है, यह समझाने के लिए।

सितंबर 2011 में 6f9a332 , 739453a3 , b720088 के साथ आप उस फीचर को वापस देख सकते हैं :

struct branch_desc_cb {
  const char *config_name;
  const char *value;
};

--edit-description::

एक संपादक खोलें और पाठ को यह समझाने के लिए संपादित करें कि शाखा क्या है, इसका उपयोग विभिन्न अन्य आदेशों (जैसे request-pull) द्वारा किया जा सकता है ।

ध्यान दें कि यह एक अलग हेड शाखा के लिए काम नहीं करेगा।

उस विवरण का उपयोग स्क्रिप्ट अनुरोध-पुल द्वारा किया जाता है: देखें प्रतिबद्ध c016814783 , लेकिन यह भी git merge --log

request-pull एक ऐसी स्क्रिप्ट है जिसका उपयोग दो आउटपुट के बीच मानक आउटपुट के बीच के परिवर्तनों को संक्षेप में प्रस्तुत करने के लिए किया गया है, और दिए गए URL में उत्पन्न सारांश भी शामिल है।

[@AchalDave से] दुर्भाग्य से, आप विवरणों को धक्का नहीं दे सकते क्योंकि वे आपके कॉन्फ़िगरेशन में संग्रहीत हैं, जिससे यह किसी टीम में शाखाओं के दस्तावेजीकरण के लिए बेकार हो जाता है।


17
@ ओवेन: फिलहाल मुझे पता है कि git config branch.topic.descriptionशाखा के लिए विवरण दिखाने के लिए उपयोग करना है topic। यह .git/configफ़ाइल में संग्रहीत है ।
ग्रेग हेवगिल

12
@GregHewgill धन्यवाद। कुछ उपनामों के साथ जो वास्तव में इसे देखने का बुरा तरीका नहीं है। अब यदि केवल git branchसूची में विवरण दिखाए जाएँगे ...
Owen

4
इस समय, पिछली टिप्पणी में उद्धृत जीस्ट
pfalcon

166
दुर्भाग्य से, आप विवरणों को धक्का नहीं दे सकते हैं क्योंकि वे आपके कॉन्फ़िगरेशन में संग्रहीत हैं, जिससे यह एक टीम में शाखाओं के दस्तावेजीकरण के लिए बेकार हो जाता है।
अचल दवे A

2
@PedroRodrigues दुख की बात है कि आपकी जिस्ट लिंक टूट गई है
UpAndAdam

40

यदि आप करते हैं README का उपयोग कर खत्म, एक बनाने Git उर्फ संशोधित git checkoutताकि आपके README हर बार जब आप शाखाओं स्विच प्रदर्शित होता है।

उदाहरण के लिए, इसे [ / उपनाम] के तहत ~ / .itconfig में जोड़ें

cor = !sh -c 'git checkout $1 && cat README' -

इसके बाद, आप git cor <branch_name>शाखा को स्विच करने के लिए चला सकते हैं और उस शाखा के README को प्रदर्शित कर सकते हैं जिस पर आप स्विच कर रहे हैं।


मेरे लिए $ 1 चर काम नहीं कर रहा है - इसमें कुछ भी नहीं है। मुझे पता नहीं क्यों (मैं संस्करण का उपयोग कर रहा हूं 1.7.11-msysgit.1)। मैं $ 0 का उपयोग कर रहा हूँ। और सब कुछ ठीक है।
शिटिकोव

@ git उपनामों के लिए @shytikov जो तर्कों का उपयोग करते हैं, पोर्टेबिलिटी के लिए, मैं " sh -c" के बजाय एक त्वरित फ़ंक्शन का उपयोग करता हूं ; जैसे ,. alias = "!f() { git checkout "${1}" && cat README.md; }; f" (कोष्ठक और उद्धरण इस मामले में अनावश्यक हैं, बस पूर्णता के लिए शामिल होने की स्थिति में वे कुछ अधिक जटिल के लिए आवश्यक हैं।)
माइकल

@michael_n आपका उपनाम, यह है कि एक
चाबुक

केवल समस्या यह है कि यदि README उस फ़ोल्डर में नहीं है, जब आप चेकआउट करते हैं तो यह सिर्फ शिकायत करता है।
UpAndAdam

@UpAndAdam यह एक git उपनाम है, जिसे परिभाषित किया गया है ~/.gitconfig, के तहत [alias], और उपनाम का नाम वास्तव में है (और समझने के लिए भ्रामक) aliasमेरे वास्तविक कॉन्फ़िगरेशन से बुलाया गया है (मुझे इसे corइस उदाहरण के अनुरूप होना चाहिए)। मेरा वास्तविक aliasउपनाम है: alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f" उपयोग: git alias {alias_name}या git alias {alias_regexp}। बैश aliasकमांड के अनुरूप , जैसे, $ alias llपैदावार (मेरे लिए) alias ll='ls -l':; और $ git alias brपैदावार: alias.br branch -v --list(यह भी इस्तेमाल कर सकते हैं $ git alias 'b.*') :
माइकल

31

git branch --edit-descriptionशाखा विवरण सेट या संपादित करने के लिए उपयोग करें।

यहां शाखाओं को समान दिखाने के लिए एक शेल फ़ंक्शन है git branchलेकिन विवरण संलग्न हैं।

# Shows branches with descriptions
function gb() {
  current=$(git rev-parse --abbrev-ref HEAD)
  branches=$(git for-each-ref --format='%(refname)' refs/heads/ | sed 's|refs/heads/||')
  for branch in $branches; do
    desc=$(git config branch.$branch.description)
    if [ $branch == $current ]; then
      branch="* \033[0;32m$branch\033[0m"
     else
       branch="  $branch"
     fi
     echo -e "$branch \033[0;36m$desc\033[0m"
  done
}

यहाँ ऐसा gbदिखता है, जैसा चित्र दिखाई देने की स्थिति में पाठ के रूप में यहाँ दिखाया गया है:

$ gb
* logging Log order details.  Waiting for clarification from business.
  master 
  sprocket Adding sprockets to the parts list.  Pending QA approval.

और एक छवि के रूप में, ताकि आप रंग देख सकें:

यहां छवि विवरण दर्ज करें


यह स्वीकृत उत्तर (एक वर्ष से अधिक पूर्व पोस्ट) से कैसे भिन्न है?
पीटर मोर्टेंसन


28

READMEद्वारा सुझाए गए क्रिस जम्मू , काम कर सकते हैं यह एक साथ सेटअप है प्रदान की कस्टम मर्ज चालक एक में परिभाषित किया.gitattribute
इस तरह, विलय के दौरान स्थानीय संस्करण READMEहमेशा संरक्षित रहता है।

शाखाओं के लिए "विवरण" को उस मेटा डेटा से जुड़ी "टिप्पणी" के रूप में भी जाना जाता है, और यह समर्थित नहीं है।

कम से कम, एक READMEफ़ाइल के साथ , आप किसी भी शाखा के लिए कर सकते हैं:

$ git show myBranch:README

यदि आपका README आपके REPO की रूट डायरेक्टरी में है, तो यह किसी भी पथ से काम करेगा, क्योंकि जिस मार्ग का उपयोग किया गया git showहै, वह उक्त रेपो की शीर्ष निर्देशिका से निरपेक्ष है।


3
क्या टीम के सभी लोगों को इसके बारे में पता होना चाहिए और इसे अपने व्यक्तिगत रूप से स्थापित करना होगा। यदि ऐसा है, तो मुझे लगता है कि यह प्रबंधन करना मुश्किल होगा, और वास्तव में ऐसा करने वाले लोगों की संभावना पतली होगी।
डॉन हैच

@ डॉन्चैच: आप आम तौर पर .gitattributesफाइल को अपने रिपॉजिटरी में चेक करते हैं , इसलिए नहीं, यह सभी के लिए काम करेगा। यह दुर्भाग्य से कुछ वेब-आधारित इंटरफेस के माध्यम से विलय करते समय काम नहीं करता है, हालांकि, उदाहरण के लिए, जब Azure DevOps में पुल अनुरोधों का उपयोग कर रहा है।
सोरेन ब्योर्नस्टैड

19

यहाँ दो लोकप्रिय सुझाव दिए गए हैं:

  1. git branch --edit-description: हम इसे पसंद नहीं करते क्योंकि आप इसे धक्का नहीं दे सकते। हो सकता है कि मुझे याद हो कि मैंने जो शाखाएँ बनाई थीं, वे क्या हैं, लेकिन मेरी टीम सुनिश्चित नहीं कर सकती।
  2. READMEफ़ाइल जनसंपर्क। डाली। यह मर्ज के दौरान एक दर्द है: सुपर-मर्ज को मर्ज करने के लिए और हम READMEशाखाओं से तब खींचेंगे जब हम फ़ीचर शाखाओं को मर्ज करेंगे। शाखाओं के बीच का दर्द भी एक दर्द है।

हमने एक अनाथ branches-readmeशाखा बनाने का फैसला किया है । अनाथ शाखाएं अपने अलग इतिहास के साथ शाखाएं हैं - आप उन्हें गितूब की gh-pagesशाखाओं से जान सकते हैं । इस अनाथ शाखा में एक एकल READMEफ़ाइल है। इसमें ऐसी सामग्री है:

master:
    The default branch
mojolicious:
    Start using Mojolicious
branch-whatever:
    Description of the whatever branch

यह पुश-सक्षम और मर्ज-फ्रेंडली है। READMEकिसी भी शाखा से देखें :

git show branches-readme:README

नुकसान यह है कि आपको अजीब अनाथ शाखा की जांच करने की आवश्यकता होती है जब आप अपडेट करना चाहते हैं READMEऔर READMEशाखाएं नाम बदलने, आने या जाने के लिए ऑटो-अपडेट नहीं करती हैं। हालांकि यह हमारे लिए ठीक है।

इसे पसंद करें:

git checkout --orphan branches-readme
# All the files from the old branch are marked for addition - skip that
git reset --hard
# There are no files yet - an empty branch
ls
vi README
# put in contents similar to above
git add README
git commit -m "Initial description of the branches we already have"
git push origin branches-readme
# get all your original files back
git checkout master

सिमिलरी, टीम के अलग-अलग सदस्य branches-$userअपनी निजी शाखाओं का वर्णन करके अपनी स्वयं की अनाथ शाखाएँ भी बना सकते हैं , यदि वे चाहते हैं कि जब तक वे उन्हें टीम में न ले जाएँ।

आगे टूलींग के साथ यह भी के उत्पादन के साथ एकीकृत किया जा सकता है git branch। उस छोर तक, शायद README.yamlएक सादे के बजाय एक फ़ाइल पर विचार किया जा सकता है README


एक बस मास्टर में README हो सकता है। यह अव्यवस्था जोड़ देगा लेकिन हमेशा सुलभ होगा।
पीटर -

2
@ पीटरए. श्नाइडर: यकीन है, लेकिन फिर एक नई शाखा को जोड़ने के लिए मास्टर के लिए एक प्रतिबद्ध की आवश्यकता होगी, भले ही बदलाव का मास्टर के साथ क्या करना है। इसके अलावा, जब मास्टर ऑफ ब्रांचिंग होती है, तो आपके पास सभी शाखाओं में README की एक प्रति होगी, जो कि आईआईए मेस है।
पीटर वी। मॉरच

10
git config --global --add alias.about '!describe() { git config branch."$1".description; }; describe'

कमांड alias.aboutशेल अभिव्यक्ति के रूप में एक वैश्विक विकल्प को परिभाषित करेगा । git about <branch>सेट होने पर रिपॉजिटरी में चलने से शाखा का विवरण प्रदर्शित होगा।


4
धन्यवाद! मैंने इसे बदल दिया है इसलिए यह सिर्फ उस शाखा को देखता है जिस पर मैं हूँ -"!describe() { git config branch.\"$(git symbolic-ref --short -q HEAD)\".description; }; describe"
अगस्त

1
@ आईजी - मुझे यह काम करने के लिए तर्क उद्धरण के सामने बैकस्लैश को छोड़ने की जरूरत है:git config --global --add alias.about '!describe() { git config branch."$(git symbolic-ref --short -q HEAD)".description; }; describe'
टॉम ट्रान्सस्की

5

यहाँ git branchesग्रेग हेविगिल के आदेश का एक संभावित कार्यान्वयन है:

#!/usr/bin/perl

sub clean {
    map { s/^[\s\*]*\s// } @_;
    map { s/\s*$// } @_;
    return @_;
}

sub descr {
    $_ = `git config branch.@_.description`;
    s/\s*$//;
    return $_;
};
sub indent {
    $_ = shift;
    s/^/      /mg;
    return $_;
};

my @branches = clean `git branch --color=never --list`;
my %merged = map { $_ => 1 } clean `git branch --color=never --merged`;

for my $branch (@branches) {
    my $asis = `git branch --list --color=always $branch`;
    $asis =~ s/\s*$//;
    print "  $asis";
    print " \033[33m(merged)\033[0m" if ($merged{$branch} and $branch ne "master");
    print "\n";

    print indent descr $branch;
    print "\n";
    print "\n";
}

4

यहां git aliasवह है जो आपको वर्तमान शाखा पर विवरण सेट और पढ़ने दोनों देता है:

git config --global --add alias.about '!describe() { msg="$1"; git config branch."$(git rev-parse --abbrev-ref HEAD)".description ${msg:+"$msg"}; }; describe'

उपयोग / उदाहरण:

(develop) $ git about
(develop) $ git about message
(develop) $ git about
message
(develop) $ git about "this is a new message"
(develop) $ git about
this is a new message
(develop) $ git checkout -b test_branch
Switched to a new branch 'test_branch'
(test_branch) $ git about
(test_branch) $ git about "this is the test branch"
(test_branch) $ git about
this is the test branch
(test_branch) $ git checkout -
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
(develop) $ git about
this is a new message

मुझे मिले जवाब के लिए @ फेलियो को विशेष धन्यवाद।


अच्छा! क्या यह शेल या ओमेज़श के लिए संकलित हो सकता है?
मकलीउटी

2

आप टिप्पणियों को टैग में संलग्न कर सकते हैं:

git tag -m 'this was a very good commit' tag1

कन्वेंशन द्वारा, आप अपने शाखा नामों से संबंधित टैग लगा सकते हैं या आप अपनी विषय शाखाओं के प्रमुख पर टिप्पणी टैग रखने के लिए टैग -f का उपयोग कर सकते हैं।


13
यह आदर्श नहीं है क्योंकि यह शाखा के प्रमुख को ट्रैक नहीं करता है
एंडीएल

1

कहते हैं कि आप एक शाखा बनाना चाहते हैं

git branch branch-20200328
git notes add branch-20200328 -m "This branch is for whatever"
git notes show branch-20200328

0

मुझे पूरा यकीन है कि वर्तमान में यह सुविधा समर्थित नहीं है। मुझे लगता है कि आपकी सबसे अच्छी शर्त एक विवरण टेक्स्ट फ़ाइल, एक README मूल रूप से, उस शाखा में बनाना है जिसमें वह जानकारी है जो आप चाहते हैं।


4
मुझे इस फ़ाइल को शाखाओं में विलय करने (नहीं) के बारे में चिंता करनी होगी। मैं नहीं करूँगा?
नौफल इब्राहिम

1
@KaspervandenBerg: शायद सिर्फ -1 कार्ड को बाहर निकालने के बजाय एक टिप्पणी छोड़ दें, फिर कुछ समय प्रतीक्षा करें, और यदि पूछने वाला पोस्ट को बदलने के लिए तैयार नहीं है, लेकिन आप देखते हैं कि उसने इस बीच इस साइट का दौरा किया है विन्यास करें। या क्या आप नियमित रूप से अपने सभी उत्तरों को देखने के लिए देखते हैं कि क्या वे अभी भी सही हैं?
सेबस्टियन मच

1
@ सूत्र: अच्छा बिंदु; मेरा इरादा इस प्रश्न के भविष्य पूछने वालों की मदद करना था और अच्छे एवर्स ऊपर और गलत लोगों को नीचे तक जाना है, यह क्रिस जे को "दंडित" करने और उसे ढीली प्रतिष्ठा का कारण नहीं था। दुर्भाग्य से साइट का कहना है कि मेरा वोट बंद है :(।
कैस्पर वैन डेन बर्ग

1
@KaspervandenBerg: मुझे आपको दंडित करने का संदेह करने के लिए थोड़ा जल्दी था, क्षमा करें।
सेबेस्टियन मच

0

चयनित उत्तर मुझे ओवरकिल जैसा लगता है। मैं प्रति शाखा विवरण फ़ाइल को बनाए रखने के लिए इच्छुक हूं master.txt, जो एक सामान्य स्रोत नियंत्रित फ़ाइल है, कहते हैं dev.txt, आदि और अगर कोई अनिच्छुक संख्या या शाखाएं हैं तो मैं इसे बेहतर व्यवस्थित करने के लिए एक पदानुक्रम बनाऊंगा।


6
फिर आपको इन फ़ाइलों को हर दूसरी शाखा में मर्ज करने की चिंता करनी होगी, या याद रखना git show master:dev.txtहोगा कि चयनित उत्तर की तुलना में कोई सरल नहीं है।
श्रीधर रत्नाकुमार

0

महज प्रयोग करें:

git config branch.<branch name>.description

क्रेडिट देने के लिए जहां क्रेडिट देय है: https://glebbahmutov.com/blog/git-branches-with-desceap


यह मेरे द्वारा प्रश्न जोड़े जाने के बाद जारी किए गए git के एक संस्करण में जोड़ा गया था। स्वीकृत उत्तर में इसका उल्लेख है।
नौफल इब्राहिम

आह येस। टिप्पणियों में इसका उल्लेख है।
कालेब मिलर


-3

उपयोग

git branch --list -v

अपस्ट्रीम शाखा दिखाने के लिए:

git branch --list -vv

-rकेवल रीमोट्स दिखाने के लिए या -aरीमोट्स और लोकल दिखाने के लिए जोड़ें ।


इन के रूप में उपयोगी, मैं कुछ कस्टम के लिए देख रहा हूँ। किसी संदर्भ में संलग्न किसी प्रकार का एक नोट।
नौफल इब्राहिम

2
यह विवरण नहीं दिखाता है। मुझे लगता है कि यह उत्तर भ्रामक है।
पेटो संडाना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.