Làm cách nào để cập nhật một nhóm mà không cần chạm vào các phụ thuộc khác


202

Tôi hiểu rằng lệnh sau sẽ cập nhật một nhóm : pod update <podname>. Tuy nhiên, điều này cũng cập nhật sự phụ thuộc của các nhóm khác (các nhóm không được bao gồm trong lệnh cập nhật) mà bạn đã cài đặt trước đó. Có cách nào để cập nhật một nhóm duy nhất và để tất cả các phụ thuộc khác không?


1
Để hiểu sự khác biệt trước tiên bạn phải hiểu a podfile.locklà gì . Xem liên kết và video nó tham khảo.
Mật ong

Câu trả lời:


285

Hãy chắc chắn rằng bạn đã cài đặt phiên bản mới nhất của Cốc Cốc. $ pod update PODđược giới thiệu gần đây.

Xem chủ đề vấn đề này để biết thêm thông tin :

$ pod cập nhật

Khi bạn chạy pod update SomePodName, CocoaPods sẽ cố gắng tìm phiên bản cập nhật của pod somePodName, mà không tính đến phiên bản được liệt kê trong Podfile.lock. Nó sẽ cập nhật nhóm lên phiên bản mới nhất có thể (miễn là phù hợp với các hạn chế phiên bản trong Podfile của bạn).

Nếu bạn chạy cập nhật nhóm mà không có bất kỳ tên nhóm nào, CocoaPods sẽ cập nhật mọi nhóm được liệt kê trong Podfile của bạn lên phiên bản mới nhất có thể.


19
Cảm ơn phản hồi @mattt, tôi đã có phiên bản mới nhất của CocoaPods (0.34.2) và tôi đã thử $ pod update SomePodName. Tuy nhiên, có một số trường hợp mà Cốc Cốc cũng sẽ cố gắng cập nhật sự phụ thuộc của các nhóm khác. Tóm lại, somePodName không phải là nhóm duy nhất sẽ được cập nhật trong một số trường hợp.
ken

2
@mattt, bạn không biết cách cài đặt pod cụ thể mà không cập nhật những cái đã cài đặt chưa?
Shamsiddin

1
Khi bản thân tôi sửa đổi một số phụ thuộc và chạy pod installnó sẽ trở lại phiên bản gốc. Nhưng tôi không muốn mất những thay đổi của mình
Shamsiddin

2
@mattt, các phụ thuộc mà tôi đã đề cập không phải là các phụ thuộc của nhóm được cập nhật. Tôi nghĩ rằng tôi đã không cấu trúc câu hỏi đủ tốt nhưng giả sử chúng tôi cập nhật nhóm A, một số nhóm khác không phải là phụ thuộc của nhóm A cũng được cập nhật. Đây là một câu hỏi cũ vì vậy không chắc chắn rằng điều này đã được sửa chữa từ đó chưa ..
ken

8
pod updatechạm vào mọi thứ Nó không làm những gì nó nói trên tin, và nó rất bực bội. Loại bỏ ngẫu nhiên các tiêu đề khỏi các nhóm khác mà bạn không cho nó chạm vào, v.v.
Luke

185

Để cài đặt một nhóm duy nhất mà không cập nhật các nhóm hiện có-> Thêm nhóm đó vào Podfile của bạn và sử dụng:

pod install --no-repo-update

Để xóa / cập nhật một nhóm sử dụng cụ thể:

pod update POD_NAME

Thử nghiệm!


49

Đó là năm 2015

Vì vậy, vì pod update SomePodchạm vào mọi thứ trong các phiên bản mới nhất của cocoapods, tôi đã tìm thấy một cách giải quyết.

Thực hiện theo các bước tiếp theo:

  1. Xóa SomePodkhỏiPodfile

  2. Chạy pod install

bây giờ các pod sẽ xóa SomePodkhỏi dự án của chúng tôi và từ Podfile.locktệp.

  1. Đặt lại SomePodvàoPodfile

  2. Chạy pod installlại

Lần này, phiên bản mới nhất của nhóm của chúng tôi sẽ được cài đặt và lưu trong Podfile.lock.


Bạn cũng có thể sử dụng mẹo tôi trả lời ở đây stackoverflow.com/questions/29901337/ từ
Qiulang

17
Bạn cũng có thể làm pod update somepod anotherpod thirdpodđể cập nhật nhiều nhóm cùng một lúc :)
Entea

Điều này rất thông minh. Bạn đang thực hiện chúng theo hai bước độc lập và dựa vào podfile.lock để giữ nguyên các phụ thuộc khác. Tôi chỉ tự hỏi nếu SomePodđược cập nhật vào các phụ thuộc mới nhất của nó, nó sẽ không cập nhật một phụ thuộc được chia sẻ anotherPodmới nhất? Điều đó có xảy ra bất kể điều gì trong podlock không? Nếu không, nó sẽ không thể đáp ứng các yêu cầu củaSomePod
Mật ong

29

chỉ nói:

pod install - để cài đặt các nhóm mới,

pod update - để cập nhật các nhóm hiện có,

pod update podName - chỉ cập nhật nhóm cụ thể mà không chạm vào các nhóm khác,

pod update podName versionNum - để cập nhật / DOWNGRADING nhóm cụ thể mà không cần chạm vào các nhóm khác


Ý bạn là podthay vì git?
ken

Đôi khi không, tôi không biết tại sao. Giải pháp tập luyện: 1. Loại bỏ pod cụ thể khỏi Podfile 2 .pod install 3. Thêm lại pod cụ thể vào Podfile 4. cài đặt pod
yonivav

21

Chỉ cần một thông báo nhỏ.

pod update POD_NAME

sẽ chỉ hoạt động nếu pod này đã được cài đặt. Nếu không, bạn sẽ phải cập nhật tất cả chúng với

pod update

chỉ huy


Bạn vẫn có thể sử dụng pod installđầu tiên, nó sẽ chỉ cài đặt (các) cái còn thiếu mà không chạm vào những cái khác. Mặc dù không có trường hợp sử dụng nào muốn cập nhật nhóm mà bạn chưa cài đặt, phải không?
aramusss

18

sử dụng tl; dr:

pod update podName

Tại sao? Đọc dưới đây.

  • pod updatesẽ KHÔNG tôn trọng podfile.lock. Nó sẽ ghi đè lên nó.
  • pod install sẽ tôn trọng podfile.lock

Sơ đồ này giúp hiểu rõ hơn về sự khác biệt:

nhập mô tả hình ảnh ở đây


Vấn đề chính đến từ ~>toán tử lạc quan aka .

Sử dụng các phiên bản chính xác trong Podfilelà không đủ

Một số người có thể nghĩ rằng bằng cách chỉ định các phiên bản chính xác của nhóm trong họ Podfile, như thế pod 'A', '1.0.0', đủ để đảm bảo rằng mọi người dùng sẽ có cùng phiên bản với những người khác trong nhóm.

Sau đó, họ thậm chí có thể sử dụng pod update, ngay cả khi chỉ thêm một nhóm mới, nghĩ rằng sẽ không bao giờ có nguy cơ cập nhật các nhóm khác vì chúng được sửa thành một phiên bản cụ thể trong Podfile.

Nhưng trên thực tế, điều đó là không đủ để đảm bảo rằng user1 và user2 trong kịch bản trên của chúng tôi sẽ luôn có được phiên bản chính xác của tất cả các nhóm của họ.

Một ví dụ điển hình là nếu nhóm Acó phụ thuộc vào nhóm A2- được khai báo A.podspecdependency 'A2', '~> 3.0'. Trong trường hợp như vậy, việc sử dụng pod 'A', '1.0.0'trong Podfile của bạn thực sự sẽ buộc user1 và user2 phải luôn sử dụng phiên bản 1.0.0 của pod A, nhưng:

  • user1 có thể kết thúc với pod A2trong phiên bản 3.4(vì đó là A2phiên bản mới nhất tại thời điểm đó)
  • trong khi khi user2 chạy pod installkhi tham gia dự án sau này, họ có thể nhận được pod A2trong phiên bản 3.5(vì người bảo trì A2có thể đã phát hành một phiên bản mới trong thời gian đó). Đó là lý do tại sao cách duy nhất để đảm bảo mọi thành viên trong nhóm làm việc với cùng một phiên bản của tất cả các nhóm trên máy tính của mỗi người là sử dụng Podfile.lockvà sử dụng đúng cách pod installso với pod update.

Đoạn trích trên là tất cả bắt nguồn từ cài đặt pod so với cập nhật pod

Tôi cũng khuyên bạn nên xem những gì podfile.locklàm


9

Tôi đang sử dụng cocoapods version 1.0.1và sử dụng pod update name-of-podhoạt động hoàn hảo. Không có nhóm nào khác được cập nhật, chỉ có nhóm cụ thể bạn nhập.


2

Đây là một chút ngoại lệ và không có khả năng là những gì OP đang xử lý, nhưng pod update <podname>sẽ không hoạt động trong mọi trường hợp nếu bạn đang sử dụng một pod cục bộ trên máy tính của mình.

Trong tình huống này, điều duy nhất sẽ kích hoạt pod updateđể hoạt động là nếu có sự thay đổi trong tệp podspec. Tuy nhiên, thực hiện một thay đổi cũng sẽ cho phép pod installlàm việc tốt.

Trong tình huống này, bạn chỉ có thể sửa đổi một cái gì đó nhỏ như mô tả hoặc tóm tắt bằng một chữ cái, sau đó bạn có thể chạy lệnh cài đặt hoặc cập nhật thành công.

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.