2014-10-13 13 views
10

Ich hosten meine Git-Repositories auf einem persönlichen VPS und ich habe ein Paket, das ich "go get" -fähig machen möchte. Ich habe versucht, alles nach dem Hilfedokument einzurichten, das durch "go help importpath" ohne Glück gefunden wurde. Egal was ich tue, bekomme ich folgende Fehlermeldung:Mit "go get" auf einem persönlichen Git-Repo

package example.com/user/package: unrecognized import path "example.com/user/package" 

Ich habe jede Kombination der genannten META-Tag mit den gleichen Ergebnissen ausprobiert.

<meta name="go-import" content="example.com git http://example.com/user/package"> 

Das eigentliche Git-Repository ist über http://example.com/user/package.git erreichbar. Ich bin in der Lage, es direkt zu klonen, aber ich möchte gehen, um es richtig herunterzuladen und zu installieren.

Wenn das Hilfedokument eine Anfrage an http://example.com/user/package?go-get=1 sendet, enthält die zurückgegebene Seite das META-Tag. Wenn go dann eine nachträgliche Anfrage an http://example.com/?go-get=1 sendet, enthält die zurückgegebene Seite auch genau das gleiche META-Tag.

Muss eine spezielle Konfiguration auf dem Server vorgenommen werden? Ich würde nicht denken, da go auf das Repository über eine http-Anfrage zugreifen würde.

Ich bin bei meinem Verstand Ende. Jede Hilfe, die Sie zur Verfügung stellen können, wäre sehr willkommen.

Antwort

14

Dies ist das Meta-Tag I nginx so konfiguriert haben, für einen Gitlab Server zurückzukehren: wenn Sie http://mygit.server/group/project?go-get=1

fordern Sie erhalten:

<meta content='mygit.server/group/project git git+ssh://[email protected]/group/project.git' name='go-import'> 

Und es wirkt wie ein Zauber. Hier

ist die Nginx Rewrite-Regel, das dies tut:

location ~ "(/[^/]+/[^/]+)(/.*)?" { 
    if ($arg_go-get = "1") { 
      echo '<html><head><meta name="go-import" content="my.domain.com$1 git git+ssh://[email protected]$1"/></head></html>'; 
    } 
    try_files $uri $uri/index.html $uri.html @gitlab; 
    } 

Dies setzt natürlich voraus, Sie arbeiten mit git über ssh. Wenn Sie https verwenden, schreiben Sie die URL entsprechend um.

0

Ich habe das gerade für mich selbst gemacht - ähnliches Szenario: ein paar kleine Go Repos und eine meist private Website. Nginx Konfiguration:

root /var/www; 

location/{ 
    try_files $uri?$args $uri $uri/ @my-proxy; 
} 

ich dann laufen:

$ echo '<html><head><meta name="go-import" content="example.com/project-name git git+ssh://example.com/~/code/magic/blah/project-name.git" /></head></html>' > /var/www/project-name\?go-get\=1 
  • Die Abfrage-String in einem Dateinamen eingebettet ist, die nginx dient, wenn es vorhanden ist.
  • Wir erstellen eine Datei mit dem entsprechenden (leicht seltsamen) Namen pro Projekt.
  • Jede Datei enthält ein minimales HTML-Dokument mit dem entsprechenden <meta /> Tag

Die Kosten sind ein extra stat() -Aufruf pro Treffer auf den Ort Block, aber Sie die gefürchtete nginx if Richtlinie und die out-of vermeiden -tree echo Modul, und kann trivial den Meta-Inhalt pro Repository optimieren.

Wenn diese seltsamen Dateinamen Sie Fehler verursachen, können Sie den Bereich beschränken: in Ihren .go-Dateien und location /code { try_files ... } in Nginx.

1

Nur um @Not_a_Golfer Antwort zu erweitern, was sehr hilfreich war.

Ich habe das für meine Gerrit Installation Gitiles mit Quellcode für das Surfen, jetzt godoc Werke (Es verbindet Dokumentation nach rechts Codezeile):

# http://stackoverflow.com/questions/26347516/using-go-get-on-a-personal-git-repo/26348986#26348986 
    location ~ "(/[^/]+)(/.*)?" { 
     if ($arg_go-get = "1") { 
       echo '<html><head><meta name="go-import" content="myserver.example.com$1 git https://myserver.example.com$1"/><meta name="go-source" content="myserver.example.com$1 https://myserver.example.com/plugins/gitiles$1 https://myserver.example.com/plugins/gitiles$1/+/master/{dir} https://myserver.example.com/plugins/gitiles$1/+/master/{dir}/{file}#{line}" /></head></html>'; 
     } 
     try_files $uri @gerrit; 
    } 

    location/{ 
     try_files $uri @gerrit; 
    } 
Verwandte Themen