Repository.Checkout()不会卸载子模块更改

本文关键字:模块 卸载 Checkout Repository | 更新日期: 2023-09-27 18:16:48

如果我在这个状态下有一个回购

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

调用reset可以正常工作。

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

是LibGit2Sharp期望的行为吗?如果我想镜像完全相同的git行为,我应该自己调用Reset吗?

Repository.Checkout()不会卸载子模块更改

这是一年前的问题,但我想我会提供我找到的解决方案。也许在LibGit2Sharp中实现改变了。

Repository.CheckoutCheckoutModifiers.Force不能为我卸载我的子模块更改,但Repository.Unstage在子模块的相对路径上做到了。