Kết nối máy chủ mã
Control Center làm việc với ba máy chủ mã, được gọi là forge xuyên suốt ứng dụng: GitHub, GitLab và Bitbucket Cloud. Không máy chủ nào là mặc định. Kết nối một cái là mọi thứ hoạt động; kết nối nhiều cái thì một không gian làm việc duy nhất có thể chứa kho mã từ tất cả cùng lúc.
Máy chủ mã là thuộc tính của từng kho mã, được đọc từ remote origin khi bạn đăng ký kho mã đó. Bạn không bao giờ phải chọn, và không có cài đặt nào theo từng không gian làm việc để làm sai.
Kết nối một máy chủ mã
Phần tiêu đề “Kết nối một máy chủ mã”- Mở Cài đặt → Không gian làm việc → Hồ sơ & danh tính (
/settings/workspace/profile). - Tìm thẻ Lưu trữ mã. Mọi máy chủ mã được hỗ trợ đều được liệt kê, dù đã kết nối hay chưa.
- Nhấn Đăng nhập với … nếu hàng đó có nút này, hoặc Thêm token rồi dán một token vào.
Đăng nhập xuất hiện với máy chủ mã mà máy chủ của bạn đã đăng ký ứng dụng — hiện nay là GitHub, qua luồng thiết bị (xem Tạo GitHub App). Mọi trường hợp còn lại là dán token, một cách thể hiện thành thật thay vì một nút bấm không thể hoàn tất.
Dù theo cách nào, thông tin xác thực là của bạn và nằm trên máy chủ, được đánh khóa theo id người dùng của bạn: không token nào được lưu trên máy mà bạn đã nhập nó, mọi thiết bị bạn đăng nhập đều dùng cùng một token, và không thành viên nào khác đọc được nó. Nó có hiệu lực ngay ở yêu cầu kế tiếp — không có gì phải khởi động lại, và việc ngắt kết nối sẽ dừng gửi nó ngay lập tức.
Mỗi hàng cho biết thông tin xác thực của nó đến từ đâu, vì đó là khác biệt giữa “token của tôi không hoạt động” và “một token khác đang trả lời”:
| Dòng phụ | Ý nghĩa |
|---|---|
Đã đăng nhập với tên octocat |
Thông tin xác thực của chính bạn đang được dùng |
Đã đăng nhập với tên octocat · qua ứng dụng của máy chủ này |
Danh tính ứng dụng của máy chủ đang trả lời — bạn chưa đăng nhập |
Đã đăng nhập với tên octocat · từ môi trường |
Một biến môi trường của máy chủ đang trả lời, không phải thông tin xác thực của bạn |
Chưa kết nối |
Bạn chưa có thông tin xác thực cho máy chủ mã này |
Mỗi máy chủ mã cần loại token nào
Phần tiêu đề “Mỗi máy chủ mã cần loại token nào”| Máy chủ mã | Token | Nơi tạo |
|---|---|---|
| GitHub | Loại Classic: repo và read:org. Loại Fine-grained: Contents + Pull requests (read/write), Checks + Actions (read) |
github.com → Settings → Developer settings → Tokens |
| GitLab | Một personal access token có api |
gitlab.com → User settings → Access tokens |
| Bitbucket | Một token API của Atlassian, kèm email tài khoản của bạn | id.atlassian.com → Security → API tokens |
Bitbucket xác thực bằng email tài khoản của bạn làm tên người dùng và token làm mật khẩu. Đặt BITBUCKET_EMAIL trong môi trường máy chủ để nó biết ghép token với email nào.
Hoặc dùng môi trường
Phần tiêu đề “Hoặc dùng môi trường”Với bản cài không giao diện hoặc chạy CI, máy chủ đọc các biến sau:
- GitHub —
GITHUB_TOKEN, rồiGH_TOKEN - GitLab —
GITLAB_TOKEN, rồiCI_JOB_TOKEN - Bitbucket —
BITBUCKET_API_TOKEN, rồiBITBUCKET_TOKEN(kèmBITBUCKET_EMAIL)
Đây là thông tin xác thực của máy chủ, không phải của bạn, và sự phân biệt này mang tính quyết định: một yêu cầu thực hiện thay mặt bạn chỉ dùng thông tin xác thực của bạn và không dùng gì khác, nên môi trường không bao giờ âm thầm đứng ra thay bạn. Công việc không có người đứng sau — webhook, thăm dò PR, đồng bộ phiếu — phân giải danh tính ứng dụng của máy chủ trước, rồi đến thông tin xác thực của chủ máy chủ, rồi đến môi trường. Thứ tự này cố định để “tôi đã đăng nhập mà không có gì thay đổi” không bao giờ là một kết quả được hỗ trợ.
Bạn là một người khác trên mỗi máy chủ mã
Phần tiêu đề “Bạn là một người khác trên mỗi máy chủ mã”Cùng một người là octocat trên GitHub và là một cái tên hoàn toàn khác trên GitLab. Control Center phân giải danh tính của bạn theo từng máy chủ mã và dùng đúng danh tính cho từng kho mã, nhờ đó “cần tôi đánh giá”, “do tôi tạo” và “bạn đã phê duyệt cái này” đúng trong một không gian làm việc hỗn hợp.
Nếu danh tính của một máy chủ mã chưa được phân giải, các kho mã của nó không đóng góp gì vào hộp thư thay vì khớp với mọi thứ. Hộp thư nói rõ điều đó thay vì tuyên bố rằng bạn đã xử lý hết.
Một hộp thư, mọi máy chủ mã
Phần tiêu đề “Một hộp thư, mọi máy chủ mã”Hộp thư và hàng đợi PR trải rộng ra mọi máy chủ mã có mặt trong không gian làm việc rồi hợp nhất kết quả thành một dòng duy nhất — một pull request GitHub và một pull request Bitbucket nằm cạnh nhau, sắp theo thời gian thay vì nhóm theo nhà cung cấp.
Các lỗi được cô lập. Một máy chủ mã bị sập, bị giới hạn tốc độ hoặc chưa kết nối thì không đóng góp gì và không đụng đến những cái khác; nó không bao giờ làm trống toàn bộ hộp thư. Các kho mã của riêng nó vẫn hiển thị trạng thái biết được gần nhất cho đến khi nó hoạt động trở lại.
Mỗi máy chủ mã làm được gì
Phần tiêu đề “Mỗi máy chủ mã làm được gì”Mọi máy chủ mã đều hỗ trợ vòng lặp cốt lõi: liệt kê và mở pull request, đọc diff, bình luận theo dòng và ở cấp cao nhất, đánh giá, hợp nhất và đóng. Ngoài phạm vi đó, chúng thực sự khác nhau, và Control Center ẩn đi những gì một máy chủ mã không làm được thay vì hiển thị một điều khiển âm thầm thất bại.
| Khả năng | GitHub | GitLab | Bitbucket |
|---|---|---|---|
| Đánh giá theo lô (đang chờ) | ✓ | ✓ | — |
| Yêu cầu thay đổi | ✓ | ✓ | ✓ |
| Trạng thái “đã xem” theo từng tệp được đồng bộ | ✓ | — | — |
| Biểu cảm emoji | ✓ | ✓ | — |
| Người đánh giá theo đội / nhóm | ✓ | ✓ | — |
| Người đánh giá được gợi ý | ✓ | — | ✓ |
| Kết quả CI trên một PR | ✓ | ✓ | ✓ |
| Đi sâu vào các bước/nhật ký của một job CI | ✓ | ✓ | — |
| Pull request xếp chồng | ✓ | — | — |
| Mẫu mô tả PR | ✓ | ✓ | — |
| Thăm dò thông báo | ✓ | — | — |
| Hồ sơ người dùng phong phú | ✓ | ✓ | — |
| PR head ref phía máy chủ | ✓ | ✓ | — |
Khi thiếu một khả năng, tính năng sẽ suy giảm một cách trung thực:
- Trạng thái đã xem vẫn hoạt động, nhưng chỉ trên thiết bị mà bạn đã đặt nó.
- Đánh giá theo lô trên Bitbucket đăng từng bình luận một, nên người đánh giá thấy chúng đến riêng lẻ thay vì cùng một lúc.
- Không có PR head ref trên Bitbucket nghĩa là khi checkout một pull request, hệ thống tìm nhánh nguồn của nó theo tên, và việc này thất bại khi nhánh đó đã bị xóa.
Thuật ngữ
Phần tiêu đề “Thuật ngữ”GitLab gọi pull request là merge request. Control Center dùng “pull request” xuyên suốt mô hình của mình, và dùng đúng danh từ của từng máy chủ mã khi nói về máy chủ mã đó.
Xử lý sự cố
Phần tiêu đề “Xử lý sự cố”Danh sách PR trống và báo rằng một máy chủ mã chưa được kết nối
Phần tiêu đề “Danh sách PR trống và báo rằng một máy chủ mã chưa được kết nối”Bạn chưa có thông tin xác thực cho máy chủ mã đó. Hãy đăng nhập hoặc dán token trong Cài đặt → Không gian làm việc → Hồ sơ & danh tính → Lưu trữ mã. Các kho mã của những máy chủ mã khác không bị ảnh hưởng.
Tôi đã kết nối một máy chủ mã nhưng các kho mã của nó vẫn không hiện gì
Phần tiêu đề “Tôi đã kết nối một máy chủ mã nhưng các kho mã của nó vẫn không hiện gì”Hãy kiểm tra dòng phụ của hàng. Nếu nó ghi “qua ứng dụng của máy chủ này” hoặc “từ môi trường”, thì một thông tin xác thực khác đang trả lời chứ không phải cái bạn mong đợi — thông tin xác thực của bạn luôn thắng với mọi thứ bạn yêu cầu, nên nếu dòng phụ ghi khác thì cái của bạn chưa được lưu.
Một kho mã không đăng ký được
Phần tiêu đề “Một kho mã không đăng ký được”Việc đăng ký cần cả ba điều kiện: đường dẫn nằm trong một worktree git, nó có remote origin, và remote đó trỏ tới github.com, gitlab.com hoặc bitbucket.org. Xem Thêm kho mã vào không gian làm việc.
Mọi thứ ngừng hoạt động một lúc sau khi dùng nhiều
Phần tiêu đề “Mọi thứ ngừng hoạt động một lúc sau khi dùng nhiều”Đó là cầu dao ngắt mạch của giới hạn tốc độ. Khi một máy chủ mã báo đã chạm giới hạn chính, máy khách sẽ cho các yêu cầu tiếp theo thất bại ngay tại chỗ, không gọi mạng, cho đến khi hết cửa sổ thời gian — nhờ vậy một cơn bão thử lại không thể làm giới hạn sâu thêm. Các lỗi tạm thời được thử lại với backoff lũy thừa.