2011-09-25 57 views
8

Tôi có một repo có nhiều tập lệnh. Một trong số đó đặc biệt hữu ích và tôi muốn chia sẻ nó bằng GitHub.Chỉ đẩy một tệp vào GitHub từ một kho lưu trữ cục bộ

Làm cách nào để xuất một tệp (có lịch sử cam kết) sang repo GitHub mà không chia sẻ tất cả các tập lệnh khác từ cùng một repo?

Cái gì như:

git remote add 'origin' [email protected]:user/Project.git 
git push -u 'origin' ./useful-script.sh 

Nhưng làm thế nào để tôi chỉ định một tên tập tin duy nhất? Hay tôi nên tạo ra một loại cam kết 'một phần' đặc biệt nào đó?

Trả lời

3

Bạn sẽ phải sử dụng filter-branch để viết lại lịch sử của bạn và tước tất cả mọi thứ nhưng đó tập tin duy nhất:

git filter-branch --index-filter ' 
    git rm --cached -f -r .; 
    git add ./useful-script.sh; 
' --all 

nên thực hiện công việc.

Nếu --index-filter không hoạt động (Tôi không chắc chắn về điều đó git add ở đó), hãy thử `--tree-filter 'với cùng một đối số.

+1

'git filter-branch --index-filter' git rm --cached -fr. ; git add ./useful-script.sh '- --all'. Tôi đoán tập tin đã bị xóa bởi 'rm' và điều này đưa ra một lỗi:" fatal: pathspec 'amarocker' không khớp với bất kỳ tập tin nào ". – kolypto

+1

Đã thử với xargs: 'git filter-branch --index-filter 'git ls-tree -r -name-master | fgrep -v useful-script.sh | xargs git rm --cached -fr '- --all'. Thật không may, điều này lá cam kết liên quan đến các tập tin khác còn nguyên vẹn: ( – kolypto

+0

Kết quả tương tự. Cảm ơn, ít nhất điều này mang lại một số hy vọng :) – kolypto

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