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

ffvjumwh  于 2022-12-17  发布在  Git
关注(0)|答案(3)|浏览(159)

是否可以在构建时通过C#代码确定当前 checkout 的分支在git仓库中?如果可以,如何确定?

最后,在master git分支上,我希望web.config文件中的连接字符串指向生产服务器,而develop分支总是指向开发服务器。我可以在文件上设置一个git标志,其中包含--assumed-unchanged,但是......我们不应该假设一张网。配置文件将保持不变,因为对项目的许多其他合法更改可能会导致配置文件更改,我们希望在存储库中跟踪这些更改。我们不'我不希望每次发生这种情况时都必须更新索引或切换git标志。同样I've seen other solutions that alter the web.config file based on the build using transformations然而,这也不是一个可行的解决方案,因为我希望所有的构建版本(调试和发布)总是指向同一个服务器。配置文件唯一一次应该让它的连接字符串指向不同的服务器是基于当前 checkout 的分支。
这里的想法是如果我们可以通过C#代码检测当前 checkout 的git分支,那么我们可以在构建时使用System.Configuration和System.Web.Configuration命名空间修改连接字符串。如果这是可能的,那么它打开了一个可能性的世界,更好地更无缝地管理分支机构的工作流,关于哪些服务器,它指向,而不会失去跟踪其他对配置文件所做的重要更改。
如果我们能找到一种方法来实现这一点,那么任何克隆或分叉我的存储库的人都将自动获得默认的配置设置。
同样,这可能是不可能的,但我提前感谢任何对如何在C#中实现这一点有见解的人

beq87vna

beq87vna1#

ngit是JGit到C#的一个端口:
https://github.com/mono/ngit
你可以用JGit做你想做的事情:

new FileRepository (some dir).getBranch ()

这些方法存在于NGit中,所以我想你可以在C#中做同样的事情。

cbjzeqam

cbjzeqam2#

使用**LibGit2Sharp,将.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
}
c9qzyr3d

c9qzyr3d3#

在Visual Studio中搜索NuGet包“ngit”。

(2011年最新的一揽子计划)
添加以下行:

NGit.Api.Git repository = NGit.Api.Git.Open(@"C:\YourProjects\FolderOfYourProject");

var repo = repository.GetRepository().GetBranch();

Console.WriteLine(repo);

相关问题