स्थानांतरित करें और नाम बदलें उपनाम हैं। कमांड लाइन या यूआई से टीएफएस के किसी भी संस्करण में बिल्कुल कोई फर्क नहीं पड़ता है।
उनमें से दोनों इतिहास को संरक्षित करते हैं। कम से कम 2005/2008 में, आप वर्जनेड इटिम टेबल में वही भौतिक वस्तु रखते हैं इससे कोई फर्क नहीं पड़ता कि नाम और/या पैरेंट पथ कितनी बार या कितना भारी रूप से बदलता है। वास्तव में आपके हिस्से पर बहुत सारे मैन्युअल काम किए बिना "फर्जी" नाम (हटाएं + जोड़ें) प्राप्त करने का कोई तरीका नहीं है।
हालांकि, यह संस्करण मॉडल सैद्धांतिक अर्थ में बहुत शुद्ध है, लेकिन इसमें कुछ व्यावहारिक गठजोड़ हैं। चूंकि अलग-अलग आइटम समय पर अलग-अलग बिंदुओं पर एक ही नाम पर कब्जा कर सकते हैं, इसलिए टीएफएस को आपके द्वारा भेजे जाने वाले किसी भी इनपुट को विशिष्ट रूप से पहचानने के लिए पूर्ण नाम + संस्करण की आवश्यकता होती है। आम तौर पर आप इस प्रतिबंध को नहीं देखते हैं, लेकिन अगर आपने टीएफ [डूसमिंग] $/newname -version: oldversion तो यह भ्रमित हो जाएगा और या तो एक त्रुटि फेंक देगा या किसी आइटम पर काम करेगा आप इरादा नहीं हो सकता है। आदेशों को सुनिश्चित करने के लिए आपको मान्य संयोजन (नया नाम + नया संस्करण या पुराना नाम + पुराना संस्करण) पारित करने के लिए सावधान रहना होगा।
टीएफएस 2010 कुछ हद तक कहानी बदलता है: यह एक शाखा है + कवर के नीचे हटाएं, जिससे आइटम आईडी बदलना पड़ता है। फिर भी, हर रोज़ कमांड जैसे गेट एंड हिस्ट्री "फिक" बहुत अच्छी तरह से हैं; पुराने ग्राहक लगभग 95% संगत हैं। लाभ यह है कि जब आपके पास सिस्टम में एकाधिक नाम हैं और पथ-आधारित आइटम लुकअप ऊपर के लिए उल्लिखित अस्पष्ट बनने लगते हैं, तो सर्वर बस आपके द्वारा निर्दिष्ट नाम स्वीकार करेगा और इसके साथ चलाएगा। यह समग्र सिस्टम प्रदर्शन में सुधार करता है और कई जाल को समाप्त करता है जो अपरिचित उपयोगकर्ताओं को काफी लचीला नहीं होने और 100% परिशुद्धता के साथ इतिहास को संरक्षित नहीं करते हैं (उदाहरण के लिए जब दो शाखाओं के विलय के दौरान नाम टकराव होते हैं)।
हाथ में समस्या के लिए रिटर्निंग ...
यह कह नाम बदलने tf $/PROJECTA $/projectB के रूप में सरल नहीं है। स्रोत नियंत्रण पेड़ में शीर्ष स्तर फ़ोल्डर्स टीम प्रोजेक्ट क्रिएशन विज़ार्ड के लिए आरक्षित हैं; आप उनके खिलाफ मानक टीएफ कमांड नहीं चला सकते हैं। आपको क्या करना होगा एक स्क्रिप्ट की तरह है:
Get-TfsChildItem $/ProjectA |
select -Skip 1 | # skip the root dir
foreach {
tf rename $_.serveritem $_.serveritem.replace("$/ProjectA", "$/ProjectB")
}
[ज़ाहिर है, आप इसे हाथ से कर सकते हैं, अगर वहाँ $ के तहत भी कई बच्चे नहीं/PROJECTA]
जहाँ तक gotchas मैं उल्लेख किया, पुराने इतिहास को देखने के बाद से मैं आपके लिए बहुत महत्वपूर्ण हूं। एक बार जब आप नाम बदलते हैं, टीएफ इतिहास $/ProjectA/somefile.cs काम नहीं करेगा। डिफ़ॉल्ट रूप से, टीएफ कमांड संस्करण = "नवीनतम" मानते हैं। इन विकल्पों में से कोई पूरा इतिहास आप चाहते हैं जाएगा:
- tf इतिहास $/PROJECTA/somefile.cs; 1234 जहां changeset 1234 कदम से पहले था
- tf इतिहास $/ProjectB/somefile.cs ; 5678 जहां परिवर्तन 5678 के बाद परिवर्तन था। या आप सिर्फ संस्करण छोड़ सकते हैं।
पूर्णता & डीबगिंग उद्देश्यों के लिए एक अंतिम विकल्प:
- tf इतिहास $/PROJECTA/somefile.cs -slotmode। आप केवल बदलावों से पहले हुए परिवर्तनों को देखेंगे; लेकिन आप भी ऐसी किसी भी वस्तु है कि आइटम आप बी
नीचे ले जाया गया
(TFS 2010 में करने के लिए करने से पहले $/PROJECTA/somefile.cs "स्लॉट" में रहते थे हो सकता है या फिर उसके बाद के इतिहास देखेंगे , "स्लॉट मोड" डिफ़ॉल्ट व्यवहार है; अनुरोध करने के लिए एक -इटम मोड विकल्प है कि आपका लुकअप इतिहास भर में पता लगाया गया है जैसे कि यह 2008 के बजाय पथ आधारित था।)
संपादित करें - नहीं, शाखाकरण एक अच्छा विकल्प नहीं है। जबकि शाखाकरण पूरे सिस्टम को & पर प्रोजेक्टबी से प्राप्त करने के लिए सिस्टम में पर्याप्त मेटाडेटा छोड़ देता है, यह 2008 में बहुत उपयोगकर्ता के अनुकूल नहीं है। टीएफ विलय कमांड (कोई यूआई समकक्ष) सीखने में बहुत समय व्यतीत करने की योजना है। 2010 नाटकीय रूप से कई शाखाओं में बदलावों को देखने की आपकी क्षमता में सुधार करता है, लेकिन यह अभी भी एक नाम से साफ एकीकृत अनुभव नहीं है।
वाह, रिचर्ड। बिल्कुल शानदार जानकारी। मैं इसे अपने परीक्षण प्रयोगशाला में कल की कोशिश करेंगे। आप पटकथा कहा था क्योंकि जड़ आरक्षित है बैकटिक' के उपयोग की आवश्यकता अगर मैं किसी फ़ोल्डर से नाम बदल रहा था जो रूट के नीचे एक स्तर था, तो मैं स्क्रिप्ट को छोड़ सकता था, फिर - सही? किसी भी तरह से - भयानक उत्तर। आपके समय के लिए धन्यवाद! –
हाँ। मूल विचार प्रोजेक्टए का नाम बदलना है \ folder1 -> ProjectB \ folder1, ProjectA \ folder2 -> ProjectB \ folder2, आदि। स्क्रिप्ट सिर्फ आपके पास 50 फाइलें और फ़ोल्डर्स होने पर समय और प्रयास को बचाने के लिए है। –
उत्कृष्ट। यह स्पष्ट करने के लिए बहुत बहुत धन्यवाद और आसान टी ओ समझो! –