2017-03-25 1 views
0

J'essaie de comprendre (en C#) comment télécharger un répertoire avec du contenu (fichiers et dossiers) dans mon dépôt GitHub via l'API. Certains articles mentionnent Octokit.Net donc je télécharge et écrit les lignes suivantes:C# Télécharger la structure complète du répertoire avec les sous-répertoires et fichiers de GitHub (Octokit.Net)

var github = new GitHubClient(new ProductHeaderValue("PROJECT"), new InMemoryCredentialStore(new Credentials("xxxtokenxxx"))); 

var repositories = github.Repository.GetAllForCurrent().Result; 

var repository = repositories.Single(x => x.Name == "MyRepo"); 

Eh bien, je puis obtenir le dépôt et il fonctionne, mais je ne suis pas sûr où aller d'ici?

Comment puis-je télécharger Folder1 (voir ci-dessous) contenant tous les fichiers et Folder2 avec des fichiers dans une structure sur mon disque dur local?

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

Quelqu'un peut me aider dans la bonne direction? Votre aide est grandement appréciée. Merci

Répondre

-1

Pourquoi ne pas utiliser GIT run via Process? Comme

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(); 

Je pense que cela devrait fonctionner. Mais je pourrais aussi bien avoir tort. :)

EDIT: avec réglage des informations d'identification de l'utilisateur

// 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(); 

Cette DEVRAIENT travail, je l'ai pas testé et il pourrait aussi y avoir des erreurs de syntaxe, mais je crois que vous figurerez ceux sur. En ce qui concerne l'authentification dans GIT, il est possible de stocker en quelque sorte les informations d'identification en utilisant la fonction aide d'identification tho Je ne suis pas vraiment sûr de savoir comment configurer cela. Je pense que cette question est bien commencer, essayer des recherches à partir de là:

Is there a way to skip password typing when using https:// on GitHub?

+0

mais je vous remercie ne sais pas où je mets mes lettres de créance (informations de connexion) en utilisant cette approche. – NorthRebel

+0

Oui. Droite. Je n'y ai pas pensé. Je vais écrire une nouvelle réponse avec une solution possible. Il est trop long pour s'adapter au commentaire. :) – RhodryCZ

+0

Ceci fournit l'injection de ligne de commande. Si vos intrants sont soumis par un attaquant non fiable, je parie qu'ils s'amuseraient. – Mitch