git hợp nhất các kho lưu trữ khác nhau?


79

Tôi đã sử dụng SVN cho tất cả các dự án của mình. Đôi khi dự án B có nguồn gốc là một bản sao từ dự án A. Khi dự án A có một thay đổi chung, tôi có thể sử dụng svn merge Atrong thư mục B và nó sẽ hợp nhất những thay đổi đó.

Bây giờ, nếu tôi muốn sử dụng git. Tôi không thích có tất cả các dự án của mình trong cùng một kho lưu trữ vì sau đó tôi phải sao chép mọi thứ và không thể chọn chỉ một dự án như trong SVN. Nhưng có một kho lưu trữ cho mỗi dự án, làm cách nào để thực hiện giống như tôi đã làm trước đó với SVN?

Câu hỏi đặt ra là: Cách tốt nhất để cấu trúc nó là gì nếu tôi muốn một số dự án con thực sự liên quan đến một dự án ban đầu và để giữ chúng đồng bộ? Và tôi cũng muốn có thể kiểm tra chúng một cách riêng biệt


1
Có lẽ bạn nên xem git-submodule ( kernel.org/pub/software/scm/git/docs/git-submodule.html ).
Cascabel

@Jefromi nhưng các tệp nguồn về cơ bản có cùng lịch sử, điều này có nghĩa là tôi có hai bản sao của tệp? Tôi nghĩ rằng mô-đun con nhiều hơn để theo dõi các thư viện bên ngoài mà bạn bao gồm dưới dạng các tệp riêng biệt (không hợp nhất)?
baloo

Đừng bận tâm, tôi không thấy rằng bạn nói B là bản sao của A. Đọc "câu hỏi là" của bạn, nơi bạn nói "các dự án con ... liên quan đến một dự án ban đầu ... đồng bộ" Tôi cho rằng bạn muốn lấy các phần của dự án ban đầu đó, nhưng giữ chúng đồng bộ trong siêu dự án.
Cascabel

Câu trả lời:


140

Nếu bạn có hai dự án, proj1proj2và muốn kết hợp những thay đổi của proj1thành proj2, bạn sẽ làm điều đó như thế này:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

Tôi tin rằng điều này cũng giống như những gì bạn đã làm với SVN.


Nhưng liệu hợp nhất bài hát thay đổi số 2 mà chúng tôi đã hợp nhất thay đổi số 1 có thực hiện theo cách này không? Tôi đã phải hợp nhất lại tất cả các thay đổi (và sửa các xung đột) cho tất cả các thay đổi mỗi khi một thay đổi mới được thêm vào nếu tôi nhớ chính xác. Điều này đã không xảy ra theo cách SVN
baloo

Tất nhiên, hợp nhất hoạt động như bình thường. Bạn không cần phải "thực hiện lại tất cả các thay đổi". Đây không gì khác hơn là hợp nhất thông thường, hợp nhất mà bạn sẽ sử dụng với một máy chủ ở xa.
Olivier Verdier

Nếu tôi không có điều khiển thì sao? Tôi muốn làm điều tương tự (hợp nhất projA vào projB) nhưng tôi chỉ làm việc cục bộ mà không có điều khiển từ xa.
L. Holanda

1
@LeoHolanda Các tệp cục bộ được tính là từ xa theo git có liên quan.
PyRulez

3
@LeoHolanda Bạn có ý ở đây. Tôi phải biểu thị repo địa phương trong định dạng URL, chẳng hạn như tập tin: ///Users/abc/path/to/my/repo/.git
mcku
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.