2013-04-18 25 views
8

Có cách nào để đẩy một cam kết đến một repo git từ xa, mà không cần làm một bản sao cục bộ của repo đó?Làm thế nào để cập nhật một tập tin trong repo từ xa, mà không nhân bản mà repo đầu tiên?

Tôi có URL hợp lệ cho repo từ xa, tôi biết đường dẫn của tệp và tất cả những gì tôi muốn làm là đẩy phiên bản cập nhật của tệp lên tệp chính. Lý tưởng nhất là tôi muốn điều này hoạt động với bất kỳ URL repo hợp lệ từ xa nào, nhưng nó vẫn hữu ích nếu nó chỉ hoạt động với các URL git dựa trên https.

Tôi đoán điều này là không thể, vì dường như không thể lấy được một tệp mà không nhân bản trong trường hợp chung, theo câu trả lời How to "git show" on a remote repo?. Nhưng tôi hy vọng có một giải pháp thay thế sử dụng một số lệnh git cấp thấp hơn.

+1

Đừng nghĩ rằng điều đó là có thể, cũng không thực sự, tại sao bạn sẽ chỉnh sửa các tệp mà không có toàn bộ repo ở địa điểm đầu tiên? –

+1

Nếu repo từ xa được lưu trữ tại [github] (http://github.com), bạn có thể chỉnh sửa tệp trực tiếp tại đó. Nếu không thì tôi không nghĩ là có thể. –

+1

@MadaraUchiha Tại sao? Bởi vì đôi khi bạn chỉ cần thực hiện một thay đổi nhỏ cho một repo lớn, và nó tốn rất nhiều thời gian để sao chép toàn bộ điều. Trong trường hợp của tôi, một ứng dụng quản lý cần phải cập nhật siêu dữ liệu chứa trong hàng trăm repo git, nhưng không muốn duy trì các bản sao cục bộ của tất cả chúng chỉ cho mục đích đó. – algal

Trả lời

7

Không thể. Nhưng vì một cam kết tiềm năng sẽ chỉ cần có một cam kết duy nhất là cha mẹ của nó có thể sử dụng cái gọi là "nhân bản nông" và lấy chỉ là cam kết của nhánh bạn cần. Điều này sẽ chỉ mang lại một số lượng tối thiểu các đối tượng từ xa. Tìm tùy chọn dòng lệnh --depth của git clone.

+0

Tính năng thú vị! Mặc dù vậy, các trang của người đàn ông nói: _you không thể sao chép hoặc lấy từ nó, ** cũng không được đẩy từ cũng không vào nó ** _.Vì vậy, ngay cả khi bạn có thể sử dụng điều này để tạo một bản vá và gửi bản vá riêng lẻ, nó sẽ không giúp bạn tự động đẩy các thay đổi. – Shahbaz

+0

@Shahbaz Hướng dẫn thực sự là sai ở đó, bạn có thể đẩy từ nó tốt ... – poke

+0

@poke, tôi đã không thử nó, nhưng nếu bạn chắc chắn, hãy xem xét nộp báo cáo lỗi trên trang hướng dẫn sử dụng. – Shahbaz

3

Không, tôi không nghĩ điều đó là có thể. Bạn cần sao chép toàn bộ kho lưu trữ để làm việc này. Git cần biết về tất cả các tệp và .git để thực hiện công việc của mình một cách chính xác. Đây là lý do tại sao bạn không thể chỉ đẩy các tập tin tùy ý như thế.

1

@algal, cho trường hợp sử dụng cụ thể của bạn, bạn có thể có thể sử dụng mô-đun con (http://git-scm.com/docs/git-submodule). Bạn có thể sao chép và cam kết với submodule, w/o nhân bản "siêu mẫu" có thể chứa mã "khổng lồ" mà bạn đã đề cập. Siêu mô hình có thể tham khảo mô-đun con cho thông tin cấu hình bạn đã đề cập.

0

Có bạn có thể đẩy một phiên bản mới sử dụng tagging

theo này bước

ở gốc dự án mới của bạn

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

bây giờ bạn có một chi nhánh gọi là v2.0 mới với dự án mới của bạn và chi nhánh tổng thể của bạn vẫn giữ nguyên. Sau đó nếu bạn không thể thay đổi nhánh mặc định của mình trong cài đặt dự án github của bạn.

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