2010-05-26 45 views

Trả lời

24

Đối với Git 1.6.4 trở lên, hãy đặt remote.<name>.pushurl với cấu hình git.

Bạn có thể sử dụng tính năng này để kéo bằng giao thức chỉ đọc https: và đẩy bằng giao thức dựa trên ssh.


Say origin 's url (remote.origin.url) là https://git.example.com/some/repo.git. Đây là chỉ đọc, nhưng bạn có quyền truy cập ghi thông qua ‘URL’ dựa trên ssh [email protected]:some/repo.git. Chạy lệnh sau để có hiệu lực đẩy qua giao thức ssh-based:

git config remote.origin.pushurl [email protected]:some/repo.git 
+0

Làm thế nào để thúc đẩy một câu nói ' phát triển 'chi nhánh và kéo đến từ nói' sản xuất 'chi nhánh trong cùng một kho + Git từ xa? – Ninad

3

Từ những gì tôi có thể thu thập từ git config man page, repo ngược dòng là:

  • bởi nguồn gốc mặc định
  • do branch.remote
  • luôn cho cả git pull/fetchgit pull

Đối với một cho nhánh, tôi không thấy bất kỳ cách nào để có hai từ xa riêng biệt theo mặc định.

+0

Điều này có vẻ đúng trong thực tế cho git v1.8.3.2, sau khi thử cả cụm từ 'git config remote ...' và git remote set-url ... ', cho một nhánh hoặc toàn bộ bản sao của một repo. –

+0

để đặt lại từ xa mặc định trở lại thành 'origin' cho nhánh hiện tại và đẩy/kéo đến/từ tên chi nhánh phù hợp:' git push - origin-upstream origin ' – hobs

71

Kể từ Git phiên bản 1.7.0, bạn có thể thiết lập này với:

git remote set-url --push origin https://your.push.com/blah/ 
+0

3 năm sau câu hỏi, nhưng đây phải là câu trả lời được chấp nhận mới! – Kevlar

+1

@Kevlar Tại sao? Việc chấp nhận được sử dụng để đánh dấu không phải lúc nào cũng là câu trả lời "tốt nhất", mà là câu trả lời cho OP (đọc FAQ để biết thêm thông tin). Tại một thời điểm đặt câu hỏi ở trên, câu trả lời sẽ không hoạt động (thậm chí không tồn tại), như git là cách sớm hơn 1.8. Tuy nhiên, câu trả lời được chấp nhận đã làm việc cho OP. Lý do gì để bạn tìm cách thay đổi quyết định của OP sau ba năm? – trejder

+7

@trejder Stack Overflow cũng là một nơi để phục vụ câu trả lời hữu ích cho khách truy cập trong tương lai, những người tìm thấy một câu hỏi thông qua một công cụ tìm kiếm hoặc bất cứ điều gì. Có giá trị để có câu trả lời hiện tốt nhất xuất hiện đầu tiên. Tôi không nói rằng OP * phải * thay đổi câu trả lời được chấp nhận, nhưng nó sẽ là hoàn toàn hợp lý (và theo ý kiến ​​của tôi là một tích cực net) để làm như vậy. – amalloy

3

này hoạt động trong 1.7.1 trở lên -

git remote set-url --push origin [email protected]:username/somerepo.git 
+0

Điều này khác với câu trả lời của [user392887] (http://stackoverflow.com/a/17930364/41071) như thế nào? – svick

+1

Tôi không có khả năng nhận xét hoặc trả lời câu trả lời đó. Hai điều quan trọng cần lưu ý trong câu trả lời của tôi: 1) Tôi sử dụng ssh. Theo GitHub, "Chúng tôi khuyên bạn nên sử dụng kết nối SSH khi tương tác với GitHub. Khóa SSH là cách để nhận dạng các máy tính đáng tin cậy mà không cần có mật khẩu." 2) Bất cứ ai sử dụng RHEL/CentOS 6 sẽ sử dụng git 1.7.1 theo mặc định - 1.7.1 hỗ trợ set-url, tôi chỉ sử dụng nó. – potto

18

Kể từ Git 1.8.3, bạn có thể sử dụng tùy chọn remote.pushDefault để thực hiện chính xác những gì bạn muốn (tức là có điều khiển từ xa mặc định khác nhau cho pullpush). Bạn có thể đặt tùy chọn giống như bất kỳ tùy chọn nào khác; ví dụ, để đặt nó vào pushTarget từ xa, sử dụng

git config remote.pushDefault pushTarget 

Tùy chọn này sẽ có tác dụng sau:

  • git pull sẽ kéo từ quy định từ xa bằng các remote tùy chọn trong phần chi nhánh liên quan .git/config, trong khi
  • git push sẽ đẩy tới điều khiển từ xa được chỉ định bởi remote.pushDefault.

Lưu ý rằng bạn cần chỉ định tên của điều khiển từ xa, không phải URL. Điều này làm cho giải pháp này linh hoạt hơn giải pháp liên quan đến remote.<name>.pushurl, bởi vì (ví dụ) bạn sẽ vẫn có các nhánh theo dõi cho cả hai điều khiển từ xa. Cho dù bạn cần hay muốn sự linh hoạt này tùy thuộc vào bạn.

The release notes nói tùy chọn này được thêm cụ thể để hỗ trợ quy trình làm việc tam giác.

+0

Lạ lùng: Tôi nghĩ bạn đang đẩy lên thượng lưu, và bạn không biết có bao nhiêu repo ở hạ lưu đang kéo ra khỏi bạn: xem http://stackoverflow.com/a/2749166/6309 – VonC

+0

@VonC Ah, vâng, tôi thấy tại sao nó khó hiểu. Tôi thường gọi điều khiển từ xa mà tôi muốn * kéo * từ mặc định 'upstream' vì ... well ... nó là thượng nguồn của kho lưu trữ của tôi trong suốt quá trình kéo. Nhưng tùy chọn là 'pushDefault', không phải' pullDefault', vì vậy tôi đã sử dụng 'downstream' làm tên trong ví dụ. Nó có thể là một ý tưởng tốt hơn để gọi nó là 'defaultPushTarget';) – MvanGeest

+0

@MvanGeest Tôi đồng ý. Nhưng tôi xác nhận bạn thường đẩy lên "thượng lưu". Có một (hoặc rất ít và được biết đến) thượng nguồn. Nhưng có thể có nhiều (và chưa biết) hạ lưu. Đó là vũ trụ DVCS (như trong "phân tán"). – VonC

Các vấn đề liên quan