2013-09-05 86 views
8

Tôi có một cái gì đó như thế nàyCách buộc Composer sử dụng https: // thay vì git: //?

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

Nhưng khi Composer kéo repo, các điều khiển từ xa (origincomposer) trong .git/config được thiết lập là git://github.com/me/myrepo.git.

[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/* 

Tôi không thể đẩy nó, vì Github không hoạt động với git://. Tôi phải tự thay đổi điều này thành https:// và sau đó nhấn. Tôi đã chỉ định https:// trong URL, nhưng tại sao điều này không được tôn trọng?

Trả lời

17

Bạn có thể thay đổi các giao thức được sử dụng để github với lệnh này:

composer config --global github-protocols https 

Sau đó cài đặt lại các nhà cung cấp nên làm những gì bạn muốn.

+0

Trên Zend Framework 2 lệnh này là 'php composer.phar config --global github-protocol https' – KalenGi

+0

@KalenGi: Cũng giống như vậy, nhưng bạn đang sử dụng một tệp' composer' được cài đặt cục bộ với '. Đã thêm tiện ích mở rộng phar'. – iconoclast

+0

@Seldaek: điều này có hiệu quả đối với các trang web không phải GitHub không? Ví dụ: git.code.sf.net? – iconoclast

4

Tùy chọn github-protocols chỉ hoạt động với GitHub, nhưng có một cách khác để giải quyết sự cố không phụ thuộc vào việc sử dụng GitHub cho máy chủ Git của bạn.

Bạn chỉ cần cho Composer sử dụng một URL khác, giống như cách bạn đã chia gói và bạn muốn đảm bảo Composer đã sử dụng ngã ba thay vì gói mặc định.

Dưới đây là một ví dụ mà tôi sử dụng nĩa của riêng mình cho một gói, và tôi buộc các giao thức trong URL để http thay vì git thêm:

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

Trong trường hợp của Laravel4-PHPExcel, tôi đã có cố định một lỗi sớm, và cần sửa chữa của tôi trong khi tôi đợi người duy trì chấp nhận yêu cầu kéo của tôi. (Ngoài ra, anh ta đã thực hiện một số cải tiến mã tấn của mình, vì vậy tôi bỏ việc sử dụng ngã ba của mình, nhưng tôi hiển thị nó ở đây vì nó hữu ích làm ví dụ, ngay cả khi mã của tôi không Trong trường hợp của TCPDF, chúng là gói duy nhất mà ứng dụng của tôi sử dụng chỉ định giao thức Git, vì vậy nó có vẻ vô lý để cầu xin và cầu xin với đội bảo mật tại vị trí khách hàng của tôi để mở ra cổng 9418 khi tôi chỉ có thể sử dụng HTTP thay vào đó, mà (theo ý kiến ​​của tôi) họ nên đã sử dụng để bắt đầu với. Tất cả những gì tôi đã thay đổi trong URL là thay thế git bằng http, nhưng nó hoạt động giống như bất kỳ URL nào do người dùng chỉ định khác, cho phép bạn chỉ định URL mà Composer sử dụng cho một gói nhất định.


CẬP NHẬT:

Chỉ vì lợi ích của việc hoàn thành, tôi cảm thấy tôi nên đề cập đến rằng bạn cũng có thể giải quyết vấn đề ở cấp Git là tốt. Trong trường hợp ứng dụng mà tôi gặp phải vấn đề này, tôi cảm thấy rằng việc thực hiện nó trong Composer phù hợp hơn, nhưng tình huống của bạn có thể khác nhau và bạn có thể xem cách tiếp cận tốt nhất cho tình huống là gì.

Cách tiếp cận Git có thể được thực hiện nhiều hơn toàn cầu, mà bạn có thể thấy là một lợi thế (hay không).Các trường hợp đơn giản là nói với Git để thay thế một URL cho người khác:

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

Nhưng bạn cũng có thể cho Git để luôn luôn thay thế 'git: //' với 'https: //':

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

Trong các ví dụ, tôi đặt nó vào tập tin cấu hình chung của người dùng, nhưng bạn có thể thay thế --global bằng --local để đặt nó vào tập tin cấu hình của kho lưu trữ (hoặc --system để đặt nó vào tập tin cấu hình của hệ thống).

+1

Cảm ơn, hoạt động hoàn hảo cho TCPDF – loicfavory