2011-12-06 28 views
7

Vấn đề của tôi: Cygwin git dường như không nhắc chính xác thông tin xác thực khi sử dụng URL https: //, vì vậy tôi đã sử dụng tên người dùng và mật khẩu trong URL. Thật không may khi tôi đã làm một "nhận được kéo" nó tự động cam kết một tin nhắn với URL đầy đủ bao gồm cả mật khẩu. Tôi đã không nhận thấy điều này cho đến sau khi tôi đã đẩy những thay đổi.Làm cách nào để chỉnh sửa các cam kết git trước đây để xóa mật khẩu của tôi khỏi nhật ký cam kết?

Làm cách nào để chỉnh sửa thông báo cam kết cũ để xóa mật khẩu trong URL?

Repo git được chia sẻ của tôi nằm trên máy chủ của riêng tôi. Tôi có thể làm phẫu thuật trên repo nếu cần thiết.

Hướng dẫn về cách thay đổi cấu hình của tôi (tức là không sử dụng Cygwin, không sử dụng https) là không cần thiết - Tôi đang cố xử lý những gì đã được thực hiện.

Có, tôi có thể và sẽ ghi mật khẩu nhưng tôi vẫn muốn khắc phục.

+0

[Xem tại đây] (http://www-cs-students.stanford.edu/~blynn/gitmagic/ch05.html). – alex

Trả lời

1

Liên kết để xóa dữ liệu nhạy cảm trên git-hub là hữu ích. Tuy nhiên, tôi đã tìm thấy một công cụ là rất thẳng sử dụng: Eric Raymond reposurgeon.

Công cụ này cho phép tôi dễ dàng nhập repo của mình, liệt kê các cam kết với vấn đề, chỉnh sửa chúng (tôi đã cá nhân hóa) và viết ra dòng nhập nhanh git của repo của tôi. Tôi đã nhập luồng đó vào một repo mới và rsync'd nó vào vị trí.

Nhược điểm là repo cũ của tôi đã hoàn toàn chết - tôi đã thay đổi lịch sử. Điều đó cũng đúng với việc sử dụng "git filter-branch", theo các tài liệu.

+1

Bạn đang tìm kiếm một cái cớ để sử dụng công cụ này một thời gian, nhưng các tài liệu rất đơn giản. Thật tuyệt khi có một ví dụ để "chỉ cần xóa một tập tin darn" với reposurgeon. – cmc

4

Để xóa hoàn toàn tệp khỏi kho lưu trữ git và lịch sử của nó, hãy sử dụng các lệnh này.

# Check out the remote repo 
git clone git://host/path/repo.git 
cd repo 

# Clobber the file in your checkout 
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch file-to-purge.txt' --prune empty --tag-name-filter cat -- --all 

# Make sure you don't accidentally commit the file again 
echo file-to-purge.txt >> .gitignore 
git add .gitignore 
git commit -m "Prevent accidentally committing this again" .gitignore 

# Push the edited repo. This will break other people's clones, if any. 
git push origin master --force 

Để biết thêm thông tin, remove sensitive data hướng dẫn tại GitHub sẽ giúp bạn.

0

Nếu bạn có thể chỉnh sửa máy chủ, bạn có thể đặt lại đầu nhánh thành nhánh trước (HEAD ^).

  • trước hết, nhận hàm băm HEAD^bạn muốn "hoàn nguyên".
  • chuyển đến thư mục của kho git bare trong máy chủ/refs/heads, thay đổi thành git (hoặc bất kỳ git serve) nào, chạy "echo (hash)> (tên chi nhánh)" để đặt lại.

đó là tất cả. BTW, bạn không thể thay đổi repo được kéo trước khi bạn thực hiện trên

Các vấn đề liên quan