2010-07-20 7 views
45

मैं ऑटोोटूल के लिए नया हूं और मैं एक सी परियोजना पर काम कर रहा हूं। मैं अपनी परियोजना को एक गिट भंडार में जोड़ना चाहता हूं। Autotools द्वारा उत्पन्न कौन सी फाइलें मुझे अपने संस्करण नियंत्रण प्रणाली में ट्रैक करने की आवश्यकता है और जिसे अनदेखा किया जाना चाहिए?Autotools द्वारा जेनरेट की गई फ़ाइलों को मुझे वर्जन कंट्रोल रिपोजिटरी में रखना चाहिए?

उत्तर

59

आपको किसी भी फाइल को संस्करण नियंत्रण के तहत नहीं रखना चाहिए जो हाथ से संपादित नहीं है। इसका मतलब है कि किसी भी जेनरेट की गई फ़ाइल को संस्करण नियंत्रण प्रणाली द्वारा अनदेखा किया जाना चाहिए। मैं मूल रूप से केवल डाल संस्करण नियंत्रण में निम्नलिखित:

  • configure.ac
  • Makefile.am
  • प्रलेखन फ़ाइलों जैसे AUTHORS, NEWS आदि
  • उपनिर्देशिका में Makefile.am

पता करने के लिए एस द्वारा लाया गया "तैयार करने के लिए स्थापित" संस्करण होने का बिंदु Arron, कुछ लोगों को परियोजना की मूल निर्देशिका में एक स्क्रिप्ट शामिल है, जिसे bootstrap या autogen.sh कहा जाता है, जब आप एक नई प्रतिलिपि देखते हैं तो आप एक बार दौड़ते हैं। आप मेरी परियोजनाओं में से एक में here में एक उदाहरण देख सकते हैं।एक सरल परियोजना के लिए, अपने autogen.sh वास्तव में केवल एक ही लाइन से मिलकर करने की जरूरत है:

autoreconf --install || exit 1 

हालांकि कुछ लोगों autogen.sh के अंत में स्वचालित रूप से ./configure चलाने के लिए पसंद करते हैं।

संस्करण नियंत्रण में सभी जेनरेट की गई फ़ाइलों को ट्रैक क्यों न करें? चूंकि उनकी सामग्री उस मशीन पर निर्भर करती है जिस पर आप निर्माण कर रहे हैं, ऑटोटूल के संस्करण जो आपने उन्हें उत्पन्न किया है, और चंद्रमा का चरण। इन परिवर्तनों में से कोई भी समय, जेनरेट की गई ऑटोोटूल फाइलें बदलेगी, और आपको अपने कामों में बहुत जंक मिलेगा।

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

VonC के बारे में सी परियोजनाओं एक configure फ़ाइल के साथ आ रहा है Makefile रों उत्पन्न करने के लिए क्या कहते हैं संस्करण से प्रतियां हाल में चेक आउट के लिए जरूरी स्रोत कोड वितरण (.tar.gz फ़ाइल है कि आप जब आप लिखते हैं make dist मिलता है), लेकिन नहीं के लिए सच है नियंत्रण।

+0

मैं सहमत हूं। +1 (और मेरा उत्तर सामुदायिक विकी के रूप में रखें) – VonC

+1

यदि आप m4 निर्देशिका में कोई कस्टम मैक्रोज़ जोड़ते हैं तो उन्हें भी जोड़ा जाना चाहिए। – ext

+0

उत्तर और सुझावों के लिए धन्यवाद :) हालांकि मैं चाहता था कि मेरी परियोजना सीधे इंस्टॉल करने योग्य प्रारूप में हो, लेकिन मुझे विश्वास है कि autogen.sh जैसी स्क्रिप्ट बनाना एक बेहतर विकल्प है। –

-2

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

+9

आप मेकफ़ाइल को रिपोजिटरी में बिल्कुल नहीं डाल सकते हैं। रेपो में Makefile.in के शामिल करने के बारे में कुछ बहस है (वे नहीं होना चाहिए, क्योंकि 'तैयार करने के लिए' संस्करणों को केवल टैरबॉल के रूप में मौजूद होना चाहिए) लेकिन मेकफ़ाइल को रेपो में रखना बिल्कुल गलत है। कॉन्फ़िगर स्क्रिप्ट का पूरा बिंदु किसी विशेष मशीन के लिए मेकफ़ाइल (एट अल) विशिष्ट बनाना है, और मेकफ़ाइल प्लेटफ़ॉर्म के आधार पर भिन्न होने के लिए उत्तरदायी है। कॉन्फ़िगरेशन द्वारा उत्पन्न कुछ भी रेपो –

11

नोट: मैं ptomato के answer से सहमत हूं, और इस उत्तर को समुदाय विकी के रूप में छोड़ दें।
यह स्रोत कोड वितरण के लिए समझ में आता है, लेकिन आपकी परियोजना एक नहीं हो सकती है।
विकास के उद्देश्य के लिए, ptomato का जवाब अधिक समझ में आता है।


सभी सी परियोजनाओं आम तौर पर एक कॉन्फ़िगर फ़ाइल वास्तविक संकलन के लिए इस्तेमाल किया Makefile उत्पन्न करने में सक्षम के साथ आता है।

तो जब आप ऑटोोटूल श्रृंखला पर विचार करते हैं, तो मैं कॉन्फ़िगरेशन फ़ाइल तक जेनरेट की गई सभी फ़ाइलों को संस्करणित करने की अनुशंसा करता हूं, क्योंकि वे आम तौर पर एक बार पीढ़ी के ऑपरेशन होते हैं।

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/309px-Autoconf.svg.png

का मतलब है अपने संस्करण परियोजना का एक चेक आउट प्रति के साथ किसी को भी तुरंत शुरू यही कारण है कि कर सकते हैं:

./configure 
make 
make install 

तो, जबकि यह आम तौर पर सच आप संस्करण किसी न उत्पन्न चाहिए फ़ाइलें, आप कर सकते थे है उन लोगों को संग्रहीत किया गया है, खासकर यदि उस प्रोजेक्ट से अन्य पाठक:

  • उन फ़ाइलों को पुन: उत्पन्न करने से लाभ नहीं है (एक समान परिणाम के लिए)
  • कॉन्फ़िगर और संकलित करने के लिए तत्काल प्रारंभ करें।
+3

में हो सकता है, मुझे लगता है कि आप इस बात से उलझन में हैं कि स्रोत कोड वितरण क्या है - प्रत्येक प्रोजेक्ट में एक है, लेकिन यह संस्करण नियंत्रण में जो भी रखा जाता है, वही नहीं है। स्रोत कोड वितरण में उन फ़ाइलों को शामिल करना चाहिए जो _users_ को प्रोजेक्ट बनाने की आवश्यकता है; संस्करण नियंत्रण में उन फ़ाइलों को शामिल करना चाहिए जो _developers_ को प्रोजेक्ट बनाने की आवश्यकता है। – ptomato

+1

@ptomato: फिर से, मैं सहमत हूं। बात यह है कि, मैं इन दिनों स्रोत कोड वितरण प्रोजेक्ट को पुन: संकलित करता हूं (लेकिन मैं उन्हें विकसित नहीं करता)। इसलिए वीसीएस में क्या हो सकता है इसकी मेरी "तिरछी" दृष्टि। – VonC

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