【问题标题】:How to achieve `git rm --cached` and `git rm -f`with LibGit2Sharp?如何使用 LibGit2Sharp 实现 `git rm --cached` 和 `git rm -f`?
【发布时间】:2012-05-17 15:38:40
【问题描述】:

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

附加信息:无法删除文件“file.txt”。它的电流 状态为“已修改”。

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

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

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

【问题讨论】:

    标签: git libgit2 libgit2sharp


    【解决方案1】:

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

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

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

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

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

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

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

    可以找到这些状态的含义描述here

    【讨论】:

      【解决方案2】:

      看来git rm -f 可以这样做:

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

      我还不知道--cached怎么办。

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 2011-08-13
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2021-04-02
        • 2023-03-16
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多