Repository.Checkout()不会取消子模块更改

时间:2015-10-09 05:13:43

标签: c# libgit2sharp

如果我有此状态的回购

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   App_Data/Submodule
        modified:   file.txt

App_Data/Submodule是git子模块,而file.txt只是普通文件。

运行git checkout master --force会将repo置于此状态

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   App_Data/Submodule (new commits)

no changes added to commit (use "git add" and/or "git commit -a")

但是使用以下代码从LibGit2Sharp做同样的事情

using (var repo = new LibGit2Sharp.Repository(RepositoryPath))
{
  repo.Checkout("master", new CheckoutOptions { CheckoutModifiers = CheckoutModifiers.Force });
}

让repo处于这种状态

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   App_Data/Submodule

然而,调用重置可以正常工作。

using (var repo = new LibGit2Sharp.Repository(RepositoryPath))
{
    repo.Reset(ResetMode.Hard, "master");
}

LibGit2Sharp是否期望这种行为?如果我想要镜像完全相同的git行为,我应该调用自己重置吗?

1 个答案:

答案 0 :(得分:0)

嗯,这是一年前问过的,但我想我会找到一个解决方案。也许自LibGit2Sharp以来,实现已经发生了变化。

带有Repository.Checkout

CheckoutModifiers.Force对我来说不能解决我的子模块更改,但Repository.Unstage在子模块的相对路径上没有。