2012-11-25 28 views
7

Tôi đã làm việc trên kho lưu trữ git một lúc và thực hiện một số cam kết. Tôi đã sử dụng khối tài liệu trong file php của tôi, bao gồm địa chỉ email cá nhân của tôi, như thế này:Thay đổi địa chỉ email trong lịch sử Git

/** 
* Bla bla bla. 
* 
* @author:  Nic <[email protected]> 
*/ 

Bây giờ tôi đã tạo ra một địa chỉ email mới và cập nhật các khối tài liệu, thay thế cho địa chỉ cũ bằng cái mới. Nhưng thay đổi này chỉ áp dụng cho các cam kết sau khi thay đổi tài liệu.

Làm cách nào để xóa hoàn toàn địa chỉ email cũ khỏi lịch sử của git và thay thế tất cả các trường hợp bằng địa chỉ mới?

Tôi đã thử sử dụng git filter-branch sử dụng this blog post nhưng không thành công. Tôi nhận được kết quả sau:

git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#[email protected]#[email protected]#g"' -- --all 
Usage: git core\git-filter-branch [--env-filter <command>] [--tree-filter <command>] 
     [--index-filter <command>] [--parent-filter <command>] 
     [--msg-filter <command>] [--commit-filter <command>] 
     [--tag-name-filter <command>] [--subdirectory-filter <directory>] 
     [--original <namespace>] [-d <directory>] [-f | --force] 
     [<rev-list options>...] 

Có thể là ký tự đặc biệt của địa chỉ email (@ và.) Đang làm rối loạn cụm từ thông dụng? Khác hơn là tôi không có ý tưởng gì đang xảy ra, bất kỳ trợ giúp được đánh giá cao!

Trả lời

3

Một lựa chọn khác đang cố gắng filter-branch theo cách này:

git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Nick NLD" ]; 
    then export [email protected]; 
    fi; git commit-tree "[email protected]"' 
+4

Điều đó sẽ chỉ thay đổi tác giả của các cam kết, câu hỏi đang tìm cách thay đổi địa chỉ email trong nội dung tệp. – qqx

+0

Tôi đã tìm thấy rằng một nhưng như qqx cho biết nó thay đổi địa chỉ thư của cam kết, không phải là khối tài liệu bên trong tập tin. –

+2

Điều này làm việc tốt cho tôi với "=" thay vì "==". –

4

Tôi không biết lý do tại sao bạn nhận được một thông điệp sử dụng. Sao chép & dán lệnh của bạn có nhánh lọc để chạy cho tôi. Nhưng, nó đã không thực sự sửa đổi bất kỳ tập tin. Đó thực sự là vì các ký tự @ trong các địa chỉ email, điều này khiến cho perl xử lý @email dưới dạng biến danh sách và thay thế bằng nội dung (không tồn tại) của nó. Vì vậy, cụm từ thông dụng đang tìm kiếm old-email.com.

Điều đó có thể được sửa bằng cách sử dụng \@ thay cho các dấu hiệu @ trong lệnh perl. Các . trong địa chỉ email cũ là một ký tự đặc biệt cho một biểu thức chính quy, nhưng nó sẽ phù hợp với chính nó cùng với bất cứ điều gì khác. Trong trường hợp này phần còn lại của mẫu có thể đủ nghiêm ngặt để không quan trọng vì vậy bạn có thể không thực sự cần phải thoát khỏi điều đó.

+0

Cảm ơn. Tôi có lẽ nên cấu hình một cái gì đó cho bộ lọc-chi nhánh để làm việc? Tôi là một git-noob và không bao giờ sử dụng bộ lọc-chi nhánh trước đây. –

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