मैंने सॉफ्टवेयर के tarball'd रिलीज को एक साथ रखा है जिसमें कई अलग-अलग परियोजनाओं से आउटपुट शामिल है। इन tarballs खुद को एक रिहाई माना जाता है। जारी टैरबॉल में बीओएम (सामग्री का बिल) शामिल है जो इसमें सभी परियोजनाओं और उनके संबंधित SHA1 (गिट) हस्ताक्षरों को कम करता है।मैं gnu बनाने के लिए एक गिट SHA1 कैसे पेश कर सकता हूं?
इन टैरबॉल को आसानी से पुनर्जीवित करने के लिए, मैंने एक मेक सिस्टम को एक साथ रखा है जो एक उपनिर्देशिका में भंडार को क्लोनिंग करने के लिए बीओएम लाइन-बाय-लाइन को पार करता है, फिर निर्दिष्ट संस्करण को देखकर निर्माण कर रहा है। कहो मेरी बीओएम में एक पंक्ति है:
prog-a b5286f27d65ef20eb4508f76de5a1c57d8b21d85 git+ssh://[email protected]/~/prog-a
भंडार, अगर पहले से ही क्लोन नहीं, repos/prog-a
में एक मेकअप (make -C repos/prog-a
) रखा जाएगा, तो एक चेकआउट किया जाता है (cd repos/prog-a; git checkout b5286f27d6
) और अंत में।
मुझे पता नहीं लगा कि कैसे gnu को यह तय करना है कि कोड के चेक किए गए संस्करण ने मुझे पहले से ही बाइनरी बनाया है या नहीं। वर्तमान में प्रत्येक एकल उप-परियोजना को चेकआउट और पुनर्निर्माण के लिए मजबूर किया जाता है।
मैं जीएनयू करने के लिए एक Git रेपो के SHA1 तो यह तय कर सकते हैं कि अगर परियोजना पुराना हो चुका है और (एक git checkout
प्रदर्शन से) अपडेट करने की आवश्यकता कैसे पेश कर सकते हैं?
[संपादित करें] यह मेरा पैटर्न फ़ाइल है:
REPO_DIR=materials
BOM=$(shell sed -r 's/([^ ]+).+/\1/' bom)
BOM_DIR=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1_' bom)
BOM_BLD=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1/\1_' bom)
.PHONY: clean dist-clean
all: $(BOM)
clean:
@rm $(BOM) $(BOM_BLD) -rf
dist-clean: clean
@rm $(REPO_DIR)
.SECONDEXPANSION:
$(BOM): % : $(REPO_DIR)/$$*/$$*
@echo " CP $< [email protected]"
@cp $< [email protected]
$(BOM_BLD): % : $$(*D)
@echo " GIT CHECKOUT"
@cd $<; git checkout -q $(shell sed -rn '/$(shell echo [email protected] | sed -r 's_.+/__')/ s/.+ (.+) .+ .+ .+/\1/p' bom)
@echo " MAKE [email protected]"
@make -w -C $< $(@F)
$(BOM_DIR): | materials
@echo " GIT CLONE [email protected]"
@cd $(REPO_DIR); git clone $(shell sed -rn '/$(shell echo [email protected] | sed -r 's_.+/__')/ s/.+ (.+) .+ .+/\1/p' bom)
materials:
@echo " MKDIR [email protected]"
@mkdir [email protected]
यदि चेकआउट केवल उन फ़ाइलों को प्रतिस्थापित करता है जिन्हें प्रतिस्थापित करने की आवश्यकता है, तो आप बिना शर्त के चेकआउट कर सकते हैं। क्या आप कह रहे हैं कि इसकी आवश्यकता से अधिक जगह बदलती है? – ikegami
नहीं, चेकआउट ठीक काम करता है, जैसा उप-प्रोजेक्ट करता है। मैं जो चाहता हूं वह शीर्ष स्तर है, यह देखते हुए कि उप-प्रोजेक्ट कौन सा चेक आउट संस्करण है, और यह निर्धारित करें कि यह बीओएम लाइन द्वारा आवश्यक/निर्दिष्ट है या नहीं। – Jamie
बस चेकआउट करें। 'मेक' निर्धारित करेगा कि फ़ाइल टाइमस्टैम्प पर आधारित कुछ भी करने की आवश्यकता है या नहीं। – ikegami