C# 使用git worktrees和libgit2sharp克隆和签出具有多个分支的现有回购协议

C# 使用git worktrees和libgit2sharp克隆和签出具有多个分支的现有回购协议,c#,libgit2,libgit2sharp,C#,Libgit2,Libgit2sharp,我想编写一个C#程序,开发人员可以使用它克隆几个添加了工作树的git repo。 因此,我的主要想法是使用libgit2sharp克隆一个主节点,并添加一个带有签出的“develope”分支(已经存在)的工作树 我还没有找到多少关于如何使用Worktree特性的信息- 当我使用.bat时,我记得有一个限制,如果我想添加一个工作树,我必须已经在本地创建了该分支,否则将在本地创建一个同名的分支 基本上是这样的: cd C:\gittryout\testrepo\ git clone REPO mas

我想编写一个C#程序,开发人员可以使用它克隆几个添加了工作树的git repo。 因此,我的主要想法是使用libgit2sharp克隆一个主节点,并添加一个带有签出的“develope”分支(已经存在)的工作树

我还没有找到多少关于如何使用Worktree特性的信息- 当我使用.bat时,我记得有一个限制,如果我想添加一个工作树,我必须已经在本地创建了该分支,否则将在本地创建一个同名的分支

基本上是这样的:

cd C:\gittryout\testrepo\
git clone REPO master
cd master
//to cicumvent creating a local branch develop if it hasn't been checked out already
git checkout develop
git checkout master
git worktree add --checkout ../develop develop
这会给我

C:\gittryout\testrepo\master (with master)
C:\gittryout\testrepo\develop (with develop)
目前我的代码大致如下:

public void TryToCloneWithWorktree()
{
  string Username = "acorrectusername";
  string Password = "acorrectpw";
  string RepositoryUrl = @"path/to/git/testrepo";

  var co = new CloneOptions();
  co.CredentialsProvider = new CredentialsHandler(
                    (url, usernameFromUrl, types) =>
                    new UsernamePasswordCredentials()
                    {
                      Username = Username,
                      Password = Password
                    }
                    );
  co.BranchName = "master";
  string RepositoryPath = @"C:\gittryout\testrepo\master";
  string WorktreePath = @"C:\gittryout\testrepo\develop";
  string WorktreeSHA1 = "develop";
  using (var repo = new Repository())
  {
    Repository.Clone(RepositoryUrl, RepositoryPath, co);
    repo.Worktrees.Add(WorktreeSHA1, WorktreeSHA1, WorktreePath, false);
  }
}
但运行此操作后,克隆是正确的(使用分支主机),并且其中驻留了一个快捷方式\u git2\u a40776 with target。\r\n

我是否也需要克隆添加的工作树,或者如何使用libgit2sharp实现bat在C#中的功能


br

在C#而不是批处理文件中执行此操作的好处是什么?我想将其用于多个存储库,使用一个yml文件来协调所有存储库的使用位置,以及从给定模板为开发人员添加哪些工作树。另外,在所有这些都完成之后,为VS代码的Project Manager插件自动生成一个.json(很多开发人员都使用这个插件,并且希望能够实现自动化)