2011-03-21 12 views
13

शामिल करने के लिए अनुशंसित तरीका है मेरे पास रेल परियोजना पर एक रूबी है (गिट के साथ संस्करण) जिसमें कई सार्वजनिक जावास्क्रिप्ट निर्भरताएं शामिल हैं जो विभिन्न सार्वजनिक गिटहब भंडारों में मौजूद हैं। मेरे भंडार में उन निर्भरताओं को शामिल करने का सबसे अच्छा तरीका क्या है (एक तरफ, ज़ाहिर है, मैन्युअल रूप से उन्हें मैन्युअल रूप से कॉपी करने से) जिससे वे अपडेट होने पर नियंत्रण कर सकते हैं?गिट submodules, शाखाओं स्विचिंग, और बाहरी जेएस निर्भरताओं (ओह मेरा)

गिट submodules जाने के लिए सही तरीका प्रतीत होता है, लेकिन कई शाखाओं में स्विच करते समय यह समस्याएं पैदा करता है, जिनमें से कई एक ही submodules नहीं है।

Git submodules सबसे अच्छा तरीका यह करने के लिए कर रहे हैं, मुझे लगता है कि मेरा असली सवाल यह है: मैं इस समस्या में हर समय चलने के बिना कई शाखाओं के बीच submodules उपयोग कर सकते हैं कैसे:

my_project[feature/new_feature√]$ git submodule update 
Cloning into public/javascripts/vendor/rad_dependency... 
remote: Counting objects: 34, done. 
remote: Compressing objects: 100% (29/29), done. 
remote: Total 34 (delta 9), reused 0 (delta 0) 
Receiving objects: 100% (34/34), 12.21 KiB, done. 
Resolving deltas: 100% (9/9), done. 
Submodule path 'public/javascripts/vendor/rad_dependency': checked out '563b51c385297c40ff01fd2f095efb14dbe736e0' 

my_project[feature/new_feature√]$ git checkout develop 
warning: unable to rmdir public/javascripts/milkshake/lib/cf-exception-notifier-js: Directory not empty 
Switched to branch 'develop' 

my_project[develop⚡]$ git status 
# On branch develop 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# public/javascripts/milkshake/lib/cf-exception-notifier-js/ 
nothing added to commit but untracked files present (use "git add" to track) 

उत्तर

1

submodules का एक विकल्प subtree merge strategy है। उस पृष्ठ से कॉपी किया गया (इसे और अधिक जानकारी है, इस संदर्भ के लिए विशुद्ध रूप से है):

इस उदाहरण में, मान लीजिए कि आप पर/पथ भंडार/to/बी (डालते हैं, लेकिन यह के रूप में एक URL हो सकता है ठीक है अगर तुम्हारी इच्छा है)। आप की मास्टर शाखा को मर्ज करना चाहते हैं जो कि आपकी वर्तमान शाखा में डीआईआर-बी उपनिर्देशिका के लिए भंडार है।

$ git remote add -f Bproject /path/to/B 
$ git merge -s ours --no-commit Bproject/master <2> 
$ git read-tree --prefix=dir-B/ -u Bproject/master 
$ git commit -m "Merge B project as our subdirectory" 
$ git pull -s subtree Bproject master 

मैं व्यक्तिगत रूप से, बारीकियों इस लगता है (मैं भी issus आप उल्लेख किया है साथ submodules पसंद करते हैं,) हालांकि बहुत से लोगों को यह कसम:

यहाँ कमांड अनुक्रम आप की जरूरत है।

1

दोनों this blog और this post एक ही चेतावनी की रिपोर्ट करता है:

ऐसा इसलिए है क्योंकि इस समय सबमिशन हटाना अच्छी तरह से समर्थित नहीं है। गिट हैंडल को बेहतर बनाने के लिए बहुत सी चर्चा हुई है लेकिन किसी ने इसे अभी तक लागू नहीं किया है। लेकिन यह मेरी ToDo सूची पर है, इसलिए देखते रहें ...

(उस समय जेन्स लेहमन ने कहा, नवंबर 2010)।

अभी (मार्च 2011), मुझे उस मोर्चे पर कोई सुधार नहीं हुआ (या मुझे याद आया)।

git checkout -f -q develop आपके मामले में क्या करेगा?

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