2013-02-08 11 views
12

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

अब मैं प्रोजेक्ट को तैनात करना चाहता हूं और इसलिए मुझे सबमिशन कोड भी चाहिए। git archive का उपयोग करके मुझे submodules से स्रोत फ़ाइलें/कोड नहीं मिलता है।

निम्नलिखित तीन दृष्टिकोण प्राप्त करने के लिए मैं क्या चाहते हैं की कोशिश लेकिन काम dont't: http://git.661346.n2.nabble.com/Running-git-archive-recursively-over-submodules-td4577012.html

में 1 दृष्टिकोण

#!/bin/sh 

export revision="$1" 

export GIT_INDEX_FILE=".git/tmpindex" 
rm -f "$GIT_INDEX_FILE" 

git read-tree $revision 

export up="$(pwd)" 

read_one_level() { 
     export GIT_ALTERNATE_OBJECT_DIRECTORIES="$GIT_ALTERNATE_OBJECT_DIRECTORIES":$(
      git submodule foreach 'echo "$up/$path/.git/objects"' | 
      grep -E -v '^(Entering|No submodule mapping found)' | 
      tr '\n' : | 
      sed 's/:$//' 
     ) 

     git submodule foreach ' 
       cd "$up" 
       subcommit=$(git rev-parse :"$path") 
       git rm --cached "$path" 
       git read-tree -i --prefix="$path/" $subcommit 
     ' >/dev/null 
} 

while git ls-files -s | grep -q ^160000; do 
    read_one_level 
done 

git archive --format=tar $(git write-tree) 

rm -f "$GIT_INDEX_FILE" 

थॉमस रास्ट यह मैं लिनक्स में दोनों के रूप में विंडोज पर त्रुटियों देता है कि कोई वस्तु फाइलें नहीं मिली हैं।

2 दृष्टिकोण https://github.com/meitar/git-archive-all.sh

विंडोज पर नहीं मिला mktemp के बारे में शिकायत नहीं है। और git archive के लिए कॉल को सही (git-archive से) राल में submodules देना नहीं है ... :(

3 दृष्टिकोण https://github.com/Kentzo/git-archive-all

नवीनतम अजगर 3.3 के लिए संगत नहीं होने से देखने की मेरी बात से पुरानी हो चुकी है और अभी भी पूरी तरह से 2.7 का उपयोग कर, क्योंकि samefile शिकायत से काम नहीं कर रहा

तो मेरे सवाल है:। वहाँ किसी भी हाल ही में जिस तरह से/दृष्टिकोण/निर्यात से निपटने के लिए submodules सहित एक Git परियोजना संग्रह है

?

या मुझे इस वर्कफ़्लो के लिए उपट्री की जांच करनी चाहिए?

अग्रिम

+0

मैं केंटज़ो/गिट-आर्काइव-सब का लेखक हूं। यह अब Python 3.3 संगत है। दूसरा मुद्दा क्या है? – Kentzo

उत्तर

4

https://github.com/Kentzo/git-archive-all धन्यवाद अब linux के तहत काम कर रहा है के रूप में @Kentzo कहा।

सिगविन पर्यावरण में (सिटविन इंस्टॉलर के माध्यम से गिट और पायथन स्थापित के साथ) यह वहां भी काम करता है।

2

हम, एक त्वरित बैश स्क्रिप्ट, जहां टार, मॉड्यूल और उप मॉड्यूल में संग्रह कर सकता है हम tars श्रेणीबद्ध और सेक, यहाँ यह 2 उप मॉड्यूल के साथ एक उदाहरण है के बाद:

#!/bin/bash 

set -e 

pwd=$(pwd) 
date=$(date +%Y%m%d) 
package=gitreponame 
branch=master 
name=tarbz2name 
submodule1=/src/app/sub1/ 
submodule2=/src/sub2/ 

pushd ${package} 
git checkout ${branch} 
git pull 
tag=$(git rev-list HEAD -n 1 | cut -c 1-7) 
git archive --prefix="${name}/" --format=tar master > "$pwd"/${name}-${date}-${tag}.tar 

git submodule update --init 

cd ${submodule1} 
git archive --prefix="${name}${submodule1}" --format=tar master > "$pwd"/sb1.tar 
cd - 

cd ${submodule2} 
git archive --prefix="${name}${submodule2}" --format=tar master > "$pwd"/sb2.tar 
popd 

tar -Af ${name}-${date}-${tag}.tar sb1.tar 
tar -Af ${name}-${date}-${tag}.tar sb2.tar 
bzip2 ${name}-${date}-${tag}.tar 
rm sb1.tar sb2.tar 
1

2 दृष्टिकोण : https://github.com/meitar/git-archive-all.sh एक स्टैंडअलोन बैश स्क्रिप्ट के रूप में तैनात है और अभी भी बनाए रखा प्रतीत होता है। मैंने इसे एक परियोजना के एक त्वरित सबमिशन समावेशी स्नैपशॉट लेने का एक आसान तरीका पाया। यह भी एक पहले संशोधन पर कब्जा कर सकते हैं (एक तरह से, नीचे देखें):

git-archive-all.sh --tree-ish (tag) ## for example 

समस्याओं कि या सौदा तोड़ने वाले नहीं हो सकता के एक जोड़े:

  • मैं भागा उपयोग करने के लिए कोशिश कर समस्याओं में --format विकल्प - लेकिन डिफ़ॉल्ट, tar, आमतौर पर काम किया।

  • (बहुत) बड़ी समस्या: यह मेरे सबमिशन पर कब्जा कर लिया, लेकिन केवल अपने वर्तमान संस्करण में - निर्दिष्ट संस्करण नहीं। ओह!

एक बैश स्क्रिप्ट होने के नाते, यह शायद लिनक्स संगतता परत (Cygwin) की तरह किसी तरह का Windows के तहत चलाने के लिए की आवश्यकता है।


ऐसा लगता है कि यह एक अंतर्निहित Git की क्षमता होना चाहिए - यह पटकथा के साथ एक साथ टुकड़ा भी जटिल है। मुझे लगता है कि बहुत से लोग submodules या गिट-संग्रह का उपयोग नहीं करते हैं, इसलिए कम से कम दोनों का उपयोग करना चाहते हैं।

+1

इस दृष्टिकोण का उल्लेखनीय लाभ था * यह पहले के संशोधन को भी कैप्चर कर सकता है * (हालांकि यह वास्तव में काम नहीं करता है)। मैं नहीं देखता कि स्वचालित रूप से @Kentzo समाधान के साथ इसे कैसे किया जाए। @ सर्जीओ समाधान ऐसा लगता है (सॉर्ट) ऐसा करता है, लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है। मुझे लगता है कि आपको इन समाधानों के * सभी * के साथ एक वास्तविक चेकआउट (और सबमिशन अपडेट) करना है - जो कुछ नियमित 'गिट आर्काइव' के लिए आवश्यक नहीं है। – nobar

1

मैं सभी submodules के साथ एक Git भंडार का एक पूरा संग्रह बनाने के लिए निम्न कोड

git archive -o release.zip HEAD 
git submodule --quiet foreach 'cd $toplevel; zip -ru release.zip $path' 

उपयोग कर रहा हूँ।

आप कल्पना होना चाहते हैं आप भी infozip का उपयोग कर के माध्यम से

echo -e "Repository:\n$(git rev-parse HEAD)\nSubmodule status:\n$(git submodule status)" | zip -u release.zip -z 

सभी जिप टिप्पणी खिड़कियों पर पुनर्लेखन कर सकते हैं।

संबंधित मुद्दे