¿Cómo puedo agregar TreeEntry a la colección de Commit's Tree?

Si tengo un repository vacío y quiero agregar, editar y eliminar files, ¿cómo puedo hacer esto usando LibGit2Sharp?

Veo que cada Commit tiene un object Tree que contiene objects TreeEntry. ¿Es posible agregar, editar y eliminar estos TreeEntry (s)? De ser así, ¿reflejará el Índice que estos cambios están pendientes y deben ser organizados?

¡Gracias!

Si tengo un repository vacío y quiero agregar, editar y eliminar files de él, ¿cómo puedo hacer esto usando LibGit2Sharp?

Un repository desnudo es un repository "del lado del server" desde el que puede recuperar / extraer cambios y al que envía sus actualizaciones.

No tiene un Working Directory ni un Index . Por lo tanto, uno no puede agregar, editar o borrar files directamente. Se supone que debes preparar tus commits en un repository "estándar" (con una carpeta de trabajo), luego empujar tus commits hacia un repository central "simple".

Nota: algunos commands de git plomería y funciones de bajo nivel de libgit2 le permiten trabajar alnetworkingedor de esos límites. Sin embargo, es un set de herramientas algo avanzado y tienes que estar listo para sumergirte en el Git Internals con el fin de encontrar tu path 🙂 LibGit2Sharp no expone esas funcionalidades.

Veo que cada Commit tiene un object Tree que contiene objects TreeEntry. ¿Es posible agregar, editar y eliminar estos TreeEntry (s)? De ser así, ¿reflejará el Índice que estos cambios están pendientes y deben ser organizados?

Un Commit , un Tree o un Blob son objects git de solo lectura. No puede "agregar" un TreeEntry a un Tree , ni modificar un Commit existente.

Un modificador de compromiso de git ( –amend ) puede dejar bajo la printing de que la confirmación se ha actualizado en el lugar. Este no es el caso: se vuelve a crear un compromiso completamente nuevo como hijo del padre del compromiso anterior. Luego, HEAD se mueve del antiguo compromiso al nuevo.

Actualizar

La versión v0.9.0 de LibGit2Sharp expone algunas operaciones de bajo nivel que ahora permiten interactuar directamente con la database de objects de un repository, incluso uno vacío.

Aprovechando esas características, se pueden crear Blobs, Trees y Commits sin involucrar un índice ni un directory de trabajo.

Por lo tanto, ahora es posible cargar un tree existente, actualizarlo en la memory y luego volver a mantenerlo en la database de objects. Por supuesto, esto creará un nuevo Árbol y el anterior se mantendrá sin modificaciones.

Algunas testings de unidad que demuestran esas características se pueden encontrar en el file ObjectDatabaseFixture.cs .

Por favor, google "git para científicos informáticos" para entender el DAG (gráfico acíclico dirigido). Cambiar una confirmación, tree u object realmente hará una nueva. La idea de que edites cualquiera de estas cosas es pensar mal. Solo puedes crear nuevos si el contenido se cambia.