2013-09-05 5 views
8

Ich habe so etwas wie diesesWie erzwinge Composer die Verwendung von https: // anstelle von git: //?

"repositories": [ 
    { 
     "type": "package", 
     "package": { 
      "name": "myrepo", 
      "version": "dev-master", 
      "source": { 
       "url": "https://github.com/me/myrepo.git", 
       "type": "git", 
       "reference": "master" 
      } 
     } 
    }, 

Aber als Komponist den Repo zieht, die Fernbedienungen (origin und composer) in .git/config als git://github.com/me/myrepo.git eingerichtet.

[remote "origin"] 
    url = git://github.com/me/myrepo.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    pushurl = [email protected]:me/myrepo.git 
[branch "master"] 
    remote = composer 
    merge = refs/heads/master 
[remote "composer"] 
    url = git://github.com/me/myrepo.git 
    fetch = +refs/heads/*:refs/remotes/composer/* 

kann ich nicht schieben, weil Github nicht mit git:// funktioniert. Ich muss dies manuell auf https:// ändern und dann drücken. Ich habe in der URL https:// angegeben, aber warum wird das nicht respektiert?

Antwort

17

Sie können das Protokoll für Github mit diesem Befehl ändern:

composer config --global github-protocols https 

Dann neu installieren Anbieter sollten das tun, was Sie wollen.

+0

Auf dem Zend Framework 2 war der Befehl 'php composer.phar config --global github-protocols https' – KalenGi

+0

@KalenGi: Das ist das gleiche, aber Sie verwenden eine lokal installierte 'Composer'-Datei mit dem' '. phar' Erweiterung hinzugefügt. – iconoclast

+0

@Seldaek: funktioniert das für andere Sites als GitHub? Zum Beispiel: git.code.sf.net? – iconoclast

4

Die Option github-protocols funktioniert nur mit GitHub, aber es gibt eine andere Möglichkeit, das Problem zu lösen, das nicht von der Verwendung von GitHub für Ihren Git-Server abhängig ist.

Sie weisen Composer einfach an, eine andere URL zu verwenden, so wie Sie es getan hätten, wenn Sie ein Paket gespalten hätten und Sie sicherstellen wollten, dass Composer Ihre Gabel anstelle des Standardpakets verwendet hat.

Hier ist ein Beispiel, wo ich für ein Paket meine eigene Gabel benutzen, und ich zwinge das Protokoll in der URL http statt git für andere:

"repositories": [{ 
    "type": "vcs", 
    "url": "https://github.com/brandondrew/laravel4-PHPExcel" 
},{ 
    "type": "vcs", 
    "url": "http://git.code.sf.net/p/tcpdf/code" 
}], 

Im Fall Laravel4-PHPExcel hatte ich behebt einen Fehler früh und benötigte meine Korrektur, während ich darauf wartete, dass der Betreuer meine Pull-Anfrage akzeptierte. (Nebenbei bemerkt, er hat seitdem eine Tonne von Verbesserungen an seinem Code gemacht, also lasse ich die Verwendung meiner Gabel fallen, aber ich zeige es hier, weil es als Beispiel nützlich ist, selbst wenn mein Code nein ist In der Praxis sind sie das einzige Paket, das meine Anwendung verwendet, das das Git-Protokoll festlegt. Daher erschien es mir lächerlich, zu betteln und das Sicherheitsteam an meinem Kundenstandort zu bitten, sich zu öffnen Port 9418, wenn ich stattdessen nur HTTP verwenden könnte, was (meiner Meinung nach) sie früher hätte verwenden sollen. Alles, was ich in der URL geändert habe, ist das Ersetzen von git durch http, aber es funktioniert wie jede andere benutzerdefinierte URL, sodass Sie die URL angeben können, die Composer für ein bestimmtes Paket verwendet.


UPDATE:

Nur aus Gründen der Vollständigkeit, fühle ich, ich sollte erwähnen, dass Sie auch als auch das Problem an der Git Ebene lösen können. Im Fall der App, in der ich mit diesem Problem konfrontiert war, hatte ich das Gefühl, dass es besser war, es in Composer zu tun, aber Ihre Situation kann sich unterscheiden, und Ihre Ansichten darüber, was der beste Ansatz für die Situation ist.

Der Git-Ansatz kann viel globaler gestaltet werden, was Sie als Vorteil sehen (oder nicht).Der einfache Fall ist Git zu sagen, eine URL für eine andere zu ersetzen:

git config --global url."http://git.code.sf.net/p/tcpdf/code".insteadOf "git://git.code.sf.net/p/tcpdf/code" 

Sie können aber auch Git sagen immer ersetzen 'git: //' mit 'https: //':

git config --global url."https://".insteadOf "git://" 

In den Beispielen habe ich es in die globale Konfigurationsdatei des Benutzers eingefügt, aber Sie können --global durch --local ersetzen, um es in die Konfigurationsdatei des Repositorys zu stellen (oder --system, um es in die Konfigurationsdatei des Systems zu setzen).

+1

Danke, funktioniert perfekt für TCPDF – loicfavory