theo dõi tiểu trình git mới nhất


136

Chúng tôi đang chuyển dự án (rất lớn) của mình sang git và chúng tôi đang suy nghĩ về việc sử dụng các mô hình con. Kế hoạch của chúng tôi là có ba cái đầu khác nhau trong siêu dự án: phát hành, ổn định, mới nhất. Các dự án dẫn sẽ xử lý các chi nhánh phát hành và ổn định. Họ sẽ di chuyển các mô hình con theo yêu cầu.

Vấn đề là cái đầu "mới nhất". Chúng tôi muốn phần đầu "siêu mới nhất" theo dõi các nhánh chính của tất cả các mô hình con (tự động). Và cũng thật tuyệt nếu nó hiển thị lịch sử của tất cả các cam kết với mô hình con.

Tôi đã xem gitslave, nhưng nó không hoàn toàn như những gì chúng ta muốn. Bất kỳ đề xuất?


Trong khi bạn yêu cầu một công cụ, tôi chỉ muốn kết nối câu hỏi này để thu thập một lớp lót làm điều tương tự: stackoverflow.com/questions/1030169/ Lỗi
Tobu

Git hiện cung cấp theo dõi mới nhất với các mô hình con: xem câu trả lời được chỉnh sửa của tôi.
VonC

Câu trả lời:


235

Cập nhật tháng 3 năm 2013

Git 1.8.2 đã thêm khả năng theo dõi các nhánh.

" git submodule" bắt đầu học một chế độ mới để tích hợp với đầu nhánh từ xa (trái ngược với tích hợp với cam kết được ghi trong gitlink của siêu dự án).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Nếu bạn đã có một mô hình con đã có sẵn, bây giờ bạn muốn theo dõi một nhánh, xem " cách tạo một mô hình con hiện có theo dõi một nhánh ".

Cũng xem hướng dẫn của Vogella về các mô hình con để biết thông tin chung về các mô hình con.

Ghi chú:

git submodule add -b . [URL to Git repo];
                    ^^^

Xem git submoduletrang người đàn ông :

Một giá trị đặc biệt .được sử dụng để chỉ ra rằng tên của nhánh trong mô hình con phải cùng tên với nhánh hiện tại trong kho lưu trữ hiện tại .


Xem cam kết b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: Nếu --branchđược đưa ra, ghi lại vào.gitmodules

Điều này cho phép bạn dễ dàng ghi lại một submodule.<name>.branchtùy chọn .gitmoduleskhi bạn thêm một mô hình con mới. Với bản vá này,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

giảm xuống

$ git submodule add -b <branch> <repository> [<path>]

Điều này có nghĩa là các cuộc gọi trong tương lai tới

$ git submodule update --remote ...

sẽ nhận được các bản cập nhật từ cùng một nhánh mà bạn đã sử dụng để khởi tạo mô hình con, thường là những gì bạn muốn.

Đã ký tắt: W. Trevor King


Câu trả lời gốc (tháng 2 năm 2012):

Một mô hình con là một cam kết duy nhất được tham chiếu bởi một repo cha.
Vì nó là một repo Git của riêng nó, "lịch sử của tất cả các cam kết" có thể truy cập được thông qua một git logmô hình con đó.

Vì vậy, để cha mẹ tự động theo dõi cam kết mới nhất của một nhánh con nhất định, nó sẽ cần phải:

  • cd trong mô hình con
  • git fetch / pull để đảm bảo nó có các xác nhận mới nhất trên nhánh bên phải
  • cd trở lại trong repo cha
  • thêm và cam kết để ghi lại cam kết mới của mô hình con.

gitslave (mà bạn đã xem) dường như là phù hợp nhất, bao gồm cả cho hoạt động cam kết .

Có một chút khó chịu khi thực hiện các thay đổi cho mô hình con do yêu cầu kiểm tra trên nhánh con chính xác, thực hiện thay đổi, cam kết và sau đó đi vào siêu dự án và cam kết (hoặc ít nhất là ghi lại vị trí mới của mô hình con).

Các lựa chọn thay thế khác được chi tiết ở đây .


1
@BraveNewMath bạn cần kiểm tra nhánh bên phải trong mô hình con của bạn, sau đó đi đến repo cha mẹ của bạn và gõ : git config -f .gitmodules submodule.<path>.branch <branch>. Thêm mọi thứ, cam kết và đẩy.
VonC

2
@BraveNewMath Tôi chi tiết tất cả các bước để tạo một mô hình con theo dõi một nhánh trong stackoverflow.com/a/18799234/6309 .
VonC

1
Điều quan trọng là sử dụng --remotethẻ nếu bạn không muốn nhận được các đầu tách ra khi bạn cập nhật, tự hỏi tại sao có vẻ như mã mới được kéo của bạn lại đứng sau chủ!
Chris Watts

3
@DC_ Tôi đồng ý với "câu trả lời này" (vì tôi đã viết nó). Tính năng "theo nhánh" có nghĩa là cập nhật một mô hình con thành cam kết mới nhất của một nhánh. Khi đã xong, bạn vẫn sẽ phải thêm và cam kết trạng thái mô hình con mới trong repo cha. Và bản sao tiếp theo sẽ kiểm tra trạng thái đó (không đầu).
VonC

3
@VonC Vì vậy, để làm rõ hơn, tính năng "theo nhánh" chỉ ảnh hưởng đến hành vi của git submodule updatelệnh bằng cách cho nó biết cam kết nào (tức là cam kết gần đây nhất của chủ) để cập nhật mô hình con, không tự động khiến repo cha cập nhật cam kết được chỉ ra bởi các mô hình con tại thời điểm nhân bản?
christner
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.