sách gpt4 ai đã đi

git submodule cam kết/đẩy/kéo

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 00:51:25 32 4
mua khóa gpt4 Nike

Tôi muốn sử dụng git submodules.

Các bước tôi cần thực hiện để đưa những thay đổi của mình vào dự án là

  1. thêm/cam kết/đẩy từ thư mục mô-đun con
  2. thêm/cam kết/đẩy từ thư mục cha


Tôi cần thực hiện những bước nào để thực hiện thay đổi cho dự án của mình?

  1. git pull từ thư mục cha
  2. git submodule cập nhật từ thư mục cha


Các bước để cập nhật một mô-đun con từ kho lưu trữ gốc

  1. git pull từ thư mục submodule


Điều làm tôi lo lắng là đoạn trích sau đây http://git-scm.com/book/en/Git-Tools-Submodules

Vấn đề là bạn thường không muốn làm việc trong môi trường HEAD tách biệt, vì rất dễ mất các thay đổi. Nếu bạn thực hiện cập nhật mô-đun con ban đầu, hãy cam kết trong thư mục mô-đun con đó mà không tạo nhánh để làm việc, sau đó chạy lại git submodule update từ siêu dự án mà không cam kết trong thời gian đó, (?? cập nhật/cam kết/cập nhật sẽ mất thay đổi?) Git sẽ ghi đè lên những thay đổi của bạn mà không báo cho bạn biết. Về mặt kỹ thuật, bạn sẽ không mất công việc, nhưng bạn sẽ không có nhánh nào trỏ đến nó, vì vậy sẽ hơi khó để lấy lại.

Để tránh vấn đề này, hãy tạo một nhánh khi bạn làm việc trong thư mục submodule với git checkout -b work hoặc lệnh tương đương. Khi bạn thực hiện submodule update lần thứ hai, nó vẫn sẽ hoàn nguyên công việc của bạn, nhưng ít nhất bạn có một con trỏ để quay lại.



Tôi sẽ sửa đổi mô-đun con và không muốn làm hỏng bất cứ thứ gì, tài liệu ở trên có đề cập ngắn gọn về khả năng mất các thay đổi, tôi không hiểu điều gì có thể gây ra điều đó.

Tôi tự hỏi mình cần thực hiện thêm những bước nào ngoài những bước tôi đã liệt kê ở trên để ngăn ngừa mất mát. Đặc biệt là một số thành viên trong nhóm sửa đổi các mô-đun con, họ cần làm gì để không làm hỏng?

1 Câu trả lời

Là người đã từng làm việc với các dự án bên ngoài bằng giải pháp Visual Studio và cố gắng giải quyết các vấn đề tương tự, tôi muốn chia sẻ kinh nghiệm của mình với bạn. Tôi mới sử dụng Git nên nếu ai có lời phê bình mang tính xây dựng nào thì tôi sẽ rất trân trọng.

Nếu bạn đang sử dụng Visual Studio, tiện ích mở rộng Git Source Control Provider là miễn phí ( http://visualstudiogallery.msdn.microsoft.com/63a7e40d-4d71-4fbb-a23b-d262124b8f4c ), và có vẻ như nó sẽ đệ quy các mô-đun con khi tôi thử nghiệm nó.

Tuy nhiên, tôi phát triển tại nhà bằng VS Web Developer Express, vì vậy tôi không muốn dựa vào các tiện ích mở rộng (tôi cũng nghĩ rằng hiểu được những gì đang diễn ra ở hậu trường là điều tốt). Vì vậy, tôi buộc phải tìm hiểu các lệnh và thêm một số bình luận bên dưới.

Nhận xét

Nếu bạn chưa thực hiện, vui lòng đọc kỹ. http://git-scm.com/book/en/Git-Tools-Submodules .Có rất nhiều cảnh báo, tôi sẽ quay lại trang này. Nếu bạn cố sử dụng các mô-đun con mà không đọc bài viết này, bạn sẽ nhanh chóng gặp rắc rối.

Phương pháp của tôi tuân theo hướng dẫn này, với một vài nội dung bổ sung được thêm vào:http://blog.endpoint.com/2010/04/git-submodule-workflow.html

Sau khi khởi tạo siêu dự án (ví dụ: khởi tạo git && git remote thêm nguồn gốc ... ), bắt đầu thêm các mô-đun con như sau:

git submodule thêm git://github.com/you/extension1.git phần mở rộng
git mô-đun con init
git submodule cập nhật

Kiểm tra xem tệp .gitmodules của bạn có phản ánh phần bổ sung này không, ví dụ:
[mô-đun phụ "mở rộng1"]
đường dẫn = phần mở rộng
url = git://github.com/you/extension1.git

Thay đổi vào thư mục mô-đun con của bạn (tức là phần mở rộng cd ). chạy:
git fetch #Tôi sử dụng fetch ở đây - có lẽ bạn có thể sử dụng pull?
git checkout -b somebranchname #Xem liên kết Git-Tools-Submodules ở trên để biết giải thích tại sao bạn cần phân nhánh

Tôi thực hiện các thay đổi đối với README.txt tại đây để có thể xác nhận (và cũng để ghi lại những gì tôi đã làm trong xác nhận này), sau đó xác nhận mô-đun để áp dụng nhánh (vẫn nằm trong thư mục mô-đun con):
git thêm .
git commit -a -m "Phân nhánh cho mô-đun con mở rộng"

Bây giờ hãy nhập siêu dự án (tức là đĩa CD .. ). Bạn cũng cần phải cam kết ở đây (nếu bạn xem trang git submodules mà tôi đã đề cập, nó sẽ giải thích tại sao điều này là cần thiết):
git status #sẽ cho bạn thấy rằng mô-đun con của bạn đã được sửa đổi
git commit -a -m "Đang cam kết thay đổi mô-đun con từ siêu dự án"

Bây giờ, nếu cần, chúng ta có thể đẩy dự án của mình theo cách đệ quy như thế này:
git push --recurse-submodules=theo yêu cầu

Bạn cần thực hiện các bước trên một lần cho tất cả các mô-đun con.

Sau khi bạn đã thực hiện điều này cho tất cả các mô-đun con và bắt đầu thực hiện thay đổi để cam kết và đẩy, bạn có thể sử dụng:
git submodule foreach 'git add .' #thêm đệ quy các tệp trong các mô-đun con

Thật không may, tôi chưa tìm ra cách nào để thực hiện điều này mà không sử dụng git-nô lệ Có thể gửi một thứ gì đó tương tự theo cách đệ quy. (Có ai không?), vì vậy bạn cần vào từng thư mục mô-đun con và chạy lệnh commit thông thường cho các tệp bạn vừa thêm. Trong siêu dự án:
git status #cho bạn biết rằng mô-đun con `extension` đã được sửa đổi
phần mở rộng cd
git commit -a -m "Đang cam kết thay đổi phần mở rộng trong phiên chỉnh sửa siêu dự án"

Sau khi mô-đun con được cam kết, bạn cũng cần phải cam kết siêu dự án (một lần nữa), vì vậy:
đĩa CD ..
git thêm .
git commit -a -m "Mô-đun mở rộng đã thay đổi"
git status #bây giờ phải hiển thị 'thư mục làm việc sạch', nếu không thì hãy cam kết các mô-đun con khác theo cùng cách

Điều này có thể hơi khó chịu (vì bạn sẽ phải cam kết hai lần), nhưng khi bạn nhận ra thì thực ra cũng không tệ lắm (vì nó buộc bạn phải kiểm tra những gì mình cam kết trong mỗi dự án). Theo ý kiến ​​của tôi - nếu bạn đã cô lập một số chức năng của siêu dự án thành các mô-đun con, thì nó cũng nên được cô lập khỏi phần còn lại của dự án (do đó, việc cam kết chúng vào những thời điểm khác nhau và gây phiền nhiễu cũng không phải là điều gì quá to tát).

Bây giờ chúng ta có thể đẩy nó lần nữa...
git push --recurse-submodules=theo yêu cầu

Sau đó, nếu bạn vào mô-đun con của mình và thử đẩy lại, bạn sẽ thấy rằng nó không có tác dụng gì vì cam kết mới nhất đã được đẩy.

Việc sao chép siêu dự án (hoặc sử dụng nguồn từ xa) cũng có thể rất khó hiểu - ví dụ bạn cần chạy git submodule cập nhậtSau hai lần git mô-đun con init .đọc http://git-scm.com/book/en/Git-Tools-Submodules Phần "Sao chép một dự án với các mô-đun con" của

Điều làm tôi ngạc nhiên khi sao chép siêu dự án của mình là nhận được những thay đổi mới nhất của các mô-đun con. Nhìn thấy Cách dễ dàng để kéo tất cả các mô-đun con mới nhất

Biến thể của tôi là sử dụng nhánh "phát triển" để kiểm tra mô-đun con (nhưng bạn có thể gọi nó là bất cứ tên nào bạn muốn), sau đó sử dụng nó trong siêu dự án:
git submodule foreach git pull nguồn gốc phát triển

Khi tôi thiết lập điều này, tôi cũng chuyển sang nhánh của mô-đun con mà tôi muốn đẩy những thay đổi của mình để kiểm tra, như thế này:
phần mở rộng cd
git checkout -b development #Điều này sẽ cho bạn biết đây là một nhánh mới, nhưng tôi tin rằng điều này có nghĩa là một nhánh mới của kho lưu trữ git cục bộ - điều này sẽ được đẩy đến nhánh 'development'
#Thực hiện thay đổi, cam kết, v.v.

Tôi có thể xác nhận rằng khi làm theo các bước trên, những thay đổi đối với mô-đun con trong dự án gốc từ xa/được sao chép của tôi (khi được đẩy) sẽ xuất hiện trong các bản sao/nguồn gốc từ xa khác của cùng một dự án (đừng quên lệnh kéo mô-đun con cuối cùng).

Tôi hy vọng thông tin này hữu ích với bạn.

Liên quan đến git submodule commit/push/pull, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/14233939/

32 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com