Xung đột
Ký hiệu trạng thái, gộp tự động khi pull, resolve, merge --abort, và vì sao một xung đột chỉ giữ lại phần của nó.
Mỗi file, trang, workflow trong project nhớ dấu vân tay (etag) của bản server lúc bạn pull lần cuối. Khi bạn push, server so dấu vân tay đó với bản hiện tại. Nếu ai đó đã sửa trên server trong lúc ấy (một đồng nghiệp, customizer, AI trong admin), server từ chối ghi đè và CLI báo xung đột. Không có gì bị mất.
Ký hiệu trong webmati status
| Chữ | Nghĩa | Bước tiếp |
|---|---|---|
M | bạn sửa ở đây | push gửi đi |
A | bạn thêm ở đây | push tạo mới |
D | bạn xoá ở đây | push xoá trên server |
N | mới có trên server | pull lấy về |
S | đổi trên server | pull lấy về |
X | bị xoá trên server | pull xoá ở đây |
C | xung đột: cả hai phía cùng sửa | xem bản .remote, rồi resolve |
= | hai phía sửa giống hệt nhau | không cần làm gì |
webmati status --help in đúng bảng này; webmati status --json cho các chữ
trong trường status.
pull tự gộp khi được
Khi một mục đổi ở cả hai phía, pull thử gộp:
- file chữ (Liquid, CSS, JS…) gộp theo dòng, như git. Chỗ hai bên sửa chồng
nhau được đánh dấu bằng
<<<<<<<,=======,>>>>>>>; - JSON (template,
settings_data.json, trang…) gộp theo từng khoá, thứ tự section/block được giữ; - workflow gộp theo từng node và từng cạnh nối; toạ độ trên canvas tự xử lý;
- file riêng của project (mã nguồn app, script, tài liệu) gộp như file chữ,
hoặc theo từng khoá khi là
.json. File nhị phân (ảnh, font) không gộp được: nó vẫn là xung đột, bản của server nằm cạnh trong.webmati/conflicts/.
Khi chính lần push của bạn bị từ chối, lần pull tiếp theo cũng làm vậy với
các mục đó: gộp thay đổi trên server vào của bạn. Gộp sạch thì mục đó trở thành thay đổi của bạn (M), chỉ việc push. Gộp không
sạch thì mục vẫn là C: file đang chứa bản gộp có đánh dấu, và
.webmati/conflicts/<đường dẫn>.conflict.json liệt kê những chỗ va nhau.
webmati merge # chạy lại bộ gộp trên các xung đột đang mở
webmati merge --abort # huỷ các lần gộp tự động: trả bản của bạn, mỗi mục lại là xung đột
Giải quyết một xung đột
Bản phía server nằm ở .webmati/conflicts/<đường dẫn>.remote. So sánh với file
của bạn rồi chọn một trong ba:
webmati resolve theme/sections/hero.liquid --theirs # lấy bản của server
webmati resolve theme/sections/hero.liquid --ours # giữ bản của bạn (lần push sau ghi đè server)
webmati resolve theme/sections/hero.liquid --merged # file của bạn đã là bản gộp
--merged từ chối nếu file vẫn còn dấu <<<<<<<. Xong thì:
webmati validate
webmati push
Đừng dùng push --force để né xung đột
webmati push --forceghi đè bản trên server mà bạn chưa pull: công sửa của người khác mất. Chỉ dùng khi bạn chắc chắn bản server là thứ nên bỏ đi.
Một xung đột chỉ giữ lại phần của nó
Push gửi theo từng phần, mỗi phần là một giao dịch riêng trên server: theme,
workflow, trang, file riêng của project, và nhóm thay đổi chạy ngay. Trong một phần, tất cả cùng vào hoặc
không gì vào. Một xung đột ở một file theme giữ lại cả phần theme (các file theme
khác báo SKIPPED not sent: the theme changeset has a conflict to resolve first),
nhưng workflow và trang vẫn được gửi bình thường.

