tfs

2010-07-13 11 views
5

में किसी फ़ोल्डर की सभी सामग्रियों को सूचीबद्ध करना tfs में फ़ोल्डर के किसी विशेष पथ को देखते हुए, मुझे किसी दिए गए परिवर्तन के लिए फ़ोल्डर के भीतर सभी फ़ाइलों और फ़ोल्डर्स को रिकर्सिवली रूप से ढूंढना होगा। दूसरे शब्दों में, मुझे किसी दिए गए परिवर्तन के लिए tfs में पथ के संक्रमणीय बंद होने की आवश्यकता है। ऐसा करने में मुझे जिस समस्या का सामना करना पड़ रहा है वह tfs के भीतर किसी विशेष फ़ोल्डर की सामग्री सूचीबद्ध कर रहा है .. सी # में यह कैसे संभव होगा?tfs

उत्तर

6

मैं आप चाहते हैं 'changeset एक्स के रूप में फ़ोल्डर की सामग्री' यह सोचते हैं रहा हूँ और नहीं 'फ़ोल्डर सामग्री कि changeset एक्स का हिस्सा थे'

GetIte एमएस सही कॉल उपयोग करने के लिए है, बस changeset आप में रुचि रखते हैं के लिए एक संस्करण कल्पना में पारित

http://msdn.microsoft.com/en-US/library/bb138911.aspx

हां, तो यह सोचते हैं आप पहले से ही VersionControlServer उदाहरण के लिए एक संदर्भ है:।

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full); 

यदि मुझे गलत समझा जाता है और आप 'फ़ोल्डर सामग्री को बदलना चाहते हैं जो कि परिवर्तनशील एक्स का हिस्सा थे', तो ऐसा करने के कुछ अलग तरीके हैं, लेकिन GetChangeset के साथ परिवर्तन प्राप्त करना और केवल Changes फ़िल्टर करना बहुत आसान है।

+0

पर जाने के लिए tfsPath को परिभाषित करते हैं, मुझे संस्करण spec के बारे में पता नहीं था। मुझे यही चाहिए था। धन्यवाद... – Sidd

-1

आप एक एक्सएमएल दस्तावेज प्राप्त करने के लिए चेंजसेट webservice का उपयोग कर सकते हैं जिसमें किसी विशेष परिवर्तन के लिए सभी बदले गए आइटम शामिल हैं। फिर बस बदले गए आइटमों की सूची के माध्यम से लूप करें और देखें कि वे उस पथ में हैं या नहीं, जिसे आप ढूंढ रहे हैं।

: http: // your_tfs_server /VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number & WebView = सच

+0

क्या मैं सिर्फ वर्जनकंट्रोलसेवर.getItems() और लूप थ्रो व्युत्पन्न सरणी कर सकता हूं। मैं बस इसे अभी कोशिश कर रहा हूं ... – Sidd

+0

डाउनवॉटेड (माफ करना डेविड)। आपको किसी भी (सामान्य) परिस्थितियों में ऐसा करने के लिए webservice का उपयोग नहीं करना चाहिए। ये आंतरिक हैं और बिना किसी सूचना के बदल सकते हैं। – Robaticus

2

कुछ इस तरह किया जा अधिक क्या आप देख रहे हैं हो सकता है

यहाँ changeset वेब सेवा के लिए URL है के लिये। यह एक परिवर्तन में सभी परिवर्तन हो जाता है और उनके द्वारा पुनरावृत्त होता है, दिए गए पथ में लोगों की पहचान करता है। यह एक LINQ क्वेरी के साथ छोटा किया जा सकता है, लेकिन मैं इसे जा रहा हूँ थोड़ा और मैं क्या कहने की कोशिश कर रहा हूँ का सार देने के लिए विस्तार किया:

TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService<VersionControlServer>(); 

    Changeset cs = vcs.GetChangeset(6284868); 

    foreach (Change change in cs.Changes) 
    { 
     if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src")) 
     { 
      System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}", 
       cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString())); 
     } 
    } 
+0

धन्यवाद .. लेकिन मुझे किसी विशेष बदलाव में आइटम की आवश्यकता नहीं है। मुझे tfs में दिए गए फ़ोल्डर के तहत सभी फ़ाइलों और फ़ोल्डर की आवश्यकता है। – Sidd

+1

फिर आप GetItems() का उपयोग कर सकते हैं ... हालांकि आपका प्रश्न परिवर्तन का उल्लेख करता है। – Robaticus

0

मुझे लगता है कि कुछ इस तरह काम करेगा ..


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService(); 
    ItemSet items; 

    items = vcs.GetItems(tfsPath, RecursionType.Full); 

आप किसी भी अन्य विचारों है, तो हें ..

+0

आप कोड उस भाग को याद कर रहे हैं जहां आप GetItems –