2012-02-27 15 views
5

हम एक ट्रंक शाखा के साथ काफी बड़ी परियोजना हैं। इसमें से अधिकांश डिफ़ॉल्ट अनुमतियों का उपयोग करता है, लेकिन कुछ फ़ोल्डरों में कस्टम अनुमतियां होती हैं - कहें, केवल "बिल्डर्स" समूह को चेक-इन करने की अनुमति है।शाखा में फ़ोल्डर्स से विशेष अनुमतियां साफ़ करना

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

  • क्या शाखा या विशेष फ़ोल्डर से विशेष अनुमतियों को साफ़ करने का कोई तरीका है?
  • क्या ऐसा स्वचालित रूप से करने का कोई तरीका है, इसलिए कोई भी व्यक्ति/निजी/** के अंतर्गत शाखा बनाने वाला कोई समस्या नहीं उठाएगा?

उत्तर

6

मुझे लगभग tf permission (उदाहरण: tf permission /inherit:yes itemSpec) मिला। हालांकि,/रिकर्सिव स्विच इसके साथ काम नहीं करता है। मुझे लगता है मैं कुछ है कि यह रिकर्सिवली चलाता लिख ​​सकता है ...

संपादित करें: मैं अंत में इसके लिए एक उपकरण लिखने के लिए चारों ओर हो गया है:

static int Main(string[] args) 
{ 
    if (args.Length == 0 || args.Any(a => !a.StartsWith("$/"))) 
    { 
     Console.WriteLine("Removes all explicit permissions and enables inheritance for a subtree.\n" 
         + "Example: " + Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location) + " $/project/path1 $/project/path2"); 
     return 3; 
    } 

    WorkspaceInfo wi = Workstation.Current.GetLocalWorkspaceInfo(Environment.CurrentDirectory); 
    if (wi == null) 
    { 
     Console.WriteLine("Can't determine workspace for current directory: " + Environment.CurrentDirectory); 
     return 2; 
    } 

    var Tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(wi.ServerUri); 
    VersionControlServer VersionControlServer = Tfs.GetService<VersionControlServer>(); 

    Console.WriteLine("Server: {0} Getting permissions...", wi.ServerUri); 
    ItemSecurity[] perms = VersionControlServer.GetPermissions(args, RecursionType.Full); 

    Console.WriteLine("Will remove explicit permissions from the following items:"); 

    var changes = new List<SecurityChange>(); 
    foreach (ItemSecurity perm in perms) 
    { 
     Console.WriteLine(" " + perm.ServerItem); 

     changes.Add(new InheritanceChange(perm.ServerItem, inherit: true)); 
     foreach (AccessEntry e in perm.Entries) 
     { 
      changes.Add(new PermissionChange(perm.ServerItem, e.IdentityName, null, null, PermissionChange.AllItemPermissions)); 
     } 
    } 

    Console.WriteLine("Enter to confirm:"); 
    Console.ReadLine(); 

    var successfulchanges = VersionControlServer.SetPermissions(changes.ToArray()); 
    if (successfulchanges.Length == changes.Count) 
    { 
     Console.WriteLine("Explicit permissions removed from all items"); 
     return 0; 
    } 
    else 
    { 
     Console.WriteLine("Explicit permissions removed only from:"); 
     foreach (var c in successfulchanges) 
     { 
      Console.WriteLine(" " + c.Item); 
     } 

     return 1; 
    } 
} 
+3

इस के लिए धन्यवाद, मैं सिर्फ कोशिश कर रहा एक घंटे खर्च किया है कुछ मूर्खतापूर्ण स्पष्ट अनुमति के कारण शाखा को हटाने के लिए। इस कोड ने इसे 2 सेकंड में तय किया :) – DaveShaw

+0

आप इस कोड को कहां निष्पादित करते हैं? क्या आप बता सकते हैं कि आप इसका उपयोग कैसे करते हैं? मैं जो कुछ मानता हूं उसके साथ अटक गया हूं, कुछ शाखा की अनुमति के साथ मुझे एक शाखा को हटाने या नाम बदलने से रोकती है। –

+0

@ मैट्स-इस्क्ससन एक नया कंसोल एप्लिकेशन बनाते हैं –