detecta programáticamente la twig git actual desprotegida del código C #

¿Es posible determinar en el time de compilation a través del código C # qué twig está actualmente dentro de un repository de git? ¿Si es así, cómo?

En definitiva, cuando estoy en la twig master git, quiero que mi cadena de connection dentro de mi file web.config apunte al server de producción y quiero que mi twig de desarrollo apunte siempre al server de desarrollo. Podría establecer un indicador de git en el file con el –assumed-sin cambios, pero … uno no debería asumir que un file web.config no se modificará porque hay muchos otros cambios legítimos en un proyecto que pueden causar que el file de configuration cambiar y QUEREMOS que esos cambios sean rastreados en el repository. No queremos tener que actualizar el índice o alternar este indicador de git cada vez que esto ocurra. También he visto otras soluciones que alteran el file web.config basado en la compilation utilizando transformaciones. Sin embargo, esta tampoco es una solución viable, ya que quiero que TODAS las comstackciones (debugging y publicación) apunten siempre al mismo server por una twig determinada. La única vez que el file de configuration debe tener su cadena de connection apuntando a un server diferente se basa en la twig que está actualmente desprotegida.

Entonces, la idea aquí es, si podemos DETECTAR a través del código C # qué twig git está actualmente desprotegida, entonces podríamos modificar la cadena de connection en time de compilation utilizando los espacios de nombres System.Configuration y System.Web.Configuration . Si esto es posible, se abre un mundo de posibilidades para administrar mejor y sin interrupciones el flujo de trabajo de las sucursales con respecto a los serveres a los que apunta sin perder de vista otros cambios importantes realizados en el file de configuration.

Si podemos encontrar una manera de implementar esto, entonces cualquier persona que clone o bifurque mi repository adquirirá automáticamente esta configuration de configuration por defecto.

De nuevo, esto podría no ser posible, pero agradezco a cualquiera de antemano que pueda tener una idea de cómo lograr esto en C #

ngit es un puerto de JGit a C #:

https://github.com/mono/ngit

Puedes hacer lo que desees con JGit:

new FileRepository (some dir).getBranch () 

y esos methods existen en NGit, así que me imagino que puedes hacer lo mismo en C #.

Usando LibGit2Sharp , a.Net binding para el proyecto libgit2 :

 using (var repo = new Repository("path/to/your/local/repo")) { Branch checkedOutBranch = repo.Head; Console.WriteLine(checkedOutBranch.CanonicalName); // "refs/heads/master" for instance Console.WriteLine(checkedOutBranch.Name); // "master" for instance }