C# 以编程方式检测从C代码签出的当前git分支

C# 以编程方式检测从C代码签出的当前git分支,c#,git,version-control,github,web-config,C#,Git,Version Control,Github,Web Config,是否可以在构建时通过C#代码确定当前签出的分支在git存储库中是什么?如果是,怎么做? 最后,在主git分支上,我希望web.config文件中的连接字符串指向生产服务器,我希望我的开发分支始终指向开发服务器。我可以在文件上设置一个git标志,假定没有更改,但是。。。我们不应该假设web.config文件将保持不变,因为对项目有许多其他合法的更改可能会导致配置文件发生更改,我们希望在repo中跟踪这些更改。我们不希望每次发生这种情况时都必须更新索引或切换此git标志。然而,这也不是一个可行的解决

是否可以在构建时通过C#代码确定当前签出的分支在git存储库中是什么?如果是,怎么做?

最后,在主git分支上,我希望web.config文件中的连接字符串指向生产服务器,我希望我的开发分支始终指向开发服务器。我可以在文件上设置一个git标志,假定没有更改,但是。。。我们不应该假设web.config文件将保持不变,因为对项目有许多其他合法的更改可能会导致配置文件发生更改,我们希望在repo中跟踪这些更改。我们不希望每次发生这种情况时都必须更新索引或切换此git标志。然而,这也不是一个可行的解决方案,因为我希望所有构建(调试和发布)总是指向每个给定分支的同一服务器。配置文件的连接字符串唯一应该指向其他服务器的时间是基于当前签出的分支

因此,这里的想法是,如果我们可以通过C代码检测当前签出的git分支,那么我们可以在构建时使用System.Configuration和System.Web.Configuration命名空间修改连接字符串。如果这是可能的,那么它将为更好地无缝管理其指向的服务器的分支工作流程打开一个可能性的世界,同时不会丢失对配置文件所做的其他重要更改的跟踪

如果我们能够找到一种方法来实现这一点,那么任何克隆或分叉我的存储库的人在默认情况下都会自动获取此配置设置


同样,这甚至可能不可能,但我提前感谢任何了解如何在C#

中实现这一点的人。ngit是JGit到C#的一个端口:

你可以用JGit做你想做的事:

new FileRepository (some dir).getBranch ()
这些方法存在于NGit中,因此我认为您可以在C#

中使用,这是一个绑定到项目的.Net:

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
}

C#:NGit.Api.Git repository=NGit.Api.Git.Open(@“C:\Git\NGit”);repository.GetRepository().GetBranch()NGit.Storage.File.FileRepository dir=new NGit.Storage.File.FileRepository(“git dir”);