是否有可能在构建时通过C#代码确定当前签出的分支在git存储库中是什么?如果是这样的话?
最后,当在主git分支上时,我希望我的web.config文件中的连接字符串指向生产服务器,我希望我的开发分支始终指向开发服务器.我可以使用--assumed-unchanged在文件上设置一个git标志,但是......不应该假设web.config文件将保持不变,因为项目中有许多其他合法的更改可能导致配置文件改变,我们希望在回购中跟踪这些变化.我们不希望每次发生这种情况时都必须更新索引或切换此git标志.此外,我已经看到其他解决方案基于使用转换的构建改变web.config文件 但是这不是一个可行的解决方案,因为我希望所有构建(调试和发布)始终指向每个给定分支的相同服务器.配置文件应该使其连接字符串指向不同服务器的唯一时间是基于当前检出的分支.
所以这里的想法是,如果我们可以通过C#代码检测当前检出的git分支,那么我们可以在构建时使用System.Configuration和System.Web.Configuration命名空间修改连接字符串.如果这是可能的话,那么它开辟了一个可能性的世界,以便更好地无缝地管理分支的工作流程,关于它指向哪些服务器,同时不会忘记对配置文件进行的其他重要更改.
如果我们可以找到实现此方法的方法,那么克隆或分叉我的存储库的任何人都会默认自动获取此配置设置.
这甚至可能是不可能的,但我提前感谢任何人可能有关于如何在C#中完成此任务的见解
ngit是JGit到C#的一个端口:
https://github.com/mono/ngit
你可以用JGit做你想做的事:
new FileRepository (some dir).getBranch ()
这些方法存在于NGit中,所以我想你可以在C#中做同样的事情.
使用LibGit2Sharp,将a.Net绑定到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 }