Borrar permissions especiales de carpetas en una twig

Somos un proyecto bastante grande con una única sucursal troncal. La mayoría utiliza los permissions pnetworkingeterminados, pero algunas carpetas tienen permissions personalizados, por ejemplo, solo el grupo "Constructores" puede realizar el check-in.

Queremos permitir que las personas creen sus propias twigs privadas desde el tronco, donde pueden registrarse y fusionarse más tarde (con suerte). Sin embargo, al crear una twig, los permissions especiales se copyn junto con las carpetas, lo que significa que las personas no pueden registrarse libremente en su sucursal.

  • ¿Hay alguna manera de borrar permissions especiales de una twig o una carpeta?
  • ¿Hay alguna manera de hacerlo automáticamente, por lo que cualquier persona que crea una twig en / private / ** no encontrará este problema?

Descubrí el permiso tf (Ejemplo: tf permission /inherit:yes itemSpec ). Sin embargo, el modificador / recursivo no funciona con él. Creo que podría escribir algo que lo ejecute recursivamente …

Editar: finalmente logré escribir una herramienta para ello:

 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; } }