1

1) I tried using repo.Index.Remove(item.Filename);, but it's giving me:

Additional information: Unable to remove file 'file.txt'. Its current status is 'Modified'.

I need to find a way to do git rm file.txt -f (i.e. force removal).

2) I need a way to do git rm file.txt --cached so that the file is only removed from the repository (staged for removal), but still keeping it in the filesystem. Is there a way to do this in LibGit2Sharp?

3) Is it OK to call repo.Index.Remove() if the given path has never been part of the repository (i.e. the file is untracked)?

4

2 回答 2

1

我需要找到一种方法来执行 git rm file.txt -f (即强制删除)。

没有内置的方法可以做到这一点。可能值得在问题跟踪器中打开功能请求。

我需要一种方法来做 git rm file.txt --cached

虽然不会执行内容检查,但我认为repo.Index.Unstage()应该符合您的需要。该方法的文档说明从暂存区域中删除自最近一次提交(添加、更新或删除)以来对文件的所有修改。

如果给定的路径从未成为存储库的一部分(即文件未被跟踪),是否可以调用 repo.Index.Remove() ?

不,不是 ;) 与 git 类似,如果尝试删除具有以下状态之一的文件,LibGit2Sharp 将抛出:

  • 文件状态.不存在
  • FileStatus.Removed
  • 文件状态修改
  • FileStatus.Untracked

可以在此处找到这些状态的含义说明。

于 2012-05-17T16:50:52.560 回答
0

看起来这将适用于git rm -f

File.Delete(RepositoryFullPath + "/" + item.Filename);

if (!item.Status.HasFlag(LibGit2Sharp.FileStatus.Untracked))
{
    repo.Index.Stage(RepositoryFullPath + "/" + item.Filename);
}

我还不知道该怎么做--cached

于 2012-05-17T15:58:57.057 回答