2013-01-12 2 views
0

git_index_add_from_workdir을 사용하여 추가하지만 git_index_entrycount가 0을 반환하는 이유는 무엇입니까? 및 다른 질문, 나는 원격에서 자식을 복제하고 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() 인덱스의 메모리 인스턴스를 갱신 새 파일 및 문서를 새로운 REPO를 생성하고, 생성하는 코드입니다. 변경 사항은 파일 시스템에 유지되지 않습니다 (이 작업을 수행하려면 git_index_write()을 호출해야합니다).

git_index_read()을 호출하면 파일 시스템에 저장된 내용으로 메모리 내 색인이 업데이트되므로 "저장되지 않은"변경 사항이 삭제됩니다. 이것은 엔트리가 0 인 엔트리로 끝나는 이유를 설명합니다.

이 문제를 해결하려면 git_index_read()으로 전화하기 전에 git_index_read() 번으로 전화를 걸거나 git_index_write() 번으로 전화를 걸어보세요.

+0

고맙습니다. :) – alexqinbj