2016-05-10 5 views
14

nicht verwenden Ich habe ein Repository mit Bibliothek. Es könnte erfolgreich geklont werden.Kann Remote-Repository in einem Composer unter Windows

$ git clone file:////remote/repo/library 
$ cd library 
$ composer validate 
./composer.json is valid, but with a few warnings 

Es scheint aber, dass diese Repostory nicht über eine Composer Inclusion verwendet werden kann.

... 
"repositories": [ 
    { 
     "type": "git", 
     "url": "file:////remote/repo/library" 
    }] 
... 

Versuch zu installieren

$ composer install -vvv 
... 
Loading composer repositories with package information 
Executing command (//remote/repo/library): git show-ref --tags 
Executing command (//remote/repo/library): git branch --no-color --no-abbrev -v 
Executing command (//remote/repo/library): git branch --no-color 
Executing command (//remote/repo/library): git show "master":composer.json 

    [Composer\Repository\InvalidRepositoryException] 
    No valid composer.json was found in any branch or tag of 
    file:////remote/repo/library, could not load a package from it. 
... 

Wie eine Remote-Repository auf Fenster mit einem Komponisten benutzen?

+2

Ist dies ein Repository, das auf einem Netzwerkpfad '\ remote \ ...' liegt? – Vampire

+0

@ Vampir, ja. – sectus

+0

können Sie Ordner freigeben und IP-Adresse wie "//192.168.1.10/myrepo" verwenden? –

Antwort

6

können Sie versuchen, und fügen Sie ein package repository ähnliche to this one

Grundsätzlich Sie die gleichen Informationen definieren, die packages.json des Komponisten Repository enthalten ist, aber nur für ein einziges Paket.
Wiederum sind die mindestens erforderlichen Felder name, version und entweder dist oder source.

(Siehe also this example)

Dann überprüfen, ob das Problem weiterhin besteht.

Nur für den Fall, überprüfen Sie zuerst, wenn:

+0

Es könnte ein Workaround sein, aber es funktioniert auch nicht. – sectus

8

Komponist der Lage zu arbeiten, welche Art von VCS Sie verwenden, so dass anstelle von "type": "git", versuchen "type": "vcs" (siehe Composer docs und this SO answer).

Anstatt einen git Klon zu verwenden, können Sie ihn mit path reference verwenden, wenn Sie nur auf das lokale Repository zeigen möchten, anstatt ihn zu klonen oder git-spezifische Operationen (wie Versionstags usw.) zu verwenden.

auch unter Windows Sie kann Bedarf im Windows-Stil Formatierung für das Repository/Bibliothekspfad verwenden (siehe Composer - using a local repository Kommentar SO), und wenn es ein Windows freigegebenen Laufwerk ist möglicherweise Berechtigungen überprüfen müssen.

EDIT

Ich hatte einen tiefer gehende Blick auf diese, und war in der Lage, sowohl die git clone und composer install Verhalten ziemlich leicht selbst bei dem Netzwerknamen von meinem eigenen PC, indem Sie gerade schauen, um zu reproduzieren.

Der Versuch, Windows-Stil-Syntax (d. H. file://\\\\remote\\repo\\library) zu verwenden, funktionierte nicht für mich, da es irgendwo in der Mitte des Git-Prozesses umfiel.

Es sieht aus wie es einige Fragen rund um die Namen von Netzlaufwerken der Interaktion innerhalb Komponisten sind selbst: da Sie beschrieben Repositories auf lokalen Festplatten mit der file:// Syntax laden können und es ist möglich, korrekt zu klonen und Dateien von einem Netzwerk-Laufwerk mit dem normalen holen //drive/repo Syntax und Kommandozeile git Ich bin mir nicht sicher, ob dies unbedingt lösbar ist, ohne sich in die Composer-Quelle zu vertiefen (was für jemanden mit get local Windows drive support passieren musste).

Das bedeutet, dass das Einrichten des Netzwerklaufwerkstandorts für die Zuordnung zu einem Buchstaben auf Ihrem lokalen Computer (gemäß smcjones' answer) auch funktioniert, da es genauso behandelt wird wie ein lokales Windows-Laufwerk. Sie können auch Hooks hinzufügen, wie @smcjones darauf hinweist, wenn Sie das Laufwerk automatisch zuordnen bzw. die Zuordnung aufheben möchten (obwohl Sie daran denken müssen, diesen Laufwerksbuchstaben keinem anderen Element zuzuweisen).

Sie Angenommen, haben Zugriff auf den betreffenden Computer, ein git daemon auf dem lokalen Computer im Netzwerk einrichten Sie wollen es servieren aus (mit this answer ziemlich einfach ist), so können Sie die git:// Protokollversion funktioniert recht gut verwenden, obwohl abhängig Bei Ihrer Einrichtung müssen Sie möglicherweise auch sicherstellen, dass Ihre "minimum-stability" flag auf "dev" eingestellt ist und wenn Sie nicht über HTTPS transportieren, müssen Sie möglicherweise Ihre lokale Composer-Konfigurationsdatei (wahrscheinlich in C:\Users\Username\AppData\Roaming\Composer\config.json) suchen und hinzufügen, um sie zu bedienen über das Netzwerk, ohne ein SSL-Zertifikat einzurichten (außer Sie wollen das einrichten).

+0

Ich denke, das ist einen Versuch wert. –

+0

Es ist egal, Git-Typ oder Vsc-Typ. Der Pfad funktioniert sehr merkwürdig, er kopiert einfach Repo in die Wurzel des Projekts. Und ich muss Remote-Repository verwenden, also brauche ich Remote-Pfad. – sectus

+0

@sectus Eine Pfadversion würde immer noch ähnlich funktionieren und müsste aktualisiert werden, Sie könnten es einfach nicht nutzen, um ein Repository zu sein. Ich habe etwas mehr Problembehandlung gemacht und es geschafft, die Antwort zu reproduzieren und habe ein bisschen mehr Nachforschungen gemacht, meine Antwort wurde aktualisiert. – Leith

1

wie unten etwas tun ..

{ 
    "repositories": [ 
     { 
      "type": "vcs", 
      "url": "https://github.com/igorw/monolog" 
     } 
    ], 
    "require": { 
     "monolog/monolog": "dev-bugfix" 
    } 
} 

Für weitere Informationen gehen Sie durch sie More info

+1

Ich verstehe es nicht. Verstehst du, dass er eine lokale Ressource benötigt, und das ist der entscheidende Teil? –

+0

Es funktioniert nicht – sectus

2

Wenn Sie sich mit diesen Anteil als Repo-Server planen oder ziehen diese Repo von mehreren Standorten, Sie Vielleicht möchten Sie mit Leith's answer bei der Einrichtung eines Git-Daemon gehen, oder Sie könnten sehen, SSH server auf Windows 10 einrichten. Diese erfordern zusätzliche Arbeit auf dem Netzwerk einzurichten.

Die folgende Methode kann für jemanden nützlich sein, der einfach versucht, etwas zu patchen und sich nicht mit der Serverkonfiguration oder Dämonen beschäftigen möchte. Es erfordert keinen Zugriff auf Serverberechtigungen und erfordert nur, dass Sie Zugriff auf den Standort in Ihrem Netzwerk haben.

Die schnellste Vorgehensweise besteht darin, Ihr Netzlaufwerk manuell oder automatisch zuzuordnen. In der Befehlszeile, wenn Sie wollen „R“ zur Karte:

net use R: \\remote\repo 

Alternativ können Sie diese automatisch einrichten können script Funktionalität des Komponisten und baut eine kleine .cmd-Datei, indem Sie auf pre-update-cmd und post-update-cmd ausgeführt werden:

map_drive.cmd:

if not exist r: (
    net use R: "\\remote\path\to\repo" 
) 

Sie können für post-update-cmd und post-install-cmd das gleiche tun das Netzlaufwerk unmap.

unmap_drive.cmd

if exist r: (
    net use R: /delete 
) 

Komponist.json:

\.. 
"scripts": { 
    "pre-install-cmd": [ 
     "map_drive.cmd" 
    ], 
    "pre-update-cmd": [ 
     "map_drive.cmd" 
    ], 
    "post-install-cmd": [ 
     "unmap_drive.cmd" 
    ], 
    "post-update-cmd" [ 
     "unmap_drive.cmd" 
    ] 
} 
... 

Jetzt können Sie direkt zugreifen.

\... 
"repositories": [ 
    { 
     "type": "git", 
     "url": "R:/library" 
    }] 
... 

Bitte beachten Sie, dass, obwohl @Leith hat darauf hingewiesen, dass Sie file://r/ anstelle von R:/ verwenden müssen, fand ich, dass das file Protokoll nicht auf meinem Setup von Windows funktioniert. Verwenden Sie die für Sie passende Syntax!

Ob Sie mit dieser Patch-Methode oder einer komplexeren Methode gehen, hängt von Ihrer Anwendung und Verwendung ab. Das Ausführen eines Git-Daemon oder SSH-Servers kann unter bestimmten Umständen als störend empfunden werden und erhöht den Overhead. Wenn Sie dies nur vorübergehend oder nur sporadisch verwenden möchten, sollten Sie mit den obigen Skripten am Laufen sein.

+0

Es ist möglich, Workaround, aber es ist kein Convinent Weg. – sectus

+0

@smcjones Wenn Sie ein zugeordnetes Netzlaufwerk wie dieses verwenden, würden Sie immer noch die 'file: //' -Syntax verwenden, nur wäre es im angegebenen Beispiel 'file: // r/library'. – Leith

+0

Editiert, obwohl ich auf Composer für Windows getestet habe und ein Laufwerkspfad funktioniert. – smcjones