2012-02-27 1 views
5

우리는 하나의 트렁크 지점이있는 상당히 큰 프로젝트입니다. 대부분의 경우 기본 사용 권한을 사용하지만 일부 폴더에는 사용자 지정 권한이 있습니다. 예를 들어 "Builders"그룹 만 체크인 할 수 있습니다.분기의 폴더에서 특수 사용 권한 지우기

우리는 사람들이 트렁크에서 자신의 사설 브랜치를 만들 수있게하고 싶습니다. 트렁크에서 자유롭게 체크인하고 나중에 병합 할 수 있습니다. 그러나 지사를 만드는 경우 특수 사용 권한이 폴더와 함께 복사되므로 사람들이 지사에 자유롭게 체크인 할 수 없습니다.

  • 분기 또는 폴더에서 특수 사용 권한을 지울 수있는 방법이 있습니까?
  • 이렇게 자동으로 수행 할 수있는 방법이 있습니까? 따라서/private/** 아래에 분기를 만드는 사람은이 문제가 발생하지 않습니까?

답변

6

tf permission (예 : tf permission /inherit:yes itemSpec)입니다. 그러나/recursive 스위치는 작동하지 않습니다. 나는 ... 나는 재귀 적으로 실행 뭔가를 쓸 수 추측

편집 : 나는 마침내 그것을위한 도구 작성에 주변에있어이에 대한

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

@ mats-isaksson 새로운 콘솔 응용 프로그램을 만듭니다 –