Công cụ dòng lệnh dễ sử dụng của GitHub: “gh”!

Nếu bạn đang sử dụng GitHub và thích dòng lệnh như tôi để hoàn thành mọi việc mà không gặp bất kỳ sự phức tạp nào trên GUI, thì bạn có thể nhận thấy GitHub bắt đầu sử dụng công cụ không quá mới của họ có tên là “gh”. Tôi quyết định thử, vì xét cho cùng thì nó có vẻ đầy hứa hẹn. Và cá nhân tôi rất thích nó – Đến mức tôi muốn làm một bài về nó!

Tuy nhiên, trước khi chúng ta bắt đầu, tôi cần giải thích một số thuật ngữ tôi sẽ sử dụng trong bài viết này.

“GH” là viết tắt của “GitHừm”. Đây cũng là nơi tên của công cụ bắt nguồn, vì vậy không thể nhầm lẫn nó với chính Git. Để giải thích những gì nó làm nói chung, bạn có thể tạo, phân nhánh, xóa, duyệt các kho lưu trữ; tạo yêu cầu kéo; và nhiều cái khác. Trong trường hợp bạn không thể tìm thấy một tính năng nhưng cũng không muốn rời khỏi terminal, nó cũng cung cấp trình duyệt dựa trên văn bản để bạn duyệt các trang trong GitHub.

“CLI” là viết tắt của “Cmệnh lệnh Line Igiao diện”. Thiết bị đầu cuối đó (hoặc trong Windows, Dấu nhắc lệnh) là một trong số đó. Nếu có “CLI” được thêm vào bên cạnh tên ứng dụng (“Git CLI” cho bài viết này), điều đó có nghĩa là ứng dụng chỉ chạy qua thiết bị đầu cuối. Và “Git CLI” trong bối cảnh này chính là Git mà chúng ta biết. Giống như lệnh mà chúng ta thực hiện cam kết hoặc phản đối.

GUI là viết tắt của “Gliều lĩnh Uxem Interface” và đó là giao diện mà chúng ta “điều hướng” trên đó. Nói đúng hơn, môi trường máy tính để bàn nói chung là GUI.

“Khóa API” là một loại chuỗi/tệp bí mật mà bạn sử dụng để xác thực các dịch vụ. Hãy cẩn thận vì nó bỏ qua xác thực 2 yếu tố, v.v. khi bạn xác thực bằng nó. Vì vậy, hãy đảm bảo giữ chúng an toàn và ở nơi nào đó ngoài tầm với của các phương tiện khác.

Trước hết, công cụ này là gì? Nó xử lý các hoạt động mà chúng ta sẽ thực hiện thông qua Git CLI như thế nào?

“gh” có thể được coi là một nguồn mở (Source Code) sử dụng chính Git CLI và API GitHub để hoàn thành công việc. Trên thực tế, bạn thậm chí có thể truyền tham số cho các lệnh Git mà nó sử dụng! Tôi sẽ đi vào những điều đó sau.

Cài đặt và thiết lập

Hãy nhớ rằng tôi sẽ thực hiện cài đặt bằng cách sử dụng Termux. Nhưng quy trình này sẽ khá giống với quy trình bạn có thể thực hiện trên bản phân phối dựa trên Debian - chẳng hạn như Ubuntu có nó trên các kho lưu trữ chính thức của họ. Đối với Windows, tôi cho rằng bạn cần CygWin hoặc WSL. ¯\_(ツ)_/¯

# Trước tiên hãy cài đặt công cụ. Đồng thời cài đặt Git vì nó là phần phụ trợ # cho gh. $ pkg install git gh -y # Sau đó, trước hết, chúng ta cần xác thực. Thao tác này sẽ lưu # khóa API mới vào cơ sở dữ liệu của công cụ nên bạn không cần phải xác thực lại #. Nếu bạn đã đặt GITHUB_TOKEN, thao tác này sẽ không hoạt động vì vậy hãy bỏ đặt # trước. :) $ gh đăng nhập xác thực

Bây giờ, trước khi chúng ta tiếp tục ở đây, tôi cần chỉ ra một số điều.

  • Thứ nhất, không chọn “Máy chủ doanh nghiệp GitHub” nếu bạn không có một loại GitHub tự lưu trữ nào đó.
  • Thứ hai, sử dụng SSH thay vì HTTPS nếu bạn đã thêm khóa chung vào tài khoản GitHub của mình. Trong trường hợp bạn mất khóa API, ít nhất bạn sẽ không bị mất khóa SSH nên đây cũng có thể là một phương pháp dự phòng tốt.
  • Thứ ba chọn đăng nhập bằng trình duyệt chỉ khi bạn không có sẵn khóa API! Thực sự, sẽ không có ý nghĩa gì nếu bạn có một chiếc chìa khóa khác trong khi bạn đã có sẵn rồi.

Khi bạn đã thiết lập xong mọi thứ, hãy cho Git CLI biết về điều đó.

$gh xác thực thiết lập-git

Điều này sẽ tạo ra các cấu hình Git CLI cần thiết đề phòng trường hợp phản xạ của bạn lao vào và khiến bạn sử dụng Git thay vì GH.

Một số lệnh cơ bản

Bây giờ bạn đã thiết lập GH, hãy để tôi dạy bạn một số lệnh cơ bản trong câu chuyện.

Trước hết, giả sử bạn muốn tạo một yêu cầu kéo tới kho lưu trữ bảng kê khai cục bộ của tôi. Bạn muốn phân nhánh nó trước.

$gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest đã tồn tại chưa? Bạn có muốn sao chép cái nĩa không? Có Nhân bản vào 'platform_manifest'... remote: Liệt kê các đối tượng: 136, xong. remote: Đếm đối tượng: 100% (136/136), xong. remote: Nén đối tượng: 100% (81/81), đã hoàn tất. từ xa: Tổng cộng 136 (delta 46), tái sử dụng 89 (delta 12), tái sử dụng gói 0 Đối tượng nhận: 100% (136/136), 30.70 KiB | 166.00 KiB/s, xong. Giải quyết vùng đồng bằng: 100% (46/46), đã hoàn tất. Đang cập nhật ngược dòng Từ github.com:windowz414/platform_manifest * [nhánh mới] amyrom/rosie -> upstream/amyrom/rosie * [nhánh mới] aosp-eleven -> upstream/aosp-eleven * [nhánh mới] aosp-ten -> ngược dòng/aosp-ten * [nhánh mới] mũi tên-11.0 -> ngược dòng/mũi tên-11.0 * [nhánh mới] cm-14.1 -> ngược dòng/cm-14.1 * [nhánh mới] dot11 -> ngược dòng/dot11 * [nhánh mới ] e/os/v1-nougat -> ngược dòng/e/os/v1-nougat * [nhánh mới] chất lỏng-11 -> ngược dòng/chất lỏng-11 * [nhánh mới] fox_7.1 -> ngược dòng/fox_7.1 * [nhánh mới] anime-rika -> upstream/hentai-rika * [nhánh mới] ion-pie -> upstream/ion-pie * [nhánh mới] lineage-15.1 -> upstream/lineage-15.1 * [nhánh mới] dòng dõi -17.1 -> ngược dòng/lineage-17.1 * [nhánh mới] lineage-18.1 -> ngược dòng/lineage-18.1 * [nhánh mới] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nhánh mới] lineage-19.0 - > ngược dòng/dòng-19.0 * [nhánh mới] chính -> ngược dòng/chính * [nhánh mới] mkn-mr1 -> ngược dòng/mkn-mr1 * [nhánh mới] vengos-r11.0 -> ngược dòng/revengeos-r11.0. 1 * [nhánh mới] Stellar-S1 -> upstream/stellar-S11 * [nhánh mới] teos-n -> upstream/teos-n * [nhánh mới] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Nhánh nhân bản

Sau đó, giả sử bạn có một tổ chức riêng cho các thử nghiệm của mình có tên là “wz414-labs”, mà bạn chưa phân nhánh trên hồ sơ cá nhân của mình và muốn sao chép ở đó, sau đó mở yêu cầu kéo qua đó. Bạn cũng muốn sao chép nhánh “cm-14.1” để không cần phải thực hiện git-checkout lại.

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ Đã tạo fork wz414-labs/platform_manifest ? Bạn có muốn sao chép cái nĩa không? Có Nhân bản vào 'platform_manifest'... remote: Liệt kê các đối tượng: 136, xong. remote: Đếm đối tượng: 100% (136/136), xong. remote: Nén đối tượng: 100% (81/81), đã hoàn tất. từ xa: Tổng cộng 136 (delta 46), tái sử dụng 89 (delta 12), tái sử dụng gói 0 Đối tượng nhận: 100% (136/136), 30.70 KiB | 120.00 KiB/s, xong. Giải quyết vùng đồng bằng: 100% (46/46), đã hoàn tất. Đang cập nhật ngược dòng Từ github.com:windowz414/platform_manifest * [nhánh mới] amyrom/rosie -> upstream/amyrom/rosie * [nhánh mới] aosp-eleven -> upstream/aosp-eleven * [nhánh mới] aosp-ten -> ngược dòng/aosp-ten * [nhánh mới] mũi tên-11.0 -> ngược dòng/mũi tên-11.0 * [nhánh mới] cm-14.1 -> ngược dòng/cm-14.1 * [nhánh mới] dot11 -> ngược dòng/dot11 * [nhánh mới] ] e/os/v1-nougat -> ngược dòng/e/os/v1-nougat * [nhánh mới] chất lỏng-11 -> ngược dòng/chất lỏng-11 * [nhánh mới] fox_7.1 -> ngược dòng/fox_7.1 * [nhánh mới] hentai-rika -> upstream/hentai-rika * [nhánh mới] ion-pie -> upstream/ion-pie * [nhánh mới] lineage-15.1 -> upstream/lineage-15.1 * [nhánh mới] dòng dõi -17.1 -> ngược dòng/lineage-17.1 * [nhánh mới] lineage-18.1 -> ngược dòng/lineage-18.1 * [nhánh mới] lineage-18.1_teos -> upstream/lineage-18.1_teos * [nhánh mới] lineage-19.0 - > ngược dòng/dòng-19.0 * [nhánh mới] chính -> ngược dòng/chính * [nhánh mới] mkn-mr1 -> ngược dòng/mkn-mr1 * [nhánh mới] vengos-r11.0 -> ngược dòng/revengeos-r11.0. 1 * [nhánh mới] Stellar-S1 -> upstream/stellar-S11 * [nhánh mới] teos-n -> upstream/teos-n * [nhánh mới] weebprojekt-11 -> upstream/weebprojekt-XNUMX ✓ Bản sao nhân bản

Bạn thấy đấy, tôi đã không sử dụng “-b cm-14.1” mà thay vào đó đã thực hiện một cuộc tranh luận dài. Kể từ ngày viết bài viết này, ngày 16 tháng 2022 năm XNUMX, GH có một lỗi khiến nó không chuyển các đối số ngắn tới Git CLI một cách chính xác và do đó, thay vào đó, nó cần phải được thực hiện dưới dạng đối số dài.

Sau khi hoàn tất, bạn thường xuyên vào thư mục, thực hiện các thay đổi, cam kết rồi đẩy nó và sẵn sàng thực hiện yêu cầu kéo. Đối với điều này, tất cả những gì bạn cần là một cách đơn giản

$ gh pr create --branch="cm-14.1" Tạo yêu cầu kéo cho wz414-labs:cm-14.1 thành cm-14.1 trong windowz414/platform_manifest ? Tiêu đề teos: Thay đổi thành Git-Polycule ? Thân hình ? Cái gì tiếp theo? Gửi https://github.com/windowz414/platform_manifest/pull/1

Nếu bạn không thêm “–branch=cm-14.1”, bạn sẽ tạo PR cho nhánh “chính”, điều này tất nhiên sẽ gây ra vấn đề khi nó không được xử lý đúng cách.

Và bây giờ mình cần gộp PR này lại phải không? Vì vậy, trước tiên tôi sao chép kho lưu trữ, kiểm tra chi nhánh được chỉ định và liệt kê các PR trước.

# Nhân bản đầu tiên. $ git clone https://github.com/windowz414/platform_manifest Nhân bản vào 'platform_manifest'... remote: Liệt kê các đối tượng: 136, xong. remote: Đếm đối tượng: 100% (136/136), xong. remote: Nén đối tượng: 100% (81/81), đã hoàn tất. từ xa: Tổng cộng 136 (delta 46), tái sử dụng 89 (delta 12), tái sử dụng gói 0 Đối tượng nhận: 100% (136/136), 30.70 KiB | 137.00 KiB/s, xong. Giải quyết vùng đồng bằng: 100% (46/46), đã hoàn tất. # Sau đó trả phòng đến chi nhánh. $ git kiểm tra nhánh cm-14.1 'cm-14.1' được thiết lập để theo dõi 'origin/cm-14.1'. Đã chuyển sang nhánh mới 'cm-14.1' # Và hiện đang niêm yết PR. $ gh pr list Hiển thị 1 trong 1 yêu cầu kéo mở trong windowz414/platform_manifest #1 teos: Thay đổi thành Git-Polycule wz414-labs:cm-14.1

Bây giờ chúng ta thấy có một PR để thay đổi điều khiển từ xa thành “Git-Polycule”, hãy xem điều gì đã thay đổi với nó.

$ gh pr diff 1 diff --git a/teos.xml b/teos.xml chỉ mục b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414 @@ 

Có vẻ đầy hứa hẹn! Đã đến lúc hợp nhất!

$ gh pr hợp nhất 1 ? Bạn muốn sử dụng phương pháp hợp nhất nào? Rebase và hợp nhất? Cái gì tiếp theo? Gửi ✓ Yêu cầu kéo được khởi động lại và hợp nhất số 1 (teos: Thay đổi thành Git-Polycule)

Bây giờ tôi đã hợp nhất nó, bạn có thể xóa fork của mình.

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ Đã xóa kho lưu trữ wz414-labs/platform_manifest

Bạn thấy rằng đã xóa ngay repo mà không có yêu cầu xác nhận vì tôi đã chuyển tham số “–confirm” ở đó. Nếu bạn không vượt qua nó, bạn sẽ nhận được điều này:

$gh repo xóa windowz414/systemd? Nhập windowz414/systemd để xác nhận xóa:

Và bạn sẽ cần phải gõ toàn bộ tên repo. Lãng phí thời gian…

Tổng kết

Nói một cách đơn giản, `gh` là một trình bao bọc Git CLI/Curl khá đơn giản, hợp nhất các hoạt động Git đơn giản và các thứ API GitHub dưới cùng một mái nhà. Bạn sử dụng nó như thế nào? Nó có vẻ hứa hẹn với bạn giống như với tôi không? Mong muốn được nghe từ bạn!

Bài viết liên quan