Question

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)?

Was it helpful?

Solution

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

There's no built-in way to do this. Might be worth opening a feature request in the issue tracker.

I need a way to do git rm file.txt --cached

Although the content check won't be performed, I think repo.Index.Unstage() should fit your need. The documentation of the method states Removes from the staging area all the modifications of a file since the latest commit (addition, updation or removal).

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)?

No, it's not ;) Similarly to git, LibGit2Sharp will throw if one is trying to Remove a file with one of the following status:

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

Description of what those status mean can be found here.

OTHER TIPS

Looks like this will do for git rm -f:

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

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

I don't know how to do --cached yet.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top