执行“ git_revert()”正在重置标有“ git update-index --skip-worktree”命令的文件

问题描述 投票:1回答:1
//code
void RevertTest()
{
  git_object *head_commit_obj = NULL;
  int error = git_revparse_single(&head_commit_obj, repo, "HEAD~1");

  if (error < 0)
  {
    return;
  }

  git_commit *head_commit = (git_commit *)head_commit_obj;

  git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
  opts.checkout_strategy = GIT_CHECKOUT_SAFE;

  int reset_result = git_reset(repo, (git_object *)(head_commit_obj), GIT_RESET_HARD, &opts);

  if (reset_result < 0) 
  {
    return;
  }

}

我的问题操作步骤

  1. 创建一个新项目并将其添加到git中以进行版本控制

  2. 使用git update-index --skip-worktree排除* .doc

  3. 使用git ls文件-v。 | Grep ^ s查看排除文件的列表调用libgit2提供的git_reset之后

  4. 使用git ls-files -v.grep ^ s查看先前的标记已丢失。

  5. 使用git_reset进行文件回退会导致--skip-worktree标志丢失。

还有其他方法可以实现工作空间还原而不影响我的索引数据。就像git命令:“ /命令:还原/路径文件:“ xxx.txt””

libgit2
1个回答
0
投票

这是a bug; libgit2应该尊重索引中的skip-worktree位,但不是。

© www.soinside.com 2019 - 2024. All rights reserved.