如果我有此状态的回购
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行为,我应该调用自己重置吗?
答案 0 :(得分:0)
嗯,这是一年前问过的,但我想我会找到一个解决方案。也许自LibGit2Sharp以来,实现已经发生了变化。
带有Repository.Checkout
的 CheckoutModifiers.Force
对我来说不能解决我的子模块更改,但Repository.Unstage
在子模块的相对路径上没有。