2017-11-17 2 views
0

Ich benutze das Go-Projekt go-git als Git-Client und möchte von einem privaten Git-Repository gehost über gitea geholt werden.go-git: Wie authentifiziere ich mich am Remote-Server?

Die entsprechende Funktion ist func (r *Remote) Fetch(o *FetchOptions) error, die ein transport.AuthMethod Objekt für die Authentifizierung erwartet.

Ich habe versucht, die folgenden:

repo, _ := git.PlainOpen("/path/to/project/folder") 
err := repo.Fetch(&git.FetchOptions{ 
    Auth: http.NewBasicAuth("someUser", "andThePassword"), 
}) 

... die einfach zurückgibt:

ungültig Auth Methode

Das gleiche passiert, wenn ich

authenticator, _ := ssh.NewSSHAgentAuth("git") 
verwenden

aus dem Paket "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh".

Und auch wenn ich ein Zertifikat:

authenticator, _:= ssh.NewPublicKeysFromFile("gitea name", "/home/name/.ssh/id_rsa", "passphrase") 

Wie ich, welche Authentifizierungsmethode unterstützt wird, und gibt es bestehende Implementierungen von transport.AuthMethod, die ich verwenden könnte es herausfinden?

+0

Ihre Nutzung mir richtig aussieht, vielleicht gibt es ein Fehler? Es gab kürzlich ein Problem [# 618] (https://github.com/src-d/go-git/issues/618) für das Projekt, das auf eine nützliche Problemumgehung hinweisen könnte: '& git.CloneOptions {URL:" https: //user:[email protected]/repo.git "}' – orirawlings

+0

@orrawlings Eine solche URL kann nur beim Klonen eines neuen Repositorys angewendet werden. Wenn ich das Repository bereits lokal habe, öffne ich es mit 'PlainOpen' und benutze' Fetch', für das ich die URL nicht mehr angeben kann. (Die URL stammt aus der '.git/config' Datei. Und selbst wenn ich die URL dort ändere, gibt es" invalid auth method " – maja

+0

welche Art von Protokoll verwendest du? HTTP oder SSH? Oder vielleicht git? – mcuadros

Antwort

0

Das Problem hier war, dass ich das falsche http-Paket verwendete, um den Authentifikator zu erwerben.

Ich habe die BasicAuth() aus dem Paket net/http verwendet - jedoch ist das korrekte HTTP-Paket zu verwenden gopkg.in/src-d/go-git.v4/plumbing/transport/http.

Wenn Sie den Import ändern und den (kompatiblen) BasicAuth-Authenticator von dort verwenden, funktioniert es einwandfrei. mit

0

Dieser arbeitete für mich gopkg.in/src-d/go-git.v4

func cloneGit() (err error) { 
    username := "dude" 
    password := "super-secret-Personal-access-token" 
    repo := "github.build.company.com/org/repo-name.git" 
    url := fmt.Sprintf("https://%s:%[email protected]%s", username, password, repo) 
    options := git.CloneOptions{ 
     URL:  url, 
     Progress: os.Stdout, 
    } 
    r, err := git.PlainClone("./src", false, &options) 

    if err != nil { 
     return err 
    } 
    fmt.Println(r.Log) 
    return err 
} 
Verwandte Themen