[英]Git tree show untracked files
我正在尝试解决此问题: https://github.com/gitahead/gitahead/issues/380
问题是 model 中使用的树不包含任何未跟踪的文件,因此视图没有可显示的内容。 当我在文件上登台时,它会显示出来。
有没有办法在树中跟踪未跟踪的文件?
我创建了一个小型测试应用程序来查找问题。 当一个文件被暂存时,count不等于0,否则永远为零。
测试设置
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.