2013-05-28 5 views
5

टीएफएस का उपयोग करके, मेरे पास ट्रंक $/project/trunk और एक शाखा $/project/dev/feature/new_one है।विलय वाली शाखा के tfs पथ

मैं ट्रंक करने के लिए वापस अपनी शाखा विलय कर दिया है इस प्रकार है:

C33($/project/trunk) 
| \ 
| \ 
| C32($/project/dev/feature/new_one) 
|  | 
|  | 
|  | 
... 

मैं TFS एपीआई का उपयोग और मर्ज changeset C33 पा सकते हैं। विधि QueryMerges() के साथ, मैं फ़ाइलों पर सभी परिवर्तनों के साथ माता-पिता changeset C32 ढूँढने में सक्षम हूँ, लेकिन नहीं जानकारी मैं कोई तरीका होना चाहिए :(

वहाँ है, TFS एपीआई का उपयोग कर, भंडार खोजने के लिए शाखा के पथ विलय कर दिया $/project/dev/feature/new_one?

changeset C32 के साथ, मैं केवल $/project/dev/feature/new_one/path/to/file.txt की तरह, संशोधित फ़ाइलों का पथ प्राप्त करने में सक्षम हूँ, लेकिन मैं फ़ाइल का पूर्ण पथ से शाखा के रास्ते निकालने में असमर्थ हूँ :(

पीएस: टीएफएस 2008 के बाद से काम करने वाला एक समाधान सबसे अच्छा होगा, लेकिन अगर यह 2010 से ही काम करता है, तो यह अच्छा होना चाहिए ...

पीएस 2: इस समस्या को हल Git-TFS जो मैं विकसित में changesets विलय का प्रबंधन करने में मदद मिलेगी ...

उत्तर

5

दुर्भाग्य से किसी खास आइटम पथ है, जो आपको लगता है होता है के लिए एक शाखा पाने के लिए कोई एपीआई विधि है एक काफी आम उपयोग मामले।

टीएफएस 2010 के बाद आप संस्करण नियंत्रण में सभी शाखाओं से पूछने के लिए VersionControlServer.QueryRootBranchObjects का उपयोग कर सकते हैं। इस विधि के पैरामीटर के रूप में RecursionType.Full का उपयोग करके आपको सभी शाखाओं की सरणी मिलेगी, जिनमें कोई माता-पिता और उनके सभी वंशज नहीं होंगे। इसके बाद आप इस प्रकार किसी दिए गए फ़ाइल पथ के लिए एक शाखा का निर्धारण कर सकते हैं:

var collection = new TfsTeamProjectCollection(new Uri("http://tfsuri")); 
var versionControl = collection.GetService<VersionControlServer>(); 

var branchObjects = versionControl.QueryRootBranchObjects(RecursionType.Full); 

var mergeFilePath = "$/project/dev/feature/new_one/path/to/file.txt"; 
var branch = branchObjects.SingleOrDefault(b => { 
      var branchPath = b.Properties.RootItem.Item; 
      return mergeFilePath.StartsWith(branchPath.EndsWith("/") ? branchPath : branchPath + "/"); 
     }); 

Console.WriteLine(branch.Properties.RootItem.Item); 

दिखाया गया है, शाखा करने के लिए पथ BranchObject.Properties.RootItem.Item पर है। मेरा मानना ​​है कि सरणी में प्रासंगिक BranchObject को सुरक्षित करना सुरक्षित है, यह जांचकर कि कौन सी शाखा का पथ विलय फ़ाइल के पथ में निहित है (यह दिया गया है कि यह केवल एक शाखा में संभव है क्योंकि टीएफएस लागू करता है कि किसी एक फ़ोल्डर में केवल एक शाखा मौजूद हो सकती है पदानुक्रम)।

बस जागरूक होने के लिए, मुझे this द्वारा जला दिया गया है TFS 2012 में QueryRootBranchObjects का उपयोग करते समय समस्या कनेक्ट करें। कारण कुछ नकली शाखाएं थीं जिनके पास शाखा नाम में एस्ट्रोफेश थे।

इस के लिए कामकाज VersionControlServer.QueryBranchObjects का उपयोग करना है, हालांकि यह एक आइटम पहचानकर्ता लेता है जो शाखा का सही मार्ग है। स्पष्ट रूप से आप इस बिंदु पर शाखा पथ नहीं जानते हैं क्योंकि आपके पास फ़ाइल पथ है, इसलिए आपको फ़ाइल पथ की निर्देशिकाओं को फिर से दर्ज करना होगा जब तक कि आप एक मैच प्राप्त न करें QueryBranchObjects

+0

यह समाधान मेरा फॉलबैक है लेकिन यह मुझे 2 कारणों से नहीं खुश करता है: 1. यदि आपकी मूल शाखा शाखा नहीं है लेकिन फिर भी टीएफएस में एक फ़ोल्डर है, तो आप इसे QueryRootBranchObjects() से प्राप्त कर सकते हैं और नहीं कर सकते इसे 2. यदि आपके पास कई शाखाएं हैं देव, dev/test, dev/test2, dev/test3 और आपके स्रोत कोड में आपके पास एक फ़ोल्डर 'test' है, तो यह पता चल सकता है कि अच्छी अभिभावक शाखा 'dev' है और वास्तव में यह 'देव/परीक्षण' था। आप 100% सुनिश्चित नहीं कर सकते हैं :(यहां तक ​​कि यदि दुर्लभ मामले हैं ... – Philippe

+0

मैंने एक संपादन किया है। 2. हल करने में काफी आसान है, साथ ही शाखा '$/dev'' शाखा होना संभव नहीं है नीचे $ शाखा/$/dev/test' पर शाखा। टीएफएस शाखाबद्ध कदम पर इसकी अनुमति नहीं देता है। –

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