निर्देशिकाओं को कैसे ट्रैक करें लेकिन Git के साथ उनकी फाइलें नहीं?


85

मैंने हाल ही में Git का उपयोग करना शुरू कर दिया है और सिर्फ एक चीज से परेशान हूं। मैं उनकी सामग्री को ट्रैक किए बिना निर्देशिकाओं को कैसे ट्रैक कर सकता हूं?

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

मेरे .itignore में मेरे पास निम्नलिखित हैं:

अपलोड /*.*

भी कोशिश की है (जो पूरी निर्देशिका की उपेक्षा करता है):

अपलोड /

इस निर्देशिका में उप निर्देशिकाएं (अपलोड / अंगूठे / अपलोड / वीडियो /) शामिल हो सकती हैं, मैं इन पर नज़र रखना चाहूंगा लेकिन उनकी फ़ाइलों को नहीं।

क्या यह Git के साथ संभव है? मैंने हर जगह बिना उत्तर खोजे खोज ली है।


Git केवल फाइलों को ट्रैक करता है। आप जो कुछ भी कर सकते हैं वह गिट हुक के साथ खेल सकता है और एक फ़ाइल को ट्रैक कर सकता है जिसमें निर्देशिका लिस्टिंग (हुक का उपयोग करते हुए ऑटो-जनरेट) होगी। हालांकि मुझे पूरी तरह से यकीन नहीं है कि यह संभव होगा।
12:मोन तोथ

अधिक ठोस: गिट सामग्री को ट्रैक करता है और ( गिट के लिए) एक खाली निर्देशिका सामग्री नहीं है। आप बहस कर सकते हैं, आप सहमत हैं, या नहीं, लेकिन एक और "वर्कअराउंड" के रूप में आप बिल्ड / इंस्टाल / जब जरूरत पर निर्देशिका बनाने के बारे में सोच सकते हैं। हालाँकि: मैं .placeholder"-फाइल" -सॉल्यूशन का भी इस्तेमाल करता हूं ;)
किंगक्रंच

1
उपयोग के बजाय .होल्डर, मैं एक .itignore फ़ाइल का उपयोग करता हूं। न केवल यह निर्देशिका के भीतर बहिष्करण का ख्याल रखता है, बल्कि यह एक प्लेसहोल्डर के रूप में कार्य करता है।
अबिज़र्न

जवाबों:


113

Git निर्देशिकाओं को ट्रैक नहीं करता है, यह फ़ाइलों को ट्रैक करता है, इसलिए इसे प्राप्त करने के लिए आपको कम से कम एक फ़ाइल को ट्रैक करने की आवश्यकता है। तो यह मानते हुए कि आपकी .gitignoreफ़ाइल कुछ इस तरह है:

upload/*

तुम यह केर सकते हो:

$ touch upload/.placeholder
$ git add -f upload/.placeholder

यदि आप भूल जाते हैं तो -fआप देखेंगे:

$ git ऐड अपलोड / .होल्डर
निम्न पथों को आपकी .gitignore फ़ाइलों में से एक द्वारा अनदेखा किया जाता है:
डालना
उपयोग -f यदि आप वास्तव में उन्हें जोड़ना चाहते हैं।
घातक: कोई फ़ाइल नहीं जोड़ी गई

फिर जब आप git statusकरेंगे तो देखेंगे:

# शाखा मास्टर पर
#
# आरंभिक
#
# किए जाने वाले परिवर्तन:
# (उपयोग "git rm --cached ..." अस्थिर करने के लिए)
#
# नई फ़ाइल: अपलोड / .होल्डर
#

जाहिर है आप तब कर सकते हैं:

$ touch upload/images/.placeholder
$ git add -f upload/images/.placeholder

धन्यवाद, यह वही है जो मुझे चाहिए।
बेन

11
एक प्लेसहोल्डर के लिए एक आम सम्मेलन एक gitignore फ़ाइल है।
कैस्केबेल

2
@ जेफ्रोमी वास्तव में, एब्ज़र्न की मेरी टिप्पणी के रूप में, .gitignoreफ़ाइल को प्लेसहोल्डर के रूप में उपयोग करने पर कभी विचार नहीं किया था ।
पीटर किसान

1
उफ़, किसी तरह उन टिप्पणियों को याद किया।
कैस्केबेल

2
गिट निर्देशिकाओं को ट्रैक नहीं करता है, यह फाइलों को ट्रैक करता है जब वे आपको सिखाते हैं कि यह अजीब लगता है, सब कुछ यूनिक्स में एक फाइल है, यहां तक ​​कि एक निर्देशिका भी एक फाइल है
ग्रीन

38

मैंने यहाँ इस बारे में लिखा था ।

निर्देशिका के भीतर .gitignore जोड़ें।


1
अच्छा लेख और टिप्पणी! का उपयोग करने पर कभी विचार नहीं किया गया था। प्लेसहोल्डर फ़ाइल के रूप में .ignignore ....
पीटर किसान

धन्यवाद। मैंने केवल पोस्ट लिखकर और टिप्पणियां प्राप्त करके कुछ सीखा है।
Abizern

1
वहाँ एक लोकप्रिय नामकरण सम्मेलन का उपयोग करने के लिए अब लगता है.gitkeep
ताराबेटी

अभी मिला कि "हा-हा" कराहना, मैं चाहता हूं कि मैं 6 अलग-अलग समयों को
बढ़ा सकूं

27

मेरे द्वारा पाया गया सर्वश्रेष्ठ उत्तर इस सामग्री के साथ आपके अपलोड फ़ोल्डर में एक .gitignore फ़ाइल को शामिल करना है

# Ignore everything in this directory
*
# Except this file
!.gitignore

यहाँ आपके पास Git रिपॉजिटरी में खाली निर्देशिका कैसे जोड़ सकते हैं?


यह सबसे सुंदर समाधान है
मुहम्मद रायन मुहिम

13

अब तक का सबसे अच्छा समाधान:

1) .gitignore फ़ाइल बनाएँ

2) अंदर लिखें:

*
*/
!.gitignore

3) आप चाहते हैं कि फ़ोल्डर के लिए .gitignore फ़ाइल जोड़ें।

स्रोत: https://stackoverflow.com/a/5581995/2958543


6

केवल निर्देशिकाओं को ट्रैक करने के लिए लेकिन फाइलों को नहीं, मैंने निम्नलिखित कार्य किया। केवल पटरियां ट्रैक करने पर @ पीटरफ़ार्मर की टिप्पणी के लिए धन्यवाद, मैं सभी निर्देशिकाओं को रखने में सक्षम रहा हूँ जैसा कि नीचे वर्णित फाइलों में है।

# exclude everything in every folder
/data/**/*.*

# include only .gitkeep files
!/data/**/*.gitkeep

इसे .gitignore फ़ाइल में जोड़ने से काम हो जाएगा। निम्नलिखित मेरी फ़ोल्डर संरचना है।

data/
├── processed
│   ├── dataset1.csv
│   └── dataset2.csv
├── raw
│   ├── raw_dataset1.json
└── test
    ├── subfolder
    │   └── dataset2.csv
    └── reviews.csv

जब मैं करता हूं git add . && git status, git केवल फ़ोल्डर्स को पहचानता है, लेकिन फाइलें नहीं।

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   data/processed/.gitkeep
        new file:   data/raw/.gitkeep
        new file:   data/test/.gitkeep
        new file:   data/test/subfolder/.gitkeep

ध्यान रखें कि आपकी .gitignore फ़ाइलों के लिए निम्नलिखित:

पूर्व स्लैश केवल रूट निर्देशिका के लिए दिखता है।

/ dir

डबल तारांकन शून्य या अधिक निर्देशिकाओं के लिए दिखता है।

/ ** /


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