Nếu tôi sửa đổi một mô hình con, tôi có thể đẩy cam kết trở lại nguồn gốc của mô hình con, hoặc điều đó sẽ yêu cầu một bản sao? Nếu nhân bản, tôi có thể lưu trữ một bản sao trong kho lưu trữ khác không?
Nếu tôi sửa đổi một mô hình con, tôi có thể đẩy cam kết trở lại nguồn gốc của mô hình con, hoặc điều đó sẽ yêu cầu một bản sao? Nếu nhân bản, tôi có thể lưu trữ một bản sao trong kho lưu trữ khác không?
Câu trả lời:
Một mô hình con không là gì ngoài bản sao của một git repo trong một repo khác với một số dữ liệu meta bổ sung (mục nhập cây gitlink, tệp .gitmodules)
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
gh-pages
chi nhánh cho tài liệu về repo github :)
Lưu ý rằng kể từ git1.7.11 ( [ANNOUNCE] Git 1.7.11.rc1 và ghi chú phát hành , tháng 6 năm 2012) đề cập:
"
git push --recurse-submodules
" Học cách tùy ý nhìn vào lịch sử của các mô hình con được liên kết với siêu dự án và đẩy chúng ra.
Có thể được thực hiện sau bản vá này và --on-demand
tùy chọn:
recurse-submodules=<check|on-demand>::
Đảm bảo rằng tất cả các cam kết mô hình con được sử dụng bởi các phiên bản được đẩy đều có sẵn trên một nhánh theo dõi từ xa.
- Nếu
check
được sử dụng, nó sẽ được kiểm tra rằng tất cả các cam kết mô hình con đã thay đổi trong các phiên bản sẽ được đẩy đều có sẵn trên một điều khiển từ xa.
Nếu không, việc đẩy sẽ bị hủy bỏ và thoát với trạng thái khác không.- Nếu
on-demand
được sử dụng, tất cả các mô hình con thay đổi trong các phiên bản sẽ được đẩy sẽ được đẩy.
Nếu theo yêu cầu không thể đẩy tất cả các sửa đổi cần thiết, nó cũng sẽ bị hủy bỏ và thoát với trạng thái khác không.
Vì vậy, bạn có thể đẩy mọi thứ trong một lần với (từ repo cha) a:
git push --recurse-submodules=on-demand
Tùy chọn này chỉ hoạt động cho một cấp độ lồng. Thay đổi mô hình con bên trong mô hình con khác sẽ không được đẩy.
Với git 2.7 (tháng 1 năm 2016), một cú đẩy git đơn giản sẽ đủ để đẩy repo cha mẹ ... và tất cả các mô hình con của nó.
Xem cam kết d34141c , cam kết f5c7cd9 (03 tháng 12 năm 2015), cam kết f5c7cd9 (03 tháng 12 năm 2015) và cam kết b33a15b (17 tháng 11 năm 2015) của Mike Crowe ( mikecrowe
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 5d35d72 , ngày 21 tháng 12 năm 2015)
push
: thêmrecurseSubmodules
tùy chọn cấu hìnhCác
--recurse-submodules
tham số dòng lệnh đã tồn tại trong một thời gian nhưng nó không có tập tin cấu hình tương đương.Theo kiểu của tham số tương ứng cho
git fetch
, hãy phát minhpush.recurseSubmodules
để cung cấp mặc định cho tham số này.
Điều này cũng yêu cầu bổ sung--recurse-submodules=no
để cho phép cấu hình được ghi đè trên dòng lệnh khi được yêu cầu.Cách đơn giản nhất để thực hiện điều này dường như là
push
sử dụng mãsubmodule-config
theo cách tương tựfetch
.
Tài git config
liệu hiện bao gồm :
push.recurseSubmodules
:Đảm bảo rằng tất cả các cam kết mô hình con được sử dụng bởi các phiên bản được đẩy đều có sẵn trên một nhánh theo dõi từ xa.
- Nếu giá trị là '
check
', thì Git sẽ xác minh rằng tất cả các cam kết của mô hình con đã thay đổi trong các phiên bản sẽ được đẩy đều có sẵn trên ít nhất một điều khiển của mô hình con. Nếu bất kỳ cam kết nào bị thiếu, việc đẩy sẽ bị hủy bỏ và thoát với trạng thái khác không.- Nếu giá trị là '
on-demand
' thì tất cả các mô hình con đã thay đổi trong các phiên bản sẽ được đẩy sẽ được đẩy. Nếu theo yêu cầu không thể đẩy tất cả các sửa đổi cần thiết, nó cũng sẽ bị hủy bỏ và thoát với trạng thái khác không. -- Nếu giá trị là '
no
' thì hành vi mặc định của việc bỏ qua các mô hình con khi đẩy được giữ lại.Bạn có thể ghi đè cấu hình này tại thời điểm đẩy bằng cách chỉ định '
--recurse-submodules=check|on-demand|no
'.
Vì thế:
git config push.recurseSubmodules on-demand
git push
Git 2.12 (Q1 2017)
git push --dry-run --recurse-submodules=on-demand
sẽ thực sự làm việc
Xem cam kết 0301c82 , cam kết 1aa7365 (17 tháng 11 năm 2016) của Brandon Williams ( mbrandonw
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 12cf113 , ngày 16 tháng 12 năm 2016)
push run with --dry-run
không thực sự (Git 2.11 tháng 12 năm 2016 và thấp hơn / trước) thực hiện chạy khô khi đẩy được cấu hình để đẩy các mô hình con theo yêu cầu.
Thay vào đó, tất cả các mô hình con cần được đẩy thực sự được đẩy đến điều khiển từ xa trong khi mọi cập nhật cho siêu dự án được thực hiện dưới dạng chạy khô.
Đây là một lỗi và không phải là hành vi dự định của chạy khô.Dạy
push
cách tôn trọng--dry-run
tùy chọn khi được định cấu hình để đẩy đệ quy các mô đun con 'theo yêu cầu'.
Điều này được thực hiện bằng cách chuyển--dry-run
cờ cho tiến trình con thực hiện thao tác đẩy cho một mô hình con khi thực hiện chạy khô.
Và vẫn còn trong Git 2.12, bây giờ bạn có --recurse-submodules=only
tùy chọn "" để đẩy các mô hình con ra mà không cần đẩy siêu dự án cấp cao nhất .
Xem cam kết 225e8bf , cam kết 6c656c3 , cam kết 14c01bd (ngày 19 tháng 12 năm 2016) của Brandon Williams ( mbrandonw
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 792e22e , ngày 31 tháng 1 năm 2017)
git config push.recurseSubmodules on-demand
. Sau đó, một đơn giảngit push
sẽ đủ để đẩy tất cả mọi thứ (repo chính và mô hình con). Xem câu trả lời chỉnh sửa của tôi dưới đây .