2013-01-12 22 views
0

我使用git_index_add_from_workdir添加,但爲什麼git_index_entrycount返回0? 和另一個問題,我從遠程克隆一個git,並且git_index_entrycount也返回0? 爲什麼?下面 是代碼,我是怎麼得到IndexCount,我首先創建一個新的回購,並創建新的文件和文件我使用git_index_add_from_workdir添加,但爲什麼git_index_entrycount返回0?

(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); 
} 
+0

請創建一個關於git_clone()行爲的單獨問題。 – nulltoken

+0

http://stackoverflow.com/questions/14292231/when-i-use-git-clone-to-get-a-git-from-the-remote-the-git-index-entrycount-retu這裏是問題,thx – alexqinbj

回答

1

git_index_add_from_workdir()更新索引的內存實例。文件系統中沒有保存更改(爲了實現此目的,必須調用git_index_write())。

調用git_index_read()使用文件系統上存儲的內容更新內存中索引,從而放棄任何「未保存」更改。這就解釋了爲什麼你最終得到一個零條目的入口數。

爲了解決此問題,請在致電git_index_read()之前,先刪除對git_index_read()的呼叫或添加對git_index_write()的呼叫。

+0

非常感謝。 :) – alexqinbj

相關問題