2016-05-10 50 views
14

Ho un repository con libreria. Potrebbe essere clonato con successo.Impossibile utilizzare il repository remoto in un compositore su Windows

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

Ma sembra che questa repostory non può essere utilizzato tramite un'inclusione compositore.

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

per l'installazione

$ 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. 
... 

Come utilizzare un repository remoto su Windows con un compositore?

+2

Si tratta di un repository che giace su un percorso di rete '\\ remote \ ...'? – Vampire

+0

@ Vampire, sì. – sectus

+0

puoi condividere la cartella e usare l'indirizzo IP come "//192.168.1.10/myrepo"? –

risposta

6

Si può cercare e aggiungere un package repository simile to this one

In sostanza, si definiscono le stesse informazioni che è incluso in packages.json, ma solo per un unico pacchetto del repository compositore.
Ancora, i campi minimi richiesti sono name, version e uno di dist o source.

(Vedi also this example)

Quindi verificare se il problema persiste.

Solo nel caso, verificare prima se:

+0

Potrebbe essere una soluzione alternativa, ma non funziona anche. – sectus

8

Compositore sarà in grado di capire che tipo di VCS si sta utilizzando, così, invece di "type": "git", provare "type": "vcs" (vedi Composer docs e this SO answer).

Invece di utilizzare un clone git, si potrebbe usare per path reference se si desidera solo per puntare al repository locale invece di clonazione o usando operazioni specifiche Git (come i tag di versione, ecc).

anche su Windows si può necessità di utilizzare la formattazione in stile Windows per il/percorso libreria per il repository (vedi Composer - using a local repository SO commento), e se si tratta di un'unità condivisa di Windows potrebbe essere necessario controllare le autorizzazioni.

EDIT

ho dato un'occhiata più approfondita a questo, ed è stato in grado di riprodurre sia il comportamento git clone e composer install abbastanza facilmente anche da solo guardando il nome della rete del mio PC.

Il tentativo di utilizzare la sintassi in stile Windows (ad esempio file://\\\\remote\\repo\\library) non ha funzionato per me, poiché è caduto nel mezzo del processo Git da qualche parte.

Sembra che ci sono alcuni problemi in giro per le unità di rete di nome che interagiscono all'interno compositore stesso: dato che è possibile caricare i repository sui dischi locali utilizzando il file:// sintassi descritta ed è possibile clonare e recuperare file da un'unità di rete utilizzando il normale //drive/repo correttamente sintassi e riga di comando git Non sono sicuro che sia necessariamente risolvibile senza approfondire la fonte del compositore (che era ciò che doveva accadere per qualcuno a get local Windows drive support).

Ciò significa che l'impostazione della posizione dell'unità di rete da associare a una lettera sul computer locale (come da smcjones' answer) funzionerà anche perché verrà trattata come un'unità di Windows locale. Puoi anche aggiungere degli hook come @smcjones indica se vuoi mappare/rimuovere automaticamente l'unità (anche se dovresti ricordare di non assegnare quella lettera di unità a qualcos'altro).

si Supponendo che hanno accesso al computer in questione, la creazione di un git daemon sul computer della rete locale si desidera servire su da (usando this answer è piuttosto semplice) in modo da poter utilizzare la versione git:// protocollo funziona abbastanza bene, anche se a seconda sulla tua installazione potresti anche aver bisogno di assicurarti che il tuo "minimum-stability" flag sia impostato su "dev" e se non stai effettuando il trasferimento su HTTPS potresti dover cercare il tuo file di configurazione del compositore locale (probabilmente in C:\Users\Username\AppData\Roaming\Composer\config.json) e aggiungere "secure-http": false ad esso per servire attraverso la rete senza impostare un certificato SSL (a meno che non si voglia configurarlo).

+0

Penso che valga la pena provare. –

+0

Non importa il tipo git o il tipo vsc. Il percorso funziona in modo molto strano, copia semplicemente il repository nella radice del progetto. E ho bisogno di usare il repository remoto, quindi ho bisogno di un percorso remoto. – sectus

+0

@sectus una versione di percorso funzionerebbe ancora allo stesso modo e avrebbe bisogno di un aggiornamento, semplicemente non sarebbe in grado di sfruttare il fatto che si tratta di un repository. Ho fatto un po 'di risoluzione dei problemi e sono riuscito a riprodurre la risposta e ho fatto un po' più di ricerca, la mia risposta è stata aggiornata. – Leith

1

fare qualcosa di simile seguente ..

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

Per ulteriori informazioni: attraverso di essa More info

+1

Non capisco. Capisci che sta richiedendo una risorsa locale, e questa è la parte cruciale? –

+0

Non funziona – sectus

2

Se state pensando di usare questa condivisione come server pronti contro termine, o tirare questo repo da più posizioni, è potrebbe voler andare con Leith's answer sulla configurazione di un demone Git, o si potrebbe guardare alla configurazione di SSH server su Windows 10. Questi richiedono ulteriori lavori sulla rete da configurare.

Il metodo seguente può essere utile per qualcuno che sta semplicemente tentando di eseguire il patch di qualcosa insieme e non vuole occuparsi della configurazione del server o dei daemon. Non richiede l'accesso ai privilegi del server e richiede semplicemente di avere accesso alla posizione sulla rete.

La procedura più rapida è quella di mappare l'unità di rete, manualmente o automaticamente. Nella riga di comando, se si desidera mappare a "R":

net use R: \\remote\repo 

In alternativa, è possibile impostare automaticamente questa funzione utilizzando la funzionalità del compositore script e costruire un piccolo file .cmd da eseguire sul pre-update-cmd e post-update-cmd:

map_drive.cmd:

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

Si può fare la stessa cosa per post-update-cmd e post-install-cmd per eliminare la mappatura dei drive di rete.

unmap_drive.cmd

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

compositore.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" 
    ] 
} 
... 

Ora è possibile accedere direttamente.

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

prega di notare che, anche se @Leith ha sottolineato che è necessario utilizzare file://r/ al posto di R:/, ho scoperto che il protocollo file non funzionava sul mio configurazione di Windows. Usa la sintassi che funziona per te!

Se si utilizza questo metodo di patch o un metodo più complesso dipende dall'applicazione e dall'utilizzo. Esecuzione di un demone git o server SSH potrebbe essere visto come un fastidio in determinate circostanze, e aggiunge altro overhead. Se si intende solo utilizzare questo temporaneamente o sporadicamente, gli script di cui sopra dovrebbero farti funzionare.

+0

È possibile risolvere il problema, ma non è un modo convinente. – sectus

+0

@smcjones Se si utilizza un'unità di rete mappata come questa, si usa comunque la sintassi 'file: //', solo nell'esempio fornito 'file: // r/library'. – Leith

+0

Modificato, anche se ho eseguito il test su Composer per Windows e ha funzionato un percorso di unità. – smcjones