然而,我在这里尝试做的是在 Repository::Init() 创建它之后更改对 repo 工作目录的引用。
Repository.Init()
通过在文件系统上创建新的存储库来将文件夹置于源代码控制之下。它返回创建的存储库的实例。
该Repository
类型的构造函数使您可以访问现有存储库。此构造函数接受一个可选RepositoryOptions
参数来覆盖某些选项。
为了满足您的要求,我会选择这样的东西
var path ="D:\path\to\your\repo";
using (var repo = Repository.Init(path)
{
// Do nothing here
}
var newWorkdir ="D:\path\to\your\other\working\directory";
var options = new RepositoryOptions { WorkingDirectoryPath = newWorkdir };
using (var repo = new Repository(path, options))
{
// Do YOUR amzing stuff ;-)
}
更新:
repo 的配置文件没有将 worktree 属性设置到正确的位置,并且新的工作目录没有指向 repo 文件夹的 .git 文件,正如您所期望的那样。
这是预期的行为。将类型传递RepositoryOptions
给构造函数会暂时覆盖Repository
. 一旦处理了 repo,这些临时设置就会丢失。
我检查了 repository.cs 的 libgit2sharp 源代码,并碰巧注意到当它调用 git_repository_set_workdir 时,它只有两个参数,而不是三个
绑定的 libgit2 方法使用三个参数调用,第三个参数设置为false
,因为我们不想在实例化存储库时保留临时设置。
回到你原来的问题:“然而,我在这里要做的是在 Repository::Init() 创建它之后更改对 repo 工作目录的引用。”
下面的代码演示了最后一个选项:
var path ="D:\path\to\your\repo";
// Note the use of forward slashes here
var newWorkdir ="D:/path/to/your/other/working/directory";
using (var repo = Repository.Init(path)
{
repo.Config.Set("core.worktree", newWorkdir);
}
using (var repo = new Repository(path))
{
// Do YOUR amzing stuff ;-)
}
更新 2:
LibGit2Sharp 刚刚更新为PR #453。
除其他外,这使得repo.Init()
接受一个单独的 git 目录,它应该符合您的要求。