2010-11-12 54 views
96

Tôi đã chia ra một Phụ huynh: project cho Trẻ em: this. Bây giờ, tôi muốn cập nhật cho con tôi với các cập nhật hiện tại của cha mẹ. Tôi có thể làm điều đó, nếu có?Cập nhật github repo của tôi được chia ra khỏi một dự án khác

Khi tôi cập nhật repo github của mình, sau đó tôi có thể thực hiện "git pull" để cập nhật repo cục bộ của mình.

+0

Bạn đã chuyển nó về phía sau - bạn thực hiện công việc của bạn trong repo cục bộ của bạn và sau đó thực hiện git push để cập nhật điều khiển từ xa. – Cascabel

+10

Có, tôi hiểu điều đó, nhưng có rất ít thay đổi trong dự án ban đầu mà tôi cần phải kết hợp trong bản sao làm việc của mình. Đó là lý do tại sao tôi cần phải cập nhật repo địa phương của tôi với các bản cập nhật của dự án ban đầu trong khi vẫn giữ nguyên các thay đổi mã của tôi ở địa phương. – zengr

+2

Đó chính xác là những gì chúng tôi đã giải thích cách thực hiện. Tôi chỉ đơn giản chỉ ra rằng bạn không "cập nhật repo github, sau đó ... kéo để cập nhật repo địa phương của bạn" - bạn cập nhật repo địa phương, sau đó đẩy đến repo github. – Cascabel

Trả lời

90

Trong bản sao địa phương của bạn của trẻ em, kéo từ phụ huynh, thêm nó như là một từ xa nếu bạn thích:

cd child 
git remote add parent <parent-url> 
git pull parent 

Url của phụ huynh có thể repo github công cộng, hoặc bản sao cục bộ của bạn của nó - bản sao cục bộ tất nhiên sẽ nhanh hơn. Nếu bạn muốn kéo chi nhánh khác với HEAD hiện tại của kho lưu trữ gốc, chỉ cần thêm đối số (ví dụ: git pull parent topic-branch). Nếu đây là điều một lần, bạn chỉ có thể bỏ qua thêm điều khiển từ xa: git pull <parent-url> [branch].

Kéo là kết hợp tìm nạp và hợp nhất, vì vậy khi bạn đã thực hiện điều đó, bạn đã có một cam kết hợp nhất mới, bạn có thể muốn đẩy trở lại repo công khai của bạn tại một số điểm.

Điểm mấu chốt ở đây, trong trường hợp không rõ ràng, là việc kéo từ kho lưu trữ gốc (upstream) không khác với việc kéo từ bản sao con công khai của bạn, kho lưu trữ hiện tại của bạn. Dù bằng cách nào, bạn đang tìm nạp từ một kho lưu trữ với một số lịch sử chung và hợp nhất nó vào nhánh hiện tại của bạn. Và tất nhiên, kể từ khi bạn đang sáp nhập, một cây công việc là bắt buộc - vì vậy đây là một cái gì đó phải được thực hiện trong repo địa phương của bạn. Repo được lưu trữ trên github về cơ bản là cách xuất bản những gì bạn đã thực hiện cục bộ. Tất cả những gì bạn thực sự có thể làm với nó là đẩy/kéo và duyệt những gì ở đó.

+2

Tôi gặp lỗi 'Bạn đã yêu cầu kéo từ' nguồn gốc 'từ xa, nhưng không chỉ định chi nhánh. Bởi vì đây không phải là cấu hình mặc định từ xa cho nhánh hiện tại của bạn, bạn phải chỉ định một nhánh trên dòng lệnh' khi tôi đã làm 'git pull parent'. Bạn có thể nhanh chóng đi qua nó với 'git pull parent master'. Đây chỉ là một giải pháp nếu bạn đang làm việc trực tiếp trong nhánh chính của bạn hoặc chỉ có một nhánh hoặc không có ý tưởng về chi nhánh là gì và chỉ muốn hợp nhất nhanh chóng. Loại giải pháp mới-ong hoặc nếu bạn chỉ là một giải pháp nhanh chóng để giới thiệu một sự thay đổi nhỏ. –

12

Bạn muốn:

git pull git://github.com/voldemort/voldemort.git

+0

vì vậy, bởi lệnh đó, repo địa phương của tôi sẽ được cập nhật nhưng những gì về dự án con của tôi trên github? Tôi sẽ đẩy nó cho con github của tôi? – zengr

+0

@zengr: 'git pull' là kết hợp của' git fetch' và 'git merge'.Trong thực tế, nó kết hợp một nhánh từ kho lưu trữ từ xa vào nhánh hiện tại của bạn. Cũng giống như với bất kỳ công việc nào khác bạn làm trong kho lưu trữ cục bộ của mình, để đưa nó đến điều khiển từ xa, bạn hãy đẩy nó. – Cascabel

+0

Như những người khác đã đề nghị, 'git remote add parent', khác nhau như thế nào từ thẩm định của bạn chỉ' git pull'? – zengr

15
  1. Clone repo của bạn để máy tính cục bộ của bạn, nếu bạn chưa sẵn sàng: git clone [email protected]:utkarsh2012/voldemort.git
  2. Thêm thượng lưu như một điều khiển từ xa mới: git remote add upstream git://github.com/voldemort/voldemort.git
  3. Với chi nhánh của bạn kiểm tra ra, kéo ngược dòng thành chi nhánh của bạn, sẽ tạo hợp nhất giữa hai tập hợp thay đổi: git pull upstream hoặc git pull upstream branch-to-merge. Nếu bạn đang làm việc trên chi nhánh chưa được rửa, bạn cũng có thể sử dụng git fetchgit rebase để rebase công việc của mình mà không cần hợp nhất.
3

này cũng có thể được thực hiện đơn giản trên giao diện web GitHub của: Ban hành một Kéo Yêu cầu nhưng trao đổi các repo cơ sởđầu repo. Nếu kéo có thể được thực hiện tự động, nó sẽ được.

+5

** Cảnh báo ** nếu bạn làm điều này, nó thêm một cam kết vào dự án chia đôi của bạn. Vì vậy, bạn kết thúc một cam kết trước dự án phụ huynh. –

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