2013-03-29 5 views
5

Sagen Sie bitte eine Datei in einem Git-Repository:eine Datei von Git Repository löschen mit libgit2

  • a.txt

Welche APIs sollte, dass die Datei entfernt begehen erstellen verwendet werden? Zum Beispiel wird in this question die Datei festgeschrieben, ohne sie auf der Festplatte zu erstellen. Ist es jetzt möglich, diese Datei zu entfernen, ohne den Index (Stage-Bereich) zu verwenden?

Ich habe einen ähnlichen Fluss erwartet, vielleicht eine git_tree_entry für den Baum Builder erstellen, aber das scheint nicht der Fall zu sein. git_reference_list() listet keine Dateien auf, es gibt also eine Sackgasse. Auch das Suchen der Quellen zum Löschen und Entfernen hat mir keinen Erfolg gebracht.

Antwort

4

Das Entfernen einer Datei ähnelt dem Hinzufügen einer Datei - Sie entfernen den Indexeintrag, um den Löschvorgang durchzuführen, und Sie können dann einen Commit aus dem Index erstellen.

Sie möchten wahrscheinlich git_index_remove_bypath verwenden, die die Datei aus dem Index und löst alle Konflikte, die Datei hatte.

0

Hier ist ein Copy-Paste-Beispiel; für getLastCommit() siehe this question.

bool commitStage ( 
    git_repository * repo, git_signature * sign, 
    const char * message) 
{ 
    bool b = false; 
    int rc; 
    git_index * repo_idx; /* the stage area for our repository */ 
    git_oid oid_idx_tree; /* the SHA1 for the tree generated from index */ 
    git_oid oid_commit;  /* the SHA1 for our commit */ 
    git_tree * tree_cmt; /* tree generated from index */ 
    git_commit * parent_commit;/* most recent commit in the head */ 

    parent_commit = getLastCommit(repo); 
    if (parent_commit != NULL) 
    { /* we have the parent commit */ 
    rc = git_repository_index(&repo_idx, repo); 
    if (rc == 0) 
    { /* we now have the index (stage area) structure in repo_idx */ 
     git_index_read(repo_idx); 
     /* the stage area may be altered here with functions like 
     git_index_add_bypath(); 
     git_index_remove_bypath(); 
     */ 

     /* by writing the index we get the SHA1 of the tree */ 
     rc = git_index_write_tree(&oid_idx_tree, repo_idx); 
     if (rc == 0) 
     { 
     rc = git_tree_lookup(
       &tree_cmt, repo, &oid_idx_tree); 
     if (rc == 0) 
     { /* the actual tree structure; create a commit from it */ 
      rc = git_commit_create(
       &oid_commit, repo, "HEAD", 
       sign, sign, NULL, 
       message, 
       tree_cmt, 1, (const git_commit**)&parent_commit); 
      if (rc == 0) 
      { 
      b = true; 
      } 
     } 
     } 
     git_index_free(repo_idx); 
    } 
    git_commit_free(parent_commit); 
    } 
    return b; 
} 
+0

bitte erklären Sie die -1, sonst ist es vergebens, wirklich. Hilf dem Suchenden, indem du auf den Fehler zeigst, damit ich ihn beheben kann. –

Verwandte Themen