Tìm nạp GitPython

Gần đây tôi đã làm việc trong một dự án tự động hóa quy trình làm việc git. Cụ thể đối với bất kỳ kho lưu trữ git cục bộ nào [có

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
3 trỏ đến một số dự án trên GitHub], chúng tôi muốn viết kịch bản như sau. tạo một nhánh mới từ prod, thực hiện một số cam kết, đẩy chúng và thực hiện yêu cầu kéo

Điều này nghe có vẻ là một nhiệm vụ đủ đơn giản [và hóa ra là nhờ GitPython], nhưng phải mất khá nhiều bài đăng trên Stack Overflow và thử và sai để kết hợp toàn bộ tập lệnh lại với nhau. Vì vậy, tôi chia sẻ điều này với hy vọng kiếm được cho ai đó ngoài kia một buổi cà phê xứng đáng

Các bước thực tế [điểm có thể bỏ qua. 1/10]

Ồ, nhân tiện, chúng tôi đang làm điều này trong Python3 [trong trường hợp GitPython không phải là một món quà đủ rõ ràng], vì vậy hãy đảm bảo rằng nó đã được cài đặt và

pip install GitPython

Đừng quên

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
4 ở đầu kịch bản của bạn [chú thích bên lề. nếu bạn cũng thắc mắc tại sao tên gói [
repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
5] đôi khi khác với tên gói nhập khẩu [
repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
0], thì đây là một số thông tin chi tiết từ những người tuyệt vời trên internet]

Lấy repo của bạn với siêu dữ liệu mới nhất từ ​​nguồn gốc

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]

Tạo một chi nhánh địa phương từ prod mới nhất

new_branch = repo.create_head[your_branch_name, origin.refs.prod]  # replace prod with master/ main/ whatever you named your main branch
new_branch.checkout[]

Thực hiện các thay đổi của bạn [ví dụ của chúng tôi ở đây, chúng tôi sẽ tạo một tệp txt]

f = open["/User/some_user/some_dir/demofile.txt", "w"]
f.write["some demofile content"]
f.close[]

Cam kết chúng

repo.index.add[[filename]]  # in this case filename would be "/User/some_user/some_dir/demofile.txt"
repo.index.commit["your commit message"]
.. # more commits here if needed

Đẩy nhánh này về gốc cùng với [các] cam kết mới của bạn

repo.git.push["--set-upstream", origin, repo.head.ref]

Tạo một url dẫn chúng ta đến trang tạo PR [phương pháp này hơi khó nhưng an toàn miễn là GitHub giữ nguyên quy ước này]

"//{}/pull/new/{}".format[link_to_your_github_repo, your_branch_name]

Cũng có nhiều cách khác để tạo yêu cầu kéo, một trong số đó là sử dụng thư viện PyGithub để xác thực bằng mã thông báo GitHub và xuất bản yêu cầu kéo thay mặt cho bất kỳ tài khoản nào mà mã thông báo này thuộc về. Tôi đã không thử nghiệm với tùy chọn này vì nó sẽ giới thiệu nhiều bước hơn là chỉ cần nhấp vào một liên kết

Nhận xét kết thúc [điểm có thể bỏ qua. 8/10]

Tài liệu GitPython đầy đủ có tại đây, trong đó phần hướng dẫn chứa nhiều thông tin với các ví dụ như cách tạo repo từ đầu, nhưng tôi thấy hơi khó điều hướng cho trường hợp sử dụng cụ thể này

Một mẹo có thể không rõ ràng ngay lập tức là có thể đạt được nhiều lệnh git với GitPython ở định dạng

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
1 [ví dụ:
repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
2 ->
repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
3]

Nếu sau khi dùng thử những thứ này, bạn phát hiện ra bất kỳ vấn đề nào hoặc tìm ra giải pháp tốt hơn, vui lòng để lại nhận xét bên dưới và chúng tôi có thể chỉnh sửa/ loại bỏ vấn đề này cho phù hợp. ]

Như chúng ta đều biết rằng Python là một nền tảng tuyệt vời để tự động hóa các hoạt động cơ sở hạ tầng như Triển khai trên nhiều nền tảng, Hoạt động xử lý theo lịch trình, Quản lý thông báo và cảnh báo, v.v. Tự động hóa hoạt động GIT là rất cần thiết trong tự động hóa cơ sở hạ tầng. Đặc biệt, khi chúng tôi có công việc xuất bản hoặc sửa đổi mã trở lại Kho lưu trữ GIT. Hãy thảo luận về một số Hoạt động GIT hữu ích với Python Scripting

Trong hướng dẫn này, chúng tôi sẽ lấy Python3 làm ví dụ. Nhận xét nếu bạn cần hướng dẫn trong nhiều phiên bản công cụ và nền tảng. Vì vậy, kiến ​​thức cần thiết cho hướng dẫn này là

  • Hoạt động Git
  • Tập lệnh Python

Hãy tạo một tệp python để giải quyết. Ở đây, tôi đã tạo git-python. py để chạy hoạt động Git. Ngoài ra, GitPython là một trong những thư viện tuyệt vời để tương tác với Git Repositories. Vì vậy, chúng tôi sẽ sử dụng thư viện GitPython cho mục đích hướng dẫn. Chúng tôi có thể nhập thư viện GitPython trong tập lệnh python của mình như được đề cập bên dưới

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
1

Bằng cách này, chúng tôi đang khởi tạo Thư viện GitPython và từ đó chúng tôi đang nhập Mô-đun Repo

Mục lục

Hoạt động Git cơ bản

Chúng ta sẽ xem các Thao tác Git cơ bản sau đây được xử lý như thế nào trong tập lệnh python

  • Khởi tạo Git
  • Bản sao Git
  • Kiểm tra Git
  • Tìm nạp Git
  • Thêm Git
  • Cam kết Git
  • Đẩy Git
  • Kéo Git
  • Hợp nhất Git
  • Đặt lại Git

Hãy xem từng thao tác Git Cơ bản này trong Python GitPython như thế nào

Khởi tạo Git

Để bắt đầu là tạo repo Git trần trong thư mục đã chỉ định

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
2

Bản sao Git

Sao chép một kho lưu trữ hiện có vào một thư mục mới,

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
3

Kiểm tra Git

Để thay thế các tệp làm việc hiện tại bằng các tệp từ một nhánh

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
4

Ngoài ra, nếu bạn đang kiểm tra với một chi nhánh mới

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
5

Tìm nạp Git

Sau đó, Để lấy những thay đổi mới nhất từ ​​kho lưu trữ từ xa vào kho lưu trữ cục bộ

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
6

Thêm Git

Để đặt các tệp làm việc hiện tại vào chỉ mục hiện tại

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
7

Cam kết Git

Để thực hiện các thay đổi được lập chỉ mục cho một nhánh cục bộ trong repo cục bộ

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
8

Đẩy Git

Để đẩy tất cả các thay đổi đã cam kết trong nhánh từ kho lưu trữ cục bộ sang kho lưu trữ từ xa

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
9

Kéo Git

Để lấy tất cả các thay đổi từ kho lưu trữ từ xa về kho lưu trữ cục bộ

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
0

Hợp nhất Git

Để hợp nhất nhánh hiện tại với nhánh chính [hoặc bất kỳ chỉ định nào]

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
20

Đặt lại Git

Để trỏ nhánh hiện tại tới một số bản sửa đổi hoặc nhánh cụ thể và thay thế tất cả các tệp bằng bản sửa đổi hoặc nhánh đã chỉ định

repo = git.Repo[path_to_your_repo]  # ex. "/User/some_user/some_dir"
origin = repo.remote["origin"]
assert origin.exists[]
origin.fetch[]
21

Sau đó, có nhiều hoạt động Git khác mà chúng tôi đang sử dụng cho các hoạt động hàng ngày và để tự động hóa một số hoạt động Git. Đề cập đến các thao tác Git còn thiếu trong bình luận. Tôi sẽ cố gắng hết sức để thêm nội dung bạn đang tìm kiếm

Sự kết luận

Trong bài viết này, chúng ta đã thảo luận về một số Hoạt động GIT hữu ích với Python Scripting để tự động hóa các Hoạt động DevOps như Tự động hóa CICD, quy trình phát hành, v.v. Tuy nhiên, Python có nhiều khả năng tự động hóa nhiều hoạt động hơn của các nền tảng và công cụ. Vì vậy, trong các bài viết và hướng dẫn sắp tới của chúng tôi, chúng ta sẽ thấy tất cả tự động hóa cơ sở hạ tầng và nền tảng với python. Hãy theo dõi và đăng ký DigitalVarys để biết thêm các bài viết và tài liệu nghiên cứu về DevOps, Agile, DevSecOps và Phát triển ứng dụng

Prabhu Vignesh Kumar Rajagopal

Người thực hành DevSecOps có kinh nghiệm, Tech Blogger, chuyên môn về thiết kế giải pháp trong đám mây công cộng và riêng tư. Cộng tác viên cộng đồng mã nguồn mở

Tìm nạp git được sử dụng để làm gì?

Khi xem xét, git fetch là lệnh chính được sử dụng để tải xuống nội dung từ một kho lưu trữ từ xa . git fetch được sử dụng cùng với git remote , git branch , git checkout và git reset để cập nhật kho lưu trữ cục bộ về trạng thái của điều khiển từ xa.

Làm cách nào để kết nối với git bằng python?

Chúng ta có thể sử dụng mô-đun git trong python để sao chép kho lưu trữ từ git . Sao chép kho lưu trữ mà bạn muốn làm việc trong hệ thống cục bộ. Vì vậy, trong các phương thức clone_from, hãy chuyển hai đối số trong đó đối số đầu tiên là url của kho lưu trữ của bạn và đối số thứ hai là vị trí của thư mục nơi bạn muốn sao chép kho lưu trữ.

Làm cách nào để kiểm tra trạng thái git bằng python?

Trong "Bắt đầu chương trình", Chương trình/tập lệnh phải là trình thông dịch python để sử dụng, e. g. python và "Thêm đối số" phải là -m git_status_checker [để chạy git-status-checker], tiếp theo là các đối số git-status-checker cần thiết . g. -m git_status_checker --wait --ignore-untracked "~/Dev" "~/Documents/Projects" thành.

Làm cách nào để tự động hóa các lệnh git bằng python?

Luồng chương trình .
Nhận cài đặt cấu hình người dùng từ cấu hình. tập tin ini
Khởi tạo một repo git cục bộ
Tạo một tệp và cam kết với repo cục bộ
Tạo repo trên Github
Nhận URL gốc cho repo đã tạo trên Github
Đẩy các tệp repo cục bộ lên Github
Chạy lệnh cuối cùng do người dùng chỉ định

Chủ Đề