C # Descarga la estructura de directorys completa con subdirectorys y files de GitHub (Octokit.Net)

Estoy intentando descubrir (en C #) cómo download un directory con contenido (files y carpetas) en mi repository de GitHub a través de la API. Algunos de los artículos mencionan Octokit.Net, así que lo descargué y escribí las siguientes líneas:

var github = new GitHubClient(new ProductHeaderValue("PROJECT"), new InMemoryCnetworkingentialStore(new Cnetworkingentials("xxxtokenxxx"))); var repositories = github.Repository.GetAllForCurrent().Result; var repository = repositories.Single(x => x.Name == "MyRepo"); 

Bueno, entonces obtengo el repository y funciona, pero no sé a dónde ir desde aquí.

¿Cómo puedo download Folder1 (ver a continuación) que contiene todos los files y Folder2 con files en una estructura en mi disco duro local?

https://github.com/PROJECT/MyRepo/tree/2016-1/Folder1/Folder2

¿Alguien puede ayudarme en la dirección correcta? Tu ayuda es muy apreciada. Gracias

¿Por qué no usar la ejecución de GIT a través de Process? Me gusta

 Process proc = new Process(); proc.StartInfo.FileName = @"git"; proc.StartInfo.Arguments = string.Format(@"clone ""{0}"" ""{1}""", repository_address, target_directory); proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = true; proc.Start(); proc.WaitForInputIdle(); 

Creo que esto debería funcionar. Pero también podría estar equivocado. 🙂

EDITAR: con la configuration de las cnetworkingenciales del usuario

 // Create process Process proc = new Process(); proc.StartInfo.FileName = @"*your_git_location*\\git-bash.exe"; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = true; proc.Start(); // Wait for it to run proc.WaitForInputIdle(); // Set up user name proc.StandardInput.WriteLine("git config user.name ""your_user_name"""); proc.WaitForInputIdle(); // Set up user email proc.StandardInput.WriteLine("git config user.email ""your_user_email"""); proc.WaitForInputIdle(); // Request clone of repository proc.StandardInput.WriteLine(string.Format(@"git clone ""{0}"" ""{1}""", repository_address, target_directory);); proc.WaitForInputIdle(); // Now git should ask for your password proc.StandardInput.WriteLine("your_password"); proc.WaitForInputIdle(); // Now clone should be complete proc.Dispose(); 

Esto DEBERÍA funcionar, no lo he probado y también podría haber algunos errores de syntax, pero creo que los resolverá. Con respecto a la authentication en GIT, es posible almacenar cnetworkingenciales de alguna manera usando la function llamada cnetworkingencial helper aunque no estoy realmente seguro de cómo configurar esto. Creo que esta pregunta es un buen comienzo, intente investigar desde allí:

¿Hay alguna manera de saltear la escritura de contraseña al usar https: // en GitHub?