Git 树显示未跟踪的文件
Git tree show untracked files
我正在尝试解决这个问题:
https://github.com/gitahead/gitahead/issues/380
问题是模型中使用的树不包含任何未跟踪的文件,因此视图没有任何内容可显示。当我在文件上显示它时。
有没有办法在树中跟踪未跟踪的文件?
我创建了一个小型测试应用程序来查找问题。暂存一个文件时,count不为0,否则一直为0。
测试设置
- 新 git 存储库 (TestRepository) 具有以下未跟踪文件:
- testfile.txt
- testfolder/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;
}
如果我没理解错,你看到的是正常的:因为文件是 untracked/new,索引不知道它,所以如果你问索引,它没有 "staged" 更改以进行比较,因此没有差异。
如果你想要一个尚未被跟踪的文件的差异,你必须以另一种方式提供它,通常是要求 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
之类的形式存在于图书馆中……
我正在尝试解决这个问题: https://github.com/gitahead/gitahead/issues/380
问题是模型中使用的树不包含任何未跟踪的文件,因此视图没有任何内容可显示。当我在文件上显示它时。
有没有办法在树中跟踪未跟踪的文件?
我创建了一个小型测试应用程序来查找问题。暂存一个文件时,count不为0,否则一直为0。
测试设置
- 新 git 存储库 (TestRepository) 具有以下未跟踪文件:
- testfile.txt
- testfolder/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;
}
如果我没理解错,你看到的是正常的:因为文件是 untracked/new,索引不知道它,所以如果你问索引,它没有 "staged" 更改以进行比较,因此没有差异。
如果你想要一个尚未被跟踪的文件的差异,你必须以另一种方式提供它,通常是要求 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
之类的形式存在于图书馆中……