如何使用LibGit2Sharp实现`git rm --cached`和`git rm -f`?

时间:2012-05-17 15:38:41

标签: git libgit2 libgit2sharp

1)我尝试使用repo.Index.Remove(item.Filename);,但它给了我:

  

其他信息:无法删除文件'file.txt'。它的当前   状态为“已修改”。

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

2)我需要一种方法来执行git rm file.txt --cached,以便只从存储库中删除文件(暂存以进行删除),但仍将其保留在文件系统中。有没有办法在LibGit2Sharp中执行此操作?

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

2 个答案:

答案 0 :(得分:1)

  

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

没有内置方法可以做到这一点。可能值得在issue tracker中打开功能请求。

  

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

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

  

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

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

  • FileStatus.Nonexistent
  • FileStatus.Removed
  • FileStatus.Modified
  • FileStatus.Untracked

可以找到这些状态的含义说明 here

答案 1 :(得分:0)

这似乎适用于git rm -f

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

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

我还不知道如何做--cached