Cách xóa email cá nhân khỏi cam kết Git

Cách xóa email cá nhân khỏi cam kết Git
Cách xóa email cá nhân khỏi cam kết Git

Bảo vệ quyền riêng tư email của bạn trên GitHub

Việc email cá nhân của bạn bị lộ trong các cam kết của GitHub có thể là mối lo ngại về quyền riêng tư, đặc biệt là khi làm việc trên các kho lưu trữ công khai. Nếu bạn đã mở một yêu cầu kéo (PR) đã được hợp nhất và nhận thấy email cá nhân của bạn hiển thị thì điều quan trọng là phải thực hiện các bước để ẩn email đó.

Trong hướng dẫn này, chúng tôi sẽ khám phá các phương pháp khác nhau để xóa hoặc che giấu địa chỉ email của bạn khỏi chế độ xem công khai sau khi PR đã được hợp nhất. Chúng ta cũng sẽ thảo luận xem người bảo trì có khả năng thay đổi thông tin cam kết hay không và cách sửa đổi cam kết của bạn một cách hiệu quả.

Yêu cầu Sự miêu tả
git filter-branch Viết lại lịch sử cam kết để thay đổi thông tin tác giả và người gửi trong kho Git.
export GIT_AUTHOR_NAME Đặt tên tác giả cho các cam kết được viết lại trong hoạt động nhánh lọc.
export GIT_AUTHOR_EMAIL Đặt email tác giả cho các cam kết được viết lại trong hoạt động nhánh bộ lọc.
wget Tải file từ internet, sử dụng tại đây để tải công cụ BFG Repo-Cleaner.
bfg-1.13.0.jar Tệp Lưu trữ Java dành cho BFG Repo-Cleaner, giúp đơn giản hóa quá trình dọn dẹp lịch sử kho lưu trữ.
--replace-text Lệnh BFG Repo-Cleaner để thay thế văn bản cụ thể (địa chỉ email) trong lịch sử kho lưu trữ.
git reflog expire Các mục hết hạn trong reflog, rất hữu ích cho việc dọn dẹp các tham chiếu đến lịch sử được viết lại.
git gc --prune=now Thực hiện thu gom rác và cắt bỏ các đối tượng không thể truy cập ngay lập tức, được sử dụng sau khi viết lại lịch sử.
git commit --amend Sửa đổi cam kết gần đây nhất với thông tin tác giả mới hoặc thay đổi nội dung cam kết.

Xóa email cá nhân khỏi cam kết Git

Các tập lệnh cung cấp trợ giúp trong việc xóa thông tin email cá nhân khỏi các cam kết Git sau khi yêu cầu kéo được hợp nhất. Kịch bản đầu tiên sử dụng git filter-branch để viết lại lịch sử cam kết. Lệnh này lặp qua từng lần xác nhận, kiểm tra xem email của tác giả hoặc người gửi có khớp với email cũ hay không. Nếu có, nó sẽ thay thế nó bằng email mới, ẩn danh. Sau khi viết lại lịch sử cam kết, cần phải có lực đẩy để cập nhật kho lưu trữ từ xa. Các export GIT_AUTHOR_EMAILexport GIT_COMMITTER_EMAIL các lệnh ở đây rất quan trọng để đảm bảo các cam kết được viết lại có thông tin email chính xác.

Kịch bản thứ hai tận dụng BFG Repo-Cleaner, đây là một giải pháp thay thế đơn giản và nhanh hơn cho nhánh lọc. Bằng cách sử dụng --replace-text lệnh, BFG có thể thay thế tất cả các phiên bản của email cũ bằng email mới trong suốt lịch sử kho lưu trữ. Sau khi thay thế, tập lệnh thực hiện thu gom rác với git gc --prune=now để dọn sạch mọi dữ liệu còn sót lại. Kịch bản thứ ba tập trung vào việc sửa đổi cam kết gần đây nhất bằng cách sử dụng git commit --amend, cho phép thay đổi nhanh chóng thông tin tác giả mà không cần viết lại toàn bộ lịch sử.

Sử dụng Git Filter-Branch để viết lại lịch sử cam kết

Sử dụng Shell Scripting với Git

#!/bin/sh

# Ensure you have a clean working directory
git checkout main

# Rewrite the commit history to change the author email
git filter-branch --env-filter \
'
OLD_EMAIL="my.personal@email.me"
CORRECT_NAME="My Username"
CORRECT_EMAIL="12345678+username@users.noreply.github.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

# Force push the changes to the repository
git push --force --tags origin 'refs/heads/*'

Sử dụng BFG Repo-Cleaner để xóa email dễ dàng hơn

Sử dụng Java với BFG Repo-Cleaner

# Download BFG Repo-Cleaner
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

# Run BFG to replace the old email with the new one
java -jar bfg-1.13.0.jar --replace-text 'my.personal@email.me==12345678+username@users.noreply.github.com' .

# Cleanup and perform garbage collection
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# Push the changes to the remote repository
git push --force

Sửa đổi cam kết cuối cùng về thay đổi email

Sử dụng dòng lệnh Git để sửa đổi đơn giản

# Change the email for the last commit
git commit --amend --author="My Username <12345678+username@users.noreply.github.com>"

# Push the amended commit to the repository
git push --force

Đảm bảo quyền riêng tư sau khi hợp nhất yêu cầu kéo

Một khía cạnh khác cần xem xét khi cố gắng xóa email cá nhân khỏi các cam kết của Git là việc sử dụng GitHub’s personal email settings. Bằng cách định cấu hình ứng dụng khách Git của bạn để sử dụng địa chỉ email riêng do GitHub cung cấp, bạn có thể tránh bị lộ email thực của mình trong các lần cam kết sau này. Điều này có thể được thực hiện bằng cách đặt email của bạn ở định dạng số 8. Ngoài ra, việc bật quyền riêng tư của email trong cài đặt của GitHub đảm bảo rằng email riêng tư của bạn được sử dụng cho các hoạt động Git dựa trên web.

Đối với các cam kết đã được đẩy và hợp nhất, người bảo trì của GitHub có quyền hạn chế trong việc thay đổi dữ liệu cam kết lịch sử. Tuy nhiên, họ có thể trợ giúp bằng cách thực thi các chính sách kho lưu trữ nhằm khuyến khích hoặc yêu cầu những người đóng góp sử dụng email riêng tư. Trong những trường hợp đặc biệt, họ có thể hỗ trợ xóa dữ liệu nhạy cảm nhưng điều này thường liên quan đến việc viết lại lịch sử, điều này có thể ảnh hưởng đến tất cả những người đóng góp.

Câu hỏi thường gặp về quyền riêng tư của email trong cam kết Git

  1. Làm cách nào tôi có thể ngăn email của mình bị lộ trong các lần cam kết trong tương lai?
  2. Đặt email của bạn thành số 8 trong cấu hình Git của bạn.
  3. Tôi có thể thay đổi email cho các cam kết đã được đẩy không?
  4. Có, bạn có thể sử dụng git filter-branch hoặc BFG Repo-Cleaner để viết lại lịch sử cam kết và thay đổi email.
  5. Cách dễ nhất để ẩn email của tôi trong các cam kết trong tương lai là gì?
  6. Định cấu hình tài khoản GitHub của bạn để sử dụng email riêng tư và đặt email của ứng dụng khách Git của bạn thành số 8.
  7. Việc sửa đổi một cam kết có làm thay đổi lịch sử của nó không?
  8. Đúng, git commit --amend thay đổi cam kết gần đây nhất, có thể bị ép buộc cập nhật kho lưu trữ.
  9. Người bảo trì kho lưu trữ có thể thay đổi thông tin cam kết của tôi không?
  10. Người bảo trì có khả năng hạn chế trong việc thay đổi lịch sử cam kết nhưng có thể thực thi các chính sách bảo mật cho các cam kết trong tương lai.
  11. Có an toàn để viết lại lịch sử cam kết?
  12. Việc viết lại lịch sử có thể ảnh hưởng đến sự hợp tác, vì vậy việc này cần được thực hiện cẩn thận, lý tưởng nhất là trong môi trường được kiểm soát.
  13. Tác động của những thay đổi ép buộc là gì?
  14. Việc ép buộc có thể ghi đè lên lịch sử, điều này có thể khiến cộng tác viên bối rối, vì vậy hãy trao đổi rõ ràng trước khi thực hiện.
  15. Quyền riêng tư email có thể được thực thi trên toàn bộ tổ chức không?
  16. Có, các tổ chức GitHub có thể đặt chính sách và sử dụng các công cụ như pre-commit hooks để đảm bảo sự riêng tư của email.
  17. Móc trước cam kết là gì?
  18. Móc nối trước cam kết là các tập lệnh chạy trước khi tạo cam kết, đảm bảo nó đáp ứng các tiêu chí nhất định như sử dụng email riêng tư.

Suy nghĩ cuối cùng về quyền riêng tư của email trong cam kết Git

Bảo vệ thông tin cá nhân của bạn là điều cần thiết, đặc biệt là khi đóng góp vào các kho lưu trữ công cộng. Bằng cách định cấu hình cài đặt Git của bạn để sử dụng địa chỉ riêng và sử dụng các công cụ như git filter-branchBFG Repo-Cleaner, bạn có thể xóa dữ liệu cá nhân khỏi lịch sử cam kết một cách hiệu quả. Trong khi những người bảo trì kho lưu trữ có quyền hạn chế trong việc thay đổi thông tin cam kết, họ có thể hỗ trợ các thực tiễn về quyền riêng tư. Luôn đảm bảo thông báo bất kỳ lịch sử nào được viết lại với nhóm của bạn để tránh nhầm lẫn. Với những phương pháp này, bạn có thể duy trì quyền riêng tư của mình trong khi đóng góp cho các dự án nguồn mở.