繁体   English   中英

Git 树显示未跟踪的文件

[英]Git tree show untracked files

我正在尝试解决此问题: https://github.com/gitahead/gitahead/issues/380

问题是 model 中使用的树不包含任何未跟踪的文件,因此视图没有可显示的内容。 当我在文件上登台时,它会显示出来。

有没有办法在树中跟踪未跟踪的文件?

我创建了一个小型测试应用程序来查找问题。 当一个文件被暂存时,count不等于0,否则永远为零。

测试设置

  • 具有以下未跟踪文件的新 git 存储库 (TestRepository):
    • 测试文件.txt
    • 测试文件夹/testfile2.txt

d

#include <git2.h>
#include <stdio.h>

int main() {

    git_libgit2_init();

    git_repository *repo = NULL;
    int error = git_repository_open(&repo, "/TestRepository");

    if (error < 0) {
      const git_error *e = git_error_last();
      printf("Error %d/%d: %s\n", error, e->klass, e->message);
      exit(error);
    }

    git_tree *tree = nullptr;
    git_index* idx = nullptr;
    git_repository_index(&idx, repo);

    git_oid id;
    if (git_index_write_tree(&id, idx)) {
        const git_error *e = git_error_last();
        printf("Error %d/%d: %s\n", error, e->klass, e->message);
        exit(error);
    }

    git_tree_lookup(&tree, repo, &id);

    int count = git_tree_entrycount(tree);
    printf("%d", count);


    git_repository_free(repo);

    printf("SUCCESS");

    return 0;
}

如果我理解正确,你看到的是正常的:因为文件是未跟踪/新的,索引不知道它,所以如果你问索引,它没有“分阶段”的变化来比较,因此没有差异.

如果您想要一个尚未跟踪的文件的差异,您必须提供另一种方式,通常是通过要求git_diff完成将工作树版本与/dev/null 、空 blob 等进行比较的工作。

由于您在使用 libgit2 解决方案,因此我在 GitX 中尝试执行此操作的方式是通过git_status_list_new API,它提供了一种与文件系统无关的方式来即时生成两个可查看的差异(分阶段和非分阶段),使用git_patch_from_blobs / git_patch_from_blobs_and_buffer 回想起来,也许这应该作为git_status_entry_generate_patch或其他东西存在于库中......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM