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

标签 c# git version-control github web-config

是否可以在构建时通过 C# 代码确定 git 存储库中当前 checkout 的分支?如果是这样怎么办?

最终,当在 master git 分支上时,我希望我的 web.config 文件中的连接字符串指向生产服务器,并且我希望我的开发分支始终指向开发服务器。我可以使用 --assumed-unchanged 在文件上设置一个 git 标志,但是......不应该假设 web.config 文件将保持不变,因为对项目有许多其他合法更改可能导致配置文件更改,我们希望在 repo 中跟踪这些更改。我们不希望每次发生这种情况时都必须更新索引或切换此 git 标志。还有 I've seen other solutions that alter the web.config file based on the build using transformations然而,这也不是一个可行的解决方案,因为我希望所有构建(调试和发布)始终指向每个给定分支的同一服务器。配置文件应该将其连接字符串指向不同服务器的唯一时间是基于当前 check out 的分支。

所以这里的想法是,如果我们可以通过 C# 代码检测当前 checkout 的 git 分支,那么我们可以在构建时使用 System.Configuration 和 System.Web.Configuration 命名空间修改连接字符串.如果这是可能的,那么它将打开一个充满可能性的世界,以便更好地、更无缝地管理分支机构的工作流(关于它指向的服务器),同时不会忘记对配置文件所做的其他重要更改。

如果我们能想出一种方法来实现这一点,那么任何克隆或 fork 我的存储库的人都会默认自动获取此配置设置。

同样,这甚至可能是不可能的,但我提前感谢任何可能了解如何在 C# 中实现这一点的人

最佳答案

ngit 是 JGit 到 C# 的端口:

https://github.com/mono/ngit

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

new FileRepository (some dir).getBranch ()

并且这些方法存在于 NGit 中,所以我想您可以在 C# 中执行相同的操作。

关于c# - 以编程方式检测从 C# 代码 checkout 的当前 git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413175/

相关文章:

C# WinForms 读取 XML 文件 - 仅特定节点

git - 如何 merge 单个提交?

c# - 401 Unauthorized 在 GET 请求 (https) 上返回正确的凭据

c# - pInvoke readFile() : Overlapped I/O operation is in progress

git - 如何在Visual Studio中从远程服务器查看新的GIT分支?

git - 在 Git 中删除本地提交而不更改工作目录

version-control - 在 Rational Team Concert 中保持不同流中的相同组件同步

mysql - 保留页面更改历史记录。有点像 SO 对修订所做的

svn - 关于网页设计的版本控制最佳实践

c# - 在声明期间初始化并创建速记 getter/setter