2010-06-08 44 views
10

Tôi rất mới với Git và tôi có một vấn đề nhỏ.Làm cách nào để xuất tất cả các tệp đã thay đổi/thêm vào từ Git?

Trong SVN [điều này cảm thấy như một câu chuyện duy nhất và ngựa bởi chú Albert .. "trong chiến tranh ..."] khi tôi muốn cập nhật một trang web sản xuất với những thay đổi mới nhất của tôi, tôi sẽ làm khác biệt trong TSVN và xuất tất cả các tệp đã thay đổi/thêm vào giữa hai lần sửa đổi. Như bạn có thể tưởng tượng, sau đó rất dễ dàng để đưa các tệp đó vào một trang web sản xuất.

Tuy nhiên, có vẻ như tôi không thể tìm thấy tùy chọn "xuất tệp đã thay đổi" trong Git. Tôi có thể thực hiện một khác biệt và xem các thay đổi, tôi có thể nhận được một danh sách của các tệp nhưng tôi thực sự không thể xuất chúng. Có cách nào hợp lý để làm điều này không? Tôi thiếu một cái gì đó đơn giản?

Chỉ cần làm rõ một lần nữa, tôi cần xuất tất cả thay đổi giữa hai cam kết cụ thể.

Cảm ơn trước!

Trả lời

14

Bạn muốn xuất chúng như thế nào? Bạn nói bạn đã có một danh sách; Nhiều hơn những gì bạn muốn? Giả sử bạn đang nhận được danh sách của mình với git diff --name-only ...

git archive --output=<file> HEAD $(git diff --name-only ...) 

tar -czf <file> $(git diff --name-only ...) 

cp $(git diff --name-only ...) <export-directory> 

Điều gì đó tương tự?

Hoặc bạn thậm chí có thể sử dụng chính bản thân nó - nó có thể được áp dụng với git apply (hoặc thậm chí patch, tôi tin).

+1

tùy chọn đầu tiên đang làm việc cho tôi! Lý tưởng nhất, tôi sẽ sử dụng biến thể cp nhưng giữ cấu trúc thư mục (tôi đoán nó là một vấn đề của các thông số cho git diff?) Tôi không thể tin rằng đó là đơn giản .. cảm ơn! –

+0

Chỉ cần nhìn thấy chỉnh sửa của bạn .. Thật không may, tôi không thể sử dụng 'git apply' hoặc' patch', tôi chỉ có quyền truy cập FTP vào trang web: -/ –

+0

@dr Hannibal Lecter: Vâng, tôi cho rằng bạn cần phải vượt qua thực tế các tập tin. Và vâng, lệnh thay thế ('$ (...)') là một trong những thứ quan trọng làm cho mọi thứ có thể (và đơn giản) trong các shell Linux. – Cascabel

2

vay từ vài trong số các câu trả lời trong here, đây là một cách khác để xuất tập tin được sửa đổi trong không gian làm việc:

git diff --diff-filter=ACMRT --name-only HEAD | xargs tar -rf export.tar 

Bạn có thể cần phải thực hiện như sau trước để thêm các tập tin untracked, nếu bạn cần bao gồm chúng trong các diff:

git add * 

[này hoạt động trong git-bash trong Windows]

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