कई गिट रिपोजिटरी का प्रबंधन


85

एक परियोजना को स्थापित करना आसान है और इसलिए मुझे छोटी स्क्रिप्ट के लिए भी अलग रिपॉजिटरी मिल सकती है। अब समस्या यह है कि उन्हें कैसे प्रबंधित किया जाए।

मैं इन रिपॉजिटरी के साथ कई जगहों पर काम करता हूं। जब मैंने कुछ रिपॉजिटरी में बदलाव किए हैं, तो मैं रिपॉजिटरी को अन्य स्थानों पर अपडेट करने में सक्षम होना चाहता हूं।

इसलिए मेरे पास एक निर्देशिका है जिसमें कई रिपॉजिटरी हैं।

  1. मैं उन सभी को कैसे ला सकता हूं?
  2. मैं कैसे जांच कर सकता हूं कि उनमें से किसी ने परिवर्तन नहीं किए हैं?
  3. मैं कैसे जांच सकता हूं कि उनमें से किसी में विलय के लिए बदलाव हैं या नहीं?

और एक कमांड के साथ ये करना अच्छा होगा।

आउटपुट को वास्तव में चीजों को नोटिस करने के लिए पर्याप्त रूप से चुप रहने की आवश्यकता है।


इसी सवाल का जवाब दिया hg mercurial
सर्ज स्ट्रोबंड

जवाबों:


44

मैं कई रिपॉजिटरी टूल mr की अत्यधिक अनुशंसा करता हूं । मैं कुछ समय के लिए दूसरों द्वारा सुझाई गई एक कस्टम शेल स्क्रिप्ट का उपयोग करता था, लेकिन श्री का उपयोग करने से मेरे लिए निम्नलिखित लाभ होते हैं:

  • यह सामान्य है: विभिन्न संस्करण नियंत्रण प्रणालियों के संयोजन का उपयोग किया जा सकता है, न केवल गिट (जैसे Mercurial, SVN, आदि)।
  • यह तेज़ है: श्री समानांतर में कई नौकरियों को निष्पादित कर सकता है। मैं कई प्रकार के git / mercurial repositories का उपयोग करता हूं और उन्हें दिन में कई बार सिंक करता हूं। श्री ने इस प्रक्रिया को बहुत तेज किया।
  • रिपॉजिटरी चेकआउट की सूची को प्रबंधित करना आसान और त्वरित है। अपनी कस्टम स्क्रिप्ट में परियोजनाओं की सूची को संशोधित करने के बजाय केवल 'mr रजिस्टर' का उपयोग करें।

मूक आउटपुट के बारे में आपके प्रश्न के बारे में: कमांड लाइन स्विच -q का उपयोग करके क्रिया के स्तर को संशोधित किया जा सकता है। मैं डिफ़ॉल्ट आउटपुट को पसंद करता हूं जो एक छोटे और स्पष्ट सारांश में अच्छी तरह से आउटपुट को एकीकृत करता है।

मैं श्रीमान कमांड के लिए निम्नलिखित उपनाम का उपयोग यह सुनिश्चित करने के लिए करता हूं कि श्री हमेशा $ $ में मेरी डिफ़ॉल्ट प्रोजेक्ट सूची संग्रहीत करता है, और 5 समानांतर थ्रेड्स का उपयोग करता है:

alias mr='mr -d ~/ -j 5 '

5
क्या यह विंडोज का समर्थन करता है?
फिट्जचेक यिट्चकी

यह बहुत अच्छा है, लेकिन (2016-08 तक) टैगिंग का समर्थन नहीं करता
ह्यूगो ज़रागोज़ा

@Cadbloke यह स्थापित पृष्ठ में विंडोज़ का उल्लेख नहीं करता है, लेकिन पर्ल स्क्रिप्ट के रूप में यह विंडोज़ पर काम कर सकता है / करना चाहिए।
scipilot

2
@ हगोजारगोज़ा, आप हमेशा इस आदेश को अपने द्वारा परिभाषित कर सकते हैं [DEFAULT] टैग = गिट टैग "$ @"
एलेक्स्स

2
alias pa='find . -name .git -print -execdir git pull \;'फिर, paपर्याप्त है
डॉनसॉन्ग

19

मुझे कहना होगा कि मैंने वर्तमान में स्वीकृत उत्तर (हेल्पर्स स्क्रिप्ट का एक गुच्छा जो रिपॉजिटरी पर पुनरावृति करता है) के साथ शुरू किया था, लेकिन सभी में, यह मेरे लिए एक कमी का अनुभव था।

इसलिए, श्री, रेपो और गिट-सबमॉड्यूल्स की कोशिश करने के बाद, मुझे प्रत्येक में एक अलग तरह की कमी पाई गई, इसलिए, मैंने अपना स्वयं का संस्करण करना समाप्त कर दिया: http://fabioz.github.io/mu-repo जो एक परिपक्व उपकरण है यह बिंदु - इसमें वर्कफ़्लोज़ है जो आपको निम्नलिखित की अनुमति देता है:

  • क्लोन कई repos
  • एकाधिक रिपॉज में वर्तमान परिवर्तनों को अलग करें (और संपादित करें)
  • आने वाले बदलावों का पूर्वावलोकन करें
  • समानांतर में कई रिपोज में कमांड चलाएं
  • रेपो के समूह बनाएँ
  • नॉन गिट-संबंधित कमांड को कई रिपोज पर चलाएं
  • आदि ( अधिक जानकारी के लिए होमपेज देखें )।

ध्यान दें कि यह किसी भी OS का समर्थन करता है जहां पायथन चलता है;)


आपका उत्तर बताता है कि म्यू-रेओ क्या करता है उससे बेहतर है। लेकिन म्यू-रेपो गैर गिट रिपोज का समर्थन नहीं करता है।
शौनक सोनटक्के

1
Whell, यह वास्तव में केवल git repos का समर्थन करने के लिए उद्देश्य है (जो कि प्रश्न पूछा गया है) - हालांकि आप mu sh <some command>कई repos में कुछ मनमाना कमांड निष्पादित करने के लिए भी कर सकते हैं , इसकी पूरी अंतिमता git के साथ काम कर रही है न कि अन्य संस्करण नियंत्रण प्रणालियों के साथ। , अगर आपको इसकी आवश्यकता है, तो हाँ, कृपया एक अलग उपकरण का उपयोग करें।
फैबियो ज़द्रोज़नी

14

जीआर (जीआईटी-रन) एमआर की कार्यक्षमता (केवल के लिएgit) का विस्तार करता है। मुझे इसकी टैग प्रणाली का उपयोग करके कई git repos को व्यवस्थित करना आसान लगता है। grहालाँकिइसके लिए कोडठीक नहीं है। यदि आप बैश का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आपफॉर्मके-t tagबजायइसका उपयोग करते हैं#tag


ऐसा लग रहा है कि तब से विकास थोड़ा पीछे चला गया है: github.com/mixu/gr/graphs/contributors
Dave Forgac

8

आप अपनी रिपॉजिटरी कहां हैं, यह निर्दिष्ट करने के लिए एक कस्टम फ़ाइल के साथ रेपो का उपयोग करने का प्रयास कर सकते manifest.xmlहैं। ऐसा करने के लिए कुछ प्रलेखन है

वैकल्पिक रूप से आप उपयोग कर सकते हैं git-submodule(1)


2
git-submodule अच्छा होगा, अगर मैं उसी राज्य में रिपॉजिटरी रखना चाहूंगा, लेकिन ऐसा नहीं है। प्रत्येक स्थान पर रिपॉजिटरी का सेट समान नहीं है। इसमें अनकम्फर्टेबल बदलाव हो सकते हैं। ऐसे परिवर्तन हो सकते हैं जिन्हें मैं अभी मर्ज नहीं करना चाहता।
iny

मैं git-submodule के बारे में नहीं जानता था। इसका उल्लेख करने के लिए धन्यवाद।
sykora 10

रेपो के लिए दस्तावेज़ीकरण काफी कम है और ऐसा लगता है कि यह विभिन्न प्रकार के काम प्रवाह के लिए है जिसका मैं उपयोग करना चाहता हूं।
iny

6

मैंने " रेपोज़ " नामक एक उपकरण लिखा था जो स्वचालित रूप से जैसे ही आप उन्हें क्लोन करते हैं या उदाहरण के लिए एक शाखा को स्विच करने की तरह उनमें कुछ भी बदलते हैं, रिपॉजिटरी को पता चलता है।

एक बार पाए जाने के बाद, रिपॉजिटरी को "ट्रैक" किया जाता है। यह उन्हें पॉज़िट-गिट से प्रेरित सघन स्थिति की जानकारी सहित स्थानीय रिपॉजिटरी की सूची में दिखाएगा । इसमें करंट ब्रांच और आगे की चीजें जैसे फाइल एडिट और इनकमिंग या आउटगोइंग कमिट्स की गिनती शामिल है।

रेपोज यूआई

यह आपके स्थानीय रिपॉजिटरी और अधूरे काम पर नज़र रखने या धक्का देने में मदद करता है। इसके अलावा, आप रिपॉजिटरी सूची को नेविगेशन से एक रिपॉजिटरी से दूसरे में स्विच करने के लिए उपयोग कर सकते हैं।

रेपोज नेविगेशन

"मैं उन सभी को कैसे ला सकता हूं?"

विंडोज के लिए संस्करण एक रिपॉजिटरी लाने या खींचने के लिए एक संदर्भ मेनू प्रदान करता है। बहु-चयन से आप एक साथ कई रिपॉजिटरी पर कार्रवाई चला सकते हैं।

हालाँकि, आपको एक और सुविधा बहुत उपयोगी लग सकती है:

रेपोज़ ऑटो-फ़ेच

ऑटो भ्रूण के साथ, आप रेपोज़ को पृष्ठभूमि में समय-समय पर अपने सभी गिट रिपॉजिटरी के अवशेष लाने के लिए कह सकते हैं। ये भ्रूण निश्चित रूप से आपके स्थानीय आवागमन से नहीं टकराएंगे। के साथ कोई स्थानीय मर्ज प्रयास नहीं हैं git pull


हाँ, बहुत बुरा है और योग्य नहीं है। किसी भी समय पीआर के लिए खोलें। मुझे याद दिलाएं।
वेचर

5

gitslave एक ऐसा उपकरण है जो सुपर और उप के बीच एक सुपरप्रोजेक्ट / सबप्रोजेक्ट संबंध बनाकर कई रिपॉजिटरी पर एक ही कमांड चला सकता है। यह (डिफ़ॉल्ट रूप से) आउटपुट सारांश प्रदान करता है ताकि आप रिपॉजिटरी पर ध्यान केंद्रित कर सकें जो अद्वितीय आउटपुट प्रदान करते हैं (गिट स्थिति के लिए उपयोगी है, जीआईटीएस-फाइलों के लिए इतना उपयोगी नहीं है)।

यह आमतौर पर उन परियोजनाओं के लिए उपयोग किया जाता है, जहां आपको कई रिपॉजिटरी को एक साथ इकट्ठा करने की आवश्यकता होती है और उन्हें एक ही समय या एक ही शाखा या टैग पर रखा जाता है। मेरी (नंगे) रिपॉजिटरी की निर्देशिका के लिए मेरे पास बस थोड़ा सा मेकफाइल है जो मुझे मनमाने ढंग से कमांड चलाने की सुविधा देता है, जिसे आप देखते हैं कि मैं प्राथमिक रूप से fsck और gc के लिए उपयोग करता हूं:

full: fsck-full gc-aggressive
        @:

fsck-full:
        for f in */.; do (cd $$f; echo $$f; git fsck --full || echo $$f FAILED); done

gc-aggressive:
        for f in */.; do (cd $$f; echo $$f; git gc --aggressive || echo $$f FAILED); done

%:
        for f in */.; do (cd $$f; git $@ || echo $$f FAILED); done

5

मैंने एक निर्देशिका (पुनरावर्ती) में उपलब्ध सभी रिपॉजिटरी पर किसी भी git कमांड को चलाने के लिए एक उपनाम और एक फ़ंक्शन बनाया है। आप इसे यहाँ पा सकते हैं: https://github.com/jaguililla/dotfiles/git

यह कोड है:

#!/bin/sh
# To use it: source git_aliases

# Example: rgita remote \;
alias rgita='find . -type d -name .git -execdir git'

# Example: rgit remote -vv
rgit() {
  rgita "$@" \;
}

आशा करता हूँ की ये काम करेगा :)


1
पतला और उपयोगी!
केविन चो

Fantatstic! सरल एक लाइनर में डालने के लिए .bash_aliases: alias rgit='function _rgit(){ find . -type d -name .git -printf "\n%p\n" -execdir git "$@" \;; }; _rgit'। स्रोत इसे, फिर जैसे कॉल करें rgit status
ford04

4

आप इसके लिए git-status-allमणि का उपयोग कर सकते हैं : https://github.com/reednj/git-status-all

# install the gem    
gem install git-status-all

# use the status-all subcommand to scan the directory
git status-all

एक भ्रूण विकल्प भी है जो स्थिति को प्रदर्शित करने से पहले सभी रिपॉजिटरी के लिए मूल से प्राप्त करेगा:

git status-all --fetch

गिट स्थिति


1
बहुत अच्छा दृष्टिकोण। अधिकांश उच्च मतदान उपकरण के विपरीत, पहले रिपॉजिटरी को पंजीकृत करने की कोई आवश्यकता नहीं है, इसके बजाय यह बस सभी उपनिर्देशिकाओं की जांच करता है।
ल्युएटर

find . -name .git -print -execdir git status \;ठीक है
डॉनसेन्ग

3

मैं इस स्क्रिप्ट का उपयोग अपने सभी रिपॉजिटरी में आसानी से git कमांड को निष्पादित करने के लिए करता हूं।

#!/bin/sh
if [ ! "$1" = "" ] ; then

   if [ "$GITREPO" = "" -a -d "$HOME/cm/src" ] ; then
      GITREPO="$HOME/cm/src"
   fi

   if [ "$GITREPO" != "" ] ; then

      echo "Git repositories found in $GITREPO"
      echo "-=-=-=-=-=-=-=-=-=-=-=-=-=-"

      DIRS="`/bin/ls -1 $GITREPO`"

      for dir in $DIRS ; do

         if [ -d $GITREPO/$dir/.git ] ; then
            echo "$dir -> git $1"
            cd $GITREPO/$dir ; git $@
            echo
         fi

      done
   else

      echo "Git repositories not found."

   fi
fi

डिफ़ॉल्ट रूप से स्क्रिप्ट ~ / cm / src में git रिपॉजिटरी की खोज करेगी लेकिन आप अपनी पसंद के अनुसार GITREPO पर्यावरण चर सेट करके इसे ओवरराइड कर सकते हैं।

यह स्क्रिप्ट पर आधारित है इस स्क्रिप्ट


find . -name .git -print -execdir git pull \;तुम क्या सोचते हो
डॉनसॉन्ग

3

मैंने मल्टीपल रिपोज को प्रबंधित करने के लिए गीता नामक कमांडलाइन टूल लिखा । यह उदाहरण के लिए, अगल-बगल पंजीकृत रेपो की स्थिति दर्शाता है

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

यह किसी भी कार्यशील निर्देशिका से git कमांड / उपनाम को भी सौंप सकता है।

अब इस टूल का उपयोग करके अपने प्रश्नों का उत्तर दें:

मैं उन सभी को कैसे ला सकता हूं?

gita fetch

मैं कैसे जांच कर सकता हूं कि उनमें से किसी ने परिवर्तन नहीं किए हैं?

gita lsआदेश से पता चलता है 3 संभव प्रतीकों शाखा का नाम, जो इंगित करता करने के लिए अगले

  • +: परिवर्तन का मंचन किया
  • *: अस्थिर परिवर्तन
  • _: अनट्रैक की गई फाइलें / फोल्डर

मैं कैसे जांच सकता हूं कि उनमें से किसी में विलय के लिए बदलाव हैं या नहीं?

शाखा के नाम 5 तरीकों से रंगीन हैं

  • सफेद: स्थानीय शाखा की कोई दूरस्थ शाखा नहीं है
  • हरा: स्थानीय शाखा दूरस्थ शाखा के समान है
  • लाल: स्थानीय शाखा को दूरस्थ शाखा से बदल दिया गया है
  • बैंगनी: स्थानीय शाखा दूरस्थ शाखा से आगे है (पुश के लिए अच्छा है)
  • पीला: स्थानीय शाखा दूरस्थ शाखा के पीछे है (मर्ज के लिए अच्छा)

इसे स्थापित करने के लिए, बस चलाएं

pip3 install -U gita

2

अगर कोई अभी भी इस धागे को देख रहा है तो कृपया मेरे शेल स्क्रिप्ट को चेक करें जिसे gitme कहा जाता है

आपको अपने स्थानीय गिट रिपॉज़ को मैन्युअल रूप से इनपुट करने की आवश्यकता होगी लेकिन मैं इस टूल का उपयोग रोज़ाना कई कंप्यूटरों पर कई git प्रोजेक्ट्स को सहयोग करने के लिए करता हूँ।

तुम दौड़ सकते हो git clone https://github.com/robbenz/gitme.git

स्क्रिप्ट भी नीचे पोस्ट की गई है

#!/bin/bash -e

REPOS=( 
/Users/you/gitrepo1
/Users/you/gitrepo2
/Users/you/gitrepo3
/Users/you/gitrepo4
)

MOVE="Moving to next REPO... \n" 

tput setaf 2;echo "What ya wanna do? You can say push, pull, commit, ftp push, or status"; tput sgr0

read input

if [ $input =  "commit" ]
then
    tput setaf 2;echo "Do you want a unique commit message? [y/n]";tput sgr0
    read ans
    if [ $ans = "y" ]
    then 
        for i in "${REPOS[@]}"
        do
            cd "$i"
            tput setaf 6;pwd;tput sgr0 
            git add . -A
            read -p "Commit description: " desc  
            git commit -m "$desc"
            tput setaf 2;echo  $MOVE;tput sgr0 
            sleep 1
        done 
    else 
        for i in "${REPOS[@]}"
        do
            cd "$i"
            tput setaf 6;pwd;tput sgr0 
            git add . -A
            git commit -m "autocommit backup point"
            tput setaf 2;echo  $MOVE;tput sgr0 
            sleep 1
        done
    fi 
elif [ $input = "push" ] || [ $input = "pull" ] || [ $input = "ftp push" ] || [ $input = "status" ]
    then
        for i in "${REPOS[@]}"
do
    cd "$i"
    tput setaf 6;pwd;tput sgr0 
    git $input 
    tput setaf 2;echo  $MOVE;tput sgr0 
    sleep 1
    done 
else tput setaf 1;echo "You have zero friends";tput sgr0 
fi

मैंने अपने ~ / .bash_profile में एक उपनाम सेट किया है alias gitme='sh /path/to/gitme.sh'


1

आपको सीपीएएन पर ऋतिक की जांच करनी चाहिए जो एक निर्देशिका ट्री में सभी रिपॉजिटरी पर गिट कमांड को पुन: कार्यान्वित करता है।

डॉक्स से:

यह उपयोगिता एक रूट डायरेक्टरी में खोज करती है (जो वर्तमान वर्किंग डाइरेक्टरी हो सकती है - या यदि इसे सेट किया गया है - GIT_DIR पर्यावरण चर द्वारा दी गई डायरेक्टरी) सभी git रिपॉजिटरी के लिए, रिपॉजिटरी पाथ द्वारा इस लिस्ट को क्रमबद्ध करें, प्रत्येक में chdir उन्हें, और निर्दिष्ट git कमांड निष्पादित करता है।


1

मैंने सिर्फ एक टूल बनाया है जो आप चाहते हैं!

  1. मैं उन सभी को कैसे ला सकता हूं? gmaster fetch
  2. मैं कैसे जांच कर सकता हूं कि उनमें से किसी ने परिवर्तन नहीं किए हैं? gmaster status
  3. मैं कैसे जांच सकता हूं कि उनमें से किसी में विलय के लिए बदलाव हैं या नहीं? gmaster status

इसे gitmaster कहा जाता है: https://github.com/francoiscabrol/gitmaster


1

मैंने इस सरल बैश फ़ंक्शन को अपने .bash_profile में git, maven, gradle, या किसी भी अन्य bash कमांड को सभी git रिपॉजिटरी में चलाने में सक्षम होने के लिए लिखा है:

# usefull function to work with multiple git repositories
all() {
    failed=0
    printf '>>> START RUNNING: "%s" >>>' "$*"
    for d in */; do
        pushd "$d" > /dev/null
        if [ -d ".git" ]
        then
            printf '\n--------------------------------------------\n\n'
            pwd
            eval $@
            if [ $? -ne 0 ]
            then
                failed=1
                break;
            fi
        fi
        popd > /dev/null
    done
    if [ $failed -eq 0 ]
    then
        printf '\n--------------------------------------------\n'
        printf '<<< RAN "%s" WITH SUCCESS!!! <<<' "$*"
    else
        printf '\n<<< FAILED!!! <<<'
    fi
}

यह इस तरह से इस्तेमाल किया जा सकता है

all git st
all git pull
all ./gradlew clean test
etc.

सब 'साफ परीक्षण और ./gradlew': एक भी उपयोग कर समानांतर में उन सब को चला सकते हैं
ChaudPain

0

अस्वीकरण: मैं www.repoflow.com पर इस टूल पर काम कर रहा हूं

मैं उन सभी को कैसे ला सकता हूं?
मैं कैसे जांच सकता हूं कि उनमें से किसी में विलय के लिए बदलाव हैं या नहीं?

  • आप सभी शामिल किए गए रिपॉजिटरी (या पुश / पुल / कमिट) कर सकते हैं, लाने के बाद यूआई को नए रिपॉजिटरी राज्य के साथ अपडेट किया जाएगा, यदि रिपॉजिटरी को डायवर्ट किया गया है तो आप इस तरह के संघर्षों को देख सकते हैं और उन्हें मर्ज कर सकते हैं।

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

मैं कैसे जांच कर सकता हूं कि उनमें से किसी ने परिवर्तन नहीं किए हैं?

  • UI पर आप प्रत्येक रिपॉजिटरी के लिए फ़ाइलों की स्थिति देख सकते हैं (आप उन्हें व्यक्तिगत रूप से या थोक में जोड़ / हटा सकते हैं)।

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

मैं इस पर काम कर रहा हूं, लेकिन यह ओपी प्रश्नों को भी हल कर रहा है और सामान्य रूप से कई रिपॉजिटरी का प्रबंधन करने में मदद करता है, आप अपनी खुद की स्क्रिप्ट बनाने के लिए यूआई या अंतर्निहित ग्राफकॉल एपीआई का उपयोग कर सकते हैं, कृपया इसे एक अन्य विकल्प के रूप में मानें।


0

सभी एकाधिक रिपॉजिटरी लाने के लिए एक आसान उपकरण है। git-pull-allएसिंक्रोनस रूप से कई गिट रिपोजिटरी पर निष्पादित करने के लिए एक कमांड लाइन टूल है।

स्थापना

npm install -g git-pull-all

प्रयोग

मान लें कि आपके पास ये फ़ाइलें और निर्देशिकाएं हैं:

~/Projects/
  cool-examples/
    .git/
  funny-movies/
  my-todos.txt
  super-express/
    .git/

जब आप डायरेक्टरी git-pull-allपर कमांड चलाते हैं ~/Projects, तो उसे चाइल्ड गिट रिपॉजिटरी (उपरोक्त मामले में कूल-उदाहरण और सुपर-एक्सप्रेस ) मिलनी चाहिए। फिर git pullउनमें से प्रत्येक पर अमल करें।

$ cd ~/Projects
$ git-pull-all
funny-movies/
Not a git repository
cool-examples/
Already up-to-date.
super-express/
Already up-to-date.
Done!
git-pull-all ~/Projects

गिटहब लिंक: https://github.com/tatsuyaoiw/git-pull-all


0

मैं Visual Studio कोड का उपयोग करता हूं। हमारे पास कोडबेस में लगभग 20 पुस्तकालय हैं जो सभी अलग-अलग गिट रेपो हैं, और विज़ुअल स्टूडियो कोड में स्रोत नियंत्रण टैब एक "एक नज़र में" यह देखने के लिए बहुत अच्छा है कि स्थानीय रिपोज कितने आगे या पीछे हैं। उस जानकारी को अद्यतित रखने के लिए समय-समय पर सेटिंग्स होती हैं, साथ ही एक ताज़ा बटन भी।

यह स्क्रिप्ट की तरह सुविधाजनक नहीं है, लेकिन जब यह मेरे लिए स्रोत नियंत्रण की बात आती है तो मैं बदलाव करना पसंद करता हूं। परिवर्तनों को अधिलेखित न करने के लिए सावधानी बरतने के लिए यह एक बहुत अच्छी तरह से लिखी गई स्क्रिप्ट है, वीएस कोड दृष्टिकोण के साथ, आपको जल्दी से अच्छी मात्रा में जानकारी मिलती है जो आप खुद पर कार्रवाई कर सकते हैं।

यहाँ एक स्क्रीनशॉट है जो यह दिखता है:

वीएस कोड में स्रोत नियंत्रण खिड़की


0

मुझे सभी उप-निर्देशिकाओं से वर्तमान शाखा से खींचने के लिए एक बढ़िया समाधान मिला है। जिनके पास एक .गित फ़ोल्डर है, भले ही प्रत्येक रेपो की एक अलग शाखा हो। कमांड एक-लाइनर है, जो विभिन्न गिट कमांड के लिए संशोधित करने के लिए पर्याप्त लचीला है, और इसे अलियास किया जा सकता है।

बस निम्नलिखित को कॉपी और पेस्ट करें:

find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;

इसे तोड़कर:

find . -type d -maxdepth 2 -name .git 

वर्तमान निर्देशिका में सभी निर्देशिका (-type d) ढूंढें (ढूंढें।) जिसका नाम ".git" (.name) (-गीत) है, अधिकतम दो निर्देशिकाओं को गहराई से देख रहा है (2 के बजाय 1) क्योंकि हम खोज रहे हैं। git रेपो फोल्डर के अंदर git फोल्डर)।

-exec sh -c 

निम्नलिखित शेल कमांड चलाएं (निष्पादन श-सी)

'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'

निर्देशिका को पहले तर्क में बदलें (सीडी $ 0), फिर निर्देशिका को एक स्तर तक बदल दें। .it फ़ोल्डर (cd ..) को छोड़ने के लिए फिर git को मूल-पार्स चलाकर शाखा को निर्दिष्ट करते हुए मूल खींचते हैं ... वर्तमान शाखा के लिए ... हेड कमिट।

{} \;

"{}" परिणामी पथ है जो हमें प्रारंभिक खोज कमांड से मिलता है । ; कमांड को समाप्त करने के लिए उपयोग किया जाता है।

ZOS पर MacOS 10.14.6 पर परीक्षण किया गया। जैसा कि, केवल तभी काम करता है जब दूरस्थ और स्थानीय शाखाओं को एक ही नाम दिया जाता है, AFAIK।

आप स्थिति प्राप्त करने के लिए इसे संशोधित कर सकते हैं। मुझे उम्मीद है कि आप इसे और अधिक लचीला बनाने के लिए तर्क जोड़ने में सक्षम हो सकते हैं लेकिन मैंने अभी तक कोशिश नहीं की है।


-1

https://github.com/wwjamieson3/envisionTools में gitstat नामक एक बैश स्क्रिप्ट है जो ऐसा करती है और यह पूरी तरह से अधिक है। यह GNU और मैक संगत है। अगर यह कहा जाता है कि यह remotes से प्राप्त कर सकते हैं। यह अनट्रैक, संशोधित, जोड़ी गई, हटाई गई और मंचित फ़ाइलों को दिखाता है। यह रीमोट और अनपेक्षित लोकल कॉम्पट पर अनमैरिड कमिट दिखा कर रीमोट के साथ अंतर करता है। यह सारांश या विस्तृत मोड और यहां तक ​​कि HTML में रंग कोडित परिणाम भी प्रदर्शित कर सकता है। यह खोजने के बजाय खोज का उपयोग करता है क्योंकि यह असीम रूप से तेज़ है और यदि यह बहुत पुराना हो रहा है तो अपने खोज डेटाबेस को अपडेट करने के लिए भी संकेत देगा।


2
अपना उत्तर पोस्ट करने के लिए धन्यवाद! कृपया सेल्फ-प्रमोशन पर अक्सर पूछे जाने वाले प्रश्नों को ध्यान से पढ़ें । यह भी ध्यान दें कि यह आवश्यक है कि आप अपनी साइट / उत्पाद से लिंक करने पर हर बार एक अस्वीकरण पोस्ट करें।
एंड्रयू बार्बर

3
दुर्भाग्य से, github wwjamieson3 / envisionTools लिंक टूट गया है।
ब्रेंडा जे। बटलर

@williamJamieson envisionTools एक निजी GitHub रिपॉजिटरी है?
eebbesen

-5

ऐसा लगता है कि ऐसा करने के लिए स्क्रिप्ट लिखना काफी आसान है। अनिवार्य रूप से इसे रिपॉजिटरी पर पुनरावृति करने की जरूरत है और फिर git ls-files, git diff और git log जैसी कमांड का उपयोग करना चाहिए।


मुझे पता है कि देर हो चुकी है, लेकिन क्या आप स्क्रिप्ट प्रकाशित कर सकते हैं?
l0b0

कोई "स्क्रिप्ट" नहीं है। मैं एक स्क्रिप्ट का उपयोग कर रहा हूं जिसे मैंने अपनी जरूरतों के लिए लिखा है, लेकिन यह सामान्य नहीं है।
iny

"गिट डिफरेंट" वास्तव में मुश्किल है यदि आप एक एकल फ़ाइल प्राप्त करना चाहते हैं जिसे एक पैच पैच कमांड के साथ वापस और फिर से लागू किया जा सकता है।
प्रोक्सी

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