0

git_index_add_from_workdirを使用して追加しますが、なぜgit_index_entrycountが0を返すのですか?そして別の質問ですが、リモートからgitのクローンを作成しましたが、git_index_entrycountも0を返しますか?なんで?以下は、IndexCountを取得したコードです。最初に新しいリポジトリを作成し、新しいファイルとドキュメントを作成します。

(IBAction)IndexInfo:(id)sender {    
git_index *index = NULL;
int ret = 0 ;
char out[41];
out[40] = '\0';
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *docPath = [array objectAtIndex:0];
NSString *dir = [docPath stringByAppendingPathComponent:@"efg/" ];
NSLog(@"dir:%@",dir);

git_repository *repo = NULL;
ret = git_repository_init(&repo, [dir UTF8String], 0);
NSLog(@"git_repository_init ret:%d", ret);
git_repository_index(&index, repo);
if(git_index_entrycount(index) == 0)
{
    NSLog(@"initial ok");
}
NSString *testPath = [dir stringByAppendingPathComponent:@"test00.txt"];
NSString *string = @"write String";
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL bres = [fileManager createFileAtPath:testPath contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
if(bres == NO)
{
    NSLog(@"create file error.");
}
ret = git_index_add_from_workdir(index, "test00.txt");
NSLog(@"git_index_add_from_workdir ret:%d", ret);

ret = git_index_read(index);
NSLog(@"index_read ret:%d", ret);

int ecount = git_index_entrycount(index);
if (!ecount)
    printf("Empty index\n");
NSLog(@"index ecount:%d",ecount);
for (int i = 0; i < ecount; ++i) {
    const git_index_entry *e = git_index_get_byindex(index, i);

    git_oid_fmt(out, &e->oid);

    printf("File Path: %s\n", e->path);
    printf("    Stage: %d\n", git_index_entry_stage(e));
    printf(" Blob SHA: %s\n", out);
    printf("File Mode: %07o\n", e->mode);
    printf("File Size: %d bytes\n", (int)e->file_size);
    printf("Dev/Inode: %d/%d\n", (int)e->dev, (int)e->ino);
    printf("  UID/GID: %d/%d\n", (int)e->uid, (int)e->gid);
    printf("    ctime: %d\n", (int)e->ctime.seconds);
    printf("    mtime: %d\n", (int)e->mtime.seconds);
    printf("\n");
}

git_index_free(index);
}
4

1 に答える 1

1

git_index_add_from_workdir()インデックスのメモリ内インスタンスを更新します。変更はファイルシステムに保持されません(これを実現するには、を呼び出す必要がありますgit_index_write())。

を呼び出すgit_index_read()と、ファイルシステムに保存されているものでメモリ内のインデックスが更新されるため、「保存されていない」変更はすべて破棄されます。これは、エントリ数がゼロになる理由を説明しています。

これを修正するには、への呼び出しを削除するか、への呼び出しの前にへのgit_index_read()呼び出しを追加します。git_index_write()git_index_read()

于 2013-01-12T09:38:31.303 に答える