2012-04-20 32 views
8

Tôi có thể chạy thành công git filter-branch trên một số mã, ví dụ: merge repo khác vào một thư mục con [1]:Chi nhánh bộ lọc Git: có thể cập nhật thông báo cam kết tham chiếu ID cam kết cũ không?

git filter-branch --index-filter ' 
    git ls-files -s | 
    perl -pe "s{\t\"?}{$&helper/}" | 
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && 
    mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE 
' remotes/helper/master 

Nhưng bây giờ, tôi cũng rất muốn mở rộng thông điệp của từng cam kết bao gồm cựu ID (SHA hash) của nó, vì những cam kết có thể có ý kiến ​​/ hội thoại trên GitHub không được chuyển giao.

Ví dụ: thêm một dòng thêm như thế này (nơi bob/helpers là hardcoded/gọi trước):

[COPIED FROM bob/[email protected]] 

Theo như tôi có thể nói, Git của msg-filter chỉ mang lại cho tôi thông báo ban đầu, và Git của env-filter không chứa cam ID (SHA có) dưới dạng biến đầu vào. Điều này có thể xảy ra sau đó hay không?

Cảm ơn!

[1] Via this great article, với Perl lọc từ this email thread để workaround một lỗi trên Mac OS X.

Trả lời

5

--msg-filter sẽ là nơi để làm điều đó, và bản gốc cam ID là trong biến môi trường $GIT_COMMIT, vì vậy (chưa được kiểm tra) làm cho bộ lọc tin nhắn đơn giản: cat; echo "[COPIED FROM bob/[email protected]$GIT_COMMIT]".

+0

Hoạt động rất tốt! Không biết rằng biến môi trường đã có. Cảm ơn! –

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